update django and lucene
authorymh <ymh.work@gmail.com>
Tue, 25 May 2010 02:43:45 +0200
changeset 29 cc9b7e14412b
parent 28 b758351d191f
child 30 239f9bcae806
update django and lucene
.hgignore
.pydevproject
sql/update_db_0_10_to_0_11.sql
web/blinkster/handler.py
web/blinkster/ldt/__init__.py
web/blinkster/ldt/contentindexer.py
web/blinkster/ldt/fileimport.py
web/blinkster/ldt/models.py
web/blinkster/ldt/utils.py
web/blinkster/ldt/views.py
web/blinkster/settings.py
web/blinkster/templates/segment_detail.html
web/blinkster/urls.py
web/blinkster/views.py
web/lib/arch/osx/jcc/__init__.py
web/lib/arch/osx/jcc/__main__.py
web/lib/arch/osx/jcc/_jcc.so
web/lib/arch/osx/jcc/config.py
web/lib/arch/osx/jcc/cpp.py
web/lib/arch/osx/jcc/patches/patch.4195
web/lib/arch/osx/jcc/patches/patch.43.0.6c11
web/lib/arch/osx/jcc/patches/patch.43.0.6c7
web/lib/arch/osx/jcc/python.py
web/lib/arch/osx/jcc/sources/JArray.cpp
web/lib/arch/osx/jcc/sources/JArray.h
web/lib/arch/osx/jcc/sources/JCCEnv.cpp
web/lib/arch/osx/jcc/sources/JCCEnv.h
web/lib/arch/osx/jcc/sources/JObject.cpp
web/lib/arch/osx/jcc/sources/JObject.h
web/lib/arch/osx/jcc/sources/functions.cpp
web/lib/arch/osx/jcc/sources/functions.h
web/lib/arch/osx/jcc/sources/jcc.cpp
web/lib/arch/osx/jcc/sources/jccfuncs.h
web/lib/arch/osx/jcc/sources/macros.h
web/lib/arch/osx/jcc/sources/types.cpp
web/lib/arch/osx/libjcc.dylib
web/lib/arch/osx/lucene/__init__.py
web/lib/arch/osx/lucene/_lucene.so
web/lib/arch/osx/lucene/collections.py
web/lib/arch/osx/lucene/extensions.jar
web/lib/arch/osx/lucene/lucene-analyzers-3.0.1.jar
web/lib/arch/osx/lucene/lucene-core-3.0.1.jar
web/lib/arch/osx/lucene/lucene-highlighter-3.0.1.jar
web/lib/arch/osx/lucene/lucene-memory-3.0.1.jar
web/lib/arch/osx/lucene/lucene-queries-3.0.1.jar
web/lib/arch/osx/lucene/lucene-regex-3.0.1.jar
web/lib/arch/osx/lucene/lucene-snowball-3.0.1.jar
web/lib/django/__init__.py
web/lib/django/conf/__init__.py
web/lib/django/conf/global_settings.py
web/lib/django/conf/locale/__init__.py
web/lib/django/conf/locale/ar/__init__.py
web/lib/django/conf/locale/ar/formats.py
web/lib/django/conf/locale/bg/__init__.py
web/lib/django/conf/locale/bg/formats.py
web/lib/django/conf/locale/bn/__init__.py
web/lib/django/conf/locale/bn/formats.py
web/lib/django/conf/locale/bs/LC_MESSAGES/django.mo
web/lib/django/conf/locale/bs/LC_MESSAGES/django.po
web/lib/django/conf/locale/ca/LC_MESSAGES/django.mo
web/lib/django/conf/locale/ca/LC_MESSAGES/django.po
web/lib/django/conf/locale/ca/__init__.py
web/lib/django/conf/locale/ca/formats.py
web/lib/django/conf/locale/cs/LC_MESSAGES/django.mo
web/lib/django/conf/locale/cs/LC_MESSAGES/django.po
web/lib/django/conf/locale/cs/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/cs/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/cs/__init__.py
web/lib/django/conf/locale/cs/formats.py
web/lib/django/conf/locale/cy/__init__.py
web/lib/django/conf/locale/cy/formats.py
web/lib/django/conf/locale/da/LC_MESSAGES/django.mo
web/lib/django/conf/locale/da/LC_MESSAGES/django.po
web/lib/django/conf/locale/da/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/da/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/da/__init__.py
web/lib/django/conf/locale/da/formats.py
web/lib/django/conf/locale/de/LC_MESSAGES/django.mo
web/lib/django/conf/locale/de/LC_MESSAGES/django.po
web/lib/django/conf/locale/de/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/de/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/de/__init__.py
web/lib/django/conf/locale/de/formats.py
web/lib/django/conf/locale/el/__init__.py
web/lib/django/conf/locale/el/formats.py
web/lib/django/conf/locale/en/__init__.py
web/lib/django/conf/locale/en/formats.py
web/lib/django/conf/locale/en_GB/LC_MESSAGES/django.mo
web/lib/django/conf/locale/en_GB/LC_MESSAGES/django.po
web/lib/django/conf/locale/en_GB/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/en_GB/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/en_GB/__init__.py
web/lib/django/conf/locale/en_GB/formats.py
web/lib/django/conf/locale/es/LC_MESSAGES/django.mo
web/lib/django/conf/locale/es/LC_MESSAGES/django.po
web/lib/django/conf/locale/es/__init__.py
web/lib/django/conf/locale/es/formats.py
web/lib/django/conf/locale/es_AR/LC_MESSAGES/django.mo
web/lib/django/conf/locale/es_AR/LC_MESSAGES/django.po
web/lib/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/es_AR/__init__.py
web/lib/django/conf/locale/es_AR/formats.py
web/lib/django/conf/locale/et/__init__.py
web/lib/django/conf/locale/et/formats.py
web/lib/django/conf/locale/eu/__init__.py
web/lib/django/conf/locale/eu/formats.py
web/lib/django/conf/locale/fa/__init__.py
web/lib/django/conf/locale/fa/formats.py
web/lib/django/conf/locale/fi/LC_MESSAGES/django.mo
web/lib/django/conf/locale/fi/LC_MESSAGES/django.po
web/lib/django/conf/locale/fi/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/fi/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/fi/__init__.py
web/lib/django/conf/locale/fi/formats.py
web/lib/django/conf/locale/fr/LC_MESSAGES/django.mo
web/lib/django/conf/locale/fr/LC_MESSAGES/django.po
web/lib/django/conf/locale/fr/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/fr/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/fr/__init__.py
web/lib/django/conf/locale/fr/formats.py
web/lib/django/conf/locale/fy_NL/LC_MESSAGES/django.mo
web/lib/django/conf/locale/fy_NL/LC_MESSAGES/django.po
web/lib/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/ga/LC_MESSAGES/django.mo
web/lib/django/conf/locale/ga/LC_MESSAGES/django.po
web/lib/django/conf/locale/ga/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/ga/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/ga/__init__.py
web/lib/django/conf/locale/ga/formats.py
web/lib/django/conf/locale/gl/__init__.py
web/lib/django/conf/locale/gl/formats.py
web/lib/django/conf/locale/he/LC_MESSAGES/django.mo
web/lib/django/conf/locale/he/LC_MESSAGES/django.po
web/lib/django/conf/locale/he/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/he/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/he/__init__.py
web/lib/django/conf/locale/he/formats.py
web/lib/django/conf/locale/hi/__init__.py
web/lib/django/conf/locale/hi/formats.py
web/lib/django/conf/locale/hr/LC_MESSAGES/django.mo
web/lib/django/conf/locale/hr/LC_MESSAGES/django.po
web/lib/django/conf/locale/hr/__init__.py
web/lib/django/conf/locale/hr/formats.py
web/lib/django/conf/locale/hu/__init__.py
web/lib/django/conf/locale/hu/formats.py
web/lib/django/conf/locale/is/__init__.py
web/lib/django/conf/locale/is/formats.py
web/lib/django/conf/locale/it/LC_MESSAGES/django.mo
web/lib/django/conf/locale/it/LC_MESSAGES/django.po
web/lib/django/conf/locale/it/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/it/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/it/__init__.py
web/lib/django/conf/locale/it/formats.py
web/lib/django/conf/locale/ja/LC_MESSAGES/django.mo
web/lib/django/conf/locale/ja/LC_MESSAGES/django.po
web/lib/django/conf/locale/ja/__init__.py
web/lib/django/conf/locale/ja/formats.py
web/lib/django/conf/locale/ka/__init__.py
web/lib/django/conf/locale/ka/formats.py
web/lib/django/conf/locale/km/__init__.py
web/lib/django/conf/locale/km/formats.py
web/lib/django/conf/locale/kn/__init__.py
web/lib/django/conf/locale/kn/formats.py
web/lib/django/conf/locale/ko/__init__.py
web/lib/django/conf/locale/ko/formats.py
web/lib/django/conf/locale/lt/__init__.py
web/lib/django/conf/locale/lt/formats.py
web/lib/django/conf/locale/lv/__init__.py
web/lib/django/conf/locale/lv/formats.py
web/lib/django/conf/locale/mk/LC_MESSAGES/django.mo
web/lib/django/conf/locale/mk/LC_MESSAGES/django.po
web/lib/django/conf/locale/mk/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/mk/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/mk/__init__.py
web/lib/django/conf/locale/mk/formats.py
web/lib/django/conf/locale/mn/LC_MESSAGES/django.mo
web/lib/django/conf/locale/mn/LC_MESSAGES/django.po
web/lib/django/conf/locale/mn/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/mn/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/mn/__init__.py
web/lib/django/conf/locale/mn/formats.py
web/lib/django/conf/locale/nb/LC_MESSAGES/django.mo
web/lib/django/conf/locale/nb/LC_MESSAGES/django.po
web/lib/django/conf/locale/nb/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/nb/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/nb/__init__.py
web/lib/django/conf/locale/nb/formats.py
web/lib/django/conf/locale/nl/LC_MESSAGES/django.mo
web/lib/django/conf/locale/nl/LC_MESSAGES/django.po
web/lib/django/conf/locale/nl/__init__.py
web/lib/django/conf/locale/nl/formats.py
web/lib/django/conf/locale/nn/LC_MESSAGES/django.mo
web/lib/django/conf/locale/nn/LC_MESSAGES/django.po
web/lib/django/conf/locale/nn/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/nn/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/nn/__init__.py
web/lib/django/conf/locale/nn/formats.py
web/lib/django/conf/locale/no/LC_MESSAGES/django.mo
web/lib/django/conf/locale/no/LC_MESSAGES/django.po
web/lib/django/conf/locale/no/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/no/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/no/__init__.py
web/lib/django/conf/locale/no/formats.py
web/lib/django/conf/locale/pl/LC_MESSAGES/django.mo
web/lib/django/conf/locale/pl/LC_MESSAGES/django.po
web/lib/django/conf/locale/pl/__init__.py
web/lib/django/conf/locale/pl/formats.py
web/lib/django/conf/locale/pt/LC_MESSAGES/django.mo
web/lib/django/conf/locale/pt/LC_MESSAGES/django.po
web/lib/django/conf/locale/pt/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/pt/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/pt/__init__.py
web/lib/django/conf/locale/pt/formats.py
web/lib/django/conf/locale/pt_BR/LC_MESSAGES/django.mo
web/lib/django/conf/locale/pt_BR/LC_MESSAGES/django.po
web/lib/django/conf/locale/pt_BR/__init__.py
web/lib/django/conf/locale/pt_BR/formats.py
web/lib/django/conf/locale/ro/LC_MESSAGES/django.mo
web/lib/django/conf/locale/ro/LC_MESSAGES/django.po
web/lib/django/conf/locale/ro/__init__.py
web/lib/django/conf/locale/ro/formats.py
web/lib/django/conf/locale/ru/LC_MESSAGES/django.mo
web/lib/django/conf/locale/ru/LC_MESSAGES/django.po
web/lib/django/conf/locale/ru/__init__.py
web/lib/django/conf/locale/ru/formats.py
web/lib/django/conf/locale/sk/LC_MESSAGES/django.mo
web/lib/django/conf/locale/sk/LC_MESSAGES/django.po
web/lib/django/conf/locale/sk/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/sk/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/sk/__init__.py
web/lib/django/conf/locale/sk/formats.py
web/lib/django/conf/locale/sl/__init__.py
web/lib/django/conf/locale/sl/formats.py
web/lib/django/conf/locale/sq/LC_MESSAGES/django.mo
web/lib/django/conf/locale/sq/LC_MESSAGES/django.po
web/lib/django/conf/locale/sq/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/sq/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/sr/LC_MESSAGES/django.mo
web/lib/django/conf/locale/sr/LC_MESSAGES/django.po
web/lib/django/conf/locale/sr/__init__.py
web/lib/django/conf/locale/sr/formats.py
web/lib/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo
web/lib/django/conf/locale/sr_Latn/LC_MESSAGES/django.po
web/lib/django/conf/locale/sr_Latn/__init__.py
web/lib/django/conf/locale/sr_Latn/formats.py
web/lib/django/conf/locale/sv/LC_MESSAGES/django.mo
web/lib/django/conf/locale/sv/LC_MESSAGES/django.po
web/lib/django/conf/locale/sv/__init__.py
web/lib/django/conf/locale/sv/formats.py
web/lib/django/conf/locale/ta/__init__.py
web/lib/django/conf/locale/ta/formats.py
web/lib/django/conf/locale/te/__init__.py
web/lib/django/conf/locale/te/formats.py
web/lib/django/conf/locale/th/__init__.py
web/lib/django/conf/locale/th/formats.py
web/lib/django/conf/locale/tr/LC_MESSAGES/django.mo
web/lib/django/conf/locale/tr/LC_MESSAGES/django.po
web/lib/django/conf/locale/tr/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/tr/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/tr/__init__.py
web/lib/django/conf/locale/tr/formats.py
web/lib/django/conf/locale/uk/LC_MESSAGES/django.mo
web/lib/django/conf/locale/uk/LC_MESSAGES/django.po
web/lib/django/conf/locale/uk/__init__.py
web/lib/django/conf/locale/uk/formats.py
web/lib/django/conf/locale/vi/LC_MESSAGES/django.mo
web/lib/django/conf/locale/vi/LC_MESSAGES/django.po
web/lib/django/conf/locale/vi/LC_MESSAGES/djangojs.mo
web/lib/django/conf/locale/vi/LC_MESSAGES/djangojs.po
web/lib/django/conf/locale/vi/__init__.py
web/lib/django/conf/locale/vi/formats.py
web/lib/django/conf/locale/zh_CN/__init__.py
web/lib/django/conf/locale/zh_CN/formats.py
web/lib/django/conf/locale/zh_TW/__init__.py
web/lib/django/conf/locale/zh_TW/formats.py
web/lib/django/conf/project_template/settings.py
web/lib/django/contrib/admin/__init__.py
web/lib/django/contrib/admin/actions.py
web/lib/django/contrib/admin/helpers.py
web/lib/django/contrib/admin/media/css/base.css
web/lib/django/contrib/admin/media/css/changelists.css
web/lib/django/contrib/admin/media/css/forms.css
web/lib/django/contrib/admin/media/css/ie.css
web/lib/django/contrib/admin/media/css/rtl.css
web/lib/django/contrib/admin/media/css/widgets.css
web/lib/django/contrib/admin/media/js/LICENSE-JQUERY.txt
web/lib/django/contrib/admin/media/js/SelectFilter2.js
web/lib/django/contrib/admin/media/js/actions.js
web/lib/django/contrib/admin/media/js/actions.min.js
web/lib/django/contrib/admin/media/js/admin/CollapsedFieldsets.js
web/lib/django/contrib/admin/media/js/admin/DateTimeShortcuts.js
web/lib/django/contrib/admin/media/js/calendar.js
web/lib/django/contrib/admin/media/js/collapse.js
web/lib/django/contrib/admin/media/js/collapse.min.js
web/lib/django/contrib/admin/media/js/compress.py
web/lib/django/contrib/admin/media/js/core.js
web/lib/django/contrib/admin/media/js/inlines.js
web/lib/django/contrib/admin/media/js/inlines.min.js
web/lib/django/contrib/admin/media/js/jquery.init.js
web/lib/django/contrib/admin/media/js/jquery.js
web/lib/django/contrib/admin/media/js/jquery.min.js
web/lib/django/contrib/admin/media/js/prepopulate.js
web/lib/django/contrib/admin/media/js/prepopulate.min.js
web/lib/django/contrib/admin/options.py
web/lib/django/contrib/admin/sites.py
web/lib/django/contrib/admin/templates/admin/actions.html
web/lib/django/contrib/admin/templates/admin/auth/user/add_form.html
web/lib/django/contrib/admin/templates/admin/auth/user/change_password.html
web/lib/django/contrib/admin/templates/admin/base.html
web/lib/django/contrib/admin/templates/admin/change_form.html
web/lib/django/contrib/admin/templates/admin/change_list.html
web/lib/django/contrib/admin/templates/admin/change_list_results.html
web/lib/django/contrib/admin/templates/admin/delete_confirmation.html
web/lib/django/contrib/admin/templates/admin/delete_selected_confirmation.html
web/lib/django/contrib/admin/templates/admin/edit_inline/stacked.html
web/lib/django/contrib/admin/templates/admin/edit_inline/tabular.html
web/lib/django/contrib/admin/templates/admin/includes/fieldset.html
web/lib/django/contrib/admin/templates/admin/login.html
web/lib/django/contrib/admin/templates/admin/object_history.html
web/lib/django/contrib/admin/templates/admin/prepopulated_fields_js.html
web/lib/django/contrib/admin/templates/admin/template_validator.html
web/lib/django/contrib/admin/templates/registration/password_change_form.html
web/lib/django/contrib/admin/templates/registration/password_reset_confirm.html
web/lib/django/contrib/admin/templates/registration/password_reset_email.html
web/lib/django/contrib/admin/templates/registration/password_reset_form.html
web/lib/django/contrib/admin/templatetags/admin_list.py
web/lib/django/contrib/admin/templatetags/adminmedia.py
web/lib/django/contrib/admin/templatetags/log.py
web/lib/django/contrib/admin/util.py
web/lib/django/contrib/admin/validation.py
web/lib/django/contrib/admin/views/decorators.py
web/lib/django/contrib/admin/views/main.py
web/lib/django/contrib/admin/views/template.py
web/lib/django/contrib/admin/widgets.py
web/lib/django/contrib/admindocs/models.py
web/lib/django/contrib/admindocs/tests/__init__.py
web/lib/django/contrib/admindocs/tests/fields.py
web/lib/django/contrib/admindocs/views.py
web/lib/django/contrib/auth/__init__.py
web/lib/django/contrib/auth/admin.py
web/lib/django/contrib/auth/backends.py
web/lib/django/contrib/auth/context_processors.py
web/lib/django/contrib/auth/decorators.py
web/lib/django/contrib/auth/forms.py
web/lib/django/contrib/auth/management/commands/changepassword.py
web/lib/django/contrib/auth/models.py
web/lib/django/contrib/auth/tests/__init__.py
web/lib/django/contrib/auth/tests/auth_backends.py
web/lib/django/contrib/auth/tests/decorators.py
web/lib/django/contrib/auth/tests/forms.py
web/lib/django/contrib/auth/tests/models.py
web/lib/django/contrib/auth/tests/remote_user.py
web/lib/django/contrib/auth/tests/templates/registration/password_reset_complete.html
web/lib/django/contrib/auth/tests/templates/registration/password_reset_confirm.html
web/lib/django/contrib/auth/tests/templates/registration/password_reset_done.html
web/lib/django/contrib/auth/tests/templates/registration/password_reset_email.html
web/lib/django/contrib/auth/tests/templates/registration/password_reset_form.html
web/lib/django/contrib/auth/tests/views.py
web/lib/django/contrib/auth/views.py
web/lib/django/contrib/comments/admin.py
web/lib/django/contrib/comments/feeds.py
web/lib/django/contrib/comments/forms.py
web/lib/django/contrib/comments/models.py
web/lib/django/contrib/comments/moderation.py
web/lib/django/contrib/comments/templates/comments/approve.html
web/lib/django/contrib/comments/templates/comments/delete.html
web/lib/django/contrib/comments/templates/comments/flag.html
web/lib/django/contrib/comments/templates/comments/form.html
web/lib/django/contrib/comments/templates/comments/list.html
web/lib/django/contrib/comments/templates/comments/moderation_queue.html
web/lib/django/contrib/comments/templates/comments/preview.html
web/lib/django/contrib/comments/templatetags/comments.py
web/lib/django/contrib/comments/urls.py
web/lib/django/contrib/comments/views/comments.py
web/lib/django/contrib/comments/views/moderation.py
web/lib/django/contrib/comments/views/utils.py
web/lib/django/contrib/contenttypes/generic.py
web/lib/django/contrib/contenttypes/management.py
web/lib/django/contrib/contenttypes/models.py
web/lib/django/contrib/contenttypes/views.py
web/lib/django/contrib/csrf/middleware.py
web/lib/django/contrib/csrf/models.py
web/lib/django/contrib/csrf/tests.py
web/lib/django/contrib/databrowse/datastructures.py
web/lib/django/contrib/databrowse/plugins/calendars.py
web/lib/django/contrib/databrowse/templates/databrowse/calendar_day.html
web/lib/django/contrib/databrowse/templates/databrowse/calendar_main.html
web/lib/django/contrib/databrowse/templates/databrowse/calendar_month.html
web/lib/django/contrib/flatpages/views.py
web/lib/django/contrib/formtools/preview.py
web/lib/django/contrib/formtools/templates/formtools/form.html
web/lib/django/contrib/formtools/templates/formtools/preview.html
web/lib/django/contrib/formtools/tests.py
web/lib/django/contrib/formtools/utils.py
web/lib/django/contrib/formtools/wizard.py
web/lib/django/contrib/gis/admin/options.py
web/lib/django/contrib/gis/db/backend/__init__.py
web/lib/django/contrib/gis/db/backend/adaptor.py
web/lib/django/contrib/gis/db/backend/base.py
web/lib/django/contrib/gis/db/backend/mysql/__init__.py
web/lib/django/contrib/gis/db/backend/mysql/creation.py
web/lib/django/contrib/gis/db/backend/mysql/field.py
web/lib/django/contrib/gis/db/backend/mysql/query.py
web/lib/django/contrib/gis/db/backend/oracle/__init__.py
web/lib/django/contrib/gis/db/backend/oracle/adaptor.py
web/lib/django/contrib/gis/db/backend/oracle/creation.py
web/lib/django/contrib/gis/db/backend/oracle/field.py
web/lib/django/contrib/gis/db/backend/oracle/models.py
web/lib/django/contrib/gis/db/backend/oracle/query.py
web/lib/django/contrib/gis/db/backend/postgis/__init__.py
web/lib/django/contrib/gis/db/backend/postgis/adaptor.py
web/lib/django/contrib/gis/db/backend/postgis/creation.py
web/lib/django/contrib/gis/db/backend/postgis/field.py
web/lib/django/contrib/gis/db/backend/postgis/management.py
web/lib/django/contrib/gis/db/backend/postgis/models.py
web/lib/django/contrib/gis/db/backend/postgis/query.py
web/lib/django/contrib/gis/db/backend/spatialite/__init__.py
web/lib/django/contrib/gis/db/backend/spatialite/adaptor.py
web/lib/django/contrib/gis/db/backend/spatialite/creation.py
web/lib/django/contrib/gis/db/backend/spatialite/field.py
web/lib/django/contrib/gis/db/backend/spatialite/models.py
web/lib/django/contrib/gis/db/backend/spatialite/query.py
web/lib/django/contrib/gis/db/backend/util.py
web/lib/django/contrib/gis/db/backends/__init__.py
web/lib/django/contrib/gis/db/backends/adapter.py
web/lib/django/contrib/gis/db/backends/base.py
web/lib/django/contrib/gis/db/backends/mysql/__init__.py
web/lib/django/contrib/gis/db/backends/mysql/base.py
web/lib/django/contrib/gis/db/backends/mysql/creation.py
web/lib/django/contrib/gis/db/backends/mysql/introspection.py
web/lib/django/contrib/gis/db/backends/mysql/operations.py
web/lib/django/contrib/gis/db/backends/oracle/__init__.py
web/lib/django/contrib/gis/db/backends/oracle/adapter.py
web/lib/django/contrib/gis/db/backends/oracle/base.py
web/lib/django/contrib/gis/db/backends/oracle/compiler.py
web/lib/django/contrib/gis/db/backends/oracle/creation.py
web/lib/django/contrib/gis/db/backends/oracle/introspection.py
web/lib/django/contrib/gis/db/backends/oracle/models.py
web/lib/django/contrib/gis/db/backends/oracle/operations.py
web/lib/django/contrib/gis/db/backends/postgis/__init__.py
web/lib/django/contrib/gis/db/backends/postgis/adapter.py
web/lib/django/contrib/gis/db/backends/postgis/base.py
web/lib/django/contrib/gis/db/backends/postgis/creation.py
web/lib/django/contrib/gis/db/backends/postgis/introspection.py
web/lib/django/contrib/gis/db/backends/postgis/models.py
web/lib/django/contrib/gis/db/backends/postgis/operations.py
web/lib/django/contrib/gis/db/backends/spatialite/__init__.py
web/lib/django/contrib/gis/db/backends/spatialite/adapter.py
web/lib/django/contrib/gis/db/backends/spatialite/base.py
web/lib/django/contrib/gis/db/backends/spatialite/client.py
web/lib/django/contrib/gis/db/backends/spatialite/creation.py
web/lib/django/contrib/gis/db/backends/spatialite/introspection.py
web/lib/django/contrib/gis/db/backends/spatialite/models.py
web/lib/django/contrib/gis/db/backends/spatialite/operations.py
web/lib/django/contrib/gis/db/backends/util.py
web/lib/django/contrib/gis/db/models/aggregates.py
web/lib/django/contrib/gis/db/models/fields.py
web/lib/django/contrib/gis/db/models/fields/__init__.py
web/lib/django/contrib/gis/db/models/manager.py
web/lib/django/contrib/gis/db/models/proxy.py
web/lib/django/contrib/gis/db/models/query.py
web/lib/django/contrib/gis/db/models/sql/aggregates.py
web/lib/django/contrib/gis/db/models/sql/compiler.py
web/lib/django/contrib/gis/db/models/sql/conversion.py
web/lib/django/contrib/gis/db/models/sql/query.py
web/lib/django/contrib/gis/db/models/sql/subqueries.py
web/lib/django/contrib/gis/db/models/sql/where.py
web/lib/django/contrib/gis/gdal/__init__.py
web/lib/django/contrib/gis/gdal/base.py
web/lib/django/contrib/gis/gdal/geometries.py
web/lib/django/contrib/gis/gdal/geomtype.py
web/lib/django/contrib/gis/gdal/layer.py
web/lib/django/contrib/gis/gdal/libgdal.py
web/lib/django/contrib/gis/gdal/prototypes/ds.py
web/lib/django/contrib/gis/gdal/prototypes/errcheck.py
web/lib/django/contrib/gis/gdal/prototypes/geom.py
web/lib/django/contrib/gis/gdal/tests/test_ds.py
web/lib/django/contrib/gis/gdal/tests/test_envelope.py
web/lib/django/contrib/gis/gdal/tests/test_geom.py
web/lib/django/contrib/gis/geometry/__init__.py
web/lib/django/contrib/gis/geometry/backend/__init__.py
web/lib/django/contrib/gis/geometry/backend/geos.py
web/lib/django/contrib/gis/geometry/regex.py
web/lib/django/contrib/gis/geos/collections.py
web/lib/django/contrib/gis/geos/geometry.py
web/lib/django/contrib/gis/geos/io.py
web/lib/django/contrib/gis/geos/libgeos.py
web/lib/django/contrib/gis/geos/prototypes/coordseq.py
web/lib/django/contrib/gis/geos/prototypes/errcheck.py
web/lib/django/contrib/gis/geos/prototypes/geom.py
web/lib/django/contrib/gis/geos/prototypes/io.py
web/lib/django/contrib/gis/geos/prototypes/misc.py
web/lib/django/contrib/gis/geos/prototypes/predicates.py
web/lib/django/contrib/gis/geos/prototypes/prepared.py
web/lib/django/contrib/gis/geos/prototypes/threadsafe.py
web/lib/django/contrib/gis/geos/prototypes/topology.py
web/lib/django/contrib/gis/geos/tests/test_geos.py
web/lib/django/contrib/gis/geos/tests/test_geos_mutation.py
web/lib/django/contrib/gis/management/commands/inspectdb.py
web/lib/django/contrib/gis/measure.py
web/lib/django/contrib/gis/models.py
web/lib/django/contrib/gis/sitemaps/views.py
web/lib/django/contrib/gis/templates/gis/admin/openlayers.js
web/lib/django/contrib/gis/tests/__init__.py
web/lib/django/contrib/gis/tests/data/test_vrt/test_vrt.vrt
web/lib/django/contrib/gis/tests/distapp/models.py
web/lib/django/contrib/gis/tests/distapp/tests.py
web/lib/django/contrib/gis/tests/geo3d/__init__.py
web/lib/django/contrib/gis/tests/geo3d/models.py
web/lib/django/contrib/gis/tests/geo3d/tests.py
web/lib/django/contrib/gis/tests/geo3d/views.py
web/lib/django/contrib/gis/tests/geoapp/fixtures/initial_data.json
web/lib/django/contrib/gis/tests/geoapp/models.py
web/lib/django/contrib/gis/tests/geoapp/sql/city.mysql.sql
web/lib/django/contrib/gis/tests/geoapp/sql/city.oracle.sql
web/lib/django/contrib/gis/tests/geoapp/sql/city.postgresql_psycopg2.sql
web/lib/django/contrib/gis/tests/geoapp/sql/city.sqlite3.sql
web/lib/django/contrib/gis/tests/geoapp/sql/co.wkt
web/lib/django/contrib/gis/tests/geoapp/sql/country.mysql.sql
web/lib/django/contrib/gis/tests/geoapp/sql/country.postgresql_psycopg2.sql
web/lib/django/contrib/gis/tests/geoapp/sql/country.sqlite3.sql
web/lib/django/contrib/gis/tests/geoapp/sql/ks.wkt
web/lib/django/contrib/gis/tests/geoapp/sql/nz.wkt
web/lib/django/contrib/gis/tests/geoapp/sql/state.mysql.sql
web/lib/django/contrib/gis/tests/geoapp/sql/state.postgresql_psycopg2.sql
web/lib/django/contrib/gis/tests/geoapp/sql/state.sqlite3.sql
web/lib/django/contrib/gis/tests/geoapp/sql/tx.wkt
web/lib/django/contrib/gis/tests/geoapp/test_feeds.py
web/lib/django/contrib/gis/tests/geoapp/test_regress.py
web/lib/django/contrib/gis/tests/geoapp/tests.py
web/lib/django/contrib/gis/tests/geoapp/tests_mysql.py
web/lib/django/contrib/gis/tests/geogapp/__init__.py
web/lib/django/contrib/gis/tests/geogapp/fixtures/initial_data.json
web/lib/django/contrib/gis/tests/geogapp/models.py
web/lib/django/contrib/gis/tests/geogapp/tests.py
web/lib/django/contrib/gis/tests/geometries.py
web/lib/django/contrib/gis/tests/layermap/models.py
web/lib/django/contrib/gis/tests/layermap/tests.py
web/lib/django/contrib/gis/tests/layermap/tests_mysql.py
web/lib/django/contrib/gis/tests/relatedapp/tests.py
web/lib/django/contrib/gis/tests/relatedapp/tests_mysql.py
web/lib/django/contrib/gis/tests/test_measure.py
web/lib/django/contrib/gis/tests/test_spatialrefsys.py
web/lib/django/contrib/gis/tests/utils.py
web/lib/django/contrib/gis/utils/__init__.py
web/lib/django/contrib/gis/utils/layermapping.py
web/lib/django/contrib/gis/utils/ogrinfo.py
web/lib/django/contrib/gis/utils/srs.py
web/lib/django/contrib/humanize/templatetags/humanize.py
web/lib/django/contrib/localflavor/ar/forms.py
web/lib/django/contrib/localflavor/au/forms.py
web/lib/django/contrib/localflavor/br/forms.py
web/lib/django/contrib/localflavor/ca/forms.py
web/lib/django/contrib/localflavor/ch/forms.py
web/lib/django/contrib/localflavor/cl/forms.py
web/lib/django/contrib/localflavor/cz/forms.py
web/lib/django/contrib/localflavor/de/forms.py
web/lib/django/contrib/localflavor/es/forms.py
web/lib/django/contrib/localflavor/fi/fi_municipalities.py
web/lib/django/contrib/localflavor/fi/forms.py
web/lib/django/contrib/localflavor/fr/forms.py
web/lib/django/contrib/localflavor/fr/fr_department.py
web/lib/django/contrib/localflavor/id/__init__.py
web/lib/django/contrib/localflavor/id/forms.py
web/lib/django/contrib/localflavor/id/id_choices.py
web/lib/django/contrib/localflavor/ie/__init__.py
web/lib/django/contrib/localflavor/ie/forms.py
web/lib/django/contrib/localflavor/ie/ie_counties.py
web/lib/django/contrib/localflavor/in_/forms.py
web/lib/django/contrib/localflavor/is_/forms.py
web/lib/django/contrib/localflavor/it/forms.py
web/lib/django/contrib/localflavor/kw/__init__.py
web/lib/django/contrib/localflavor/kw/forms.py
web/lib/django/contrib/localflavor/nl/forms.py
web/lib/django/contrib/localflavor/no/forms.py
web/lib/django/contrib/localflavor/pe/forms.py
web/lib/django/contrib/localflavor/pt/__init__.py
web/lib/django/contrib/localflavor/pt/forms.py
web/lib/django/contrib/localflavor/ro/forms.py
web/lib/django/contrib/localflavor/se/__init__.py
web/lib/django/contrib/localflavor/se/forms.py
web/lib/django/contrib/localflavor/se/se_counties.py
web/lib/django/contrib/localflavor/se/utils.py
web/lib/django/contrib/localflavor/uk/forms.py
web/lib/django/contrib/localflavor/us/forms.py
web/lib/django/contrib/localflavor/us/models.py
web/lib/django/contrib/localflavor/uy/__init__.py
web/lib/django/contrib/localflavor/uy/forms.py
web/lib/django/contrib/localflavor/uy/util.py
web/lib/django/contrib/localflavor/uy/uy_departaments.py
web/lib/django/contrib/localflavor/za/forms.py
web/lib/django/contrib/markup/templatetags/markup.py
web/lib/django/contrib/messages/__init__.py
web/lib/django/contrib/messages/api.py
web/lib/django/contrib/messages/constants.py
web/lib/django/contrib/messages/context_processors.py
web/lib/django/contrib/messages/middleware.py
web/lib/django/contrib/messages/models.py
web/lib/django/contrib/messages/storage/__init__.py
web/lib/django/contrib/messages/storage/base.py
web/lib/django/contrib/messages/storage/cookie.py
web/lib/django/contrib/messages/storage/fallback.py
web/lib/django/contrib/messages/storage/session.py
web/lib/django/contrib/messages/storage/user_messages.py
web/lib/django/contrib/messages/tests/__init__.py
web/lib/django/contrib/messages/tests/base.py
web/lib/django/contrib/messages/tests/cookie.py
web/lib/django/contrib/messages/tests/fallback.py
web/lib/django/contrib/messages/tests/middleware.py
web/lib/django/contrib/messages/tests/session.py
web/lib/django/contrib/messages/tests/urls.py
web/lib/django/contrib/messages/tests/user_messages.py
web/lib/django/contrib/messages/utils.py
web/lib/django/contrib/sessions/backends/db.py
web/lib/django/contrib/sessions/models.py
web/lib/django/contrib/sites/management.py
web/lib/django/contrib/sites/managers.py
web/lib/django/contrib/syndication/feeds.py
web/lib/django/contrib/syndication/views.py
web/lib/django/core/cache/__init__.py
web/lib/django/core/cache/backends/base.py
web/lib/django/core/cache/backends/db.py
web/lib/django/core/cache/backends/dummy.py
web/lib/django/core/cache/backends/filebased.py
web/lib/django/core/cache/backends/locmem.py
web/lib/django/core/cache/backends/memcached.py
web/lib/django/core/context_processors.py
web/lib/django/core/exceptions.py
web/lib/django/core/files/images.py
web/lib/django/core/files/storage.py
web/lib/django/core/handlers/base.py
web/lib/django/core/mail.py
web/lib/django/core/mail/__init__.py
web/lib/django/core/mail/backends/__init__.py
web/lib/django/core/mail/backends/base.py
web/lib/django/core/mail/backends/console.py
web/lib/django/core/mail/backends/dummy.py
web/lib/django/core/mail/backends/filebased.py
web/lib/django/core/mail/backends/locmem.py
web/lib/django/core/mail/backends/smtp.py
web/lib/django/core/mail/message.py
web/lib/django/core/mail/utils.py
web/lib/django/core/management/__init__.py
web/lib/django/core/management/base.py
web/lib/django/core/management/color.py
web/lib/django/core/management/commands/compilemessages.py
web/lib/django/core/management/commands/createcachetable.py
web/lib/django/core/management/commands/dbshell.py
web/lib/django/core/management/commands/diffsettings.py
web/lib/django/core/management/commands/dumpdata.py
web/lib/django/core/management/commands/flush.py
web/lib/django/core/management/commands/inspectdb.py
web/lib/django/core/management/commands/loaddata.py
web/lib/django/core/management/commands/makemessages.py
web/lib/django/core/management/commands/reset.py
web/lib/django/core/management/commands/sql.py
web/lib/django/core/management/commands/sqlall.py
web/lib/django/core/management/commands/sqlclear.py
web/lib/django/core/management/commands/sqlcustom.py
web/lib/django/core/management/commands/sqlflush.py
web/lib/django/core/management/commands/sqlindexes.py
web/lib/django/core/management/commands/sqlreset.py
web/lib/django/core/management/commands/sqlsequencereset.py
web/lib/django/core/management/commands/syncdb.py
web/lib/django/core/management/commands/test.py
web/lib/django/core/management/sql.py
web/lib/django/core/management/validation.py
web/lib/django/core/serializers/__init__.py
web/lib/django/core/serializers/base.py
web/lib/django/core/serializers/json.py
web/lib/django/core/serializers/python.py
web/lib/django/core/serializers/pyyaml.py
web/lib/django/core/serializers/xml_serializer.py
web/lib/django/core/servers/basehttp.py
web/lib/django/core/urlresolvers.py
web/lib/django/core/validators.py
web/lib/django/core/xheaders.py
web/lib/django/db/__init__.py
web/lib/django/db/backends/__init__.py
web/lib/django/db/backends/creation.py
web/lib/django/db/backends/dummy/base.py
web/lib/django/db/backends/mysql/base.py
web/lib/django/db/backends/mysql/client.py
web/lib/django/db/backends/mysql/compiler.py
web/lib/django/db/backends/mysql/creation.py
web/lib/django/db/backends/mysql/introspection.py
web/lib/django/db/backends/mysql/validation.py
web/lib/django/db/backends/oracle/base.py
web/lib/django/db/backends/oracle/compiler.py
web/lib/django/db/backends/oracle/creation.py
web/lib/django/db/backends/oracle/introspection.py
web/lib/django/db/backends/oracle/query.py
web/lib/django/db/backends/postgresql/base.py
web/lib/django/db/backends/postgresql/client.py
web/lib/django/db/backends/postgresql/creation.py
web/lib/django/db/backends/postgresql/introspection.py
web/lib/django/db/backends/postgresql/operations.py
web/lib/django/db/backends/postgresql_psycopg2/base.py
web/lib/django/db/backends/sqlite3/base.py
web/lib/django/db/backends/sqlite3/client.py
web/lib/django/db/backends/sqlite3/creation.py
web/lib/django/db/backends/sqlite3/introspection.py
web/lib/django/db/backends/util.py
web/lib/django/db/models/aggregates.py
web/lib/django/db/models/base.py
web/lib/django/db/models/expressions.py
web/lib/django/db/models/fields/__init__.py
web/lib/django/db/models/fields/files.py
web/lib/django/db/models/fields/proxy.py
web/lib/django/db/models/fields/related.py
web/lib/django/db/models/fields/subclassing.py
web/lib/django/db/models/loading.py
web/lib/django/db/models/manager.py
web/lib/django/db/models/options.py
web/lib/django/db/models/query.py
web/lib/django/db/models/query_utils.py
web/lib/django/db/models/related.py
web/lib/django/db/models/signals.py
web/lib/django/db/models/sql/aggregates.py
web/lib/django/db/models/sql/compiler.py
web/lib/django/db/models/sql/datastructures.py
web/lib/django/db/models/sql/expressions.py
web/lib/django/db/models/sql/query.py
web/lib/django/db/models/sql/subqueries.py
web/lib/django/db/models/sql/where.py
web/lib/django/db/transaction.py
web/lib/django/db/utils.py
web/lib/django/dispatch/dispatcher.py
web/lib/django/forms/__init__.py
web/lib/django/forms/extras/widgets.py
web/lib/django/forms/fields.py
web/lib/django/forms/forms.py
web/lib/django/forms/formsets.py
web/lib/django/forms/models.py
web/lib/django/forms/util.py
web/lib/django/forms/widgets.py
web/lib/django/http/__init__.py
web/lib/django/middleware/common.py
web/lib/django/middleware/csrf.py
web/lib/django/middleware/doc.py
web/lib/django/shortcuts/__init__.py
web/lib/django/template/__init__.py
web/lib/django/template/context.py
web/lib/django/template/debug.py
web/lib/django/template/defaultfilters.py
web/lib/django/template/defaulttags.py
web/lib/django/template/loader.py
web/lib/django/template/loader_tags.py
web/lib/django/template/loaders/app_directories.py
web/lib/django/template/loaders/cached.py
web/lib/django/template/loaders/eggs.py
web/lib/django/template/loaders/filesystem.py
web/lib/django/template/smartif.py
web/lib/django/templatetags/__init__.py
web/lib/django/templatetags/cache.py
web/lib/django/templatetags/i18n.py
web/lib/django/test/client.py
web/lib/django/test/simple.py
web/lib/django/test/testcases.py
web/lib/django/test/utils.py
web/lib/django/utils/_decimal.py
web/lib/django/utils/cache.py
web/lib/django/utils/copycompat.py
web/lib/django/utils/datastructures.py
web/lib/django/utils/dateformat.py
web/lib/django/utils/datetime_safe.py
web/lib/django/utils/decorators.py
web/lib/django/utils/encoding.py
web/lib/django/utils/feedgenerator.py
web/lib/django/utils/formats.py
web/lib/django/utils/functional.py
web/lib/django/utils/hashcompat.py
web/lib/django/utils/itercompat.py
web/lib/django/utils/module_loading.py
web/lib/django/utils/numberformat.py
web/lib/django/utils/termcolors.py
web/lib/django/utils/text.py
web/lib/django/utils/translation/__init__.py
web/lib/django/utils/translation/trans_null.py
web/lib/django/utils/translation/trans_real.py
web/lib/django/utils/tree.py
web/lib/django/utils/tzinfo.py
web/lib/django/views/csrf.py
web/lib/django/views/debug.py
web/lib/django/views/decorators/cache.py
web/lib/django/views/decorators/csrf.py
web/lib/django/views/decorators/http.py
web/lib/django/views/decorators/vary.py
web/lib/django/views/generic/create_update.py
web/lib/django/views/generic/date_based.py
web/lib/django/views/generic/list_detail.py
web/lib/django/views/i18n.py
web/lib/django/views/static.py
web/static/admin/css/base.css
web/static/admin/css/changelists.css
web/static/admin/css/dashboard.css
web/static/admin/css/forms.css
web/static/admin/css/ie.css
web/static/admin/css/login.css
web/static/admin/css/rtl.css
web/static/admin/css/widgets.css
web/static/admin/img/admin/arrow-down.gif
web/static/admin/img/admin/arrow-up.gif
web/static/admin/img/admin/changelist-bg.gif
web/static/admin/img/admin/changelist-bg_rtl.gif
web/static/admin/img/admin/chooser-bg.gif
web/static/admin/img/admin/chooser_stacked-bg.gif
web/static/admin/img/admin/default-bg-reverse.gif
web/static/admin/img/admin/default-bg.gif
web/static/admin/img/admin/deleted-overlay.gif
web/static/admin/img/admin/icon-no.gif
web/static/admin/img/admin/icon-unknown.gif
web/static/admin/img/admin/icon-yes.gif
web/static/admin/img/admin/icon_addlink.gif
web/static/admin/img/admin/icon_alert.gif
web/static/admin/img/admin/icon_calendar.gif
web/static/admin/img/admin/icon_changelink.gif
web/static/admin/img/admin/icon_clock.gif
web/static/admin/img/admin/icon_deletelink.gif
web/static/admin/img/admin/icon_error.gif
web/static/admin/img/admin/icon_searchbox.png
web/static/admin/img/admin/icon_success.gif
web/static/admin/img/admin/inline-delete-8bit.png
web/static/admin/img/admin/inline-delete.png
web/static/admin/img/admin/inline-restore-8bit.png
web/static/admin/img/admin/inline-restore.png
web/static/admin/img/admin/inline-splitter-bg.gif
web/static/admin/img/admin/nav-bg-grabber.gif
web/static/admin/img/admin/nav-bg-reverse.gif
web/static/admin/img/admin/nav-bg.gif
web/static/admin/img/admin/selector-add.gif
web/static/admin/img/admin/selector-addall.gif
web/static/admin/img/admin/selector-remove.gif
web/static/admin/img/admin/selector-removeall.gif
web/static/admin/img/admin/selector-search.gif
web/static/admin/img/admin/selector_stacked-add.gif
web/static/admin/img/admin/selector_stacked-remove.gif
web/static/admin/img/admin/tool-left.gif
web/static/admin/img/admin/tool-left_over.gif
web/static/admin/img/admin/tool-right.gif
web/static/admin/img/admin/tool-right_over.gif
web/static/admin/img/admin/tooltag-add.gif
web/static/admin/img/admin/tooltag-add_over.gif
web/static/admin/img/admin/tooltag-arrowright.gif
web/static/admin/img/admin/tooltag-arrowright_over.gif
web/static/admin/img/gis/move_vertex_off.png
web/static/admin/img/gis/move_vertex_on.png
web/static/admin/js/LICENSE-JQUERY.txt
web/static/admin/js/SelectBox.js
web/static/admin/js/SelectFilter2.js
web/static/admin/js/actions.js
web/static/admin/js/actions.min.js
web/static/admin/js/admin/DateTimeShortcuts.js
web/static/admin/js/admin/RelatedObjectLookups.js
web/static/admin/js/admin/ordering.js
web/static/admin/js/calendar.js
web/static/admin/js/collapse.js
web/static/admin/js/collapse.min.js
web/static/admin/js/compress.py
web/static/admin/js/core.js
web/static/admin/js/dateparse.js
web/static/admin/js/getElementsBySelector.js
web/static/admin/js/inlines.js
web/static/admin/js/inlines.min.js
web/static/admin/js/jquery.init.js
web/static/admin/js/jquery.js
web/static/admin/js/jquery.min.js
web/static/admin/js/prepopulate.js
web/static/admin/js/prepopulate.min.js
web/static/admin/js/timeparse.js
web/static/admin/js/urlify.js
web/static/css/style.css
--- a/.hgignore	Wed May 19 17:43:59 2010 +0200
+++ b/.hgignore	Tue May 25 02:43:45 2010 +0200
@@ -9,3 +9,10 @@
 ^web/index
 ^web/static/media/ldt
 ^web/static/photologue
+
+syntax: regexp
+^web/static/media/videos$
+syntax: regexp
+^sbin/blinkster$
+syntax: regexp
+^web/static/media/photologue$
\ No newline at end of file
--- a/.pydevproject	Wed May 19 17:43:59 2010 +0200
+++ b/.pydevproject	Tue May 25 02:43:45 2010 +0200
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?eclipse-pydev version="1.0"?>
 
 <pydev_project>
 <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.6</pydev_property>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python_blinkster</pydev_property>
 <pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
 <path>/blinkster/web/blinkster</path>
 <path>/blinkster/web/lib</path>
 </pydev_pathproperty>
 <pydev_pathproperty name="org.python.pydev.PROJECT_EXTERNAL_SOURCE_PATH">
-<path>/Library/Python/2.5/site-packages</path>
+<path>/Users/ymh/dev/workspace/blinkster/sbin/blinkster/lib/python2.6/site-packages</path>
 </pydev_pathproperty>
 </pydev_project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sql/update_db_0_10_to_0_11.sql	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+ALTER TABLE ldt_content ADD COLUMN duration integer;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/blinkster/handler.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,5 @@
+
+activate_this = '/Users/ymh/dev/workspace/blinkster/sbin/blinkster/bin/activate_this.py'
+execfile(activate_this, dict(__file__=activate_this))
+
+from django.core.handlers.modpython import handler
--- a/web/blinkster/ldt/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/blinkster/ldt/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -4,11 +4,11 @@
 
 lucene.initVM(lucene.CLASSPATH)
 
-STORE = lucene.FSDirectory.getDirectory(settings.INDEX_PATH, False)
-ANALYZER = lucene.PerFieldAnalyzerWrapper(lucene.StandardAnalyzer())
-ANALYZER.addAnalyzer("tags",lucene.FrenchAnalyzer())
-ANALYZER.addAnalyzer("title",lucene.FrenchAnalyzer())
-ANALYZER.addAnalyzer("abstract",lucene.FrenchAnalyzer())
-ANALYZER.addAnalyzer("all",lucene.FrenchAnalyzer())
+STORE = lucene.SimpleFSDirectory(lucene.File(settings.INDEX_PATH))
+ANALYZER = lucene.PerFieldAnalyzerWrapper(lucene.StandardAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("tags",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("title",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("abstract",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("all",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
 
 
--- a/web/blinkster/ldt/contentindexer.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/blinkster/ldt/contentindexer.py	Tue May 25 02:43:45 2010 +0200
@@ -1,20 +1,12 @@
-import tempfile
-import os
-import os.path
-import shutil
+import Ft
 from blinkster.utils import zipfileext
 import blinkster.utils.log
 import blinkster.utils.xml
 from blinkster import settings
 from blinkster.ldt.models import Content, Segment
-import xml
-import xml.dom
 import xml.dom.minidom
 import xml.dom.ext
 import xml.xpath
-import fnmatch
-import uuid
-import shutil
 import lucene
 from blinkster.ldt import STORE
 from blinkster.ldt import ANALYZER
@@ -56,30 +48,32 @@
             blinkster.utils.log.debug("Indexing content : "+str(content.iri_id))
             filepath = content.iri_file_path()
             doc = xml.dom.minidom.parse(filepath)
-                                    
+            doc = Ft.Xml.Domlette.ConvertDocument(doc)        
+                        
             self.__writer.deleteDocuments(lucene.Term("iri_id", content.iri_id))
             
             con = xml.xpath.Context.Context(doc, 1, 1, None)
+            
             res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble", context=con)
 
             for ensemble in res:
-                ensembleId = ensemble.getAttribute("id")
+                ensembleId = ensemble.getAttributeNS(None,"id")
                 
                 for decoupageNode in ensemble.childNodes:
                     blinkster.utils.log.debug("Indexing content decoupage : "+ repr(decoupageNode.nodeType) + " in " + repr(self.decoupage_blacklist))
-                    if decoupageNode.nodeType != xml.dom.Node.ELEMENT_NODE or decoupageNode.tagName != "decoupage"  or decoupageNode.getAttribute("id") in self.decoupage_blacklist:
+                    if decoupageNode.nodeType != xml.dom.Node.ELEMENT_NODE or decoupageNode.tagName != "decoupage"  or decoupageNode.getAttributeNS(None,"id") in self.decoupage_blacklist:
                         continue
                     
-                    decoupId = decoupageNode.getAttribute("id")
+                    decoupId = decoupageNode.getAttributeNS(None,"id")
                     res = xml.xpath.Evaluate("elements/element", decoupageNode)
                     for elementNode in res:
                         doc = lucene.Document()
-                        elementId = elementNode.getAttribute("id")
-                        tags = elementNode.getAttribute("tags")
-                        author = elementNode.getAttribute("author")
-                        start_ts = int(elementNode.getAttribute("begin"))
-                        duration = int(elementNode.getAttribute("dur"))
-                        date_str = elementNode.getAttribute("date")
+                        elementId = elementNode.getAttributeNS(None,"id")
+                        tags = elementNode.getAttributeNS(None,"tags")
+                        author = elementNode.getAttributeNS(None,"author")
+                        start_ts = int(elementNode.getAttributeNS(None,"begin"))
+                        duration = int(elementNode.getAttributeNS(None,"dur"))
+                        date_str = elementNode.getAttributeNS(None,"date")
                         
                         if tags is not None:                            
                             tags.replace(",", ";")
@@ -104,14 +98,14 @@
                         for txtRes in xml.xpath.Evaluate("abstract/text()", elementNode): 
                             abstract = abstract + txtRes.data 
                 
-                        doc.add(lucene.Field("iri_id", content.iri_id, lucene.Field.Store.YES, lucene.Field.Index.UN_TOKENIZED))
+                        doc.add(lucene.Field("iri_id", content.iri_id, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
                         doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO))
                         doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO))
                         doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO))
-                        doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
-                        doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
-                        doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
-                        doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
+                        doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+                        doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+                        doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+                        doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
             
                         seg = Segment(content = content,
                                       iri_id = content.iri_id,
@@ -129,7 +123,7 @@
             
                         self.__writer.addDocument(doc)
             
-            self.__writer.flush()
+            self.__writer.commit()
             
             
 class ProjectIndexer(object):
@@ -164,6 +158,7 @@
             
             blinkster.utils.log.debug("Indexing project : "+str(project.iri_id))
             doc = xml.dom.minidom.parseString(project.ldt)
+            doc = Ft.Xml.Domlette.ConvertDocument(doc)        
 
             self.__writer.deleteDocuments(lucene.Term("iri_id", project.iri_id))
             
@@ -171,25 +166,25 @@
             res = xml.xpath.Evaluate("/iri/annotations/content", context=con)
 
             for content in res:
-                contentId = content.getAttribute("id")
+                contentId = content.getAttributeNS(None,"id")
                 
                 ensembleId = "ens_perso"
                 
                 for decoupageNode in content.childNodes:
                     blinkster.utils.log.debug("Indexing content decoupage : "+ repr(decoupageNode.nodeType) + " in " + repr(self.decoupage_blacklist))
-                    if decoupageNode.nodeType != xml.dom.Node.ELEMENT_NODE or decoupageNode.tagName != "decoupage"  or decoupageNode.getAttribute("id") in self.decoupage_blacklist:
+                    if decoupageNode.nodeType != xml.dom.Node.ELEMENT_NODE or decoupageNode.tagName != "decoupage"  or decoupageNode.getAttributeNS(None,"id") in self.decoupage_blacklist:
                         continue
                     
-                    decoupId = decoupageNode.getAttribute("id")
+                    decoupId = decoupageNode.getAttributeNS(None,"id")
                     res = xml.xpath.Evaluate("elements/element", decoupageNode)
                     for elementNode in res:
                         doc = lucene.Document()
-                        elementId = elementNode.getAttribute("id")
-                        tags = elementNode.getAttribute("tags")
-                        author = elementNode.getAttribute("author")
-                        start_ts = int(elementNode.getAttribute("begin"))
-                        duration = int(elementNode.getAttribute("dur"))
-                        date_str = elementNode.getAttribute("date")
+                        elementId = elementNode.getAttributeNS(None,"id")
+                        tags = elementNode.getAttributeNS(None,"tags")
+                        author = elementNode.getAttributeNS(None,"author")
+                        start_ts = int(elementNode.getAttributeNS(None,"begin"))
+                        duration = int(elementNode.getAttributeNS(None,"dur"))
+                        date_str = elementNode.getAttributeNS(None,"date")
                         
                         if tags is not None:                            
                             tags.replace(",", ";")
@@ -215,15 +210,15 @@
                             abstract = abstract + txtRes.data 
                 
                 
-                        doc.add(lucene.Field("project_id", project.iri_id, lucene.Field.Store.YES, lucene.Field.Index.UN_TOKENIZED))              
-                        doc.add(lucene.Field("iri_id", contentId, lucene.Field.Store.YES, lucene.Field.Index.UN_TOKENIZED))
+                        doc.add(lucene.Field("project_id", project.iri_id, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))              
+                        doc.add(lucene.Field("iri_id", contentId, lucene.Field.Store.YES, lucene.Field.Index.NOT_ANALYZED))
                         doc.add(lucene.Field("ensemble_id", ensembleId, lucene.Field.Store.YES, lucene.Field.Index.NO))
                         doc.add(lucene.Field("decoupage_id", decoupId, lucene.Field.Store.YES, lucene.Field.Index.NO))
                         doc.add(lucene.Field("element_id", elementId, lucene.Field.Store.YES, lucene.Field.Index.NO))
-                        doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
-                        doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
-                        doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
-                        doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.TOKENIZED))
+                        doc.add(lucene.Field("tags", tags, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+                        doc.add(lucene.Field("title", title, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+                        doc.add(lucene.Field("abstract", abstract, lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
+                        doc.add(lucene.Field("all", " ".join([tags, title, abstract]), lucene.Field.Store.NO, lucene.Field.Index.ANALYZED))
             
                         try:
                             content = Content.objects.get(iri_id = contentId)
--- a/web/blinkster/ldt/fileimport.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/blinkster/ldt/fileimport.py	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,4 @@
 import tempfile
-import os
 import os.path
 import shutil
 from blinkster.utils import zipfileext
@@ -7,14 +6,11 @@
 import blinkster.utils.xml
 from blinkster import settings
 from blinkster.ldt.models import Content, LdtProject
-import xml
-import xml.dom
+import Ft
 import xml.dom.minidom
 import xml.dom.ext
 import xml.xpath
 import fnmatch
-import uuid
-import shutil
 import lucene
 import uuid
 from blinkster.ldt import STORE
@@ -37,6 +33,7 @@
         self.videourl = ""
         self.title = None
         self.desc = None
+        self.duration = None
         self.decoupageId = None
         self.ensembleId = None
         self.created = False
@@ -51,6 +48,7 @@
         
         path = os.path.join(self.basepath, self.src)
         doc = xml.dom.minidom.parse(path)
+        doc = Ft.Xml.Domlette.ConvertDocument(doc)        
         
         con = xml.xpath.Context.Context(doc, 1, 1, None)
         
@@ -63,12 +61,12 @@
         if self.annotations is not None:
             newensemble = doc.createElement('ensemble')
             self.ensembleId = self.id+"_"+str(uuid.uuid1())
-            newensemble.setAttribute('id',self.ensembleId)
+            newensemble.setAttributeNS(None,'id',self.ensembleId)
         
-            newensemble.setAttribute('title', self.annotations.getAttribute('title'))
-            newensemble.setAttribute('author', self.annotations.getAttribute('author'))
-            newensemble.setAttribute('date', self.annotations.getAttribute('date'))
-            newensemble.setAttribute('abstract', self.annotations.getAttribute('abstract'))
+            newensemble.setAttributeNS(None,'title', self.annotations.getAttributeNS(None,'title'))
+            newensemble.setAttributeNS(None,'author', self.annotations.getAttribute('author'))
+            newensemble.setAttributeNS(None,'date', self.annotations.getAttribute('date'))
+            newensemble.setAttributeNS(None,'abstract', self.annotations.getAttribute('abstract'))
             
             decoupageNode = None
             for node in self.annotations.childNodes:
@@ -85,24 +83,24 @@
             # find an ensemble child node
             ensemble = None
             for node in ensemblesnode.childNodes:
-                 if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.tagName == "ensemble":
-                     ensemble = node
-                     break
+                if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.tagName == "ensemble":
+                    ensemble = node
+                    break
             if ensemble is not None:
-                self.ensembleId = ensemble.getAttribute(u"id")
+                self.ensembleId = ensemble.getAttributeNS(None,u"id")
                 decoupageNode = None
                 for node in ensemble.childNodes:
                     if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.tagName == "decoupage":
                         decoupageNode = node
                         break
                 if not decoupageNode is None:
-                    self.decoupageId = decoupageNode.getAttribute(u"id")
+                    self.decoupageId = decoupageNode.getAttributeNS(None,u"id")
                 
         
         res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
-        src_video = res[0].getAttribute('src')
+        src_video = res[0].getAttributeNS(None,'src')
         self.videourl = os.path.basename(src_video)
-        srcnode = res[0].setAttribute('src', self.videourl)
+        self.duration = res[0].getAttributeNS(None, 'dur')
         
         f = open(path, "w")
         try:
@@ -125,6 +123,7 @@
             content.iri = self.id + u"/" + os.path.basename(self.src)
             content.title = self.title
             content.description = self.desc
+            content.duration = int(self.duration)
             #content.decoupage_id = unicode(self.decoupageId)
             #content.ensemble_id = unicode(self.ensembleId)
             content.save()
@@ -145,7 +144,7 @@
         self.__filepath = filepath
         self.__tempdir = ""
         self.__author = author
-        self.__writer = lucene.IndexModifier(STORE, ANALYZER, True)
+        self.__writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
         self.__writer.setMaxFieldLength(1048576)
 
 
@@ -182,8 +181,7 @@
 
     author = property(**author())
     
-    def writer():
-            
+    def writer():            
         def fget(self):
             return self.__writer
                     
@@ -229,19 +227,20 @@
         # create or update content
         contents = {}
         doc = xml.dom.minidom.parse(ldtpath)
+        doc = Ft.Xml.Domlette.ConvertDocument(doc)
         
         con = xml.xpath.Context.Context(doc, 1, 1, None)
         result = xml.xpath.Evaluate("/iri/project", context=con)
         for pnode in result:
-           author = pnode.getAttribute("user")
-           if author:
-               self.author = unicode(author)
-               break 
+            #author = pnode.attributes["user"].value
+            if pnode.hasAttributeNS(None,"user"):
+                self.author = unicode(pnode.getAttributeNS(None, "user"))
+                break 
 
         result = xml.xpath.Evaluate("/iri/medias/media", context=con)
         
         for i, medianode in  enumerate(result):
-            id = medianode.attributes['id'].value
+            id = medianode.getAttributeNS(None,'id')
             blinkster.utils.log.debug("FIRST ID : " + str(id))
             if self.checkExistingMedia:
                 try:
@@ -255,17 +254,17 @@
                 if not (contents.has_key(id)):
                     blinkster.utils.log.debug("CREATE IRI INFO ID : " + str(id))
                     contents[id] = IriInfo(id, os.path.dirname(ldtpath), i, "")
-                contents[id].src = medianode.attributes['src'].value
+                contents[id].src = medianode.getAttributeNS(None,'src')
         
         result = xml.xpath.Evaluate("/iri/annotations/content", context=con)
 
         blinkster.utils.log.debug("content xpath result : " + str(len(result)))        
         for contentnode in result:
-            id = contentnode.attributes['id'].value
+            id = contentnode.getAttributeNS(None,'id')
             blinkster.utils.log.debug("ID : " + str(id))
             if contents.has_key(id):
                 if self.author:
-                    contentnode.setAttribute("author", unicode(self.author))
+                    contentnode.setAttributeNS(None,"author", unicode(self.author))
                 contents[id].annotations = contentnode
         
         #go throught values
@@ -334,14 +333,14 @@
         con = xml.xpath.Context.Context(doc, 1, 1, None)
         result = xml.xpath.Evaluate("/iri/project", context=con)
         for pnode in result:
-           author = pnode.setAttribute("user", unicode(self.author))
-           break
+            pnode.setAttribute("user", unicode(self.author))
+            break
  
         result = xml.xpath.Evaluate("/iri/medias/media", context=con)
         
         for i, medianode in  enumerate(result):
             id = medianode.attributes['id'].value
-            blinkster.utils.log.debug("FIRST ID : " + str(id))
+            blinkster.utils.log.debug("FIRST ID at " + str(i) + " : " + str(id))
             content = Content.objects.get(iri_id = id)
             self.contents.append(content)
             
--- a/web/blinkster/ldt/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/blinkster/ldt/models.py	Tue May 25 02:43:45 2010 +0200
@@ -1,4 +1,6 @@
 import os
+import xml
+import Ft.Xml
 
 from django.db import models
 from django.contrib import admin
@@ -30,6 +32,17 @@
     description = models.TextField(null=True)
     external_id = models.CharField(max_length=1024, null=True, blank=True)
     authors = models.ManyToManyField(Author)
+    duration = models.IntegerField(null=True, blank=True)
+
+    def get_duration(self):
+        if self.duration is None:
+            doc = xml.dom.minidom.parse(self.iri_file_path())
+            doc = Ft.Xml.Domlette.ConvertDocument(doc)        
+            con = xml.xpath.Context.Context(doc, 1, 1, None)
+            res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
+            self.duration = int(res[0].getAttributeNS(None, 'dur'))
+            self.save()
+        return self.duration
     
     def delete(self):
         super(Content, self).delete()
--- a/web/blinkster/ldt/utils.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/blinkster/ldt/utils.py	Tue May 25 02:43:45 2010 +0200
@@ -9,30 +9,29 @@
 import xml.dom.minidom
 import xml.dom.ext
 import xml.xpath
-import os
-import os.path
-
+import sys
 
 
 class LdtSearch(object):
 
-	def query(self, field, query):
-		res = []
-		indexSearcher = lucene.IndexSearcher(STORE)
-		#queryParser = lucene.MultiFieldQueryParser(["tags","title","abstract"], ANALYZER)
-		queryParser = lucene.QueryParser(field, lucene.FrenchAnalyzer())
-		queryParser.setDefaultOperator(lucene.QueryParser.Operator.AND)
-		queryObj = queryParser.parse(query)
-		hits = indexSearcher.search(queryObj)
-		for hit in hits:
-			doc = lucene.Hit.cast_(hit).getDocument()
-			res.append({"iri_id":doc.get("iri_id"),"ensemble_id":doc.get("ensemble_id"),"decoupage_id":doc.get("decoupage_id"), "element_id":doc.get("element_id")})
-		return res
+    def query(self, field, query):
+        res = []
+        indexSearcher = lucene.IndexSearcher(STORE)
+        #queryParser = lucene.MultiFieldQueryParser(["tags","title","abstract"], ANALYZER)
+        queryParser = lucene.QueryParser(lucene.Version.LUCENE_30, field, lucene.FrenchAnalyzer(lucene.Version.LUCENE_30))
+        queryParser.setDefaultOperator(lucene.QueryParser.Operator.AND)
+        queryObj = queryParser.parse(query)
+        hits = indexSearcher.search(queryObj,50)
+        for hit in hits.scoreDocs:
+            doc = indexSearcher.doc(hit.doc)
+            res.append({"iri_id":doc.get("iri_id"),"ensemble_id":doc.get("ensemble_id"),"decoupage_id":doc.get("decoupage_id"), "element_id":doc.get("element_id")})
+        indexSearcher.close()
+        return res
 
-	
-	def queryAll(self, query):		
-		return self.query("all", query)
-	
+
+    def queryAll(self, query):		
+        return self.query("all", query)
+
 class LdtUtils(object):
     
     def generateLdt(self, contentList, file, title = u"", author=u"IRI Web", web_url=u"", media_url=""):
@@ -65,8 +64,6 @@
 
     def generateInit(self, url, method, search=None):
         
-        import xml.dom
-        import xml.dom.ext
     
         impl = xml.dom.getDOMImplementation()
         doc = impl.createDocument(xml.dom.EMPTY_NAMESPACE, 'iri', None)
--- a/web/blinkster/ldt/views.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/blinkster/ldt/views.py	Tue May 25 02:43:45 2010 +0200
@@ -260,7 +260,7 @@
         form = reindexForm(request.POST)
         if form.is_valid():            
             try:
-                writer = lucene.IndexWriter(STORE, ANALYZER, True)
+                writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
                 writer.setMaxFieldLength(1048576)
                 contentList = form.cleaned_data["contents"]
                 indexer = ContentIndexer(contentList,writer)
--- a/web/blinkster/settings.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/blinkster/settings.py	Tue May 25 02:43:45 2010 +0200
@@ -120,5 +120,7 @@
 
 FORCE_LOWERCASE_TAGS = True
 
+DEFAULT_SEGMENT_LENGTH_SECONDS = 30
+
 
 from config import *
--- a/web/blinkster/templates/segment_detail.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/blinkster/templates/segment_detail.html	Tue May 25 02:43:45 2010 +0200
@@ -28,8 +28,15 @@
     <li>start_ts = {{segment.start_ts}}</li>
     <li>author = {{segment.author}}</li>
     <li>date = {{segment.date}}</li>
+    <li>content duration = {{content_duration}}</li>
 </ul>
 
+<div id="timeline">
+	<div id="timeline_segment" style="width: {{segment_relative_duration}}%; left: {{segment_relative_start}}%">&nbsp;</div>
+</div>
+
+<video width="320" height="240" controls="true" src="{% url blinkster.views.segment_ts_playlist iri_id ensemble_id cutting_id element_id %}">
+</video>
 
 </div>
 {% endblock %}
\ No newline at end of file
--- a/web/blinkster/urls.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/blinkster/urls.py	Tue May 25 02:43:45 2010 +0200
@@ -41,6 +41,7 @@
     (r'^roi/list/$', 'blinkster.views.roi_list'),
     (r'^poi/list/(?P<roi_sid>.*)/$', 'blinkster.views.poi_list'),
     (r'^ldt/segment/detail/(?P<iri_id>.*)/(?P<ensemble_id>.*)/(?P<cutting_id>.*)/(?P<element_id>.*)/$', 'blinkster.views.segment_detail'),
+    (r'^ldt/segment/playlist/(?P<iri_id>.*)/(?P<ensemble_id>.*)/(?P<cutting_id>.*)/(?P<element_id>.*)/$', 'blinkster.views.segment_ts_playlist'),
     (r'^ldt/segment/search/$','blinkster.views.segment_search_post'),
     (r'^ldt/segment/search/(?P<field>tags|title|abstract|all)/(?P<operator>or|and)/(?P<query>.*)/$','blinkster.views.segment_search_get'),
     (r'^photologue/', include('photologue.urls')),
--- a/web/blinkster/views.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/blinkster/views.py	Tue May 25 02:43:45 2010 +0200
@@ -1,20 +1,21 @@
 # Create your views here.
-from django.http import HttpResponse, HttpResponseRedirect
-from django.shortcuts import render_to_response, get_object_or_404
+from django.http import HttpResponse
+from django.shortcuts import render_to_response, get_object_or_404, get_list_or_404
 from django.core.urlresolvers import reverse
-from django.template import RequestContext, TemplateDoesNotExist
-from django.template.loader import get_template
-from django.core import serializers
+from django.template import RequestContext
 from django.core.serializers.json import DjangoJSONEncoder
 from django.utils import simplejson
 from django.conf import settings
 
-from blinkster.ldt.models import Segment
+import re
+import urllib2
+import math
+
+
+from blinkster.ldt.models import Segment, Content
 from blinkster.ldt.utils import LdtSearch
 from blinkster.models import Roi, Poi
 import blinkster
-import re
-import urllib2
 import blinkster.utils.log
 
 def serialize_queryset_to_json(response, obj_list, extra=None):
@@ -26,7 +27,7 @@
         objs = dict(objs, **extra)
 
     #blinkster.utils.log.debug("before views dumps JSON RES : " + repr(objs))
-    res = simplejson.dumps(objs, cls=DjangoJSONEncoder,ensure_ascii=False, indent=4)
+    res = simplejson.dumps(objs, cls=DjangoJSONEncoder, ensure_ascii=False, indent=4)
     #blinkster.utils.log.debug("views dumps JSON RES : " + res)
     response.write(res)
     return response
@@ -44,7 +45,7 @@
     response = HttpResponse(content_type=str(content_type))
     results = []
     for roi_dict in [roi.serialize_to_dict() for roi in Roi.objects.all()]:
-        roi_dict["poi_list_url"] = unicode(settings.WEB_URL.rstrip('/') + reverse('blinkster.views.poi_list',args=[roi_dict["sid"]])+content_type_req)
+        roi_dict["poi_list_url"] = unicode(settings.WEB_URL.rstrip('/') + reverse('blinkster.views.poi_list', args=[roi_dict["sid"]]) + content_type_req)
         results.append(roi_dict)
 
     return serialize_queryset_to_json(response, results)
@@ -61,19 +62,46 @@
     roi = get_object_or_404(Roi, sid=roi_sid)
     results = []
     for poi_dict in [poi.serialize_to_dict() for poi in Poi.objects.filter(roi=roi)]:
-        poi_dict["segment_search_url"] = unicode(settings.WEB_URL.rstrip('/') + reverse('blinkster.views.segment_search_get',args=[u"tags",u"or",urllib2.quote(poi_dict["tags"].encode("utf-8"))]) + content_type_req)
+        poi_dict["segment_search_url"] = unicode(settings.WEB_URL.rstrip('/') + reverse('blinkster.views.segment_search_get', args=[u"tags", u"or", urllib2.quote(poi_dict["tags"].encode("utf-8"))]) + content_type_req)
         results.append(poi_dict)
     return serialize_queryset_to_json(response, results)
 
 # Display segment detail.
 # This will have to be moved to ldt module
-def segment_detail(request, iri_id, ensemble_id, cutting_id, element_id, project_id = None):
-    
-    segment = get_object_or_404(Segment, project_id=project_id, iri_id=iri_id, ensemble_id=ensemble_id, cutting_id=cutting_id, element_id=element_id)
+def segment_detail(request, iri_id, ensemble_id, cutting_id, element_id, project_id=None):
+        
+    segment = get_list_or_404(Segment, project_id=project_id, iri_id=iri_id, ensemble_id=ensemble_id, cutting_id=cutting_id, element_id=element_id)[0]
     tags = segment.tags
     tag_list = tags.split(",")
     segment_tags_list = ", ".join([tag.strip() for tag in tag_list])
-    return render_to_response("segment_detail.html",{'segment':segment, 'segment_tags_list':segment_tags_list}, context_instance=RequestContext(request))
+    content = Content.objects.get(iri_id = iri_id)
+    content_dur = content.get_duration()
+    
+    if segment.duration > 0:
+        start_ts = segment.start_ts
+        duration = segment.duration
+    else:
+        start_ts = max(0,segment.start_ts - (settings.DEFAULT_SEGMENT_LENGTH_SECONDS*500) )
+        end_ts = min(content_dur, start_ts + (settings.DEFAULT_SEGMENT_LENGTH_SECONDS*1000))
+        duration = end_ts - start_ts
+        
+    segment_relative_duration = max(int(float(duration) / float(content_dur) * 100), 1)
+    segment_relative_start = int(float(start_ts) / float(content_dur) * 100)
+    
+    return render_to_response("segment_detail.html",
+                              {'segment':segment, 
+                               'segment_tags_list':segment_tags_list, 
+                               'iri_id':iri_id, 
+                               'ensemble_id':ensemble_id, 
+                               'cutting_id':cutting_id, 
+                               'element_id':element_id, 
+                               'project_id':project_id,
+                               'content_duration':content_dur,
+                               'start_ts':start_ts,
+                               'duration':duration,
+                               'segment_relative_duration':segment_relative_duration,
+                               'segment_relative_start':segment_relative_start 
+                               }, context_instance=RequestContext(request))
 
 def segment_search_post(request):
     query = request.POST["query"]
@@ -81,7 +109,7 @@
     operator = request.POST["operator"]
     return segment_search_get(request, query, field, operator)
 
-def segment_search_get(request, query, field = u"tags", operator=u"or"):
+def segment_search_get(request, query, field=u"tags", operator=u"or"):
     
     content_type = request.GET.get("content-type")
     content_type_req = ""
@@ -93,7 +121,7 @@
     response = HttpResponse(content_type=str(content_type))
 
     # transform tag1, tag2, tag3 in "tag1" OR "tag2" OR "tag3"
-    query_str = (u" " + operator.upper() + u" ").join(["\"" + t.strip() + "\"" for t in re.split("\,|\;",query)])
+    query_str = (u" " + operator.upper() + u" ").join(["\"" + t.strip() + "\"" for t in re.split("\,|\;", query)])
     
 
     searcher = blinkster.ldt.utils.LdtSearch()
@@ -109,7 +137,44 @@
             del seg["content_id"]
             del seg["id"]
             res = dict(res, **seg)
-        res["segment_detail_url"] = unicode(settings.WEB_URL.rstrip('/') + reverse('blinkster.views.segment_detail',args=[res["iri_id"], res["ensemble_id"], res["cutting_id"], res["element_id"]]) + content_type_req)
+        res["segment_detail_url"] = unicode(settings.WEB_URL.rstrip('/') + reverse('blinkster.views.segment_detail', args=[res["iri_id"], res["ensemble_id"], res["cutting_id"], res["element_id"]]) + content_type_req)
         results.append(res)
     
     return serialize_queryset_to_json(response, results, {u"query" : query, u"field": field, u"operator":operator, u"final_query": query_str})
+
+
+def segment_ts_playlist(request, iri_id, ensemble_id, cutting_id, element_id, project_id=None):
+
+    content_type = "application/x-mpegURL; charset=utf-8"
+    segment = get_list_or_404(Segment, project_id=project_id, iri_id=iri_id, ensemble_id=ensemble_id, cutting_id=cutting_id, element_id=element_id)[0]
+    start_ts = int(math.floor(segment.start_ts / 1000.0))
+    
+    content = Content.objects.get(iri_id=iri_id)
+    content_duration = content.get_duration()
+    
+    if segment.duration == 0:
+        start_ts = max(start_ts-settings.DEFAULT_SEGMENT_LENGTH_SECONDS/2,0)
+        seg_duration = settings.DEFAULT_SEGMENT_LENGTH_SECONDS
+    else:
+        seg_duration = int(math.ceil(segment.duration / 1000.0))
+        
+    
+    end_ts = min(math.floor(content_duration/1000.0), start_ts+seg_duration)
+    
+    respstr  = u"#EXTM3U\n"
+    respstr += u"#EXT-X-TARGETDURATION:1\n"
+    respstr += u"#EXT-X-MEDIA-SEQUENCE:0\n"
+
+    ext = ".ts"
+    
+    
+    for i in range(start_ts,end_ts+1):
+        respstr += u"#EXTINF:1,\n"
+        respstr += u"%s%s/media/videos/%s/fileSequence%s%s\n" % (settings.WEB_URL, settings.MEDIA_BASE_URL,iri_id, i, ext)
+
+    respstr += u"#EXT-X-ENDLIST\n"
+
+    
+    response = HttpResponse(content=respstr, mimetype=content_type)
+    
+    return response
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,31 @@
+#   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.
+
+# jcc package
+
+import os, sys
+
+if sys.platform == 'win32':
+    from jcc.config import SHARED
+    if SHARED:
+        path = os.environ['Path'].split(os.pathsep)
+        eggpath = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
+        if eggpath not in path:
+            path.insert(0, eggpath)
+            os.environ['Path'] = os.pathsep.join(path)
+
+if __name__ == '__main__':
+    import jcc.__main__
+else:
+    from _jcc import initVM
+
+CLASSPATH=os.path.join(os.path.abspath(os.path.dirname(__file__)), "classes")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/__main__.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,88 @@
+
+import sys
+from jcc import cpp
+
+if len(sys.argv) == 1 or '--help' in sys.argv:
+    help = '''
+  JCC - C++/Python Java Native Interface Code Generator
+
+  Usage: python -m jcc.__main__ [options] [actions]
+
+  Input options:
+    --jar JARFILE           - make JCC wrap all public classes found in
+                              JARFILE, add it to the module's CLASSPATH and
+                              include it in the distribution 
+    --include JARFILE       - include JARFILE in the distribution and add
+                              it to the module's CLASSPATH
+    --exclude CLASS         - explicitly don't wrap CLASS
+    --package PACKAGE       - add PACKAGE to the list of packages from
+                              which dependencies are automatically wrapped
+    --classpath [PATH|JAR]  - add [PATH|JAR] to CLASSPATH while generating
+                              wrappers 
+    --libpath [PATH]        - add [PATH] to java.library.path while generating
+                              wrappers 
+    --module MODULE         - include Python MODULE in the distribution
+    --reserved SYMBOL       - mark SYMBOL as a reserved word that will be
+                              mangled in the generated C++ code to avoid
+                              clashes with C/C++ reserved words or header
+                              file definitions
+    --vmarg                 - add extra Java VM initialization parameter
+
+  Python wrapper generation options:
+    --python NAME           - generate wrappers for use from Python in a module
+                              called NAME
+    --version VERSION       - the generated module's version number
+    --shared                - generate a module that links against a shared
+                              library version of the JCC runtime so that
+                              multiple JCC-wrapped modules can be used within
+                              the same Python runtime
+    --sequence CLASS METHODSIGNATURE
+                            - generate a pythonic sequence protocol wrapper for
+                              CLASS
+    --mapping CLASS METHODSIGNATURE1 METHODSIGNATURE2
+                            - generate a pythonic map protocol wrapper for CLASS
+    --rename CLASS1=NAME1,CLASS2=NAME2,...
+                            - rename one or more Python wrapper classes to
+                              avoid name clashes due to the flattening of
+                              the Java package namespaces as mapped into
+                              Python
+    --no-generics           - disable support for Java generics
+
+    If you're planning to use pythonic wrappers you should read the relevant
+    documentation first:
+      http://lucene.apache.org/pylucene/jcc/documentation/readme.html#python
+
+  Output options:
+    --debug                 - generate a module using the C++ compiler's
+                              debug options
+    --output OUTPUTDIR      - the wrapper will be generated in OUTPUTDIR,
+                              'build' by default
+    --files N               - split the generated wrapper file into at least
+                              N files to workaround C++ compiler file size
+                              limitations 
+    --arch                  - Mac OS X only: filter the -arch parameters
+                              Python was configured with to build leaner
+                              binaries, faster
+
+  Actions:
+    --build                 - generate the wrapper and compile it
+    --compile               - recompile the (previously generated) module
+    --install               - install the wrapper in the local site-packages
+
+  Distribution actions:
+    --use-distutils         - use distutils even when setuptools is availble
+    --bdist                 - generate a binary distutils-based distribution
+                              or a setuptools-based .egg
+    --wininst               - create an installer application for Microsoft
+                              Windows
+
+  Other distutils/setuptools options (there are passed right through):
+    --compiler COMPILER     - use COMPILER instead of the platform default
+    --root ROOTDIR
+    --install-dir INSTALLDIR
+    --prefix PREFIX
+'''
+    print help
+    sys.exit(0)
+  
+cpp.jcc(sys.argv)
Binary file web/lib/arch/osx/jcc/_jcc.so has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/config.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,7 @@
+
+INCLUDES=['/System/Library/Frameworks/JavaVM.framework/Versions/Current/Headers']
+CFLAGS=['-fno-strict-aliasing', '-Wno-write-strings']
+DEBUG_CFLAGS=['-O0', '-g', '-DDEBUG']
+LFLAGS=['-framework', 'JavaVM']
+SHARED=True
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/cpp.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1053 @@
+#   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 os, sys, zipfile, _jcc
+
+python_ver = '%d.%d.%d' %(sys.version_info[0:3])
+if python_ver < '2.4':
+    from sets import Set as set
+
+    def split_pkg(string, sep):
+        parts = string.split(sep)
+        if len(parts) > 1:
+            return sep.join(parts[:-1]), parts[-1]
+        return parts
+
+    def sort(list, fn=None, key=None):
+        if fn:
+            list.sort(fn)
+        elif key:
+            def fn(x, y):
+                return cmp(key(x), key(y))
+            list.sort(fn)
+        else:
+            list.sort()
+
+else:
+    def split_pkg(string, sep):
+        return string.rsplit(sep, 1)
+
+    def sort(list, fn=None, key=None):
+        if fn:
+            list.sort(cmp=fn)
+        elif key:
+            list.sort(key=key)
+        else:
+            list.sort()
+
+
+class JavaError(Exception):
+
+    def getJavaException(self):
+        return self.args[0]
+
+    def __str__(self):
+        writer = StringWriter()
+        self.getJavaException().printStackTrace(PrintWriter(writer))
+
+        return '\n'.join((super(JavaError, self).__str__(),
+                          "Java stacktrace:", str(writer)))
+
+
+class InvalidArgsError(Exception):
+    pass
+
+
+_jcc._set_exception_types(JavaError, InvalidArgsError)
+from _jcc import *
+
+
+INDENT = '    '
+HALF_INDENT = '  '
+
+PRIMITIVES = { 'boolean': 'Z',
+               'byte': 'B',
+               'char': 'C',
+               'double': 'D',
+               'float': 'F',
+               'int': 'I',
+               'long': 'J',
+               'short': 'S',
+               'void': 'V' }
+
+RESERVED = set(['delete', 'and', 'or', 'not', 'xor', 'union', 'NULL',
+                'register', 'const', 'bool', 'operator', 'typeof'])
+
+def cppname(name):
+
+    if name in RESERVED:
+        return name + '$'
+
+    return name
+
+
+def cppnames(names):
+
+    return [cppname(name) for name in names]
+
+
+def typename(cls, current, const):
+
+    if cls.isArray():
+        componentType = cls.getComponentType()
+        if componentType.isArray():
+            name = 'JArray< %s >' %(typename(componentType, current, False))
+        else:
+            name = 'JArray<%s>' %(typename(componentType, current, False))
+
+    elif cls.isPrimitive():
+        name = cls.getName()
+        if name != 'void':
+            name = 'j' + name
+        const = False
+
+    elif cls == current:
+        name = cppname(cls.getName().split('.')[-1])
+
+    else:
+        name = '::'.join([cppname(name) for name in cls.getName().split('.')])
+
+    if const:
+        return "const %s&" %(name)
+
+    return name
+
+
+def argnames(params, cls):
+
+    if not params:
+        return '', ''
+
+    count = len(params)
+    decls = ', '.join(["%s a%d" %(typename(params[i], cls, True), i)
+                       for i in xrange(count)])
+    args = ', '.join(['a%d%s' %(i, not params[i].isPrimitive() and '.this$' or '')
+                      for i in xrange(count)])
+
+    return decls, ', ' + args
+
+
+def line(out, indent=0, string='', *args):
+
+    out.write(INDENT * indent)
+    out.write(string % args)
+    out.write('\n')
+
+
+def known(cls, typeset, declares, packages, excludes, generics):
+
+    if generics:
+        if Class.instance_(cls):
+            cls = Class.cast_(cls)
+        elif ParameterizedType.instance_(cls):
+            pt = ParameterizedType.cast_(cls)
+            if not known(pt.getRawType(), typeset, declares, packages, excludes,
+                         True):
+                return False
+            for ta in pt.getActualTypeArguments():
+                if TypeVariable.instance_(ta):
+                    continue
+                if not known(ta, typeset, declares, packages, excludes, True):
+                    return False
+            return True
+        elif WildcardType.instance_(cls):
+            wc = WildcardType.cast_(cls)
+            for ub in wc.getUpperBounds():
+                if not known(ub, typeset, declares, packages, excludes, True):
+                    return False
+            return True
+        elif TypeVariable.instance_(cls):
+            for bounds in TypeVariable.cast_(cls).getBounds():
+                if not known(bounds, typeset, declares, packages, excludes,
+                             True):
+                    return False
+            return True
+        elif GenericArrayType.instance_(cls):
+            return known(GenericArrayType.cast_(cls).getGenericComponentType(),
+                         typeset, declares, packages, excludes, True)
+        else:
+            raise TypeError, (cls, cls.getClass())
+
+    while cls.isArray():
+        cls = cls.getComponentType()
+
+    className = cls.getName()
+    if className in excludes:
+        return False
+
+    if cls.isPrimitive():
+        return True
+
+    if cls in typeset:
+        declares.add(cls)
+        return True
+
+    if split_pkg(className, '.')[0] in packages:
+        typeset.add(cls)
+        declares.add(cls)
+        cls = cls.getSuperclass()
+        while cls and cls not in typeset:
+            typeset.add(cls)
+            cls = cls.getSuperclass()
+        return True
+
+    return False
+
+
+def find_method(cls, name, params):
+
+    declared = False
+    while True:
+        try:
+            if declared:
+                method = cls.getDeclaredMethod(name, params)
+            else:
+                method = cls.getMethod(name, params)
+            break
+        except JavaError, e:
+            if (e.getJavaException().getClass().getName() == 'java.lang.NoSuchMethodException'):
+                if not declared:
+                    declared = True
+                else:
+                    cls = cls.getSuperclass()
+                    if not cls:
+                        return None
+                continue
+            raise
+
+    modifiers = method.getModifiers()
+    if Modifier.isAbstract(modifiers):
+        return None
+    if Modifier.isPrivate(modifiers):
+        return None
+
+    return method
+
+
+def signature(fn, argsOnly=False):
+
+    def typename(cls):
+        array = ''
+        while cls.isArray():
+            array += '['
+            cls = cls.getComponentType()
+        if cls.isPrimitive():
+            return array + PRIMITIVES[cls.getName()]
+        return '%sL%s;' %(array, cls.getName().replace('.', '/'))
+        
+    if isinstance(fn, Constructor):
+        returnType = 'V'
+    elif isinstance(fn, Method):
+        returnType = typename(fn.getReturnType())
+    elif isinstance(fn, Field):
+        return typename(fn.getType())
+
+    if argsOnly:
+        return '(%s)' %(''.join([typename(param)
+                                 for param in fn.getParameterTypes()]))
+
+    return '(%s)%s' %(''.join([typename(param)
+                               for param in fn.getParameterTypes()]),
+                       returnType)
+
+
+def forward(out, namespace, indent):
+
+    for name, entries in namespace.iteritems():
+        if entries is True:
+            line(out, indent, 'class %s;', cppname(name))
+        else:
+            line(out, indent, 'namespace %s {', cppname(name))
+            forward(out, entries, indent + 1)
+            line(out, indent, '}')
+
+
+def expandjar(path):
+
+    jar = zipfile.ZipFile(path, 'r')
+
+    for member in jar.infolist():
+        f = member.filename
+        if f.endswith('.class'):
+            yield f.split('.')[0].replace('/', '.')
+
+    jar.close()
+
+
+def jcc(args):
+
+    classNames = set()
+    packages = set()
+    jars = []
+    classpath = []
+    libpath = []
+    vmargs = ['-Djava.awt.headless=true']
+    moduleName = None
+    modules = []
+    build = False
+    install = False
+    recompile = False
+    output = 'build'
+    debug = False
+    excludes = []
+    version = ''
+    mappings = {}
+    sequences = {}
+    renames = {}
+    env = None
+    wrapperFiles = 1
+    prefix = None
+    root = None
+    install_dir = None
+    home_dir = None
+    use_distutils = False
+    shared = False
+    dist = False
+    wininst = False
+    compiler = None
+    generics = hasattr(_jcc, "Type")
+    arch = []
+
+    i = 1
+    while i < len(args):
+        arg = args[i]
+        if arg.startswith('-'):
+            if arg == '--jar':
+                i += 1
+                classpath.append(args[i])
+                classNames.update(expandjar(args[i]))
+                jars.append(args[i])
+            elif arg == '--include':
+                i += 1
+                classpath.append(args[i])
+                jars.append(args[i])
+            elif arg == '--package':
+                i += 1
+                packages.add(args[i])
+            elif arg == '--classpath':
+                i += 1
+                classpath.append(args[i])
+            elif arg == '--libpath':
+                i += 1
+                libpath.append(args[i])
+            elif arg == '--vmarg':
+                i += 1
+                vmargs.append(args[i])
+            elif arg == '--python':
+                from python import python, module
+                i += 1
+                moduleName = args[i]
+            elif arg == '--module':
+                i += 1
+                modules.append(args[i])
+            elif arg == '--build':
+                from python import compile
+                build = True
+            elif arg == '--install':
+                from python import compile
+                install = True
+            elif arg == '--compile':
+                from python import compile
+                recompile = True
+            elif arg == '--output':
+                i += 1
+                output = args[i]
+            elif arg == '--debug':
+                debug = True
+            elif arg == '--exclude':
+                i += 1
+                excludes.append(args[i])
+            elif arg == '--version':
+                i += 1
+                version = args[i]
+            elif arg == '--mapping':
+                mappings[args[i + 1]] = args[i + 2]
+                i += 2
+            elif arg == '--sequence':
+                sequences[args[i + 1]] = (args[i + 2], args[i + 3])
+                i += 3
+            elif arg == '--rename':
+                i += 1
+                renames.update(dict([arg.split('=')
+                                     for arg in args[i].split(',')]))
+            elif arg == '--files':
+                i += 1
+                wrapperFiles = args[i]
+                if wrapperFiles != 'separate':
+                    wrapperFiles = int(wrapperFiles)
+            elif arg == '--prefix':
+                i += 1
+                prefix = args[i]
+            elif arg == '--root':
+                i += 1
+                root = args[i]
+            elif arg == '--install-dir':
+                i += 1
+                install_dir = args[i]
+            elif arg == '--home':
+                i += 1
+                home_dir = args[i]
+            elif arg == '--use-distutils':
+                use_distutils = True
+            elif arg == '--shared':
+                shared = True
+            elif arg == '--bdist':
+                from python import compile
+                dist = True
+            elif arg == '--wininst':
+                from python import compile
+                wininst = True
+                dist = True
+            elif arg == '--compiler':
+                i += 1
+                compiler = args[i]
+            elif arg == '--reserved':
+                i += 1
+                RESERVED.update(args[i].split(','))
+            elif arg == '--arch':
+                i += 1
+                arch.append(args[i])
+            elif arg == '--no-generics':
+                generics = False
+            else:
+                raise ValueError, "Invalid argument: %s" %(arg)
+        else:
+            classNames.add(arg)
+        i += 1
+
+    if libpath:
+        vmargs.append('-Djava.library.path=' + os.pathsep.join(libpath))
+
+    env = initVM(os.pathsep.join(classpath) or None,
+                 maxstack='512k', vmargs=' '.join(vmargs))
+
+    typeset = set()
+    excludes = set(excludes)
+
+    if recompile or not build and (install or dist):
+        if moduleName is None:
+            raise ValueError, 'module name not specified (use --python)'
+        else:
+            compile(env, os.path.dirname(args[0]), output, moduleName,
+                    install, dist, debug, jars, version,
+                    prefix, root, install_dir, home_dir, use_distutils,
+                    shared, compiler, modules, wininst, arch, generics)
+    else:
+        for className in classNames:
+            if className in excludes:
+                continue
+            cls = findClass(className.replace('.', '/'))
+            if cls is None:
+                raise ValueError, className
+            if Modifier.isPublic(cls.getModifiers()):
+                typeset.add(cls)
+                cls = cls.getSuperclass()
+                while cls and cls not in typeset:
+                    typeset.add(cls)
+                    cls = cls.getSuperclass()
+        typeset.add(findClass('java/lang/Class'))
+        typeset.add(findClass('java/lang/String'))
+        typeset.add(findClass('java/lang/Throwable'))
+        typeset.add(findClass('java/lang/Exception'))
+        typeset.add(findClass('java/lang/RuntimeException'))
+        if moduleName:
+            typeset.add(findClass('java/lang/Number'))
+            typeset.add(findClass('java/lang/Boolean'))
+            typeset.add(findClass('java/lang/Integer'))
+            typeset.add(findClass('java/lang/Long'))
+            typeset.add(findClass('java/lang/Double'))
+            typeset.add(findClass('java/util/Iterator'))
+            typeset.add(findClass('java/util/Enumeration'))
+            typeset.add(findClass('java/io/StringWriter'))
+            typeset.add(findClass('java/io/PrintWriter'))
+            typeset.add(findClass('java/io/Writer'))
+            packages.add('java.lang')
+
+        if moduleName:
+            cppdir = os.path.join(output, '_%s' %(moduleName))
+        else:
+            cppdir = output
+
+        allInOne = wrapperFiles != 'separate'
+        if allInOne:
+            if not os.path.isdir(cppdir):
+                os.makedirs(cppdir)
+            if wrapperFiles <= 1:
+                out_cpp = file(os.path.join(cppdir, '__wrap__.cpp'), 'w')
+            else:
+                fileCount = 1
+                fileName = '__wrap%02d__.cpp' %(fileCount)
+                out_cpp = file(os.path.join(cppdir, fileName), 'w')
+
+        done = set()
+        todo = typeset - done
+	if allInOne and wrapperFiles > 1:
+            classesPerFile = max(1, len(todo) / wrapperFiles)
+        classCount = 0
+        while todo:
+            for cls in todo:
+                classCount += 1
+                className = cls.getName()
+                names = className.split('.')
+                dir = os.path.join(cppdir, *names[:-1])
+                if not os.path.isdir(dir):
+                    os.makedirs(dir)
+
+                fileName = os.path.join(dir, names[-1])
+                out_h = file(fileName + '.h', "w")
+                line(out_h, 0, '#ifndef %s_H', '_'.join(names))
+                line(out_h, 0, '#define %s_H', '_'.join(names))
+
+                (superCls, constructors, methods, protectedMethods,
+                 fields, instanceFields, declares) = \
+                    header(env, out_h, cls, typeset, packages, excludes,
+                           generics)
+
+                if not allInOne:
+                    out_cpp = file(fileName + '.cpp', 'w')
+                names, superNames = code(env, out_cpp,
+                                         cls, superCls, constructors,
+                                         methods, protectedMethods,
+                                         fields, instanceFields, 
+                                         declares, typeset)
+                if moduleName:
+                    python(env, out_h, out_cpp,
+                           cls, superCls, names, superNames,
+                           constructors, methods, protectedMethods,
+                           fields, instanceFields,
+                           mappings.get(className), sequences.get(className),
+                           renames.get(className),
+                           declares, typeset, moduleName, generics)
+
+                line(out_h)
+                line(out_h, 0, '#endif')
+                out_h.close()
+
+                if not allInOne:
+                    out_cpp.close()
+                elif wrapperFiles > 1:
+                    if classCount >= classesPerFile:
+                        out_cpp.close()
+	                fileCount += 1
+	                fileName = '__wrap%02d__.cpp' %(fileCount)
+	                out_cpp = file(os.path.join(cppdir, fileName), 'w')
+                        classCount = 0
+                        
+            done.update(todo)
+            todo = typeset - done
+
+        if allInOne:
+            out_cpp.close()
+
+        if moduleName:
+            out = file(os.path.join(cppdir, moduleName) + '.cpp', 'w')
+            module(out, allInOne, done, cppdir, moduleName, shared, generics)
+            out.close()
+            if build or install or dist:
+                compile(env, os.path.dirname(args[0]), output, moduleName,
+                        install, dist, debug, jars, version,
+                        prefix, root, install_dir, home_dir, use_distutils,
+                        shared, compiler, modules, wininst, arch, generics)
+
+
+def header(env, out, cls, typeset, packages, excludes, generics):
+
+    names = cls.getName().split('.')
+    superCls = cls.getSuperclass()
+    declares = set([cls.getClass()])
+
+    interfaces = []
+    for interface in cls.getInterfaces():
+        if superCls and interface.isAssignableFrom(superCls):
+            continue
+        if known(interface, typeset, declares, packages, excludes, False):
+            interfaces.append(interface)
+
+    if cls.isInterface():
+        if interfaces:
+            superCls = interfaces.pop(0)
+        else:
+            superCls = findClass('java/lang/Object')
+        superClsName = superCls.getName()
+    elif superCls:
+        superClsName = superCls.getName()
+    else:
+        superClsName = 'JObject'
+
+    constructors = []
+    for constructor in cls.getDeclaredConstructors():
+        if Modifier.isPublic(constructor.getModifiers()):
+            if generics:
+                params = constructor.getGenericParameterTypes()
+                if len(params) == 1:
+                    if params[0] == cls:
+                        continue
+                    if ParameterizedType.instance_(params[0]):
+                        param = ParameterizedType.cast_(params[0])
+                        if param.getRawType() == cls:
+                            continue
+            else:
+                params = constructor.getParameterTypes()
+                if len(params) == 1 and params[0] == cls:
+                    continue
+            for param in params:
+                if not known(param, typeset, declares, packages, excludes,
+                             generics):
+                    break
+            else:
+                constructors.append(constructor)
+    sort(constructors, key=lambda x: len(x.getParameterTypes()))
+
+    methods = {}
+    protectedMethods = []
+    for method in cls.getDeclaredMethods():
+        modifiers = method.getModifiers()
+        if Modifier.isPublic(modifiers):
+            if generics:
+                returnType = method.getGenericReturnType()
+            else:
+                returnType = method.getReturnType()
+            if not known(returnType, typeset, declares, packages, excludes,
+                         generics):
+                continue
+            sig = "%s:%s" %(method.getName(), signature(method, True))
+            if sig in methods and returnType != cls:
+                continue
+            if generics:
+                params = method.getGenericParameterTypes()
+            else:
+                params = method.getParameterTypes()
+            for param in params:
+                if not known(param, typeset, declares, packages, excludes,
+                             generics):
+                    break
+            else:
+                methods[sig] = method
+        elif Modifier.isProtected(modifiers):
+            protectedMethods.append(method)
+    for interface in interfaces:
+        for method in interface.getMethods():
+            sig = "%s:%s" %(method.getName(), signature(method, True))
+            if sig not in methods:
+                if generics:
+                    param = method.getGenericReturnType()
+                else:
+                    param = method.getReturnType()
+                if not known(param, typeset, declares, packages, excludes,
+                             generics):
+                    continue
+                if generics:
+                    params = method.getGenericParameterTypes()
+                else:
+                    params = method.getParameterTypes()
+                for param in params:
+                    if not known(param, typeset, declares, packages, excludes,
+                                 generics):
+                        break
+                else:
+                    methods[sig] = method
+
+    def _compare(m0, m1):
+        value = cmp(m0.getName(), m1.getName())
+        if value == 0:
+            value = len(m0.getParameterTypes()) - len(m1.getParameterTypes())
+        return value
+
+    methods = methods.values()
+    sort(methods, fn=_compare)
+
+    for constructor in constructors:
+        if generics:
+            exceptions = constructor.getGenericExceptionTypes()
+        else:
+            exceptions = constructor.getExceptionTypes()
+        for exception in exceptions:
+            known(exception, typeset, declares, packages, excludes, generics)
+    for method in methods:
+        if generics:
+            exceptions = method.getGenericExceptionTypes()
+        else:
+            exceptions = method.getExceptionTypes()
+        for exception in exceptions:
+            known(exception, typeset, declares, packages, excludes, generics)
+
+    fields = []
+    instanceFields = []
+    for field in cls.getDeclaredFields():
+        modifiers = field.getModifiers()
+        if Modifier.isPublic(modifiers):
+            if generics:
+                fieldType = field.getGenericType()
+            else:
+                fieldType = field.getType()
+            if not known(fieldType, typeset, declares, packages, excludes,
+                         generics):
+                continue
+            if Modifier.isStatic(modifiers):
+                fields.append(field)
+            else:
+                instanceFields.append(field)
+    sort(fields, key=lambda x: x.getName())
+    sort(instanceFields, key=lambda x: x.getName())
+
+    line(out)
+    superNames = superClsName.split('.')
+    line(out, 0, '#include "%s.h"', '/'.join(superNames))
+
+    line(out, 0)
+    namespaces = {}
+    for declare in declares:
+        namespace = namespaces
+        if declare not in (cls, superCls):
+            declareNames = declare.getName().split('.')
+            for declareName in declareNames[:-1]:
+                namespace = namespace.setdefault(declareName, {})
+            namespace[declareNames[-1]] = True
+    forward(out, namespaces, 0)
+    line(out, 0, 'template<class T> class JArray;')
+
+    indent = 0;
+    line(out)
+    for name in names[:-1]:
+        line(out, indent, 'namespace %s {', cppname(name))
+        indent += 1
+
+    line(out)
+    if superClsName == 'JObject':
+        line(out, indent, 'class %s : public JObject {', cppname(names[-1]))
+    else:
+        line(out, indent, 'class %s : public %s {',
+             cppname(names[-1]), '::'.join(cppnames(superNames)))
+        
+    line(out, indent, 'public:')
+    indent += 1
+
+    if methods or protectedMethods or constructors:
+        line(out, indent, 'enum {')
+        for constructor in constructors:
+            line(out, indent + 1, 'mid_init$_%s,',
+                 env.strhash(signature(constructor)))
+        for method in methods:
+            line(out, indent + 1, 'mid_%s_%s,', method.getName(),
+                 env.strhash(signature(method)))
+        for method in protectedMethods:
+            line(out, indent + 1, 'mid_%s_%s,', method.getName(),
+                 env.strhash(signature(method)))
+        line(out, indent + 1, 'max_mid')
+        line(out, indent, '};')
+
+    if instanceFields:
+        line(out)
+        line(out, indent, 'enum {')
+        for field in instanceFields:
+            line(out, indent + 1, 'fid_%s,', field.getName())
+        line(out, indent + 1, 'max_fid')
+        line(out, indent, '};')
+
+    line(out)
+    line(out, indent, 'static java::lang::Class *class$;');
+    line(out, indent, 'static jmethodID *mids$;');
+    if instanceFields:
+        line(out, indent, 'static jfieldID *fids$;');
+    line(out, indent, 'static jclass initializeClass();');
+    line(out)
+
+    line(out, indent, 'explicit %s(jobject obj) : %s(obj) {',
+         cppname(names[-1]), '::'.join(cppnames(superNames)))
+    line(out, indent + 1, 'if (obj != NULL)');
+    line(out, indent + 2, 'initializeClass();')
+    line(out, indent, '}')
+    line(out, indent, '%s(const %s& obj) : %s(obj) {}',
+         cppname(names[-1]), cppname(names[-1]),
+         '::'.join(cppnames(superNames)))
+
+    if fields:
+        line(out)
+        for field in fields:
+            fieldType = field.getType()
+            fieldName = cppname(field.getName())
+            if fieldType.isPrimitive():
+                line(out, indent, 'static %s %s;',
+                     typename(fieldType, cls, False), fieldName)
+            else:
+                line(out, indent, 'static %s *%s;',
+                     typename(fieldType, cls, False), fieldName)
+
+    if instanceFields:
+        line(out)
+        for field in instanceFields:
+            fieldType = field.getType()
+            fieldName = field.getName()
+            modifiers = field.getModifiers()
+            line(out, indent, '%s _get_%s() const;',
+                 typename(fieldType, cls, False), fieldName)
+            if not Modifier.isFinal(modifiers):
+                line(out, indent, 'void _set_%s(%s) const;',
+                     fieldName, typename(fieldType, cls, True))
+
+    if constructors:
+        line(out)
+        for constructor in constructors:
+            params = [typename(param, cls, True)
+                      for param in constructor.getParameterTypes()]
+            line(out, indent, '%s(%s);', cppname(names[-1]), ', '.join(params))
+
+    if methods:
+        line(out)
+        for method in methods:
+            modifiers = method.getModifiers()
+            if Modifier.isStatic(modifiers):
+                prefix = 'static '
+                const = ''
+            else:
+                prefix = ''
+                const = ' const'
+            params = [typename(param, cls, True)
+                      for param in method.getParameterTypes()]
+            methodName = cppname(method.getName())
+            line(out, indent, '%s%s %s(%s)%s;',
+                 prefix, typename(method.getReturnType(), cls, False),
+                 methodName, ', '.join(params), const)
+
+    indent -= 1
+    line(out, indent, '};')
+
+    while indent:
+        indent -= 1
+        line(out, indent, '}')
+
+    return (superCls, constructors, methods, protectedMethods,
+            fields, instanceFields, declares)
+
+
+def code(env, out, cls, superCls, constructors, methods, protectedMethods,
+         fields, instanceFields, declares, typeset):
+
+    className = cls.getName()
+    names = className.split('.')
+
+    if superCls:
+        superClsName = superCls.getName()
+    else:
+        superClsName = 'JObject'
+    superNames = superClsName.split('.')
+
+    line(out, 0, '#include <jni.h>')
+    line(out, 0, '#include "JCCEnv.h"')
+    line(out, 0, '#include "%s.h"', className.replace('.', '/'))
+    for declare in declares:
+        if declare not in (cls, superCls):
+            line(out, 0, '#include "%s.h"', declare.getName().replace('.', '/'))
+    line(out, 0, '#include "JArray.h"')
+
+    indent = 0
+    line(out)
+    for name in names[:-1]:
+        line(out, indent, 'namespace %s {', cppname(name))
+        indent += 1
+
+    line(out)
+    line(out, indent, 'java::lang::Class *%s::class$ = NULL;',
+         cppname(names[-1]))
+    line(out, indent, 'jmethodID *%s::mids$ = NULL;', cppname(names[-1]))
+    if instanceFields:
+        line(out, indent, 'jfieldID *%s::fids$ = NULL;', cppname(names[-1]))
+
+    for field in fields:
+        fieldType = field.getType()
+        fieldName = cppname(field.getName())
+        typeName = typename(fieldType, cls, False)
+        if fieldType.isPrimitive():
+            line(out, indent, '%s %s::%s = (%s) 0;',
+                 typeName, cppname(names[-1]), fieldName, typeName)
+        else:
+            line(out, indent, '%s *%s::%s = NULL;',
+                 typeName, cppname(names[-1]), fieldName)
+
+    line(out)
+    line(out, indent, 'jclass %s::initializeClass()', cppname(names[-1]))
+    line(out, indent, '{')
+    line(out, indent + 1, 'if (!class$)')
+    line(out, indent + 1, '{')
+    line(out)
+    line(out, indent + 2, 'jclass cls = (jclass) env->findClass("%s");',
+         className.replace('.', '/'))
+
+    if methods or protectedMethods or constructors:
+        line(out)
+        line(out, indent + 2, 'mids$ = new jmethodID[max_mid];')
+        for constructor in constructors:
+            sig = signature(constructor)
+            line(out, indent + 2,
+                 'mids$[mid_init$_%s] = env->getMethodID(cls, "<init>", "%s");',
+                 env.strhash(sig), sig)
+        isExtension = False
+        for method in methods:
+            methodName = method.getName()
+            if methodName == 'pythonExtension':
+                isExtension = True
+            sig = signature(method)
+            line(out, indent + 2,
+                 'mids$[mid_%s_%s] = env->get%sMethodID(cls, "%s", "%s");',
+                 methodName, env.strhash(sig),
+                 Modifier.isStatic(method.getModifiers()) and 'Static' or '',
+                 methodName, sig)
+        for method in protectedMethods:
+            methodName = method.getName()
+            sig = signature(method)
+            line(out, indent + 2,
+                 'mids$[mid_%s_%s] = env->get%sMethodID(cls, "%s", "%s");',
+                 methodName, env.strhash(sig),
+                 Modifier.isStatic(method.getModifiers()) and 'Static' or '',
+                 methodName, sig)
+
+    if instanceFields:
+        line(out)
+        line(out, indent + 2, 'fids$ = new jfieldID[max_fid];')
+        for field in instanceFields:
+            fieldName = field.getName()
+            line(out, indent + 2,
+                 'fids$[fid_%s] = env->getFieldID(cls, "%s", "%s");',
+                 fieldName, fieldName, signature(field))
+
+    line(out)
+    line(out, indent + 2, 'class$ = (java::lang::Class *) new JObject(cls);')
+
+    if fields:
+        line(out, indent + 2, 'cls = (jclass) class$->this$;')
+        line(out)
+        for field in fields:
+            fieldType = field.getType()
+            fieldName = field.getName()
+            if fieldType.isPrimitive():
+                line(out, indent + 2,
+                     '%s = env->getStatic%sField(cls, "%s");',
+                     cppname(fieldName), fieldType.getName().capitalize(),
+                     fieldName)
+            else:
+                line(out, indent + 2,
+                     '%s = new %s(env->getStaticObjectField(cls, "%s", "%s"));',
+                     cppname(fieldName), typename(fieldType, cls, False),
+                     fieldName, signature(field))
+
+    line(out, indent + 1, '}')
+    line(out, indent + 1, 'return (jclass) class$->this$;')
+    line(out, indent, '}')
+
+    for constructor in constructors:
+        line(out)
+        sig = signature(constructor)
+        decls, args = argnames(constructor.getParameterTypes(), cls)
+
+        line(out, indent, "%s::%s(%s) : %s(env->newObject(initializeClass, &mids$, mid_init$_%s%s)) {}",
+             cppname(names[-1]), cppname(names[-1]), decls,
+             '::'.join(cppnames(superNames)),
+             env.strhash(sig), args)
+
+    for method in methods:
+        modifiers = method.getModifiers()
+        returnType = method.getReturnType()
+        params = method.getParameterTypes()
+        methodName = method.getName()
+        superMethod = None
+        isStatic = Modifier.isStatic(modifiers)
+
+        if (isExtension and not isStatic and superCls and
+            Modifier.isNative(modifiers)):
+            superMethod = find_method(superCls, methodName, params)
+            if superMethod is None:
+                continue
+
+        if isStatic:
+            qualifier = 'Static'
+            this = 'cls'
+            midns = ''
+            const = ''
+        else:
+            isStatic = False
+            if superMethod is not None:
+                qualifier = 'Nonvirtual'
+                this = 'this$, (jclass) %s::class$->this$' %('::'.join(cppnames(superNames)))
+                declaringClass = superMethod.getDeclaringClass()
+                midns = '%s::' %(typename(declaringClass, cls, False))
+            else:
+                qualifier = ''
+                this = 'this$'
+                midns = ''
+            const = ' const'
+
+        sig = signature(method)
+        decls, args = argnames(params, cls)
+
+        line(out)
+        line(out, indent, '%s %s::%s(%s)%s',
+             typename(returnType, cls, False), cppname(names[-1]),
+             cppname(methodName), decls, const)
+        line(out, indent, '{')
+        if isStatic:
+            line(out, indent + 1, 'jclass cls = initializeClass();');
+        if returnType.isPrimitive():
+            line(out, indent + 1,
+                 '%senv->call%s%sMethod(%s, %smids$[%smid_%s_%s]%s);',
+                 not returnType.getName() == 'void' and 'return ' or '',
+                 qualifier, returnType.getName().capitalize(), this,
+                 midns, midns, methodName, env.strhash(sig), args)
+        else:
+            line(out, indent + 1,
+                 'return %s(env->call%sObjectMethod(%s, %smids$[%smid_%s_%s]%s));',
+                 typename(returnType, cls, False), qualifier, this,
+                 midns, midns, methodName, env.strhash(sig), args)
+        line(out, indent, '}')
+
+    if instanceFields:
+        for field in instanceFields:
+            fieldType = field.getType()
+            fieldName = field.getName()
+            line(out)
+            line(out, indent, '%s %s::_get_%s() const',
+                 typename(fieldType, cls, False), cppname(names[-1]), fieldName)
+            line(out, indent, '{')
+            if fieldType.isPrimitive():
+                line(out, indent + 1,
+                     'return env->get%sField(this$, fids$[fid_%s]);',
+                     fieldType.getName().capitalize(), fieldName)
+            else:
+                line(out, indent + 1,
+                     'return %s(env->getObjectField(this$, fids$[fid_%s]));',
+                     typename(fieldType, cls, False), fieldName)
+            line(out, indent, '}')
+
+            if not Modifier.isFinal(field.getModifiers()):
+                line(out)
+                line(out, indent, 'void %s::_set_%s(%s a0) const',
+                     cppname(names[-1]), fieldName,
+                     typename(fieldType, cls, True))
+                line(out, indent, '{')
+                if fieldType.isPrimitive():
+                    line(out, indent + 1,
+                         'env->set%sField(this$, fids$[fid_%s], a0);',
+                         fieldType.getName().capitalize(), fieldName)
+                else:
+                    line(out, indent + 1,
+                         'env->setObjectField(this$, fids$[fid_%s], a0.this$);',
+                         fieldName)
+                line(out, indent, '}')
+
+    while indent:
+        indent -= 1
+        line(out, indent, '}')
+
+    return names, superNames
+
+
+if __name__ == '__main__':
+    jcc(sys.argv)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/patches/patch.4195	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+--- runpy.py.old	2008-10-19 16:02:18.000000000 -0700
++++ runpy.py	2008-10-19 16:13:44.000000000 -0700
+@@ -79,10 +79,13 @@
+     loader = get_loader(mod_name)
+     if loader is None:
+         raise ImportError("No module named %s" % mod_name)
+     if loader.is_package(mod_name):
+-        raise ImportError(("%s is a package and cannot " +
+-                          "be directly executed") % mod_name)
++        try:
++            return _get_module_details('.'.join((mod_name, '__main__')))
++        except ImportError, e:
++            raise ImportError(("%s; %s is a package and cannot " +
++                               "be directly executed") %(e, mod_name))
+     code = loader.get_code(mod_name)
+     if code is None:
+         raise ImportError("No code object available for %s" % mod_name)
+     filename = _get_filename(loader, mod_name)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/patches/patch.43.0.6c11	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,135 @@
+Index: setuptools/extension.py
+===================================================================
+--- setuptools/extension.py	(revision 75864)
++++ setuptools/extension.py	(working copy)
+@@ -28,6 +28,11 @@
+ class Library(Extension):
+     """Just like a regular Extension, but built as a library instead"""
+ 
++    def __init__(self, *args, **kwds):
++        self.force_shared = kwds.pop('force_shared', False)
++        Extension.__init__(self, *args, **kwds)
++
++
+ import sys, distutils.core, distutils.extension
+ distutils.core.Extension = Extension
+ distutils.extension.Extension = Extension
+Index: setuptools/command/build_ext.py
+===================================================================
+--- setuptools/command/build_ext.py	(revision 75864)
++++ setuptools/command/build_ext.py	(working copy)
+@@ -85,8 +85,12 @@
+         if fullname in self.ext_map:
+             ext = self.ext_map[fullname]
+             if isinstance(ext,Library):
++                if ext.force_shared and not use_stubs:
++                    _libtype = 'shared'
++                else:
++                    _libtype = libtype
+                 fn, ext = os.path.splitext(filename)
+-                return self.shlib_compiler.library_filename(fn,libtype)
++                return self.shlib_compiler.library_filename(fn,_libtype)
+             elif use_stubs and ext._links_to_dynamic:
+                 d,fn = os.path.split(filename)
+                 return os.path.join(d,'dl-'+fn)
+@@ -170,14 +174,22 @@
+     def build_extension(self, ext):
+         _compiler = self.compiler
+         try:
++            force_shared = False
+             if isinstance(ext,Library):
+                 self.compiler = self.shlib_compiler
++                force_shared = ext.force_shared and not use_stubs
++                if force_shared:
++                    self.compiler.link_shared_object = \
++                        sh_link_shared_object.__get__(self.compiler)
+             _build_ext.build_extension(self,ext)
+             if ext._needs_stub:
+                 self.write_stub(
+                     self.get_finalized_command('build_py').build_lib, ext
+                 )
+         finally:
++            if force_shared:
++                self.compiler.link_shared_object = \
++                    link_shared_object.__get__(self.compiler)
+             self.compiler = _compiler
+ 
+     def links_to_dynamic(self, ext):
+@@ -244,44 +256,41 @@
+                 os.unlink(stub_file)
+ 
+ 
+-if use_stubs or os.name=='nt':
+-    # Build shared libraries
+-    #
+-    def link_shared_object(self, objects, output_libname, output_dir=None,
+-        libraries=None, library_dirs=None, runtime_library_dirs=None,
+-        export_symbols=None, debug=0, extra_preargs=None,
+-        extra_postargs=None, build_temp=None, target_lang=None
+-    ):  self.link(
+-            self.SHARED_LIBRARY, objects, output_libname,
+-            output_dir, libraries, library_dirs, runtime_library_dirs,
+-            export_symbols, debug, extra_preargs, extra_postargs,
+-            build_temp, target_lang
+-        )
+-else:
+-    # Build static libraries everywhere else
+-    libtype = 'static'
++def sh_link_shared_object(self, objects, output_libname, output_dir=None,
++    libraries=None, library_dirs=None, runtime_library_dirs=None,
++    export_symbols=None, debug=0, extra_preargs=None,
++    extra_postargs=None, build_temp=None, target_lang=None
++):  self.link(self.SHARED_LIBRARY, objects, output_libname,
++              output_dir, libraries, library_dirs, runtime_library_dirs,
++              export_symbols, debug, extra_preargs, extra_postargs,
++              build_temp, target_lang)
+ 
+-    def link_shared_object(self, objects, output_libname, output_dir=None,
+-        libraries=None, library_dirs=None, runtime_library_dirs=None,
+-        export_symbols=None, debug=0, extra_preargs=None,
+-        extra_postargs=None, build_temp=None, target_lang=None
+-    ):
+-        # XXX we need to either disallow these attrs on Library instances,
+-        #     or warn/abort here if set, or something...
+-        #libraries=None, library_dirs=None, runtime_library_dirs=None,
+-        #export_symbols=None, extra_preargs=None, extra_postargs=None,
+-        #build_temp=None
++def st_link_shared_object(self, objects, output_libname, output_dir=None,
++    libraries=None, library_dirs=None, runtime_library_dirs=None,
++    export_symbols=None, debug=0, extra_preargs=None,
++    extra_postargs=None, build_temp=None, target_lang=None
++):
++    # XXX we need to either disallow these attrs on Library instances,
++    #     or warn/abort here if set, or something...
++    #libraries=None, library_dirs=None, runtime_library_dirs=None,
++    #export_symbols=None, extra_preargs=None, extra_postargs=None,
++    #build_temp=None
+ 
+-        assert output_dir is None   # distutils build_ext doesn't pass this
+-        output_dir,filename = os.path.split(output_libname)
+-        basename, ext = os.path.splitext(filename)
+-        if self.library_filename("x").startswith('lib'):
+-            # strip 'lib' prefix; this is kludgy if some platform uses
+-            # a different prefix
+-            basename = basename[3:]
++    assert output_dir is None   # distutils build_ext doesn't pass this
++    output_dir,filename = os.path.split(output_libname)
++    basename, ext = os.path.splitext(filename)
++    if self.library_filename("x").startswith('lib'):
++        # strip 'lib' prefix; this is kludgy if some platform uses
++        # a different prefix
++        basename = basename[3:]
+ 
+-        self.create_static_lib(
+-            objects, basename, output_dir, debug, target_lang
+-        )
++    self.create_static_lib(objects, basename, output_dir, debug, target_lang)
+ 
+ 
++if use_stubs or os.name=='nt':
++    # Build shared libraries
++    link_shared_object = sh_link_shared_object
++else:
++    # Build static libraries everywhere else (unless force_shared)
++    libtype = 'static'
++    link_shared_object = st_link_shared_object
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/patches/patch.43.0.6c7	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,135 @@
+Index: setuptools/extension.py
+===================================================================
+--- setuptools/extension.py	(revision 66382)
++++ setuptools/extension.py	(working copy)
+@@ -28,6 +28,11 @@
+ class Library(Extension):
+     """Just like a regular Extension, but built as a library instead"""
+ 
++    def __init__(self, *args, **kwds):
++        self.force_shared = kwds.pop('force_shared', False)
++        Extension.__init__(self, *args, **kwds)
++
++
+ import sys, distutils.core, distutils.extension
+ distutils.core.Extension = Extension
+ distutils.extension.Extension = Extension
+Index: setuptools/command/build_ext.py
+===================================================================
+--- setuptools/command/build_ext.py	(revision 66382)
++++ setuptools/command/build_ext.py	(working copy)
+@@ -84,8 +84,12 @@
+         filename = _build_ext.get_ext_filename(self,fullname)
+         ext = self.ext_map[fullname]
+         if isinstance(ext,Library):
++            if ext.force_shared and not use_stubs:
++                _libtype = 'shared'
++            else:
++                _libtype = libtype
+             fn, ext = os.path.splitext(filename)
+-            return self.shlib_compiler.library_filename(fn,libtype)
++            return self.shlib_compiler.library_filename(fn,_libtype)
+         elif use_stubs and ext._links_to_dynamic:
+             d,fn = os.path.split(filename)
+             return os.path.join(d,'dl-'+fn)
+@@ -170,14 +174,22 @@
+     def build_extension(self, ext):
+         _compiler = self.compiler
+         try:
++            force_shared = False
+             if isinstance(ext,Library):
+                 self.compiler = self.shlib_compiler
++                force_shared = ext.force_shared and not use_stubs
++                if force_shared:
++                    self.compiler.link_shared_object = \
++                        sh_link_shared_object.__get__(self.compiler)
+             _build_ext.build_extension(self,ext)
+             if ext._needs_stub:
+                 self.write_stub(
+                     self.get_finalized_command('build_py').build_lib, ext
+                 )
+         finally:
++            if force_shared:
++                self.compiler.link_shared_object = \
++                    link_shared_object.__get__(self.compiler)
+             self.compiler = _compiler
+ 
+     def links_to_dynamic(self, ext):
+@@ -244,44 +256,41 @@
+                 os.unlink(stub_file)
+ 
+ 
+-if use_stubs or os.name=='nt':
+-    # Build shared libraries
+-    #
+-    def link_shared_object(self, objects, output_libname, output_dir=None,
+-        libraries=None, library_dirs=None, runtime_library_dirs=None,
+-        export_symbols=None, debug=0, extra_preargs=None,
+-        extra_postargs=None, build_temp=None, target_lang=None
+-    ):  self.link(
+-            self.SHARED_LIBRARY, objects, output_libname,
+-            output_dir, libraries, library_dirs, runtime_library_dirs,
+-            export_symbols, debug, extra_preargs, extra_postargs,
+-            build_temp, target_lang
+-        )
+-else:
+-    # Build static libraries everywhere else
+-    libtype = 'static'
++def sh_link_shared_object(self, objects, output_libname, output_dir=None,
++    libraries=None, library_dirs=None, runtime_library_dirs=None,
++    export_symbols=None, debug=0, extra_preargs=None,
++    extra_postargs=None, build_temp=None, target_lang=None
++):  self.link(self.SHARED_LIBRARY, objects, output_libname,
++              output_dir, libraries, library_dirs, runtime_library_dirs,
++              export_symbols, debug, extra_preargs, extra_postargs,
++              build_temp, target_lang)
+ 
+-    def link_shared_object(self, objects, output_libname, output_dir=None,
+-        libraries=None, library_dirs=None, runtime_library_dirs=None,
+-        export_symbols=None, debug=0, extra_preargs=None,
+-        extra_postargs=None, build_temp=None, target_lang=None
+-    ):
+-        # XXX we need to either disallow these attrs on Library instances,
+-        #     or warn/abort here if set, or something...
+-        #libraries=None, library_dirs=None, runtime_library_dirs=None,
+-        #export_symbols=None, extra_preargs=None, extra_postargs=None,
+-        #build_temp=None
++def st_link_shared_object(self, objects, output_libname, output_dir=None,
++    libraries=None, library_dirs=None, runtime_library_dirs=None,
++    export_symbols=None, debug=0, extra_preargs=None,
++    extra_postargs=None, build_temp=None, target_lang=None
++):
++    # XXX we need to either disallow these attrs on Library instances,
++    #     or warn/abort here if set, or something...
++    #libraries=None, library_dirs=None, runtime_library_dirs=None,
++    #export_symbols=None, extra_preargs=None, extra_postargs=None,
++    #build_temp=None
+ 
+-        assert output_dir is None   # distutils build_ext doesn't pass this
+-        output_dir,filename = os.path.split(output_libname)
+-        basename, ext = os.path.splitext(filename)
+-        if self.library_filename("x").startswith('lib'):
+-            # strip 'lib' prefix; this is kludgy if some platform uses
+-            # a different prefix
+-            basename = basename[3:]
++    assert output_dir is None   # distutils build_ext doesn't pass this
++    output_dir,filename = os.path.split(output_libname)
++    basename, ext = os.path.splitext(filename)
++    if self.library_filename("x").startswith('lib'):
++        # strip 'lib' prefix; this is kludgy if some platform uses
++        # a different prefix
++        basename = basename[3:]
+ 
+-        self.create_static_lib(
+-            objects, basename, output_dir, debug, target_lang
+-        )
++    self.create_static_lib(objects, basename, output_dir, debug, target_lang)
+ 
+ 
++if use_stubs or os.name=='nt':
++    # Build shared libraries
++    link_shared_object = sh_link_shared_object
++else:
++    # Build static libraries everywhere else (unless force_shared)
++    libtype = 'static'
++    link_shared_object = st_link_shared_object
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/python.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1625 @@
+#
+#   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 os, sys, platform, shutil, _jcc
+
+from cpp import PRIMITIVES, INDENT, HALF_INDENT
+from cpp import cppname, cppnames, typename
+from cpp import line, signature, find_method, split_pkg, sort
+from cpp import Modifier, Class, Method
+from _jcc import findClass
+from config import INCLUDES, CFLAGS, DEBUG_CFLAGS, LFLAGS, SHARED
+
+try:
+    from cpp import ParameterizedType, TypeVariable
+except ImportError:
+    pass
+
+python_ver = '%d.%d.%d' %(sys.version_info[0:3])
+if python_ver < '2.4':
+    from sets import Set as set
+
+
+RESULTS = { 'boolean': 'Py_RETURN_BOOL(%s);',
+            'byte': 'return PyInt_FromLong(%s);',
+            'char': 'return PyUnicode_FromUnicode((Py_UNICODE *) &%s, 1);',
+            'double': 'return PyFloat_FromDouble((double) %s);',
+            'float': 'return PyFloat_FromDouble((double) %s);',
+            'int': 'return PyInt_FromLong((long) %s);',
+            'long': 'return PyLong_FromLongLong((PY_LONG_LONG) %s);',
+            'short': 'return PyInt_FromLong((long) %s);',
+            'java.lang.String': 'return j2p(%s);' }
+
+CALLARGS = { 'boolean': ('O', '(%s ? Py_True : Py_False)', False),
+             'byte': ('O', 'PyInt_FromLong(%s)', True),
+             'char': ('O', 'PyUnicode_FromUnicode((Py_UNICODE *) &%s, 1)', True),
+             'double': ('d', '(double) %s', False),
+             'float': ('f', '(float) %s', False),
+             'int': ('i', '(int) %s', False),
+             'long': ('L', '(long long) %s', False),
+             'short': ('i', '(int) %s', False),
+             'java.lang.String': ('O', 'env->fromJString((jstring) %s, 0)', True) }
+
+
+def parseArgs(params, current, generics):
+
+    def signature(cls):
+        array = ''
+        while cls.isArray():
+            array += '['
+            cls = cls.getComponentType()
+        clsName = cls.getName()
+        if cls.isPrimitive():
+            return array + PRIMITIVES[clsName]
+        if clsName == 'java.lang.String':
+            return array + 's'
+        if clsName == 'java.lang.Object':
+            return array + 'o'
+        if generics and cls.getTypeParameters():
+            return array + 'K'
+        else:
+            return array + 'k'
+
+    def checkarg(cls):
+        while cls.isArray():
+            cls = cls.getComponentType()
+        if (cls.isPrimitive() or
+            cls.getName() in ('java.lang.String', 'java.lang.Object')):
+            return ''
+        return ', %s::initializeClass' %(typename(cls, current, False))
+
+    def callarg(cls, i):
+        if generics:
+            while cls.isArray():
+                cls = cls.getComponentType()
+            if cls.getTypeParameters():
+                ns, sep, n = rpartition(typename(cls, current, False), '::')
+                return ', &a%d, &p%d, %s%st_%s::parameters_' %(i, i, ns, sep, n)
+        return ', &a%d' %(i)
+
+    return (''.join([signature(param) for param in params]),
+            ''.join([checkarg(param) for param in params]),
+            ''.join([callarg(params[i], i) for i in xrange(len(params))]))
+
+
+def declareVars(out, indent, params, current, generics, typeParams):
+
+    for i in xrange(len(params)):
+        param = params[i]
+        line(out, indent, '%s a%d%s;',
+             typename(param, current, False), i,
+             not param.isPrimitive() and '((jobject) NULL)' or '')
+        if generics:
+            while param.isArray():
+                param = param.getComponentType()
+            if param.getTypeParameters():
+                line(out, indent, 'PyTypeObject **p%d;', i)
+                typeParams.add(i)
+    
+
+def construct(out, indent, cls, inCase, constructor, names, generics):
+
+    if inCase:
+        line(out, indent, '{')
+        indent += 1
+
+    params = constructor.getParameterTypes()
+    if generics:
+        typeParams = set()
+    else:
+        typeParams = None
+
+    count = len(params)
+
+    declareVars(out, indent, params, cls, generics, typeParams)
+    line(out, indent, '%s object((jobject) NULL);', cppname(names[-1]))
+
+    line(out)
+    if count:
+        line(out, indent, 'if (!parseArgs(args, "%s"%s%s))',
+             *parseArgs(params, cls, generics))
+        line(out, indent, '{')
+        indent += 1
+
+    line(out, indent, 'INT_CALL(object = %s(%s));',
+         cppname(names[-1]), ', '.join(['a%d' %(i) for i in xrange(count)]))
+    line(out, indent, 'self->object = object;')
+    if inCase:
+        line(out, indent, 'break;')
+
+    if count:
+        indent -= 1
+        line(out, indent, '}')
+
+    if inCase:
+        indent -= 1
+        line(out, indent, '}')
+
+
+def rpartition(string, sep):
+
+    if python_ver >= '2.5.0':
+        return string.rpartition(sep)
+    else:
+        parts = split_pkg(string, sep)
+        if len(parts) == 1:
+            return ('', '', parts[0])
+        return (parts[0], sep, parts[1])
+
+
+def fieldValue(cls, value, fieldType):
+
+    if fieldType.isArray():
+        fieldType = fieldType.getComponentType()
+        if fieldType.isArray():
+            result = 'JArray<jobject>(%s->this$).wrap(NULL)'
+        elif fieldType.isPrimitive():
+            result = '%s->wrap()'
+        elif fieldType.getName() == 'java.lang.String':
+            result = 'JArray<jstring>(%s->this$).wrap()'
+        else:
+            parts = rpartition(typename(fieldType, cls, False), '::')
+            result = 'JArray<jobject>(%%s->this$).wrap(%s%st_%s::wrap_jobject)' %(parts)
+
+    elif fieldType.getName() == 'java.lang.String':
+        result = 'j2p(*%s)'
+
+    elif not fieldType.isPrimitive():
+        parts = rpartition(typename(fieldType, cls, False), '::')
+        result = '%s%st_%s::wrap_Object(*%%s)' %(parts)
+
+    else:
+        return value
+
+    return result %(value)
+
+
+def returnValue(cls, returnType, value, genericRT=None, typeParams=None):
+
+    result = RESULTS.get(returnType.getName())
+    if result:
+        return result %(value)
+
+    if returnType.isArray():
+        returnType = returnType.getComponentType()
+        depth = 1
+        while returnType.isArray():
+            returnType = returnType.getComponentType()
+            depth += 1
+        if depth > 1:
+            return 'return JArray<jobject>(%s.this$).wrap(NULL);' %(value)
+        elif returnType.isPrimitive():
+            return 'return %s.wrap();' %(value)
+        elif returnType.getName() == 'java.lang.String':
+            return 'return JArray<jstring>(%s.this$).wrap();' %(value)
+
+        ns, sep, n = rpartition(typename(returnType, cls, False), '::')
+        return 'return JArray<jobject>(%s.this$).wrap(%s%st_%s::wrap_jobject);' %(value, ns, sep, n)
+
+    ns, sep, n = rpartition(typename(returnType, cls, False), '::')
+    if genericRT is not None:
+        if ParameterizedType.instance_(genericRT):
+            genericRT = ParameterizedType.cast_(genericRT)
+            clsArgs = []
+            for clsArg in genericRT.getActualTypeArguments():
+                if Class.instance_(clsArg):
+                    clsNames = Class.cast_(clsArg).getName().split('.')
+                    clsArg = '&%s::%s$$Type' %('::'.join(cppnames(clsNames[:-1])), cppname(clsNames[-1]))
+                    clsArgs.append(clsArg)
+                elif TypeVariable.instance_(clsArg):
+                    gd = TypeVariable.cast_(clsArg).getGenericDeclaration()
+                    if Class.instance_(gd):
+                        i = 0
+                        for clsParam in gd.getTypeParameters():
+                            if clsArg == clsParam:
+                                clsArgs.append('self->parameters[%d]' %(i))
+                                break
+                            i += 1
+                        else:
+                            break
+                    else:
+                        break
+                else:
+                    break
+            else:
+                return 'return %s%st_%s::wrap_Object(%s, %s);' %(ns, sep, n, value, ', '.join(clsArgs))
+        elif TypeVariable.instance_(genericRT):
+            gd = TypeVariable.cast_(genericRT).getGenericDeclaration()
+            i = 0
+            if Class.instance_(gd):
+                for clsParam in gd.getTypeParameters():
+                    if genericRT == clsParam:
+                        return 'return self->parameters[%d] != NULL ? wrapType(self->parameters[%d], %s.this$) : %s%st_%s::wrap_Object(%s);' %(i, i, value, ns, sep, n, value)
+                    i += 1
+            elif Method.instance_(gd):
+                for clsParam in gd.getTypeParameters():
+                    if genericRT == clsParam and i in typeParams:
+                        return 'return p%d != NULL && p%d[0] != NULL ? wrapType(p%d[0], %s.this$) : %s%st_%s::wrap_Object(%s);' %(i, i, i, value, ns, sep, n, value)
+                    i += 1
+
+    return 'return %s%st_%s::wrap_Object(%s);' %(ns, sep, n, value)
+
+
+def call(out, indent, cls, inCase, method, names, cardinality, isExtension,
+         generics):
+
+    if inCase:
+        line(out, indent, '{')
+        indent += 1
+
+    name = method.getName()
+    modifiers = method.getModifiers()
+    params = method.getParameterTypes()
+    returnType = method.getReturnType()
+    if generics:
+        genericRT = method.getGenericReturnType()
+        typeParams = set()
+    else:
+        genericRT = None
+        typeParams = None
+    count = len(params)
+
+    declareVars(out, indent, params, cls, generics, typeParams)
+
+    returnName = returnType.getName()
+    if returnName != 'void':
+        line(out, indent, '%s result%s;',
+             typename(returnType, cls, False),
+             not returnType.isPrimitive() and '((jobject) NULL)' or '')
+        result = 'result = '
+    else:
+        result = ''
+
+    if cardinality and (count or not inCase):
+        s = cardinality > 1 and 's' or ''
+        line(out)
+        if isExtension and name == 'clone' and Modifier.isNative(modifiers):
+            line(out, indent, 'if (arg)')
+        else:
+            line(out, indent, 'if (!parseArg%s(arg%s, "%s"%s%s))',
+                 s, s, *parseArgs(params, cls, generics))
+        line(out, indent, '{')
+        indent += 1
+
+    name = cppname(name)
+    if Modifier.isStatic(modifiers):
+        line(out, indent, 'OBJ_CALL(%s%s::%s(%s));',
+             result, '::'.join(cppnames(names)), name,
+             ', '.join(['a%d' %(i) for i in xrange(count)]))
+    else:
+        line(out, indent, 'OBJ_CALL(%sself->object.%s(%s));',
+             result, name, ', '.join(['a%d' %(i) for i in xrange(count)]))
+
+    if isExtension and name == 'clone' and Modifier.isNative(modifiers):
+        line(out)
+        line(out, indent, '%s object(result.this$);', typename(cls, cls, False))
+        line(out, indent, 'if (PyObject_TypeCheck(arg, &FinalizerProxy$$Type) &&')
+        line(out, indent, '    PyObject_TypeCheck(((t_fp *) arg)->object, self->ob_type))')
+        line(out, indent, '{')
+        line(out, indent + 1, 'PyObject *_arg = ((t_fp *) arg)->object;')
+        line(out, indent + 1, '((t_JObject *) _arg)->object = object;')
+        line(out, indent + 1, 'Py_INCREF(_arg);')
+        line(out, indent + 1, 'object.pythonExtension((jlong) (Py_intptr_t) (void *) _arg);')
+        line(out, indent + 1, 'Py_INCREF(arg);')
+        line(out, indent + 1, 'return arg;')
+        line(out, indent, '}')
+        line(out, indent, 'return PyErr_SetArgsError("%s", arg);' %(name))
+    elif returnName != 'void':
+        line(out, indent, returnValue(cls, returnType, 'result',
+                                      genericRT, typeParams))
+    else:
+        line(out, indent, 'Py_RETURN_NONE;')
+    if cardinality and (count or not inCase):
+        indent -= 1
+        line(out, indent, '}')
+
+    if inCase:
+        indent -= 1
+        line(out, indent, '}')
+
+
+def methodargs(methods, superMethods):
+        
+    if len(methods) == 1 and methods[0].getName() not in superMethods:
+        count = len(methods[0].getParameterTypes())
+        if count == 0:
+            return '', '', 0
+        elif count == 1:
+            return ', PyObject *arg', ', arg', 1
+
+    return ', PyObject *args', ', args', 2
+
+
+def jniname(cls):
+    
+    if cls.isPrimitive():
+        name = cls.getName()
+        if name != 'void':
+            name = 'j' + name
+    else:
+        name = 'jobject'
+
+    return name
+
+
+def jniargs(params):
+
+    count = len(params)
+    decls = ', '.join(['%s a%d' %(jniname(params[i]), i)
+                       for i in xrange(count)])
+    if decls:
+        return ', ' + decls
+
+    return ''
+
+
+def extension(env, out, indent, cls, names, name, count, method, generics):
+
+    line(out, indent, 'jlong ptr = jenv->CallLongMethod(jobj, %s::mids$[%s::mid_pythonExtension_%s]);',
+         cppname(names[-1]), cppname(names[-1]), env.strhash('()J'))
+    line(out, indent, 'PyObject *obj = (PyObject *) (Py_intptr_t) ptr;')
+
+    if name == 'pythonDecRef':
+        line(out)
+        line(out, indent, 'if (obj != NULL)')
+        line(out, indent, '{')
+        line(out, indent + 1, 'jenv->CallVoidMethod(jobj, %s::mids$[%s::mid_pythonExtension_%s], (jlong) 0);',
+             cppname(names[-1]), cppname(names[-1]), env.strhash('(J)V'))
+        line(out, indent + 1, 'env->finalizeObject(jenv, obj);')
+        line(out, indent, '}')
+        return
+
+    line(out, indent, 'PythonGIL gil(jenv);')
+
+    returnType = method.getReturnType()
+    returnName = returnType.getName()
+    if returnName != 'void':
+        line(out, indent, '%s value%s;',
+             typename(returnType, cls, False),
+             not returnType.isPrimitive() and '((jobject) NULL)' or '')
+
+    sigs = []
+    decrefs = []
+    args = []
+    i = 0
+    for param in method.getParameterTypes():
+        typeName = param.getName()
+        if typeName in CALLARGS:
+            sig, code, decref = CALLARGS[typeName]
+        elif param.isArray():
+            param = param.getComponentType()
+            if param.isPrimitive():
+                code = 'JArray<j%s>(%%s).wrap()' %(param.getName())
+            elif param.isArray():
+                code = 'JArray<jobject>(%s).wrap(NULL)'
+            elif param.getName() == 'java.lang.String':
+                code = 'JArray<jstring>(%s).wrap()'
+            else:
+                parts = rpartition(typename(param, cls, False), '::')
+                code = 'JArray<jobject>(%%s).wrap(%s%st_%s::wrap_jobject)' %(parts)
+            sig, decref = 'O', True
+        elif param.getName() == 'java.lang.String':
+            sig, code, decref = 'O', 'j2p(%%s))', True
+        else:
+            parts = rpartition(typename(param, cls, False), '::')
+            sig, code, decref = 'O', '%s%st_%s::wrap_Object(%s%s%s(%%s))' %(parts*2), True
+        if sig == 'O':
+            line(out, indent, 'PyObject *o%d = %s;', i, code %('a%d' %(i)))
+            args.append('o%d' %(i))
+        else:
+            args.append(code %('a%d' %(i)))
+        sigs.append(sig)
+        decrefs.append(decref)
+        i += 1
+
+    args = ', '.join(args)
+    if args:
+        args = ', ' + args
+    line(out, indent, 'PyObject *result = PyObject_CallMethod(obj, "%s", "%s"%s);',
+         name, ''.join(sigs), args)
+    i = 0
+    for decref in decrefs:
+        if decref:
+            line(out, indent, 'Py_DECREF(o%d);', i)
+        i += 1
+    line(out, indent, 'if (!result)')
+    line(out, indent + 1, 'throwPythonError();')
+    if returnName == 'void':
+        line(out, indent, 'else')
+        line(out, indent + 1, 'Py_DECREF(result);')
+    else:
+        signature, check, x = parseArgs([returnType], cls, False)
+        line(out, indent, 'else if (parseArg(result, "%s"%s, &value))',
+             signature, check)
+        line(out, indent, '{')
+        line(out, indent + 1, 'throwTypeError("%s", result);', name)
+        line(out, indent + 1, 'Py_DECREF(result);')
+        line(out, indent, '}')
+        line(out, indent, 'else')
+        line(out, indent, '{')
+        if not returnType.isPrimitive():
+            line(out, indent + 1, 'jobj = jenv->NewLocalRef(value.this$);')
+        line(out, indent + 1, 'Py_DECREF(result);')
+        if returnType.isPrimitive():
+            line(out, indent + 1, 'return value;')
+        else:
+            line(out, indent + 1, 'return jobj;')
+        line(out, indent, '}')
+        line(out)
+        if returnType.isPrimitive():
+            line(out, indent, 'return (j%s) 0;', returnName)
+        else:
+            line(out, indent, 'return (jobject) NULL;')
+
+
+def python(env, out_h, out, cls, superCls, names, superNames,
+           constructors, methods, protectedMethods, fields, instanceFields,
+           mapping, sequence, rename, declares, typeset, moduleName, generics):
+
+    line(out_h)
+    line(out_h, 0, '#include <Python.h>')
+    line(out_h)
+
+    indent = 0
+    for name in names[:-1]:
+        line(out_h, indent, 'namespace %s {', cppname(name))
+        indent += 1
+    line(out_h, indent, 'extern PyTypeObject %s$$Type;', names[-1])
+
+    if generics:
+        clsParams = cls.getTypeParameters()
+    else:
+        clsParams = None
+
+    line(out_h)
+    line(out_h, indent, 'class t_%s {', names[-1])
+    line(out_h, indent, 'public:')
+    line(out_h, indent + 1, 'PyObject_HEAD')
+    line(out_h, indent + 1, '%s object;', cppname(names[-1]))
+    if clsParams:
+        line(out_h, indent + 1, 'PyTypeObject *parameters[%d];', len(clsParams))
+        line(out_h, indent + 1, 'static PyTypeObject **parameters_(t_%s *self)',
+             cppname(names[-1]))
+        line(out_h, indent + 1, '{')
+        line(out_h, indent + 2, 'return (PyTypeObject **) &(self->parameters);')
+        line(out_h, indent + 1, '}')
+
+    line(out_h, indent + 1, 'static PyObject *wrap_Object(const %s&);',
+         cppname(names[-1]))
+    if clsParams:
+        line(out_h, indent + 1, 'static PyObject *wrap_Object(const %s&, %s);',
+             cppname(names[-1]),
+             ', '.join(['PyTypeObject *'] * len(clsParams)))
+    line(out_h, indent + 1, 'static PyObject *wrap_jobject(const jobject&);')
+    line(out_h, indent + 1, 'static void install(PyObject *module);')
+    line(out_h, indent + 1, 'static void initialize(PyObject *module);')
+    line(out_h, indent, '};')
+
+    iterator = findClass('java/util/Iterator')
+    enumeration = findClass('java/util/Enumeration')
+
+    while indent:
+        indent -= 1
+        line(out_h, indent, '}')
+
+    line(out)
+    line(out, 0, '#include "structmember.h"')
+    line(out, 0, '#include "functions.h"')
+    line(out, 0, '#include "macros.h"')
+
+    for inner in cls.getDeclaredClasses():
+        if inner in typeset and not inner in declares:
+            if Modifier.isStatic(inner.getModifiers()):
+                line(out, 0, '#include "%s.h"',
+                     inner.getName().replace('.', '/'))
+
+    for method in methods:
+        if method.getName() == 'pythonExtension':
+            isExtension = True
+            break
+    else:
+        isExtension = False
+                
+    line(out)
+    indent = 0
+    for name in names[:-1]:
+        line(out, indent, 'namespace %s {', cppname(name))
+        indent += 1
+
+    line(out, indent, 'static PyObject *t_%s_cast_(PyTypeObject *type, PyObject *arg);', names[-1])
+    line(out, indent, 'static PyObject *t_%s_instance_(PyTypeObject *type, PyObject *arg);', names[-1])
+
+    if constructors:
+        line(out, indent, 'static int t_%s_init_(t_%s *self, PyObject *args, PyObject *kwds);', names[-1], names[-1])
+        constructorName = 't_%s_init_' %(names[-1])
+    else:
+        constructorName = 'abstract_init'
+
+    if superCls:
+        superMethods = set([method.getName()
+                            for method in superCls.getMethods()])
+    else:
+        superMethods = ()
+
+    allMethods = {}
+    extMethods = {}
+    propMethods = {}
+
+    if methods:
+        for method in methods:
+            modifiers = method.getModifiers()
+            name = method.getName()
+            params = method.getParameterTypes()
+            superMethod = None
+            isNative = Modifier.isNative(modifiers)
+            isStatic = Modifier.isStatic(modifiers)
+
+            if (isExtension and not isStatic and superCls and isNative):
+                superMethod = find_method(superCls, name, params)
+
+            if isExtension and isNative and not isStatic:
+                extMethods.setdefault(name, []).append(method)
+
+            if superMethod or not (isExtension and isNative and not isStatic):
+                if isStatic:
+                    if name in allMethods:
+                        if Modifier.isStatic(allMethods[name][0].getModifiers()):
+                            allMethods[name].append(method)
+                        elif name + '_' in allMethods:
+                            allMethods[name + '_'].append(method)
+                        else:
+                            print >>sys.stderr, "  Warning: renaming static method '%s' on class %s to '%s_' since it is shadowed by non-static method of same name." %(name, '.'.join(names), name)
+                            allMethods[name + '_'] = [method]
+                    else:
+                        allMethods[name] = [method]
+                else:
+                    if name in allMethods:
+                        if Modifier.isStatic(allMethods[name][0].getModifiers()):
+                            print >>sys.stderr, "  Warning: renaming static method '%s' on class %s to '%s_' since it is shadowed by non-static method of same name." %(name, '.'.join(names), name)
+                            allMethods[name + '_'] = allMethods[name]
+                            allMethods[name] = [method]
+                        else:
+                            allMethods[name].append(method)
+                    else:
+                        allMethods[name] = [method]
+
+            if not (isExtension and isNative):
+                nameLen = len(name)
+                paramsLen = len(params)
+                if nameLen > 3 and paramsLen == 0 and name.startswith('get'):
+                    propMethods.setdefault(name[3].lower() + name[4:],
+                                           []).append(method)
+                elif nameLen > 3 and paramsLen == 1 and name.startswith('set'):
+                    propMethods.setdefault(name[3].lower() + name[4:],
+                                           []).append(method)
+                elif nameLen > 2 and paramsLen == 0 and name.startswith('is'):
+                    propMethods.setdefault(name[2].lower() + name[3:],
+                                           []).append(method)
+
+    properties = set([name for name in propMethods.iterkeys()
+                      if name not in allMethods])
+    propMethods = [(name, propMethods[name]) for name in properties]
+    sort(propMethods, key=lambda x: x[0])
+
+    extMethods = extMethods.items()
+    sort(extMethods, key=lambda x: x[0])
+    allMethods = allMethods.items()
+    sort(allMethods, key=lambda x: x[0])
+
+    iteratorMethod = None
+    iteratorExt = False
+    nextMethod = None
+    nextExt = False
+    nextElementMethod = None
+    nextElementExt = False
+
+    mappingMethod = None
+    if mapping:
+        mappingName, mappingSig = mapping.split(':')
+
+    sequenceLenMethod = None
+    sequenceGetMethod = None
+    if sequence:
+        sequenceLenName, sequenceLenSig = sequence[0].split(':')
+        sequenceGetName, sequenceGetSig = sequence[1].split(':')
+
+    for name, methods in allMethods:
+        args, x, cardinality = methodargs(methods, superMethods)
+        sort(methods, key=lambda x: len(x.getParameterTypes()))
+        method = methods[0]
+        modifiers = method.getModifiers()
+        if name == 'iterator' and iteratorMethod is None:
+            if (not method.getParameterTypes() and
+                iterator.isAssignableFrom(method.getReturnType())):
+                iteratorMethod = method
+        elif name == 'next' and nextMethod is None:
+            if (not method.getParameterTypes() and
+                not method.getReturnType().isPrimitive()):
+                nextMethod = method
+        elif name == 'nextElement' and nextElementMethod is None:
+            if (not method.getParameterTypes() and
+                not method.getReturnType().isPrimitive()):
+                nextElementMethod = method
+        elif mapping and name == mappingName and mappingMethod is None:
+            if signature(method) == mappingSig:
+                mappingMethod = (method, cardinality)
+        elif sequence and name == sequenceLenName and sequenceLenMethod is None:
+            if signature(method) == sequenceLenSig:
+                sequenceLenMethod = (method, cardinality)
+        elif sequence and name == sequenceGetName and sequenceGetMethod is None:
+            if signature(method) == sequenceGetSig:
+                sequenceGetMethod = (method, cardinality)
+        elif isExtension and name == 'clone' and Modifier.isNative(modifiers):
+            args, x, cardinality = ', PyObject *arg', ', arg', 1
+
+        if Modifier.isStatic(modifiers):
+            line(out, indent, 'static PyObject *t_%s_%s(PyTypeObject *type%s);',
+                 names[-1], name, args)
+        else:
+            line(out, indent, 'static PyObject *t_%s_%s(t_%s *self%s);',
+                 names[-1], name, names[-1], args)
+
+    for name, methods in extMethods:
+        args, x, cardinality = methodargs(methods, superMethods)
+        sort(methods, key=lambda x: len(x.getParameterTypes()))
+        method = methods[0]
+        modifiers = method.getModifiers()
+        if name == 'iterator' and iteratorMethod is None:
+            if (not method.getParameterTypes() and
+                iterator.isAssignableFrom(method.getReturnType())):
+                iteratorMethod = method
+                iteratorExt = True
+        elif name == 'next' and nextMethod is None:
+            if (not method.getParameterTypes() and
+                not method.getReturnType().isPrimitive()):
+                nextMethod = method
+                nextExt = True
+        elif name == 'nextElement' and nextElementMethod is None:
+            if (not method.getParameterTypes() and
+                not method.getReturnType().isPrimitive()):
+                nextElementMethod = method
+                nextElementExt = True
+
+    if isExtension:
+        count = 0
+        for name, methods in extMethods:
+            for method in methods:
+                line(out, indent,
+                     'static %s JNICALL t_%s_%s%d(JNIEnv *jenv, jobject jobj%s);',
+                     jniname(method.getReturnType()), names[-1], name, count,
+                     jniargs(method.getParameterTypes()))
+                count += 1
+        line(out, indent, 'static PyObject *t_%s_get__self(t_%s *self, void *data);', names[-1], names[-1])
+
+    if instanceFields:
+        for field in instanceFields:
+            fieldName = field.getName()
+            if fieldName not in properties:
+                line(out, indent, 'static PyObject *t_%s_get__%s(t_%s *self, void *data);',
+                     names[-1], fieldName, names[-1])
+                if not Modifier.isFinal(field.getModifiers()):
+                    line(out, indent, 'static int t_%s_set__%s(t_%s *self, PyObject *arg, void *data);',
+                         names[-1], field.getName(), names[-1])
+        line(out)
+
+    for fieldName, methods in propMethods:
+        getter = False
+        setter = False
+        for method in methods:
+            methodName = method.getName()
+            if not getter and (methodName.startswith('get') or
+                               methodName.startswith('is')):
+                getter = True
+                line(out, indent, 'static PyObject *t_%s_get__%s(t_%s *self, void *data);',
+                     names[-1], fieldName, names[-1])
+            elif not setter and methodName.startswith('set'):
+                setter = True
+                line(out, indent, 'static int t_%s_set__%s(t_%s *self, PyObject *arg, void *data);',
+                     names[-1], fieldName, names[-1])
+    if clsParams:
+        line(out, indent, 'static PyObject *t_%s_get__parameters_(t_%s *self, void *data);', names[-1], names[-1])
+
+    if instanceFields or propMethods or isExtension or clsParams:
+        line(out, indent, 'static PyGetSetDef t_%s__fields_[] = {', names[-1])
+        for field in instanceFields:
+            fieldName = field.getName()
+            if fieldName not in properties:
+                if Modifier.isFinal(field.getModifiers()):
+                    line(out, indent + 1, 'DECLARE_GET_FIELD(t_%s, %s),',
+                         names[-1], fieldName)
+                else:
+                    line(out, indent + 1, 'DECLARE_GETSET_FIELD(t_%s, %s),',
+                         names[-1], fieldName)
+        for fieldName, methods in propMethods:
+            getter = False
+            setter = False
+            for method in methods:
+                methodName = method.getName()
+                if not getter and (methodName.startswith('get') or
+                                   methodName.startswith('is')):
+                    getter = True
+                elif not setter and methodName.startswith('set'):
+                    setter = True
+                if getter and setter:
+                    op = 'GETSET'
+                elif getter:
+                    op = 'GET'
+                elif setter:
+                    op = 'SET'
+            line(out, indent + 1, 'DECLARE_%s_FIELD(t_%s, %s),',
+                 op, names[-1], fieldName)
+        if isExtension:
+            line(out, indent + 1, 'DECLARE_GET_FIELD(t_%s, self),', names[-1])
+        if clsParams:
+            line(out, indent + 1, 'DECLARE_GET_FIELD(t_%s, parameters_),',
+                 names[-1])
+            
+        line(out, indent + 1, '{ NULL, NULL, NULL, NULL, NULL }')
+        line(out, indent, '};')
+
+    line(out)
+    line(out, indent, 'static PyMethodDef t_%s__methods_[] = {', names[-1])
+
+    line(out, indent + 1,
+         'DECLARE_METHOD(t_%s, cast_, METH_O | METH_CLASS),', names[-1])
+    line(out, indent + 1,
+         'DECLARE_METHOD(t_%s, instance_, METH_O | METH_CLASS),', names[-1])
+
+    for name, methods in allMethods:
+        modifiers = methods[0].getModifiers()
+        if len(methods) == 1 and not name in superMethods:
+            count = len(methods[0].getParameterTypes())
+            if count == 0:
+                args = 'METH_NOARGS'
+            elif count == 1:
+                args = 'METH_O'
+            else:
+                args = 'METH_VARARGS'
+        elif isExtension and name == 'clone' and Modifier.isNative(modifiers):
+            args = 'METH_O'
+        else:
+            args = 'METH_VARARGS'
+        if Modifier.isStatic(modifiers):
+            args += ' | METH_CLASS'
+
+        line(out, indent + 1, 'DECLARE_METHOD(t_%s, %s, %s),',
+             names[-1], name, args)
+    line(out, indent + 1, '{ NULL, NULL, 0, NULL }')
+    line(out, indent, '};')
+
+    if instanceFields or propMethods or isExtension or clsParams:
+        tp_getset = 't_%s__fields_' %(names[-1])
+    else:
+        tp_getset = '0'
+
+    if iteratorMethod:
+        if iteratorExt:
+            tp_iter = 'get_extension_iterator'
+        else:
+            tp_iter = '((PyObject *(*)(t_%s *)) get_%siterator<t_%s>)' %(names[-1], clsParams and 'generic_' or '', names[-1])
+        tp_iternext = '0'
+    elif nextMethod and iterator.isAssignableFrom(cls):
+        tp_iter = 'PyObject_SelfIter'
+        returnName = typename(nextMethod.getReturnType(), cls, False)
+        ns, sep, n = rpartition(returnName, '::')
+        if nextExt:
+            tp_iternext = 'get_extension_next'
+        else:
+            tp_iternext = '((PyObject *(*)(java::util::t_Iterator *)) get_%siterator_next<java::util::t_Iterator,%s%st_%s>)' %(clsParams and 'generic_' or '', ns, sep, n)
+    elif nextElementMethod and enumeration.isAssignableFrom(cls):
+        tp_iter = 'PyObject_SelfIter'
+        returnName = typename(nextElementMethod.getReturnType(), cls, False)
+        ns, sep, n = rpartition(returnName, '::')
+        if nextElementExt:
+            tp_iternext = 'get_extension_nextElement'
+        else:
+            tp_iternext = '((PyObject *(*)(java::util::t_Enumeration *)) get_%senumeration_next<java::util::t_Enumeration,%s%st_%s>)' %(clsParams and 'generic_' or '', ns, sep, n)
+    elif nextMethod:
+        tp_iter = 'PyObject_SelfIter'
+        returnName = typename(nextMethod.getReturnType(), cls, False)
+        ns, sep, n = rpartition(returnName, '::')
+        if nextExt:
+            tp_iternext = 'get_extension_next'
+        else:
+            tp_iternext = '((PyObject *(*)(t_%s *)) get_%snext<t_%s,%s%st_%s,%s>)' %(names[-1], clsParams and 'generic_' or '', names[-1], ns, sep, n, returnName)
+    else:
+        tp_iter = '0'
+        tp_iternext = '0'
+
+    if mappingMethod:
+        method, cardinality = mappingMethod
+        if cardinality > 1:
+            getName = 't_%s_%s_map_' %(names[-1], method.getName())
+            line(out, indent, 'static PyObject *%s(t_%s *self, PyObject *key);',
+                 getName, names[-1])
+        else:
+            getName = 't_%s_%s' %(names[-1], method.getName())
+        line(out)
+        line(out, indent, 'static PyMappingMethods t_%s_as_mapping = {',
+             names[-1])
+        line(out, indent + 1, '0,')
+        line(out, indent + 1, '(binaryfunc) %s,', getName)
+        line(out, indent + 1, '0,')
+        line(out, indent, '};')
+        tp_as_mapping = '&t_%s_as_mapping' %(names[-1])
+    else:
+        tp_as_mapping = '0'
+
+    if sequenceLenMethod or sequenceGetMethod:
+        if sequenceLenMethod:
+            method, cardinality = sequenceLenMethod
+            lenName = 't_%s_%s_seq_' %(names[-1], method.getName())
+            line(out, indent, 'static int %s(t_%s *self);', lenName, names[-1])
+        else:
+            lenName = '0'
+
+        if sequenceGetMethod:
+            method, cardinality = sequenceGetMethod
+            getName = 't_%s_%s_seq_' %(names[-1], method.getName())
+            line(out, indent, 'static PyObject *%s(t_%s *self, int n);',
+                 getName, names[-1])
+        else:
+            getName = '0'
+
+        line(out)
+        line(out, indent, 'static PySequenceMethods t_%s_as_sequence = {',
+             names[-1])
+        if python_ver < '2.5.0':
+            line(out, indent + 1, '(inquiry) %s,', lenName)
+            line(out, indent + 1, '0,')
+            line(out, indent + 1, '0,')
+            line(out, indent + 1, '(intargfunc) %s', getName)
+            line(out, indent, '};')
+        else:
+            line(out, indent + 1, '(lenfunc) %s,', lenName)
+            line(out, indent + 1, '0,')
+            line(out, indent + 1, '0,')
+            line(out, indent + 1, '(ssizeargfunc) %s', getName)
+            line(out, indent, '};')
+        tp_as_sequence = '&t_%s_as_sequence' %(names[-1])
+    else:
+        tp_as_sequence = '0'
+
+    if len(superNames) > 1:
+        base = '::'.join(('::'.join(cppnames(superNames[:-1])), superNames[-1]))
+    else:
+        base = superNames[-1]
+    line(out)
+    line(out, indent, 'DECLARE_TYPE(%s, t_%s, %s, %s, %s, %s, %s, %s, %s, %s);',
+         names[-1], names[-1], base, cppname(names[-1]), constructorName,
+         tp_iter, tp_iternext, tp_getset, tp_as_mapping, tp_as_sequence)
+
+    if clsParams:
+        clsArgs = []
+        for clsParam in clsParams:
+            clsArgs.append("PyTypeObject *%s" %(clsParam.getName()))
+        line(out, indent, 
+             "PyObject *t_%s::wrap_Object(const %s& object, %s)",
+             cppname(names[-1]), names[-1], ', '.join(clsArgs))
+        line(out, indent, "{")
+        line(out, indent + 1, "PyObject *obj = t_%s::wrap_Object(object);",
+             names[-1])
+        line(out, indent + 1, "if (obj != Py_None)")
+        line(out, indent + 1, "{")
+        line(out, indent + 2, "t_%s *self = (t_%s *) obj;",
+             names[-1], names[-1])
+        i = 0;
+        for clsParam in clsParams:
+            line(out, indent + 2, "self->parameters[%d] = %s;",
+                 i, clsParam.getName())
+        line(out, indent + 1, "}")
+        line(out, indent + 1, "return obj;");
+        line(out, indent, "}")
+
+    line(out)
+    line(out, indent, 'void t_%s::install(PyObject *module)', names[-1])
+    line(out, indent, '{')
+    line(out, indent + 1, 'installType(&%s$$Type, module, "%s", %d);',
+         names[-1], rename or names[-1], isExtension and 1 or 0)
+    for inner in cls.getDeclaredClasses():
+        if inner in typeset:
+            if Modifier.isStatic(inner.getModifiers()):
+                innerName = inner.getName().split('.')[-1]
+                line(out, indent + 1, 'PyDict_SetItemString(%s$$Type.tp_dict, "%s", make_descriptor(&%s$$Type));',
+                     names[-1], innerName[len(names[-1])+1:], innerName)
+    line(out, indent, '}')
+
+    line(out)
+    line(out, indent, 'void t_%s::initialize(PyObject *module)', names[-1])
+    line(out, indent, '{')
+    line(out, indent + 1, 'PyDict_SetItemString(%s$$Type.tp_dict, "class_", make_descriptor(%s::initializeClass, %s));',
+         names[-1], cppname(names[-1]), generics and 1 or 0)
+    line(out, indent + 1, 'PyDict_SetItemString(%s$$Type.tp_dict, "wrapfn_", make_descriptor(t_%s::wrap_jobject));',
+         names[-1], names[-1])
+
+    if isExtension:
+        line(out, indent + 1, 'jclass cls = %s::initializeClass();',
+             cppname(names[-1]))
+    elif fields:
+        line(out, indent + 1, '%s::initializeClass();', cppname(names[-1]))
+
+    if isExtension:
+        count = 0
+        line(out, indent + 1, 'JNINativeMethod methods[] = {')
+        for name, methods in extMethods:
+            for method in methods:
+                line(out, indent + 2, '{ "%s", "%s", (void *) t_%s_%s%d },',
+                     name, signature(method), names[-1], name, count)
+                count += 1
+        line(out, indent + 1, '};')
+        line(out, indent + 1, 'env->registerNatives(cls, methods, %d);',
+             count)
+
+    for field in fields:
+        fieldType = field.getType()
+        fieldName = field.getName()
+        value = '%s::%s' %(cppname(names[-1]), cppname(fieldName))
+        value = fieldValue(cls, value, fieldType)
+        line(out, indent + 1, 'PyDict_SetItemString(%s$$Type.tp_dict, "%s", make_descriptor(%s));',
+             names[-1], fieldName, value)
+    line(out, indent, '}')
+
+    line(out)
+    line(out, indent, 'static PyObject *t_%s_cast_(PyTypeObject *type, PyObject *arg)', names[-1])
+    line(out, indent, '{')
+    line(out, indent + 1, 'if (!(arg = castCheck(arg, %s::initializeClass, 1)))', cppname(names[-1]))
+    line(out, indent + 2, 'return NULL;')
+    line(out, indent + 1, 'return t_%s::wrap_Object(%s(((t_%s *) arg)->object.this$));', names[-1], cppname(names[-1]), names[-1])
+    line(out, indent, '}')
+
+    line(out, indent, 'static PyObject *t_%s_instance_(PyTypeObject *type, PyObject *arg)', names[-1])
+    line(out, indent, '{')
+    line(out, indent + 1, 'if (!castCheck(arg, %s::initializeClass, 0))', cppname(names[-1]))
+    line(out, indent + 2, 'Py_RETURN_FALSE;')
+    line(out, indent + 1, 'Py_RETURN_TRUE;')
+    line(out, indent, '}')
+
+    if constructors:
+        line(out)
+        line(out, indent, 'static int t_%s_init_(t_%s *self, PyObject *args, PyObject *kwds)', names[-1], names[-1])
+        line(out, indent, '{')
+        if len(constructors) > 1:
+            currLen = -1
+            line(out, indent + 1, 'switch (PyTuple_GET_SIZE(args)) {')
+            withErr = False
+            for constructor in constructors:
+                params = constructor.getParameterTypes()
+                if len(params) != currLen:
+                    if currLen >= 0:
+                        withErr = True
+                        line(out, indent + 2, 'goto err;')
+                    currLen = len(params)
+                    line(out, indent + 1, '%scase %d:', HALF_INDENT, currLen)
+                construct(out, indent + 2, cls, True, constructor, names,
+                          generics)
+            line(out, indent + 1, '%sdefault:', HALF_INDENT)
+            if withErr:
+                line(out, indent + 1, '%serr:', HALF_INDENT)
+            line(out, indent + 2, 'PyErr_SetArgsError((PyObject *) self, "__init__", args);')
+            line(out, indent + 2, 'return -1;')
+            line(out, indent + 1, '}')
+        else:
+            construct(out, indent + 1, cls, False, constructors[0], names,
+                      generics)
+            if constructors[0].getParameterTypes():
+                line(out, indent + 1, 'else')
+                line(out, indent + 1, '{')
+                line(out, indent + 2, 'PyErr_SetArgsError((PyObject *) self, "__init__", args);')
+                line(out, indent + 2, 'return -1;')
+                line(out, indent + 1, '}')
+
+        if isExtension:
+            line(out)
+            line(out, indent + 1, 'Py_INCREF((PyObject *) self);')
+            line(out, indent + 1, 'self->object.pythonExtension((jlong) (Py_intptr_t) (void *) self);')
+
+        line(out)
+        line(out, indent + 1, 'return 0;')
+        line(out, indent , '}')
+
+    for name, methods in allMethods:
+        line(out)
+        modifiers = methods[0].getModifiers()
+
+        if isExtension and name == 'clone' and Modifier.isNative(modifiers):
+            declargs, args, cardinality = ', PyObject *arg', ', arg', 1
+        else:
+            declargs, args, cardinality = methodargs(methods, superMethods)
+
+        static = Modifier.isStatic(modifiers)
+        if static:
+            line(out, indent, 'static PyObject *t_%s_%s(PyTypeObject *type%s)',
+                 names[-1], name, declargs)
+        else:
+            line(out, indent, 'static PyObject *t_%s_%s(t_%s *self%s)',
+                 names[-1], name, names[-1], declargs)
+
+        line(out, indent, '{')
+        if len(methods) > 1:
+            currLen = -1
+            line(out, indent + 1, 'switch (PyTuple_GET_SIZE(args)) {')
+            for method in methods:
+                params = method.getParameterTypes()
+                if len(params) != currLen:
+                    if currLen >= 0:
+                        line(out, indent + 2, 'break;')
+                    currLen = len(params)
+                    line(out, indent + 1, '%scase %d:', HALF_INDENT, currLen)
+                call(out, indent + 2, cls, True, method, names, cardinality,
+                     isExtension, generics)
+            line(out, indent + 1, '}')
+        else:
+            call(out, indent + 1, cls, False, methods[0], names, cardinality,
+                 isExtension, generics)
+
+        if args:
+            line(out)
+            if name in superMethods:
+                if static:
+                    line(out, indent + 1, 'return callSuper(type, "%s"%s, %d);',
+                         name, args, cardinality)
+                else:
+                    line(out, indent + 1, 'return callSuper(&%s$$Type, (PyObject *) self, "%s"%s, %d);',
+                         names[-1], name, args, cardinality)
+            else:
+                line(out, indent + 1, 'PyErr_SetArgsError(%s, "%s"%s);',
+                     static and 'type' or '(PyObject *) self', name, args)
+                line(out, indent + 1, 'return NULL;')
+
+        line(out, indent, '}')
+
+    if isExtension:
+        count = 0
+        for name, methods in extMethods:
+            for method in methods:
+                line(out)
+                line(out, indent,
+                     'static %s JNICALL t_%s_%s%d(JNIEnv *jenv, jobject jobj%s)',
+                     jniname(method.getReturnType()), names[-1], name, count,
+                     jniargs(method.getParameterTypes()))
+                count += 1
+                line(out, indent, '{')
+                extension(env, out, indent + 1, cls, names, name, count, method,
+                          generics)
+                line(out, indent, '}')
+        line(out)
+        line(out, indent, 'static PyObject *t_%s_get__self(t_%s *self, void *data)',
+             names[-1], names[-1])
+        line(out, indent, '{')
+        indent += 1
+        line(out, indent, 'jlong ptr;')
+        line(out, indent, 'OBJ_CALL(ptr = self->object.pythonExtension());')
+        line(out, indent, 'PyObject *obj = (PyObject *) (Py_intptr_t) ptr;')
+        line(out)
+        line(out, indent, 'if (obj != NULL)')
+        line(out, indent, '{')
+        line(out, indent + 1, 'Py_INCREF(obj);')
+        line(out, indent + 1, 'return obj;')
+        line(out, indent, '}')
+        line(out, indent, 'else')
+        line(out, indent + 1, 'Py_RETURN_NONE;')
+        indent -= 1
+        line(out, indent, '}')
+
+    if clsParams:
+        line(out, indent, 'static PyObject *t_%s_get__parameters_(t_%s *self, void *data)', names[-1], names[-1])
+        line(out, indent, '{')
+        line(out, indent + 1, 'return typeParameters(self->parameters, sizeof(self->parameters));')
+        line(out, indent, '}')
+
+    if instanceFields:
+        for field in instanceFields:
+            fieldName = field.getName()
+            if fieldName not in properties:
+                line(out)
+                fieldType = field.getType()
+                typeName = typename(fieldType, cls, False)
+                line(out, indent, 'static PyObject *t_%s_get__%s(t_%s *self, void *data)',
+                     names[-1], fieldName, names[-1])
+                line(out, indent, '{')
+                line(out, indent + 1, '%s value%s;', typeName,
+                     not fieldType.isPrimitive() and '((jobject) NULL)' or '')
+                line(out, indent + 1, 'OBJ_CALL(value = self->object._get_%s());',
+                     fieldName)
+                line(out, indent + 1, returnValue(cls, fieldType, 'value'))
+                line(out, indent, '}')
+
+                if not Modifier.isFinal(field.getModifiers()):
+                    line(out, indent, 'static int t_%s_set__%s(t_%s *self, PyObject *arg, void *data)',
+                         names[-1], fieldName, names[-1])
+                    line(out, indent, '{')
+                    line(out, indent + 1, '%s value%s;', typeName,
+                         not fieldType.isPrimitive() and '((jobject) NULL)' or '')
+                    sig, check, x = parseArgs([fieldType], cls, False)
+                    line(out, indent + 1, 'if (!parseArg(arg, "%s"%s, &value))',
+                         sig, check)
+                    line(out, indent + 1, '{')
+                    line(out, indent + 2, 'INT_CALL(self->object._set_%s(value));',
+                         fieldName)
+                    line(out, indent + 2, 'return 0;')
+                    line(out, indent + 1, '}')
+                    line(out, indent + 1, 'PyErr_SetArgsError((PyObject *) self, "%s", arg);',
+                         fieldName)
+                    line(out, indent + 1, 'return -1;')
+                    line(out, indent, '}')
+
+    if propMethods:
+        for fieldName, methods in propMethods:
+            line(out)
+            getter = None
+            setters = []
+            sort(methods, key=lambda x: x.getName())
+            for method in methods:
+                methodName = method.getName()
+                if not getter and (methodName.startswith('get') or
+                                   methodName.startswith('is')):
+                    getter = method
+                elif methodName.startswith('set'):
+                    setters.append(method)
+
+            if getter:
+                methodName = getter.getName()
+                returnType = getter.getReturnType()
+                typeName = typename(returnType, cls, False)
+                line(out, indent, 'static PyObject *t_%s_get__%s(t_%s *self, void *data)',
+                     names[-1], fieldName, names[-1])
+                line(out, indent, '{')
+                line(out, indent + 1, '%s value%s;', typeName,
+                     not returnType.isPrimitive() and '((jobject) NULL)' or '')
+                line(out, indent + 1, 'OBJ_CALL(value = self->object.%s());',
+                     methodName)
+                line(out, indent + 1, returnValue(cls, returnType, 'value'))
+                line(out, indent, '}')
+
+            if setters:
+                line(out, indent, 'static int t_%s_set__%s(t_%s *self, PyObject *arg, void *data)',
+                     names[-1], fieldName, names[-1])
+                line(out, indent, '{')
+                methodName = setters[0].getName()
+                for method in setters:
+                    argType = method.getParameterTypes()[0]
+                    typeName = typename(argType, cls, False)
+                    line(out, indent + 1, '{')
+                    line(out, indent + 2, '%s value%s;', typeName,
+                         not argType.isPrimitive() and '((jobject) NULL)' or '')
+                    sig, check, x = parseArgs([argType], cls, False)
+                    line(out, indent + 2, 'if (!parseArg(arg, "%s"%s, &value))',
+                         sig, check)
+                    line(out, indent + 2, '{')
+                    line(out, indent + 3, 'INT_CALL(self->object.%s(value));',
+                         methodName)
+                    line(out, indent + 3, 'return 0;')
+                    line(out, indent + 2, '}')
+                    line(out, indent + 1, '}')
+                line(out, indent + 1, 'PyErr_SetArgsError((PyObject *) self, "%s", arg);',
+                     fieldName)
+                line(out, indent + 1, 'return -1;')
+                line(out, indent, '}')
+
+    if mappingMethod:
+        method, cardinality = mappingMethod
+        if cardinality > 1:
+            methodName = method.getName()
+            getName = 't_%s_%s_map_' %(names[-1], methodName)
+            line(out)
+            line(out, indent, 'static PyObject *%s(t_%s *self, PyObject *arg)',
+                 getName, names[-1])
+            line(out, indent, '{')
+            call(out, indent + 1, cls, False, method, names, 1, isExtension,
+                 generics)
+            line(out)
+            line(out, indent + 1, 'PyErr_SetArgsError((PyObject *) self, "%s", arg);',
+                 methodName)
+            line(out, indent + 1, 'return NULL;')
+            line(out, indent, '}')
+
+    if sequenceLenMethod:
+        method, cardinality = sequenceLenMethod
+        methodName = method.getName()
+        lenName = 't_%s_%s_seq_' %(names[-1], methodName)
+        line(out)
+        line(out, indent, 'static int %s(t_%s *self)', lenName, names[-1])
+        line(out, indent, '{')
+        line(out, indent + 1, '%s len;',
+             typename(method.getReturnType(), cls, False))
+        line(out, indent + 1, 'INT_CALL(len = self->object.%s());', methodName)
+        line(out, indent + 1, 'return (int) len;')
+        line(out, indent, '}')
+
+    if sequenceGetMethod:
+        method, cardinality = sequenceGetMethod
+        methodName = method.getName()
+        returnType = method.getReturnType()
+        getName = 't_%s_%s_seq_' %(names[-1], methodName)
+        line(out)
+        line(out, indent, 'static PyObject *%s(t_%s *self, int n)', getName, names[-1])
+        line(out, indent, '{')
+        line(out, indent + 1, '%s result%s;',
+             typename(returnType, cls, False),
+             not returnType.isPrimitive() and '((jobject) NULL)' or '')
+        line(out, indent + 1, 'OBJ_CALL(result = self->object.%s((%s) n));',
+             methodName, typename(method.getParameterTypes()[0], cls, False))
+        line(out, indent + 1, returnValue(cls, returnType, 'result'))
+        line(out, indent, '}')
+
+    while indent:
+        indent -= 1
+        line(out, indent, '}')
+
+
+def package(out, allInOne, cppdir, namespace, names):
+
+    if not allInOne:
+        out = file(os.path.join(os.path.join(cppdir, *names),
+                                '__init__.cpp'), 'w')
+
+    if allInOne and not names or not allInOne:
+        line(out, 0, '#include <jni.h>')
+        line(out, 0, '#include <Python.h>')
+        line(out, 0, '#include "JCCEnv.h"')
+        line(out, 0, '#include "functions.h"')
+
+    if not names:
+        line(out)
+        line(out, 0, 'PyObject *initVM(PyObject *module, PyObject *args, PyObject *kwds);')
+
+    packages = []
+    types = []
+
+    namespaces = namespace.items()
+    sort(namespaces, key=lambda x: x[0])
+    for name, entries in namespaces:
+        if entries is True:
+            if names:
+                line(out, 0, '#include "%s/%s.h"', '/'.join(names), name)
+            else:
+                line(out, 0, '#include "%s.h"', name)
+            types.append(name)
+        else:
+            packages.append((name, entries))
+
+    indent = 0
+    if names:
+        line(out)
+        for name in names:
+            line(out, indent, 'namespace %s {', cppname(name))
+            indent += 1
+
+    line(out);
+    for name, entries in packages:
+        line(out, indent, 'namespace %s {', cppname(name))
+        line(out, indent + 1, 'void __install__(PyObject *module);')
+        line(out, indent + 1, 'void __initialize__(PyObject *module);')
+        line(out, indent, '}')
+
+    line(out)
+    line(out, indent, 'void __install__(PyObject *module)')
+    line(out, indent, '{')
+    for name in types:
+        line(out, indent + 1, 't_%s::install(module);', name)
+    for name, entries in packages:
+        line(out, indent + 1, '%s::__install__(module);', cppname(name))
+    line(out, indent, '}')
+
+    line(out)
+    if not names:
+        line(out, indent, 'PyObject *__initialize__(PyObject *module, PyObject *args, PyObject *kwds)')
+        line(out, indent, '{')
+        line(out, indent + 1, 'PyObject *env = initVM(module, args, kwds);')
+        line(out)
+        line(out, indent + 1, 'if (env == NULL)')
+        line(out, indent + 2, 'return NULL;')
+        line(out)
+        line(out, indent + 1, 'try {');
+        indent += 1
+    else:
+        line(out, indent, 'void __initialize__(PyObject *module)')
+        line(out, indent, '{')
+    for name in types:
+        line(out, indent + 1, 't_%s::initialize(module);', name)
+    for name, entries in packages:
+        line(out, indent + 1, '%s::__initialize__(module);', cppname(name))
+    if not names:
+        line(out, indent + 1, 'return env;')
+        indent -= 1
+        line(out, indent + 1, '} catch (JCCEnv::exception e) {')
+        line(out, indent + 2, 'PyErr_SetJavaError(e.throwable);')
+        line(out, indent + 2, 'return NULL;')
+        line(out, indent + 1, '}')
+
+    line(out, indent, '}')
+
+    while indent:
+        indent -= 1
+        line(out, indent, '}')
+
+    if not allInOne:
+        out.close()
+    else:
+        line(out)
+
+    for name, entries in packages:
+        package(out, allInOne, cppdir, entries, names + (name,))
+
+
+def module(out, allInOne, classes, cppdir, moduleName, shared, generics):
+
+    extname = '_%s' %(moduleName)
+    line(out, 0, '#include <Python.h>')
+    line(out, 0, '#include "macros.h"')
+    line(out, 0, '#include "jccfuncs.h"')
+
+    if allInOne:
+        out_init = file(os.path.join(cppdir, '__init__.cpp'), 'w')
+    namespaces = {}
+    for cls in classes:
+        namespace = namespaces
+        classNames = cls.getName().split('.')
+        for className in classNames[:-1]:
+            namespace = namespace.setdefault(className, {})
+        namespace[classNames[-1]] = True
+    if allInOne:
+        package(out_init, True, cppdir, namespaces, ())
+        out_init.close()
+    else:
+        package(None, False, cppdir, namespaces, ())
+
+    line(out)
+    line(out, 0, 'PyObject *initJCC(PyObject *module);')
+    line(out, 0, 'void __install__(PyObject *module);')
+    line(out, 0, 'extern PyTypeObject JObject$$Type, ConstVariableDescriptor$$Type, FinalizerClass$$Type, FinalizerProxy$$Type;')
+    line(out, 0, 'extern void _install_jarray(PyObject *);')
+    line(out)
+    line(out, 0, 'extern "C" {')
+
+    line(out)
+    line(out, 1, 'void init%s(void)', extname)
+    line(out, 1, '{')
+    line(out, 2, 'PyObject *module = Py_InitModule3("%s", jcc_funcs, "");',
+         extname);
+    line(out)
+    line(out, 2, 'initJCC(module);')
+    line(out)
+    line(out, 2, 'INSTALL_TYPE(JObject, module);')
+    line(out, 2, 'INSTALL_TYPE(ConstVariableDescriptor, module);')
+    line(out, 2, 'INSTALL_TYPE(FinalizerClass, module);')
+    line(out, 2, 'INSTALL_TYPE(FinalizerProxy, module);')
+    line(out, 2, '_install_jarray(module);')
+    line(out, 2, '__install__(module);')
+    line(out, 1, '}')
+    line(out, 0, '}')
+
+
+def compile(env, jccPath, output, moduleName, install, dist, debug, jars,
+            version, prefix, root, install_dir, home_dir, use_distutils,
+            shared, compiler, modules, wininst, arch, generics):
+
+    try:
+        if use_distutils:
+            raise ImportError
+        from setuptools import setup, Extension
+        with_setuptools = True
+        if shared and not SHARED:
+            raise NotImplementedError, "JCC was not built with --shared mode support, see JCC's INSTALL file for more information"
+    except ImportError:
+        if python_ver < '2.4':
+            raise ImportError, 'setuptools is required when using Python 2.3'
+        if shared:
+            raise ImportError, 'setuptools is required when using --shared'
+        from distutils.core import setup, Extension
+        with_setuptools = False
+
+    extname = '_%s' %(moduleName)
+
+    modulePath = os.path.join(output, moduleName)
+    if not os.path.isdir(modulePath):
+        os.makedirs(modulePath)
+
+    out = file(os.path.join(modulePath, '__init__.py'), 'w')
+    line(out)
+    if shared:
+        line(out, 0, "import os, sys")
+        line(out)
+        line(out, 0, "if sys.platform == 'win32':")
+        line(out, 1, "import jcc, %s", extname)
+        line(out, 0, "else:")
+        line(out, 1, "import %s", extname)
+    else:
+        line(out, 0, 'import os, %s', extname)
+    line(out)
+    line(out, 0, '__dir__ = os.path.abspath(os.path.dirname(__file__))')
+
+    package_data = []
+    for jar in jars:
+        shutil.copy2(jar, modulePath)
+        package_data.append(os.path.basename(jar))
+
+    packages = [moduleName]
+    if modules:
+        for module in modules:
+            if os.path.isdir(module):
+                def copytree(src, dst, is_package):
+                    if is_package:
+                        packages.append('.'.join((moduleName, src.replace(os.path.sep, '.'))))
+                    if not os.path.exists(dst):
+                        os.mkdir(dst)
+                    for name in os.listdir(src):
+                        if name.startswith('.'):
+                            continue
+                        _src = os.path.join(src, name)
+                        if os.path.islink(_src):
+                            continue
+                        _dst = os.path.join(dst, name)
+                        if os.path.isdir(_src):
+                            copytree(_src, _dst, os.path.exists(os.path.join(_src, '__init__.py')))
+                        elif not is_package or name.endswith('.py'):
+                            shutil.copy2(_src, _dst)
+                dst = modulePath
+                if os.path.exists(os.path.join(module, '__init__.py')):
+                    dst = os.path.join(modulePath, os.path.basename(module))
+                    copytree(module, dst, True)
+                else:
+                    copytree(module, dst, False)
+            else:
+                shutil.copy2(module.split('.')[0] + '.py', modulePath)
+
+    line(out)
+    line(out, 0, 'class JavaError(Exception):')
+    line(out, 1, 'def getJavaException(self):')
+    line(out, 2, 'return self.args[0]')
+    line(out, 1, 'def __str__(self):')
+    line(out, 2, 'writer = %s.StringWriter()', extname)
+    line(out, 2, 'self.getJavaException().printStackTrace(%s.PrintWriter(writer))', extname)
+    line(out, 2, 'return "\\n".join((super(JavaError, self).__str__(), "    Java stacktrace:", str(writer)))')
+    line(out)
+    line(out, 0, 'class InvalidArgsError(Exception):')
+    line(out, 1, 'pass')
+    line(out)
+    line(out, 0, '%s._set_exception_types(JavaError, InvalidArgsError)',
+         extname)
+
+    if version:
+        line(out)
+        line(out, 0, 'VERSION = "%s"', version)
+        
+    line(out, 0, 'CLASSPATH = [%s]' %(', '.join(['os.path.join(__dir__, "%s")' %(os.path.basename(jar)) for jar in jars])))
+    line(out, 0, 'CLASSPATH = os.pathsep.join(CLASSPATH)')
+    line(out, 0, '%s.CLASSPATH = CLASSPATH', extname)
+    line(out, 0, '%s._set_function_self(%s.initVM, %s)',
+         extname, extname, extname)
+
+    line(out)
+    line(out, 0, 'from %s import *', extname)
+    out.close()
+
+    includes = [os.path.join(output, extname),
+                os.path.join(jccPath, 'sources')]
+
+    sources = ['JObject.cpp', 'JArray.cpp', 'functions.cpp', 'types.cpp']
+    if not shared:
+        sources.append('jcc.cpp')
+        sources.append('JCCEnv.cpp')
+    for source in sources:
+	shutil.copy2(os.path.join(jccPath, 'sources', source),
+                     os.path.join(output, extname))
+
+    sources = []
+    for path, dirs, names in os.walk(os.path.join(output, extname)):
+        for name in names:
+            if name.endswith('.cpp'):
+                sources.append(os.path.join(path, name))
+
+    script_args = ['build_ext']
+
+    includes[0:0] = INCLUDES
+    compile_args = CFLAGS
+    link_args = LFLAGS
+    defines=['PYTHON']
+
+    if compiler:
+        script_args.append('--compiler=%s' %(compiler))
+
+    if shared:
+        defines.append('_jcc_shared')
+    script_args.append('--define=%s' %(','.join(defines)))
+
+    if debug:
+        script_args.append('--debug')
+        compile_args += DEBUG_CFLAGS
+    elif sys.platform == 'win32':
+        pass
+    elif sys.platform == 'sunos5':
+        link_args.append('-Wl,-s')
+    else:
+        link_args.append('-Wl,-S')
+
+    if install:
+        script_args.append('install')
+    if prefix:
+        script_args.append('--prefix=%s' % prefix)
+    if root:
+        script_args.append('--root=%s' % root)
+    if install_dir:
+        script_args.append('--install-lib=%s' % install_dir)
+    if home_dir:
+        script_args.append('--home=%s' % home_dir)
+
+    if dist:
+        if wininst:
+            script_args.append('bdist_wininst')
+        elif with_setuptools:
+            script_args.append('bdist_egg')
+        else:
+            script_args.append('bdist')
+
+    args = {
+        'extra_compile_args': compile_args,
+        'extra_link_args': link_args,
+        'include_dirs': includes,
+        'sources': sources
+    }
+
+    if generics:
+        args['define_macros'] = [('_java_generics', None)]
+
+    if shared:
+        shlibdir = os.path.dirname(os.path.dirname(_jcc.__file__))
+        if sys.platform == 'darwin':   # distutils no good with -R
+            machine = platform.machine()
+            if machine.startswith('iPod') or machine.startswith('iPhone'):
+                args['extra_link_args'] += ['-L' + shlibdir]
+            else:
+                args['extra_link_args'] += ['-Wl,-rpath', shlibdir]
+            args['library_dirs'] = [shlibdir]
+            args['libraries'] = ['jcc']
+        elif sys.platform == 'linux2': # distutils no good with -R
+            args['extra_link_args'] += ['-Wl,-rpath', shlibdir]
+            args['library_dirs'] = [shlibdir]
+            args['libraries'] = ['jcc']
+        elif sys.platform == 'win32':
+            jcclib = 'jcc%s.lib' %(debug and '_d' or '')
+            args['extra_link_args'] += [os.path.join(shlibdir, 'jcc', jcclib)]
+        else:
+            raise NotImplementedError, "shared mode on %s" %(sys.platform)
+
+    if arch and sys.platform == 'darwin':
+        from distutils import sysconfig
+
+        config_vars = sysconfig.get_config_vars()
+        cflags = config_vars['CFLAGS'].split(' ')
+        count = len(cflags)
+        i = 0
+        while i < count - 1:
+            if cflags[i] == '-arch' and cflags[i + 1] not in arch:
+                del cflags[i:i+2]
+                count -= 2
+            else:
+                i += 1
+        config_vars['CFLAGS'] = ' '.join(cflags)
+
+    extensions = [Extension('.'.join([moduleName, extname]), **args)]
+
+    args = {
+        'name': moduleName,
+        'packages': packages,
+        'package_dir': {moduleName: modulePath},
+        'package_data': {moduleName: package_data},
+        'version': version,
+        'ext_modules': extensions,
+        'script_args': script_args
+    }
+    if with_setuptools:
+        args['zip_safe'] = False
+
+    setup(**args)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/JArray.cpp	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1209 @@
+/*
+ *   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.
+ */
+
+#ifdef PYTHON
+
+#include <jni.h>
+#include <Python.h>
+#include "structmember.h"
+
+#include "JArray.h"
+#include "functions.h"
+#include "java/lang/Class.h"
+
+using namespace java::lang;
+
+
+template<typename T> class _t_jarray : public t_jarray<T> {
+public:
+    static PyObject *format;
+};
+
+template<typename U>
+static PyObject *get(U *self, int n)
+{
+    return self->array.get(n);
+}
+
+template<typename U>
+static PyObject *toSequence(U *self)
+{
+    return self->array.toSequence();
+}
+
+template<typename U>
+static PyObject *toSequence(U *self, int lo, int hi)
+{
+    return self->array.toSequence(lo, hi);
+}
+
+template<typename U> class _t_iterator {
+public:
+    PyObject_HEAD
+    U *obj;
+    Py_ssize_t position;
+
+    static void dealloc(_t_iterator *self)
+    {
+        Py_XDECREF(self->obj);
+        self->ob_type->tp_free((PyObject *) self);
+    }
+
+    static PyObject *iternext(_t_iterator *self)
+    {
+        if (self->position < (Py_ssize_t) self->obj->array.length)
+            return get<U>(self->obj, self->position++);
+
+        PyErr_SetNone(PyExc_StopIteration);
+        return NULL;
+    }
+
+    static PyTypeObject *JArrayIterator;
+};
+
+template<typename T, typename U>
+static int init(U *self, PyObject *args, PyObject *kwds)
+{
+    PyObject *obj;
+
+    if (!PyArg_ParseTuple(args, "O", &obj))
+        return -1;
+
+    if (PySequence_Check(obj))
+    {
+        self->array = JArray<T>(obj);
+        if (PyErr_Occurred())
+            return -1;
+    }
+    else if (PyGen_Check(obj))
+    {
+        PyObject *tuple =
+            PyObject_CallFunctionObjArgs((PyObject *) &PyTuple_Type, obj, NULL);
+
+        if (!tuple)
+            return -1;
+
+        self->array = JArray<T>(tuple);
+        Py_DECREF(tuple);
+        if (PyErr_Occurred())
+            return -1;
+    }
+    else if (PyInt_Check(obj))
+    {
+        int n = PyInt_AsLong(obj);
+
+        if (n < 0)
+        {
+            PyErr_SetObject(PyExc_ValueError, obj);
+            return -1;
+        }
+
+        self->array = JArray<T>(n);
+    }
+    else
+    {
+        PyErr_SetObject(PyExc_TypeError, obj);
+        return -1;
+    }
+
+    return 0;
+}
+
+template<typename T, typename U>
+static void dealloc(U *self)
+{
+    self->array = JArray<T>((jobject) NULL);
+    self->ob_type->tp_free((PyObject *) self);
+}
+
+template<typename U>
+static PyObject *_format(U *self, PyObject *(*fn)(PyObject *))
+{
+    if (self->array.this$)
+    {
+        PyObject *list = toSequence<U>(self);
+            
+        if (list)
+        {
+            PyObject *result = (*fn)(list);
+
+            Py_DECREF(list);
+            if (result)
+            {
+                PyObject *args = PyTuple_New(1);
+
+                PyTuple_SET_ITEM(args, 0, result);
+                result = PyString_Format(U::format, args);
+                Py_DECREF(args);
+
+                return result;
+            }
+        }
+
+        return NULL;
+    }
+
+    return PyString_FromString("<null>");
+}
+
+template<typename U>
+static PyObject *repr(U *self)
+{
+    return _format(self, (PyObject *(*)(PyObject *)) PyObject_Repr);
+}
+
+template<typename U>
+static PyObject *str(U *self)
+{
+    return _format(self, (PyObject *(*)(PyObject *)) PyObject_Str);
+}
+
+template<typename U>
+static int _compare(U *self, PyObject *value, int i0, int i1, int op, int *cmp)
+{
+    PyObject *v0 = get<U>(self, i0);
+    PyObject *v1 = PySequence_Fast_GET_ITEM(value, i1);  /* borrowed */
+
+    if (!v0)
+        return -1;
+
+    if (!v1)
+    {
+        Py_DECREF(v0);
+        return -1;
+    }
+
+    *cmp = PyObject_RichCompareBool(v0, v1, op);
+    Py_DECREF(v0);
+
+    if (*cmp < 0)
+        return -1;
+
+    return 0;
+}
+
+template<typename U>
+static PyObject *richcompare(U *self, PyObject *value, int op)
+{
+    PyObject *result = NULL;
+    int s0, s1;
+
+    if (!PySequence_Check(value))
+    {
+        Py_INCREF(Py_NotImplemented);
+        return Py_NotImplemented;
+    }
+
+    value = PySequence_Fast(value, "not a sequence");
+    if (!value)
+        return NULL;
+
+    s0 = PySequence_Fast_GET_SIZE(value);
+    s1 = self->array.length;
+
+    if (s1 < 0)
+    {
+        Py_DECREF(value);
+        return NULL;
+    }
+
+    if (s0 != s1)
+    {
+        switch (op) {
+          case Py_EQ: result = Py_False; break;
+          case Py_NE: result = Py_True; break;
+        }
+    }
+
+    if (!result)
+    {
+        int i0, i1, cmp = 1;
+
+        for (i0 = 0, i1 = 0; i0 < s0 && i1 < s1 && cmp; i0++, i1++) {
+            if (_compare(self, value, i0, i1, Py_EQ, &cmp) < 0)
+            {
+                Py_DECREF(value);
+                return NULL;
+            }                
+        }
+
+        if (cmp)
+        {
+            switch (op) {
+              case Py_LT: cmp = s0 < s1; break;
+              case Py_LE: cmp = s0 <= s1; break;
+              case Py_EQ: cmp = s0 == s1; break;
+              case Py_NE: cmp = s0 != s1; break;
+              case Py_GT: cmp = s0 > s1; break;
+              case Py_GE: cmp = s0 >= s1; break;
+              default: cmp = 0;
+            }
+
+            result = cmp ? Py_True : Py_False;
+        }
+        else if (op == Py_EQ)
+            result = Py_False;
+        else if (op == Py_NE)
+            result = Py_True;
+        else if (_compare(self, value, i0, i1, op, &cmp) < 0)
+        {
+            Py_DECREF(value);
+            return NULL;
+        }
+        else
+            result = cmp ? Py_True : Py_False;
+    }
+    Py_DECREF(value);
+
+    Py_INCREF(result);
+    return result;
+}
+
+template<typename U>
+static PyObject *iter(U *self)
+{
+    _t_iterator<U> *it =
+        PyObject_New(_t_iterator<U>, _t_iterator<U>::JArrayIterator);
+
+    if (it)
+    {
+        it->position = 0;
+        it->obj = self; Py_INCREF((PyObject *) self);
+    }
+
+    return (PyObject *) it;
+}
+
+template<typename U>
+static Py_ssize_t seq_length(U *self)
+{
+    if (self->array.this$)
+        return self->array.length;
+
+    return 0;
+}
+
+template<typename U>
+static PyObject *seq_get(U *self, Py_ssize_t n)
+{
+    return get<U>(self, n);
+}
+
+template<typename U>
+static int seq_contains(U *self, PyObject *value)
+{
+    return 0;
+}
+
+template<typename U>
+static PyObject *seq_concat(U *self, PyObject *arg)
+{
+    PyObject *list = toSequence<U>(self);
+
+    if (list != NULL &&
+        PyList_Type.tp_as_sequence->sq_inplace_concat(list, arg) < 0)
+    {
+        Py_DECREF(list);
+        return NULL;
+    }
+
+    return list;
+}
+
+template<typename U>
+static PyObject *seq_repeat(U *self, Py_ssize_t n)
+{
+    PyObject *list = toSequence<U>(self);
+
+    if (list != NULL &&
+        PyList_Type.tp_as_sequence->sq_inplace_repeat(list, n) < 0)
+    {
+        Py_DECREF(list);
+        return NULL;
+    }
+
+    return list;
+}
+
+template<typename U>
+static PyObject *seq_getslice(U *self, Py_ssize_t lo, Py_ssize_t hi)
+{
+    return toSequence<U>(self, lo, hi);
+}
+
+template<typename U>
+static int seq_set(U *self, Py_ssize_t n, PyObject *value)
+{
+    return self->array.set(n, value);
+}
+
+template<typename U>
+static int seq_setslice(U *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *values)
+{
+    int length = self->array.length;
+
+    if (values == NULL)
+    {
+        PyErr_SetString(PyExc_ValueError, "array size cannot change");
+        return -1;
+    }
+            
+    if (lo < 0) lo = length + lo;
+    if (lo < 0) lo = 0;
+    else if (lo > length) lo = length;
+    if (hi < 0) hi = length + hi;
+    if (hi < 0) hi = 0;
+    else if (hi > length) hi = length;
+    if (lo > hi) lo = hi;
+
+    PyObject *sequence = PySequence_Fast(values, "not a sequence");
+    if (!sequence)
+        return -1;
+
+    int size = PySequence_Fast_GET_SIZE(sequence);
+    if (size < 0)
+        goto error;
+
+    if (size != hi - lo)
+    {
+        PyErr_SetString(PyExc_ValueError, "array size cannot change");
+        goto error;
+    }
+
+    for (int i = lo; i < hi; i++) {
+        PyObject *value = PySequence_Fast_GET_ITEM(sequence, i - lo);
+
+        if (value == NULL)
+            goto error;
+
+        if (self->array.set(i, value) < 0)
+            goto error;
+    }
+
+    Py_DECREF(sequence);
+    return 0;
+
+  error:
+    Py_DECREF(sequence);
+    return -1;
+}
+
+template<typename T> 
+static jclass initializeClass(void)
+{
+    return env->get_vm_env()->GetObjectClass(JArray<T>(0).this$);
+}
+
+template<typename T> 
+static PyObject *cast_(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PyObject *arg, *clsObj;
+
+    if (!PyArg_ParseTuple(args, "O", &arg))
+        return NULL;
+
+    if (!PyObject_TypeCheck(arg, &Object$$Type))
+    {
+        PyErr_SetObject(PyExc_TypeError, arg);
+        return NULL;
+    }
+
+    Class argCls = ((t_Object *) arg)->object.getClass();
+
+    if (!argCls.isArray())
+    {
+        PyErr_SetObject(PyExc_TypeError, arg);
+        return NULL;
+    }
+
+    clsObj = PyObject_GetAttrString((PyObject *) type, "class_");
+    if (!clsObj)
+        return NULL;
+
+    Class arrayCls = ((t_Class *) clsObj)->object;
+
+    if (!arrayCls.isAssignableFrom(argCls))
+    {
+        PyErr_SetObject(PyExc_TypeError, arg);
+        return NULL;
+    }
+
+    return JArray<T>(((t_JObject *) arg)->object.this$).wrap();
+}
+
+template<typename T> 
+static PyObject *instance_(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    PyObject *arg, *clsObj;
+
+    if (!PyArg_ParseTuple(args, "O", &arg))
+        return NULL;
+
+    if (!PyObject_TypeCheck(arg, &Object$$Type))
+        Py_RETURN_FALSE;
+
+    Class argCls = ((t_Object *) arg)->object.getClass();
+
+    if (!argCls.isArray())
+        Py_RETURN_FALSE;
+
+    clsObj = PyObject_GetAttrString((PyObject *) type, "class_");
+    if (!clsObj)
+        return NULL;
+
+    Class arrayCls = ((t_Class *) clsObj)->object;
+
+    if (!arrayCls.isAssignableFrom(argCls))
+        Py_RETURN_FALSE;
+
+    Py_RETURN_TRUE;
+}
+
+template<typename T> 
+static PyObject *assignable_(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+    return instance_<T>(type, args, kwds);
+}
+
+template< typename T, typename U = _t_jarray<T> > class jarray_type {
+public:
+    PySequenceMethods seq_methods;
+    PyTypeObject type_object;
+
+    class iterator_type {
+    public:
+        PyTypeObject type_object;
+
+        void install(char *name, PyObject *module)
+        {
+            type_object.tp_name = name;
+
+            if (PyType_Ready(&type_object) == 0)
+            {
+                Py_INCREF((PyObject *) &type_object);
+                PyModule_AddObject(module, name, (PyObject *) &type_object);
+            }
+
+            _t_iterator<U>::JArrayIterator = &type_object;
+        }
+
+        iterator_type()
+        {
+            memset(&type_object, 0, sizeof(type_object));
+
+            type_object.ob_refcnt = 1;
+            type_object.ob_type = NULL;
+            type_object.tp_basicsize = sizeof(_t_iterator<U>);
+            type_object.tp_dealloc = (destructor) _t_iterator<U>::dealloc;
+            type_object.tp_flags = Py_TPFLAGS_DEFAULT;
+            type_object.tp_doc = "JArrayIterator<T> wrapper type";
+            type_object.tp_iter = (getiterfunc) PyObject_SelfIter;
+            type_object.tp_iternext = (iternextfunc) _t_iterator<U>::iternext;
+        }
+    };
+
+    iterator_type iterator_type_object;
+
+    void install(char *name, char *type_name, char *iterator_name,
+                 PyObject *module)
+    {
+        type_object.tp_name = name;
+
+        if (PyType_Ready(&type_object) == 0)
+        {
+            Py_INCREF((PyObject *) &type_object);
+            PyDict_SetItemString(type_object.tp_dict, "class_",
+                                 make_descriptor(initializeClass<T>));
+            
+            PyModule_AddObject(module, name, (PyObject *) &type_object);
+        }
+
+        U::format = PyString_FromFormat("JArray<%s>%%s", type_name);
+        iterator_type_object.install(iterator_name, module);
+    }
+
+    static PyObject *_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+    {
+        U *self = (U *) type->tp_alloc(type, 0);
+
+        if (self)
+            self->array = JArray<T>((jobject) NULL);
+
+        return (PyObject *) self;
+    }
+
+    jarray_type()
+    {
+        memset(&seq_methods, 0, sizeof(seq_methods));
+        memset(&type_object, 0, sizeof(type_object));
+
+        static PyMethodDef methods[] = {
+            { "cast_",
+              (PyCFunction) (PyObject *(*)(PyTypeObject *,
+                                           PyObject *, PyObject *))
+              cast_<T>,
+              METH_VARARGS | METH_CLASS, NULL },
+            { "instance_",
+              (PyCFunction) (PyObject *(*)(PyTypeObject *,
+                                           PyObject *, PyObject *))
+              instance_<T>,
+              METH_VARARGS | METH_CLASS, NULL },
+            { "assignable_",
+              (PyCFunction) (PyObject *(*)(PyTypeObject *,
+                                           PyObject *, PyObject *))
+              assignable_<T>,
+              METH_VARARGS | METH_CLASS, NULL },
+            { NULL, NULL, 0, NULL }
+        };
+
+        seq_methods.sq_length =
+            (lenfunc) (Py_ssize_t (*)(U *)) seq_length<U>;
+        seq_methods.sq_concat =
+            (binaryfunc) (PyObject *(*)(U *, PyObject *)) seq_concat<U>;
+        seq_methods.sq_repeat =
+            (ssizeargfunc) (PyObject *(*)(U *, Py_ssize_t)) seq_repeat<U>;
+        seq_methods.sq_item =
+            (ssizeargfunc) (PyObject *(*)(U *, Py_ssize_t)) seq_get<U>;
+        seq_methods.sq_slice =
+            (ssizessizeargfunc) (PyObject *(*)(U *, Py_ssize_t, Py_ssize_t))
+            seq_getslice<U>;
+        seq_methods.sq_ass_item =
+            (ssizeobjargproc) (int (*)(U *, Py_ssize_t, PyObject *)) seq_set<U>;
+        seq_methods.sq_ass_slice =
+            (ssizessizeobjargproc) (int (*)(U *, Py_ssize_t, Py_ssize_t,
+                                            PyObject *)) seq_setslice<U>;
+        seq_methods.sq_contains =
+            (objobjproc) (int (*)(U *, PyObject *)) seq_contains<U>;
+        seq_methods.sq_inplace_concat = NULL;
+        seq_methods.sq_inplace_repeat = NULL;
+
+        type_object.ob_refcnt = 1;
+        type_object.tp_basicsize = sizeof(U);
+        type_object.tp_dealloc = (destructor) (void (*)(U *)) dealloc<T,U>;
+        type_object.tp_repr = (reprfunc) (PyObject *(*)(U *)) repr<U>;
+        type_object.tp_as_sequence = &seq_methods;
+        type_object.tp_str = (reprfunc) (PyObject *(*)(U *)) str<U>;
+        type_object.tp_flags = Py_TPFLAGS_DEFAULT;
+        type_object.tp_doc = "JArray<T> wrapper type";
+        type_object.tp_richcompare =
+            (richcmpfunc) (PyObject *(*)(U *, PyObject *, int)) richcompare<U>;
+        type_object.tp_iter = (getiterfunc) (PyObject *(*)(U *)) iter<U>;
+        type_object.tp_methods = methods;
+        type_object.tp_base = &Object$$Type;
+        type_object.tp_init =
+            (initproc) (int (*)(U *, PyObject *, PyObject *)) init<T,U>;
+        type_object.tp_new = (newfunc) _new;
+    }
+};
+
+template<typename T> class _t_jobjectarray : public _t_jarray<T> {
+public:
+    PyObject *(*wrapfn)(const T&);
+};
+
+template<> PyObject *get(_t_jobjectarray<jobject> *self, int n)
+{
+    return self->array.get(n, self->wrapfn);
+}
+
+template<> PyObject *toSequence(_t_jobjectarray<jobject> *self)
+{
+    return self->array.toSequence(self->wrapfn);
+}
+
+template<> PyObject *toSequence(_t_jobjectarray<jobject> *self, int lo, int hi)
+{
+    return self->array.toSequence(lo, hi, self->wrapfn);
+}
+
+template<> int init< jobject,_t_jobjectarray<jobject> >(_t_jobjectarray<jobject> *self, PyObject *args, PyObject *kwds)
+{
+    PyObject *obj, *clsObj = NULL;
+    PyObject *(*wrapfn)(const jobject &) = NULL;
+    jclass cls;
+
+    if (!PyArg_ParseTuple(args, "O|O", &obj, &clsObj))
+        return -1;
+
+    if (clsObj == NULL)
+        cls = env->findClass("java/lang/Object");
+    else if (PyObject_TypeCheck(clsObj, &Class$$Type))
+        cls = (jclass) ((t_Class *) clsObj)->object.this$;
+    else if (PyType_Check(clsObj))
+    {
+        if (PyType_IsSubtype((PyTypeObject *) clsObj, &JObject$$Type))
+        {
+            PyObject *cobj = PyObject_GetAttrString(clsObj, "wrapfn_");
+
+            if (cobj == NULL)
+                PyErr_Clear();
+            else
+            {
+                wrapfn = (PyObject *(*)(const jobject &))
+                    PyCObject_AsVoidPtr(cobj);
+                Py_DECREF(cobj);
+            }
+
+            clsObj = PyObject_GetAttrString(clsObj, "class_");
+            if (clsObj == NULL)
+                return -1;
+
+            cls = (jclass) ((t_Class *) clsObj)->object.this$;
+            Py_DECREF(clsObj);
+        }
+        else
+        {
+            PyErr_SetObject(PyExc_ValueError, clsObj);
+            return -1;
+        }
+    }
+    else
+    {
+        PyErr_SetObject(PyExc_TypeError, clsObj);
+        return -1;
+    }
+
+    if (PySequence_Check(obj))
+    {
+        self->array = JArray<jobject>(cls, obj);
+        if (PyErr_Occurred())
+            return -1;
+    }
+    else if (PyGen_Check(obj))
+    {
+        PyObject *tuple =
+            PyObject_CallFunctionObjArgs((PyObject *) &PyTuple_Type, obj, NULL);
+
+        if (!tuple)
+            return -1;
+
+        self->array = JArray<jobject>(cls, tuple);
+        Py_DECREF(tuple);
+        if (PyErr_Occurred())
+            return -1;
+    }
+    else if (PyInt_Check(obj))
+    {
+        int n = PyInt_AsLong(obj);
+
+        if (n < 0)
+        {
+            PyErr_SetObject(PyExc_ValueError, obj);
+            return -1;
+        }
+
+        self->array = JArray<jobject>(cls, n);
+    }
+    else
+    {
+        PyErr_SetObject(PyExc_TypeError, obj);
+        return -1;
+    }
+
+    self->wrapfn = wrapfn;
+
+    return 0;
+}
+
+template<> jclass initializeClass<jobject>(void)
+{
+    jclass cls = env->findClass("java/lang/Object");
+    return env->get_vm_env()->GetObjectClass(JArray<jobject>(cls, 0).this$);
+}
+
+template<> PyObject *cast_<jobject>(PyTypeObject *type,
+				    PyObject *args, PyObject *kwds)
+{
+    PyObject *arg, *clsArg = NULL;
+    PyObject *(*wrapfn)(const jobject&) = NULL;
+    jclass elementCls;
+
+    if (!PyArg_ParseTuple(args, "O|O", &arg, &clsArg))
+        return NULL;
+
+    if (!PyObject_TypeCheck(arg, &Object$$Type))
+    {
+        PyErr_SetObject(PyExc_TypeError, arg);
+        return NULL;
+    }
+
+    Class argCls = ((t_Object *) arg)->object.getClass();
+
+    if (!argCls.isArray())
+    {
+        PyErr_SetObject(PyExc_TypeError, arg);
+        return NULL;
+    }
+
+    if (clsArg != NULL)
+    {
+        if (!PyType_Check(clsArg))
+        {
+            PyErr_SetObject(PyExc_TypeError, clsArg);
+            return NULL;
+        }
+        else if (!PyType_IsSubtype((PyTypeObject *) clsArg, &JObject$$Type))
+        {
+            PyErr_SetObject(PyExc_ValueError, clsArg);
+            return NULL;
+        }
+
+        PyObject *cobj = PyObject_GetAttrString(clsArg, "wrapfn_");
+
+        if (cobj == NULL)
+            PyErr_Clear();
+        else
+        {
+            wrapfn = (PyObject *(*)(const jobject &)) PyCObject_AsVoidPtr(cobj);
+            Py_DECREF(cobj);
+        }
+
+        clsArg = PyObject_GetAttrString(clsArg, "class_");
+        if (clsArg == NULL)
+            return NULL;
+
+        elementCls = (jclass) ((t_Class *) clsArg)->object.this$;
+        Py_DECREF(clsArg);
+    }
+    else
+        elementCls = env->findClass("java/lang/Object");
+
+    JNIEnv *vm_env = env->get_vm_env();
+    jobjectArray array = vm_env->NewObjectArray(0, elementCls, NULL);
+    Class arrayCls(vm_env->GetObjectClass((jobject) array));
+
+    if (!arrayCls.isAssignableFrom(argCls))
+    {
+        PyErr_SetObject(PyExc_TypeError, arg);
+        return NULL;
+    }
+
+    return JArray<jobject>(((t_JObject *) arg)->object.this$).wrap(wrapfn);
+}
+
+template<> PyObject *instance_<jobject>(PyTypeObject *type,
+					PyObject *args, PyObject *kwds)
+{
+    PyObject *arg, *clsArg = NULL;
+    jclass elementCls;
+
+    if (!PyArg_ParseTuple(args, "O|O", &arg, &clsArg))
+        return NULL;
+
+    if (!PyObject_TypeCheck(arg, &Object$$Type))
+        Py_RETURN_FALSE;
+
+    Class argCls = ((t_Object *) arg)->object.getClass();
+
+    if (!argCls.isArray())
+        Py_RETURN_FALSE;
+
+    if (clsArg != NULL)
+    {
+        if (!PyType_Check(clsArg))
+        {
+            PyErr_SetObject(PyExc_TypeError, clsArg);
+            return NULL;
+        }
+        else if (!PyType_IsSubtype((PyTypeObject *) clsArg, &JObject$$Type))
+        {
+            PyErr_SetObject(PyExc_ValueError, clsArg);
+            return NULL;
+        }
+
+        clsArg = PyObject_GetAttrString(clsArg, "class_");
+        if (clsArg == NULL)
+            return NULL;
+
+        elementCls = (jclass) ((t_Class *) clsArg)->object.this$;
+        Py_DECREF(clsArg);
+    }
+    else
+        elementCls = env->findClass("java/lang/Object");
+
+    JNIEnv *vm_env = env->get_vm_env();
+    jobjectArray array = vm_env->NewObjectArray(0, elementCls, NULL);
+    Class arrayCls(vm_env->GetObjectClass((jobject) array));
+
+    if (!arrayCls.isAssignableFrom(argCls))
+        Py_RETURN_FALSE;
+
+    Py_RETURN_TRUE;
+}
+
+template<> PyObject *assignable_<jobject>(PyTypeObject *type,
+					  PyObject *args, PyObject *kwds)
+{
+    PyObject *arg, *clsArg = NULL;
+    jclass elementCls;
+
+    if (!PyArg_ParseTuple(args, "O|O", &arg, &clsArg))
+        return NULL;
+
+    if (!PyObject_TypeCheck(arg, &Object$$Type))
+        Py_RETURN_FALSE;
+
+    Class argCls = ((t_Object *) arg)->object.getClass();
+
+    if (!argCls.isArray())
+        Py_RETURN_FALSE;
+
+    if (clsArg != NULL)
+    {
+        if (!PyType_Check(clsArg))
+        {
+            PyErr_SetObject(PyExc_TypeError, clsArg);
+            return NULL;
+        }
+        else if (!PyType_IsSubtype((PyTypeObject *) clsArg, &JObject$$Type))
+        {
+            PyErr_SetObject(PyExc_ValueError, clsArg);
+            return NULL;
+        }
+
+        clsArg = PyObject_GetAttrString(clsArg, "class_");
+        if (clsArg == NULL)
+            return NULL;
+
+        elementCls = (jclass) ((t_Class *) clsArg)->object.this$;
+        Py_DECREF(clsArg);
+    }
+    else
+        elementCls = env->findClass("java/lang/Object");
+
+    JNIEnv *vm_env = env->get_vm_env();
+    jobjectArray array = vm_env->NewObjectArray(0, elementCls, NULL);
+    Class arrayCls(vm_env->GetObjectClass((jobject) array));
+
+    if (!argCls.isAssignableFrom(arrayCls))
+        Py_RETURN_FALSE;
+
+    Py_RETURN_TRUE;
+}
+
+
+template<typename T> PyTypeObject *_t_iterator<T>::JArrayIterator;
+template<typename T> PyObject *_t_jarray<T>::format;
+
+static jarray_type< jobject, _t_jobjectarray<jobject> > jarray_jobject;
+
+static jarray_type<jstring> jarray_jstring;
+static jarray_type<jboolean> jarray_jboolean;
+static jarray_type<jbyte> jarray_jbyte;
+static jarray_type<jchar> jarray_jchar;
+static jarray_type<jdouble> jarray_jdouble;
+static jarray_type<jfloat> jarray_jfloat;
+static jarray_type<jint> jarray_jint;
+static jarray_type<jlong> jarray_jlong;
+static jarray_type<jshort> jarray_jshort;
+
+
+PyObject *JArray<jobject>::wrap(PyObject *(*wrapfn)(const jobject&))
+{
+    if (this$ != NULL)
+    {
+        _t_jobjectarray<jobject> *obj =
+            PyObject_New(_t_jobjectarray<jobject>, &jarray_jobject.type_object);
+
+        memset(&(obj->array), 0, sizeof(JArray<jobject>));
+        obj->array = *this;
+        obj->wrapfn = wrapfn;
+
+        return (PyObject *) obj;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *JArray<jstring>::wrap()
+{
+    if (this$ != NULL)
+    {
+        _t_jarray<jstring> *obj =
+            PyObject_New(_t_jarray<jstring>, &jarray_jstring.type_object);
+
+        memset(&(obj->array), 0, sizeof(JArray<jstring>));
+        obj->array = *this;
+
+        return (PyObject *) obj;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *JArray<jboolean>::wrap()
+{
+    if (this$ != NULL)
+    {
+        _t_jarray<jboolean> *obj =
+            PyObject_New(_t_jarray<jboolean>, &jarray_jboolean.type_object);
+
+        memset(&(obj->array), 0, sizeof(JArray<jboolean>));
+        obj->array = *this;
+
+        return (PyObject *) obj;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *JArray<jbyte>::wrap()
+{
+    if (this$ != NULL)
+    {
+        _t_jarray<jbyte> *obj =
+            PyObject_New(_t_jarray<jbyte>, &jarray_jbyte.type_object);
+
+        memset(&(obj->array), 0, sizeof(JArray<jbyte>));
+        obj->array = *this;
+
+        return (PyObject *) obj;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *JArray<jchar>::wrap()
+{
+    if (this$ != NULL)
+    {
+        _t_jarray<jchar> *obj =
+            PyObject_New(_t_jarray<jchar>, &jarray_jchar.type_object);
+
+        memset(&(obj->array), 0, sizeof(JArray<jchar>));
+        obj->array = *this;
+
+        return (PyObject *) obj;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *JArray<jdouble>::wrap()
+{
+    if (this$ != NULL)
+    {
+        _t_jarray<jdouble> *obj =
+            PyObject_New(_t_jarray<jdouble>, &jarray_jdouble.type_object);
+
+        memset(&(obj->array), 0, sizeof(JArray<jdouble>));
+        obj->array = *this;
+
+        return (PyObject *) obj;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *JArray<jfloat>::wrap()
+{
+    if (this$ != NULL)
+    {
+        _t_jarray<jfloat> *obj =
+            PyObject_New(_t_jarray<jfloat>, &jarray_jfloat.type_object);
+
+        memset(&(obj->array), 0, sizeof(JArray<jfloat>));
+        obj->array = *this;
+
+        return (PyObject *) obj;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *JArray<jint>::wrap()
+{
+    if (this$ != NULL)
+    {
+        _t_jarray<jint> *obj =
+            PyObject_New(_t_jarray<jint>, &jarray_jint.type_object);
+
+        memset(&(obj->array), 0, sizeof(JArray<jint>));
+        obj->array = *this;
+
+        return (PyObject *) obj;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *JArray<jlong>::wrap()
+{
+    if (this$ != NULL)
+    {
+        _t_jarray<jlong> *obj =
+            PyObject_New(_t_jarray<jlong>, &jarray_jlong.type_object);
+
+        memset(&(obj->array), 0, sizeof(JArray<jlong>));
+        obj->array = *this;
+
+        return (PyObject *) obj;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *JArray<jshort>::wrap()
+{
+    if (this$ != NULL)
+    {
+        _t_jarray<jshort> *obj =
+            PyObject_New(_t_jarray<jshort>, &jarray_jshort.type_object);
+
+        memset(&(obj->array), 0, sizeof(JArray<jshort>));
+        obj->array = *this;
+
+        return (PyObject *) obj;
+    }
+
+    Py_RETURN_NONE;
+}
+
+PyObject *JArray_Type(PyObject *self, PyObject *arg)
+{
+    PyObject *type_name = NULL, *type;
+    char const *name = NULL;
+
+    if (PyType_Check(arg))
+    {
+        type_name = PyObject_GetAttrString(arg, "__name__");
+        if (!type_name)
+            return NULL;
+    }
+    else if (PyString_Check(arg))
+    {
+        type_name = arg;
+        Py_INCREF(type_name);
+    }
+    else if (PyFloat_Check(arg))
+    {
+        type_name = NULL;
+        name = "double";
+    }
+    else
+    {
+        PyObject *arg_type = (PyObject *) arg->ob_type;
+
+        type_name = PyObject_GetAttrString(arg_type, "__name__");
+        if (!type_name)
+            return NULL;
+    }
+
+    if (type_name != NULL)
+    {
+        name = PyString_AsString(type_name);
+        Py_DECREF(type_name);
+
+        if (!name)
+            return NULL;
+    }
+
+    if (!strcmp(name, "object"))
+        type = (PyObject *) &jarray_jobject.type_object;
+    else if (!strcmp(name, "string"))
+        type = (PyObject *) &jarray_jstring.type_object;
+    else if (!strcmp(name, "bool"))
+        type = (PyObject *) &jarray_jboolean.type_object;
+    else if (!strcmp(name, "byte"))
+        type = (PyObject *) &jarray_jbyte.type_object;
+    else if (!strcmp(name, "char"))
+        type = (PyObject *) &jarray_jchar.type_object;
+    else if (!strcmp(name, "double"))
+        type = (PyObject *) &jarray_jdouble.type_object;
+    else if (!strcmp(name, "float"))
+        type = (PyObject *) &jarray_jfloat.type_object;
+    else if (!strcmp(name, "int"))
+        type = (PyObject *) &jarray_jint.type_object;
+    else if (!strcmp(name, "long"))
+        type = (PyObject *) &jarray_jlong.type_object;
+    else if (!strcmp(name, "short"))
+        type = (PyObject *) &jarray_jshort.type_object;
+    else
+    {
+        PyErr_SetObject(PyExc_ValueError, arg);
+        return NULL;
+    }
+
+    Py_INCREF(type);
+    return type;
+}
+
+static PyObject *t_jarray_jbyte__get_string_(t_jarray<jbyte> *self, void *data)
+{
+    return self->array.to_string_();
+}
+
+static PyGetSetDef t_jarray_jbyte__fields[] = {
+    { "string_", (getter) t_jarray_jbyte__get_string_, NULL, "", NULL },
+    { NULL, NULL, NULL, NULL, NULL }
+};
+
+
+PyTypeObject *JArrayObject$$Type;
+PyTypeObject *JArrayString$$Type;
+PyTypeObject *JArrayBool$$Type;
+PyTypeObject *JArrayByte$$Type;
+PyTypeObject *JArrayChar$$Type;
+PyTypeObject *JArrayDouble$$Type;
+PyTypeObject *JArrayFloat$$Type;
+PyTypeObject *JArrayInt$$Type;
+PyTypeObject *JArrayLong$$Type;
+PyTypeObject *JArrayShort$$Type;
+
+
+void _install_jarray(PyObject *module)
+{
+    jarray_jobject.install("JArray_object", "object",
+                            "__JArray_object_iterator", module);
+    JArrayObject$$Type = &jarray_jobject.type_object;
+
+    jarray_jstring.install("JArray_string", "string",
+                            "__JArray_string_iterator", module);
+    JArrayString$$Type = &jarray_jstring.type_object;
+
+    jarray_jboolean.install("JArray_bool", "bool",
+                            "__JArray_bool_iterator", module);
+    JArrayBool$$Type = &jarray_jboolean.type_object;
+
+    jarray_jbyte.type_object.tp_getset = t_jarray_jbyte__fields;
+    jarray_jbyte.install("JArray_byte", "byte",
+                         "__JArray_byte_iterator", module);
+    JArrayByte$$Type = &jarray_jbyte.type_object;
+
+    jarray_jchar.install("JArray_char", "char",
+                         "__JArray_char_iterator", module);
+    JArrayChar$$Type = &jarray_jchar.type_object;
+
+    jarray_jdouble.install("JArray_double", "double",
+                           "__JArray_double_iterator", module);
+    JArrayDouble$$Type = &jarray_jdouble.type_object;
+
+    jarray_jfloat.install("JArray_float", "float",
+                          "__JArray_float_iterator", module);
+    JArrayFloat$$Type = &jarray_jfloat.type_object;
+
+    jarray_jint.install("JArray_int", "int",
+                        "__JArray_int_iterator", module);
+    JArrayInt$$Type = &jarray_jint.type_object;
+
+    jarray_jlong.install("JArray_long", "long",
+                         "__JArray_long_iterator", module);
+    JArrayLong$$Type = &jarray_jlong.type_object;
+
+    jarray_jshort.install("JArray_short", "short",
+                          "__JArray_short_iterator", module);
+    JArrayShort$$Type = &jarray_jshort.type_object;
+}
+
+#endif /* PYTHON */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/JArray.h	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1587 @@
+/*
+ *   Copyright (c) 2007-2008 Open Source Applications Foundation
+ *
+ *   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.
+ */
+
+#ifndef _JArray_H
+#define _JArray_H
+
+#ifdef PYTHON
+#include <Python.h>
+#include "macros.h"
+
+extern jobjectArray fromPySequence(jclass cls, PyObject *sequence);
+extern PyObject *PyErr_SetJavaError(jthrowable throwable);
+
+extern PyTypeObject *JArrayObject$$Type;
+extern PyTypeObject *JArrayString$$Type;
+extern PyTypeObject *JArrayBool$$Type;
+extern PyTypeObject *JArrayByte$$Type;
+extern PyTypeObject *JArrayChar$$Type;
+extern PyTypeObject *JArrayDouble$$Type;
+extern PyTypeObject *JArrayFloat$$Type;
+extern PyTypeObject *JArrayInt$$Type;
+extern PyTypeObject *JArrayLong$$Type;
+extern PyTypeObject *JArrayShort$$Type;
+
+#endif
+
+#include "JCCEnv.h"
+#include "java/lang/Object.h"
+
+
+template<typename T> class JArray : public java::lang::Object {
+public:
+    int length;
+
+    explicit JArray<T>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jobjectArray) this$) : 0;
+    }
+    JArray<T>(const JArray<T>& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+#ifdef PYTHON
+    JArray<T>(PyObject *sequence) : java::lang::Object(fromPySequence(T::initializeClass(), sequence)) {
+        length = this$ ? env->getArrayLength((jobjectArray) this$) : 0;
+    }
+
+    JArray<T>(jclass cls, PyObject *sequence) : java::lang::Object(fromPySequence(cls, sequence)) {
+        length = this$ ? env->getArrayLength((jobjectArray) this$) : 0;
+    }
+
+    PyObject *toSequence(PyObject *(*wrapfn)(const T&))
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        PyObject *list = PyList_New(length);
+
+        for (int i = 0; i < length; i++)
+            PyList_SET_ITEM(list, i, (*wrapfn)((*this)[i]));
+
+        return list;
+    }
+
+    PyObject *get(int n, PyObject *(*wrapfn)(const T&))
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+                return (*wrapfn)((*this)[n]);
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+#endif
+
+    T operator[](int n) {
+        return T(env->getObjectArrayElement((jobjectArray) this$, n));
+    }
+};
+
+template<> class JArray<jobject> : public java::lang::Object {
+  public:
+    int length;
+
+    JArray<jobject>(jclass cls, int n) : java::lang::Object(env->get_vm_env()->NewObjectArray(n, cls, NULL)) {
+        length = env->getArrayLength((jobjectArray) this$);
+    }
+
+    JArray<jobject>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jobjectArray) this$) : 0;
+    }
+
+    JArray<jobject>(const JArray& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+#ifdef PYTHON
+    JArray<jobject>(jclass cls, PyObject *sequence) : java::lang::Object(fromPySequence(cls, sequence)) {
+        length = this$ ? env->getArrayLength((jobjectArray) this$) : 0;
+    }
+
+    PyObject *toSequence(PyObject *(*wrapfn)(const jobject&))
+    {
+        return toSequence(0, length, wrapfn);
+    }
+
+    PyObject *toSequence(int lo, int hi, PyObject *(*wrapfn)(const jobject&))
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        if (lo < 0) lo = length + lo;
+        if (lo < 0) lo = 0;
+        else if (lo > length) lo = length;
+        if (hi < 0) hi = length + hi;
+        if (hi < 0) hi = 0;
+        else if (hi > length) hi = length;
+        if (lo > hi) lo = hi;
+
+        PyObject *list = PyList_New(hi - lo);
+
+        if (!wrapfn)
+            wrapfn = java::lang::t_Object::wrap_jobject;
+
+        for (int i = lo; i < hi; i++) {
+            jobject jobj = env->getObjectArrayElement((jobjectArray) this$, i);
+            PyObject *obj = (*wrapfn)(jobj);
+
+            PyList_SET_ITEM(list, i - lo, obj);
+        }
+         
+        return list;
+    }
+
+    PyObject *get(int n, PyObject *(*wrapfn)(const jobject&))
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                if (!wrapfn)
+                    wrapfn = java::lang::t_Object::wrap_jobject;
+
+                jobject jobj =
+                    env->getObjectArrayElement((jobjectArray) this$, n);
+
+                return (*wrapfn)(jobj);
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+
+    int set(int n, PyObject *obj)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                if (!PyObject_TypeCheck(obj, &JObject$$Type))
+                {
+                    PyErr_SetObject(PyExc_TypeError, obj);
+                    return -1;
+                }
+
+                jobject jobj = ((t_JObject *) obj)->object.this$;
+
+                try {
+                    env->setObjectArrayElement((jobjectArray) this$, n, jobj);
+                } catch (JCCEnv::exception e) {
+                    PyErr_SetJavaError(e.throwable);
+                    return -1;
+                }
+
+                return 0;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return -1;
+    }
+
+    PyObject *wrap(PyObject *(*wrapfn)(const jobject&));
+#endif
+
+    jobject operator[](int n) {
+        return (jobject) env->getObjectArrayElement((jobjectArray) this$, n);
+    }
+};
+
+template<> class JArray<jstring> : public java::lang::Object {
+  public:
+    int length;
+
+    JArray<jstring>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jobjectArray) this$) : 0;
+    }
+
+    JArray<jstring>(const JArray& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+    JArray<jstring>(int n) : java::lang::Object(env->get_vm_env()->NewObjectArray(n, env->findClass("java/lang/String"), NULL)) {
+        length = env->getArrayLength((jobjectArray) this$);
+    }
+
+#ifdef PYTHON
+    JArray<jstring>(PyObject *sequence) : java::lang::Object(env->get_vm_env()->NewObjectArray(PySequence_Length(sequence), env->findClass("java/lang/String"), NULL)) {
+        length = env->getArrayLength((jobjectArray) this$);
+
+        for (int i = 0; i < length; i++) {
+            PyObject *obj = PySequence_GetItem(sequence, i);
+
+            if (obj == NULL)
+                break;
+
+            jstring str = env->fromPyString(obj);
+
+            Py_DECREF(obj);
+            if (PyErr_Occurred())
+                break;
+
+            env->setObjectArrayElement((jobjectArray) this$, i, str);
+            env->get_vm_env()->DeleteLocalRef(str);
+        }
+    }
+
+    PyObject *toSequence()
+    {
+        return toSequence(0, length);
+    }
+
+    PyObject *toSequence(int lo, int hi)
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        if (lo < 0) lo = length + lo;
+        if (lo < 0) lo = 0;
+        else if (lo > length) lo = length;
+        if (hi < 0) hi = length + hi;
+        if (hi < 0) hi = 0;
+        else if (hi > length) hi = length;
+        if (lo > hi) lo = hi;
+
+        PyObject *list = PyList_New(hi - lo);
+
+        for (int i = lo; i < hi; i++) {
+            jstring str = (jstring)
+                env->getObjectArrayElement((jobjectArray) this$, i);
+            PyObject *obj = env->fromJString(str, 1);
+
+            PyList_SET_ITEM(list, i - lo, obj);
+        }
+         
+        return list;
+    }
+
+    PyObject *get(int n)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                jstring str = (jstring)
+                    env->getObjectArrayElement((jobjectArray) this$, n);
+                PyObject *obj = env->fromJString(str, 1);
+
+                return obj;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+
+    int set(int n, PyObject *obj)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                jstring str = env->fromPyString(obj);
+
+                if (PyErr_Occurred())
+                    return -1;
+
+                env->setObjectArrayElement((jobjectArray) this$, n, str);
+                return 0;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return -1;
+    }
+
+    PyObject *wrap();
+#endif
+
+    jstring operator[](int n) {
+        return (jstring) env->getObjectArrayElement((jobjectArray) this$, n);
+    }
+};
+
+template<> class JArray<jboolean> : public java::lang::Object {
+  public:
+    int length;
+
+    class arrayElements {
+    private:
+        jboolean isCopy;
+        jbooleanArray array;
+        jboolean *elts;
+    public:
+        arrayElements(jbooleanArray array) {
+            this->array = array;
+            elts = env->get_vm_env()->GetBooleanArrayElements(array, &isCopy);
+        }
+        virtual ~arrayElements() {
+            env->get_vm_env()->ReleaseBooleanArrayElements(array, elts, isCopy);
+        }
+        operator jboolean *() {
+            return elts;
+        }
+    };
+
+    arrayElements elements() {
+        return arrayElements((jbooleanArray) this$);
+    }
+
+    JArray<jboolean>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jarray) this$) : 0;
+    }
+
+    JArray<jboolean>(const JArray& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+    JArray<jboolean>(int n) : java::lang::Object(env->get_vm_env()->NewBooleanArray(n)) {
+        length = env->getArrayLength((jarray) this$);
+    }
+
+#ifdef PYTHON
+    JArray<jboolean>(PyObject *sequence) : java::lang::Object(env->get_vm_env()->NewBooleanArray(PySequence_Length(sequence))) {
+        length = env->getArrayLength((jarray) this$);
+        arrayElements elts = elements();
+        jboolean *buf = (jboolean *) elts;
+
+        for (int i = 0; i < length; i++) {
+            PyObject *obj = PySequence_GetItem(sequence, i);
+
+            if (!obj)
+                break;
+
+            if (obj == Py_True || obj == Py_False)
+            {
+                buf[i] = (jboolean) (obj == Py_True);
+                Py_DECREF(obj);
+            }
+            else
+            {
+                PyErr_SetObject(PyExc_TypeError, obj);
+                Py_DECREF(obj);
+                break;
+            }
+        }
+    }
+
+    PyObject *toSequence()
+    {
+        return toSequence(0, length);
+    }
+
+    PyObject *toSequence(int lo, int hi)
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        if (lo < 0) lo = length + lo;
+        if (lo < 0) lo = 0;
+        else if (lo > length) lo = length;
+        if (hi < 0) hi = length + hi;
+        if (hi < 0) hi = 0;
+        else if (hi > length) hi = length;
+        if (lo > hi) lo = hi;
+
+        PyObject *list = PyList_New(hi - lo);
+        arrayElements elts = elements();
+        jboolean *buf = (jboolean *) elts;
+
+        for (int i = lo; i < hi; i++) {
+            jboolean value = buf[i];
+            PyObject *obj = value ? Py_True : Py_False;
+
+            Py_INCREF(obj);
+            PyList_SET_ITEM(list, i - lo, obj);
+        }
+         
+        return list;
+    }
+
+    PyObject *get(int n)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+                Py_RETURN_BOOL(elements()[n]);
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+
+    int set(int n, PyObject *obj)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                elements()[n] = (jboolean) PyObject_IsTrue(obj);
+                return 0;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return -1;
+    }
+
+    PyObject *wrap();
+#endif
+
+    jboolean operator[](int n) {
+        JNIEnv *vm_env = env->get_vm_env();
+        jboolean isCopy = 0;
+        jboolean *elts = (jboolean *)
+            vm_env->GetPrimitiveArrayCritical((jarray) this$, &isCopy);
+        jboolean value = elts[n];
+
+        vm_env->ReleasePrimitiveArrayCritical((jarray) this$, elts, isCopy);
+
+        return value;
+    }
+};
+
+template<> class JArray<jbyte> : public java::lang::Object {
+  public:
+    int length;
+
+    class arrayElements {
+    private:
+        jboolean isCopy;
+        jbyteArray array;
+        jbyte *elts;
+    public:
+        arrayElements(jbyteArray array) {
+            this->array = array;
+            elts = env->get_vm_env()->GetByteArrayElements(array, &isCopy);
+        }
+        virtual ~arrayElements() {
+            env->get_vm_env()->ReleaseByteArrayElements(array, elts, isCopy);
+        }
+        operator jbyte *() {
+            return elts;
+        }
+    };
+
+    arrayElements elements() {
+        return arrayElements((jbyteArray) this$);
+    }
+
+    JArray<jbyte>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jarray) this$) : 0;
+    }
+
+    JArray<jbyte>(const JArray& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+    JArray<jbyte>(int n) : java::lang::Object(env->get_vm_env()->NewByteArray(n)) {
+        length = env->getArrayLength((jarray) this$);
+    }
+
+#ifdef PYTHON
+    JArray<jbyte>(PyObject *sequence) : java::lang::Object(env->get_vm_env()->NewByteArray(PySequence_Length(sequence))) {
+        length = env->getArrayLength((jarray) this$);
+        arrayElements elts = elements();
+        jbyte *buf = (jbyte *) elts;
+
+        if (PyString_Check(sequence))
+            memcpy(buf, PyString_AS_STRING(sequence), length);
+        else
+            for (int i = 0; i < length; i++) {
+                PyObject *obj = PySequence_GetItem(sequence, i);
+
+                if (!obj)
+                    break;
+
+                if (PyString_Check(obj) && (PyString_GET_SIZE(obj) == 1))
+                {
+                    buf[i] = (jbyte) PyString_AS_STRING(obj)[0];
+                    Py_DECREF(obj);
+                }
+                else if (PyInt_CheckExact(obj))
+                {
+                    buf[i] = (jbyte) PyInt_AS_LONG(obj);
+                    Py_DECREF(obj);
+                }
+                else
+                {
+                    PyErr_SetObject(PyExc_TypeError, obj);
+                    Py_DECREF(obj);
+                    break;
+                }
+            }
+    }
+
+    char getType()
+    {
+        return 'Z';
+    }
+
+    PyObject *toSequence()
+    {
+        return toSequence(0, length);
+    }
+
+    PyObject *toSequence(int lo, int hi)
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        if (lo < 0) lo = length + lo;
+        if (lo < 0) lo = 0;
+        else if (lo > length) lo = length;
+        if (hi < 0) hi = length + hi;
+        if (hi < 0) hi = 0;
+        else if (hi > length) hi = length;
+        if (lo > hi) lo = hi;
+
+        arrayElements elts = elements();
+        jbyte *buf = (jbyte *) elts;
+        PyObject *tuple = PyTuple_New(hi - lo);
+        
+        for (int i = 0; i < hi - lo; i++)
+            PyTuple_SET_ITEM(tuple, i, PyInt_FromLong(buf[lo + i]));
+
+        return tuple;
+    }
+
+    PyObject *to_string_()
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        arrayElements elts = elements();
+        jbyte *buf = (jbyte *) elts;
+
+        return PyString_FromStringAndSize((char *) buf, length);
+    }
+
+    PyObject *get(int n)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                jbyte b = (*this)[n];
+                return PyInt_FromLong(b);
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+
+    int set(int n, PyObject *obj)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                if (!PyInt_CheckExact(obj))
+                {
+                    PyErr_SetObject(PyExc_TypeError, obj);
+                    return -1;
+                }
+
+                elements()[n] = (jbyte) PyInt_AS_LONG(obj);
+                return 0;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return -1;
+    }
+
+    PyObject *wrap();
+#endif
+
+    jbyte operator[](int n) {
+        JNIEnv *vm_env = env->get_vm_env();
+        jboolean isCopy = 0;
+        jbyte *elts = (jbyte *)
+            vm_env->GetPrimitiveArrayCritical((jarray) this$, &isCopy);
+        jbyte value = elts[n];
+
+        vm_env->ReleasePrimitiveArrayCritical((jarray) this$, elts, isCopy);
+
+        return value;
+    }
+};
+
+template<> class JArray<jchar> : public java::lang::Object {
+  public:
+    int length;
+
+    class arrayElements {
+    private:
+        jboolean isCopy;
+        jcharArray array;
+        jchar *elts;
+    public:
+        arrayElements(jcharArray array) {
+            this->array = array;
+            elts = env->get_vm_env()->GetCharArrayElements(array, &isCopy);
+        }
+        virtual ~arrayElements() {
+            env->get_vm_env()->ReleaseCharArrayElements(array, elts, isCopy);
+        }
+        operator jchar *() {
+            return elts;
+        }
+    };
+
+    arrayElements elements() {
+        return arrayElements((jcharArray) this$);
+    }
+
+    JArray<jchar>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jarray) this$) : 0;
+    }
+
+    JArray<jchar>(const JArray& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+    JArray<jchar>(int n) : java::lang::Object(env->get_vm_env()->NewCharArray(n)) {
+        length = env->getArrayLength((jarray) this$);
+    }
+
+#ifdef PYTHON
+    JArray<jchar>(PyObject *sequence) : java::lang::Object(env->get_vm_env()->NewCharArray(PySequence_Length(sequence))) {
+        length = env->getArrayLength((jarray) this$);
+        arrayElements elts = elements();
+        jchar *buf = (jchar *) elts;
+
+        if (PyUnicode_Check(sequence))
+        {
+            if (sizeof(Py_UNICODE) == sizeof(jchar))
+                memcpy(buf, PyUnicode_AS_UNICODE(sequence),
+                       length * sizeof(jchar));
+            else
+            {
+                Py_UNICODE *pchars = PyUnicode_AS_UNICODE(sequence);
+                for (int i = 0; i < length; i++)
+                    buf[i] = (jchar) pchars[i];
+            }
+        }
+        else
+            for (int i = 0; i < length; i++) {
+                PyObject *obj = PySequence_GetItem(sequence, i);
+
+                if (!obj)
+                    break;
+
+                if (PyUnicode_Check(obj) && (PyUnicode_GET_SIZE(obj) == 1))
+                {
+                    buf[i] = (jchar) PyUnicode_AS_UNICODE(obj)[0];
+                    Py_DECREF(obj);
+                }
+                else
+                {
+                    PyErr_SetObject(PyExc_TypeError, obj);
+                    Py_DECREF(obj);
+                    break;
+                }
+            }
+    }
+
+    PyObject *toSequence()
+    {
+        return toSequence(0, length);
+    }
+
+    PyObject *toSequence(int lo, int hi)
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        if (lo < 0) lo = length + lo;
+        if (lo < 0) lo = 0;
+        else if (lo > length) lo = length;
+        if (hi < 0) hi = length + hi;
+        if (hi < 0) hi = 0;
+        else if (hi > length) hi = length;
+        if (lo > hi) lo = hi;
+
+        arrayElements elts = elements();
+        jchar *buf = (jchar *) elts;
+
+        if (sizeof(Py_UNICODE) == sizeof(jchar))
+            return PyUnicode_FromUnicode((const Py_UNICODE *) buf + lo,
+                                         hi - lo);
+        else
+        {
+            PyObject *string = PyUnicode_FromUnicode(NULL, hi - lo);
+            Py_UNICODE *pchars = PyUnicode_AS_UNICODE(string);
+
+            for (int i = lo; i < hi; i++)
+                pchars[i - lo] = (Py_UNICODE) buf[i];
+
+            return string;
+        }
+    }
+
+    PyObject *get(int n)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                jchar c = (*this)[n];
+
+                if (sizeof(Py_UNICODE) == sizeof(jchar))
+                    return PyUnicode_FromUnicode((const Py_UNICODE *) &c, 1);
+                else
+                {
+                    PyObject *string = PyUnicode_FromUnicode(NULL, 1);
+                    Py_UNICODE *pchars = PyUnicode_AS_UNICODE(string);
+
+                    pchars[0] = (Py_UNICODE) c;
+
+                    return string;
+                }
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+
+    int set(int n, PyObject *obj)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                if (!PyUnicode_Check(obj))
+                {
+                    PyErr_SetObject(PyExc_TypeError, obj);
+                    return -1;
+                }
+                if (PyUnicode_GET_SIZE(obj) != 1)
+                {
+                    PyErr_SetObject(PyExc_ValueError, obj);
+                    return -1;
+                }
+
+                elements()[n] = (jchar) PyUnicode_AS_UNICODE(obj)[0];
+                return 0;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return -1;
+    }
+
+    PyObject *wrap();
+#endif
+
+    jchar operator[](int n) {
+        JNIEnv *vm_env = env->get_vm_env();
+        jboolean isCopy = 0;
+        jchar *elts = (jchar *)
+            vm_env->GetPrimitiveArrayCritical((jarray) this$, &isCopy);
+        jchar value = elts[n];
+
+        vm_env->ReleasePrimitiveArrayCritical((jarray) this$, elts, isCopy);
+
+        return value;
+    }
+};
+
+template<> class JArray<jdouble> : public java::lang::Object {
+  public:
+    int length;
+
+    class arrayElements {
+    private:
+        jboolean isCopy;
+        jdoubleArray array;
+        jdouble *elts;
+    public:
+        arrayElements(jdoubleArray array) {
+            this->array = array;
+            elts = env->get_vm_env()->GetDoubleArrayElements(array, &isCopy);
+        }
+        virtual ~arrayElements() {
+            env->get_vm_env()->ReleaseDoubleArrayElements(array, elts, isCopy);
+        }
+        operator jdouble *() {
+            return elts;
+        }
+    };
+
+    arrayElements elements() {
+        return arrayElements((jdoubleArray) this$);
+    }
+
+    JArray<jdouble>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jarray) this$) : 0;
+    }
+
+    JArray<jdouble>(const JArray& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+    JArray<jdouble>(int n) : java::lang::Object(env->get_vm_env()->NewDoubleArray(n)) {
+        length = env->getArrayLength((jarray) this$);
+    }
+
+#ifdef PYTHON
+    JArray<jdouble>(PyObject *sequence) : java::lang::Object(env->get_vm_env()->NewDoubleArray(PySequence_Length(sequence))) {
+        length = env->getArrayLength((jarray) this$);
+        arrayElements elts = elements();
+        jdouble *buf = (jdouble *) elts;
+
+        for (int i = 0; i < length; i++) {
+            PyObject *obj = PySequence_GetItem(sequence, i);
+
+            if (!obj)
+                break;
+
+            if (PyFloat_Check(obj))
+            {
+                buf[i] = (jdouble) PyFloat_AS_DOUBLE(obj);
+                Py_DECREF(obj);
+            }
+            else
+            {
+                PyErr_SetObject(PyExc_TypeError, obj);
+                Py_DECREF(obj);
+                break;
+            }
+        }
+    }
+
+    PyObject *toSequence()
+    {
+        return toSequence(0, length);
+    }
+
+    PyObject *toSequence(int lo, int hi)
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        if (lo < 0) lo = length + lo;
+        if (lo < 0) lo = 0;
+        else if (lo > length) lo = length;
+        if (hi < 0) hi = length + hi;
+        if (hi < 0) hi = 0;
+        else if (hi > length) hi = length;
+        if (lo > hi) lo = hi;
+
+        PyObject *list = PyList_New(hi - lo);
+        arrayElements elts = elements();
+        jdouble *buf = (jdouble *) elts;
+
+        for (int i = lo; i < hi; i++)
+            PyList_SET_ITEM(list, i - lo, PyFloat_FromDouble((double) buf[i]));
+
+        return list;
+    }
+
+    PyObject *get(int n)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+                return PyFloat_FromDouble((double) (*this)[n]);
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+
+    int set(int n, PyObject *obj)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                if (!PyFloat_Check(obj))
+                {
+                    PyErr_SetObject(PyExc_TypeError, obj);
+                    return -1;
+                }
+
+                elements()[n] = (jdouble) PyFloat_AS_DOUBLE(obj);
+                return 0;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return -1;
+    }
+
+    PyObject *wrap();
+#endif
+
+    jdouble operator[](int n) {
+        JNIEnv *vm_env = env->get_vm_env();
+        jboolean isCopy = 0;
+        jdouble *elts = (jdouble *)
+            vm_env->GetPrimitiveArrayCritical((jarray) this$, &isCopy);
+        jdouble value = elts[n];
+
+        vm_env->ReleasePrimitiveArrayCritical((jarray) this$, elts, isCopy);
+
+        return value;
+    }
+};
+
+template<> class JArray<jfloat> : public java::lang::Object {
+  public:
+    int length;
+
+    class arrayElements {
+    private:
+        jboolean isCopy;
+        jfloatArray array;
+        jfloat *elts;
+    public:
+        arrayElements(jfloatArray array) {
+            this->array = array;
+            elts = env->get_vm_env()->GetFloatArrayElements(array, &isCopy);
+        }
+        virtual ~arrayElements() {
+            env->get_vm_env()->ReleaseFloatArrayElements(array, elts, isCopy);
+        }
+        operator jfloat *() {
+            return elts;
+        }
+    };
+
+    arrayElements elements() {
+        return arrayElements((jfloatArray) this$);
+    }
+
+    JArray<jfloat>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jarray) this$) : 0;
+    }
+
+    JArray<jfloat>(const JArray& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+    JArray<jfloat>(int n) : java::lang::Object(env->get_vm_env()->NewFloatArray(n)) {
+        length = env->getArrayLength((jarray) this$);
+    }
+
+#ifdef PYTHON
+    JArray<jfloat>(PyObject *sequence) : java::lang::Object(env->get_vm_env()->NewFloatArray(PySequence_Length(sequence))) {
+        length = env->getArrayLength((jarray) this$);
+        arrayElements elts = elements();
+        jfloat *buf = (jfloat *) elts;
+
+        for (int i = 0; i < length; i++) {
+            PyObject *obj = PySequence_GetItem(sequence, i);
+
+            if (!obj)
+                break;
+
+            if (PyFloat_Check(obj))
+            {
+                buf[i] = (jfloat) PyFloat_AS_DOUBLE(obj);
+                Py_DECREF(obj);
+            }
+            else
+            {
+                PyErr_SetObject(PyExc_TypeError, obj);
+                Py_DECREF(obj);
+                break;
+            }
+        }
+    }
+
+    PyObject *toSequence()
+    {
+        return toSequence(0, length);
+    }
+
+    PyObject *toSequence(int lo, int hi)
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        if (lo < 0) lo = length + lo;
+        if (lo < 0) lo = 0;
+        else if (lo > length) lo = length;
+        if (hi < 0) hi = length + hi;
+        if (hi < 0) hi = 0;
+        else if (hi > length) hi = length;
+        if (lo > hi) lo = hi;
+
+        PyObject *list = PyList_New(hi - lo);
+        arrayElements elts = elements();
+        jfloat *buf = (jfloat *) elts;
+
+        for (int i = lo; i < hi; i++)
+            PyList_SET_ITEM(list, i - lo, PyFloat_FromDouble((double) buf[i]));
+
+        return list;
+    }
+
+    PyObject *get(int n)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+                return PyFloat_FromDouble((double) (*this)[n]);
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+
+    int set(int n, PyObject *obj)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                if (!PyFloat_Check(obj))
+                {
+                    PyErr_SetObject(PyExc_TypeError, obj);
+                    return -1;
+                }
+
+                elements()[n] = (jfloat) PyFloat_AS_DOUBLE(obj);
+                return 0;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return -1;
+    }
+
+    PyObject *wrap();
+#endif
+
+    jfloat operator[](int n) {
+        JNIEnv *vm_env = env->get_vm_env();
+        jboolean isCopy = 0;
+        jfloat *elts = (jfloat *)
+            vm_env->GetPrimitiveArrayCritical((jarray) this$, &isCopy);
+        jfloat value = elts[n];
+
+        vm_env->ReleasePrimitiveArrayCritical((jarray) this$, elts, isCopy);
+
+        return value;
+    }
+};
+
+template<> class JArray<jint> : public java::lang::Object {
+  public:
+    int length;
+
+    class arrayElements {
+    private:
+        jboolean isCopy;
+        jintArray array;
+        jint *elts;
+    public:
+        arrayElements(jintArray array) {
+            this->array = array;
+            elts = env->get_vm_env()->GetIntArrayElements(array, &isCopy);
+        }
+        virtual ~arrayElements() {
+            env->get_vm_env()->ReleaseIntArrayElements(array, elts, isCopy);
+        }
+        operator jint *() {
+            return elts;
+        }
+    };
+
+    arrayElements elements() {
+        return arrayElements((jintArray) this$);
+    }
+
+    JArray<jint>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jarray) this$) : 0;
+    }
+
+    JArray<jint>(const JArray& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+    JArray<jint>(int n) : java::lang::Object(env->get_vm_env()->NewIntArray(n)) {
+        length = env->getArrayLength((jarray) this$);
+    }
+
+#ifdef PYTHON
+    JArray<jint>(PyObject *sequence) : java::lang::Object(env->get_vm_env()->NewIntArray(PySequence_Length(sequence))) {
+        length = env->getArrayLength((jarray) this$);
+        arrayElements elts = elements();
+        jint *buf = (jint *) elts;
+
+        for (int i = 0; i < length; i++) {
+            PyObject *obj = PySequence_GetItem(sequence, i);
+
+            if (!obj)
+                break;
+
+            if (PyInt_Check(obj))
+            {
+                buf[i] = (jint) PyInt_AS_LONG(obj);
+                Py_DECREF(obj);
+            }
+            else
+            {
+                PyErr_SetObject(PyExc_TypeError, obj);
+                Py_DECREF(obj);
+                break;
+            }
+        }
+    }
+
+    PyObject *toSequence()
+    {
+        return toSequence(0, length);
+    }
+
+    PyObject *toSequence(int lo, int hi)
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        if (lo < 0) lo = length + lo;
+        if (lo < 0) lo = 0;
+        else if (lo > length) lo = length;
+        if (hi < 0) hi = length + hi;
+        if (hi < 0) hi = 0;
+        else if (hi > length) hi = length;
+        if (lo > hi) lo = hi;
+
+        PyObject *list = PyList_New(hi - lo);
+        arrayElements elts = elements();
+        jint *buf = (jint *) elts;
+
+        for (int i = lo; i < hi; i++)
+            PyList_SET_ITEM(list, i - lo, PyInt_FromLong(buf[i]));
+
+        return list;
+    }
+
+    PyObject *get(int n)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+                return PyInt_FromLong((*this)[n]);
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+
+    int set(int n, PyObject *obj)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                if (!PyInt_Check(obj))
+                {
+                    PyErr_SetObject(PyExc_TypeError, obj);
+                    return -1;
+                }
+
+                elements()[n] = (jint) PyInt_AS_LONG(obj);
+                return 0;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return -1;
+    }
+
+    PyObject *wrap();
+#endif
+
+    jint operator[](int n) {
+        JNIEnv *vm_env = env->get_vm_env();
+        jboolean isCopy = 0;
+        jint *elts = (jint *)
+            vm_env->GetPrimitiveArrayCritical((jarray) this$, &isCopy);
+        jint value = elts[n];
+
+        vm_env->ReleasePrimitiveArrayCritical((jarray) this$, elts, isCopy);
+
+        return value;
+    }
+};
+
+template<> class JArray<jlong> : public java::lang::Object {
+  public:
+    int length;
+
+    class arrayElements {
+    private:
+        jboolean isCopy;
+        jlongArray array;
+        jlong *elts;
+    public:
+        arrayElements(jlongArray array) {
+            this->array = array;
+            elts = env->get_vm_env()->GetLongArrayElements(array, &isCopy);
+        }
+        virtual ~arrayElements() {
+            env->get_vm_env()->ReleaseLongArrayElements(array, elts, isCopy);
+        }
+        operator jlong *() {
+            return elts;
+        }
+    };
+
+    arrayElements elements() {
+        return arrayElements((jlongArray) this$);
+    }
+
+    JArray<jlong>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jarray) this$) : 0;
+    }
+
+    JArray<jlong>(const JArray& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+    JArray<jlong>(int n) : java::lang::Object(env->get_vm_env()->NewLongArray(n)) {
+        length = env->getArrayLength((jarray) this$);
+    }
+
+#ifdef PYTHON
+    JArray<jlong>(PyObject *sequence) : java::lang::Object(env->get_vm_env()->NewLongArray(PySequence_Length(sequence))) {
+        length = env->getArrayLength((jarray) this$);
+        arrayElements elts = elements();
+        jlong *buf = (jlong *) elts;
+
+        for (int i = 0; i < length; i++) {
+            PyObject *obj = PySequence_GetItem(sequence, i);
+
+            if (!obj)
+                break;
+
+            if (PyLong_Check(obj))
+            {
+                buf[i] = (jlong) PyLong_AsLongLong(obj);
+                Py_DECREF(obj);
+            }
+            else
+            {
+                PyErr_SetObject(PyExc_TypeError, obj);
+                Py_DECREF(obj);
+                break;
+            }
+        }
+    }
+
+    PyObject *toSequence()
+    {
+        return toSequence(0, length);
+    }
+
+    PyObject *toSequence(int lo, int hi)
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        if (lo < 0) lo = length + lo;
+        if (lo < 0) lo = 0;
+        else if (lo > length) lo = length;
+        if (hi < 0) hi = length + hi;
+        if (hi < 0) hi = 0;
+        else if (hi > length) hi = length;
+        if (lo > hi) lo = hi;
+
+        PyObject *list = PyList_New(hi - lo);
+        arrayElements elts = elements();
+        jlong *buf = (jlong *) elts;
+
+        for (int i = lo; i < hi; i++)
+            PyList_SET_ITEM(list, i - lo, PyLong_FromLongLong((long long) buf[i]));
+
+        return list;
+    }
+
+    PyObject *get(int n)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+                return PyLong_FromLongLong((long long) (*this)[n]);
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+
+    int set(int n, PyObject *obj)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                if (!PyLong_Check(obj))
+                {
+                    PyErr_SetObject(PyExc_TypeError, obj);
+                    return -1;
+                }
+
+                elements()[n] = (jlong) PyLong_AsLongLong(obj);
+                return 0;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return -1;
+    }
+
+    PyObject *wrap();
+#endif
+
+    jlong operator[](long n) {
+        JNIEnv *vm_env = env->get_vm_env();
+        jboolean isCopy = 0;
+        jlong *elts = (jlong *)
+            vm_env->GetPrimitiveArrayCritical((jarray) this$, &isCopy);
+        jlong value = elts[n];
+
+        vm_env->ReleasePrimitiveArrayCritical((jarray) this$, elts, isCopy);
+
+        return value;
+    }
+};
+
+template<> class JArray<jshort> : public java::lang::Object {
+  public:
+    int length;
+
+    class arrayElements {
+    private:
+        jboolean isCopy;
+        jshortArray array;
+        jshort *elts;
+    public:
+        arrayElements(jshortArray array) {
+            this->array = array;
+            elts = env->get_vm_env()->GetShortArrayElements(array, &isCopy);
+        }
+        virtual ~arrayElements() {
+            env->get_vm_env()->ReleaseShortArrayElements(array, elts, isCopy);
+        }
+        operator jshort *() {
+            return elts;
+        }
+    };
+
+    arrayElements elements() {
+        return arrayElements((jshortArray) this$);
+    }
+
+    JArray<jshort>(jobject obj) : java::lang::Object(obj) {
+        length = this$ ? env->getArrayLength((jarray) this$) : 0;
+    }
+
+    JArray<jshort>(const JArray& obj) : java::lang::Object(obj) {
+        length = obj.length;
+    }
+
+    JArray<jshort>(int n) : java::lang::Object(env->get_vm_env()->NewShortArray(n)) {
+        length = env->getArrayLength((jarray) this$);
+    }
+
+#ifdef PYTHON
+    JArray<jshort>(PyObject *sequence) : java::lang::Object(env->get_vm_env()->NewShortArray(PySequence_Length(sequence))) {
+        length = env->getArrayLength((jarray) this$);
+        arrayElements elts = elements();
+        jshort *buf = (jshort *) elts;
+
+        for (int i = 0; i < length; i++) {
+            PyObject *obj = PySequence_GetItem(sequence, i);
+
+            if (!obj)
+                break;
+
+            if (PyInt_Check(obj))
+            {
+                buf[i] = (jshort) PyInt_AS_LONG(obj);
+                Py_DECREF(obj);
+            }
+            else
+            {
+                PyErr_SetObject(PyExc_TypeError, obj);
+                Py_DECREF(obj);
+                break;
+            }
+        }
+    }
+
+    PyObject *toSequence()
+    {
+        return toSequence(0, length);
+    }
+
+    PyObject *toSequence(int lo, int hi)
+    {
+        if (this$ == NULL)
+            Py_RETURN_NONE;
+
+        if (lo < 0) lo = length + lo;
+        if (lo < 0) lo = 0;
+        else if (lo > length) lo = length;
+        if (hi < 0) hi = length + hi;
+        if (hi < 0) hi = 0;
+        else if (hi > length) hi = length;
+        if (lo > hi) lo = hi;
+
+        PyObject *list = PyList_New(hi - lo);
+        arrayElements elts = elements();
+        jshort *buf = (jshort *) elts;
+
+        for (int i = lo; i < hi; i++)
+            PyList_SET_ITEM(list, i - lo, PyInt_FromLong(buf[i]));
+
+        return list;
+    }
+
+    PyObject *get(int n)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+                return PyInt_FromLong((long) (*this)[n]);
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return NULL;
+    }
+
+    int set(int n, PyObject *obj)
+    {
+        if (this$ != NULL)
+        {
+            if (n < 0)
+                n = length + n;
+
+            if (n >= 0 && n < length)
+            {
+                if (!PyInt_Check(obj))
+                {
+                    PyErr_SetObject(PyExc_TypeError, obj);
+                    return -1;
+                }
+
+                elements()[n] = (jshort) PyInt_AS_LONG(obj);
+                return 0;
+            }
+        }
+
+        PyErr_SetString(PyExc_IndexError, "index out of range");
+        return -1;
+    }
+
+    PyObject *wrap();
+#endif
+
+    jshort operator[](int n) {
+        JNIEnv *vm_env = env->get_vm_env();
+        jboolean isCopy = 0;
+        jshort *elts = (jshort *)
+            vm_env->GetPrimitiveArrayCritical((jarray) this$, &isCopy);
+        jshort value = elts[n];
+
+        vm_env->ReleasePrimitiveArrayCritical((jarray) this$, elts, isCopy);
+
+        return value;
+    }
+};
+
+#ifdef PYTHON
+
+template<typename T> class t_jarray {
+public:
+    PyObject_HEAD
+    JArray<T> array;
+};
+
+#endif
+
+#endif /* _JArray_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/JCCEnv.cpp	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,770 @@
+/*
+ *   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.
+ */
+
+#include <map>
+#include <string.h>
+#include <jni.h>
+
+#include "JCCEnv.h"
+
+
+#if defined(_MSC_VER) || defined(__WIN32)
+_DLL_EXPORT DWORD VM_ENV = 0;
+#else
+pthread_key_t JCCEnv::VM_ENV = (pthread_key_t) NULL;
+#endif
+
+#if defined(_MSC_VER) || defined(__WIN32)
+
+static CRITICAL_SECTION *mutex = NULL;
+
+class lock {
+public:
+    lock() {
+        EnterCriticalSection(mutex);
+    }
+    virtual ~lock() {
+        LeaveCriticalSection(mutex);
+    }
+};
+
+#else
+
+static pthread_mutex_t *mutex = NULL;
+
+class lock {
+public:
+    lock() {
+        pthread_mutex_lock(mutex);
+    }
+    virtual ~lock() {
+        pthread_mutex_unlock(mutex);
+    }
+};
+
+#endif
+
+JCCEnv::JCCEnv(JavaVM *vm, JNIEnv *vm_env)
+{
+#if defined(_MSC_VER) || defined(__WIN32)
+    if (!mutex)
+    {
+        mutex = new CRITICAL_SECTION();
+        InitializeCriticalSection(mutex);
+    }
+#else
+    if (!mutex)
+    {
+        mutex = new pthread_mutex_t();
+        pthread_mutex_init(mutex, NULL);
+    }
+#endif
+
+    if (vm)
+        set_vm(vm, vm_env);
+    else
+        this->vm = NULL;
+}
+
+void JCCEnv::set_vm(JavaVM *vm, JNIEnv *vm_env)
+{
+    this->vm = vm;
+    set_vm_env(vm_env);
+
+    _sys = (jclass) vm_env->NewGlobalRef(vm_env->FindClass("java/lang/System"));
+    _obj = (jclass) vm_env->NewGlobalRef(vm_env->FindClass("java/lang/Object"));
+#ifdef _jcc_lib
+    _thr = (jclass) vm_env->NewGlobalRef(vm_env->FindClass("org/apache/jcc/PythonException"));
+#else
+    _thr = (jclass) vm_env->NewGlobalRef(vm_env->FindClass("java/lang/RuntimeException"));
+#endif
+    _mids = new jmethodID[max_mid];
+
+    _mids[mid_sys_identityHashCode] =
+        vm_env->GetStaticMethodID(_sys, "identityHashCode",
+                                  "(Ljava/lang/Object;)I");
+    _mids[mid_sys_setProperty] =
+        vm_env->GetStaticMethodID(_sys, "setProperty",
+                                  "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
+    _mids[mid_sys_getProperty] =
+        vm_env->GetStaticMethodID(_sys, "getProperty",
+                                  "(Ljava/lang/String;)Ljava/lang/String;");
+    _mids[mid_obj_toString] =
+        vm_env->GetMethodID(_obj, "toString",
+                            "()Ljava/lang/String;");
+    _mids[mid_obj_hashCode] =
+        vm_env->GetMethodID(_obj, "hashCode",
+                            "()I");
+    _mids[mid_obj_getClass] =
+        vm_env->GetMethodID(_obj, "getClass",
+                            "()Ljava/lang/Class;");
+
+    _mids[mid_iterator_next] =
+        vm_env->GetMethodID(vm_env->FindClass("java/util/Iterator"),
+                            "next", "()Ljava/lang/Object;");
+    _mids[mid_enumeration_nextElement] =
+        vm_env->GetMethodID(vm_env->FindClass("java/util/Enumeration"),
+                            "nextElement", "()Ljava/lang/Object;");
+}
+
+#if defined(_MSC_VER) || defined(__WIN32)
+
+void JCCEnv::set_vm_env(JNIEnv *vm_env)
+{
+    if (!VM_ENV)
+        VM_ENV = TlsAlloc();
+    TlsSetValue(VM_ENV, (LPVOID) vm_env);
+}
+
+#else
+
+void JCCEnv::set_vm_env(JNIEnv *vm_env)
+{
+    if (!VM_ENV)
+        pthread_key_create(&VM_ENV, NULL);
+    pthread_setspecific(VM_ENV, (void *) vm_env);
+}
+
+#endif
+
+jint JCCEnv::getJNIVersion() const
+{
+    return get_vm_env()->GetVersion();
+}
+
+jstring JCCEnv::getJavaVersion() const
+{
+    return (jstring)
+        callStaticObjectMethod(_sys, _mids[mid_sys_getProperty],
+                               get_vm_env()->NewStringUTF("java.version"));
+}
+
+jobject JCCEnv::iteratorNext(jobject obj) const
+{
+    return callObjectMethod(obj, _mids[mid_iterator_next]);
+}
+
+jobject JCCEnv::enumerationNext(jobject obj) const
+{
+    return callObjectMethod(obj, _mids[mid_enumeration_nextElement]);
+}
+
+jclass JCCEnv::findClass(const char *className) const
+{
+    jclass cls = NULL;
+
+    if (vm)
+    {
+        JNIEnv *vm_env = get_vm_env();
+
+        if (vm_env)
+            cls = vm_env->FindClass(className);
+#ifdef PYTHON
+        else
+        {
+            PythonGIL gil;
+
+            PyErr_SetString(PyExc_RuntimeError, "attachCurrentThread() must be called first");
+            throw pythonError(NULL);
+        }
+#else
+        else
+            throw exception(NULL);
+#endif
+    }
+#ifdef PYTHON
+    else
+    {
+        PythonGIL gil;
+
+        PyErr_SetString(PyExc_RuntimeError, "initVM() must be called first");
+        throw pythonError(NULL);
+    }
+#else
+    else
+        throw exception(NULL);
+#endif
+
+    reportException();
+
+    return cls;
+}
+
+void JCCEnv::registerNatives(jclass cls, JNINativeMethod *methods, int n) const
+{
+    get_vm_env()->RegisterNatives(cls, methods, n);
+}
+
+jobject JCCEnv::newGlobalRef(jobject obj, int id)
+{
+    if (obj)
+    {
+        if (id)  /* zero when weak global ref is desired */
+        {
+            lock locked;
+
+            for (std::multimap<int, countedRef>::iterator iter = refs.find(id);
+                 iter != refs.end();
+                 iter++) {
+                if (iter->first != id)
+                    break;
+                if (isSame(obj, iter->second.global))
+                {
+                    /* If it's in the table but not the same reference,
+                     * it must be a local reference and must be deleted.
+                     */
+                    if (obj != iter->second.global)
+                        get_vm_env()->DeleteLocalRef(obj);
+                        
+                    iter->second.count += 1;
+                    return iter->second.global;
+                }
+            }
+
+            JNIEnv *vm_env = get_vm_env();
+            countedRef ref;
+
+            ref.global = vm_env->NewGlobalRef(obj);
+            ref.count = 1;
+            refs.insert(std::pair<const int, countedRef>(id, ref));
+            vm_env->DeleteLocalRef(obj);
+
+            return ref.global;
+        }
+        else
+            return (jobject) get_vm_env()->NewWeakGlobalRef(obj);
+    }
+
+    return NULL;
+}
+
+jobject JCCEnv::deleteGlobalRef(jobject obj, int id)
+{
+    if (obj)
+    {
+        if (id)  /* zero when obj is weak global ref */
+        {
+            lock locked;
+
+            for (std::multimap<int, countedRef>::iterator iter = refs.find(id);
+                 iter != refs.end();
+                 iter++) {
+                if (iter->first != id)
+                    break;
+                if (isSame(obj, iter->second.global))
+                {
+                    if (iter->second.count == 1)
+                    {
+                        get_vm_env()->DeleteGlobalRef(iter->second.global);
+                        refs.erase(iter);
+                    }
+                    else
+                        iter->second.count -= 1;
+
+                    return NULL;
+                }
+            }
+
+            printf("deleting non-existent ref: 0x%x\n", id);
+        }
+        else
+            get_vm_env()->DeleteWeakGlobalRef((jweak) obj);
+    }
+
+    return NULL;
+}
+
+jobject JCCEnv::newObject(jclass (*initializeClass)(), jmethodID **mids,
+                          int m, ...)
+{
+    jclass cls = (*initializeClass)();
+    JNIEnv *vm_env = get_vm_env();
+    jobject obj;
+
+    if (vm_env)
+    {
+        va_list ap;
+
+        va_start(ap, m);
+        obj = vm_env->NewObjectV(cls, (*mids)[m], ap);
+        va_end(ap);
+    }
+#ifdef PYTHON
+    else
+    {
+        PythonGIL gil;
+
+        PyErr_SetString(PyExc_RuntimeError, "attachCurrentThread() must be called first");
+        throw pythonError(NULL);
+    }
+#else
+    else
+        throw exception(NULL);
+#endif
+
+    reportException();
+
+    return obj;
+}
+
+jobjectArray JCCEnv::newObjectArray(jclass cls, int size)
+{
+    jobjectArray array = get_vm_env()->NewObjectArray(size, cls, NULL);
+
+    reportException();
+    return array;
+}
+
+void JCCEnv::setObjectArrayElement(jobjectArray array, int n,
+                                   jobject obj) const
+{
+    get_vm_env()->SetObjectArrayElement(array, n, obj);
+    reportException();
+}
+
+jobject JCCEnv::getObjectArrayElement(jobjectArray array, int n) const
+{
+    jobject obj = get_vm_env()->GetObjectArrayElement(array, n);
+
+    reportException();
+    return obj;
+}
+
+int JCCEnv::getArrayLength(jarray array) const
+{
+    int len = get_vm_env()->GetArrayLength(array);
+
+    reportException();
+    return len;
+}
+
+#ifdef PYTHON
+jclass JCCEnv::getPythonExceptionClass() const
+{
+    return _thr;
+}
+#endif
+
+void JCCEnv::reportException() const
+{
+    JNIEnv *vm_env = get_vm_env();
+    jthrowable throwable = vm_env->ExceptionOccurred();
+
+    if (throwable)
+    {
+        if (!env->handlers)
+            vm_env->ExceptionDescribe();
+
+        vm_env->ExceptionClear();
+
+#ifdef PYTHON
+        PythonGIL gil;
+
+        if (PyErr_Occurred())
+        {
+            /* _thr is PythonException ifdef _jcc_lib (shared mode)
+             * if not shared mode, _thr is RuntimeException
+             */
+            jobject cls = (jobject) vm_env->GetObjectClass(throwable);
+
+            if (vm_env->IsSameObject(cls, _thr))
+                throw pythonError(throwable);
+        }
+#endif
+
+        throw exception(throwable);
+    }
+}
+
+
+#define DEFINE_CALL(jtype, Type)                                         \
+    jtype JCCEnv::call##Type##Method(jobject obj,                        \
+                                     jmethodID mid, ...) const           \
+    {                                                                    \
+        va_list ap;                                                      \
+        jtype result;                                                    \
+                                                                         \
+        va_start(ap, mid);                                               \
+        result = get_vm_env()->Call##Type##MethodV(obj, mid, ap);        \
+        va_end(ap);                                                      \
+                                                                         \
+        reportException();                                               \
+                                                                         \
+        return result;                                                   \
+    }
+
+#define DEFINE_NONVIRTUAL_CALL(jtype, Type)                              \
+    jtype JCCEnv::callNonvirtual##Type##Method(jobject obj, jclass cls,  \
+                                               jmethodID mid, ...) const \
+    {                                                                    \
+        va_list ap;                                                      \
+        jtype result;                                                    \
+                                                                         \
+        va_start(ap, mid);                                               \
+        result = get_vm_env()->CallNonvirtual##Type##MethodV(obj, cls,   \
+                                                             mid, ap);   \
+        va_end(ap);                                                      \
+                                                                         \
+        reportException();                                               \
+                                                                         \
+        return result;                                                   \
+    }
+
+#define DEFINE_STATIC_CALL(jtype, Type)                                 \
+    jtype JCCEnv::callStatic##Type##Method(jclass cls,                  \
+                                           jmethodID mid, ...) const    \
+    {                                                                   \
+        va_list ap;                                                     \
+        jtype result;                                                   \
+                                                                        \
+        va_start(ap, mid);                                              \
+        result = get_vm_env()->CallStatic##Type##MethodV(cls, mid, ap); \
+        va_end(ap);                                                     \
+                                                                        \
+        reportException();                                              \
+                                                                        \
+        return result;                                                  \
+    }
+        
+DEFINE_CALL(jobject, Object)
+DEFINE_CALL(jboolean, Boolean)
+DEFINE_CALL(jbyte, Byte)
+DEFINE_CALL(jchar, Char)
+DEFINE_CALL(jdouble, Double)
+DEFINE_CALL(jfloat, Float)
+DEFINE_CALL(jint, Int)
+DEFINE_CALL(jlong, Long)
+DEFINE_CALL(jshort, Short)
+
+DEFINE_NONVIRTUAL_CALL(jobject, Object)
+DEFINE_NONVIRTUAL_CALL(jboolean, Boolean)
+DEFINE_NONVIRTUAL_CALL(jbyte, Byte)
+DEFINE_NONVIRTUAL_CALL(jchar, Char)
+DEFINE_NONVIRTUAL_CALL(jdouble, Double)
+DEFINE_NONVIRTUAL_CALL(jfloat, Float)
+DEFINE_NONVIRTUAL_CALL(jint, Int)
+DEFINE_NONVIRTUAL_CALL(jlong, Long)
+DEFINE_NONVIRTUAL_CALL(jshort, Short)
+
+DEFINE_STATIC_CALL(jobject, Object)
+DEFINE_STATIC_CALL(jboolean, Boolean)
+DEFINE_STATIC_CALL(jbyte, Byte)
+DEFINE_STATIC_CALL(jchar, Char)
+DEFINE_STATIC_CALL(jdouble, Double)
+DEFINE_STATIC_CALL(jfloat, Float)
+DEFINE_STATIC_CALL(jint, Int)
+DEFINE_STATIC_CALL(jlong, Long)
+DEFINE_STATIC_CALL(jshort, Short)
+
+void JCCEnv::callVoidMethod(jobject obj, jmethodID mid, ...) const
+{
+    va_list ap;
+
+    va_start(ap, mid);
+    get_vm_env()->CallVoidMethodV(obj, mid, ap);
+    va_end(ap);
+
+    reportException();
+}
+
+void JCCEnv::callNonvirtualVoidMethod(jobject obj, jclass cls,
+                                      jmethodID mid, ...) const
+{
+    va_list ap;
+
+    va_start(ap, mid);
+    get_vm_env()->CallNonvirtualVoidMethodV(obj, cls, mid, ap);
+    va_end(ap);
+
+    reportException();
+}
+
+void JCCEnv::callStaticVoidMethod(jclass cls, jmethodID mid, ...) const
+{
+    va_list ap;
+
+    va_start(ap, mid);
+    get_vm_env()->CallStaticVoidMethodV(cls, mid, ap);
+    va_end(ap);
+
+    reportException();
+}
+
+
+jmethodID JCCEnv::getMethodID(jclass cls, const char *name,
+                              const char *signature) const
+{
+    jmethodID id = get_vm_env()->GetMethodID(cls, name, signature);
+
+    reportException();
+
+    return id;
+}
+
+jfieldID JCCEnv::getFieldID(jclass cls, const char *name,
+                            const char *signature) const
+{
+    jfieldID id = get_vm_env()->GetFieldID(cls, name, signature);
+
+    reportException();
+
+    return id;
+}
+
+
+jmethodID JCCEnv::getStaticMethodID(jclass cls, const char *name,
+                                    const char *signature) const
+{
+    jmethodID id = get_vm_env()->GetStaticMethodID(cls, name, signature);
+
+    reportException();
+
+    return id;
+}
+
+jobject JCCEnv::getStaticObjectField(jclass cls, const char *name,
+                                     const char *signature) const
+{
+    JNIEnv *vm_env = get_vm_env();
+    jfieldID id = vm_env->GetStaticFieldID(cls, name, signature);
+
+    reportException();
+
+    return vm_env->GetStaticObjectField(cls, id);
+}
+
+#define DEFINE_GET_STATIC_FIELD(jtype, Type, signature)                 \
+    jtype JCCEnv::getStatic##Type##Field(jclass cls,                    \
+                                         const char *name) const        \
+    {                                                                   \
+        JNIEnv *vm_env = get_vm_env();                                  \
+        jfieldID id = vm_env->GetStaticFieldID(cls, name, #signature);  \
+        reportException();                                              \
+        return vm_env->GetStatic##Type##Field(cls, id);                 \
+    }
+
+DEFINE_GET_STATIC_FIELD(jboolean, Boolean, Z)
+DEFINE_GET_STATIC_FIELD(jbyte, Byte, B)
+DEFINE_GET_STATIC_FIELD(jchar, Char, C)
+DEFINE_GET_STATIC_FIELD(jdouble, Double, D)
+DEFINE_GET_STATIC_FIELD(jfloat, Float, F)
+DEFINE_GET_STATIC_FIELD(jint, Int, I)
+DEFINE_GET_STATIC_FIELD(jlong, Long, J)
+DEFINE_GET_STATIC_FIELD(jshort, Short, S)
+
+#define DEFINE_GET_FIELD(jtype, Type)                                   \
+    jtype JCCEnv::get##Type##Field(jobject obj, jfieldID id) const      \
+    {                                                                   \
+        jtype value = get_vm_env()->Get##Type##Field(obj, id);          \
+        reportException();                                              \
+        return value;                                                   \
+    }
+
+DEFINE_GET_FIELD(jobject, Object)
+DEFINE_GET_FIELD(jboolean, Boolean)
+DEFINE_GET_FIELD(jbyte, Byte)
+DEFINE_GET_FIELD(jchar, Char)
+DEFINE_GET_FIELD(jdouble, Double)
+DEFINE_GET_FIELD(jfloat, Float)
+DEFINE_GET_FIELD(jint, Int)
+DEFINE_GET_FIELD(jlong, Long)
+DEFINE_GET_FIELD(jshort, Short)
+
+#define DEFINE_SET_FIELD(jtype, Type)                                   \
+    void JCCEnv::set##Type##Field(jobject obj, jfieldID id,             \
+                                  jtype value) const                    \
+    {                                                                   \
+        get_vm_env()->Set##Type##Field(obj, id, value);                 \
+        reportException();                                              \
+    }
+
+DEFINE_SET_FIELD(jobject, Object)
+DEFINE_SET_FIELD(jboolean, Boolean)
+DEFINE_SET_FIELD(jbyte, Byte)
+DEFINE_SET_FIELD(jchar, Char)
+DEFINE_SET_FIELD(jdouble, Double)
+DEFINE_SET_FIELD(jfloat, Float)
+DEFINE_SET_FIELD(jint, Int)
+DEFINE_SET_FIELD(jlong, Long)
+DEFINE_SET_FIELD(jshort, Short)
+
+void JCCEnv::setClassPath(const char *classPath)
+{
+    JNIEnv *vm_env = get_vm_env();
+    jclass _ucl = (jclass) vm_env->FindClass("java/net/URLClassLoader");
+    jclass _fil = (jclass) vm_env->FindClass("java/io/File");
+    jmethodID mid = vm_env->GetStaticMethodID(_ucl, "getSystemClassLoader",
+                                              "()Ljava/lang/ClassLoader;");
+    jobject classLoader = vm_env->CallStaticObjectMethod(_ucl, mid);
+    jmethodID mf = vm_env->GetMethodID(_fil, "<init>", "(Ljava/lang/String;)V");
+    jmethodID mu = vm_env->GetMethodID(_fil, "toURL", "()Ljava/net/URL;");
+    jmethodID ma = vm_env->GetMethodID(_ucl, "addURL", "(Ljava/net/URL;)V");
+#ifdef WINDOWS
+    char *pathsep = ";";
+#else
+    char *pathsep = ":";
+#endif
+    char *path = strdup(classPath);
+
+    for (char *cp = strtok(path, pathsep);
+         cp != NULL;
+         cp = strtok(NULL, pathsep)) {
+        jstring string = vm_env->NewStringUTF(cp);
+        jobject file = vm_env->NewObject(_fil, mf, string);
+        jobject url = vm_env->CallObjectMethod(file, mu);
+
+        vm_env->CallVoidMethod(classLoader, ma, url);
+    }
+    free(path);
+}
+
+jstring JCCEnv::fromUTF(const char *bytes) const
+{
+    jstring str = get_vm_env()->NewStringUTF(bytes);
+
+    reportException();
+
+    return str;
+}
+
+char *JCCEnv::toUTF(jstring str) const
+{
+    JNIEnv *vm_env = get_vm_env();
+    int len = vm_env->GetStringUTFLength(str);
+    char *bytes = new char[len + 1];
+    jboolean isCopy = 0;
+    const char *utf = vm_env->GetStringUTFChars(str, &isCopy);
+
+    if (!bytes)
+        return NULL;
+
+    memcpy(bytes, utf, len);
+    bytes[len] = '\0';
+
+    vm_env->ReleaseStringUTFChars(str, utf);
+
+    return bytes;
+}
+
+char *JCCEnv::toString(jobject obj) const
+{
+    return obj
+        ? toUTF((jstring) callObjectMethod(obj, _mids[mid_obj_toString]))
+        : NULL;
+}
+
+char *JCCEnv::getClassName(jobject obj) const
+{
+    return obj
+        ? toString(callObjectMethod(obj, _mids[mid_obj_getClass]))
+        : NULL;
+}
+
+#ifdef PYTHON
+
+jstring JCCEnv::fromPyString(PyObject *object) const
+{
+    if (object == Py_None)
+        return NULL;
+
+    if (PyUnicode_Check(object))
+    {
+        if (sizeof(Py_UNICODE) == sizeof(jchar))
+        {
+            jchar *buf = (jchar *) PyUnicode_AS_UNICODE(object);
+            jsize len = (jsize) PyUnicode_GET_SIZE(object);
+
+            return get_vm_env()->NewString(buf, len);
+        }
+        else
+        {
+            jsize len = PyUnicode_GET_SIZE(object);
+            Py_UNICODE *pchars = PyUnicode_AS_UNICODE(object);
+            jchar *jchars = new jchar[len];
+            jstring str;
+
+            for (int i = 0; i < len; i++)
+                jchars[i] = (jchar) pchars[i];
+
+            str = get_vm_env()->NewString(jchars, len);
+            delete jchars;
+
+            return str;
+        }
+    }
+    else if (PyString_Check(object))
+        return fromUTF(PyString_AS_STRING(object));
+    else
+    {
+        PyObject *tuple = Py_BuildValue("(sO)", "expected a string", object);
+
+        PyErr_SetObject(PyExc_TypeError, tuple);
+        Py_DECREF(tuple);
+
+        return NULL;
+    }
+}
+
+PyObject *JCCEnv::fromJString(jstring js, int delete_local_ref) const
+{
+    if (!js)
+        Py_RETURN_NONE;
+
+    JNIEnv *vm_env = get_vm_env();
+    PyObject *string;
+
+    if (sizeof(Py_UNICODE) == sizeof(jchar))
+    {
+        jboolean isCopy;
+        const jchar *buf = vm_env->GetStringChars(js, &isCopy);
+        jsize len = vm_env->GetStringLength(js);
+
+        string = PyUnicode_FromUnicode((const Py_UNICODE *) buf, len);
+        vm_env->ReleaseStringChars(js, buf);
+    }
+    else
+    {
+        jsize len = vm_env->GetStringLength(js);
+
+        string = PyUnicode_FromUnicode(NULL, len);
+        if (string)
+        {
+            jboolean isCopy;
+            const jchar *jchars = vm_env->GetStringChars(js, &isCopy);
+            Py_UNICODE *pchars = PyUnicode_AS_UNICODE(string);
+
+            for (int i = 0; i < len; i++)
+                pchars[i] = (Py_UNICODE) jchars[i];
+        
+            vm_env->ReleaseStringChars(js, jchars);
+        }
+    }
+
+    if (delete_local_ref)
+        vm_env->DeleteLocalRef((jobject) js);
+
+    return string;
+}
+
+
+/* may be called from finalizer thread which has no vm_env thread local */
+void JCCEnv::finalizeObject(JNIEnv *jenv, PyObject *obj)
+{
+    PythonGIL gil;
+
+    set_vm_env(jenv);
+    Py_DECREF(obj);
+}
+
+#endif /* PYTHON */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/JCCEnv.h	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,325 @@
+/*
+ *   Copyright (c) 2007-2008 Open Source Applications Foundation
+ *
+ *   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.
+ */
+
+#ifndef _JCCEnv_H
+#define _JCCEnv_H
+
+#include <stdarg.h>
+#if defined(_MSC_VER) || defined(__WIN32)
+#define _DLL_IMPORT __declspec(dllimport)
+#define _DLL_EXPORT __declspec(dllexport)
+#include <windows.h>
+#undef MAX_PRIORITY
+#undef MIN_PRIORITY
+#else
+#include <pthread.h>
+#define _DLL_IMPORT
+#define _DLL_EXPORT
+#endif
+
+#ifdef __SUNPRO_CC
+#undef DEFAULT_TYPE
+#endif
+
+#ifdef TRUE
+#undef TRUE
+#endif
+#ifdef FALSE
+#undef FALSE
+#endif
+
+#include <map>
+
+#ifdef PYTHON
+#include <Python.h>
+#endif
+
+#undef EOF
+
+class JCCEnv;
+
+#if defined(_MSC_VER) || defined(__WIN32)
+
+#ifdef _jcc_shared
+_DLL_IMPORT extern JCCEnv *env;
+_DLL_IMPORT extern DWORD VM_ENV;
+#else
+_DLL_EXPORT extern JCCEnv *env;
+_DLL_EXPORT extern DWORD VM_ENV;
+#endif
+
+#else
+
+extern JCCEnv *env;
+
+#endif
+
+
+class countedRef {
+public:
+    jobject global;
+    int count;
+};
+
+class _DLL_EXPORT JCCEnv {
+protected:
+    jclass _sys, _obj, _thr;
+    jmethodID *_mids;
+
+    enum {
+        mid_sys_identityHashCode,
+        mid_sys_setProperty,
+        mid_sys_getProperty,
+        mid_obj_toString,
+        mid_obj_hashCode,
+        mid_obj_getClass,
+        mid_iterator_next,
+        mid_enumeration_nextElement,
+        max_mid
+    };
+
+public:
+    JavaVM *vm;
+    std::multimap<int, countedRef> refs;
+    int handlers;
+
+    class exception {
+    public:
+        jthrowable throwable;
+        exception(jthrowable throwable) {
+            this->throwable = throwable;
+        }
+    };
+
+#ifdef PYTHON
+    class pythonError {
+    public:
+        jthrowable throwable;
+        pythonError(jthrowable throwable) {
+            this->throwable = throwable;
+        }
+    };
+#endif
+
+    explicit JCCEnv(JavaVM *vm, JNIEnv *env);
+    virtual ~JCCEnv() {};
+
+#if defined(_MSC_VER) || defined(__WIN32)
+    inline JNIEnv *get_vm_env() const
+    {
+        return (JNIEnv *) TlsGetValue(VM_ENV);
+    }
+#else
+    static pthread_key_t VM_ENV;
+
+    inline JNIEnv *get_vm_env() const
+    {
+        return (JNIEnv *) pthread_getspecific(VM_ENV);
+    }
+#endif
+    virtual void set_vm(JavaVM *vm, JNIEnv *vm_env);
+    virtual void set_vm_env(JNIEnv *vm_env);
+
+    virtual jint getJNIVersion() const;
+    virtual jstring getJavaVersion() const;
+
+    virtual jclass findClass(const char *className) const;
+    virtual void registerNatives(jclass cls, JNINativeMethod *methods,
+                                 int n) const;
+
+    virtual jobject iteratorNext(jobject obj) const;
+    virtual jobject enumerationNext(jobject obj) const;
+
+    virtual jobject newGlobalRef(jobject obj, int id);
+    virtual jobject deleteGlobalRef(jobject obj, int id);
+
+    virtual jobject newObject(jclass (*initializeClass)(), jmethodID **mids,
+                              int m, ...);
+
+    virtual jobjectArray newObjectArray(jclass cls, int size);
+    virtual void setObjectArrayElement(jobjectArray a, int n,
+                                       jobject obj) const;
+    virtual jobject getObjectArrayElement(jobjectArray a, int n) const;
+    virtual int getArrayLength(jarray a) const;
+
+    virtual void reportException() const;
+
+    virtual jobject callObjectMethod(jobject obj, jmethodID mid, ...) const;
+    virtual jboolean callBooleanMethod(jobject obj, jmethodID mid, ...) const;
+    virtual jbyte callByteMethod(jobject obj, jmethodID mid, ...) const;
+    virtual jchar callCharMethod(jobject obj, jmethodID mid, ...) const;
+    virtual jdouble callDoubleMethod(jobject obj, jmethodID mid, ...) const;
+    virtual jfloat callFloatMethod(jobject obj, jmethodID mid, ...) const;
+    virtual jint callIntMethod(jobject obj, jmethodID mid, ...) const;
+    virtual jlong callLongMethod(jobject obj, jmethodID mid, ...) const;
+    virtual jshort callShortMethod(jobject obj, jmethodID mid, ...) const;
+    virtual void callVoidMethod(jobject obj, jmethodID mid, ...) const;
+
+    virtual jobject callNonvirtualObjectMethod(jobject obj, jclass cls,
+                                               jmethodID mid, ...) const;
+    virtual jboolean callNonvirtualBooleanMethod(jobject obj, jclass cls,
+                                                 jmethodID mid, ...) const;
+    virtual jbyte callNonvirtualByteMethod(jobject obj, jclass cls,
+                                           jmethodID mid, ...) const;
+    virtual jchar callNonvirtualCharMethod(jobject obj, jclass cls,
+                                           jmethodID mid, ...) const;
+    virtual jdouble callNonvirtualDoubleMethod(jobject obj, jclass cls,
+                                               jmethodID mid, ...) const;
+    virtual jfloat callNonvirtualFloatMethod(jobject obj, jclass cls,
+                                             jmethodID mid, ...) const;
+    virtual jint callNonvirtualIntMethod(jobject obj, jclass cls,
+                                         jmethodID mid, ...) const;
+    virtual jlong callNonvirtualLongMethod(jobject obj, jclass cls,
+                                           jmethodID mid, ...) const;
+    virtual jshort callNonvirtualShortMethod(jobject obj, jclass cls,
+                                             jmethodID mid, ...) const;
+    virtual void callNonvirtualVoidMethod(jobject obj, jclass cls,
+                                          jmethodID mid, ...) const;
+
+    virtual jobject callStaticObjectMethod(jclass cls,
+                                           jmethodID mid, ...) const;
+    virtual jboolean callStaticBooleanMethod(jclass cls,
+                                             jmethodID mid, ...) const;
+    virtual jbyte callStaticByteMethod(jclass cls,
+                                       jmethodID mid, ...) const;
+    virtual jchar callStaticCharMethod(jclass cls,
+                                       jmethodID mid, ...) const;
+    virtual jdouble callStaticDoubleMethod(jclass cls,
+                                           jmethodID mid, ...) const;
+    virtual jfloat callStaticFloatMethod(jclass cls,
+                                         jmethodID mid, ...) const;
+    virtual jint callStaticIntMethod(jclass cls,
+                                     jmethodID mid, ...) const;
+    virtual jlong callStaticLongMethod(jclass cls,
+                                       jmethodID mid, ...) const;
+    virtual jshort callStaticShortMethod(jclass cls,
+                                         jmethodID mid, ...) const;
+    virtual void callStaticVoidMethod(jclass cls,
+                                      jmethodID mid, ...) const;
+
+    virtual jmethodID getMethodID(jclass cls, const char *name,
+                                  const char *signature) const;
+    virtual jfieldID getFieldID(jclass cls, const char *name,
+                                const char *signature) const;
+    virtual jmethodID getStaticMethodID(jclass cls, const char *name,
+                                        const char *signature) const;
+
+    virtual jobject getStaticObjectField(jclass cls, const char *name,
+                                         const char *signature) const;
+    virtual jboolean getStaticBooleanField(jclass cls, const char *name) const;
+    virtual jbyte getStaticByteField(jclass cls, const char *name) const;
+    virtual jchar getStaticCharField(jclass cls, const char *name) const;
+    virtual jdouble getStaticDoubleField(jclass cls, const char *name) const;
+    virtual jfloat getStaticFloatField(jclass cls, const char *name) const;
+    virtual jint getStaticIntField(jclass cls, const char *name) const;
+    virtual jlong getStaticLongField(jclass cls, const char *name) const;
+    virtual jshort getStaticShortField(jclass cls, const char *name) const;
+
+    virtual jobject getObjectField(jobject obj, jfieldID id) const;
+    virtual jboolean getBooleanField(jobject obj, jfieldID id) const;
+    virtual jbyte getByteField(jobject obj, jfieldID id) const;
+    virtual jchar getCharField(jobject obj, jfieldID id) const;
+    virtual jdouble getDoubleField(jobject obj, jfieldID id) const;
+    virtual jfloat getFloatField(jobject obj, jfieldID id) const;
+    virtual jint getIntField(jobject obj, jfieldID id) const;
+    virtual jlong getLongField(jobject obj, jfieldID id) const;
+    virtual jshort getShortField(jobject obj, jfieldID id) const;
+
+    virtual void setObjectField(jobject obj, jfieldID id, jobject value) const;
+    virtual void setBooleanField(jobject obj, jfieldID id, jboolean value) const;
+    virtual void setByteField(jobject obj, jfieldID id, jbyte value) const;
+    virtual void setCharField(jobject obj, jfieldID id, jchar value) const;
+    virtual void setDoubleField(jobject obj, jfieldID id, jdouble value) const;
+    virtual void setFloatField(jobject obj, jfieldID id, jfloat value) const;
+    virtual void setIntField(jobject obj, jfieldID id, jint value) const;
+    virtual void setLongField(jobject obj, jfieldID id, jlong value) const;
+    virtual void setShortField(jobject obj, jfieldID id, jshort value) const;
+
+    int id(jobject obj) const {
+        return obj
+            ? get_vm_env()->CallStaticIntMethod(_sys,
+                                                _mids[mid_sys_identityHashCode],
+                                                obj)
+            : 0;
+    }
+
+    int hash(jobject obj) const {
+        return obj
+            ? get_vm_env()->CallIntMethod(obj, _mids[mid_obj_hashCode])
+            : 0;
+    }
+
+    virtual void setClassPath(const char *classPath);
+
+    virtual jstring fromUTF(const char *bytes) const;
+    virtual char *toUTF(jstring str) const;
+    virtual char *toString(jobject obj) const;
+    virtual char *getClassName(jobject obj) const;
+#ifdef PYTHON
+    virtual jclass getPythonExceptionClass() const;
+    virtual jstring fromPyString(PyObject *object) const;
+    virtual PyObject *fromJString(jstring js, int delete_local_ref) const;
+    virtual void finalizeObject(JNIEnv *jenv, PyObject *obj);
+#endif
+
+    virtual inline int isSame(jobject o1, jobject o2) const
+    {
+        return o1 == o2 || get_vm_env()->IsSameObject(o1, o2);
+    }
+};
+
+#ifdef PYTHON
+
+class PythonGIL {
+  private:
+    PyGILState_STATE state;
+  public:
+    PythonGIL()
+    {
+        state = PyGILState_Ensure();
+    }
+    PythonGIL(JNIEnv *vm_env)
+    {
+        state = PyGILState_Ensure();
+        env->set_vm_env(vm_env);
+    }
+    ~PythonGIL()
+    {
+        PyGILState_Release(state);
+    }
+};
+
+class PythonThreadState {
+  private:
+    PyThreadState *state;
+    int handler;
+  public:
+    PythonThreadState(int handler=0)
+    {
+        state = PyEval_SaveThread();
+        this->handler = handler;
+        env->handlers += handler;
+    }
+    ~PythonThreadState()
+    {
+        PyEval_RestoreThread(state);
+        env->handlers -= handler;
+    }
+};
+
+#endif
+
+#endif /* _JCCEnv_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/JObject.cpp	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,186 @@
+/*
+ *   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.
+ */
+
+#include <jni.h>
+#include "JCCEnv.h"
+
+#ifdef PYTHON
+
+#include <Python.h>
+#include "structmember.h"
+
+#include "JObject.h"
+#include "macros.h"
+
+
+/* JObject */
+
+static void t_JObject_dealloc(t_JObject *self);
+static PyObject *t_JObject_new(PyTypeObject *type,
+                               PyObject *args, PyObject *kwds);
+
+static PyObject *t_JObject_richcmp(t_JObject *, PyObject *o2, int op);
+static PyObject *t_JObject_str(t_JObject *self);
+static PyObject *t_JObject_repr(t_JObject *self);
+static int t_JObject_hash(t_JObject *self);
+static PyObject *t_JObject__getJObject(t_JObject *self, void *data);
+
+static PyMemberDef t_JObject_members[] = {
+    { NULL, 0, 0, 0, NULL }
+};
+
+static PyMethodDef t_JObject_methods[] = {
+    { NULL, NULL, 0, NULL }
+};
+
+static PyGetSetDef t_JObject_properties[] = {
+    { "_jobject", (getter) t_JObject__getJObject, NULL, NULL, NULL },
+    { NULL, NULL, NULL, NULL, NULL }
+};
+
+PyTypeObject JObject$$Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                   /* ob_size */
+    "jcc.JObject",                       /* tp_name */
+    sizeof(t_JObject),                   /* tp_basicsize */
+    0,                                   /* tp_itemsize */
+    (destructor)t_JObject_dealloc,       /* tp_dealloc */
+    0,                                   /* tp_print */
+    0,                                   /* tp_getattr */
+    0,                                   /* tp_setattr */
+    0,                                   /* tp_compare */
+    (reprfunc)t_JObject_repr,            /* tp_repr */
+    0,                                   /* tp_as_number */
+    0,                                   /* tp_as_sequence */
+    0,                                   /* tp_as_mapping */
+    (hashfunc)t_JObject_hash,            /* tp_hash  */
+    0,                                   /* tp_call */
+    (reprfunc)t_JObject_str,             /* tp_str */
+    0,                                   /* tp_getattro */
+    0,                                   /* tp_setattro */
+    0,                                   /* tp_as_buffer */
+    (Py_TPFLAGS_DEFAULT |
+     Py_TPFLAGS_BASETYPE),               /* tp_flags */
+    "t_JObject objects",                 /* tp_doc */
+    0,                                   /* tp_traverse */
+    0,                                   /* tp_clear */
+    (richcmpfunc)t_JObject_richcmp,      /* tp_richcompare */
+    0,                                   /* tp_weaklistoffset */
+    0,                                   /* tp_iter */
+    0,                                   /* tp_iternext */
+    t_JObject_methods,                   /* tp_methods */
+    t_JObject_members,                   /* tp_members */
+    t_JObject_properties,                /* tp_getset */
+    0,                                   /* tp_base */
+    0,                                   /* tp_dict */
+    0,                                   /* tp_descr_get */
+    0,                                   /* tp_descr_set */
+    0,                                   /* tp_dictoffset */
+    0,                                   /* tp_init */
+    0,                                   /* tp_alloc */
+    (newfunc)t_JObject_new,              /* tp_new */
+};
+
+
+static void t_JObject_dealloc(t_JObject *self)
+{
+    self->object = JObject(NULL);
+    self->ob_type->tp_free((PyObject *) self);
+}
+
+static PyObject *t_JObject_new(PyTypeObject *type,
+                               PyObject *args, PyObject *kwds)
+{
+    t_JObject *self = (t_JObject *) type->tp_alloc(type, 0);
+
+    self->object = JObject(NULL);
+
+    return (PyObject *) self;
+}
+
+static PyObject *t_JObject_richcmp(t_JObject *self, PyObject *arg, int op)
+{
+    int b = 0;
+
+    switch (op) {
+      case Py_EQ:
+      case Py_NE:
+        if (PyObject_TypeCheck(arg, &JObject$$Type))
+            b = self->object == ((t_JObject *) arg)->object;
+        if (op == Py_EQ)
+            Py_RETURN_BOOL(b);
+        Py_RETURN_BOOL(!b);
+      case Py_LT:
+        PyErr_SetString(PyExc_NotImplementedError, "<");
+        return NULL;
+      case Py_LE:
+        PyErr_SetString(PyExc_NotImplementedError, "<=");
+        return NULL;
+      case Py_GT:
+        PyErr_SetString(PyExc_NotImplementedError, ">");
+        return NULL;
+      case Py_GE:
+        PyErr_SetString(PyExc_NotImplementedError, ">=");
+        return NULL;
+    }
+
+    return NULL;
+}
+
+static PyObject *t_JObject_str(t_JObject *self)
+{
+    if (self->object.this$)
+    {
+        char *utf = env->toString(self->object.this$);
+        PyObject *unicode = PyUnicode_DecodeUTF8(utf, strlen(utf), "strict");
+
+        delete utf;
+        return unicode;
+    }
+
+    return PyString_FromString("<null>");
+}
+
+static PyObject *t_JObject_repr(t_JObject *self)
+{
+    PyObject *name = PyObject_GetAttrString((PyObject *) self->ob_type,
+                                            "__name__");
+    PyObject *str = self->ob_type->tp_str((PyObject *) self);
+#if PY_VERSION_HEX < 0x02040000
+    PyObject *args = Py_BuildValue("(OO)", name, str);
+#else
+    PyObject *args = PyTuple_Pack(2, name, str);
+#endif
+    PyObject *format = PyString_FromString("<%s: %s>");
+    PyObject *repr = PyString_Format(format, args);
+
+    Py_DECREF(name);
+    Py_DECREF(str);
+    Py_DECREF(args);
+    Py_DECREF(format);
+
+    return repr;
+}
+
+static int t_JObject_hash(t_JObject *self)
+{
+    return env->hash(self->object.this$);
+}
+
+static PyObject *t_JObject__getJObject(t_JObject *self, void *data)
+{
+    return PyCObject_FromVoidPtr((void *) self->object.this$, NULL);
+}
+
+#endif /* PYTHON */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/JObject.h	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,106 @@
+/*
+ *   Copyright (c) 2007-2008 Open Source Applications Foundation
+ *
+ *   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.
+ */
+
+#ifndef _JObject_H
+#define _JObject_H
+
+#include <stdio.h>
+#include "JCCEnv.h"
+
+class JObject {
+public:
+    jobject this$;
+    int id;  /* zero when this$ is a weak ref */
+
+    inline explicit JObject(jobject obj)
+    {
+        if (obj)
+        {
+            id = env->id(obj);
+            this$ = env->newGlobalRef(obj, id);
+        }
+        else
+        {
+            id = 0;
+            this$ = NULL;
+        }
+    }
+
+    inline JObject(const JObject& obj)
+    {
+        id = obj.id ? obj.id : env->id(obj.this$);
+        this$ = env->newGlobalRef(obj.this$, id);
+    }
+
+    virtual ~JObject()
+    {
+        this$ = env->deleteGlobalRef(this$, id);
+    }
+
+    JObject& weaken$()
+    {
+        if (id)
+        {
+            jobject ref = env->newGlobalRef(this$, 0);
+
+            env->deleteGlobalRef(this$, id);
+            id = 0;
+            this$ = ref;
+        }
+
+        return *this;
+    }
+
+    inline int operator!() const
+    {
+        return env->isSame(this$, NULL);
+    }
+
+    inline int operator==(const JObject& obj) const
+    {
+        return env->isSame(this$, obj.this$);
+    }
+
+    JObject& operator=(const JObject& obj)
+    {
+        jobject prev = this$;
+        int objid = obj.id ? obj.id : env->id(obj.this$);
+
+        this$ = env->newGlobalRef(obj.this$, objid);
+        env->deleteGlobalRef(prev, id);
+        id = objid;
+
+        return *this;
+    }
+};
+
+
+#ifdef PYTHON
+
+#include <Python.h>
+
+class t_JObject {
+public:
+    PyObject_HEAD
+    JObject object;
+};
+
+extern PyTypeObject JObject$$Type;
+
+#endif /* PYTHON */
+
+
+#endif /* _JObject_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/functions.cpp	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1272 @@
+/*
+ *   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.
+ */
+
+#include <jni.h>
+#include <stdarg.h>
+
+#include "java/lang/Object.h"
+#include "java/lang/Class.h"
+#include "java/lang/String.h"
+#include "java/lang/Throwable.h"
+#include "java/lang/Boolean.h"
+#include "java/lang/Integer.h"
+#include "java/lang/Long.h"
+#include "java/lang/Double.h"
+#include "java/util/Iterator.h"
+#include "JArray.h"
+#include "functions.h"
+#include "macros.h"
+
+using namespace java::lang;
+using namespace java::util;
+
+PyObject *PyExc_JavaError = PyExc_ValueError;
+PyObject *PyExc_InvalidArgsError = PyExc_ValueError;
+
+PyObject *_set_exception_types(PyObject *self, PyObject *args)
+{
+    if (!PyArg_ParseTuple(args, "OO",
+                          &PyExc_JavaError, &PyExc_InvalidArgsError))
+        return NULL;
+
+    Py_RETURN_NONE;
+}
+
+PyObject *_set_function_self(PyObject *self, PyObject *args)
+{
+    PyObject *object, *module;
+
+    if (!PyArg_ParseTuple(args, "OO", &object, &module))
+        return NULL;
+
+    if (!PyCFunction_Check(object))
+    {
+        PyErr_SetObject(PyExc_TypeError, object);
+        return NULL;
+    }
+
+    PyCFunctionObject *cfn = (PyCFunctionObject *) object;
+
+    Py_INCREF(module);
+    Py_XDECREF(cfn->m_self);
+    cfn->m_self = module;
+
+    Py_RETURN_NONE;
+}
+
+PyObject *findClass(PyObject *self, PyObject *args)
+{
+    char *className;
+
+    if (!PyArg_ParseTuple(args, "s", &className))
+        return NULL;
+
+    try {
+        jclass cls = env->findClass(className);
+
+        if (cls)
+            return t_Class::wrap_Object(Class(cls));
+    } catch (JCCEnv::pythonError e) {
+        return NULL;
+    } catch (JCCEnv::exception e) {
+        PyErr_SetJavaError(e.throwable);
+        return NULL;
+    }
+
+    Py_RETURN_NONE;
+}
+
+
+#if defined(_MSC_VER) || defined(__SUNPRO_CC)
+int __parseArgs(PyObject *args, char *types, ...)
+{
+    int count = ((PyTupleObject *)(args))->ob_size;
+    va_list list, check;
+
+    va_start(list, types);
+    va_start(check, types);
+
+    return _parseArgs(((PyTupleObject *)(args))->ob_item, count, types,
+		      list, check);
+}
+
+int __parseArg(PyObject *arg, char *types, ...)
+{
+    va_list list, check;
+
+    va_start(list, types);
+    va_start(check, types);
+
+    return _parseArgs(&arg, 1, types, list, check);
+}
+
+int _parseArgs(PyObject **args, unsigned int count, char *types,
+	       va_list list, va_list check)
+{
+    unsigned int typeCount = strlen(types);
+
+    if (count > typeCount)
+        return -1;
+#else
+
+int _parseArgs(PyObject **args, unsigned int count, char *types, ...)
+{
+    unsigned int typeCount = strlen(types);
+    va_list list, check;
+
+    if (count > typeCount)
+        return -1;
+
+    va_start(list, types);
+    va_start(check, types);
+#endif
+
+    if (!env->vm)
+    {
+        PyErr_SetString(PyExc_RuntimeError, "initVM() must be called first");
+        return -1;
+    }
+
+    JNIEnv *vm_env = env->get_vm_env();
+
+    if (!vm_env)
+    {
+        PyErr_SetString(PyExc_RuntimeError, "attachCurrentThread() must be called first");
+        return -1;
+    }
+
+    unsigned int pos = 0;
+    int array = 0;
+
+    for (unsigned int a = 0; a < count; a++, pos++) {
+        PyObject *arg = args[a];
+
+        switch (types[pos]) {
+          case '[':
+          {
+              if (++array > 1)
+                  return -1;
+
+              a -= 1;
+              break;
+          }
+
+          case 'j':           /* Java object, with class$    */
+          case 'k':           /* Java object, with initializeClass */
+          case 'K':           /* Java object, with initializeClass and params */
+          {
+              jclass cls = NULL;
+
+              switch (types[pos]) {
+                case 'j':
+                  cls = (jclass) va_arg(list, Class *)->this$;
+                  break;
+                case 'k':
+                case 'K':
+                  try {
+                      getclassfn initializeClass = va_arg(list, getclassfn);
+                      cls = (*initializeClass)();
+                  } catch (JCCEnv::pythonError e) {
+                      return -1;
+                  } catch (JCCEnv::exception e) {
+                      PyErr_SetJavaError(e.throwable);
+                      return -1;
+                  }
+                  break;
+              }
+
+              if (arg == Py_None)
+                  break;
+
+              /* ensure that class Class is initialized (which may not be the
+               * case because of earlier recursion avoidance (JObject(cls)).
+               */
+              if (!Class::class$)
+                  Class::initializeClass();
+
+              if (array)
+              {
+                  if (PyObject_TypeCheck(arg, JArrayObject$$Type))
+                      break;
+
+                  if (PySequence_Check(arg) &&
+                      !PyString_Check(arg) && !PyUnicode_Check(arg))
+                  {
+                      if (PySequence_Length(arg) > 0)
+                      {
+                          PyObject *obj = PySequence_GetItem(arg, 0);
+                          int ok = 0;
+
+                          if (obj == Py_None)
+                              ok = 1;
+                          else if (PyObject_TypeCheck(obj, &Object$$Type) &&
+                                   vm_env->IsInstanceOf(((t_Object *) obj)->object.this$, cls))
+                              ok = 1;
+                          else if (PyObject_TypeCheck(obj, &FinalizerProxy$$Type))
+                          {
+                              PyObject *o = ((t_fp *) obj)->object;
+
+                              if (PyObject_TypeCheck(o, &Object$$Type) &&
+                                  vm_env->IsInstanceOf(((t_Object *) o)->object.this$, cls))
+                                  ok = 1;
+                          }
+
+                          Py_DECREF(obj);
+                          if (ok)
+                              break;
+                      }
+                      else
+                          break;
+                  }
+              }
+              else if (PyObject_TypeCheck(arg, &Object$$Type) &&
+                       vm_env->IsInstanceOf(((t_Object *) arg)->object.this$, cls))
+                  break;
+              else if (PyObject_TypeCheck(arg, &FinalizerProxy$$Type))
+              {
+                  arg = ((t_fp *) arg)->object;
+                  if (PyObject_TypeCheck(arg, &Object$$Type) &&
+                      vm_env->IsInstanceOf(((t_Object *) arg)->object.this$, cls))
+                      break;
+              }
+
+              return -1;
+          }
+
+          case 'Z':           /* boolean, strict */
+          {
+              if (array)
+              {
+                  if (arg == Py_None)
+                      break;
+
+                  if (PyObject_TypeCheck(arg, JArrayBool$$Type))
+                      break;
+
+                  if (PySequence_Check(arg))
+                  {
+                      if (PySequence_Length(arg) > 0)
+                      {
+                          PyObject *obj = PySequence_GetItem(arg, 0);
+                          int ok = obj == Py_True || obj == Py_False;
+
+                          Py_DECREF(obj);
+                          if (ok)
+                              break;
+                      }
+                      else
+                          break;
+                  }
+              }
+              else if (arg == Py_True || arg == Py_False)
+                  break;
+
+              return -1;
+          }
+
+          case 'B':           /* byte */
+          {
+              if (array)
+              {
+                  if (arg == Py_None)
+                      break;
+                  if (PyObject_TypeCheck(arg, JArrayByte$$Type))
+                      break;
+              }
+              else if (PyString_Check(arg) && (PyString_Size(arg) == 1))
+                  break;
+              else if (PyInt_CheckExact(arg))
+                  break;
+
+              return -1;
+          }
+
+          case 'C':           /* char */
+          {
+              if (array)
+              {
+                  if (arg == Py_None)
+                      break;
+                  if (PyObject_TypeCheck(arg, JArrayChar$$Type))
+                      break;
+              }
+              else if (PyUnicode_Check(arg) && PyUnicode_GET_SIZE(arg) == 1)
+                  break;
+              return -1;
+          }
+
+          case 'I':           /* int */
+          {
+              if (array)
+              {
+                  if (arg == Py_None)
+                      break;
+
+                  if (PyObject_TypeCheck(arg, JArrayInt$$Type))
+                      break;
+
+                  if (PySequence_Check(arg))
+                  {
+                      if (PySequence_Length(arg) > 0)
+                      {
+                          PyObject *obj = PySequence_GetItem(arg, 0);
+                          int ok = PyInt_CheckExact(obj);
+
+                          Py_DECREF(obj);
+                          if (ok)
+                              break;
+                      }
+                      else
+                          break;
+                  }
+              }
+              else if (PyInt_CheckExact(arg))
+                  break;
+
+              return -1;
+          }
+
+          case 'S':           /* short */
+          {
+              if (array)
+              {
+                  if (arg == Py_None)
+                      break;
+
+                  if (PyObject_TypeCheck(arg, JArrayShort$$Type))
+                      break;
+
+                  if (PySequence_Check(arg))
+                  {
+                      if (PySequence_Length(arg) > 0)
+                      {
+                          PyObject *obj = PySequence_GetItem(arg, 0);
+                          int ok = PyInt_CheckExact(obj);
+
+                          Py_DECREF(obj);
+                          if (ok)
+                              break;
+                      }
+                      else
+                          break;
+                  }
+              }
+              else if (PyInt_CheckExact(arg))
+                  break;
+
+              return -1;
+          }
+
+          case 'D':           /* double */
+          {
+              if (array)
+              {
+                  if (arg == Py_None)
+                      break;
+
+                  if (PyObject_TypeCheck(arg, JArrayDouble$$Type))
+                      break;
+
+                  if (PySequence_Check(arg))
+                  {
+                      if (PySequence_Length(arg) > 0)
+                      {
+                          PyObject *obj = PySequence_GetItem(arg, 0);
+                          int ok = PyFloat_CheckExact(obj);
+
+                          Py_DECREF(obj);
+                          if (ok)
+                              break;
+                      }
+                      else
+                          break;
+                  }
+              }
+              else if (PyFloat_CheckExact(arg))
+                  break;
+
+              return -1;
+          }
+
+          case 'F':           /* float */
+          {
+              if (array)
+              {
+                  if (arg == Py_None)
+                      break;
+
+                  if (PyObject_TypeCheck(arg, JArrayFloat$$Type))
+                      break;
+
+                  if (PySequence_Check(arg))
+                  {
+                      if (PySequence_Length(arg) > 0)
+                      {
+                          PyObject *obj = PySequence_GetItem(arg, 0);
+                          int ok = PyFloat_CheckExact(obj);
+
+                          Py_DECREF(obj);
+                          if (ok)
+                              break;
+                      }
+                      else
+                          break;
+                  }
+              }
+              else if (PyFloat_CheckExact(arg))
+                  break;
+
+              return -1;
+          }
+
+          case 'J':           /* long long */
+          {
+              if (array)
+              {
+                  if (arg == Py_None)
+                      break;
+
+                  if (PyObject_TypeCheck(arg, JArrayLong$$Type))
+                      break;
+
+                  if (PySequence_Check(arg))
+                  {
+                      if (PySequence_Length(arg) > 0)
+                      {
+                          PyObject *obj = PySequence_GetItem(arg, 0);
+                          int ok = PyLong_CheckExact(obj);
+
+                          Py_DECREF(obj);
+                          if (ok)
+                              break;
+                      }
+                      else
+                          break;
+                  }
+              }
+              else if (PyLong_CheckExact(arg))
+                  break;
+
+              return -1;
+          }
+
+          case 's':           /* string  */
+          {
+              if (array)
+              {
+                  if (arg == Py_None)
+                      break;
+
+                  if (PyObject_TypeCheck(arg, JArrayString$$Type))
+                      break;
+
+                  if (PySequence_Check(arg) && 
+                      !PyString_Check(arg) && !PyUnicode_Check(arg))
+                  {
+                      if (PySequence_Length(arg) > 0)
+                      {
+                          PyObject *obj = PySequence_GetItem(arg, 0);
+                          int ok =
+                              (obj == Py_None ||
+                               PyString_Check(obj) || PyUnicode_Check(obj));
+
+                          Py_DECREF(obj);
+                          if (ok)
+                              break;
+                      }
+                      else
+                          break;
+                  }
+              }
+              else if (arg == Py_None ||
+                       PyString_Check(arg) || PyUnicode_Check(arg))
+                  break;
+
+              return -1;
+          }
+
+          case 'o':         /* java.lang.Object */
+            break;
+
+          default:
+            return -1;
+        }
+
+        if (types[pos] != '[')
+            array = 0;
+    }
+
+    if (array)
+        return -1;
+
+    pos = 0;
+
+    for (unsigned int a = 0; a < count; a++, pos++) {
+        PyObject *arg = args[a];
+        
+        switch (types[pos]) {
+          case '[':
+          {
+              if (++array > 1)
+                  return -1;
+
+              a -= 1;
+              break;
+          }
+
+          case 'j':           /* Java object except String and Object */
+          case 'k':           /* Java object, with initializeClass    */
+          case 'K':           /* Java object, with initializeClass and params */
+          {
+              jclass cls = NULL;
+
+              switch (types[pos]) {
+                case 'j':
+                  cls = (jclass) va_arg(check, Class *)->this$;
+                  break;
+                case 'k':
+                case 'K':
+                  getclassfn initializeClass = va_arg(check, getclassfn);
+                  cls = (*initializeClass)();
+              }
+
+              if (array)
+              {
+                  JArray<jobject> *array = va_arg(list, JArray<jobject> *);
+
+#ifdef _java_generics
+                  if (types[pos] == 'K')
+                  {
+                      PyTypeObject ***tp = va_arg(list, PyTypeObject ***);
+
+                      va_arg(list, getparametersfn);
+                      *tp = NULL;
+                  }
+#endif
+                  if (arg == Py_None)
+                      *array = JArray<jobject>((jobject) NULL);
+                  else if (PyObject_TypeCheck(arg, JArrayObject$$Type))
+                      *array = ((t_jarray<jobject> *) arg)->array;
+                  else 
+                      *array = JArray<jobject>(cls, arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else
+              {
+                  Object *obj = va_arg(list, Object *);
+
+                  if (PyObject_TypeCheck(arg, &FinalizerProxy$$Type))
+                      arg = ((t_fp *) arg)->object;
+
+#ifdef _java_generics
+                  if (types[pos] == 'K')
+                  {
+                      PyTypeObject ***tp = va_arg(list, PyTypeObject ***);
+                      PyTypeObject **(*parameters_)(void *) = 
+                          va_arg(list, getparametersfn);
+
+                      if (arg == Py_None)
+                          *tp = NULL;
+                      else
+                          *tp = (*parameters_)(arg);
+                  }
+#endif
+
+                  *obj = arg == Py_None
+                      ? Object(NULL)
+                      : ((t_Object *) arg)->object;
+              }
+              break;
+          }
+
+          case 'Z':           /* boolean, strict */
+          {
+              if (array)
+              {
+                  JArray<jboolean> *array = va_arg(list, JArray<jboolean> *);
+
+                  if (arg == Py_None)
+                      *array = JArray<jboolean>((jobject) NULL);
+                  else if (PyObject_TypeCheck(arg, JArrayBool$$Type))
+                      *array = ((t_jarray<jboolean> *) arg)->array;
+                  else
+                      *array = JArray<jboolean>(arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else
+              {
+                  jboolean *b = va_arg(list, jboolean *);
+                  *b = arg == Py_True;
+              }
+              break;
+          }
+
+          case 'B':           /* byte */
+          {
+              if (array)
+              {
+                  JArray<jbyte> *array = va_arg(list, JArray<jbyte> *);
+
+                  if (arg == Py_None)
+                      *array = JArray<jbyte>((jobject) NULL);
+                  else if (PyObject_TypeCheck(arg, JArrayByte$$Type))
+                      *array = ((t_jarray<jbyte> *) arg)->array;
+                  else 
+                      *array = JArray<jbyte>(arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else if (PyString_Check(arg))
+              {
+                  jbyte *a = va_arg(list, jbyte *);
+                  *a = (jbyte) PyString_AS_STRING(arg)[0];
+              }
+              else
+              {
+                  jbyte *a = va_arg(list, jbyte *);
+                  *a = (jbyte) PyInt_AsLong(arg);
+              }
+              break;
+          }
+
+          case 'C':           /* char */
+          {
+              if (array)
+              {
+                  JArray<jchar> *array = va_arg(list, JArray<jchar> *);
+
+                  if (arg == Py_None)
+                      *array = JArray<jchar>((jobject) NULL);
+                  else if (PyObject_TypeCheck(arg, JArrayChar$$Type))
+                      *array = ((t_jarray<jchar> *) arg)->array;
+                  else 
+                      *array = JArray<jchar>(arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else
+              {
+                  jchar *c = va_arg(list, jchar *);
+                  *c = (jchar) PyUnicode_AS_UNICODE(arg)[0];
+              }
+              break;
+          }
+
+          case 'I':           /* int */
+          {
+              if (array)
+              {
+                  JArray<jint> *array = va_arg(list, JArray<jint> *);
+
+                  if (arg == Py_None)
+                      *array = JArray<jint>((jobject) NULL);
+                  else if (PyObject_TypeCheck(arg, JArrayInt$$Type))
+                      *array = ((t_jarray<jint> *) arg)->array;
+                  else 
+                      *array = JArray<jint>(arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else
+              {
+                  jint *n = va_arg(list, jint *);
+                  *n = (jint) PyInt_AsLong(arg);
+              }
+              break;
+          }
+
+          case 'S':           /* short */
+          {
+              if (array)
+              {
+                  JArray<jshort> *array = va_arg(list, JArray<jshort> *);
+
+                  if (arg == Py_None)
+                      *array = JArray<jshort>((jobject) NULL);
+                  else if (PyObject_TypeCheck(arg, JArrayShort$$Type))
+                      *array = ((t_jarray<jshort> *) arg)->array;
+                  else 
+                      *array = JArray<jshort>(arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else
+              {
+                  jshort *n = va_arg(list, jshort *);
+                  *n = (jshort) PyInt_AsLong(arg);
+              }
+              break;
+          }
+
+          case 'D':           /* double */
+          {
+              if (array)
+              {
+                  JArray<jdouble> *array = va_arg(list, JArray<jdouble> *);
+
+                  if (arg == Py_None)
+                      *array = JArray<jdouble>((jobject) NULL);
+                  else if (PyObject_TypeCheck(arg, JArrayDouble$$Type))
+                      *array = ((t_jarray<jdouble> *) arg)->array;
+                  else 
+                      *array = JArray<jdouble>(arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else
+              {
+                  jdouble *d = va_arg(list, jdouble *);
+                  *d = (jdouble) PyFloat_AsDouble(arg);
+              }
+              break;
+          }
+
+          case 'F':           /* float */
+          {
+              if (array)
+              {
+                  JArray<jfloat> *array = va_arg(list, JArray<jfloat> *);
+
+                  if (arg == Py_None)
+                      *array = JArray<jfloat>((jobject) NULL);
+                  else if (PyObject_TypeCheck(arg, JArrayFloat$$Type))
+                      *array = ((t_jarray<jfloat> *) arg)->array;
+                  else 
+                      *array = JArray<jfloat>(arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else
+              {
+                  jfloat *d = va_arg(list, jfloat *);
+                  *d = (jfloat) (float) PyFloat_AsDouble(arg);
+              }
+              break;
+          }
+
+          case 'J':           /* long long */
+          {
+              if (array)
+              {
+                  JArray<jlong> *array = va_arg(list, JArray<jlong> *);
+
+                  if (arg == Py_None)
+                      *array = JArray<jlong>((jobject) NULL);
+                  else if (PyObject_TypeCheck(arg, JArrayLong$$Type))
+                      *array = ((t_jarray<jlong> *) arg)->array;
+                  else 
+                      *array = JArray<jlong>(arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else
+              {
+                  jlong *l = va_arg(list, jlong *);
+                  *l = (jlong) PyLong_AsLongLong(arg);
+              }
+              break;
+          }
+
+          case 's':           /* string  */
+          {
+              if (array)
+              {
+                  JArray<jstring> *array = va_arg(list, JArray<jstring> *);
+
+                  if (arg == Py_None)
+                      *array = JArray<jstring>((jobject) NULL);
+                  else if (PyObject_TypeCheck(arg, JArrayString$$Type))
+                      *array = ((t_jarray<jstring> *) arg)->array;
+                  else 
+                      *array = JArray<jstring>(arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else
+              {
+                  String *str = va_arg(list, String *);
+
+                  if (arg == Py_None)
+                      *str = String(NULL);
+                  else
+                  {
+                      *str = p2j(arg);
+                      if (PyErr_Occurred())
+                          return -1;
+                  }
+              }
+              break;
+          }
+
+          case 'o':           /* java.lang.Object  */
+          {
+              if (array)
+              {
+                  JArray<Object> *array = va_arg(list, JArray<Object> *);
+
+                  if (arg == Py_None)
+                      *array = JArray<Object>((jobject) NULL);
+                  else 
+                      *array = JArray<Object>(arg);
+
+                  if (PyErr_Occurred())
+                      return -1;
+              }
+              else
+              {
+                  Object *obj = va_arg(list, Object *);
+
+                  if (arg == Py_None)
+                      *obj = Object(NULL);
+                  else if (PyObject_TypeCheck(arg, &Object$$Type))
+                      *obj = ((t_Object *) arg)->object;
+                  else if (PyObject_TypeCheck(arg, &FinalizerProxy$$Type))
+                  {
+                      arg = ((t_fp *) arg)->object;
+                      if (PyObject_TypeCheck(arg, &Object$$Type))
+                          *obj = ((t_Object *) arg)->object;
+                      else
+                          return -1;
+                  }
+                  else if (PyString_Check(arg) || PyUnicode_Check(arg))
+                  {
+                      *obj = p2j(arg);
+                      if (PyErr_Occurred())
+                          return -1;
+                  }
+                  else if (arg == Py_True)
+                      *obj = *Boolean::TRUE;
+                  else if (arg == Py_False)
+                      *obj = *Boolean::FALSE;
+                  else if (PyInt_Check(arg))
+                  {
+                      long ln = PyInt_AS_LONG(arg);
+                      int n = (int) ln;
+
+                      if (ln != (long) n)
+                          *obj = Long((jlong) ln);
+                      else
+                          *obj = Integer((jint) n);
+                  }
+                  else if (PyLong_Check(arg))
+                      *obj = Long((jlong) PyLong_AsLongLong(arg));
+                  else if (PyFloat_Check(arg))
+                      *obj = Double((jdouble) PyFloat_AS_DOUBLE(arg));
+                  else
+                      return -1;
+              }
+              break;
+          }
+
+          default:
+            return -1;
+        }
+
+        if (types[pos] != '[')
+            array = 0;
+    }
+
+    if (pos == typeCount)
+        return 0;
+
+    return -1;
+}
+
+
+String p2j(PyObject *object)
+{
+    return String(env->fromPyString(object));
+}
+
+PyObject *j2p(const String& js)
+{
+    return env->fromJString((jstring) js.this$, 0);
+}
+
+PyObject *PyErr_SetArgsError(char *name, PyObject *args)
+{
+    if (!PyErr_Occurred())
+    {
+        PyObject *err = Py_BuildValue("(sO)", name, args);
+
+        PyErr_SetObject(PyExc_InvalidArgsError, err);
+        Py_DECREF(err);
+    }
+
+    return NULL;
+}
+
+PyObject *PyErr_SetArgsError(PyObject *self, char *name, PyObject *args)
+{
+    if (!PyErr_Occurred())
+    {
+        PyObject *type = (PyObject *) self->ob_type;
+        PyObject *err = Py_BuildValue("(OsO)", type, name, args);
+
+        PyErr_SetObject(PyExc_InvalidArgsError, err);
+        Py_DECREF(err);
+    }
+
+    return NULL;
+}
+
+PyObject *PyErr_SetArgsError(PyTypeObject *type, char *name, PyObject *args)
+{
+    if (!PyErr_Occurred())
+    {
+        PyObject *err = Py_BuildValue("(OsO)", type, name, args);
+
+        PyErr_SetObject(PyExc_InvalidArgsError, err);
+        Py_DECREF(err);
+    }
+
+    return NULL;
+}
+
+PyObject *PyErr_SetJavaError(jthrowable throwable)
+{
+    PyObject *err = t_Throwable::wrap_Object(Throwable(throwable));
+
+    PyErr_SetObject(PyExc_JavaError, err);
+    Py_DECREF(err);
+
+    return NULL;
+}
+
+void throwPythonError(void)
+{
+    PyObject *exc = PyErr_Occurred();
+
+    if (exc && PyErr_GivenExceptionMatches(exc, PyExc_JavaError))
+    {
+        PyObject *value, *traceback;
+
+        PyErr_Fetch(&exc, &value, &traceback);
+        if (value)
+        {
+            PyObject *je = PyObject_CallMethod(value, "getJavaException", "");
+
+            if (!je)
+                PyErr_Restore(exc, value, traceback);
+            else
+            {
+                Py_DECREF(exc);
+                Py_DECREF(value);
+                Py_XDECREF(traceback);
+                exc = je;
+
+                if (exc && PyObject_TypeCheck(exc, &Throwable$$Type))
+                {
+                    jobject jobj = ((t_Throwable *) exc)->object.this$;
+
+                    env->get_vm_env()->Throw((jthrowable) jobj);
+                    Py_DECREF(exc);
+
+                    return;
+                }
+            }
+        }
+        else
+        {
+            Py_DECREF(exc);
+            Py_XDECREF(traceback);
+        }
+    }
+    else if (exc && PyErr_GivenExceptionMatches(exc, PyExc_StopIteration))
+    {
+        PyErr_Clear();
+        return;
+    }
+
+    if (exc)
+    {
+        PyObject *name = PyObject_GetAttrString(exc, "__name__");
+
+        env->get_vm_env()->ThrowNew(env->getPythonExceptionClass(),
+                                    PyString_AS_STRING(name));
+        Py_DECREF(name);
+    }
+    else
+        env->get_vm_env()->ThrowNew(env->getPythonExceptionClass(),
+                                    "python error");
+}
+
+void throwTypeError(const char *name, PyObject *object)
+{
+    PyObject *tuple = Py_BuildValue("(ssO)", "while calling", name, object);
+
+    PyErr_SetObject(PyExc_TypeError, tuple);
+    Py_DECREF(tuple);
+
+    env->get_vm_env()->ThrowNew(env->getPythonExceptionClass(), "type error");
+}
+
+int abstract_init(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    PyObject *err =
+        Py_BuildValue("(sO)", "instantiating java class", self->ob_type);
+
+    PyErr_SetObject(PyExc_NotImplementedError, err);
+    Py_DECREF(err);
+
+    return -1;
+}
+
+PyObject *callSuper(PyTypeObject *type, const char *name, PyObject *args,
+                    int cardinality)
+{
+    PyObject *super = (PyObject *) type->tp_base;
+    PyObject *method =
+        PyObject_GetAttrString(super, (char *) name); // python 2.4 cast
+    PyObject *value;
+
+    if (!method)
+        return NULL;
+
+    if (cardinality > 1)
+        value = PyObject_Call(method, args, NULL);
+    else
+    {
+#if PY_VERSION_HEX < 0x02040000
+        PyObject *tuple = Py_BuildValue("(O)", args);
+#else
+        PyObject *tuple = PyTuple_Pack(1, args);
+#endif   
+        value = PyObject_Call(method, tuple, NULL);
+        Py_DECREF(tuple);
+    }
+
+    Py_DECREF(method);
+
+    return value;
+}
+
+PyObject *callSuper(PyTypeObject *type, PyObject *self,
+                    const char *name, PyObject *args, int cardinality)
+{
+#if PY_VERSION_HEX < 0x02040000
+    PyObject *tuple = Py_BuildValue("(OO)", type, self);
+#else
+    PyObject *tuple = PyTuple_Pack(2, type, self);
+#endif
+    PyObject *super = PyObject_Call((PyObject *) &PySuper_Type, tuple, NULL);
+    PyObject *method, *value;
+
+    Py_DECREF(tuple);
+    if (!super)
+        return NULL;
+
+    method = PyObject_GetAttrString(super, (char *) name); // python 2.4 cast
+    Py_DECREF(super);
+    if (!method)
+        return NULL;
+
+    if (cardinality > 1)
+        value = PyObject_Call(method, args, NULL);
+    else
+    {
+#if PY_VERSION_HEX < 0x02040000
+        tuple = Py_BuildValue("(O)", args);
+#else
+        tuple = PyTuple_Pack(1, args);
+#endif
+        value = PyObject_Call(method, tuple, NULL);
+        Py_DECREF(tuple);
+    }
+
+    Py_DECREF(method);
+
+    return value;
+}
+
+PyObject *castCheck(PyObject *obj, getclassfn initializeClass,
+                    int reportError)
+{
+    if (PyObject_TypeCheck(obj, &FinalizerProxy$$Type))
+        obj = ((t_fp *) obj)->object;
+
+    if (!PyObject_TypeCheck(obj, &Object$$Type))
+    {
+        if (reportError)
+            PyErr_SetObject(PyExc_TypeError, obj);
+        return NULL;
+    }
+
+    jobject jobj = ((t_Object *) obj)->object.this$;
+
+    if (jobj)
+    {
+        jclass cls;
+
+        try {
+            cls = (*initializeClass)();
+        } catch (JCCEnv::pythonError e) {
+            return NULL;
+        } catch (JCCEnv::exception e) {
+            PyErr_SetJavaError(e.throwable);
+            return NULL;
+        }
+
+        if (!env->get_vm_env()->IsInstanceOf(jobj, cls))
+        {
+            if (reportError)
+                PyErr_SetObject(PyExc_TypeError, obj);
+
+            return NULL;
+        }
+    }
+
+    return obj;
+}
+
+PyObject *get_extension_iterator(PyObject *self)
+{
+    return PyObject_CallMethod(self, "iterator", "");
+}
+
+PyObject *get_extension_next(PyObject *self)
+{
+    return PyObject_CallMethod(self, "next", "");
+}
+
+PyObject *get_extension_nextElement(PyObject *self)
+{
+    return PyObject_CallMethod(self, "nextElement", "");
+}
+
+jobjectArray fromPySequence(jclass cls, PyObject *sequence)
+{
+    if (sequence == Py_None)
+        return NULL;
+
+    if (!PySequence_Check(sequence))
+    {
+        PyErr_SetObject(PyExc_TypeError, sequence);
+        return NULL;
+    }
+
+    int length = PySequence_Length(sequence);
+    jobjectArray array;
+
+    try {
+        array = env->newObjectArray(cls, length);
+    } catch (JCCEnv::pythonError) {
+        return NULL;
+    } catch (JCCEnv::exception e) {
+        PyErr_SetJavaError(e.throwable);
+        return NULL;
+    }
+
+    JNIEnv *vm_env = env->get_vm_env();
+
+    for (int i = 0; i < length; i++) {
+        PyObject *obj = PySequence_GetItem(sequence, i);
+        int fromString = 0;
+        jobject jobj;
+
+        if (!obj)
+            break;
+        else if (obj == Py_None)
+            jobj = NULL;
+        else if (PyString_Check(obj) || PyUnicode_Check(obj))
+        {
+            jobj = env->fromPyString(obj);
+            fromString = 1;
+        }
+        else if (PyObject_TypeCheck(obj, &JObject$$Type))
+            jobj = ((t_JObject *) obj)->object.this$;
+        else if (PyObject_TypeCheck(obj, &FinalizerProxy$$Type))
+            jobj = ((t_JObject *) ((t_fp *) obj)->object)->object.this$;
+        else /* todo: add auto-boxing of primitive types */
+        {
+            PyErr_SetObject(PyExc_TypeError, obj);
+            Py_DECREF(obj);
+            return NULL;
+        }
+
+        Py_DECREF(obj);
+
+        try {
+            env->setObjectArrayElement(array, i, jobj);
+            if (fromString)
+                vm_env->DeleteLocalRef(jobj);
+        } catch (JCCEnv::exception e) {
+            PyErr_SetJavaError(e.throwable);
+            return NULL;
+        }
+    }
+
+    return array;
+}
+
+void installType(PyTypeObject *type, PyObject *module, char *name,
+                 int isExtension)
+{
+    if (PyType_Ready(type) == 0)
+    {
+        Py_INCREF(type);
+        if (isExtension)
+        {
+            type->ob_type = &FinalizerClass$$Type;
+            Py_INCREF(&FinalizerClass$$Type);
+        }
+        PyModule_AddObject(module, name, (PyObject *) type);
+    }
+}
+
+PyObject *wrapType(PyTypeObject *type, const jobject& obj)
+{
+    PyObject *cobj = PyObject_GetAttrString((PyObject *) type, "wrapfn_");
+    PyObject *(*wrapfn)(const jobject&);
+    
+    if (cobj == NULL)
+        return NULL;
+
+    wrapfn = (PyObject *(*)(const jobject &)) PyCObject_AsVoidPtr(cobj);
+    Py_DECREF(cobj);
+
+    return wrapfn(obj);
+}
+
+#ifdef _java_generics
+PyObject *typeParameters(PyTypeObject *types[], size_t size)
+{
+    size_t count = size / sizeof(PyTypeObject *);
+    PyObject *tuple = PyTuple_New(count);
+
+    for (size_t i = 0; i < count; i++) {
+        PyObject *type = (PyObject *) types[i];
+        
+        if (type == NULL)
+            type = Py_None;
+
+        PyTuple_SET_ITEM(tuple, i, type);
+        Py_INCREF(type);
+    }
+
+    return tuple;
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/functions.h	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,272 @@
+/*
+ *   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.
+ */
+
+#ifndef _functions_h
+#define _functions_h
+
+#include "java/util/Iterator.h"
+#include "java/util/Enumeration.h"
+#include "java/lang/String.h"
+#include "java/lang/Object.h"
+#include "macros.h"
+
+#if PY_VERSION_HEX < 0x02050000
+typedef int Py_ssize_t;
+typedef inquiry lenfunc;
+typedef intargfunc ssizeargfunc;
+typedef intintargfunc ssizessizeargfunc;
+typedef intobjargproc ssizeobjargproc;
+typedef intintobjargproc ssizessizeobjargproc;
+#endif
+
+typedef jclass (*getclassfn)(void);
+typedef PyTypeObject **(*getparametersfn)(void *);
+
+PyObject *PyErr_SetArgsError(char *name, PyObject *args);
+PyObject *PyErr_SetArgsError(PyObject *self, char *name, PyObject *args);
+PyObject *PyErr_SetArgsError(PyTypeObject *type, char *name, PyObject *args);
+PyObject *PyErr_SetJavaError(jthrowable throwable);
+
+extern PyObject *PyExc_JavaError;
+extern PyObject *PyExc_InvalidArgsError;
+
+
+void throwPythonError(void);
+void throwTypeError(const char *name, PyObject *object);
+
+#if defined(_MSC_VER) || defined(__SUNPRO_CC)
+
+#define parseArgs __parseArgs
+#define parseArg __parseArg
+
+int __parseArgs(PyObject *args, char *types, ...);
+int __parseArg(PyObject *arg, char *types, ...);
+
+int _parseArgs(PyObject **args, unsigned int count, char *types,
+	       va_list list, va_list check);
+
+#else
+
+#define parseArgs(args, types, rest...) \
+    _parseArgs(((PyTupleObject *)(args))->ob_item, \
+               ((PyTupleObject *)(args))->ob_size, types, ##rest)
+
+#define parseArg(arg, types, rest...) \
+    _parseArgs(&(arg), 1, types, ##rest)
+
+int _parseArgs(PyObject **args, unsigned int count, char *types, ...);
+
+#endif
+
+int abstract_init(PyObject *self, PyObject *args, PyObject *kwds);
+PyObject *wrapType(PyTypeObject *type, const jobject& obj);
+
+PyObject *j2p(const java::lang::String& js);
+java::lang::String p2j(PyObject *object);
+
+PyObject *make_descriptor(PyTypeObject *value);
+PyObject *make_descriptor(getclassfn initializeClass);
+PyObject *make_descriptor(getclassfn initializeClass, int generics);
+PyObject *make_descriptor(PyObject *value);
+PyObject *make_descriptor(PyObject *(*wrapfn)(const jobject &));
+PyObject *make_descriptor(jboolean value);
+PyObject *make_descriptor(jbyte value);
+PyObject *make_descriptor(jchar value);
+PyObject *make_descriptor(jdouble value);
+PyObject *make_descriptor(jfloat value);
+PyObject *make_descriptor(jint value);
+PyObject *make_descriptor(jlong value);
+PyObject *make_descriptor(jshort value);
+
+jobjectArray make_array(jclass cls, PyObject *sequence);
+
+PyObject *callSuper(PyTypeObject *type,
+                    const char *name, PyObject *args, int cardinality);
+PyObject *callSuper(PyTypeObject *type, PyObject *self,
+                    const char *name, PyObject *args, int cardinality);
+
+template<class T> PyObject *get_iterator(T *self)
+{
+    java::util::Iterator iterator((jobject) NULL);
+
+    OBJ_CALL(iterator = self->object.iterator());
+    return java::util::t_Iterator::wrap_Object(iterator);
+}
+
+#ifdef _java_generics
+template<class T> PyObject *get_generic_iterator(T *self)
+{
+    java::util::Iterator iterator((jobject) NULL);
+    PyTypeObject *param = self->parameters ? self->parameters[0] : NULL;
+
+    OBJ_CALL(iterator = self->object.iterator());
+    return java::util::t_Iterator::wrap_Object(iterator, param);
+}
+#endif
+
+template<class T, class U> PyObject *get_iterator_next(T *self)
+{
+    jboolean hasNext;
+    OBJ_CALL(hasNext = self->object.hasNext());
+    if (!hasNext)
+    {
+        PyErr_SetNone(PyExc_StopIteration);
+        return NULL;
+    }
+
+    jobject next;
+    OBJ_CALL(next = env->iteratorNext(self->object.this$));
+
+    jclass cls = java::lang::String::initializeClass();
+    if (env->get_vm_env()->IsInstanceOf(next, cls))
+        return env->fromJString((jstring) next, 1);
+
+    return U::wrap_jobject(next);
+}
+
+#ifdef _java_generics
+template<class T, class U> PyObject *get_generic_iterator_next(T *self)
+{
+    jboolean hasNext;
+    OBJ_CALL(hasNext = self->object.hasNext());
+    if (!hasNext)
+    {
+        PyErr_SetNone(PyExc_StopIteration);
+        return NULL;
+    }
+
+    jobject next;
+    OBJ_CALL(next = env->iteratorNext(self->object.this$));
+
+    jclass cls = java::lang::String::initializeClass();
+    if (env->get_vm_env()->IsInstanceOf(next, cls))
+        return env->fromJString((jstring) next, 1);
+
+    PyTypeObject *param = self->parameters ? self->parameters[0] : NULL;
+    if (param != NULL)
+        return wrapType(param, next);
+
+    return U::wrap_jobject(next);
+}
+#endif
+
+template<class T, class U> PyObject *get_enumeration_next(T *self)
+{
+    jboolean hasMoreElements;
+    OBJ_CALL(hasMoreElements = self->object.hasMoreElements());
+    if (!hasMoreElements)
+    {
+        PyErr_SetNone(PyExc_StopIteration);
+        return NULL;
+    }
+
+    jobject next;
+    OBJ_CALL(next = env->enumerationNext(self->object.this$));
+
+    jclass cls = java::lang::String::initializeClass();
+    if (env->get_vm_env()->IsInstanceOf(next, cls))
+        return env->fromJString((jstring) next, 1);
+
+    return U::wrap_jobject(next);
+}
+
+#ifdef _java_generics
+template<class T, class U> PyObject *get_generic_enumeration_next(T *self)
+{
+    jboolean hasMoreElements;
+    OBJ_CALL(hasMoreElements = self->object.hasMoreElements());
+    if (!hasMoreElements)
+    {
+        PyErr_SetNone(PyExc_StopIteration);
+        return NULL;
+    }
+
+    jobject next;
+    OBJ_CALL(next = env->enumerationNext(self->object.this$));
+
+    jclass cls = java::lang::String::initializeClass();
+    if (env->get_vm_env()->IsInstanceOf(next, cls))
+        return env->fromJString((jstring) next, 1);
+
+    PyTypeObject *param = self->parameters ? self->parameters[0] : NULL;
+    if (param != NULL)
+        return wrapType(param, next);
+
+    return U::wrap_jobject(next);
+}
+#endif
+
+template<class T, class U, class V> PyObject *get_next(T *self)
+{
+    V next((jobject) NULL);
+    OBJ_CALL(next = self->object.next());
+    if (!next)
+    {
+        PyErr_SetNone(PyExc_StopIteration);
+        return NULL;
+    }
+        
+    jclass cls = java::lang::String::initializeClass();
+    if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
+        return env->fromJString((jstring) next.this$, 0);
+
+    return U::wrap_Object(next);
+}
+
+#ifdef _java_generics
+template<class T, class U, class V> PyObject *get_generic_next(T *self)
+{
+    V next((jobject) NULL);
+    OBJ_CALL(next = self->object.next());
+    if (!next)
+    {
+        PyErr_SetNone(PyExc_StopIteration);
+        return NULL;
+    }
+        
+    jclass cls = java::lang::String::initializeClass();
+    if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
+        return env->fromJString((jstring) next.this$, 0);
+
+    PyTypeObject *param = self->parameters ? self->parameters[0] : NULL;
+    if (param != NULL)
+        return wrapType(param, next.this$);
+
+    return U::wrap_Object(next);
+}
+#endif
+
+PyObject *get_extension_iterator(PyObject *self);
+PyObject *get_extension_next(PyObject *self);
+PyObject *get_extension_nextElement(PyObject *self);
+
+jobjectArray fromPySequence(jclass cls, PyObject *sequence);
+PyObject *castCheck(PyObject *obj, getclassfn initializeClass,
+                    int reportError);
+void installType(PyTypeObject *type, PyObject *module, char *name,
+                 int isExtension);
+
+#ifdef _java_generics
+PyObject *typeParameters(PyTypeObject *types[], size_t size);
+#endif
+
+extern PyTypeObject FinalizerClass$$Type;
+extern PyTypeObject FinalizerProxy$$Type;
+
+typedef struct {
+    PyObject_HEAD
+    PyObject *object;
+} t_fp;
+
+#endif /* _functions_h */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/jcc.cpp	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,690 @@
+/*
+ *   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.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <jni.h>
+#ifdef linux
+#include <dlfcn.h>
+#endif
+
+#include <Python.h>
+#include "structmember.h"
+
+#include "JObject.h"
+#include "JCCEnv.h"
+#include "macros.h"
+
+_DLL_EXPORT JCCEnv *env;
+
+
+/* JCCEnv */
+
+class t_jccenv {
+public:
+    PyObject_HEAD
+    JCCEnv *env;
+};
+    
+static void t_jccenv_dealloc(t_jccenv *self);
+static PyObject *t_jccenv_attachCurrentThread(PyObject *self, PyObject *args);
+static PyObject *t_jccenv_detachCurrentThread(PyObject *self);
+static PyObject *t_jccenv_isCurrentThreadAttached(PyObject *self);
+static PyObject *t_jccenv_strhash(PyObject *self, PyObject *arg);
+static PyObject *t_jccenv__dumpRefs(PyObject *self,
+                                    PyObject *args, PyObject *kwds);
+static PyObject *t_jccenv__get_jni_version(PyObject *self, void *data);
+static PyObject *t_jccenv__get_java_version(PyObject *self, void *data);
+
+static PyGetSetDef t_jccenv_properties[] = {
+    { "jni_version", (getter) t_jccenv__get_jni_version, NULL, NULL, NULL },
+    { "java_version", (getter) t_jccenv__get_java_version, NULL, NULL, NULL },
+    { NULL, NULL, NULL, NULL, NULL }
+};
+
+static PyMemberDef t_jccenv_members[] = {
+    { NULL, 0, 0, 0, NULL }
+};
+
+static PyMethodDef t_jccenv_methods[] = {
+    { "attachCurrentThread", (PyCFunction) t_jccenv_attachCurrentThread,
+      METH_VARARGS, NULL },
+    { "detachCurrentThread", (PyCFunction) t_jccenv_detachCurrentThread,
+      METH_NOARGS, NULL },
+    { "isCurrentThreadAttached", (PyCFunction) t_jccenv_isCurrentThreadAttached,
+      METH_NOARGS, NULL },
+    { "strhash", (PyCFunction) t_jccenv_strhash,
+      METH_O, NULL },
+    { "_dumpRefs", (PyCFunction) t_jccenv__dumpRefs,
+      METH_VARARGS | METH_KEYWORDS, NULL },
+    { NULL, NULL, 0, NULL }
+};
+
+PyTypeObject JCCEnv$$Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                   /* ob_size */
+    "jcc.JCCEnv",                        /* tp_name */
+    sizeof(t_jccenv),                    /* tp_basicsize */
+    0,                                   /* tp_itemsize */
+    (destructor)t_jccenv_dealloc,        /* tp_dealloc */
+    0,                                   /* tp_print */
+    0,                                   /* tp_getattr */
+    0,                                   /* tp_setattr */
+    0,                                   /* tp_compare */
+    0,                                   /* tp_repr */
+    0,                                   /* tp_as_number */
+    0,                                   /* tp_as_sequence */
+    0,                                   /* tp_as_mapping */
+    0,                                   /* tp_hash  */
+    0,                                   /* tp_call */
+    0,                                   /* tp_str */
+    0,                                   /* tp_getattro */
+    0,                                   /* tp_setattro */
+    0,                                   /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,                  /* tp_flags */
+    "JCCEnv",                            /* tp_doc */
+    0,                                   /* tp_traverse */
+    0,                                   /* tp_clear */
+    0,                                   /* tp_richcompare */
+    0,                                   /* tp_weaklistoffset */
+    0,                                   /* tp_iter */
+    0,                                   /* tp_iternext */
+    t_jccenv_methods,                    /* tp_methods */
+    t_jccenv_members,                    /* tp_members */
+    t_jccenv_properties,                 /* tp_getset */
+    0,                                   /* tp_getset */
+    0,                                   /* tp_base */
+    0,                                   /* tp_dict */
+    0,                                   /* tp_descr_get */
+    0,                                   /* tp_descr_set */
+    0,                                   /* tp_dictoffset */
+    0,                                   /* tp_init */
+    0,                                   /* tp_alloc */
+    0,                                   /* tp_new */
+};
+
+static void t_jccenv_dealloc(t_jccenv *self)
+{
+    self->ob_type->tp_free((PyObject *) self);
+}
+
+static void add_option(char *name, char *value, JavaVMOption *option)
+{
+    char *buf = new char[strlen(name) + strlen(value) + 1];
+
+    sprintf(buf, "%s%s", name, value);
+    option->optionString = buf;
+}
+
+#ifdef _jcc_lib
+static void add_paths(char *name, char *p0, char *p1, JavaVMOption *option)
+{
+#if defined(_MSC_VER) || defined(__WIN32)
+    char pathsep = ';';
+#else
+    char pathsep = ':';
+#endif
+    char *buf = new char[strlen(name) + strlen(p0) + strlen(p1) + 4];
+
+    sprintf(buf, "%s%s%c%s", name, p0, pathsep, p1);
+    option->optionString = buf;
+}
+#endif
+
+
+static PyObject *t_jccenv_attachCurrentThread(PyObject *self, PyObject *args)
+{
+    char *name = NULL;
+    int asDaemon = 0, result;
+    JNIEnv *jenv = NULL;
+
+    if (!PyArg_ParseTuple(args, "|si", &name, &asDaemon))
+        return NULL;
+
+    JavaVMAttachArgs attach = {
+        JNI_VERSION_1_4, name, NULL
+    };
+
+    if (asDaemon)
+        result = env->vm->AttachCurrentThreadAsDaemon((void **) &jenv, &attach);
+    else
+        result = env->vm->AttachCurrentThread((void **) &jenv, &attach);
+
+    env->set_vm_env(jenv);
+        
+    return PyInt_FromLong(result);
+}
+
+static PyObject *t_jccenv_detachCurrentThread(PyObject *self)
+{
+    int result = env->vm->DetachCurrentThread();
+
+    env->set_vm_env(NULL);
+
+    return PyInt_FromLong(result);
+}
+
+static PyObject *t_jccenv_isCurrentThreadAttached(PyObject *self)
+{
+    if (env->get_vm_env() != NULL)
+        Py_RETURN_TRUE;
+
+    Py_RETURN_FALSE;
+}
+
+static PyObject *t_jccenv_strhash(PyObject *self, PyObject *arg)
+{
+    int hash = PyObject_Hash(arg);
+    char buffer[10];
+
+    sprintf(buffer, "%08x", (unsigned int) hash);
+    return PyString_FromStringAndSize(buffer, 8);
+}
+
+static PyObject *t_jccenv__dumpRefs(PyObject *self,
+                                    PyObject *args, PyObject *kwds)
+{
+    static char *kwnames[] = {
+        "classes", "values", NULL
+    };
+    int classes = 0, values = 0;
+    PyObject *result;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|ii", kwnames,
+                                     &classes, &values))
+        return NULL;
+
+    if (classes)
+        result = PyDict_New();
+    else
+        result = PyList_New(env->refs.size());
+
+    int count = 0;
+
+    for (std::multimap<int, countedRef>::iterator iter = env->refs.begin();
+         iter != env->refs.end();
+         iter++) {
+        if (classes)  // return dict of { class name: instance count }
+        {
+            char *name = env->getClassName(iter->second.global);
+            PyObject *key = PyString_FromString(name);
+            PyObject *value = PyDict_GetItem(result, key);
+
+            if (value == NULL)
+                value = PyInt_FromLong(1);
+            else
+                value = PyInt_FromLong(PyInt_AS_LONG(value) + 1);
+
+            PyDict_SetItem(result, key, value);
+            Py_DECREF(key);
+            Py_DECREF(value);
+
+            delete name;
+        }
+        else if (values)  // return list of (value string, ref count)
+        {
+            char *str = env->toString(iter->second.global);
+            PyObject *key = PyString_FromString(str);
+            PyObject *value = PyInt_FromLong(iter->second.count);
+
+#if PY_VERSION_HEX < 0x02040000
+            PyList_SET_ITEM(result, count++, Py_BuildValue("(OO)", key, value));
+#else
+            PyList_SET_ITEM(result, count++, PyTuple_Pack(2, key, value));
+#endif
+            Py_DECREF(key);
+            Py_DECREF(value);
+
+            delete str;
+        }
+        else  // return list of (id hash code, ref count)
+        {
+            PyObject *key = PyInt_FromLong(iter->first);
+            PyObject *value = PyInt_FromLong(iter->second.count);
+
+#if PY_VERSION_HEX < 0x02040000
+            PyList_SET_ITEM(result, count++, Py_BuildValue("(OO)", key, value));
+#else
+            PyList_SET_ITEM(result, count++, PyTuple_Pack(2, key, value));
+#endif
+            Py_DECREF(key);
+            Py_DECREF(value);
+        }
+    }
+
+    return result;
+}
+
+
+static PyObject *t_jccenv__get_jni_version(PyObject *self, void *data)
+{
+    return PyInt_FromLong(env->getJNIVersion());
+}
+
+static PyObject *t_jccenv__get_java_version(PyObject *self, void *data)
+{
+    return env->fromJString(env->getJavaVersion(), 1);
+}
+
+_DLL_EXPORT PyObject *getVMEnv(PyObject *self)
+{
+    if (env->vm != NULL)
+    {
+        t_jccenv *jccenv = (t_jccenv *) JCCEnv$$Type.tp_alloc(&JCCEnv$$Type, 0);
+        jccenv->env = env;
+
+        return (PyObject *) jccenv;
+    }
+
+    Py_RETURN_NONE;
+}
+
+#ifdef _jcc_lib
+static void registerNatives(JNIEnv *vm_env);
+#endif
+
+_DLL_EXPORT PyObject *initJCC(PyObject *module)
+{
+    static int _once_only = 1;
+
+    if (_once_only)
+    {
+        PyEval_InitThreads();
+        INSTALL_TYPE(JCCEnv, module);
+
+        if (env == NULL)
+            env = new JCCEnv(NULL, NULL);
+
+        _once_only = 0;
+        Py_RETURN_TRUE;
+    }
+
+    Py_RETURN_FALSE;
+}
+
+_DLL_EXPORT PyObject *initVM(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    static char *kwnames[] = {
+        "classpath", "initialheap", "maxheap", "maxstack",
+        "vmargs", NULL
+    };
+    char *classpath = NULL;
+    char *initialheap = NULL, *maxheap = NULL, *maxstack = NULL;
+    char *vmargs = NULL;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwds, "|zzzzz", kwnames,
+                                     &classpath,
+                                     &initialheap, &maxheap, &maxstack,
+                                     &vmargs))
+        return NULL;
+
+    if (env->vm)
+    {
+        PyObject *module_cp = NULL;
+
+        if (initialheap || maxheap || maxstack || vmargs)
+        {
+            PyErr_SetString(PyExc_ValueError,
+                            "JVM is already running, options are ineffective");
+            return NULL;
+        }
+
+        if (classpath == NULL && self != NULL)
+        {
+            module_cp = PyObject_GetAttrString(self, "CLASSPATH");
+            if (module_cp != NULL)
+                classpath = PyString_AsString(module_cp);
+        }
+
+        if (classpath && classpath[0])
+            env->setClassPath(classpath);
+
+        Py_XDECREF(module_cp);
+
+        return getVMEnv(self);
+    }
+    else
+    {
+        JavaVMInitArgs vm_args;
+        JavaVMOption vm_options[32];
+        JNIEnv *vm_env;
+        JavaVM *vm;
+        unsigned int nOptions = 0;
+        PyObject *module_cp = NULL;
+
+        vm_args.version = JNI_VERSION_1_4;
+        JNI_GetDefaultJavaVMInitArgs(&vm_args);
+
+        if (classpath == NULL && self != NULL)
+        {
+            module_cp = PyObject_GetAttrString(self, "CLASSPATH");
+            if (module_cp != NULL)
+                classpath = PyString_AsString(module_cp);
+        }
+
+#ifdef _jcc_lib
+        PyObject *jcc = PyImport_ImportModule("jcc");
+        PyObject *cp = PyObject_GetAttrString(jcc, "CLASSPATH");
+
+        if (classpath)
+            add_paths("-Djava.class.path=", PyString_AsString(cp), classpath,
+                      &vm_options[nOptions++]);
+        else
+            add_option("-Djava.class.path=", PyString_AsString(cp),
+                       &vm_options[nOptions++]);
+            
+        Py_DECREF(cp);
+        Py_DECREF(jcc);
+#else
+        if (classpath)
+            add_option("-Djava.class.path=", classpath,
+                       &vm_options[nOptions++]);
+#endif
+
+        Py_XDECREF(module_cp);
+
+        if (initialheap)
+            add_option("-Xms", initialheap, &vm_options[nOptions++]);
+        if (maxheap)
+            add_option("-Xmx", maxheap, &vm_options[nOptions++]);
+        if (maxstack)
+            add_option("-Xss", maxstack, &vm_options[nOptions++]);
+
+        if (vmargs)
+        {
+            char *buf = strdup(vmargs);
+            char *sep = ",";
+            char *option;
+
+            for (option = strtok(buf, sep); option; option = strtok(NULL, sep))
+            {
+                if (nOptions < sizeof(vm_options) / sizeof(JavaVMOption))
+                    add_option("", option, &vm_options[nOptions++]);
+                else
+                {
+                    free(buf);
+                    for (unsigned int i = 0; i < nOptions; i++)
+                        delete vm_options[i].optionString;
+                    PyErr_Format(PyExc_ValueError, "Too many options (> %d)",
+                                 nOptions);
+                    return NULL;
+                }
+            }
+            free(buf);
+        }
+
+        //vm_options[nOptions++].optionString = "-verbose:gc";
+        //vm_options[nOptions++].optionString = "-Xcheck:jni";
+
+        vm_args.nOptions = nOptions;
+        vm_args.ignoreUnrecognized = JNI_FALSE;
+        vm_args.options = vm_options;
+
+        if (JNI_CreateJavaVM(&vm, (void **) &vm_env, &vm_args) < 0)
+        {
+            for (unsigned int i = 0; i < nOptions; i++)
+                delete vm_options[i].optionString;
+
+            PyErr_Format(PyExc_ValueError,
+                         "An error occurred while creating Java VM");
+            return NULL;
+        }
+
+        env->set_vm(vm, vm_env);
+
+        for (unsigned int i = 0; i < nOptions; i++)
+            delete vm_options[i].optionString;
+
+        t_jccenv *jccenv = (t_jccenv *) JCCEnv$$Type.tp_alloc(&JCCEnv$$Type, 0);
+        jccenv->env = env;
+
+#ifdef _jcc_lib
+        registerNatives(vm_env);
+#endif
+
+        return (PyObject *) jccenv;
+    }
+}
+
+extern "C" {
+
+#ifdef _jcc_lib
+    static void raise_error(JNIEnv *vm_env, const char *message)
+    {
+        jclass cls = vm_env->FindClass("org/apache/jcc/PythonException");
+        vm_env->ThrowNew(cls, message);
+    }
+
+    JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
+    {
+        JNIEnv *vm_env;
+
+        if (!vm->GetEnv((void **) &vm_env, JNI_VERSION_1_4))
+            env = new JCCEnv(vm, vm_env);
+
+        registerNatives(vm_env);
+
+        return JNI_VERSION_1_4;
+    }
+
+    JNIEXPORT void JNICALL Java_org_apache_jcc_PythonVM_init(JNIEnv *vm_env, jobject self, jstring programName, jobjectArray args)
+    {
+        const char *str = vm_env->GetStringUTFChars(programName, JNI_FALSE);
+#ifdef linux
+        char buf[32];
+
+        // load python runtime for other .so modules to link (such as _time.so)
+        sprintf(buf, "libpython%d.%d.so", PY_MAJOR_VERSION, PY_MINOR_VERSION);
+        dlopen(buf, RTLD_NOW | RTLD_GLOBAL);
+#endif
+
+	Py_SetProgramName((char *) str);
+
+        PyEval_InitThreads();
+	Py_Initialize();
+
+        if (args)
+        {
+            int argc = vm_env->GetArrayLength(args);
+            char **argv = (char **) calloc(argc + 1, sizeof(char *));
+
+            argv[0] = (char *) str;
+            for (int i = 0; i < argc; i++) {
+                jstring arg = (jstring) vm_env->GetObjectArrayElement(args, i);
+                argv[i + 1] = (char *) vm_env->GetStringUTFChars(arg, JNI_FALSE);
+            }
+
+            PySys_SetArgv(argc + 1, argv);
+
+            for (int i = 0; i < argc; i++) {
+                jstring arg = (jstring) vm_env->GetObjectArrayElement(args, i);
+                vm_env->ReleaseStringUTFChars(arg, argv[i + 1]);
+            }
+            free(argv);
+        }
+        else
+            PySys_SetArgv(1, (char **) &str);
+
+        vm_env->ReleaseStringUTFChars(programName, str);
+        PyEval_ReleaseLock();
+    }
+
+    JNIEXPORT jobject JNICALL Java_org_apache_jcc_PythonVM_instantiate(JNIEnv *vm_env, jobject self, jstring moduleName, jstring className)
+    {
+        PythonGIL gil(vm_env);
+
+        const char *modStr = vm_env->GetStringUTFChars(moduleName, JNI_FALSE);
+        PyObject *module =
+            PyImport_ImportModule((char *) modStr);  // python 2.4 cast
+
+        vm_env->ReleaseStringUTFChars(moduleName, modStr);
+
+        if (!module)
+        {
+            raise_error(vm_env, "import failed");
+            return NULL;
+        }
+
+        const char *clsStr = vm_env->GetStringUTFChars(className, JNI_FALSE);
+        PyObject *cls =
+            PyObject_GetAttrString(module, (char *) clsStr); // python 2.4 cast
+        PyObject *obj;
+        jobject jobj;
+
+        vm_env->ReleaseStringUTFChars(className, clsStr);
+        Py_DECREF(module);
+
+        if (!cls)
+        {
+            raise_error(vm_env, "class not found");
+            return NULL;
+        }
+
+        obj = PyObject_CallFunctionObjArgs(cls, NULL);
+        Py_DECREF(cls);
+
+        if (!obj)
+        {
+            raise_error(vm_env, "instantiation failed");
+            return NULL;
+        }
+
+        PyObject *cObj = PyObject_GetAttrString(obj, "_jobject");
+
+        if (!cObj)
+        {
+            raise_error(vm_env, "instance does not proxy a java object");
+            Py_DECREF(obj);
+
+            return NULL;
+        }
+
+        jobj = (jobject) PyCObject_AsVoidPtr(cObj);
+        Py_DECREF(cObj);
+
+        jobj = vm_env->NewLocalRef(jobj);
+        Py_DECREF(obj);
+
+        return jobj;
+    }
+#endif
+
+    void JNICALL PythonException_getErrorInfo(JNIEnv *vm_env, jobject self)
+    {
+        PythonGIL gil(vm_env);
+
+        if (!PyErr_Occurred())
+            return;
+
+        PyObject *type, *value, *tb, *errorName;
+        jclass jcls = vm_env->GetObjectClass(self);
+
+        PyErr_Fetch(&type, &value, &tb);
+
+        errorName = PyObject_GetAttrString(type, "__name__");
+        if (errorName != NULL)
+        {
+            jfieldID fid =
+                vm_env->GetFieldID(jcls, "errorName", "Ljava/lang/String;");
+            jstring str = env->fromPyString(errorName);
+
+            vm_env->SetObjectField(self, fid, str);
+            vm_env->DeleteLocalRef(str);
+            Py_DECREF(errorName);
+        }
+
+        if (value != NULL)
+        {
+            PyObject *message = PyObject_Str(value);
+
+            if (message != NULL)
+            {
+                jfieldID fid =
+                    vm_env->GetFieldID(jcls, "message", "Ljava/lang/String;");
+                jstring str = env->fromPyString(message);
+
+                vm_env->SetObjectField(self, fid, str);
+                vm_env->DeleteLocalRef(str);
+                Py_DECREF(message);
+            }
+        }
+
+        PyObject *module = NULL, *cls = NULL, *stringIO = NULL, *result = NULL;
+        PyObject *_stderr = PySys_GetObject("stderr");
+        if (!_stderr)
+            goto err;
+
+        module = PyImport_ImportModule("cStringIO");
+        if (!module)
+            goto err;
+
+        cls = PyObject_GetAttrString(module, "StringIO");
+        Py_DECREF(module);
+        if (!cls)
+            goto err;
+
+        stringIO = PyObject_CallObject(cls, NULL);
+        Py_DECREF(cls);
+        if (!stringIO)
+            goto err;
+
+        Py_INCREF(_stderr);
+        PySys_SetObject("stderr", stringIO);
+
+        PyErr_Restore(type, value, tb);
+        PyErr_Print();
+
+        result = PyObject_CallMethod(stringIO, "getvalue", NULL);
+        Py_DECREF(stringIO);
+
+        if (result != NULL)
+        {
+            jfieldID fid =
+                vm_env->GetFieldID(jcls, "traceback", "Ljava/lang/String;");
+            jstring str = env->fromPyString(result);
+
+            vm_env->SetObjectField(self, fid, str);
+            vm_env->DeleteLocalRef(str);
+            Py_DECREF(result);
+        }
+
+        PySys_SetObject("stderr", _stderr);
+        Py_DECREF(_stderr);
+
+        return;
+
+      err:
+        PyErr_Restore(type, value, tb);
+    }
+
+    void JNICALL PythonException_clear(JNIEnv *vm_env, jobject self)
+    {
+        PythonGIL gil(vm_env);
+        PyErr_Clear();
+    }
+};
+
+#ifdef _jcc_lib
+static void registerNatives(JNIEnv *vm_env)
+{
+    jclass cls = vm_env->FindClass("org/apache/jcc/PythonException");
+    JNINativeMethod methods[] = {
+        { "getErrorInfo", "()V", (void *) PythonException_getErrorInfo },
+        { "clear", "()V", (void *) PythonException_clear },
+    };
+
+    vm_env->RegisterNatives(cls, methods, 2);
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/jccfuncs.h	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,46 @@
+/*
+ *   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.
+ */
+
+#ifndef _jccfuncs_H
+#define _jccfuncs_H
+
+#ifdef PYTHON
+
+PyObject *__initialize__(PyObject *module, PyObject *args, PyObject *kwds);
+PyObject *initVM(PyObject *self, PyObject *args, PyObject *kwds);
+PyObject *getVMEnv(PyObject *self);
+PyObject *_set_exception_types(PyObject *self, PyObject *args);
+PyObject *_set_function_self(PyObject *self, PyObject *args);
+PyObject *findClass(PyObject *self, PyObject *args);
+PyObject *JArray_Type(PyObject *self, PyObject *arg);
+
+PyMethodDef jcc_funcs[] = {
+    { "initVM", (PyCFunction) __initialize__,
+      METH_VARARGS | METH_KEYWORDS, NULL },
+    { "getVMEnv", (PyCFunction) getVMEnv,
+      METH_NOARGS, NULL },
+    { "findClass", (PyCFunction) findClass,
+      METH_VARARGS, NULL },
+    { "_set_exception_types", (PyCFunction) _set_exception_types,
+      METH_VARARGS, NULL },
+    { "_set_function_self", (PyCFunction) _set_function_self,
+      METH_VARARGS, NULL },
+    { "JArray", (PyCFunction) JArray_Type,
+      METH_O, NULL },
+    { NULL, NULL, 0, NULL }
+};
+
+#endif
+
+#endif /* _jccfuncs_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/macros.h	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,170 @@
+/*
+ *   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.
+ */
+
+#ifndef _macros_H
+#define _macros_H
+
+#define OBJ_CALL(action)                                                \
+    {                                                                   \
+        try {                                                           \
+            PythonThreadState state(1);                                 \
+            action;                                                     \
+        } catch (JCCEnv::pythonError) {                                 \
+            return NULL;                                                \
+        } catch (JCCEnv::exception e) {                                 \
+            return PyErr_SetJavaError(e.throwable);                     \
+        }                                                               \
+    }
+
+#define INT_CALL(action)                                                \
+    {                                                                   \
+        try {                                                           \
+            PythonThreadState state(1);                                 \
+            action;                                                     \
+        } catch (JCCEnv::pythonError) {                                 \
+            return -1;                                                  \
+        } catch (JCCEnv::exception e) {                                 \
+            PyErr_SetJavaError(e.throwable);                            \
+            return -1;                                                  \
+        }                                                               \
+    }
+
+
+#define DECLARE_METHOD(type, name, flags)               \
+    { #name, (PyCFunction) type##_##name, flags, "" }
+
+#define DECLARE_GET_FIELD(type, name)           \
+    { #name, (getter) type##_get__##name, NULL, "", NULL }
+
+#define DECLARE_SET_FIELD(type, name)           \
+    { #name, NULL, (setter) type##_set__##name, "", NULL }
+
+#define DECLARE_GETSET_FIELD(type, name)        \
+    { #name, (getter) type##_get__##name, (setter) type##_set__##name, "", NULL }
+
+
+#define DECLARE_TYPE(name, t_name, base, javaClass,                         \
+                     init, iter, iternext, getset, mapping, sequence)       \
+PyTypeObject name##$$Type = {                                               \
+    PyObject_HEAD_INIT(NULL)                                                \
+    /* ob_size            */   0,                                           \
+    /* tp_name            */   #name,                                       \
+    /* tp_basicsize       */   sizeof(t_name),                              \
+    /* tp_itemsize        */   0,                                           \
+    /* tp_dealloc         */   0,                                           \
+    /* tp_print           */   0,                                           \
+    /* tp_getattr         */   0,                                           \
+    /* tp_setattr         */   0,                                           \
+    /* tp_compare         */   0,                                           \
+    /* tp_repr            */   0,                                           \
+    /* tp_as_number       */   0,                                           \
+    /* tp_as_sequence     */   sequence,                                    \
+    /* tp_as_mapping      */   mapping,                                     \
+    /* tp_hash            */   0,                                           \
+    /* tp_call            */   0,                                           \
+    /* tp_str             */   0,                                           \
+    /* tp_getattro        */   0,                                           \
+    /* tp_setattro        */   0,                                           \
+    /* tp_as_buffer       */   0,                                           \
+    /* tp_flags           */   Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,    \
+    /* tp_doc             */   #t_name" objects",                           \
+    /* tp_traverse        */   0,                                           \
+    /* tp_clear           */   0,                                           \
+    /* tp_richcompare     */   0,                                           \
+    /* tp_weaklistoffset  */   0,                                           \
+    /* tp_iter            */   (getiterfunc) iter,                          \
+    /* tp_iternext        */   (iternextfunc) iternext,                     \
+    /* tp_methods         */   t_name##__methods_,                          \
+    /* tp_members         */   0,                                           \
+    /* tp_getset          */   getset,                                      \
+    /* tp_base            */   &base##$$Type,                               \
+    /* tp_dict            */   0,                                           \
+    /* tp_descr_get       */   0,                                           \
+    /* tp_descr_set       */   0,                                           \
+    /* tp_dictoffset      */   0,                                           \
+    /* tp_init            */   (initproc)init,                              \
+    /* tp_alloc           */   0,                                           \
+    /* tp_new             */   0,                                           \
+};                                                                          \
+PyObject *t_name::wrap_Object(const javaClass& object)                  \
+{                                                                       \
+    if (!!object)                                                       \
+    {                                                                   \
+        t_name *self =                                                  \
+            (t_name *) name##$$Type.tp_alloc(&name##$$Type, 0);         \
+        if (self)                                                       \
+            self->object = object;                                      \
+        return (PyObject *) self;                                       \
+    }                                                                   \
+    Py_RETURN_NONE;                                                     \
+}                                                                       \
+PyObject *t_name::wrap_jobject(const jobject& object)                   \
+{                                                                       \
+    if (!!object)                                                       \
+    {                                                                   \
+        t_name *self =                                                  \
+            (t_name *) name##$$Type.tp_alloc(&name##$$Type, 0);         \
+        if (self)                                                       \
+            self->object = javaClass(object);                           \
+        return (PyObject *) self;                                       \
+    }                                                                   \
+    Py_RETURN_NONE;                                                     \
+}                                                                       \
+
+
+#define INSTALL_TYPE(name, module)                                     \
+    if (PyType_Ready(&name##$$Type) == 0)                              \
+    {                                                                  \
+        Py_INCREF(&name##$$Type);                                      \
+        PyModule_AddObject(module, #name, (PyObject *) &name##$$Type); \
+    }
+
+
+#define Py_RETURN_BOOL(b)                       \
+    {                                           \
+        if (b)                                  \
+            Py_RETURN_TRUE;                     \
+        else                                    \
+            Py_RETURN_FALSE;                    \
+    }
+
+
+#if PY_VERSION_HEX < 0x02040000
+
+#define Py_RETURN_NONE return Py_INCREF(Py_None), Py_None
+#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
+#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
+
+#define Py_CLEAR(op)                            \
+    do {                                        \
+        if (op) {                               \
+            PyObject *tmp = (PyObject *)(op);   \
+            (op) = NULL;                        \
+            Py_DECREF(tmp);                     \
+        }                                       \
+    } while (0)
+
+#define Py_VISIT(op)                                    \
+    do {                                                \
+        if (op) {                                       \
+            int vret = visit((PyObject *)(op), arg);    \
+            if (vret)                                   \
+                return vret;                            \
+        }                                               \
+    } while (0)
+          
+#endif /* Python 2.3.5 */
+
+
+#endif /* _macros_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/jcc/sources/types.cpp	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,558 @@
+/*
+ *   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.
+ */
+
+#include <jni.h>
+#include <Python.h>
+#include "structmember.h"
+
+#include "java/lang/Object.h"
+#include "java/lang/Class.h"
+#include "functions.h"
+
+using namespace java::lang;
+
+
+/* FinalizerProxy */
+
+static PyObject *t_fc_call(PyObject *self, PyObject *args, PyObject *kwds);
+
+static void t_fp_dealloc(t_fp *self);
+static PyObject *t_fp_getattro(t_fp *self, PyObject *name);
+static int t_fp_setattro(t_fp *self, PyObject *name, PyObject *value);
+static int t_fp_traverse(t_fp *self, visitproc visit, void *arg);
+static int t_fp_clear(t_fp *self);
+static PyObject *t_fp_repr(t_fp *self);
+static PyObject *t_fp_iter(t_fp *self);
+
+static Py_ssize_t t_fp_map_length(t_fp *self);
+static PyObject *t_fp_map_get(t_fp *self, PyObject *key);
+static int t_fp_map_set(t_fp *self, PyObject *key, PyObject *value);
+
+static Py_ssize_t t_fp_seq_length(t_fp *self);
+static PyObject *t_fp_seq_get(t_fp *self, Py_ssize_t n);
+static int t_fp_seq_contains(t_fp *self, PyObject *value);
+static PyObject *t_fp_seq_concat(t_fp *self, PyObject *arg);
+static PyObject *t_fp_seq_repeat(t_fp *self, Py_ssize_t n);
+static PyObject *t_fp_seq_getslice(t_fp *self, Py_ssize_t low, Py_ssize_t high);
+static int t_fp_seq_set(t_fp *self, Py_ssize_t i, PyObject *value);
+static int t_fp_seq_setslice(t_fp *self, Py_ssize_t low,
+                             Py_ssize_t high, PyObject *arg);
+static PyObject *t_fp_seq_inplace_concat(t_fp *self, PyObject *arg);
+static PyObject *t_fp_seq_inplace_repeat(t_fp *self, Py_ssize_t n);
+
+
+PyTypeObject FinalizerClass$$Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                   /* ob_size */
+    "jcc.FinalizerClass",                /* tp_name */
+    PyType_Type.tp_basicsize,            /* tp_basicsize */
+    0,                                   /* tp_itemsize */
+    0,                                   /* tp_dealloc */
+    0,                                   /* tp_print */
+    0,                                   /* tp_getattr */
+    0,                                   /* tp_setattr */
+    0,                                   /* tp_compare */
+    0,                                   /* tp_repr */
+    0,                                   /* tp_as_number */
+    0,                                   /* tp_as_sequence */
+    0,                                   /* tp_as_mapping */
+    0,                                   /* tp_hash  */
+    (ternaryfunc) t_fc_call,             /* tp_call */
+    0,                                   /* tp_str */
+    0,                                   /* tp_getattro */
+    0,                                   /* tp_setattro */
+    0,                                   /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,                  /* tp_flags */
+    "FinalizerClass",                    /* tp_doc */
+    0,                                   /* tp_traverse */
+    0,                                   /* tp_clear */
+    0,                                   /* tp_richcompare */
+    0,                                   /* tp_weaklistoffset */
+    0,                                   /* tp_iter */
+    0,                                   /* tp_iternext */
+    0,                                   /* tp_methods */
+    0,                                   /* tp_members */
+    0,                                   /* tp_getset */
+    &PyType_Type,                        /* tp_base */
+    0,                                   /* tp_dict */
+    0,                                   /* tp_descr_get */
+    0,                                   /* tp_descr_set */
+    0,                                   /* tp_dictoffset */
+    0,                                   /* tp_init */
+    0,                                   /* tp_alloc */
+    0,                                   /* tp_new */
+};
+
+static PyMappingMethods t_fp_as_mapping = {
+    (lenfunc)t_fp_map_length,            /* mp_length          */
+    (binaryfunc)t_fp_map_get,            /* mp_subscript       */
+    (objobjargproc)t_fp_map_set,         /* mp_ass_subscript   */
+};
+
+static PySequenceMethods t_fp_as_sequence = {
+    (lenfunc)t_fp_seq_length,                 /* sq_length */
+    (binaryfunc)t_fp_seq_concat,              /* sq_concat */
+    (ssizeargfunc)t_fp_seq_repeat,            /* sq_repeat */
+    (ssizeargfunc)t_fp_seq_get,               /* sq_item */
+    (ssizessizeargfunc)t_fp_seq_getslice,     /* sq_slice */
+    (ssizeobjargproc)t_fp_seq_set,            /* sq_ass_item */
+    (ssizessizeobjargproc)t_fp_seq_setslice,  /* sq_ass_slice */
+    (objobjproc)t_fp_seq_contains,            /* sq_contains */
+    (binaryfunc)t_fp_seq_inplace_concat,      /* sq_inplace_concat */
+    (ssizeargfunc)t_fp_seq_inplace_repeat,    /* sq_inplace_repeat */
+};
+
+PyTypeObject FinalizerProxy$$Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                   /* ob_size */
+    "jcc.FinalizerProxy",                /* tp_name */
+    sizeof(t_fp),                        /* tp_basicsize */
+    0,                                   /* tp_itemsize */
+    (destructor)t_fp_dealloc,            /* tp_dealloc */
+    0,                                   /* tp_print */
+    0,                                   /* tp_getattr */
+    0,                                   /* tp_setattr */
+    0,                                   /* tp_compare */
+    (reprfunc)t_fp_repr,                 /* tp_repr */
+    0,                                   /* tp_as_number */
+    &t_fp_as_sequence,                   /* tp_as_sequence */
+    &t_fp_as_mapping,                    /* tp_as_mapping */
+    0,                                   /* tp_hash  */
+    0,                                   /* tp_call */
+    0,                                   /* tp_str */
+    (getattrofunc)t_fp_getattro,         /* tp_getattro */
+    (setattrofunc)t_fp_setattro,         /* tp_setattro */
+    0,                                   /* tp_as_buffer */
+    (Py_TPFLAGS_DEFAULT |
+     Py_TPFLAGS_HAVE_GC),                /* tp_flags */
+    "FinalizerProxy",                    /* tp_doc */
+    (traverseproc)t_fp_traverse,         /* tp_traverse */
+    (inquiry)t_fp_clear,                 /* tp_clear */
+    0,                                   /* tp_richcompare */
+    0,                                   /* tp_weaklistoffset */
+    (getiterfunc)t_fp_iter,              /* tp_iter */
+    0,                                   /* tp_iternext */
+    0,                                   /* tp_methods */
+    0,                                   /* tp_members */
+    0,                                   /* tp_getset */
+    0,                                   /* tp_base */
+    0,                                   /* tp_dict */
+    0,                                   /* tp_descr_get */
+    0,                                   /* tp_descr_set */
+    0,                                   /* tp_dictoffset */
+    0,                                   /* tp_init */
+    0,                                   /* tp_alloc */
+    0,                                   /* tp_new */
+};
+
+static PyObject *t_fc_call(PyObject *self, PyObject *args, PyObject *kwds)
+{
+    PyObject *obj = PyType_Type.tp_call(self, args, kwds);
+
+    if (obj)
+    {
+        t_fp *fp = (t_fp *) FinalizerProxy$$Type.tp_alloc(&FinalizerProxy$$Type, 0);
+
+        fp->object = obj;
+        obj = (PyObject *) fp;
+    }
+
+    return obj;
+}
+
+static void t_fp_dealloc(t_fp *self)
+{
+    if (self->object)
+        ((t_JObject *) self->object)->object.weaken$();
+
+    t_fp_clear(self);
+    self->ob_type->tp_free((PyObject *) self);
+}
+
+static int t_fp_traverse(t_fp *self, visitproc visit, void *arg)
+{
+    Py_VISIT(self->object);
+    return 0;
+}
+
+static int t_fp_clear(t_fp *self)
+{
+    Py_CLEAR(self->object);
+    return 0;
+}
+
+static PyObject *t_fp_repr(t_fp *self)
+{
+    return PyObject_Repr(self->object);
+}
+
+static PyObject *t_fp_iter(t_fp *self)
+{
+    return PyObject_GetIter(self->object);
+}
+
+static PyObject *t_fp_getattro(t_fp *self, PyObject *name)
+{
+    return PyObject_GetAttr(self->object, name);
+}
+
+static int t_fp_setattro(t_fp *self, PyObject *name, PyObject *value)
+{
+    return PyObject_SetAttr(self->object, name, value);
+}
+
+static Py_ssize_t t_fp_map_length(t_fp *self)
+{
+    return PyMapping_Size(self->object);
+}
+
+static PyObject *t_fp_map_get(t_fp *self, PyObject *key)
+{
+    return PyObject_GetItem(self->object, key);
+}
+
+static int t_fp_map_set(t_fp *self, PyObject *key, PyObject *value)
+{
+    if (value == NULL)
+        return PyObject_DelItem(self->object, key);
+
+    return PyObject_SetItem(self->object, key, value);
+}
+
+static Py_ssize_t t_fp_seq_length(t_fp *self)
+{
+    return PySequence_Length(self->object);
+}
+
+static PyObject *t_fp_seq_get(t_fp *self, Py_ssize_t n)
+{
+    return PySequence_GetItem(self->object, n);
+}
+
+static int t_fp_seq_contains(t_fp *self, PyObject *value)
+{
+    return PySequence_Contains(self->object, value);
+}
+
+static PyObject *t_fp_seq_concat(t_fp *self, PyObject *arg)
+{
+    return PySequence_Concat(self->object, arg);
+}
+
+static PyObject *t_fp_seq_repeat(t_fp *self, Py_ssize_t n)
+{
+    return PySequence_Repeat(self->object, n);
+}
+
+static PyObject *t_fp_seq_getslice(t_fp *self, Py_ssize_t low, Py_ssize_t high)
+{
+    return PySequence_GetSlice(self->object, low, high);
+}
+
+static int t_fp_seq_set(t_fp *self, Py_ssize_t i, PyObject *value)
+{
+    return PySequence_SetItem(self->object, i, value);
+}
+
+static int t_fp_seq_setslice(t_fp *self, Py_ssize_t low,
+                             Py_ssize_t high, PyObject *arg)
+{
+    return PySequence_SetSlice(self->object, low, high, arg);
+}
+
+static PyObject *t_fp_seq_inplace_concat(t_fp *self, PyObject *arg)
+{
+    return PySequence_InPlaceConcat(self->object, arg);
+}
+
+static PyObject *t_fp_seq_inplace_repeat(t_fp *self, Py_ssize_t n)
+{
+    return PySequence_InPlaceRepeat(self->object, n);
+}
+
+
+/* const variable descriptor */
+
+class t_descriptor {
+public:
+    PyObject_HEAD
+    int flags;
+    union {
+        PyObject *value;
+        getclassfn initializeClass;
+    } access;
+};
+    
+#define DESCRIPTOR_VALUE   0x0001
+#define DESCRIPTOR_CLASS   0x0002
+#define DESCRIPTOR_GETFN   0x0004
+#define DESCRIPTOR_GENERIC 0x0008
+
+static void t_descriptor_dealloc(t_descriptor *self);
+static PyObject *t_descriptor___get__(t_descriptor *self,
+                                      PyObject *obj, PyObject *type);
+
+static PyMethodDef t_descriptor_methods[] = {
+    { NULL, NULL, 0, NULL }
+};
+
+
+PyTypeObject ConstVariableDescriptor$$Type = {
+    PyObject_HEAD_INIT(NULL)
+    0,                                   /* ob_size */
+    "jcc.ConstVariableDescriptor",       /* tp_name */
+    sizeof(t_descriptor),                /* tp_basicsize */
+    0,                                   /* tp_itemsize */
+    (destructor)t_descriptor_dealloc,    /* tp_dealloc */
+    0,                                   /* tp_print */
+    0,                                   /* tp_getattr */
+    0,                                   /* tp_setattr */
+    0,                                   /* tp_compare */
+    0,                                   /* tp_repr */
+    0,                                   /* tp_as_number */
+    0,                                   /* tp_as_sequence */
+    0,                                   /* tp_as_mapping */
+    0,                                   /* tp_hash  */
+    0,                                   /* tp_call */
+    0,                                   /* tp_str */
+    0,                                   /* tp_getattro */
+    0,                                   /* tp_setattro */
+    0,                                   /* tp_as_buffer */
+    Py_TPFLAGS_DEFAULT,                  /* tp_flags */
+    "const variable descriptor",         /* tp_doc */
+    0,                                   /* tp_traverse */
+    0,                                   /* tp_clear */
+    0,                                   /* tp_richcompare */
+    0,                                   /* tp_weaklistoffset */
+    0,                                   /* tp_iter */
+    0,                                   /* tp_iternext */
+    t_descriptor_methods,                /* tp_methods */
+    0,                                   /* tp_members */
+    0,                                   /* tp_getset */
+    0,                                   /* tp_base */
+    0,                                   /* tp_dict */
+    (descrgetfunc)t_descriptor___get__,  /* tp_descr_get */
+    0,                                   /* tp_descr_set */
+    0,                                   /* tp_dictoffset */
+    0,                                   /* tp_init */
+    0,                                   /* tp_alloc */
+    0,                                   /* tp_new */
+};
+
+static void t_descriptor_dealloc(t_descriptor *self)
+{
+    if (self->flags & DESCRIPTOR_VALUE)
+    {
+        Py_DECREF(self->access.value);
+    }
+    self->ob_type->tp_free((PyObject *) self);
+}
+
+PyObject *make_descriptor(PyTypeObject *value)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        Py_INCREF(value);
+        self->access.value = (PyObject *) value;
+        self->flags = DESCRIPTOR_VALUE;
+    }
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(getclassfn initializeClass)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        self->access.initializeClass = initializeClass;
+        self->flags = DESCRIPTOR_CLASS;
+    }
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(getclassfn initializeClass, int generics)
+{
+    t_descriptor *self = (t_descriptor *) make_descriptor(initializeClass);
+
+    if (self && generics)
+        self->flags |= DESCRIPTOR_GENERIC;
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(PyObject *value)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        self->access.value = value;
+        self->flags = DESCRIPTOR_VALUE;
+    }
+    else
+        Py_DECREF(value);
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(PyObject *(*wrapfn)(const jobject &))
+{
+    return make_descriptor(PyCObject_FromVoidPtr((void *) wrapfn, NULL));
+}
+
+PyObject *make_descriptor(jboolean b)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        PyObject *value = b ? Py_True : Py_False;
+        self->access.value = (PyObject *) value; Py_INCREF(value);
+        self->flags = DESCRIPTOR_VALUE;
+    }
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(jbyte value)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        self->access.value = PyInt_FromLong(value);
+        self->flags = DESCRIPTOR_VALUE;
+    }
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(jchar value)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        Py_UNICODE pchar = (Py_UNICODE) value;
+
+        self->access.value = PyUnicode_FromUnicode(&pchar, 1);
+        self->flags = DESCRIPTOR_VALUE;
+    }
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(jdouble value)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        self->access.value = PyFloat_FromDouble(value);
+        self->flags = DESCRIPTOR_VALUE;
+    }
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(jfloat value)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        self->access.value = PyFloat_FromDouble((double) value);
+        self->flags = DESCRIPTOR_VALUE;
+    }
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(jint value)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        self->access.value = PyInt_FromLong(value);
+        self->flags = DESCRIPTOR_VALUE;
+    }
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(jlong value)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        self->access.value = PyLong_FromLongLong((long long) value);
+        self->flags = DESCRIPTOR_VALUE;
+    }
+
+    return (PyObject *) self;
+}
+
+PyObject *make_descriptor(jshort value)
+{
+    t_descriptor *self = (t_descriptor *)
+        ConstVariableDescriptor$$Type.tp_alloc(&ConstVariableDescriptor$$Type, 0);
+
+    if (self)
+    {
+        self->access.value = PyInt_FromLong((short) value);
+        self->flags = DESCRIPTOR_VALUE;
+    }
+
+    return (PyObject *) self;
+}
+
+static PyObject *t_descriptor___get__(t_descriptor *self,
+                                      PyObject *obj, PyObject *type)
+{
+    if (self->flags & DESCRIPTOR_VALUE)
+    {
+        Py_INCREF(self->access.value);
+        return self->access.value;
+    }
+
+    if (self->flags & DESCRIPTOR_CLASS)
+    {
+#ifdef _java_generics
+        if (self->flags & DESCRIPTOR_GENERIC)
+            return t_Class::wrap_Object(Class((*self->access.initializeClass)()), (PyTypeObject *) type);
+        else
+#endif
+            return t_Class::wrap_Object(Class((*self->access.initializeClass)()));
+    }
+
+    Py_RETURN_NONE;
+}
+
Binary file web/lib/arch/osx/libjcc.dylib has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/lucene/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,30 @@
+
+import os, sys
+
+if sys.platform == 'win32':
+    import jcc, _lucene
+else:
+    import _lucene
+
+__dir__ = os.path.abspath(os.path.dirname(__file__))
+
+class JavaError(Exception):
+    def getJavaException(self):
+        return self.args[0]
+    def __str__(self):
+        writer = _lucene.StringWriter()
+        self.getJavaException().printStackTrace(_lucene.PrintWriter(writer))
+        return "\n".join((super(JavaError, self).__str__(), "    Java stacktrace:", str(writer)))
+
+class InvalidArgsError(Exception):
+    pass
+
+_lucene._set_exception_types(JavaError, InvalidArgsError)
+
+VERSION = "3.0.1"
+CLASSPATH = [os.path.join(__dir__, "lucene-core-3.0.1.jar"), os.path.join(__dir__, "lucene-snowball-3.0.1.jar"), os.path.join(__dir__, "lucene-analyzers-3.0.1.jar"), os.path.join(__dir__, "lucene-regex-3.0.1.jar"), os.path.join(__dir__, "lucene-memory-3.0.1.jar"), os.path.join(__dir__, "lucene-highlighter-3.0.1.jar"), os.path.join(__dir__, "lucene-queries-3.0.1.jar"), os.path.join(__dir__, "extensions.jar")]
+CLASSPATH = os.pathsep.join(CLASSPATH)
+_lucene.CLASSPATH = CLASSPATH
+_lucene._set_function_self(_lucene.initVM, _lucene)
+
+from _lucene import *
Binary file web/lib/arch/osx/lucene/_lucene.so has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/arch/osx/lucene/collections.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,117 @@
+#   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 lucene import PythonSet, PythonIterator, JavaError
+
+
+class JavaSet(PythonSet):
+    """
+    This class implements java.util.Set around a Python set instance it wraps.
+    """
+
+    def __init__(self, _set):
+        super(JavaSet, self).__init__()
+        self._set = _set
+
+    def __contains__(self, obj):
+        return obj in self._set
+
+    def __len__(self):
+        return len(self._set)
+
+    def __iter__(self):
+        return iter(self._set)
+
+    def add(self, obj):
+        if obj not in self._set:
+            self._set.add(obj)
+            return True
+        return False
+
+    def addAll(self, collection):
+        size = len(self._set)
+        self._set.update(collection)
+        return len(self._set) > size
+
+    def clear(self):
+        self._set.clear()
+
+    def contains(self, obj):
+        return obj in self._set
+
+    def containsAll(self, collection):
+        for obj in collection:
+            if obj not in self._set:
+                return False
+        return True
+
+    def equals(self, collection):
+        if type(self) is type(collection):
+            return self._set == collection._set
+        return False
+
+    def isEmpty(self):
+        return len(self._set) == 0
+
+    def iterator(self):
+        class _iterator(PythonIterator):
+            def __init__(_self):
+                super(_iterator, _self).__init__()
+                _self._iterator = iter(self._set)
+            def hasNext(_self):
+                if hasattr(_self, '_next'):
+                    return True
+                try:
+                    _self._next = _self._iterator.next()
+                    return True
+                except StopIteration:
+                    return False
+            def next(_self):
+                if hasattr(_self, '_next'):
+                    next = _self._next
+                    del _self._next
+                else:
+                    next = _self._iterator.next()
+                return next
+        return _iterator()
+            
+    def remove(self, obj):
+        try:
+            self._set.remove(obj)
+            return True
+        except KeyError:
+            return False
+
+    def removeAll(self, collection):
+        result = False
+        for obj in collection:
+            try:
+                self._set.remove(obj)
+                result = True
+            except KeyError:
+                pass
+        return result
+
+    def retainAll(self, collection):
+        result = False
+        for obj in list(self._set):
+            if obj not in c:
+                self._set.remove(obj)
+                result = True
+        return result
+
+    def size(self):
+        return len(self._set)
+
+    def toArray(self):
+        return list(self._set)
+
Binary file web/lib/arch/osx/lucene/extensions.jar has changed
Binary file web/lib/arch/osx/lucene/lucene-analyzers-3.0.1.jar has changed
Binary file web/lib/arch/osx/lucene/lucene-core-3.0.1.jar has changed
Binary file web/lib/arch/osx/lucene/lucene-highlighter-3.0.1.jar has changed
Binary file web/lib/arch/osx/lucene/lucene-memory-3.0.1.jar has changed
Binary file web/lib/arch/osx/lucene/lucene-queries-3.0.1.jar has changed
Binary file web/lib/arch/osx/lucene/lucene-regex-3.0.1.jar has changed
Binary file web/lib/arch/osx/lucene/lucene-snowball-3.0.1.jar has changed
--- a/web/lib/django/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,4 +1,4 @@
-VERSION = (1, 1, 1, 'final', 0)
+VERSION = (1, 2, 0, 'rc', 1)
 
 def get_version():
     version = '%s.%s' % (VERSION[0], VERSION[1])
--- a/web/lib/django/conf/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -46,7 +46,7 @@
         argument must support attribute access (__getattr__)).
         """
         if self._wrapped != None:
-            raise RuntimeError, 'Settings already configured.'
+            raise RuntimeError('Settings already configured.')
         holder = UserSettingsHolder(default_settings)
         for name, value in options.items():
             setattr(holder, name, value)
@@ -72,7 +72,7 @@
         try:
             mod = importlib.import_module(self.SETTINGS_MODULE)
         except ImportError, e:
-            raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)
+            raise ImportError("Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e))
 
         # Settings that should be converted into tuples if they're mistakenly entered
         # as strings.
@@ -102,15 +102,12 @@
                 new_installed_apps.append(app)
         self.INSTALLED_APPS = new_installed_apps
 
-        if hasattr(time, 'tzset'):
+        if hasattr(time, 'tzset') and getattr(self, 'TIME_ZONE'):
             # Move the time zone info into os.environ. See ticket #2315 for why
             # we don't do this unconditionally (breaks Windows).
             os.environ['TZ'] = self.TIME_ZONE
             time.tzset()
 
-    def get_all_members(self):
-        return dir(self)
-
 class UserSettingsHolder(object):
     """
     Holder for user configured settings.
@@ -129,8 +126,11 @@
     def __getattr__(self, name):
         return getattr(self.default_settings, name)
 
-    def get_all_members(self):
-        return dir(self) + dir(self.default_settings)
+    def __dir__(self):
+        return self.__dict__.keys() + dir(self.default_settings)
+
+    # For Python < 2.6:
+    __members__ = property(lambda self: self.__dir__())
 
 settings = LazySettings()
 
--- a/web/lib/django/conf/global_settings.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/global_settings.py	Tue May 25 02:43:45 2010 +0200
@@ -42,8 +42,9 @@
 # should be the utf-8 encoded local name for the language.
 LANGUAGES = (
     ('ar', gettext_noop('Arabic')),
+    ('bg', gettext_noop('Bulgarian')),
     ('bn', gettext_noop('Bengali')),
-    ('bg', gettext_noop('Bulgarian')),
+    ('bs', gettext_noop('Bosnian')),
     ('ca', gettext_noop('Catalan')),
     ('cs', gettext_noop('Czech')),
     ('cy', gettext_noop('Welsh')),
@@ -51,31 +52,36 @@
     ('de', gettext_noop('German')),
     ('el', gettext_noop('Greek')),
     ('en', gettext_noop('English')),
+    ('en-gb', gettext_noop('British English')),
     ('es', gettext_noop('Spanish')),
+    ('es-ar', gettext_noop('Argentinean Spanish')),
     ('et', gettext_noop('Estonian')),
-    ('es-ar', gettext_noop('Argentinean Spanish')),
     ('eu', gettext_noop('Basque')),
     ('fa', gettext_noop('Persian')),
     ('fi', gettext_noop('Finnish')),
     ('fr', gettext_noop('French')),
+    ('fy-nl', gettext_noop('Frisian')),
     ('ga', gettext_noop('Irish')),
     ('gl', gettext_noop('Galician')),
-    ('hu', gettext_noop('Hungarian')),
     ('he', gettext_noop('Hebrew')),
     ('hi', gettext_noop('Hindi')),
     ('hr', gettext_noop('Croatian')),
+    ('hu', gettext_noop('Hungarian')),
     ('is', gettext_noop('Icelandic')),
     ('it', gettext_noop('Italian')),
     ('ja', gettext_noop('Japanese')),
     ('ka', gettext_noop('Georgian')),
-    ('ko', gettext_noop('Korean')),
     ('km', gettext_noop('Khmer')),
     ('kn', gettext_noop('Kannada')),
-    ('lv', gettext_noop('Latvian')),
+    ('ko', gettext_noop('Korean')),
     ('lt', gettext_noop('Lithuanian')),
+    ('lv', gettext_noop('Latvian')),
     ('mk', gettext_noop('Macedonian')),
+    ('mn', gettext_noop('Mongolian')),
     ('nl', gettext_noop('Dutch')),
     ('no', gettext_noop('Norwegian')),
+    ('nb', gettext_noop('Norwegian Bokmal')),
+    ('nn', gettext_noop('Norwegian Nynorsk')),
     ('pl', gettext_noop('Polish')),
     ('pt', gettext_noop('Portuguese')),
     ('pt-br', gettext_noop('Brazilian Portuguese')),
@@ -83,13 +89,16 @@
     ('ru', gettext_noop('Russian')),
     ('sk', gettext_noop('Slovak')),
     ('sl', gettext_noop('Slovenian')),
+    ('sq', gettext_noop('Albanian')),
     ('sr', gettext_noop('Serbian')),
+    ('sr-latn', gettext_noop('Serbian Latin')),
     ('sv', gettext_noop('Swedish')),
     ('ta', gettext_noop('Tamil')),
     ('te', gettext_noop('Telugu')),
     ('th', gettext_noop('Thai')),
     ('tr', gettext_noop('Turkish')),
     ('uk', gettext_noop('Ukrainian')),
+    ('vi', gettext_noop('Vietnamese')),
     ('zh-cn', gettext_noop('Simplified Chinese')),
     ('zh-tw', gettext_noop('Traditional Chinese')),
 )
@@ -103,6 +112,10 @@
 LOCALE_PATHS = ()
 LANGUAGE_COOKIE_NAME = 'django_language'
 
+# If you set this to True, Django will format dates, numbers and calendars
+# according to user current locale
+USE_L10N = False
+
 # Not-necessarily-technical managers of the site. They get broken link
 # notifications and other various e-mails.
 MANAGERS = ADMINS
@@ -123,6 +136,7 @@
 SEND_BROKEN_LINK_EMAILS = False
 
 # Database connection info.
+# Legacy format
 DATABASE_ENGINE = ''           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
 DATABASE_NAME = ''             # Or path to database file if using sqlite3.
 DATABASE_USER = ''             # Not used with sqlite3.
@@ -131,6 +145,19 @@
 DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.
 DATABASE_OPTIONS = {}          # Set to empty dictionary for default.
 
+# New format
+DATABASES = {
+}
+
+# Classes used to implement db routing behaviour
+DATABASE_ROUTERS = []
+
+# The email backend to use. For possible shortcuts see django.core.mail.
+# The default is to use the SMTP backend.
+# Third-party backends can be specified by providing a Python path
+# to a module that defines an EmailBackend class.
+EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
+
 # Host for sending e-mail.
 EMAIL_HOST = 'localhost'
 
@@ -152,20 +179,21 @@
 # See the comments in django/core/template/loader.py for interface
 # documentation.
 TEMPLATE_LOADERS = (
-    'django.template.loaders.filesystem.load_template_source',
-    'django.template.loaders.app_directories.load_template_source',
-#     'django.template.loaders.eggs.load_template_source',
+    'django.template.loaders.filesystem.Loader',
+    'django.template.loaders.app_directories.Loader',
+#     'django.template.loaders.eggs.Loader',
 )
 
 # List of processors used by RequestContext to populate the context.
 # Each one should be a callable that takes the request object as its
 # only parameter and returns a dictionary to add to the context.
 TEMPLATE_CONTEXT_PROCESSORS = (
-    'django.core.context_processors.auth',
+    'django.contrib.auth.context_processors.auth',
     'django.core.context_processors.debug',
     'django.core.context_processors.i18n',
     'django.core.context_processors.media',
 #    'django.core.context_processors.request',
+    'django.contrib.messages.context_processors.messages',
 )
 
 # Output to use in template system for invalid (e.g. misspelled) variables.
@@ -255,6 +283,12 @@
 # you'd pass directly to os.chmod; see http://docs.python.org/lib/os-file-dir.html.
 FILE_UPLOAD_PERMISSIONS = None
 
+# Python module path where user will place custom format definition.
+# The directory where this setting is pointing should contain subdirectories
+# named as the locales, containing a formats.py file
+# (i.e. "myproject.locale" for myproject/locale/en/formats.py etc. use)
+FORMAT_MODULE_PATH = None
+
 # Default formatting for date objects. See all available format strings here:
 # http://docs.djangoproject.com/en/dev/ref/templates/builtins/#now
 DATE_FORMAT = 'N j, Y'
@@ -277,6 +311,70 @@
 # http://docs.djangoproject.com/en/dev/ref/templates/builtins/#now
 MONTH_DAY_FORMAT = 'F j'
 
+# Default short formatting for date objects. See all available format strings here:
+# http://docs.djangoproject.com/en/dev/ref/templates/builtins/#now
+SHORT_DATE_FORMAT = 'm/d/Y'
+
+# Default short formatting for datetime objects.
+# See all available format strings here:
+# http://docs.djangoproject.com/en/dev/ref/templates/builtins/#now
+SHORT_DATETIME_FORMAT = 'm/d/Y P'
+
+# Default formats to be used when parsing dates from input boxes, in order
+# See all available format string here:
+# http://docs.python.org/library/datetime.html#strftime-behavior
+# * Note that these format strings are different from the ones to display dates
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
+    '%b %d %Y', '%b %d, %Y',            # 'Oct 25 2006', 'Oct 25, 2006'
+    '%d %b %Y', '%d %b, %Y',            # '25 Oct 2006', '25 Oct, 2006'
+    '%B %d %Y', '%B %d, %Y',            # 'October 25 2006', 'October 25, 2006'
+    '%d %B %Y', '%d %B, %Y',            # '25 October 2006', '25 October, 2006'
+)
+
+# Default formats to be used when parsing times from input boxes, in order
+# See all available format string here:
+# http://docs.python.org/library/datetime.html#strftime-behavior
+# * Note that these format strings are different from the ones to display dates
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',        # '14:30'
+)
+
+# Default formats to be used when parsing dates and times from input boxes,
+# in order
+# See all available format string here:
+# http://docs.python.org/library/datetime.html#strftime-behavior
+# * Note that these format strings are different from the ones to display dates
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
+    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
+    '%m/%d/%Y',              # '10/25/2006'
+    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
+    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
+    '%m/%d/%y',              # '10/25/06'
+)
+
+# First day of week, to be used on calendars
+# 0 means Sunday, 1 means Monday...
+FIRST_DAY_OF_WEEK = 0
+
+# Decimal separator symbol
+DECIMAL_SEPARATOR = '.'
+
+# Boolean that sets whether to add thousand separator when formatting numbers
+USE_THOUSAND_SEPARATOR = False
+
+# Number of digits that will be togheter, when spliting them by THOUSAND_SEPARATOR
+# 0 means no grouping, 3 means splitting by thousands...
+NUMBER_GROUPING = 0
+
+# Thousand separator symbol
+THOUSAND_SEPARATOR = ','
+
 # Do you want to manage transactions manually?
 # Hint: you really don't!
 TRANSACTIONS_MANAGED = False
@@ -300,7 +398,9 @@
 MIDDLEWARE_CLASSES = (
     'django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
 #     'django.middleware.http.ConditionalGetMiddleware',
 #     'django.middleware.gzip.GZipMiddleware',
 )
@@ -374,12 +474,34 @@
 # The number of days a password reset link is valid for
 PASSWORD_RESET_TIMEOUT_DAYS = 3
 
+########
+# CSRF #
+########
+
+# Dotted path to callable to be used as view when a request is
+# rejected by the CSRF middleware.
+CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
+
+# Name and domain for CSRF cookie.
+CSRF_COOKIE_NAME = 'csrftoken'
+CSRF_COOKIE_DOMAIN = None
+
+############
+# MESSAGES #
+############
+
+# Class to use as messges backend
+MESSAGE_STORAGE = 'django.contrib.messages.storage.user_messages.LegacyFallbackStorage'
+
+# Default values of MESSAGE_LEVEL and MESSAGE_TAGS are defined within
+# django.contrib.messages to avoid imports in this settings file.
+
 ###########
 # TESTING #
 ###########
 
-# The name of the method to use to invoke the test suite
-TEST_RUNNER = 'django.test.simple.run_tests'
+# The name of the class to use to run the test suite
+TEST_RUNNER = 'django.test.simple.DjangoTestSuiteRunner'
 
 # The name of the database to use for testing purposes.
 # If None, a name of 'test_' + DATABASE_NAME will be assumed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/ar/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F، Y'
+TIME_FORMAT = 'g:i:s A'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'd‏/m‏/Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/bg/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'd F Y'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'd.m.Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/bn/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F, Y'
+TIME_FORMAT = 'g:i:s A'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j M, Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/bs/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/bs/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,5183 @@
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-28 13:48+0200\n"
+"PO-Revision-Date: 2010-04-28 13:45+0100\n"
+"Last-Translator: Filip Dupanović <kron@kron.ba>\n"
+"Language-Team: Filip Dupanović <kron@kron.ba>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#: .\conf\global_settings.py:44
+msgid "Arabic"
+msgstr "arapski"
+
+#: .\conf\global_settings.py:45
+msgid "Bulgarian"
+msgstr "bugarski"
+
+#: .\conf\global_settings.py:46
+msgid "Bengali"
+msgstr "bengalski"
+
+#: .\conf\global_settings.py:47
+msgid "Bosnian"
+msgstr "bosanski"
+
+#: .\conf\global_settings.py:48
+msgid "Catalan"
+msgstr "katalonski"
+
+#: .\conf\global_settings.py:49
+msgid "Czech"
+msgstr "češki"
+
+#: .\conf\global_settings.py:50
+msgid "Welsh"
+msgstr "velški"
+
+#: .\conf\global_settings.py:51
+msgid "Danish"
+msgstr "danski"
+
+#: .\conf\global_settings.py:52
+msgid "German"
+msgstr "njemački"
+
+#: .\conf\global_settings.py:53
+msgid "Greek"
+msgstr "grčki"
+
+#: .\conf\global_settings.py:54
+msgid "English"
+msgstr "engleski"
+
+#: .\conf\global_settings.py:55
+msgid "Spanish"
+msgstr "španski"
+
+#: .\conf\global_settings.py:56
+msgid "Argentinean Spanish"
+msgstr "argentinski španski"
+
+#: .\conf\global_settings.py:57
+msgid "Estonian"
+msgstr "estonski"
+
+#: .\conf\global_settings.py:58
+msgid "Basque"
+msgstr "baskijski"
+
+#: .\conf\global_settings.py:59
+msgid "Persian"
+msgstr "persijski"
+
+#: .\conf\global_settings.py:60
+msgid "Finnish"
+msgstr "finski"
+
+#: .\conf\global_settings.py:61
+msgid "French"
+msgstr "francuski"
+
+#: .\conf\global_settings.py:62
+msgid "Frisian"
+msgstr "frišanski"
+
+#: .\conf\global_settings.py:63
+msgid "Irish"
+msgstr "irski"
+
+#: .\conf\global_settings.py:64
+msgid "Galician"
+msgstr "galski"
+
+#: .\conf\global_settings.py:65
+msgid "Hebrew"
+msgstr "hebrejski"
+
+#: .\conf\global_settings.py:66
+msgid "Hindi"
+msgstr "hindi"
+
+#: .\conf\global_settings.py:67
+msgid "Croatian"
+msgstr "hrvatski"
+
+#: .\conf\global_settings.py:68
+msgid "Hungarian"
+msgstr "mađarski"
+
+#: .\conf\global_settings.py:69
+msgid "Icelandic"
+msgstr "islandski"
+
+#: .\conf\global_settings.py:70
+msgid "Italian"
+msgstr "italijanski"
+
+#: .\conf\global_settings.py:71
+msgid "Japanese"
+msgstr "japanski"
+
+#: .\conf\global_settings.py:72
+msgid "Georgian"
+msgstr "gruzijski"
+
+#: .\conf\global_settings.py:73
+msgid "Khmer"
+msgstr "kambođanski"
+
+#: .\conf\global_settings.py:74
+msgid "Kannada"
+msgstr "kanada"
+
+#: .\conf\global_settings.py:75
+msgid "Korean"
+msgstr "korejski"
+
+#: .\conf\global_settings.py:76
+msgid "Lithuanian"
+msgstr "litvanski"
+
+#: .\conf\global_settings.py:77
+msgid "Latvian"
+msgstr "latvijski"
+
+#: .\conf\global_settings.py:78
+msgid "Macedonian"
+msgstr "makedonski"
+
+#: .\conf\global_settings.py:79
+msgid "Dutch"
+msgstr "holandski"
+
+#: .\conf\global_settings.py:80
+msgid "Norwegian"
+msgstr "norveški"
+
+#: .\conf\global_settings.py:81
+msgid "Polish"
+msgstr "poljski"
+
+#: .\conf\global_settings.py:82
+msgid "Portuguese"
+msgstr "portugalski"
+
+#: .\conf\global_settings.py:83
+msgid "Brazilian Portuguese"
+msgstr "brazilski portugalski"
+
+#: .\conf\global_settings.py:84
+msgid "Romanian"
+msgstr "rumunski"
+
+#: .\conf\global_settings.py:85
+msgid "Russian"
+msgstr "ruski"
+
+#: .\conf\global_settings.py:86
+msgid "Slovak"
+msgstr "slovački"
+
+#: .\conf\global_settings.py:87
+msgid "Slovenian"
+msgstr "slovenački"
+
+#: .\conf\global_settings.py:88
+msgid "Albanian"
+msgstr "albanski"
+
+#: .\conf\global_settings.py:89
+msgid "Serbian"
+msgstr "srpski"
+
+#: .\conf\global_settings.py:90
+msgid "Serbian Latin"
+msgstr "srpski latinski"
+
+#: .\conf\global_settings.py:91
+msgid "Swedish"
+msgstr "švedski"
+
+#: .\conf\global_settings.py:92
+msgid "Tamil"
+msgstr "tamilski"
+
+#: .\conf\global_settings.py:93
+msgid "Telugu"
+msgstr "telugu"
+
+#: .\conf\global_settings.py:94
+msgid "Thai"
+msgstr "tajlandski"
+
+#: .\conf\global_settings.py:95
+msgid "Turkish"
+msgstr "turski"
+
+#: .\conf\global_settings.py:96
+msgid "Ukrainian"
+msgstr "ukrajinski"
+
+#: .\conf\global_settings.py:97
+msgid "Vietnamese"
+msgstr "vijetnamežanski"
+
+#: .\conf\global_settings.py:98
+msgid "Simplified Chinese"
+msgstr "novokineski"
+
+#: .\conf\global_settings.py:99
+msgid "Traditional Chinese"
+msgstr "starokineski"
+
+#: .\contrib\admin\actions.py:52
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr "Uspješno obrisano: %(count)d %(items)s."
+
+#: .\contrib\admin\actions.py:59 .\contrib\admin\options.py:1100
+msgid "Are you sure?"
+msgstr "Da li ste sigurni?"
+
+#: .\contrib\admin\actions.py:77
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr "Briši označene objekte klase %(verbose_name_plural)s"
+
+#: .\contrib\admin\filterspecs.py:44
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+"<h3>%s:</h3>\n"
+"<ul>\n"
+
+#: .\contrib\admin\filterspecs.py:75 .\contrib\admin\filterspecs.py:92
+#: .\contrib\admin\filterspecs.py:147 .\contrib\admin\filterspecs.py:173
+msgid "All"
+msgstr "Svi"
+
+#: .\contrib\admin\filterspecs.py:113
+msgid "Any date"
+msgstr "Svi datumi"
+
+#: .\contrib\admin\filterspecs.py:114
+msgid "Today"
+msgstr "Danas"
+
+#: .\contrib\admin\filterspecs.py:117
+msgid "Past 7 days"
+msgstr "Poslednjih 7 dana"
+
+#: .\contrib\admin\filterspecs.py:119
+msgid "This month"
+msgstr "Ovaj mesec"
+
+#: .\contrib\admin\filterspecs.py:121
+msgid "This year"
+msgstr "Ova godina"
+
+#: .\contrib\admin\filterspecs.py:147 .\forms\widgets.py:469
+msgid "Yes"
+msgstr "Da"
+
+#: .\contrib\admin\filterspecs.py:147 .\forms\widgets.py:469
+msgid "No"
+msgstr "Ne"
+
+#: .\contrib\admin\filterspecs.py:154 .\forms\widgets.py:469
+msgid "Unknown"
+msgstr "Nepoznato"
+
+#: .\contrib\admin\helpers.py:20
+msgid "Action:"
+msgstr "Radnja:"
+
+#: .\contrib\admin\models.py:19
+msgid "action time"
+msgstr "vrijeme radnje"
+
+#: .\contrib\admin\models.py:22
+msgid "object id"
+msgstr "id objekta"
+
+#: .\contrib\admin\models.py:23
+msgid "object repr"
+msgstr "opis objekta"
+
+#: .\contrib\admin\models.py:24
+msgid "action flag"
+msgstr "oznaka radnje"
+
+#: .\contrib\admin\models.py:25
+msgid "change message"
+msgstr "opis izmjene"
+
+#: .\contrib\admin\models.py:28
+msgid "log entry"
+msgstr "zapis u logovima"
+
+#: .\contrib\admin\models.py:29
+msgid "log entries"
+msgstr "zapisi u logovima"
+
+#: .\contrib\admin\options.py:142 .\contrib\admin\options.py:157
+msgid "None"
+msgstr "Ništa"
+
+#: .\contrib\admin\options.py:563
+#, python-format
+msgid "Changed %s."
+msgstr "Izmjenjena polja %s"
+
+#: .\contrib\admin\options.py:563 .\contrib\admin\options.py:573
+#: .\contrib\comments\templates\comments\preview.html.py:16
+#: .\db\models\base.py:844 .\forms\models.py:573
+msgid "and"
+msgstr "i"
+
+#: .\contrib\admin\options.py:568
+#, python-format
+msgid "Added %(name)s \"%(object)s\"."
+msgstr "Sačuvan objekat „%(object)s“ klase %(name)s."
+
+#: .\contrib\admin\options.py:572
+#, python-format
+msgid "Changed %(list)s for %(name)s \"%(object)s\"."
+msgstr "Izmjenjena polja %(list)s objekata „%(object)s“ klase %(name)s ."
+
+#: .\contrib\admin\options.py:577
+#, python-format
+msgid "Deleted %(name)s \"%(object)s\"."
+msgstr "Obrisan objekat „%(object)s“ klase %(name)s."
+
+#: .\contrib\admin\options.py:581
+msgid "No fields changed."
+msgstr "Bez izmjena u poljima."
+
+#: .\contrib\admin\options.py:647
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "Objekat „%(obj)s“ klase %(name)s sačuvan je uspješno."
+
+#: .\contrib\admin\options.py:651 .\contrib\admin\options.py:684
+msgid "You may edit it again below."
+msgstr "Dole možete ponovo unositi izmjene."
+
+#: .\contrib\admin\options.py:661 .\contrib\admin\options.py:694
+#, python-format
+msgid "You may add another %s below."
+msgstr "Dole možete dodati novi objekat klase %s"
+
+#: .\contrib\admin\options.py:682
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "Objekat „%(obj)s“ klase %(name)s izmjenjen je uspješno."
+
+#: .\contrib\admin\options.py:690
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+"Objekat „%(obj)s“ klase %(name)s dodat je uspješno. Dole možete unjeti "
+"dodatne izmjene."
+
+#: .\contrib\admin\options.py:744
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Predmeti moraju biti izabrani da bi se mogla obaviti akcija nad njima. "
+"Nijedan predmet nije bio izmjenjen."
+
+#: .\contrib\admin\options.py:762
+msgid "No action selected."
+msgstr "Nijedna akcija nije izabrana."
+
+#: .\contrib\admin\options.py:842
+#, python-format
+msgid "Add %s"
+msgstr "Dodaj objekat klase %s"
+
+#: .\contrib\admin\options.py:868 .\contrib\admin\options.py:1080
+#, python-format
+msgid "%(name)s object with primary key %(key)r does not exist."
+msgstr "Objekat klase %(name)s sa primarnim ključem %(key)r ne postoji."
+
+#: .\contrib\admin\options.py:933
+#, python-format
+msgid "Change %s"
+msgstr "Izmjeni objekat klase %s"
+
+#: .\contrib\admin\options.py:978
+msgid "Database error"
+msgstr "Greška u bazi podataka"
+
+#: .\contrib\admin\options.py:1014
+#, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] "%(count)s objekat klase %(name)s izmjenjen je uspješno."
+msgstr[1] "%(count)s objekata klase %(name)s izmjenjeni su uspješno."
+msgstr[2] "%(count)s objekta klase %(name)s izmjenjeno je uspješno."
+
+#: .\contrib\admin\options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s izabran"
+msgstr[1] "%(total_count)s izabrana"
+msgstr[2] "%(total_count)s izabrani"
+
+#: .\contrib\admin\options.py:1046
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 od %(cnt)s izabrani"
+
+#: .\contrib\admin\options.py:1093
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "Objekat „%(obj)s“ klase %(name)s obrisan je uspješno."
+
+#: .\contrib\admin\options.py:1130
+#, python-format
+msgid "Change history: %s"
+msgstr "Historijat izmjena: %s"
+
+#: .\contrib\admin\sites.py:22 .\contrib\admin\views\decorators.py:14
+#: .\contrib\auth\forms.py:81
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+"Unesite tačno korisničko ime i lozinku. Pazite na razliku izmjeđu malih i "
+"velikih slova u oba polja"
+
+#: .\contrib\admin\sites.py:311 .\contrib\admin\views\decorators.py:40
+msgid "Please log in again, because your session has expired."
+msgstr "Prijavite se ponovo pošto je vaša sesija istekla."
+
+#: .\contrib\admin\sites.py:318 .\contrib\admin\views\decorators.py:47
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+"Izgleda da vaš browser nije podešen da prima kolačiće. Uključite kolačiće, "
+"osvježite ovu stranicu i probajte ponovo."
+
+#: .\contrib\admin\sites.py:334 .\contrib\admin\sites.py:340
+#: .\contrib\admin\views\decorators.py:66
+msgid "Usernames cannot contain the '@' character."
+msgstr "Korisnička imena ne smiju sadržati znak „@“."
+
+#: .\contrib\admin\sites.py:337 .\contrib\admin\views\decorators.py:62
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr "Vaša email adresa nije vaše korisničko ime. Probajte sa „%s“."
+
+#: .\contrib\admin\sites.py:393
+msgid "Site administration"
+msgstr "Administracija sistema"
+
+#: .\contrib\admin\sites.py:407
+#: .\contrib\admin\templates\admin\login.html.py:26
+#: .\contrib\admin\templates\registration\password_reset_complete.html.py:14
+#: .\contrib\admin\views\decorators.py:20
+msgid "Log in"
+msgstr "Prijava"
+
+#: .\contrib\admin\sites.py:452
+#, python-format
+msgid "%s administration"
+msgstr "Administracija %s"
+
+#: .\contrib\admin\widgets.py:75
+msgid "Date:"
+msgstr "Datum:"
+
+#: .\contrib\admin\widgets.py:75
+msgid "Time:"
+msgstr "Vrijeme:"
+
+#: .\contrib\admin\widgets.py:99
+msgid "Currently:"
+msgstr "Trenutno:"
+
+#: .\contrib\admin\widgets.py:99
+msgid "Change:"
+msgstr "Izmjena:"
+
+#: .\contrib\admin\widgets.py:129
+msgid "Lookup"
+msgstr "Pretraži"
+
+#: .\contrib\admin\widgets.py:244
+msgid "Add Another"
+msgstr "Dodaj još jedan"
+
+#: .\contrib\admin\templates\admin\404.html.py:4
+#: .\contrib\admin\templates\admin\404.html.py:8
+msgid "Page not found"
+msgstr "Stranica nije pronađena"
+
+#: .\contrib\admin\templates\admin\404.html.py:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Žao nam je, tražena stranica nije pronađena."
+
+#: .\contrib\admin\templates\admin\500.html.py:4
+#: .\contrib\admin\templates\admin\app_index.html.py:8
+#: .\contrib\admin\templates\admin\base.html.py:55
+#: .\contrib\admin\templates\admin\change_form.html.py:18
+#: .\contrib\admin\templates\admin\change_list.html.py:42
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:6
+#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:6
+#: .\contrib\admin\templates\admin\invalid_setup.html.py:4
+#: .\contrib\admin\templates\admin\object_history.html.py:6
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:11
+#: .\contrib\admin\templates\registration\logged_out.html.py:4
+#: .\contrib\admin\templates\registration\password_change_done.html.py:4
+#: .\contrib\admin\templates\registration\password_change_form.html.py:5
+#: .\contrib\admin\templates\registration\password_reset_complete.html.py:4
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:4
+#: .\contrib\admin\templates\registration\password_reset_done.html.py:4
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:4
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:3
+msgid "Home"
+msgstr "Početna"
+
+#: .\contrib\admin\templates\admin\500.html.py:4
+msgid "Server error"
+msgstr "Greška na serveru"
+
+#: .\contrib\admin\templates\admin\500.html.py:6
+msgid "Server error (500)"
+msgstr "Greška na serveru (500)"
+
+#: .\contrib\admin\templates\admin\500.html.py:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Greška na serveru <em>(500)</em>"
+
+#: .\contrib\admin\templates\admin\500.html.py:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"Došlo je do greške. Administrator sajta je obavešten emailom i greška će "
+"biti uskoro otklonjena. Hvala na strpljenju."
+
+#: .\contrib\admin\templates\admin\actions.html.py:4
+msgid "Run the selected action"
+msgstr "Pokreni odabranu radnju"
+
+#: .\contrib\admin\templates\admin\actions.html.py:4
+msgid "Go"
+msgstr "Počni"
+
+#: .\contrib\admin\templates\admin\actions.html.py:11
+msgid "Click here to select the objects across all pages"
+msgstr "Kliknite ovdje da izaberete objekte preko svih stranica"
+
+#: .\contrib\admin\templates\admin\actions.html.py:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Izaberite svih %(total_count)s %(module_name)s"
+
+#: .\contrib\admin\templates\admin\actions.html.py:13
+msgid "Clear selection"
+msgstr "Izbrišite izbor"
+
+#: .\contrib\admin\templates\admin\app_index.html.py:10
+#: .\contrib\admin\templates\admin\index.html.py:19
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
+#: .\contrib\admin\templates\admin\base.html.py:28
+msgid "Welcome,"
+msgstr "Dobrodošli,"
+
+#: .\contrib\admin\templates\admin\base.html.py:33
+#: .\contrib\admin\templates\registration\password_change_done.html.py:3
+#: .\contrib\admin\templates\registration\password_change_form.html.py:4
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:3
+msgid "Documentation"
+msgstr "Dokumentacija"
+
+#: .\contrib\admin\templates\admin\base.html.py:41
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:15
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:48
+#: .\contrib\admin\templates\registration\password_change_done.html.py:3
+#: .\contrib\admin\templates\registration\password_change_form.html.py:4
+msgid "Change password"
+msgstr "Promjena lozinke"
+
+#: .\contrib\admin\templates\admin\base.html.py:48
+#: .\contrib\admin\templates\registration\password_change_done.html.py:3
+#: .\contrib\admin\templates\registration\password_change_form.html.py:4
+msgid "Log out"
+msgstr "Odjava"
+
+#: .\contrib\admin\templates\admin\base_site.html.py:4
+msgid "Django site admin"
+msgstr "Django administracija sajta"
+
+#: .\contrib\admin\templates\admin\base_site.html.py:7
+msgid "Django administration"
+msgstr "Django administracija"
+
+#: .\contrib\admin\templates\admin\change_form.html.py:21
+#: .\contrib\admin\templates\admin\index.html.py:29
+msgid "Add"
+msgstr "Dodaj"
+
+#: .\contrib\admin\templates\admin\change_form.html.py:28
+#: .\contrib\admin\templates\admin\object_history.html.py:10
+msgid "History"
+msgstr "Historijat"
+
+#: .\contrib\admin\templates\admin\change_form.html.py:29
+#: .\contrib\admin\templates\admin\edit_inline\stacked.html.py:9
+#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:28
+msgid "View on site"
+msgstr "Pregled na sajtu"
+
+#: .\contrib\admin\templates\admin\change_form.html.py:39
+#: .\contrib\admin\templates\admin\change_list.html.py:71
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:24
+#: .\contrib\admin\templates\registration\password_change_form.html.py:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Ispravite grešku dole."
+msgstr[1] "Ispravite greške dole."
+msgstr[2] "Ispravite greške dole."
+
+#: .\contrib\admin\templates\admin\change_list.html.py:63
+#, python-format
+msgid "Add %(name)s"
+msgstr "Dodaj objekat klase %(name)s"
+
+#: .\contrib\admin\templates\admin\change_list.html.py:82
+msgid "Filter"
+msgstr "Filter"
+
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:10
+#: .\contrib\admin\templates\admin\submit_line.html.py:4
+#: .\forms\formsets.py:302
+msgid "Delete"
+msgstr "Obriši"
+
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:16
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+"Uklanjanje %(object_name)s „%(escaped_object)s“ povlači uklanjanje svih "
+"objekata koji su povezani sa ovim objektom, ali vaš nalog nema dozvole za "
+"brisanje slijedećih tipova objekata:"
+
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:23
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+"Da li ste sigurni da želite da obrišete %(object_name)s „%(escaped_object)"
+"s“? Slijedeći objekti koji su u vezi sa ovim objektom će također biti "
+"obrisani:"
+
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:28
+#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:33
+msgid "Yes, I'm sure"
+msgstr "Da, siguran sam"
+
+#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:9
+msgid "Delete multiple objects"
+msgstr "Brisanje više objekata"
+
+#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:15
+#, python-format
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+"Uklanjanje %(object_name)s povlači uklanjanje svih objekata koji su povezani "
+"sa ovim objektom, ali vaš nalog nema dozvole za brisanje slijedećih tipova "
+"objekata:"
+
+#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:22
+#, python-format
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Da li ste sigurni da želite da obrišete odabrane %(object_name)s? Slijedeći "
+"objekti koji su u vezi sa ovim objektom će također biti obrisani:"
+
+#: .\contrib\admin\templates\admin\filter.html.py:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr " %(filter_title)s "
+
+#: .\contrib\admin\templates\admin\index.html.py:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Modeli dostupni u aplikaciji %(name)s."
+
+#: .\contrib\admin\templates\admin\index.html.py:35
+msgid "Change"
+msgstr "Izmjeni"
+
+#: .\contrib\admin\templates\admin\index.html.py:45
+msgid "You don't have permission to edit anything."
+msgstr "Nemate dozvole da unosite bilo kakve izmjene."
+
+#: .\contrib\admin\templates\admin\index.html.py:53
+msgid "Recent Actions"
+msgstr "Posjlednje radnje"
+
+#: .\contrib\admin\templates\admin\index.html.py:54
+msgid "My Actions"
+msgstr "Moje radnje"
+
+#: .\contrib\admin\templates\admin\index.html.py:58
+msgid "None available"
+msgstr "Nema podataka"
+
+#: .\contrib\admin\templates\admin\index.html.py:72
+msgid "Unknown content"
+msgstr "Nepoznat sadržaj"
+
+#: .\contrib\admin\templates\admin\invalid_setup.html.py:7
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+"Nešto nije uredu sa vašom bazom podataka. Provjerite da li postoje "
+"odgovarajuće tabele i da li odgovarajući korisnik ima pristup bazi."
+
+#: .\contrib\admin\templates\admin\login.html.py:19
+msgid "Username:"
+msgstr "Korisnik:"
+
+#: .\contrib\admin\templates\admin\login.html.py:22
+msgid "Password:"
+msgstr "Lozinka:"
+
+#: .\contrib\admin\templates\admin\object_history.html.py:22
+msgid "Date/time"
+msgstr "Datum/vrijeme"
+
+#: .\contrib\admin\templates\admin\object_history.html.py:23
+msgid "User"
+msgstr "Korisnik"
+
+#: .\contrib\admin\templates\admin\object_history.html.py:24
+msgid "Action"
+msgstr "Radnja"
+
+#: .\contrib\admin\templates\admin\object_history.html.py:38
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Ovaj objekat nema zabilježen historijat izmjena. Vjerovatno nije dodan kroz "
+"ovaj sajt za administraciju."
+
+#: .\contrib\admin\templates\admin\pagination.html.py:10
+msgid "Show all"
+msgstr "Prikaži sve"
+
+#: .\contrib\admin\templates\admin\pagination.html.py:11
+#: .\contrib\admin\templates\admin\submit_line.html.py:3
+msgid "Save"
+msgstr "Sačuvaj"
+
+#: .\contrib\admin\templates\admin\search_form.html.py:8
+msgid "Search"
+msgstr "Pretraga"
+
+#: .\contrib\admin\templates\admin\search_form.html.py:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 rezultat"
+msgstr[1] "%(counter)s rezultata"
+msgstr[2] "%(counter)s rezultata"
+
+#: .\contrib\admin\templates\admin\search_form.html.py:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "ukupno %(full_result_count)s"
+
+#: .\contrib\admin\templates\admin\submit_line.html.py:5
+msgid "Save as new"
+msgstr "Sačuvaj kao novi"
+
+#: .\contrib\admin\templates\admin\submit_line.html.py:6
+msgid "Save and add another"
+msgstr "Sačuvaj i dodaj slijedeći"
+
+#: .\contrib\admin\templates\admin\submit_line.html.py:7
+msgid "Save and continue editing"
+msgstr "Sačuvaj i nastavi sa izmjenama"
+
+#: .\contrib\admin\templates\admin\auth\user\add_form.html.py:5
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+"Prvo unesite korisničko ime i lozinku. Potom ćete moći da mijenjate još "
+"korisničkih podešavanja."
+
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr "Unesite novu lozinku za korisnika <strong>%(username)s</strong>."
+
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:35
+#: .\contrib\auth\forms.py:17 .\contrib\auth\forms.py:61
+#: .\contrib\auth\forms.py:186
+msgid "Password"
+msgstr "Lozinka"
+
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:41
+#: .\contrib\admin\templates\registration\password_change_form.html.py:37
+#: .\contrib\auth\forms.py:187
+msgid "Password (again)"
+msgstr "Lozinka (ponovite)"
+
+#: .\contrib\admin\templates\admin\auth\user\change_password.html.py:42
+#: .\contrib\auth\forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Radi provjere tačnosti ponovo unesite lozinku koju ste unijeli gore."
+
+#: .\contrib\admin\templates\admin\edit_inline\stacked.html.py:64
+#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Dodaj još jedan %(verbose_name)s"
+
+#: .\contrib\admin\templates\admin\edit_inline\stacked.html.py:67
+#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:113
+#: .\contrib\comments\templates\comments\delete.html.py:12
+msgid "Remove"
+msgstr "Obriši"
+
+#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:15
+msgid "Delete?"
+msgstr "Brisanje?"
+
+#: .\contrib\admin\templates\registration\logged_out.html.py:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Hvala što ste danas proveli vrijeme na ovom sajtu."
+
+#: .\contrib\admin\templates\registration\logged_out.html.py:10
+msgid "Log in again"
+msgstr "Ponovna prijava"
+
+#: .\contrib\admin\templates\registration\password_change_done.html.py:4
+#: .\contrib\admin\templates\registration\password_change_form.html.py:5
+#: .\contrib\admin\templates\registration\password_change_form.html.py:7
+#: .\contrib\admin\templates\registration\password_change_form.html.py:19
+msgid "Password change"
+msgstr "Izmjena lozinke"
+
+#: .\contrib\admin\templates\registration\password_change_done.html.py:6
+#: .\contrib\admin\templates\registration\password_change_done.html.py:10
+msgid "Password change successful"
+msgstr "uspješna izmjena lozinke"
+
+#: .\contrib\admin\templates\registration\password_change_done.html.py:12
+msgid "Your password was changed."
+msgstr "Vaša lozinka je izmjenjena."
+
+#: .\contrib\admin\templates\registration\password_change_form.html.py:21
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Iz bezbjednosnih razloga prvo unesite svoju staru lozinku, a novu zatim "
+"unesite dva puta da bismo mogli da provjerimo da li ste je pravilno unijeli."
+
+#: .\contrib\admin\templates\registration\password_change_form.html.py:27
+#: .\contrib\auth\forms.py:170
+msgid "Old password"
+msgstr "Stara lozinka"
+
+#: .\contrib\admin\templates\registration\password_change_form.html.py:32
+#: .\contrib\auth\forms.py:144
+msgid "New password"
+msgstr "Nova lozinka"
+
+#: .\contrib\admin\templates\registration\password_change_form.html.py:43
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:21
+msgid "Change my password"
+msgstr "Izmijeni moju lozinku"
+
+#: .\contrib\admin\templates\registration\password_reset_complete.html.py:4
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:6
+#: .\contrib\admin\templates\registration\password_reset_done.html.py:4
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:4
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:6
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:10
+msgid "Password reset"
+msgstr "Resetovanje lozinke"
+
+#: .\contrib\admin\templates\registration\password_reset_complete.html.py:6
+#: .\contrib\admin\templates\registration\password_reset_complete.html.py:10
+msgid "Password reset complete"
+msgstr "Resetovanje lozinke uspješno"
+
+#: .\contrib\admin\templates\registration\password_reset_complete.html.py:12
+msgid "Your password has been set.  You may go ahead and log in now."
+msgstr "Vaša lozinka je postavljena.  Možete se prijaviti."
+
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:4
+msgid "Password reset confirmation"
+msgstr "Potvrda resetovanja lozinke"
+
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:12
+msgid "Enter new password"
+msgstr "Unesite novu lozinku"
+
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:14
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+"Unesite novu lozinku dva puta kako bismo mogli da provjerimo da li ste je "
+"pravilno unijeli."
+
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:18
+msgid "New password:"
+msgstr "Nova lozinka:"
+
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:20
+msgid "Confirm password:"
+msgstr "Potvrda lozinke:"
+
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:26
+msgid "Password reset unsuccessful"
+msgstr "Resetovanje lozinke neuspješno"
+
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:28
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used.  Please request a new password reset."
+msgstr ""
+"Link za resetovanje lozinke nije važeći, vjerovatno zato što je već "
+"iskorišćen.  Ponovo zatražite resetovanje lozinke."
+
+#: .\contrib\admin\templates\registration\password_reset_done.html.py:6
+#: .\contrib\admin\templates\registration\password_reset_done.html.py:10
+msgid "Password reset successful"
+msgstr "Resetovanje lozinke uspješno."
+
+#: .\contrib\admin\templates\registration\password_reset_done.html.py:12
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"Poslali smo uputstva za postavljanje nove lozinke na email adresu koju ste "
+"nam dali. Uputstva ćete dobiti uskoro."
+
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Ovu poruku ste primili zato što ste zahtijevali resetovanje lozinke"
+
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "za vaš korisnički nalog na sajtu %(site_name)s"
+
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:5
+msgid "Please go to the following page and choose a new password:"
+msgstr "Idite na slijedeću stranicu i postavite novu lozinku."
+
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:9
+msgid "Your username, in case you've forgotten:"
+msgstr "Ukoliko ste zaboravili, vaše korisničko ime:"
+
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:11
+msgid "Thanks for using our site!"
+msgstr "Hvala što koristite naš sajt!"
+
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:13
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "Uredništvo sajta %(site_name)s"
+
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+"Zaboravili ste lozinku? Unesite svoju email adresu dole i poslaćemo vam "
+"uputstva za postavljanje nove."
+
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
+msgid "E-mail address:"
+msgstr "Email adresa:"
+
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
+msgid "Reset my password"
+msgstr "Resetuj moju lozinku"
+
+#: .\contrib\admin\templatetags\admin_list.py:239
+msgid "All dates"
+msgstr "Svi datumi"
+
+#: .\contrib\admin\views\main.py:70
+#, python-format
+msgid "Select %s"
+msgstr "Odaberi objekat klase %s"
+
+#: .\contrib\admin\views\main.py:70
+#, python-format
+msgid "Select %s to change"
+msgstr "Odaberi objekat klase %s za izmjenu"
+
+#: .\contrib\admin\views\template.py:38 .\contrib\sites\models.py:38
+msgid "site"
+msgstr "sajt"
+
+#: .\contrib\admin\views\template.py:40
+msgid "template"
+msgstr "obrazac"
+
+#: .\contrib\admindocs\views.py:61 .\contrib\admindocs\views.py:63
+#: .\contrib\admindocs\views.py:65
+msgid "tag:"
+msgstr "tag:"
+
+#: .\contrib\admindocs\views.py:94 .\contrib\admindocs\views.py:96
+#: .\contrib\admindocs\views.py:98
+msgid "filter:"
+msgstr "filter:"
+
+#: .\contrib\admindocs\views.py:158 .\contrib\admindocs\views.py:160
+#: .\contrib\admindocs\views.py:162
+msgid "view:"
+msgstr "pogled:"
+
+#: .\contrib\admindocs\views.py:190
+#, python-format
+msgid "App %r not found"
+msgstr "Aplikacija %r nije pronađena"
+
+#: .\contrib\admindocs\views.py:197
+#, python-format
+msgid "Model %(model_name)r not found in app %(app_label)r"
+msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r"
+
+#: .\contrib\admindocs\views.py:209
+#, python-format
+msgid "the related `%(app_label)s.%(data_type)s` object"
+msgstr "povezani objekti klase `%(app_label)s.%(data_type)s`"
+
+#: .\contrib\admindocs\views.py:209 .\contrib\admindocs\views.py:228
+#: .\contrib\admindocs\views.py:233 .\contrib\admindocs\views.py:247
+#: .\contrib\admindocs\views.py:261 .\contrib\admindocs\views.py:266
+msgid "model:"
+msgstr "model:"
+
+# WARN: possible breakage in future
+# This string is interpolated in strings below, which can cause breakage in
+# future releases.
+#: .\contrib\admindocs\views.py:224 .\contrib\admindocs\views.py:256
+#, python-format
+msgid "related `%(app_label)s.%(object_name)s` objects"
+msgstr "klase `%(app_label)s.%(object_name)s`"
+
+# WARN: possible breakage in future
+#: .\contrib\admindocs\views.py:228 .\contrib\admindocs\views.py:261
+#, python-format
+msgid "all %s"
+msgstr "svi povezani objekti %s"
+
+# WARN: possible breakage in future
+#: .\contrib\admindocs\views.py:233 .\contrib\admindocs\views.py:266
+#, python-format
+msgid "number of %s"
+msgstr "broj povezanih objekata %s"
+
+# WARN: possible breakage in future
+#: .\contrib\admindocs\views.py:271
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Polja u povezanim objektima %s"
+
+#: .\contrib\admindocs\views.py:361
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s ne izgleda kao urlpattern objekat"
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:3
+msgid "Bookmarklets"
+msgstr "Bookmarkleti"
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:4
+msgid "Documentation bookmarklets"
+msgstr "Bookmarkleti dokumentacije"
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:8
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p class=\"help\">Da biste instalirali bookmarklet, prevucite link do "
+"svojih\n"
+"bookmarka ili kliknite desnim dugmetom i dodajte među bookmarke. Nakon toga\n"
+"bookmarkletima možete pristupiti sa svake stranice na sajtu. Imajte na umu\n"
+"da neki bookmarkleti zahtijevaju da sajtu pristupite sa računara koji su\n"
+"označeni kao „interni“ (pitajte administratora vašeg sistema ukoliko niste\n"
+"sigurni da li je vaš računar „interni“).</p>\n"
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:18
+msgid "Documentation for this page"
+msgstr "Dokumentacija za ovu stranicu"
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:19
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+"Vodi od bilo koje stranice do dokumentacije za pogled koji generiše tu "
+"stranicu."
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:21
+msgid "Show object ID"
+msgstr "Prikaži ID objekta"
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:22
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"Prikazuje content-type i jedinstveni ID za stranicu koja predstavlja jedan "
+"objekat."
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:24
+msgid "Edit this object (current window)"
+msgstr "Izmjeni ovaj objekat (u ovom prozoru)"
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:25
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr ""
+"Vodi u administracioni stranicu za stranice koje prestavljaju jedan objekat"
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:27
+msgid "Edit this object (new window)"
+msgstr "Izmjeni ovaj objekat (novi prozor)"
+
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:28
+msgid "As above, but opens the admin page in a new window."
+msgstr ""
+"Isto kao prethodni, ali otvara administracionu stranicu u novom prozoru."
+
+#: .\contrib\auth\admin.py:29
+msgid "Personal info"
+msgstr "Lični podaci"
+
+#: .\contrib\auth\admin.py:30
+msgid "Permissions"
+msgstr "Dozvole"
+
+#: .\contrib\auth\admin.py:31
+msgid "Important dates"
+msgstr "Važni datumi"
+
+#: .\contrib\auth\admin.py:32
+msgid "Groups"
+msgstr "Grupe"
+
+#: .\contrib\auth\admin.py:114
+msgid "Password changed successfully."
+msgstr "Lozinka uspješno izmjenjena."
+
+#: .\contrib\auth\admin.py:124
+#, python-format
+msgid "Change password: %s"
+msgstr "Izmjeni lozinku: %s"
+
+#: .\contrib\auth\forms.py:14 .\contrib\auth\forms.py:48
+#: .\contrib\auth\forms.py:60
+msgid "Username"
+msgstr "Korisnik"
+
+#: .\contrib\auth\forms.py:15 .\contrib\auth\forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr ""
+"Neophodno. Najviše 30 slovnih mesta. Samo slova, brojke i  @/./+/-/_ only."
+
+#: .\contrib\auth\forms.py:16 .\contrib\auth\forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr ""
+"Ova vrijednost može sadržati samo slova, brojke i  digits and @/./+/-/_ "
+"znamenke."
+
+#: .\contrib\auth\forms.py:18
+msgid "Password confirmation"
+msgstr "Potvrda lozinke"
+
+#: .\contrib\auth\forms.py:31
+msgid "A user with that username already exists."
+msgstr "Korisnik sa tim korisničkim imenom već postoji."
+
+#: .\contrib\auth\forms.py:37 .\contrib\auth\forms.py:156
+#: .\contrib\auth\forms.py:198
+msgid "The two password fields didn't match."
+msgstr "Dva polja za lozinku se nisu poklopila."
+
+#: .\contrib\auth\forms.py:83
+msgid "This account is inactive."
+msgstr "Ovaj nalog je neaktivan."
+
+#: .\contrib\auth\forms.py:88
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"Izgleda da su kolačići isključeni u vašem browser-u. Oni moraju biti "
+"uključeni da bi ste se prijavili."
+
+#: .\contrib\auth\forms.py:101
+msgid "E-mail"
+msgstr "Email adresa"
+
+#: .\contrib\auth\forms.py:110
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Ta email adresa nije u vezi ni sa jednim nalogom. Da li ste sigurni da ste "
+"se već registrovali?"
+
+#: .\contrib\auth\forms.py:136
+#, python-format
+msgid "Password reset on %s"
+msgstr "Resetovanje lozinke na %s"
+
+#: .\contrib\auth\forms.py:145
+msgid "New password confirmation"
+msgstr "Potvrda nove lozinke"
+
+#: .\contrib\auth\forms.py:178
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "Vaša stara lozinka nije pravilno unesena. Unesite je ponovo."
+
+#: .\contrib\auth\models.py:66 .\contrib\auth\models.py:94
+msgid "name"
+msgstr "ime"
+
+#: .\contrib\auth\models.py:68
+msgid "codename"
+msgstr "šifra dozvole"
+
+#: .\contrib\auth\models.py:72
+msgid "permission"
+msgstr "dozvola"
+
+#: .\contrib\auth\models.py:73 .\contrib\auth\models.py:95
+msgid "permissions"
+msgstr "dozvole"
+
+#: .\contrib\auth\models.py:98
+msgid "group"
+msgstr "grupa"
+
+#: .\contrib\auth\models.py:99 .\contrib\auth\models.py:206
+msgid "groups"
+msgstr "grupe"
+
+#: .\contrib\auth\models.py:196
+msgid "username"
+msgstr "korisničko ime"
+
+#: .\contrib\auth\models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Neophodno. Najviše 30 slovnih mesta. Slova, brojke i  @/./+/-/_ karakteri"
+
+#: .\contrib\auth\models.py:197
+msgid "first name"
+msgstr "ime"
+
+#: .\contrib\auth\models.py:198
+msgid "last name"
+msgstr "prezime"
+
+#: .\contrib\auth\models.py:199
+msgid "e-mail address"
+msgstr "email adresa"
+
+#: .\contrib\auth\models.py:200
+msgid "password"
+msgstr "lozinka"
+
+#: .\contrib\auth\models.py:200
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+"Koristite '[algo]$[salt]$[hexdigest]' ili <a href=\"password/\">formular za "
+"unos lozinke</a>."
+
+#: .\contrib\auth\models.py:201
+msgid "staff status"
+msgstr "status člana uredništva"
+
+#: .\contrib\auth\models.py:201
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+"Označava da li korisnik može da se prijavi na ovaj sajt za administraciju."
+
+#: .\contrib\auth\models.py:202
+msgid "active"
+msgstr "aktivan"
+
+#: .\contrib\auth\models.py:202
+msgid ""
+"Designates whether this user should be treated as active. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Označava da li se korisnik smatra aktivnim. Uklnote izbor sa ovog polja "
+"umjesto da brišete nalog."
+
+#: .\contrib\auth\models.py:203
+msgid "superuser status"
+msgstr "status administratora"
+
+#: .\contrib\auth\models.py:203
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+"Označava da li korisnik ima sve dozvole bez dodjeljivanja pojedinačnih "
+"dozvola."
+
+#: .\contrib\auth\models.py:204
+msgid "last login"
+msgstr "posljednja prijava"
+
+#: .\contrib\auth\models.py:205
+msgid "date joined"
+msgstr "datum registracije"
+
+#: .\contrib\auth\models.py:207
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"Pored ručno dodijeljenih dozvola, ovaj korisnik će imati i dozvole "
+"dodijeljene gurpama kojima pripada."
+
+#: .\contrib\auth\models.py:208
+msgid "user permissions"
+msgstr "korisničke dozvole"
+
+#: .\contrib\auth\models.py:212 .\contrib\comments\models.py:50
+#: .\contrib\comments\models.py:168
+msgid "user"
+msgstr "korisnik"
+
+#: .\contrib\auth\models.py:213
+msgid "users"
+msgstr "korisnici"
+
+#: .\contrib\auth\models.py:394
+msgid "message"
+msgstr "poruka"
+
+#: .\contrib\auth\views.py:79
+msgid "Logged out"
+msgstr "Odjavljen"
+
+#: .\contrib\auth\management\commands\createsuperuser.py:23
+#: .\core\validators.py:120 .\forms\fields.py:428
+msgid "Enter a valid e-mail address."
+msgstr "Unesite važeću email adresu."
+
+#: .\contrib\comments\admin.py:12
+msgid "Content"
+msgstr "Sadržaj"
+
+#: .\contrib\comments\admin.py:15
+msgid "Metadata"
+msgstr "Metapodaci"
+
+#: .\contrib\comments\admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "oznaka"
+msgstr[1] "oznake"
+msgstr[2] "oznaka"
+
+#: .\contrib\comments\admin.py:41
+msgid "Flag selected comments"
+msgstr "Označite izabrane komentare"
+
+#: .\contrib\comments\admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "odobren"
+msgstr[1] "odobrena"
+msgstr[2] "odobreno"
+
+#: .\contrib\comments\admin.py:46
+msgid "Approve selected comments"
+msgstr "Odobri izabrane komentare"
+
+#: .\contrib\comments\admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "uklonjen"
+msgstr[1] "uklonjena"
+msgstr[2] "uklonjeno"
+
+#: .\contrib\comments\admin.py:51
+msgid "Remove selected comments"
+msgstr "Obriši izabrane komentare"
+
+#: .\contrib\comments\admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 komentar je uspješno %(action)s."
+msgstr[1] "%(count)s komentara su uspješno %(action)s."
+msgstr[2] "%(count)s komentara su uspješno %(action)s."
+
+#: .\contrib\comments\feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr "Komentari na sajtu %(site_name)s"
+
+#: .\contrib\comments\feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr "Skoriji komentari na sajtu %(site_name)s"
+
+#: .\contrib\comments\forms.py:93
+msgid "Name"
+msgstr "Ime"
+
+#: .\contrib\comments\forms.py:94
+msgid "Email address"
+msgstr "Email adresa"
+
+#: .\contrib\comments\forms.py:95 .\contrib\flatpages\admin.py:8
+#: .\contrib\flatpages\models.py:7 .\db\models\fields\__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
+#: .\contrib\comments\forms.py:96
+msgid "Comment"
+msgstr "Komentari"
+
+#: .\contrib\comments\forms.py:175
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Pazi na jezik! Riječ „%s“ ovdje nije dozvoljena."
+msgstr[1] "Pazi na jezik! Riječi „%s“ ovdje nisu dozvoljene."
+msgstr[2] "Pazi na jezik! Riječi „%s“ ovdje nisu dozvoljene."
+
+#: .\contrib\comments\forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr "Ako bilo šta unesete u ovo polje, Vaš komentar će se smatrati spamom."
+
+#: .\contrib\comments\models.py:22 .\contrib\contenttypes\models.py:81
+msgid "content type"
+msgstr "tip sadržaja"
+
+#: .\contrib\comments\models.py:24
+msgid "object ID"
+msgstr "ID objekta"
+
+#: .\contrib\comments\models.py:52
+msgid "user's name"
+msgstr "korisnikovo ime"
+
+#: .\contrib\comments\models.py:53
+msgid "user's email address"
+msgstr "korisnikova email adresa"
+
+#: .\contrib\comments\models.py:54
+msgid "user's URL"
+msgstr "korisnikov URL"
+
+#: .\contrib\comments\models.py:56 .\contrib\comments\models.py:76
+#: .\contrib\comments\models.py:169
+msgid "comment"
+msgstr "komentar"
+
+#: .\contrib\comments\models.py:59
+msgid "date/time submitted"
+msgstr "datum/vrijeme postavljanja"
+
+#: .\contrib\comments\models.py:60 .\db\models\fields\__init__.py:896
+msgid "IP address"
+msgstr "IP adresa"
+
+#: .\contrib\comments\models.py:61
+msgid "is public"
+msgstr "javno"
+
+#: .\contrib\comments\models.py:62
+msgid ""
+"Uncheck this box to make the comment effectively disappear from the site."
+msgstr ""
+"Uklonite izbor ovog polja ako želite da poruka faktični nestane sa ovog "
+"sajta."
+
+#: .\contrib\comments\models.py:64
+msgid "is removed"
+msgstr "uklonjen"
+
+#: .\contrib\comments\models.py:65
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+"Obilježite ovu polje ako je komentar neprikladan. Poruka o uklanjanju će "
+"biti prikazana umjesto komentara."
+
+#: .\contrib\comments\models.py:77
+msgid "comments"
+msgstr "komentari"
+
+#: .\contrib\comments\models.py:119
+msgid ""
+"This comment was posted by an authenticated user and thus the name is read-"
+"only."
+msgstr ""
+"Ovaj komentar je postavio prijavljen korisnik i zato je polje sa imenom "
+"zaključano."
+
+#: .\contrib\comments\models.py:128
+msgid ""
+"This comment was posted by an authenticated user and thus the email is read-"
+"only."
+msgstr ""
+"Ovaj komentar je postavio prijavljen korisnik i zato je polje sa email  "
+"adresom zaključano."
+
+#: .\contrib\comments\models.py:153
+#, python-format
+msgid ""
+"Posted by %(user)s at %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+msgstr ""
+"Postavio %(user)s, %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+
+#: .\contrib\comments\models.py:170
+msgid "flag"
+msgstr "oznaka"
+
+#: .\contrib\comments\models.py:171
+msgid "date"
+msgstr "datum"
+
+#: .\contrib\comments\models.py:181
+msgid "comment flag"
+msgstr "oznaka komentara"
+
+#: .\contrib\comments\models.py:182
+msgid "comment flags"
+msgstr "oznake komentara"
+
+#: .\contrib\comments\templates\comments\approve.html.py:4
+msgid "Approve a comment"
+msgstr "Odobrenje komentara"
+
+#: .\contrib\comments\templates\comments\approve.html.py:7
+msgid "Really make this comment public?"
+msgstr "Da li zaista želite da označite ovaj komentar javnim?"
+
+#: .\contrib\comments\templates\comments\approve.html.py:12
+msgid "Approve"
+msgstr "Odobri"
+
+#: .\contrib\comments\templates\comments\approved.html.py:4
+msgid "Thanks for approving"
+msgstr "Hvala na odobrenju!"
+
+#: .\contrib\comments\templates\comments\approved.html.py:7
+#: .\contrib\comments\templates\comments\deleted.html.py:7
+#: .\contrib\comments\templates\comments\flagged.html.py:7
+msgid ""
+"Thanks for taking the time to improve the quality of discussion on our site"
+msgstr "Hvala na učešću u unapređenju kvaliteta diskusija na našem sajtu."
+
+#: .\contrib\comments\templates\comments\delete.html.py:4
+msgid "Remove a comment"
+msgstr "Obriši komentar"
+
+#: .\contrib\comments\templates\comments\delete.html.py:7
+msgid "Really remove this comment?"
+msgstr "Da li zaista želite da obrišete ovaj komentar?"
+
+#: .\contrib\comments\templates\comments\deleted.html.py:4
+msgid "Thanks for removing"
+msgstr "Hvala što koristite naš sajt!"
+
+#: .\contrib\comments\templates\comments\flag.html.py:4
+msgid "Flag this comment"
+msgstr "Označavanje komentara"
+
+#: .\contrib\comments\templates\comments\flag.html.py:7
+msgid "Really flag this comment?"
+msgstr "Da li zaista želite da označite ovaj komentar?"
+
+#: .\contrib\comments\templates\comments\flag.html.py:12
+msgid "Flag"
+msgstr "Označi"
+
+#: .\contrib\comments\templates\comments\flagged.html.py:4
+msgid "Thanks for flagging"
+msgstr "Hvala što ste označili komentar."
+
+#: .\contrib\comments\templates\comments\form.html.py:17
+#: .\contrib\comments\templates\comments\preview.html.py:32
+msgid "Post"
+msgstr "Postavi"
+
+#: .\contrib\comments\templates\comments\form.html.py:18
+#: .\contrib\comments\templates\comments\preview.html.py:33
+msgid "Preview"
+msgstr "Pregled"
+
+#: .\contrib\comments\templates\comments\posted.html.py:4
+msgid "Thanks for commenting"
+msgstr "Hvala na komentaru"
+
+#: .\contrib\comments\templates\comments\posted.html.py:7
+msgid "Thank you for your comment"
+msgstr "Hvala što ste ostavili svoj komentar"
+
+#: .\contrib\comments\templates\comments\preview.html.py:4
+#: .\contrib\comments\templates\comments\preview.html.py:13
+msgid "Preview your comment"
+msgstr "Pregledaj komentar"
+
+#: .\contrib\comments\templates\comments\preview.html.py:11
+msgid "Please correct the error below"
+msgid_plural "Please correct the errors below"
+msgstr[0] "Ispravite grešku dole."
+msgstr[1] "Ispravite greške dole."
+msgstr[2] "Ispravite greške dole."
+
+#: .\contrib\comments\templates\comments\preview.html.py:16
+msgid "Post your comment"
+msgstr "Postavi komentar"
+
+#: .\contrib\comments\templates\comments\preview.html.py:16
+msgid "or make changes"
+msgstr "ili izvrši izmjene"
+
+#: .\contrib\contenttypes\models.py:77
+msgid "python model class name"
+msgstr "ime python klase modela"
+
+#: .\contrib\contenttypes\models.py:82
+msgid "content types"
+msgstr "tipovi sadržaja"
+
+#: .\contrib\flatpages\admin.py:9
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Primjer: '/about/contact/'. Pazite na to da postoje i početne i završne kose "
+"crte."
+
+#: .\contrib\flatpages\admin.py:11
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Ova vrijednost može sadržati samo slova, brojke, donje crte, crtice ili kose "
+"crte."
+
+#: .\contrib\flatpages\admin.py:22
+msgid "Advanced options"
+msgstr "Napredne postavke"
+
+#: .\contrib\flatpages\models.py:8
+msgid "title"
+msgstr "naslov"
+
+#: .\contrib\flatpages\models.py:9
+msgid "content"
+msgstr "sadržaj"
+
+#: .\contrib\flatpages\models.py:10
+msgid "enable comments"
+msgstr "omogući komentare"
+
+#: .\contrib\flatpages\models.py:11
+msgid "template name"
+msgstr "naziv obrazca"
+
+#: .\contrib\flatpages\models.py:12
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Primjer: 'flatpages/contact_page.html'. Ako ovo ostavite praznim, sistem će "
+"koristiti 'flatpages/default.html'."
+
+#: .\contrib\flatpages\models.py:13
+msgid "registration required"
+msgstr "potrebna registracija"
+
+#: .\contrib\flatpages\models.py:13
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"Ako je ovo obilježeno, samo će prijavljeni korisnici moći da vide ovu "
+"stranicu."
+
+#: .\contrib\flatpages\models.py:18
+msgid "flat page"
+msgstr "flat stranica"
+
+#: .\contrib\flatpages\models.py:19
+msgid "flat pages"
+msgstr "flat stranice"
+
+#: .\contrib\formtools\wizard.py:140
+msgid ""
+"We apologize, but your form has expired. Please continue filling out the "
+"form from this page."
+msgstr ""
+"Žao nam je, ali Vaša sesija je istekla. Popunjavanje formulara nastavite na "
+"ovoj stranici."
+
+#: .\contrib\gis\db\models\fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+"Osnovno GIS polje -- mapiran je za  OpenGIS Specification Geometry tip polja."
+
+#: .\contrib\gis\db\models\fields.py:270
+msgid "Point"
+msgstr "Tačka"
+
+#: .\contrib\gis\db\models\fields.py:274
+msgid "Line string"
+msgstr "Linijska nit"
+
+#: .\contrib\gis\db\models\fields.py:278
+msgid "Polygon"
+msgstr "Poligon"
+
+#: .\contrib\gis\db\models\fields.py:282
+msgid "Multi-point"
+msgstr "Multi-point"
+
+#: .\contrib\gis\db\models\fields.py:286
+msgid "Multi-line string"
+msgstr "Višelinijska nit"
+
+#: .\contrib\gis\db\models\fields.py:290
+msgid "Multi polygon"
+msgstr "Multi poligon"
+
+#: .\contrib\gis\db\models\fields.py:294
+msgid "Geometry collection"
+msgstr "Geometrijska kolekcija"
+
+#: .\contrib\gis\forms\fields.py:17
+msgid "No geometry value provided."
+msgstr "Niste zadali parametre za geometriju."
+
+#: .\contrib\gis\forms\fields.py:18
+msgid "Invalid geometry value."
+msgstr "Neispravan parametar za geometriju."
+
+#: .\contrib\gis\forms\fields.py:19
+msgid "Invalid geometry type."
+msgstr "Nepostojeći tip geometrije."
+
+#: .\contrib\gis\forms\fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+"Došlo je do greške tokom pretvaranje geometrije u SRID geometrijskom polja "
+"obrazca."
+
+#: .\contrib\humanize\templatetags\humanize.py:19
+msgid "th"
+msgstr "-i"
+
+#: .\contrib\humanize\templatetags\humanize.py:19
+msgid "st"
+msgstr "-vi"
+
+#: .\contrib\humanize\templatetags\humanize.py:19
+msgid "nd"
+msgstr "-i"
+
+#: .\contrib\humanize\templatetags\humanize.py:19
+msgid "rd"
+msgstr "-i"
+
+#: .\contrib\humanize\templatetags\humanize.py:51
+#, python-format
+msgid "%(value).1f million"
+msgid_plural "%(value).1f million"
+msgstr[0] "%(value).1f milion"
+msgstr[1] "%(value).1f miliona"
+msgstr[2] "%(value).1f miliona"
+
+#: .\contrib\humanize\templatetags\humanize.py:54
+#, python-format
+msgid "%(value).1f billion"
+msgid_plural "%(value).1f billion"
+msgstr[0] "%(value).1f milijarda"
+msgstr[1] "%(value).1f milijarde"
+msgstr[2] "%(value).1f milijardi"
+
+#: .\contrib\humanize\templatetags\humanize.py:57
+#, python-format
+msgid "%(value).1f trillion"
+msgid_plural "%(value).1f trillion"
+msgstr[0] "%(value).1f trilion"
+msgstr[1] "%(value).1f triliona"
+msgstr[2] "%(value).1f triliona"
+
+#: .\contrib\humanize\templatetags\humanize.py:73
+msgid "one"
+msgstr "jedan"
+
+#: .\contrib\humanize\templatetags\humanize.py:73
+msgid "two"
+msgstr "dva"
+
+#: .\contrib\humanize\templatetags\humanize.py:73
+msgid "three"
+msgstr "tri"
+
+#: .\contrib\humanize\templatetags\humanize.py:73
+msgid "four"
+msgstr "četiri"
+
+#: .\contrib\humanize\templatetags\humanize.py:73
+msgid "five"
+msgstr "pet"
+
+#: .\contrib\humanize\templatetags\humanize.py:73
+msgid "six"
+msgstr "šest"
+
+#: .\contrib\humanize\templatetags\humanize.py:73
+msgid "seven"
+msgstr "sedam"
+
+#: .\contrib\humanize\templatetags\humanize.py:73
+msgid "eight"
+msgstr "osam"
+
+#: .\contrib\humanize\templatetags\humanize.py:73
+msgid "nine"
+msgstr "devet"
+
+#: .\contrib\humanize\templatetags\humanize.py:93
+msgid "today"
+msgstr "deset"
+
+#: .\contrib\humanize\templatetags\humanize.py:95
+msgid "tomorrow"
+msgstr "sutra"
+
+#: .\contrib\humanize\templatetags\humanize.py:97
+msgid "yesterday"
+msgstr "jučer"
+
+#: .\contrib\localflavor\ar\forms.py:28
+msgid "Enter a postal code in the format NNNN or ANNNNAAA."
+msgstr "Unesite poštanski broj u formatu NNNN ili ANNNNAAA."
+
+#: .\contrib\localflavor\ar\forms.py:50 .\contrib\localflavor\br\forms.py:97
+#: .\contrib\localflavor\br\forms.py:136 .\contrib\localflavor\pe\forms.py:24
+#: .\contrib\localflavor\pe\forms.py:52
+msgid "This field requires only numbers."
+msgstr "Ovo polje mora sadržati samo brojke."
+
+#: .\contrib\localflavor\ar\forms.py:51
+msgid "This field requires 7 or 8 digits."
+msgstr "Ovo polje mora sadržati 7 ili 8 cifara"
+
+#: .\contrib\localflavor\ar\forms.py:80
+msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
+msgstr "Unestie važeći CUIT u formatu XX-XXXXXXXX-X or XXXXXXXXXXXX."
+
+#: .\contrib\localflavor\ar\forms.py:81
+msgid "Invalid CUIT."
+msgstr "Nevažeći CUIT"
+
+#: .\contrib\localflavor\at\at_states.py:5
+msgid "Burgenland"
+msgstr "Burgenland"
+
+#: .\contrib\localflavor\at\at_states.py:6
+msgid "Carinthia"
+msgstr "Karintija"
+
+#: .\contrib\localflavor\at\at_states.py:7
+msgid "Lower Austria"
+msgstr "Donja Austrija"
+
+#: .\contrib\localflavor\at\at_states.py:8
+msgid "Upper Austria"
+msgstr "Gornja Austrija"
+
+#: .\contrib\localflavor\at\at_states.py:9
+msgid "Salzburg"
+msgstr "Salcburg"
+
+#: .\contrib\localflavor\at\at_states.py:10
+msgid "Styria"
+msgstr "Stirija"
+
+#: .\contrib\localflavor\at\at_states.py:11
+msgid "Tyrol"
+msgstr "Tirol"
+
+#: .\contrib\localflavor\at\at_states.py:12
+msgid "Vorarlberg"
+msgstr "Voralber"
+
+#: .\contrib\localflavor\at\at_states.py:13
+msgid "Vienna"
+msgstr "Beč"
+
+#: .\contrib\localflavor\at\forms.py:20 .\contrib\localflavor\ch\forms.py:17
+#: .\contrib\localflavor\no\forms.py:13
+msgid "Enter a zip code in the format XXXX."
+msgstr "Unesite poštanski broj u formatu XXXX."
+
+#: .\contrib\localflavor\at\forms.py:48
+msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
+msgstr ""
+"Unesite važeći austrijski broj socijalnog osiguranja u formatu XXXX XXXXXX."
+
+#: .\contrib\localflavor\au\forms.py:17
+msgid "Enter a 4 digit post code."
+msgstr "Unesite četvorocifreni poštanski broj"
+
+#: .\contrib\localflavor\br\forms.py:22
+msgid "Enter a zip code in the format XXXXX-XXX."
+msgstr "Unesite poštanski broj u formatu XXXXX-XXX."
+
+#: .\contrib\localflavor\br\forms.py:31
+msgid "Phone numbers must be in XX-XXXX-XXXX format."
+msgstr "Broj telefona mora biti u formatu XX-XXXX-XXXX."
+
+#: .\contrib\localflavor\br\forms.py:59
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
+msgstr "Odaberite postojeću brazilsku državu. Ta država nije među ponuđenima."
+
+#: .\contrib\localflavor\br\forms.py:95
+msgid "Invalid CPF number."
+msgstr "Nevažeći CPF broj"
+
+#: .\contrib\localflavor\br\forms.py:96
+msgid "This field requires at most 11 digits or 14 characters."
+msgstr "Polje zahtijeva najviše 11 cifri ili 14 znamenki."
+
+#: .\contrib\localflavor\br\forms.py:135
+msgid "Invalid CNPJ number."
+msgstr "Neispravan CNPJ broj."
+
+#: .\contrib\localflavor\br\forms.py:137
+msgid "This field requires at least 14 digits"
+msgstr "Polje zahtijeva najmanje 14 cifri"
+
+#: .\contrib\localflavor\ca\forms.py:25
+msgid "Enter a postal code in the format XXX XXX."
+msgstr "Unesite poštanski broj u formtu XXX XXX."
+
+#: .\contrib\localflavor\ca\forms.py:96
+msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
+msgstr "Unesite ispravan kanadski Social Insurance broj u XXX-XXX-XXX formatu."
+
+#: .\contrib\localflavor\ch\ch_states.py:5
+msgid "Aargau"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:6
+msgid "Appenzell Innerrhoden"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:7
+msgid "Appenzell Ausserrhoden"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:8
+msgid "Basel-Stadt"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:9
+msgid "Basel-Land"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:10
+msgid "Berne"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:11
+msgid "Fribourg"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:12
+msgid "Geneva"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:13
+msgid "Glarus"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:14
+msgid "Graubuenden"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:15
+msgid "Jura"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:16
+msgid "Lucerne"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:17
+msgid "Neuchatel"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:18
+msgid "Nidwalden"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:19
+msgid "Obwalden"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:20
+msgid "Schaffhausen"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:21
+msgid "Schwyz"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:22
+msgid "Solothurn"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:23
+msgid "St. Gallen"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:24
+msgid "Thurgau"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:25
+msgid "Ticino"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:26
+msgid "Uri"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:27
+msgid "Valais"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:28
+msgid "Vaud"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:29
+msgid "Zug"
+msgstr ""
+
+#: .\contrib\localflavor\ch\ch_states.py:30
+msgid "Zurich"
+msgstr ""
+
+#: .\contrib\localflavor\ch\forms.py:65
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr ""
+"Unesite ispravan broj švicarske lične karte ili pasoša oblika X1234567<0 ili "
+"u 1234567890 formatu."
+
+#: .\contrib\localflavor\cl\forms.py:30
+msgid "Enter a valid Chilean RUT."
+msgstr "Unesite ispravan čileanski RUT."
+
+#: .\contrib\localflavor\cl\forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr "Unesite ispravan čileanski RUT. Format je XX.XXX.XXX-X."
+
+#: .\contrib\localflavor\cl\forms.py:32
+msgid "The Chilean RUT is not valid."
+msgstr "Čileanski RUT nije ispravan."
+
+#: .\contrib\localflavor\cz\cz_regions.py:8
+msgid "Prague"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:9
+msgid "Central Bohemian Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:10
+msgid "South Bohemian Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:11
+msgid "Pilsen Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:12
+msgid "Carlsbad Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:13
+msgid "Usti Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:14
+msgid "Liberec Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:15
+msgid "Hradec Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:16
+msgid "Pardubice Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:17
+msgid "Vysocina Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:18
+msgid "South Moravian Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:19
+msgid "Olomouc Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:20
+msgid "Zlin Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\cz_regions.py:21
+msgid "Moravian-Silesian Region"
+msgstr ""
+
+#: .\contrib\localflavor\cz\forms.py:28 .\contrib\localflavor\sk\forms.py:30
+msgid "Enter a postal code in the format XXXXX or XXX XX."
+msgstr "Unesite poštanski broj u formatu XXXXX ili XX XX."
+
+#: .\contrib\localflavor\cz\forms.py:48
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Unesite datum rođenja u formatu XXXXXX/XXXX ili XXXXXXXXXX."
+
+#: .\contrib\localflavor\cz\forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr "Neispravan parametar Pol; ispravne vrijednosti su 'f' i 'm'"
+
+#: .\contrib\localflavor\cz\forms.py:50
+msgid "Enter a valid birth number."
+msgstr "Unesite ispravan broj rođendana."
+
+#: .\contrib\localflavor\cz\forms.py:107
+msgid "Enter a valid IC number."
+msgstr "Unsite ispravan IC broj."
+
+#: .\contrib\localflavor\de\de_states.py:5
+msgid "Baden-Wuerttemberg"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:6
+msgid "Bavaria"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:7
+msgid "Berlin"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:8
+msgid "Brandenburg"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:9
+msgid "Bremen"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:10
+msgid "Hamburg"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:11
+msgid "Hessen"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:12
+msgid "Mecklenburg-Western Pomerania"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:13
+msgid "Lower Saxony"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:14
+msgid "North Rhine-Westphalia"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:15
+msgid "Rhineland-Palatinate"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:16
+msgid "Saarland"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:17
+msgid "Saxony"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:18
+msgid "Saxony-Anhalt"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:19
+msgid "Schleswig-Holstein"
+msgstr ""
+
+#: .\contrib\localflavor\de\de_states.py:20
+msgid "Thuringia"
+msgstr ""
+
+#: .\contrib\localflavor\de\forms.py:15 .\contrib\localflavor\fi\forms.py:13
+#: .\contrib\localflavor\fr\forms.py:16
+msgid "Enter a zip code in the format XXXXX."
+msgstr "Unesite poštanski broj u formatu XXXXX."
+
+#: .\contrib\localflavor\de\forms.py:42
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr ""
+"Unesite ispravan broj njemačke identifikacijske kartice u XXXXXXXXXXX-"
+"XXXXXXX-XXXXXXX-X formatu."
+
+#: .\contrib\localflavor\es\es_provinces.py:5
+msgid "Arava"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:6
+msgid "Albacete"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:7
+msgid "Alacant"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:8
+msgid "Almeria"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:9
+msgid "Avila"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:10
+msgid "Badajoz"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:11
+msgid "Illes Balears"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:12
+msgid "Barcelona"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:13
+msgid "Burgos"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:14
+msgid "Caceres"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:15
+msgid "Cadiz"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:16
+msgid "Castello"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:17
+msgid "Ciudad Real"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:18
+msgid "Cordoba"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:19
+msgid "A Coruna"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:20
+msgid "Cuenca"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:21
+msgid "Girona"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:22
+msgid "Granada"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:23
+msgid "Guadalajara"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:24
+msgid "Guipuzkoa"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:25
+msgid "Huelva"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:26
+msgid "Huesca"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:27
+msgid "Jaen"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:28
+msgid "Leon"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:29
+msgid "Lleida"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:30
+#: .\contrib\localflavor\es\es_regions.py:17
+msgid "La Rioja"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:31
+msgid "Lugo"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:32
+#: .\contrib\localflavor\es\es_regions.py:18
+msgid "Madrid"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:33
+msgid "Malaga"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:34
+msgid "Murcia"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:35
+msgid "Navarre"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:36
+msgid "Ourense"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:37
+msgid "Asturias"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:38
+msgid "Palencia"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:39
+msgid "Las Palmas"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:40
+msgid "Pontevedra"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:41
+msgid "Salamanca"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:42
+msgid "Santa Cruz de Tenerife"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:43
+#: .\contrib\localflavor\es\es_regions.py:11
+msgid "Cantabria"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:44
+msgid "Segovia"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:45
+msgid "Seville"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:46
+msgid "Soria"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:47
+msgid "Tarragona"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:48
+msgid "Teruel"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:49
+msgid "Toledo"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:50
+msgid "Valencia"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:51
+msgid "Valladolid"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:52
+msgid "Bizkaia"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:53
+msgid "Zamora"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:54
+msgid "Zaragoza"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:55
+msgid "Ceuta"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_provinces.py:56
+msgid "Melilla"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:5
+msgid "Andalusia"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:6
+msgid "Aragon"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:7
+msgid "Principality of Asturias"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:8
+msgid "Balearic Islands"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:9
+msgid "Basque Country"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:10
+msgid "Canary Islands"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:12
+msgid "Castile-La Mancha"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:13
+msgid "Castile and Leon"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:14
+msgid "Catalonia"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:15
+msgid "Extremadura"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:16
+msgid "Galicia"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:19
+msgid "Region of Murcia"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:20
+msgid "Foral Community of Navarre"
+msgstr ""
+
+#: .\contrib\localflavor\es\es_regions.py:21
+msgid "Valencian Community"
+msgstr ""
+
+#: .\contrib\localflavor\es\forms.py:20
+msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
+msgstr "Unesite ispravan poštanski broj u nizu i formatu 01XXX - 52XXX."
+
+#: .\contrib\localflavor\es\forms.py:40
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+"Unesite ispravan telefonski broj u jednom od formata 6XXXXXXXX, 8XXXXXXXX "
+"ili 9XXXXXXXX."
+
+#: .\contrib\localflavor\es\forms.py:67
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr "Unesite ispravan NIF, NIE ili CIF."
+
+#: .\contrib\localflavor\es\forms.py:68
+msgid "Please enter a valid NIF or NIE."
+msgstr "Unesite ispravan NIF ili NIE."
+
+#: .\contrib\localflavor\es\forms.py:69
+msgid "Invalid checksum for NIF."
+msgstr "Neispravan checksum za NIF."
+
+#: .\contrib\localflavor\es\forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr "Neispravan checksum za NIE."
+
+#: .\contrib\localflavor\es\forms.py:71
+msgid "Invalid checksum for CIF."
+msgstr "Neispravan checksum za CIF."
+
+#: .\contrib\localflavor\es\forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr ""
+"Unesite isravan broj bankovnog računa u obliku XXXX-XXXX-XX-XXXXXXXXXX."
+
+#: .\contrib\localflavor\es\forms.py:144
+msgid "Invalid checksum for bank account number."
+msgstr "Neispravan checksum za broj bankovnog računa."
+
+#: .\contrib\localflavor\fi\forms.py:29
+msgid "Enter a valid Finnish social security number."
+msgstr "Unesite ispravni finski identifikacijski broj."
+
+#: .\contrib\localflavor\fr\forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Broj telefona mora biti u formatu 0X XX XX XX XX."
+
+#: .\contrib\localflavor\id\forms.py:28
+msgid "Enter a valid post code"
+msgstr "Unesite ispravni poštansku kod"
+
+#: .\contrib\localflavor\id\forms.py:68 .\contrib\localflavor\nl\forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Unesite ispravan telefonski broj"
+
+#: .\contrib\localflavor\id\forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Unesite ispravan broj automobilske tablice"
+
+#: .\contrib\localflavor\id\forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Unesite ispravan NIK/KTP broj"
+
+#: .\contrib\localflavor\id\id_choices.py:9
+#: .\contrib\localflavor\id\id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:10
+#: .\contrib\localflavor\id\id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:11
+#: .\contrib\localflavor\id\id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:12
+#: .\contrib\localflavor\id\id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:13
+#: .\contrib\localflavor\id\id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:14
+#: .\contrib\localflavor\id\id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:15
+#: .\contrib\localflavor\id\id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:19
+#: .\contrib\localflavor\id\id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:20
+#: .\contrib\localflavor\id\id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:21
+#: .\contrib\localflavor\id\id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:22
+#: .\contrib\localflavor\id\id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:24
+#: .\contrib\localflavor\id\id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:25
+#: .\contrib\localflavor\id\id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:26
+#: .\contrib\localflavor\id\id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:27
+#: .\contrib\localflavor\id\id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:28
+#: .\contrib\localflavor\id\id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:33
+#: .\contrib\localflavor\id\id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:34
+#: .\contrib\localflavor\id\id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:35
+#: .\contrib\localflavor\id\id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:36
+#: .\contrib\localflavor\id\id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:37
+#: .\contrib\localflavor\id\id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:39
+#: .\contrib\localflavor\id\id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:40
+#: .\contrib\localflavor\id\id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:41
+#: .\contrib\localflavor\id\id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: .\contrib\localflavor\id\id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:17
+msgid "Dublin"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:18
+msgid "Fermanagh"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:27
+msgid "Louth"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:28
+msgid "Mayo"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:29
+msgid "Meath"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: .\contrib\localflavor\ie\ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: .\contrib\localflavor\in_\forms.py:15
+msgid "Enter a zip code in the format XXXXXXX."
+msgstr "Unesite zip kod u formatu XXXXXXX."
+
+#: .\contrib\localflavor\is_\forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr ""
+"Unesite ispravan islandski identifikacijski broj. Format je XXXXXX-XXXX."
+
+#: .\contrib\localflavor\is_\forms.py:19
+msgid "The Icelandic identification number is not valid."
+msgstr "Islanski identifikacijski broj nije ispravan."
+
+#: .\contrib\localflavor\it\forms.py:15
+msgid "Enter a valid zip code."
+msgstr "Unesite ispravnu zip adresu."
+
+#: .\contrib\localflavor\it\forms.py:44
+msgid "Enter a valid Social Security number."
+msgstr "Unesite ispravan Social Security broj."
+
+#: .\contrib\localflavor\it\forms.py:69
+msgid "Enter a valid VAT number."
+msgstr "Unesite ispravan VAT broj."
+
+#: .\contrib\localflavor\jp\forms.py:16
+msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
+msgstr "Unesite poštanski broj u formatu XXXXXXX ili XXX-XXXX."
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:4
+msgid "Hokkaido"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:5
+msgid "Aomori"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:6
+msgid "Iwate"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:7
+msgid "Miyagi"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:8
+msgid "Akita"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:9
+msgid "Yamagata"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:10
+msgid "Fukushima"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:11
+msgid "Ibaraki"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:12
+msgid "Tochigi"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:13
+msgid "Gunma"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:14
+msgid "Saitama"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:15
+msgid "Chiba"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:16
+msgid "Tokyo"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:17
+msgid "Kanagawa"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:18
+msgid "Yamanashi"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:19
+msgid "Nagano"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:20
+msgid "Niigata"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:21
+msgid "Toyama"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:22
+msgid "Ishikawa"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:23
+msgid "Fukui"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:24
+msgid "Gifu"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:25
+msgid "Shizuoka"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:26
+msgid "Aichi"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:27
+msgid "Mie"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:28
+msgid "Shiga"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:29
+msgid "Kyoto"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:30
+msgid "Osaka"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:31
+msgid "Hyogo"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:32
+msgid "Nara"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:33
+msgid "Wakayama"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:34
+msgid "Tottori"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:35
+msgid "Shimane"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:36
+msgid "Okayama"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:37
+msgid "Hiroshima"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:38
+msgid "Yamaguchi"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:39
+msgid "Tokushima"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:40
+msgid "Kagawa"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:41
+msgid "Ehime"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:42
+msgid "Kochi"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:43
+msgid "Fukuoka"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:44
+msgid "Saga"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:45
+msgid "Nagasaki"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:46
+msgid "Kumamoto"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:47
+msgid "Oita"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:48
+msgid "Miyazaki"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:49
+msgid "Kagoshima"
+msgstr ""
+
+#: .\contrib\localflavor\jp\jp_prefectures.py:50
+msgid "Okinawa"
+msgstr ""
+
+#: .\contrib\localflavor\kw\forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Unesite ispravan kuvajtski Civil ID broj"
+
+#: .\contrib\localflavor\mx\mx_states.py:12
+msgid "Aguascalientes"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:13
+msgid "Baja California"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:14
+msgid "Baja California Sur"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:15
+msgid "Campeche"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:16
+msgid "Chihuahua"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:17
+msgid "Chiapas"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:18
+msgid "Coahuila"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:19
+msgid "Colima"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:20
+msgid "Distrito Federal"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:21
+msgid "Durango"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:22
+msgid "Guerrero"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:23
+msgid "Guanajuato"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:24
+msgid "Hidalgo"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:25
+msgid "Jalisco"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:26
+msgid "Estado de México"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:27
+msgid "Michoacán"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:28
+msgid "Morelos"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:29
+msgid "Nayarit"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:30
+msgid "Nuevo León"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:31
+msgid "Oaxaca"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:32
+msgid "Puebla"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:33
+msgid "Querétaro"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:34
+msgid "Quintana Roo"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:35
+msgid "Sinaloa"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:36
+msgid "San Luis Potosí"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:37
+msgid "Sonora"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:38
+msgid "Tabasco"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:39
+msgid "Tamaulipas"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:40
+msgid "Tlaxcala"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:41
+msgid "Veracruz"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:42
+msgid "Yucatán"
+msgstr ""
+
+#: .\contrib\localflavor\mx\mx_states.py:43
+msgid "Zacatecas"
+msgstr ""
+
+#: .\contrib\localflavor\nl\forms.py:22
+msgid "Enter a valid postal code"
+msgstr "Unesite ispravnu poštansku adresu"
+
+#: .\contrib\localflavor\nl\forms.py:79
+msgid "Enter a valid SoFi number"
+msgstr "Unesite ispravan SoFi broj"
+
+#: .\contrib\localflavor\nl\nl_provinces.py:4
+msgid "Drenthe"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:5
+msgid "Flevoland"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:6
+msgid "Friesland"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:7
+msgid "Gelderland"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:8
+msgid "Groningen"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:9
+msgid "Limburg"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:10
+msgid "Noord-Brabant"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:11
+msgid "Noord-Holland"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:12
+msgid "Overijssel"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:13
+msgid "Utrecht"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:14
+msgid "Zeeland"
+msgstr ""
+
+#: .\contrib\localflavor\nl\nl_provinces.py:15
+msgid "Zuid-Holland"
+msgstr ""
+
+#: .\contrib\localflavor\no\forms.py:34
+msgid "Enter a valid Norwegian social security number."
+msgstr "Unesite ispravan norveški jedinstveni matični broj građana."
+
+#: .\contrib\localflavor\pe\forms.py:25
+msgid "This field requires 8 digits."
+msgstr "Polje zahtijeva 8 cifri."
+
+#: .\contrib\localflavor\pe\forms.py:53
+msgid "This field requires 11 digits."
+msgstr "Polje zahtijeva 11 cifri."
+
+#: .\contrib\localflavor\pl\forms.py:38
+msgid "National Identification Number consists of 11 digits."
+msgstr "National Identification Number sastoji se od 11 cifri."
+
+#: .\contrib\localflavor\pl\forms.py:39
+msgid "Wrong checksum for the National Identification Number."
+msgstr "Pogrešan checksum za National Identification Number."
+
+#: .\contrib\localflavor\pl\forms.py:71
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr "Unesite poreski broj (NIP) u formatu XXX-XXX-XX-XX ili XX-XX-XXX-XXX."
+
+#: .\contrib\localflavor\pl\forms.py:72
+msgid "Wrong checksum for the Tax Number (NIP)."
+msgstr "Pogrešan checksum za Tax Number (NIP)."
+
+#: .\contrib\localflavor\pl\forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr ""
+"National Business Register Number (REGON) sastoji se od 9 ili 14 cifri."
+
+#: .\contrib\localflavor\pl\forms.py:110
+msgid "Wrong checksum for the National Business Register Number (REGON)."
+msgstr "Pogrešan checksum za National Business Register Number (REGON)."
+
+#: .\contrib\localflavor\pl\forms.py:148
+msgid "Enter a postal code in the format XX-XXX."
+msgstr "Unesite ispravnu poštansku adresu u formatu XX-XXX."
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:8
+msgid "Lower Silesia"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:9
+msgid "Kuyavia-Pomerania"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:10
+msgid "Lublin"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:11
+msgid "Lubusz"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:12
+msgid "Lodz"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:13
+msgid "Lesser Poland"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:14
+msgid "Masovia"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:15
+msgid "Opole"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:16
+msgid "Subcarpatia"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:17
+msgid "Podlasie"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:18
+msgid "Pomerania"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:19
+msgid "Silesia"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:20
+msgid "Swietokrzyskie"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:21
+msgid "Warmia-Masuria"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:22
+msgid "Greater Poland"
+msgstr ""
+
+#: .\contrib\localflavor\pl\pl_voivodeships.py:23
+msgid "West Pomerania"
+msgstr ""
+
+#: .\contrib\localflavor\pt\forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Unesite zup kod u formatu XXXX-XXX"
+
+#: .\contrib\localflavor\pt\forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "Telefonski brojevi moraju imati 9 cifri, ili početi sa + ili 00."
+
+#: .\contrib\localflavor\ro\forms.py:19
+msgid "Enter a valid CIF."
+msgstr "Unesite ispravan CIF."
+
+#: .\contrib\localflavor\ro\forms.py:56
+msgid "Enter a valid CNP."
+msgstr "Unesite ispravan CNP."
+
+#: .\contrib\localflavor\ro\forms.py:141
+msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
+msgstr "Unesite ispravan IBAN ROXX-XXXX-XXXX-XXXX-XXXX-XXXX formatu"
+
+#: .\contrib\localflavor\ro\forms.py:171
+msgid "Phone numbers must be in XXXX-XXXXXX format."
+msgstr "Telefonski brojevi moraju biti u XXXX-XXXXXX formatu."
+
+#: .\contrib\localflavor\ro\forms.py:194
+msgid "Enter a valid postal code in the format XXXXXX"
+msgstr "Unesite ispravan poštanski broj u formatu XXXXXX"
+
+#: .\contrib\localflavor\se\forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Unesite ispravan švedski organizacijski broj."
+
+#: .\contrib\localflavor\se\forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Unesite ispravan švedski identifikacijski broj"
+
+#: .\contrib\localflavor\se\forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Koordinatni brojevi nisu dozvoljeni."
+
+#: .\contrib\localflavor\se\forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Unesite švedsku poštansku adresu u formatu XXXXX."
+
+#: .\contrib\localflavor\se\se_counties.py:15
+msgid "Stockholm"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:19
+msgid "Södermanland"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:23
+msgid "Kalmar"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:24
+msgid "Gotland"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:25
+msgid "Blekinge"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:27
+msgid "Halland"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:32
+msgid "Dalarna"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: .\contrib\localflavor\se\se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:8
+msgid "Banska Bystrica"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:9
+msgid "Banska Stiavnica"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:10
+msgid "Bardejov"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:11
+msgid "Banovce nad Bebravou"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:12
+msgid "Brezno"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:13
+msgid "Bratislava I"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:14
+msgid "Bratislava II"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:15
+msgid "Bratislava III"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:16
+msgid "Bratislava IV"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:17
+msgid "Bratislava V"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:18
+msgid "Bytca"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:19
+msgid "Cadca"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:20
+msgid "Detva"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:21
+msgid "Dolny Kubin"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:22
+msgid "Dunajska Streda"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:23
+msgid "Galanta"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:24
+msgid "Gelnica"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:25
+msgid "Hlohovec"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:26
+msgid "Humenne"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:27
+msgid "Ilava"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:28
+msgid "Kezmarok"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:29
+msgid "Komarno"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:30
+msgid "Kosice I"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:31
+msgid "Kosice II"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:32
+msgid "Kosice III"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:33
+msgid "Kosice IV"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:34
+msgid "Kosice - okolie"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:35
+msgid "Krupina"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:36
+msgid "Kysucke Nove Mesto"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:37
+msgid "Levice"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:38
+msgid "Levoca"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:39
+msgid "Liptovsky Mikulas"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:40
+msgid "Lucenec"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:41
+msgid "Malacky"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:42
+msgid "Martin"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:43
+msgid "Medzilaborce"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:44
+msgid "Michalovce"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:45
+msgid "Myjava"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:46
+msgid "Namestovo"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:47
+msgid "Nitra"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:48
+msgid "Nove Mesto nad Vahom"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:49
+msgid "Nove Zamky"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:50
+msgid "Partizanske"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:51
+msgid "Pezinok"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:52
+msgid "Piestany"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:53
+msgid "Poltar"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:54
+msgid "Poprad"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:55
+msgid "Povazska Bystrica"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:56
+msgid "Presov"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:57
+msgid "Prievidza"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:58
+msgid "Puchov"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:59
+msgid "Revuca"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:60
+msgid "Rimavska Sobota"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:61
+msgid "Roznava"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:62
+msgid "Ruzomberok"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:63
+msgid "Sabinov"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:64
+msgid "Senec"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:65
+msgid "Senica"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:66
+msgid "Skalica"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:67
+msgid "Snina"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:68
+msgid "Sobrance"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:69
+msgid "Spisska Nova Ves"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:70
+msgid "Stara Lubovna"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:71
+msgid "Stropkov"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:72
+msgid "Svidnik"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:73
+msgid "Sala"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:74
+msgid "Topolcany"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:75
+msgid "Trebisov"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:76
+msgid "Trencin"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:77
+msgid "Trnava"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:78
+msgid "Turcianske Teplice"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:79
+msgid "Tvrdosin"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:80
+msgid "Velky Krtis"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:81
+msgid "Vranov nad Toplou"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:82
+msgid "Zlate Moravce"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:83
+msgid "Zvolen"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:84
+msgid "Zarnovica"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:85
+msgid "Ziar nad Hronom"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_districts.py:86
+msgid "Zilina"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_regions.py:8
+msgid "Banska Bystrica region"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_regions.py:9
+msgid "Bratislava region"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_regions.py:10
+msgid "Kosice region"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_regions.py:11
+msgid "Nitra region"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_regions.py:12
+msgid "Presov region"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_regions.py:13
+msgid "Trencin region"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_regions.py:14
+msgid "Trnava region"
+msgstr ""
+
+#: .\contrib\localflavor\sk\sk_regions.py:15
+msgid "Zilina region"
+msgstr ""
+
+#: .\contrib\localflavor\uk\forms.py:21
+msgid "Enter a valid postcode."
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:11
+msgid "Bedfordshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:12
+msgid "Buckinghamshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:14
+msgid "Cheshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:15
+msgid "Cornwall and Isles of Scilly"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:16
+msgid "Cumbria"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:17
+msgid "Derbyshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:18
+msgid "Devon"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:19
+msgid "Dorset"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:20
+msgid "Durham"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:21
+msgid "East Sussex"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:22
+msgid "Essex"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:23
+msgid "Gloucestershire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:24
+msgid "Greater London"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:25
+msgid "Greater Manchester"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:26
+msgid "Hampshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:27
+msgid "Hertfordshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:28
+msgid "Kent"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:29
+msgid "Lancashire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:30
+msgid "Leicestershire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:31
+msgid "Lincolnshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:32
+msgid "Merseyside"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:33
+msgid "Norfolk"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:34
+msgid "North Yorkshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:35
+msgid "Northamptonshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:36
+msgid "Northumberland"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:37
+msgid "Nottinghamshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:38
+msgid "Oxfordshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:39
+msgid "Shropshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:40
+msgid "Somerset"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:41
+msgid "South Yorkshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:42
+msgid "Staffordshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:43
+msgid "Suffolk"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:44
+msgid "Surrey"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:45
+msgid "Tyne and Wear"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:46
+msgid "Warwickshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:47
+msgid "West Midlands"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:48
+msgid "West Sussex"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:49
+msgid "West Yorkshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:50
+msgid "Wiltshire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:51
+msgid "Worcestershire"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:55
+msgid "County Antrim"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:56
+msgid "County Armagh"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:57
+msgid "County Down"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:58
+msgid "County Fermanagh"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:59
+msgid "County Londonderry"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:60
+msgid "County Tyrone"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:64
+msgid "Clwyd"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:65
+msgid "Dyfed"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:66
+msgid "Gwent"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:67
+msgid "Gwynedd"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:68
+msgid "Mid Glamorgan"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:69
+msgid "Powys"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:70
+msgid "South Glamorgan"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:71
+msgid "West Glamorgan"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:75
+msgid "Borders"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:76
+msgid "Central Scotland"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:77
+msgid "Dumfries and Galloway"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:78
+msgid "Fife"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:79
+msgid "Grampian"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:80
+msgid "Highland"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:81
+msgid "Lothian"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:82
+msgid "Orkney Islands"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:83
+msgid "Shetland Islands"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:84
+msgid "Strathclyde"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:85
+msgid "Tayside"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:86
+msgid "Western Isles"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:90
+msgid "England"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:91
+msgid "Northern Ireland"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:92
+msgid "Scotland"
+msgstr ""
+
+#: .\contrib\localflavor\uk\uk_regions.py:93
+msgid "Wales"
+msgstr ""
+
+#: .\contrib\localflavor\us\forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr "Unesite poštansku adresu u formatu XXXXX ili XXXXX-XXXX"
+
+#: .\contrib\localflavor\us\forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Broj telefona mora biti u formatu XX-XXXX-XXXX."
+
+#: .\contrib\localflavor\us\forms.py:55
+msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+msgstr "Unesite ispravan američki Social Security broj u XXX-XX-XXXX formatu."
+
+#: .\contrib\localflavor\us\forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Unesite U.S. državu ili teritorij"
+
+#: .\contrib\localflavor\us\models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Država u SAD (dva velika slova)"
+
+#: .\contrib\localflavor\us\models.py:17
+msgid "Phone number"
+msgstr "Broj telefona"
+
+#: .\contrib\localflavor\uy\forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "Unestie važeći CUIT u formatu XX-XXXXXXXX-X or XXXXXXXXXXXX."
+
+#: .\contrib\localflavor\uy\forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Unsite ispravan IC broj."
+
+#: .\contrib\localflavor\za\forms.py:21
+msgid "Enter a valid South African ID number"
+msgstr "Unesite ispravan južnoafrički ID broj"
+
+#: .\contrib\localflavor\za\forms.py:55
+msgid "Enter a valid South African postal code"
+msgstr "Unesite ispravnu južnoafričku poštansku adresu"
+
+#: .\contrib\localflavor\za\za_provinces.py:4
+msgid "Eastern Cape"
+msgstr ""
+
+#: .\contrib\localflavor\za\za_provinces.py:5
+msgid "Free State"
+msgstr ""
+
+#: .\contrib\localflavor\za\za_provinces.py:6
+msgid "Gauteng"
+msgstr ""
+
+#: .\contrib\localflavor\za\za_provinces.py:7
+msgid "KwaZulu-Natal"
+msgstr ""
+
+#: .\contrib\localflavor\za\za_provinces.py:8
+msgid "Limpopo"
+msgstr ""
+
+#: .\contrib\localflavor\za\za_provinces.py:9
+msgid "Mpumalanga"
+msgstr ""
+
+#: .\contrib\localflavor\za\za_provinces.py:10
+msgid "Northern Cape"
+msgstr ""
+
+#: .\contrib\localflavor\za\za_provinces.py:11
+msgid "North West"
+msgstr ""
+
+#: .\contrib\localflavor\za\za_provinces.py:12
+msgid "Western Cape"
+msgstr ""
+
+#: .\contrib\messages\tests\base.py:101
+msgid "lazy message"
+msgstr "lijena poruka"
+
+#: .\contrib\redirects\models.py:7
+msgid "redirect from"
+msgstr "preusmjeren sa"
+
+#: .\contrib\redirects\models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Ovo mora biti apsolutna putanja bez imena domena. Na primjer: '/events/"
+"search/'."
+
+#: .\contrib\redirects\models.py:9
+msgid "redirect to"
+msgstr "preusmjeri ka"
+
+#: .\contrib\redirects\models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Ovo može biti ili apsolutna putanja (kao gore) ili pun URL koji počinje sa "
+"'http://'."
+
+#: .\contrib\redirects\models.py:13
+msgid "redirect"
+msgstr "preusmjeravanje"
+
+#: .\contrib\redirects\models.py:14
+msgid "redirects"
+msgstr "preusmjeravanja"
+
+#: .\contrib\sessions\models.py:45
+msgid "session key"
+msgstr "ključ sesije"
+
+#: .\contrib\sessions\models.py:47
+msgid "session data"
+msgstr "podaci sesije"
+
+#: .\contrib\sessions\models.py:48
+msgid "expire date"
+msgstr "datum isteka"
+
+#: .\contrib\sessions\models.py:53
+msgid "session"
+msgstr "sesija"
+
+#: .\contrib\sessions\models.py:54
+msgid "sessions"
+msgstr "sesije"
+
+#: .\contrib\sites\models.py:32
+msgid "domain name"
+msgstr "ime domena"
+
+#: .\contrib\sites\models.py:33
+msgid "display name"
+msgstr "prikazano ime"
+
+#: .\contrib\sites\models.py:39
+msgid "sites"
+msgstr "sajtovi"
+
+#: .\core\validators.py:20 .\forms\fields.py:66
+msgid "Enter a valid value."
+msgstr "Unesite ispravnu vrijednost."
+
+#: .\core\validators.py:87 .\forms\fields.py:529
+msgid "Enter a valid URL."
+msgstr "Unesite ispravan URL."
+
+#: .\core\validators.py:89 .\forms\fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Ovaj URL izgleda ne vodi nikuda."
+
+#: .\core\validators.py:123 .\forms\fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Unesite ispravan „slug“, koji se sastoji od slova, brojki, donjih crta ili "
+"crtica."
+
+#: .\core\validators.py:126 .\forms\fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Unesite ispravnu IPv4 adresu."
+
+#: .\core\validators.py:129 .\db\models\fields\__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Unesite samo brojke razdvojene zapetama."
+
+#: .\core\validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+"Pobrinite se da je ova vrijednost %(limit_value)s (trenutno je %(show_value)s)."
+
+#: .\core\validators.py:153 .\forms\fields.py:205 .\forms\fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Ova vrijednost mora da bude manja ili jednaka %(limit_value)s."
+
+#: .\core\validators.py:158 .\forms\fields.py:206 .\forms\fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Ova vrijednost mora biti veća ili jednaka %(limit_value)s."
+
+#: .\core\validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Pobrinite se da ova vrijednost ima najmanje %(limit_value)d znamenki (trenutno ima %"
+"(show_value)d)."
+
+#: .\core\validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Pobrinite se da ova vrijednost ima najviše %(limit_value)d znamenki (ima %"
+"(show_value)d)."
+
+#: .\db\models\base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s mora da bude jedinstven za %(date_field)s %(lookup)s."
+
+#: .\db\models\base.py:837 .\db\models\base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s sa ovom vrijednošću %(field_label)s već postoji."
+
+#: .\db\models\fields\__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Vrijednost %r nije dozvoljen izbor."
+
+#: .\db\models\fields\__init__.py:64
+msgid "This field cannot be null."
+msgstr "Ovo polje ne može ostati prazno."
+
+#: .\db\models\fields\__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Ovo polje ne može biti prazno."
+
+#: .\db\models\fields\__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Polje tipa: %(field_type)s"
+
+#: .\db\models\fields\__init__.py:451 .\db\models\fields\__init__.py:852
+#: .\db\models\fields\__init__.py:961 .\db\models\fields\__init__.py:972
+#: .\db\models\fields\__init__.py:999
+msgid "Integer"
+msgstr "Cijeo broj"
+
+#: .\db\models\fields\__init__.py:455 .\db\models\fields\__init__.py:850
+msgid "This value must be an integer."
+msgstr "Ova vrijednost mora biti cijelobrojna."
+
+#: .\db\models\fields\__init__.py:490
+msgid "This value must be either True or False."
+msgstr "Ova vrijednost mora biti True ili False."
+
+#: .\db\models\fields\__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Bulova vrijednost (True ili False)"
+
+#: .\db\models\fields\__init__.py:539 .\db\models\fields\__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "String (najviše %(max_length)s znakova)"
+
+#: .\db\models\fields\__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Cijeli brojevi razdvojeni zapetama"
+
+#: .\db\models\fields\__init__.py:581
+msgid "Date (without time)"
+msgstr "Datum (bez vremena)"
+
+#: .\db\models\fields\__init__.py:585
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Unesite ispravan datum u formatu GGGG-MM-DD."
+
+#: .\db\models\fields\__init__.py:586
+#, python-format
+msgid "Invalid date: %s"
+msgstr "Neispravan datum: %s"
+
+#: .\db\models\fields\__init__.py:667
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
+msgstr ""
+"Unesite ispravan datum/vrijeme u formatu GGGG-MM-DD ČČ:MM[:ss[.uuuuuu]."
+
+#: .\db\models\fields\__init__.py:669
+msgid "Date (with time)"
+msgstr "Datum (sa vremenom)"
+
+#: .\db\models\fields\__init__.py:735
+msgid "This value must be a decimal number."
+msgstr "Ova vrijednost mora biti decimalni broj"
+
+#: .\db\models\fields\__init__.py:737
+msgid "Decimal number"
+msgstr "Decimalni broj"
+
+#: .\db\models\fields\__init__.py:792
+msgid "E-mail address"
+msgstr "Email adresa"
+
+#: .\db\models\fields\__init__.py:799 .\db\models\fields\files.py:220
+#: .\db\models\fields\files.py:331
+msgid "File path"
+msgstr "Putanja fajla"
+
+#: .\db\models\fields\__init__.py:822
+msgid "This value must be a float."
+msgstr "Ova vrijednost mora biti broj sa klizećom zapetom"
+
+#: .\db\models\fields\__init__.py:824
+msgid "Floating point number"
+msgstr "Broj sa pokrenom zapetom"
+
+#: .\db\models\fields\__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Big (8 bajtni) integer"
+
+#: .\db\models\fields\__init__.py:912
+msgid "This value must be either None, True or False."
+msgstr "Ova vrijednost mora biti ili None, ili True, ili False."
+
+#: .\db\models\fields\__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Bulova vrijednost (True, False ili None)"
+
+#: .\db\models\fields\__init__.py:1005
+msgid "Text"
+msgstr "Tekst"
+
+#: .\db\models\fields\__init__.py:1021
+msgid "Time"
+msgstr "Vrijeme"
+
+#: .\db\models\fields\__init__.py:1025
+msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
+msgstr "Unesite ispravno vrijeme u formatu ČČ:MM[:ss[.uuuuuu]]."
+
+#: .\db\models\fields\__init__.py:1109
+msgid "XML text"
+msgstr "XML tekst"
+
+#: .\db\models\fields\related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Model %(model)s sa pk %(pk)r ne postoji."
+
+#: .\db\models\fields\related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Strani ključ (tip određen povezanim poljem)"
+
+#: .\db\models\fields\related.py:918
+msgid "One-to-one relationship"
+msgstr "Jedan-na-jedan odnos"
+
+#: .\db\models\fields\related.py:980
+msgid "Many-to-many relationship"
+msgstr "Više-na-više odsnos"
+
+#: .\db\models\fields\related.py:1000
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"Držite „Control“, ili „Command“ na Mac-u da biste obilježili više od jedne "
+"stavke."
+
+#: .\db\models\fields\related.py:1061
+#, python-format
+msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "Unesite ispravan %(self)s IDs. Crijednost %(value)r je neispravna."
+msgstr[1] "Unesite ispravan %(self)s IDs. Vrijednosti %(value)r su neispravne."
+msgstr[2] "Unesite ispravan %(self)s IDs. Vrijednosti %(value)r su neispravne."
+
+#: .\forms\fields.py:65
+msgid "This field is required."
+msgstr "Ovo polje se mora popuniti."
+
+#: .\forms\fields.py:204
+msgid "Enter a whole number."
+msgstr "Unesite cijeo broj."
+
+#: .\forms\fields.py:235 .\forms\fields.py:256
+msgid "Enter a number."
+msgstr "Unesite broj."
+
+#: .\forms\fields.py:259
+#, python-format
+msgid "Ensure that there are no more than %s digits in total."
+msgstr "Ne smije biti ukupno više od %s cifara. Provjerite."
+
+#: .\forms\fields.py:260
+#, python-format
+msgid "Ensure that there are no more than %s decimal places."
+msgstr "Ne smije biti ukupno više od %s decimalnih mijesta. Provjerite."
+
+#: .\forms\fields.py:261
+#, python-format
+msgid "Ensure that there are no more than %s digits before the decimal point."
+msgstr "Ne smije biti ukupno više od %s cifara prije zapete. Provjerite."
+
+#: .\forms\fields.py:323 .\forms\fields.py:838
+msgid "Enter a valid date."
+msgstr "Unesite ispravan datum."
+
+#: .\forms\fields.py:351 .\forms\fields.py:839
+msgid "Enter a valid time."
+msgstr "Unesite ispravno vrijeme"
+
+#: .\forms\fields.py:377
+msgid "Enter a valid date/time."
+msgstr "Unesite ispravan datum/vrijeme."
+
+#: .\forms\fields.py:435
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Fajl nije prebačen. Provjerite tip enkodiranja formulara."
+
+#: .\forms\fields.py:436
+msgid "No file was submitted."
+msgstr "Fajl nije prebačen."
+
+#: .\forms\fields.py:437
+msgid "The submitted file is empty."
+msgstr "Prebačen fajl je prazan."
+
+#: .\forms\fields.py:438
+#, python-format
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+"Naziv fajla mora da sadrži bar %(max)d slovnih mijesta (trenutno ima %"
+"(length)d)."
+
+#: .\forms\fields.py:473
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Prebacite ispravan fajl. Fajl koji je prebačen ili nije slika, ili je "
+"oštećen."
+
+#: .\forms\fields.py:596 .\forms\fields.py:671
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr ""
+"%(value)s nije među ponuđenim vrijednostima. Odaberite jednu od ponuđenih."
+
+#: .\forms\fields.py:672 .\forms\fields.py:734 .\forms\models.py:1007
+msgid "Enter a list of values."
+msgstr "Unesite listu vrijednosti."
+
+#: .\forms\formsets.py:298 .\forms\formsets.py:300
+msgid "Order"
+msgstr "Redoslijed"
+
+#: .\forms\models.py:567
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Ispravite dupli sadržaj za polja: %(field)s."
+
+#: .\forms\models.py:571
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+"Ispravite dupli sadržaj za polja: %(field)s, koji mora da bude jedinstven."
+
+#: .\forms\models.py:577
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+"Ispravite dupli sadržaj za polja: %(field_name)s, koji mora da bude "
+"jedinstven za %(lookup)s u %(date_field)s."
+
+#: .\forms\models.py:585
+msgid "Please correct the duplicate values below."
+msgstr "Ispravite duple vrijednosti dole."
+
+#: .\forms\models.py:860
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr "Strani ključ se nije poklopio sa instancom roditeljskog ključa."
+
+#: .\forms\models.py:926
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+"Odabrana vrijednost nije među ponuđenima. Odaberite jednu od ponuđenih."
+
+#: .\forms\models.py:1008
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "%s nije među ponuđenim vrijednostima. Odaberite jednu od ponuđenih."
+
+#: .\forms\models.py:1010
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr "„%s“ nije ispravna vrijednost za primarni ključ."
+
+#: .\template\defaultfilters.py:781
+msgid "yes,no,maybe"
+msgstr "da,ne,možda"
+
+#: .\template\defaultfilters.py:812
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] "%(size)d bajt"
+msgstr[1] "%(size)d bajta"
+msgstr[2] "%(size)d bajtova"
+
+#: .\template\defaultfilters.py:814
+#, python-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: .\template\defaultfilters.py:816
+#, python-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: .\template\defaultfilters.py:817
+#, python-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: .\utils\dateformat.py:42
+msgid "p.m."
+msgstr "po p."
+
+#: .\utils\dateformat.py:43
+msgid "a.m."
+msgstr "prije p."
+
+#: .\utils\dateformat.py:48
+msgid "PM"
+msgstr "PM"
+
+#: .\utils\dateformat.py:49
+msgid "AM"
+msgstr "AM"
+
+#: .\utils\dateformat.py:98
+msgid "midnight"
+msgstr "ponoć"
+
+#: .\utils\dateformat.py:100
+msgid "noon"
+msgstr "podne"
+
+#: .\utils\dates.py:6
+msgid "Monday"
+msgstr "ponedjeljak"
+
+#: .\utils\dates.py:6
+msgid "Tuesday"
+msgstr "utorak"
+
+#: .\utils\dates.py:6
+msgid "Wednesday"
+msgstr "srijeda"
+
+#: .\utils\dates.py:6
+msgid "Thursday"
+msgstr "četvrtak"
+
+#: .\utils\dates.py:6
+msgid "Friday"
+msgstr "petak"
+
+#: .\utils\dates.py:7
+msgid "Saturday"
+msgstr "subota"
+
+#: .\utils\dates.py:7
+msgid "Sunday"
+msgstr "nedjelja"
+
+#: .\utils\dates.py:10
+msgid "Mon"
+msgstr "pon."
+
+#: .\utils\dates.py:10
+msgid "Tue"
+msgstr "uto."
+
+#: .\utils\dates.py:10
+msgid "Wed"
+msgstr "sri."
+
+#: .\utils\dates.py:10
+msgid "Thu"
+msgstr "čet."
+
+#: .\utils\dates.py:10
+msgid "Fri"
+msgstr "pet."
+
+#: .\utils\dates.py:11
+msgid "Sat"
+msgstr "sub."
+
+#: .\utils\dates.py:11
+msgid "Sun"
+msgstr "ned."
+
+#: .\utils\dates.py:18
+msgid "January"
+msgstr "januar"
+
+#: .\utils\dates.py:18
+msgid "February"
+msgstr "februar"
+
+#: .\utils\dates.py:18 .\utils\dates.py:31
+msgid "March"
+msgstr "mart"
+
+#: .\utils\dates.py:18 .\utils\dates.py:31
+msgid "April"
+msgstr "april"
+
+#: .\utils\dates.py:18 .\utils\dates.py:31
+msgid "May"
+msgstr "maj"
+
+#: .\utils\dates.py:18 .\utils\dates.py:31
+msgid "June"
+msgstr "juni"
+
+#: .\utils\dates.py:19 .\utils\dates.py:31
+msgid "July"
+msgstr "juli"
+
+#: .\utils\dates.py:19
+msgid "August"
+msgstr "august"
+
+#: .\utils\dates.py:19
+msgid "September"
+msgstr "septembar"
+
+#: .\utils\dates.py:19
+msgid "October"
+msgstr "oktobar"
+
+#: .\utils\dates.py:19
+msgid "November"
+msgstr "novembar"
+
+#: .\utils\dates.py:20
+msgid "December"
+msgstr "decembar"
+
+#: .\utils\dates.py:23
+msgid "jan"
+msgstr "jan."
+
+#: .\utils\dates.py:23
+msgid "feb"
+msgstr "feb."
+
+#: .\utils\dates.py:23
+msgid "mar"
+msgstr "mar."
+
+#: .\utils\dates.py:23
+msgid "apr"
+msgstr "apr."
+
+#: .\utils\dates.py:23
+msgid "may"
+msgstr "maj."
+
+#: .\utils\dates.py:23
+msgid "jun"
+msgstr "jun."
+
+#: .\utils\dates.py:24
+msgid "jul"
+msgstr "jul."
+
+#: .\utils\dates.py:24
+msgid "aug"
+msgstr "aug."
+
+#: .\utils\dates.py:24
+msgid "sep"
+msgstr "sep."
+
+#: .\utils\dates.py:24
+msgid "oct"
+msgstr "okt."
+
+#: .\utils\dates.py:24
+msgid "nov"
+msgstr "nov."
+
+#: .\utils\dates.py:24
+msgid "dec"
+msgstr "dec."
+
+#: .\utils\dates.py:31
+msgid "Jan."
+msgstr "jan."
+
+#: .\utils\dates.py:31
+msgid "Feb."
+msgstr "feb."
+
+#: .\utils\dates.py:32
+msgid "Aug."
+msgstr "aug."
+
+#: .\utils\dates.py:32
+msgid "Sept."
+msgstr "sept."
+
+#: .\utils\dates.py:32
+msgid "Oct."
+msgstr "okt."
+
+#: .\utils\dates.py:32
+msgid "Nov."
+msgstr "nov."
+
+#: .\utils\dates.py:32
+msgid "Dec."
+msgstr "dec."
+
+#: .\utils\text.py:130
+msgid "or"
+msgstr "ili"
+
+#: .\utils\timesince.py:21
+msgid "year"
+msgid_plural "years"
+msgstr[0] "godina"
+msgstr[1] "godine"
+msgstr[2] "godina"
+
+#: .\utils\timesince.py:22
+msgid "month"
+msgid_plural "months"
+msgstr[0] "mjesec"
+msgstr[1] "mjeseca"
+msgstr[2] "mjeseci"
+
+#: .\utils\timesince.py:23
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "nedelja"
+msgstr[1] "nedelje"
+msgstr[2] "nedelja"
+
+#: .\utils\timesince.py:24
+msgid "day"
+msgid_plural "days"
+msgstr[0] "dan"
+msgstr[1] "dana"
+msgstr[2] "dana"
+
+#: .\utils\timesince.py:25
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "sat"
+msgstr[1] "sata"
+msgstr[2] "sati"
+
+#: .\utils\timesince.py:26
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minut"
+msgstr[1] "minute"
+msgstr[2] "minuta"
+
+#: .\utils\timesince.py:45
+msgid "minutes"
+msgstr "minuta"
+
+#: .\utils\timesince.py:50
+#, python-format
+msgid "%(number)d %(type)s"
+msgstr "%(number)d %(type)s"
+
+#: .\utils\timesince.py:56
+#, python-format
+msgid ", %(number)d %(type)s"
+msgstr ", %(number)d %(type)s"
+
+#: .\utils\translation\trans_real.py:512
+msgid "DATE_FORMAT"
+msgstr "j. N Y."
+
+#: .\utils\translation\trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j. N. Y. G:i T"
+
+#: .\utils\translation\trans_real.py:514
+msgid "TIME_FORMAT"
+msgstr "G:i"
+
+#: .\utils\translation\trans_real.py:535
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y."
+
+#: .\utils\translation\trans_real.py:536
+msgid "MONTH_DAY_FORMAT"
+msgstr "j. F"
+
+#: .\views\generic\create_update.py:115
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s je uspješno kreiran."
+
+#: .\views\generic\create_update.py:158
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s je uspješno ažuriran."
+
+#: .\views\generic\create_update.py:201
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s je obrisan."
+
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "Jedno ili više polja %(fieldname)s u %(name)s: %(obj)s"
+
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "Jedno ili više polja %(fieldname)s u %(name)s"
+
+#~ msgid "Old password:"
+#~ msgstr "Stara lozinka:"
+
+#~ msgid "Relation to parent model"
+#~ msgstr "Veza sa roditeljskim modelom"
+
+#~ msgid "Add user"
+#~ msgstr "Dodaj korisnika"
+
+#~ msgid "Comment moderation queue"
+#~ msgstr "Komentari koji čekaju na odobrenje"
+
+#~ msgid "No comments to moderate"
+#~ msgstr "Nema komentara na čekanju"
+
+#~ msgid "Email"
+#~ msgstr "Imejl adresa"
+
+#~ msgid "Authenticated?"
+#~ msgstr "Prijavljen?"
+
+#~ msgid "IP Address"
+#~ msgstr "IP adresa"
+
+#~ msgid "Date posted"
+#~ msgstr "Datum postavljanja"
+
+#~ msgid "yes"
+#~ msgstr "da"
+
+#~ msgid "no"
+#~ msgstr "ne"
Binary file web/lib/django/conf/locale/ca/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/ca/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/ca/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-07 15:04+0200\n"
+"POT-Creation-Date: 2009-11-30 11:19+0100\n"
 "PO-Revision-Date: 2009-03-24 13:28+0100\n"
 "Last-Translator: Django Catalan Group <django-cat@googlegroups.com>\n"
 "Language-Team: Catalan <ca@li.org>\n"
@@ -223,7 +223,7 @@
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Eliminat/s %(count)d %(items)s satisfactòriament."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1025
+#: contrib/admin/actions.py:67 contrib/admin/options.py:1033
 msgid "Are you sure?"
 msgstr "Esteu segurs?"
 
@@ -266,15 +266,15 @@
 msgid "This year"
 msgstr "Aquest any"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
 msgid "Yes"
 msgstr "Si"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
 msgid "No"
 msgstr "No"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
 msgid "Unknown"
 msgstr "Desconegut"
 
@@ -310,61 +310,61 @@
 msgid "log entries"
 msgstr "entrades del registre"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:134 contrib/admin/options.py:148
 msgid "None"
 msgstr "cap"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:521
 #, python-format
 msgid "Changed %s."
 msgstr "Modificat %s."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
+#: contrib/admin/options.py:521 contrib/admin/options.py:531
+#: contrib/comments/templates/comments/preview.html:16 forms/models.py:384
+#: forms/models.py:596
 msgid "and"
 msgstr "i"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:526
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Afegit %(name)s \"%(object)s\""
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:530
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Modificat %(list)s per a %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:535
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Eliminat %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:539
 msgid "No fields changed."
 msgstr "Cap camp canviat."
 
-#: contrib/admin/options.py:598 contrib/auth/admin.py:67
+#: contrib/admin/options.py:601 contrib/auth/admin.py:67
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "El/la %(name)s \"%(obj)s\".ha estat afegit/da amb èxit."
 
-#: contrib/admin/options.py:602 contrib/admin/options.py:635
+#: contrib/admin/options.py:605 contrib/admin/options.py:638
 #: contrib/auth/admin.py:75
 msgid "You may edit it again below."
 msgstr "Podeu editar-lo de nou a baix."
 
-#: contrib/admin/options.py:612 contrib/admin/options.py:645
+#: contrib/admin/options.py:615 contrib/admin/options.py:648
 #, python-format
 msgid "You may add another %s below."
 msgstr "Podeu afegir un altre %s a baix."
 
-#: contrib/admin/options.py:633
+#: contrib/admin/options.py:636
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "S'ha modificat amb èxit el/la %(name)s \"%(obj)s."
 
-#: contrib/admin/options.py:641
+#: contrib/admin/options.py:644
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -372,43 +372,43 @@
 "S'ha afegit exitosament el/la %(name)s \"%(obj)s\". Pot editar-lo de nou "
 "abaix."
 
-#: contrib/admin/options.py:772
+#: contrib/admin/options.py:777
 #, python-format
 msgid "Add %s"
 msgstr "Afegir %s"
 
-#: contrib/admin/options.py:803 contrib/admin/options.py:1003
+#: contrib/admin/options.py:809 contrib/admin/options.py:1011
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "No existèix cap objecte %(name)s amb la clau primària %(key)r."
 
-#: contrib/admin/options.py:860
+#: contrib/admin/options.py:866
 #, python-format
 msgid "Change %s"
 msgstr "Modificar %s"
 
-#: contrib/admin/options.py:904
+#: contrib/admin/options.py:910
 msgid "Database error"
 msgstr "Error de base de dades"
 
-#: contrib/admin/options.py:940
+#: contrib/admin/options.py:946
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s %(name)s s'ha modificat amb èxit."
 msgstr[1] "%(count)s %(name)s s'han modificat amb èxit."
 
-#: contrib/admin/options.py:1018
+#: contrib/admin/options.py:1026
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "El/la %(name)s \"%(obj)s\" ha estat eliminat amb èxit."
 
-#: contrib/admin/options.py:1054
+#: contrib/admin/options.py:1063
 #, python-format
 msgid "Change history: %s"
 msgstr "Modificar històric: %s"
 
-#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
 #: contrib/auth/forms.py:80
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
@@ -417,11 +417,11 @@
 "Si us plau, introduïu un nom d'usuari i contrasenya vàlids. Tingueu en "
 "compte que tots dos camps son sensibles a majúscules i minúscules."
 
-#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Si us plau, identifiqueu-vos de nou doncs la vostra sessió ha expirat."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:299 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -430,29 +430,29 @@
 "'cookies' (galetes). Si us plau, habiliteu les 'cookies', recarregueu "
 "aquesta pàgina i proveu-ho de nou. "
 
-#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
+#: contrib/admin/sites.py:315 contrib/admin/sites.py:321
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Els noms d'usuari no poden contenir el caracter '@'."
 
-#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
 "La vostra adreça de correu no és el vostre nom d'usuari. Provi '%s' en tot "
 "cas."
 
-#: contrib/admin/sites.py:360
+#: contrib/admin/sites.py:374
 msgid "Site administration"
 msgstr "Lloc administratiu"
 
-#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:388 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Iniciar sessió"
 
-#: contrib/admin/sites.py:417
+#: contrib/admin/sites.py:433
 #, python-format
 msgid "%s administration"
 msgstr "Administració de %s"
@@ -467,27 +467,27 @@
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "Un o més %(fieldname)s en %(name)s:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:72
 msgid "Date:"
 msgstr "Data:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:72
 msgid "Time:"
 msgstr "Hora:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:96
 msgid "Currently:"
 msgstr "Actualment:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:96
 msgid "Change:"
 msgstr "Modificar:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:125
 msgid "Lookup"
 msgstr "Cercar"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:237
 msgid "Add Another"
 msgstr "Afegir un altre"
 
@@ -502,7 +502,7 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
+#: contrib/admin/templates/admin/base.html:54
 #: contrib/admin/templates/admin/change_form.html:17
 #: contrib/admin/templates/admin/change_list.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:6
@@ -555,18 +555,18 @@
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:27
 msgid "Welcome,"
 msgstr "Benvingut/da,"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Documentació"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:40
 #: contrib/admin/templates/admin/auth/user/change_password.html:14
 #: contrib/admin/templates/admin/auth/user/change_password.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -574,7 +574,7 @@
 msgid "Change password"
 msgstr "Canviar contrasenya"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 msgid "Log out"
@@ -600,7 +600,7 @@
 
 #: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Veure al lloc"
 
@@ -670,9 +670,9 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
-"Esteu segurs de voler esborrar els/les %(object_name)s seleccionats?Tots "
+"Esteu segurs de voler esborrar els/les %(object_name)s seleccionats? Tots "
 "aquests objectes i els seus elements relacionats s'esborraran:"
 
 #: contrib/admin/templates/admin/filter.html:2
@@ -736,7 +736,6 @@
 msgstr "Usuari"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Acció"
 
@@ -985,7 +984,7 @@
 msgid "Reset my password"
 msgstr "Restablir la meva contrasenya"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:304
 msgid "All dates"
 msgstr "Totes les dates"
 
@@ -1007,145 +1006,144 @@
 msgid "template"
 msgstr "plantilla"
 
-#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "etiqueta:"
 
-#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "filtre:"
 
-#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "vista:"
 
-#: contrib/admindocs/views.py:187
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "No s'ha pogut trobar l'aplicació %r"
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "El model %(model_name)r no s'ha trobat en l'aplicació %(app_label)r"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "l'objecte relacionat `%(app_label)s.%(data_type)s`"
 
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:225
-#: contrib/admindocs/views.py:230 contrib/admindocs/views.py:244
-#: contrib/admindocs/views.py:258 contrib/admindocs/views.py:263
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "model:"
 
-#: contrib/admindocs/views.py:221 contrib/admindocs/views.py:253
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "objectes relacionats `%(app_label)s.%(object_name)s`"
 
-#: contrib/admindocs/views.py:225 contrib/admindocs/views.py:258
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "tots %s"
 
-#: contrib/admindocs/views.py:230 contrib/admindocs/views.py:263
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "nombre de %s"
 
-#: contrib/admindocs/views.py:268
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "Camps en objectes %s"
 
-#: contrib/admindocs/views.py:331 contrib/admindocs/views.py:342
-#: contrib/admindocs/views.py:344 contrib/admindocs/views.py:350
-#: contrib/admindocs/views.py:351 contrib/admindocs/views.py:353
+#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
+#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
+#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
 msgid "Integer"
 msgstr "Enter"
 
-#: contrib/admindocs/views.py:332
+#: contrib/admindocs/views.py:335
 msgid "Boolean (Either True or False)"
 msgstr "Booleà (Verdader o Fals)"
 
-#: contrib/admindocs/views.py:333 contrib/admindocs/views.py:352
+#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
 #, python-format
 msgid "String (up to %(max_length)s)"
 msgstr "Cadena (de fins a %(max_length)s)"
 
-#: contrib/admindocs/views.py:334
+#: contrib/admindocs/views.py:337
 msgid "Comma-separated integers"
 msgstr "Enters separats per comes"
 
-#: contrib/admindocs/views.py:335
+#: contrib/admindocs/views.py:338
 msgid "Date (without time)"
 msgstr "Data (sense hora)"
 
-#: contrib/admindocs/views.py:336
+#: contrib/admindocs/views.py:339
 msgid "Date (with time)"
 msgstr "Data (amb hora)"
 
-#: contrib/admindocs/views.py:337
+#: contrib/admindocs/views.py:340
 msgid "Decimal number"
 msgstr "Número decimal"
 
-#: contrib/admindocs/views.py:338
+#: contrib/admindocs/views.py:341
 msgid "E-mail address"
 msgstr "Adreça de correu electrònic"
 
-#: contrib/admindocs/views.py:339 contrib/admindocs/views.py:340
-#: contrib/admindocs/views.py:343
+#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
+#: contrib/admindocs/views.py:346
 msgid "File path"
 msgstr "Ruta del fitxer"
 
-#: contrib/admindocs/views.py:341
+#: contrib/admindocs/views.py:344
 msgid "Floating point number"
 msgstr "Número amb punt de coma flotant"
 
-#: contrib/admindocs/views.py:345 contrib/comments/models.py:60
+#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
 msgid "IP address"
 msgstr "Adreça IP"
 
-#: contrib/admindocs/views.py:347
+#: contrib/admindocs/views.py:350
 msgid "Boolean (Either True, False or None)"
 msgstr "Booleà (Verdader, Fals o 'None' (cap))"
 
-#: contrib/admindocs/views.py:348
+#: contrib/admindocs/views.py:351
 msgid "Relation to parent model"
 msgstr "Relació amb el model pare"
 
-#: contrib/admindocs/views.py:349
+#: contrib/admindocs/views.py:352
 msgid "Phone number"
 msgstr "Número de telèfon"
 
-#: contrib/admindocs/views.py:354
+#: contrib/admindocs/views.py:357
 msgid "Text"
 msgstr "Text"
 
-#: contrib/admindocs/views.py:355
+#: contrib/admindocs/views.py:358
 msgid "Time"
 msgstr "Hora"
 
-#: contrib/admindocs/views.py:356 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
+#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
 #: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
-#: contrib/admindocs/views.py:357
+#: contrib/admindocs/views.py:360
 msgid "U.S. state (two uppercase letters)"
 msgstr "Estat dels E.U.A. (dues lletres majúscules)"
 
-#: contrib/admindocs/views.py:358
+#: contrib/admindocs/views.py:361
 msgid "XML text"
 msgstr "Text XML"
 
-#: contrib/admindocs/views.py:384
+#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s no sembla ser un objecte 'urlpattern'"
@@ -1438,22 +1436,54 @@
 msgid "message"
 msgstr "missatge"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:60
 msgid "Logged out"
 msgstr "Sessió finalitzada"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Introduïu una adreça de correu vàlida."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "contingut"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "metadades"
 
+# Context problem... waitting for comments from django-i18n
+#: contrib/comments/admin.py:39
+msgid "flagged"
+msgstr "marcat"
+
+#: contrib/comments/admin.py:40
+msgid "Flag selected comments"
+msgstr "Marcar els comentaris seleccionats"
+
+#: contrib/comments/admin.py:43
+msgid "approved"
+msgstr "aprovat"
+
+#: contrib/comments/admin.py:44
+msgid "Approve selected comments"
+msgstr "Aprovar els comentaris seleccionats"
+
+#: contrib/comments/admin.py:47
+msgid "removed"
+msgstr "eliminat"
+
+#: contrib/comments/admin.py:48
+msgid "Remove selected comments"
+msgstr "Eliminar els comentaris seleccionats"
+
+#: contrib/comments/admin.py:60
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 comentari ha estat %(action)s satisfactòriament."
+msgstr[1] "%(count)s comentaris han estat %(action)s satisfactòriament."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1465,7 +1495,6 @@
 msgstr "Últims comentaris a %(site_name)s."
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "nom"
 
@@ -1474,7 +1503,6 @@
 msgstr "Adreça de correu electrònic"
 
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Comentari"
 
@@ -1606,7 +1634,6 @@
 msgstr "Realment vol fer aquest comentari públic?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Aprovar"
 
@@ -1631,7 +1658,6 @@
 msgstr "Realment vol eliminar aquest comentari?"
 
 #: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
 msgid "Remove"
 msgstr "Eliminar"
 
@@ -1666,39 +1692,6 @@
 msgid "Preview"
 msgstr "Vista prèvia"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Cua de moderació de comentaris"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "No hi ha comentaris per a moderar"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Correu electrònic"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Autentificat?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "Adreça IP"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Data d'enviament"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "si"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "no"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Gràcies per comentar"
@@ -1793,7 +1786,7 @@
 msgid "flat pages"
 msgstr "pàgines estàtiques"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:132
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -2615,6 +2608,10 @@
 msgid "Enter a valid Finnish social security number."
 msgstr "Introduïu un número vàlid de la seguretat social finlandesa."
 
+#: contrib/localflavor/fr/forms.py:30
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Els números de telèfon han de estar en el format 0X XX XX XX XX."
+
 #: contrib/localflavor/in_/forms.py:14
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Introduïu un codi zip en el format XXXXXXX."
@@ -3053,7 +3050,8 @@
 #: contrib/localflavor/pl/forms.py:109
 msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
 msgstr ""
-"El número nacional de registre de negocis (REGON) consisteix en 9 o 14 dígits."
+"El número nacional de registre de negocis (REGON) consisteix en 9 o 14 "
+"dígits."
 
 #: contrib/localflavor/pl/forms.py:110
 msgid "Wrong checksum for the National Business Register Number (REGON)."
@@ -3943,14 +3941,14 @@
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Introduïu una hora vàlida en el format HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/related.py:869
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Premeu la tecla \"Control\" -o \"Command\" en un Mac- per seleccionar més "
 "d'un valor."
 
-#: db/models/fields/related.py:894
+#: db/models/fields/related.py:930
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3962,95 +3960,95 @@
 "Si us plau, introduïu IDs de %(self)s vàlids. Els valors %(value)r són "
 "invàlids."
 
-#: forms/fields.py:54
+#: forms/fields.py:53
 msgid "This field is required."
 msgstr "Aquest camp és obligatori."
 
-#: forms/fields.py:55
+#: forms/fields.py:54
 msgid "Enter a valid value."
 msgstr "Introduïu un valor vàlid."
 
-#: forms/fields.py:138
+#: forms/fields.py:137
 #, python-format
 msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
 msgstr ""
 "Assegureu-vos de que el valor té com a màxim %(max)d caràcters (en té %"
 "(length)d)."
 
-#: forms/fields.py:139
+#: forms/fields.py:138
 #, python-format
 msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
 msgstr ""
 "Assegureu-vos de que el valor té com a mínim %(min)d caràcters (en té %"
 "(length)d)."
 
-#: forms/fields.py:166
+#: forms/fields.py:165
 msgid "Enter a whole number."
 msgstr "Introduïu un número sencer."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
+#: forms/fields.py:166 forms/fields.py:195 forms/fields.py:224
 #, python-format
 msgid "Ensure this value is less than or equal to %s."
 msgstr "Aquest valor ha de ser menor o igual a %s."
 
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
+#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
 #, python-format
 msgid "Ensure this value is greater than or equal to %s."
 msgstr "Assegureu-vos de que aquest valor sigui superior o igual a %s."
 
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:194 forms/fields.py:223
 msgid "Enter a number."
 msgstr "Introduïu un número."
 
-#: forms/fields.py:227
+#: forms/fields.py:226
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Assegureu-vos de que no hi ha més de %s dígits en total."
 
-#: forms/fields.py:228
+#: forms/fields.py:227
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Assegureu-vos de que no hi ha més de %s decimals."
 
-#: forms/fields.py:229
+#: forms/fields.py:228
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Assegureu-vos de que no hi ha més de %s dígits decimals."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:287 forms/fields.py:862
 msgid "Enter a valid date."
 msgstr "Introduïu una data vàlida."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:321 forms/fields.py:863
 msgid "Enter a valid time."
 msgstr "Introduïu una hora vàlida."
 
-#: forms/fields.py:361
+#: forms/fields.py:360
 msgid "Enter a valid date/time."
 msgstr "Introduïu una data/hora vàlides."
 
-#: forms/fields.py:447
+#: forms/fields.py:446
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr ""
 "No s'ha enviat cap fitxer. Comprovi el tipus de codificació del formulari."
 
-#: forms/fields.py:448
+#: forms/fields.py:447
 msgid "No file was submitted."
 msgstr "No s'ha enviat cap fitxer."
 
+#: forms/fields.py:448
+msgid "The submitted file is empty."
+msgstr "El fitxer enviat està buit."
+
 #: forms/fields.py:449
-msgid "The submitted file is empty."
-msgstr "El fitxer enviat està buit."
-
-#: forms/fields.py:450
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
 msgstr ""
-"Assegureu-vos de que el valor té com a màxim %(max)d caràcters "
-"(en té %(length)d)."
-
-#: forms/fields.py:483
+"Assegureu-vos de que el valor té com a màxim %(max)d caràcters (en té %"
+"(length)d)."
+
+#: forms/fields.py:482
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4058,28 +4056,28 @@
 "Envieu una imatge vàlida. El fitxer que heu enviat no era una imatge o "
 "estava corrupte."
 
-#: forms/fields.py:544
+#: forms/fields.py:543
 msgid "Enter a valid URL."
 msgstr "Introduïu una URL vàlida."
 
-#: forms/fields.py:545
+#: forms/fields.py:544
 msgid "This URL appears to be a broken link."
 msgstr "Aquesta URL sembla ser un enllaç trencat."
 
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:624 forms/fields.py:702
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Esculliu una opció vàlida. %(value)s no és una de les opcions vàlides."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
+#: forms/fields.py:703 forms/fields.py:764 forms/models.py:999
 msgid "Enter a list of values."
 msgstr "Introduïu una llista de valors."
 
-#: forms/fields.py:892
+#: forms/fields.py:891
 msgid "Enter a valid IPv4 address."
 msgstr "Introduïu una adreça IPv4 vàlida."
 
-#: forms/fields.py:902
+#: forms/fields.py:901
 msgid ""
 "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
 msgstr ""
@@ -4090,56 +4088,58 @@
 msgid "Order"
 msgstr "Ordre"
 
-#: forms/models.py:367
+#: forms/models.py:363
 #, python-format
 msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
 msgstr "El camp %(field_name)s ha de ser únic per a %(lookup)s %(date_field)s."
 
-#: forms/models.py:381 forms/models.py:389
+#: forms/models.py:377 forms/models.py:385
 #, python-format
 msgid "%(model_name)s with this %(field_label)s already exists."
 msgstr "Ja existeix %(model_name)s amb aquest %(field_label)s."
 
-#: forms/models.py:594
+#: forms/models.py:590
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Si us plau, corregiu la dada duplicada per a %(field)s."
 
-#: forms/models.py:598
+#: forms/models.py:594
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Si us plau, corregiu la dada duplicada per a %(field)s, la qual ha de ser única."
-
-#: forms/models.py:604
+msgstr ""
+"Si us plau, corregiu la dada duplicada per a %(field)s, la qual ha de ser "
+"única."
+
+#: forms/models.py:600
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
 "for the %(lookup)s in %(date_field)s."
 msgstr ""
-"Si us plau, corregiu la dada duplicada per a %(field_name)s, "
-"la qual ha de ser única per a la cerca %(lookup)s en %(date_field)s."
-
-#: forms/models.py:612
+"Si us plau, corregiu la dada duplicada per a %(field_name)s, la qual ha de "
+"ser única per a la cerca %(lookup)s en %(date_field)s."
+
+#: forms/models.py:608
 msgid "Please correct the duplicate values below."
 msgstr "Si us plau, corregiu els valors duplicats a baix."
 
-#: forms/models.py:867
+#: forms/models.py:863
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr ""
 "La clau forànea en línea no coincideix amb la clau primària de la instància "
 "del pare"
 
-#: forms/models.py:930
+#: forms/models.py:926
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr ""
 "Escolli una opció vàlida; Aquesta opció no és una de les opcions disponibles."
 
-#: forms/models.py:1004
+#: forms/models.py:1000
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Escolliu una opció vàlida; %s' no és una de les opcions vàlides."
 
-#: forms/models.py:1006
+#: forms/models.py:1002
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" no és un valor vàlid per a una clau primària."
@@ -4459,6 +4459,30 @@
 msgid "The %(verbose_name)s was deleted."
 msgstr "El %(verbose_name)s s'ha eliminat."
 
+#~ msgid "Comment moderation queue"
+#~ msgstr "Cua de moderació de comentaris"
+
+#~ msgid "No comments to moderate"
+#~ msgstr "No hi ha comentaris per a moderar"
+
+#~ msgid "Email"
+#~ msgstr "Correu electrònic"
+
+#~ msgid "Authenticated?"
+#~ msgstr "Autentificat?"
+
+#~ msgid "IP Address"
+#~ msgstr "Adreça IP"
+
+#~ msgid "Date posted"
+#~ msgstr "Data d'enviament"
+
+#~ msgid "yes"
+#~ msgstr "si"
+
+#~ msgid "no"
+#~ msgstr "no"
+
 #, fuzzy
 #~ msgid "verbose_name"
 #~ msgid_plural "verbose_name_plural"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/ca/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,30 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = r'j \de F \de Y'
+TIME_FORMAT = 'G:i:s'
+DATETIME_FORMAT = r'j \de F \de Y \a \le\s G:i'
+YEAR_MONTH_FORMAT = r'F \de\l Y'
+MONTH_DAY_FORMAT = r'j \de F'
+SHORT_DATE_FORMAT = 'd/m/Y'
+SHORT_DATETIME_FORMAT = 'd/m/Y G:i'
+FIRST_DAY_OF_WEEK = 1 # Monday
+DATE_INPUT_FORMATS = (
+    # '31/12/2009', '31/12/09'
+    '%d/%m/%Y', '%d/%m/%y'
+)
+TIME_INPUT_FORMATS = (
+    # '14:30:59', '14:30'
+    '%H:%M:%S', '%H:%M'
+)
+DATETIME_INPUT_FORMATS = (
+    '%d/%m/%Y %H:%M:%S',
+    '%d/%m/%Y %H:%M',
+    '%d/%m/%y %H:%M:%S',
+    '%d/%m/%y %H:%M',
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+NUMBER_GROUPING = 3
+
Binary file web/lib/django/conf/locale/cs/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/cs/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/cs/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -2,15 +2,15 @@
 # This file is distributed under the same license as the DJANGO package.
 # Radek Svarz <translate@svarz.cz>, 2005,
 # Tomáš Ehrlich <tomas.ehrlich@gmail.com>, 2009,
-# Vláďa Macek <macek@sandbox.cz>, 2009.
+# Vlada Macek <macek@sandbox.cz>, 2010.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-15 14:17+0200\n"
-"PO-Revision-Date: 2009-05-15 14:19+0200\n"
-"Last-Translator: Vláďa Macek <macek@sandbox.cz>\n"
+"POT-Creation-Date: 2010-04-07 13:17+0200\n"
+"PO-Revision-Date: 2010-04-07 13:47+0100\n"
+"Last-Translator: Vlada Macek <macek@sandbox.cz>\n"
 "Language-Team: Czech\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -22,218 +22,239 @@
 msgstr "arabsky"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "bulharsky"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "bengálsky"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "bulharsky"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "katalánsky"
+msgid "Bosnian"
+msgstr "bosensky"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "katalánsky"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "česky"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "welšsky"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "dánsky"
+msgid "Welsh"
+msgstr "welšsky"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "dánsky"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "německy"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "řecky"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "anglicky"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "španělsky"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "estonsky"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "argentinskou španělštinou"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "estonsky"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "baskicky"
 
-#: conf/global_settings.py:58
-msgid "Persian"
-msgstr "persky"
-
 #: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "finsky"
+msgid "Persian"
+msgstr "persky"
 
 #: conf/global_settings.py:60
+msgid "Finnish"
+msgstr "finsky"
+
+#: conf/global_settings.py:61
 msgid "French"
 msgstr "francouzsky"
 
-#: conf/global_settings.py:61
+#: conf/global_settings.py:62
+msgid "Frisian"
+msgstr "frísky"
+
+#: conf/global_settings.py:63
 msgid "Irish"
 msgstr "irsky"
 
-#: conf/global_settings.py:62
+#: conf/global_settings.py:64
 msgid "Galician"
 msgstr "galicijsky"
 
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "maďarsky"
-
-#: conf/global_settings.py:64
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "hebrejsky"
 
-#: conf/global_settings.py:65
+#: conf/global_settings.py:66
 msgid "Hindi"
 msgstr "hindsky"
 
-#: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "chorvatsky"
-
 #: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "islandsky"
+msgid "Croatian"
+msgstr "chorvatsky"
 
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "italsky"
+msgid "Hungarian"
+msgstr "maďarsky"
 
 #: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "japonsky"
+msgid "Icelandic"
+msgstr "islandsky"
 
 #: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "gruzínsky"
+msgid "Italian"
+msgstr "italsky"
 
 #: conf/global_settings.py:71
-msgid "Korean"
-msgstr "korejsky"
+msgid "Japanese"
+msgstr "japonsky"
 
 #: conf/global_settings.py:72
-msgid "Khmer"
-msgstr "khmersky"
+msgid "Georgian"
+msgstr "gruzínsky"
 
 #: conf/global_settings.py:73
+msgid "Khmer"
+msgstr "khmersky"
+
+#: conf/global_settings.py:74
 msgid "Kannada"
 msgstr "kannadsky"
 
-#: conf/global_settings.py:74
+#: conf/global_settings.py:75
+msgid "Korean"
+msgstr "korejsky"
+
+#: conf/global_settings.py:76
+msgid "Lithuanian"
+msgstr "litevsky"
+
+#: conf/global_settings.py:77
 msgid "Latvian"
 msgstr "lotyšsky"
 
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "litevsky"
-
-#: conf/global_settings.py:76
+#: conf/global_settings.py:78
 msgid "Macedonian"
 msgstr "makedonsky"
 
-#: conf/global_settings.py:77
+#: conf/global_settings.py:79
 msgid "Dutch"
 msgstr "holandsky"
 
-#: conf/global_settings.py:78
+#: conf/global_settings.py:80
 msgid "Norwegian"
 msgstr "norsky"
 
-#: conf/global_settings.py:79
+#: conf/global_settings.py:81
 msgid "Polish"
 msgstr "polsky"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:82
 msgid "Portuguese"
 msgstr "portugalsky"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
 msgid "Brazilian Portuguese"
 msgstr "brazilskou portugalštinou"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
 msgid "Romanian"
 msgstr "rumunsky"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
 msgid "Russian"
 msgstr "rusky"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
 msgid "Slovak"
 msgstr "slovensky"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
 msgid "Slovenian"
 msgstr "slovinsky"
 
-#: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "srbsky"
-
-#: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "švédsky"
-
 #: conf/global_settings.py:88
-msgid "Tamil"
-msgstr "tamilsky"
+msgid "Albanian"
+msgstr "albánsky"
 
 #: conf/global_settings.py:89
-msgid "Telugu"
-msgstr "telužsky"
+msgid "Serbian"
+msgstr "srbsky"
 
 #: conf/global_settings.py:90
-msgid "Thai"
-msgstr "thajsky"
+msgid "Serbian Latin"
+msgstr "srbskou latinou"
 
 #: conf/global_settings.py:91
-msgid "Turkish"
-msgstr "turecky"
+msgid "Swedish"
+msgstr "švédsky"
 
 #: conf/global_settings.py:92
-msgid "Ukrainian"
-msgstr "ukrajinsky"
+msgid "Tamil"
+msgstr "tamilsky"
 
 #: conf/global_settings.py:93
-msgid "Simplified Chinese"
-msgstr "zjednodušenou čínštinou"
+msgid "Telugu"
+msgstr "telužsky"
 
 #: conf/global_settings.py:94
+msgid "Thai"
+msgstr "thajsky"
+
+#: conf/global_settings.py:95
+msgid "Turkish"
+msgstr "turecky"
+
+#: conf/global_settings.py:96
+msgid "Ukrainian"
+msgstr "ukrajinsky"
+
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "vietnamsky"
+
+#: conf/global_settings.py:98
+msgid "Simplified Chinese"
+msgstr "zjednodušenou čínštinou"
+
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "tradiční čínštinou"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Úspěšně smazané: %(count)d %(items)s."
-
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1025
+msgstr "Úspěšně odstraněno: %(count)d %(items)s."
+
+#: contrib/admin/actions.py:59
+#: contrib/admin/options.py:1098
 msgid "Are you sure?"
 msgstr "Jste si jisti?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Smazat vybrané %(verbose_name_plural)s"
+msgstr "Odstranit vybrané %(verbose_name_plural)s"
 
 #: contrib/admin/filterspecs.py:44
 #, python-format
@@ -244,8 +265,10 @@
 "<h3>%s:</h3>\n"
 "<ul>\n"
 
-#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
+#: contrib/admin/filterspecs.py:75
+#: contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147
+#: contrib/admin/filterspecs.py:173
 msgid "All"
 msgstr "Vše"
 
@@ -269,37 +292,40 @@
 msgid "This year"
 msgstr "Tento rok"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147
+#: forms/widgets.py:469
 msgid "Yes"
 msgstr "Ano"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147
+#: forms/widgets.py:469
 msgid "No"
 msgstr "Ne"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154
+#: forms/widgets.py:469
 msgid "Unknown"
 msgstr "Neznámé"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:19
 msgid "Action:"
-msgstr "Akce:"
+msgstr "Operace:"
 
 #: contrib/admin/models.py:19
 msgid "action time"
-msgstr "čas akce"
+msgstr "čas operace"
 
 #: contrib/admin/models.py:22
 msgid "object id"
-msgstr "id objektu"
+msgstr "id položky"
 
 #: contrib/admin/models.py:23
 msgid "object repr"
-msgstr "reprez. objektu"
+msgstr "reprez. položky"
 
 #: contrib/admin/models.py:24
 msgid "action flag"
-msgstr "příznak akce"
+msgstr "příznak operace"
 
 #: contrib/admin/models.py:25
 msgid "change message"
@@ -313,88 +339,98 @@
 msgid "log entries"
 msgstr "položky protokolu"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:140
+#: contrib/admin/options.py:155
 msgid "None"
 msgstr "Žádný"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:559
 #, python-format
 msgid "Changed %s."
-msgstr "Záznam %s změněn."
-
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:587
+msgstr "Změněno: %s"
+
+#: contrib/admin/options.py:559
+#: contrib/admin/options.py:569
+#: contrib/comments/templates/comments/preview.html:16
+#: db/models/base.py:840
+#: forms/models.py:562
 msgid "and"
 msgstr "a"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:564
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
-msgstr "Přidán záznam \"%(object)s\" typu \"%(name)s\"."
-
-#: contrib/admin/options.py:528
+msgstr "Položka \"%(object)s\" typu %(name)s byla přidána."
+
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr "Změněn \"%(list)s\" pro záznam \"%(object)s\" typu \"%(name)s\"."
-
-#: contrib/admin/options.py:533
+msgstr "Pole \"%(list)s\" pro položku \"%(object)s\" typu %(name)s změněno/změněna."
+
+#: contrib/admin/options.py:573
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
-msgstr "Smazán záznam \"%(object)s\" typu \"%(name)s\"."
-
-#: contrib/admin/options.py:537
+msgstr "Položka \"%(object)s\" typu %(name)s byla odstraněna."
+
+#: contrib/admin/options.py:577
 msgid "No fields changed."
 msgstr "Nebyla změněna žádná pole."
 
-#: contrib/admin/options.py:598 contrib/auth/admin.py:67
+#: contrib/admin/options.py:643
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "Záznam \"%(obj)s\" typu \"%(name)s\" byl úspěšně přidán."
-
-#: contrib/admin/options.py:602 contrib/admin/options.py:635
-#: contrib/auth/admin.py:75
+msgstr "Položka \"%(obj)s\" typu %(name)s byla úspěšně přidána."
+
+#: contrib/admin/options.py:647
+#: contrib/admin/options.py:680
 msgid "You may edit it again below."
 msgstr "V úpravách můžete pokračovat níže."
 
-#: contrib/admin/options.py:612 contrib/admin/options.py:645
+#: contrib/admin/options.py:657
+#: contrib/admin/options.py:690
 #, python-format
 msgid "You may add another %s below."
-msgstr "Další záznam typu \"%s\" můžete přidat níže."
-
-#: contrib/admin/options.py:633
+msgstr "Níže můžete přidat další položku typu %s."
+
+#: contrib/admin/options.py:678
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr "Záznam \"%(obj)s\" typu \"%(name)s\" byl úspěšně změněn."
-
-#: contrib/admin/options.py:641
+msgstr "Položka \"%(obj)s\" typu %(name)s byla úspěšně změněna."
+
+#: contrib/admin/options.py:686
 #, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Záznam \"%(obj)s\" typu \"%(name)s\" byl úspěšně přidán. Níže můžete v "
-"úpravách pokračovat."
-
-#: contrib/admin/options.py:772
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "Položka \"%(obj)s\" typu %(name)s byla úspěšně přidána. Níže můžete v úpravách pokračovat."
+
+#: contrib/admin/options.py:740
+msgid "Items must be selected in order to perform actions on them. No items have been changed."
+msgstr "K provedení hromadných operací je třeba vybrat nějaké položky. Nedošlo k žádným změnám."
+
+#: contrib/admin/options.py:758
+msgid "No action selected."
+msgstr "Nebyla vybrána žádná operace."
+
+#: contrib/admin/options.py:838
 #, python-format
 msgid "Add %s"
 msgstr "%s: přidat"
 
-#: contrib/admin/options.py:803 contrib/admin/options.py:1003
+#: contrib/admin/options.py:864
+#: contrib/admin/options.py:1078
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
-msgstr "Objekt %(name)s s primárním klíčem %(key)r neexistuje."
-
-#: contrib/admin/options.py:860
+msgstr "Položka \"%(name)s\" s primárním klíčem \"%(key)r\" neexistuje."
+
+#: contrib/admin/options.py:929
 #, python-format
 msgid "Change %s"
 msgstr "%s: změnit"
 
-#: contrib/admin/options.py:904
+#: contrib/admin/options.py:974
 msgid "Database error"
 msgstr "Chyba databáze"
 
-#: contrib/admin/options.py:940
+#: contrib/admin/options.py:1010
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
@@ -402,95 +438,97 @@
 msgstr[1] "%(count)s položky %(name)s byly úspěšně změněny."
 msgstr[2] "%(count)s položek %(name)s bylo úspěšně změněno."
 
-#: contrib/admin/options.py:1018
+#: contrib/admin/options.py:1037
+#, python-format
+msgid "of %(count)d selected"
+msgid_plural "of %(count)d selected"
+msgstr[0] "z %(count)d položky vybráno."
+msgstr[1] "ze %(count)d položek vybráno."
+msgstr[2] "z %(count)d položek vybráno."
+
+#: contrib/admin/options.py:1039
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s položka vybrána."
+msgstr[1] "Všechny %(total_count)s položky vybrány."
+msgstr[2] "Vybráno všech %(total_count)s položek."
+
+#: contrib/admin/options.py:1091
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "Záznam \"%(obj)s\" typu \"%(name)s\" byl úspěšně smazán."
-
-#: contrib/admin/options.py:1054
+msgstr "Položka \"%(obj)s\" typu %(name)s byla úspěšně odstraněna."
+
+#: contrib/admin/options.py:1128
 #, python-format
 msgid "Change history: %s"
 msgstr "Historie změn: %s"
 
-#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Vložte správné uživatelské jméno a heslo (u obou položek se rozlišují malá a "
-"velká písmena)."
-
-#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:22
+#: contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
+msgstr "Vložte správné uživatelské jméno a heslo (u obou položek se rozlišují malá a velká písmena)."
+
+#: contrib/admin/sites.py:311
+#: contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Přihlaste se znovu, vaše sezení vypršelo."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Vypadá to, že váš prohlížeč nepřijímá cookies. Změňte mu toto nastavení, "
-"obnovte tuto stránku a zkuste znovu."
-
-#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
+#: contrib/admin/sites.py:318
+#: contrib/admin/views/decorators.py:47
+msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
+msgstr "Vypadá to, že váš prohlížeč nepřijímá cookies. Změňte mu toto nastavení, obnovte tuto stránku a požadavek opakujte."
+
+#: contrib/admin/sites.py:334
+#: contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Uživatelská jména nemohou obsahovat znak \"@\"."
 
-#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337
+#: contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Vaše e-mailová adresa není vaše uživatelské jméno. Zkuste místo toho \"%s\"."
-
-#: contrib/admin/sites.py:360
+msgstr "Vaše e-mailová adresa není vaše uživatelské jméno. Zkuste místo toho \"%s\"."
+
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Správa webu"
 
-#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407
+#: contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Přihlášení"
 
-#: contrib/admin/sites.py:417
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "Správa aplikace %s"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr ""
-"Jedno nebo více polí \"%(fieldname)s\" položky typu \"%(name)s\": \"%(obj)s\""
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Jedno nebo více polí \"%(fieldname)s\" položky typu \"%(name)s\":"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Datum:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Čas:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Aktuálně:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Změna:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Hledat"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Přidat další"
 
@@ -505,17 +543,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:39
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -537,49 +575,58 @@
 msgstr "Chyba serveru <em>(500)</em>"
 
 #: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Došlo k chybě. Byla oznámena administrátorovi serveru e-mailem a měla by být "
-"brzy odstraněna. Děkujeme za trpělivost."
+msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
+msgstr "Došlo k chybě. Byla oznámena správci serveru e-mailem a měla by být brzy odstraněna. Děkujeme za trpělivost."
 
 #: contrib/admin/templates/admin/actions.html:4
 msgid "Run the selected action"
-msgstr "Provést vybranou akci"
+msgstr "Provést vybranou operaci"
 
 #: contrib/admin/templates/admin/actions.html:4
 msgid "Go"
 msgstr "Provést"
 
+#: contrib/admin/templates/admin/actions.html:10
+msgid "Click here to select the objects across all pages"
+msgstr "Klepnutím zde vyberete položky ze všech stránek."
+
+#: contrib/admin/templates/admin/actions.html:10
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Vybrat všechny položky typu %(module_name)s, celkem %(total_count)s."
+
+#: contrib/admin/templates/admin/actions.html:12
+msgid "Clear selection"
+msgstr "Zrušit výběr"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:27
 msgid "Welcome,"
 msgstr "Vítejte, uživateli"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Dokumentace"
 
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Změnit heslo"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Odhlásit se"
 
@@ -591,64 +638,56 @@
 msgid "Django administration"
 msgstr "Správa systému Django"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Přidat"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Historie"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Zobrazení na webu"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:68
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Opravte níže uvedenou chybu."
 msgstr[1] "Opravte níže uvedené chyby."
 msgstr[2] "Opravte níže uvedené chyby."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:60
 #, python-format
 msgid "Add %(name)s"
 msgstr "%(name)s: přidat"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:79
 msgid "Filter"
 msgstr "Filtr"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4
+#: forms/formsets.py:302
 msgid "Delete"
-msgstr "Smazat"
+msgstr "Odstranit"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:16
 #, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Smazání záznamu \"%(escaped_object)s\" typu \"%(object_name)s\" by vyústilo "
-"ve vymazání souvisejících objektů, ale vy nemáte oprávnění k mazání "
-"následujících typů objektů:"
+msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
+msgstr "Odstranění položky \"%(escaped_object)s\" typu %(object_name)s by vyústilo v odstranění souvisejících položek. Nemáte však oprávnění k odstranění položek následujících typů:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:23
 #, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Opravdu má být smazán záznam \"%(escaped_object)s\" typu \"%(object_name)s"
-"\"? Všechny následující související položky budou smazány:"
+msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
+msgstr "Opravdu má být odstraněna položka \"%(escaped_object)s\" typu %(object_name)s? Následující související položky budou všechny odstraněny:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:28
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:33
@@ -657,26 +696,17 @@
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:9
 msgid "Delete multiple objects"
-msgstr "Smazat vybrané objekty"
+msgstr "Odstranit vybrané položky"
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:15
 #, python-format
-msgid ""
-"Deleting the %(object_name)s would result in deleting related objects, but "
-"your account doesn't have permission to delete the following types of "
-"objects:"
-msgstr ""
-"Smazání záznamu \"%(object_name)s\" by vyústilo ve vymazání souvisejících "
-"objektů, ale vy nemáte oprávnění pro mazání následujících typů objektů:"
+msgid "Deleting the %(object_name)s would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
+msgstr "Odstranění položky \"%(object_name)s\" by vyústilo v odstranění souvisejících položek. Nemáte však oprávnění k odstranění položek následujících typů:"
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:22
 #, python-format
-msgid ""
-"Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
-msgstr ""
-"Opravdu má být smazán záznam typu \"%(object_name)s\"? Všechny následující "
-"související položky budou smazány:"
+msgid "Are you sure you want to delete the selected %(object_name)s objects? All of the following objects and their related items will be deleted:"
+msgstr "Opravdu mají být odstraněny vybrané položky typu %(object_name)s? Následující položky a položky s nimi související budou všechny odstraněny:"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -698,11 +728,11 @@
 
 #: contrib/admin/templates/admin/index.html:53
 msgid "Recent Actions"
-msgstr "Poslední akce"
+msgstr "Poslední operace"
 
 #: contrib/admin/templates/admin/index.html:54
 msgid "My Actions"
-msgstr "Mé akce"
+msgstr "Vaše operace"
 
 #: contrib/admin/templates/admin/index.html:58
 msgid "None available"
@@ -713,14 +743,8 @@
 msgstr "Neznámý obsah"
 
 #: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Potíže s nainstalovanou databází. Ujistěte se, že byly vytvořeny "
-"odpovídající tabulky a že databáze je přístupná pro čtení příslušným "
-"uživatelem."
+msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
+msgstr "Potíže s nainstalovanou databází. Ujistěte se, že byly vytvořeny odpovídající tabulky a že databáze je přístupná pro čtení příslušným uživatelem."
 
 #: contrib/admin/templates/admin/login.html:19
 msgid "Username:"
@@ -739,27 +763,22 @@
 msgstr "Uživatel"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
-msgstr "Akce"
-
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j. n. Y H:i"
+msgstr "Operace"
 
 #: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Tento objekt nemá historii změn. Pravděpodobně nebyl přidán pomocí "
-"administrátorského rozhraní."
+msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
+msgstr "Tato položka nemá historii změn. Pravděpodobně nebyla přidána tímto administračním rozhraním."
 
 #: contrib/admin/templates/admin/pagination.html:10
 msgid "Show all"
 msgstr "Zobrazit vše"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Uložit"
+
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Search"
 msgstr "Hledat"
@@ -777,60 +796,60 @@
 msgid "%(full_result_count)s total"
 msgstr "Celkem %(full_result_count)s"
 
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Uložit"
-
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
-msgstr "Uložit jako nový záznam"
+msgstr "Uložit jako novou položku"
 
 #: contrib/admin/templates/admin/submit_line.html:6
 msgid "Save and add another"
-msgstr "Uložit a přidat další záznam"
+msgstr "Uložit a přidat další položku"
 
 #: contrib/admin/templates/admin/submit_line.html:7
 msgid "Save and continue editing"
 msgstr "Uložit a pokračovat v úpravách"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Nejdříve vložte uživatelské jméno a heslo. Poté budete moci upravovat více "
-"uživatelských nastavení."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Uživatelské jméno"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Heslo"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Heslo (znovu)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Pro ověření vložte stejné heslo znovu."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid "First, enter a username and password. Then, you'll be able to edit more user options."
+msgstr "Nejdříve vložte uživatelské jméno a heslo. Poté budete moci upravovat více uživatelských nastavení."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Vložte nové heslo pro uživatele <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17
+#: contrib/auth/forms.py:61
+#: contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Heslo"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Heslo (znovu)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Pro ověření vložte stejné heslo znovu."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:53
+#: contrib/admin/templates/admin/edit_inline/tabular.html:99
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Přidat %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:56
+#: contrib/admin/templates/admin/edit_inline/tabular.html:102
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Odebrat"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
-msgstr "Smazat?"
+msgstr "Odstranit?"
 
 #: contrib/admin/templates/registration/logged_out.html:8
 msgid "Thanks for spending some quality time with the Web site today."
@@ -841,9 +860,9 @@
 msgstr "Přihlaste se znovu"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Změna hesla"
 
@@ -856,29 +875,21 @@
 msgid "Your password was changed."
 msgstr "Vaše heslo bylo změněno."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Vložte svoje staré heslo a poté dvakrát vložte nové heslo. Tak ověříme, že "
-"bylo zadáno správně."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Staré heslo:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nové heslo:"
-
 #: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Potvrdit heslo:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
+msgstr "Vložte svoje současné heslo a poté vložte dvakrát heslo nové. Omezíme tak možnost překlepu."
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Současné heslo"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Nové heslo"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Změnit heslo"
@@ -910,22 +921,24 @@
 msgstr "Vložte nové heslo"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
+msgid "Please enter your new password twice so we can verify you typed it in correctly."
 msgstr "Vložte dvakrát nové heslo. Tak ověříme, že bylo zadáno správně."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Nové heslo:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Potvrdit heslo:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Obnovení hesla bylo neúspěšné"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used.  Please request a new password reset."
-msgstr ""
-"Odkaz pro obnovení hesla byl neplatný, možná již byl použit. Požádejte o "
-"obnovení hesla znovu."
+msgid "The password reset link was invalid, possibly because it has already been used.  Please request a new password reset."
+msgstr "Odkaz pro obnovení hesla byl neplatný, možná již byl použit. Požádejte o obnovení hesla znovu."
 
 #: contrib/admin/templates/registration/password_reset_done.html:6
 #: contrib/admin/templates/registration/password_reset_done.html:10
@@ -933,12 +946,8 @@
 msgstr "Obnovení hesla bylo úspěšné"
 
 #: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Poslali jsme vám e-mailem pokyny pro nastavení hesla na vámi zadanou e-"
-"mailovou adresu. Za chvíli by mely dorazit do vaší schránky."
+msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
+msgstr "Poslali jsme vám e-mailem pokyny pro nastavení hesla na vámi zadanou e-mailovou adresu. Za chvíli by měly dorazit do vaší schránky."
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
@@ -967,12 +976,8 @@
 msgstr "Tým aplikace %(site_name)s"
 
 #: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Zapomněl(a) jste své současné heslo? Vložte svou e-mailovou adresu a e-"
-"mailem obdržíte pokyny pro nastavení nového."
+msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
+msgstr "Zapomněl(a) jste své současné heslo? Vložte svou e-mailovou adresu a e-mailem obdržíte pokyny pro nastavení nového."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
@@ -982,7 +987,7 @@
 msgid "Reset my password"
 msgstr "Obnovit heslo"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:240
 msgid "All dates"
 msgstr "Všechna data"
 
@@ -996,155 +1001,84 @@
 msgid "Select %s to change"
 msgstr "Vyberte položku %s ke změně"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38
+#: contrib/sites/models.py:38
 msgid "site"
 msgstr "web"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "šablona"
 
-#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
+#: contrib/admindocs/views.py:61
+#: contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "tag:"
 
-#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
+#: contrib/admindocs/views.py:94
+#: contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "filtr:"
 
-#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
+#: contrib/admindocs/views.py:158
+#: contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "pohled (view):"
 
-#: contrib/admindocs/views.py:187
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "Aplikace %r nenalezena"
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "Model %(model_name)r v aplikaci %(app_label)r nenalezen"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
-msgstr "související objekt `%(app_label)s.%(data_type)s`"
-
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
+msgstr "související položka `%(app_label)s.%(data_type)s`"
+
+#: contrib/admindocs/views.py:209
+#: contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233
+#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261
+#: contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "model:"
 
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:224
+#: contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
-msgstr "související objekty `%(app_label)s.%(object_name)s`"
-
-#: contrib/admindocs/views.py:242
+msgstr "související položky `%(app_label)s.%(object_name)s`"
+
+#: contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "Vše: %s"
 
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:233
+#: contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "Počet: %s"
 
-#: contrib/admindocs/views.py:252
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
-msgstr "Pole na objektech %s"
-
-#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
-msgid "Integer"
-msgstr "Celé číslo"
-
-#: contrib/admindocs/views.py:316
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (buď Ano (True), nebo Ne (False))"
-
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Řetězec (max. %(max_length)s znaků)"
-
-#: contrib/admindocs/views.py:318
-msgid "Comma-separated integers"
-msgstr "Celá čísla oddělená čárkou"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (without time)"
-msgstr "Datum (bez času)"
-
-#: contrib/admindocs/views.py:320
-msgid "Date (with time)"
-msgstr "Datum (s časem)"
-
-#: contrib/admindocs/views.py:321
-msgid "Decimal number"
-msgstr "Desetinné číslo"
-
-#: contrib/admindocs/views.py:322
-msgid "E-mail address"
-msgstr "E-mailová adresa"
-
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
-msgid "File path"
-msgstr "Cesta k souboru"
-
-#: contrib/admindocs/views.py:325
-msgid "Floating point number"
-msgstr "Číslo s pohyblivou řádovou čárkou"
-
-#: contrib/admindocs/views.py:329 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "Adresa IP"
-
-#: contrib/admindocs/views.py:331
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (buď Ano (True), Ne (False) nebo Nic (None))"
-
-#: contrib/admindocs/views.py:332
-msgid "Relation to parent model"
-msgstr "Vztah k rodičovskému modelu"
-
-#: contrib/admindocs/views.py:333
-msgid "Phone number"
-msgstr "Telefonní číslo"
-
-#: contrib/admindocs/views.py:338
-msgid "Text"
-msgstr "Text"
-
-#: contrib/admindocs/views.py:339
-msgid "Time"
-msgstr "Čas"
-
-#: contrib/admindocs/views.py:340 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:341
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stát v USA (dvě velká písmena)"
-
-#: contrib/admindocs/views.py:342
-msgid "XML text"
-msgstr "XML text"
-
-#: contrib/admindocs/views.py:368
+msgstr "Pole položek typu %s"
+
+#: contrib/admindocs/views.py:361
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
-msgstr "%s pravděpodobně není objekt typu urlpattern"
+msgstr "Objekt %s patrně není typu urlpattern."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Bookmarklets"
@@ -1165,15 +1099,11 @@
 "your computer is \"internal\").</p>\n"
 msgstr ""
 "\n"
-"<p class=\"help\">Pro nainstalování bookmarkletů, přetáhněte odkaz na vaše "
-"záložky (oblíbené),\n"
-"nebo klikněte pravým tlačítkem na odkaz a přidejte ho k vašim záložkám "
-"(oblíbeným). Nyní můžete\n"
+"<p class=\"help\">Pro nainstalování bookmarkletů, přetáhněte odkaz na vaše záložky (oblíbené),\n"
+"nebo klepněte pravým tlačítkem na odkaz a přidejte ho k vašim záložkám (oblíbeným). Nyní můžete\n"
 "zvolit bookmarklet z libovolné stránky. Poznámka: Některé tyto\n"
-"bookmarklety vyžadují, abyste prohlížel(a) stránky z počítače, který je "
-"nastaven jako\n"
-"\"\"interní\" (promluvte si s vaším administrátorem, jestli si nejste "
-"jisti,\n"
+"bookmarklety vyžadují, abyste prohlížel(a) stránky z počítače, který je nastaven jako\n"
+"\"\"interní\" (promluvte si s vaším správcem, jestli si nejste jisti,\n"
 "zda je váš počítač \"interní\").</p>\n"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
@@ -1181,272 +1111,285 @@
 msgstr "Dokumentace k této stránce"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Z libovolné stránky otevře dokumentaci pohledu (view), který generoval tuto "
-"stránku."
+msgid "Jumps you from any page to the documentation for the view that generates that page."
+msgstr "Z libovolné stránky otevře dokumentaci pohledu (view), který generoval tuto stránku."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
 msgid "Show object ID"
-msgstr "Ukázat id objektu"
+msgstr "Ukázat id položky"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Ukáže content-type a unikátní ID stránek, reprezentujících jediný objekt."
+msgid "Shows the content-type and unique ID for pages that represent a single object."
+msgstr "Zobrazí content-type a unikátní ID stránek reprezentujících jedinou položku."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
 msgid "Edit this object (current window)"
-msgstr "Upravit tento objekt (ve stávajícím okně)"
+msgstr "Upravit tuto položku (ve stávajícím okně)"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
 msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Přepne do prostředí správy pro stránky reprezentující jediný objekt."
+msgstr "Přepne do administračního rozhraní stránek reprezentujících jedinou položku."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
 msgid "Edit this object (new window)"
-msgstr "Upravit tento objekt (v novém okně)"
+msgstr "Upravit tuto položku (v novém okně)"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
 msgid "As above, but opens the admin page in a new window."
 msgstr "Jako výše, ale otevře prostředí správy v novém okně."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Osobní údaje"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Oprávnění"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Důležitá data"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Skupiny"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Uživatel: přidat"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Změna hesla byla úspěšná."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Heslo pro uživatele %s: změnit"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Požadováno. 30 znaků nebo méně. Pouze alfanumerické znaky (písmena, číslice "
-"nebo podtržítka)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Tato hodnota musí obsahovat pouze písmena, číslice nebo podtržítka."
+#: contrib/auth/forms.py:14
+#: contrib/auth/forms.py:48
+#: contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Uživatelské jméno"
+
+#: contrib/auth/forms.py:15
+#: contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr "Požadováno. 30 znaků nebo méně. Pouze písmena, číslice a znaky @/./+/-/_."
+
+#: contrib/auth/forms.py:16
+#: contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Hodnota může obsahovat pouze písmena, číslice a znaky @/./+/-/_."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Potvrzení hesla"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Uživatel s tímto jménem již existuje."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37
+#: contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Hesla se neshodují."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Tento účet je neaktivní."
 
-#: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Váš prohlížeč zřejmě nemá povoleno přijímat cookies, které jsou ale potřeba "
-"pro přihlášení."
-
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:88
+msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
+msgstr "Váš prohlížeč zřejmě nemá povoleno přijímat cookies, které jsou ale potřeba pro přihlášení."
+
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "E-mail"
 
-#: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"K této e-mailové adrese není přiřazen žádný uživatelský účet. Určitě jste "
-"zde registrováni?"
-
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:110
+msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
+msgstr "K této e-mailové adrese není přiřazen žádný uživatelský účet. Určitě jste zde registrováni?"
+
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Obnovení hesla na webu %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Nové heslo"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Potvrzení nového hesla"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Staré heslo"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Vaše staré heslo nebylo vloženo správně. Zkuste to znovu."
-
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+msgstr "Vaše současné heslo nebylo vloženo správně. Zkuste to znovu."
+
+#: contrib/auth/models.py:66
+#: contrib/auth/models.py:94
 msgid "name"
 msgstr "název"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "kódový název"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "oprávnění"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73
+#: contrib/auth/models.py:95
 msgid "permissions"
 msgstr "oprávnění"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "skupina"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99
+#: contrib/auth/models.py:206
 msgid "groups"
 msgstr "skupiny"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "uživatelské jméno"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid "Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr "Požadováno. 30 znaků nebo méně. Pouze písmena, číslice a znaky @/./+/-/_."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "křestní jméno"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "příjmení"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "e-mailová adresa"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "heslo"
 
-#: contrib/auth/models.py:132
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Použijte buď formát \"[algo]$[salt]$[hexdigest]\" nebo <a href=\"password/"
-"\">formulář pro změnu hesla</a>."
-
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:200
+msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
+msgstr "Použijte buď tvar \"[algo]$[salt]$[hexdigest]\" nebo <a href=\"password/\">formulář pro změnu hesla</a>."
+
+#: contrib/auth/models.py:201
 msgid "staff status"
-msgstr "administrativní přístup"
-
-#: contrib/auth/models.py:133
+msgstr "administrační přístup"
+
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Určuje, zda se uživatel může přihlásit do správy tohoto webu."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "aktivní"
 
-#: contrib/auth/models.py:134
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Určuje, zda bude uživatel považován za aktivního. Toto vypínejte místo "
-"mazání účtů."
-
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:202
+msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
+msgstr "Určuje, zda bude uživatel považován za aktivního. Použijte tuto možnost místo odstranění účtů."
+
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "superuživatel"
 
-#: contrib/auth/models.py:135
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Určuje, že uživatel má veškerá oprávnění bez jejich explicitního přiřazení."
-
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:203
+msgid "Designates that this user has all permissions without explicitly assigning them."
+msgstr "Určuje, že uživatel má veškerá oprávnění bez jejich explicitního přiřazení."
+
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "poslední přihlášení"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "datum registrace"
 
-#: contrib/auth/models.py:139
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Kromě manuálně přidělených oprávnění bude uživatel mít všechna oprávnění pro "
-"každou skupinu, jejímž je členem."
-
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:207
+msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
+msgstr "Kromě manuálně přidělených oprávnění bude uživatel mít všechna oprávnění pro každou skupinu, jejímž je členem."
+
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "uživatelská oprávnění"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212
+#: contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "uživatel"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "uživatelé"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "zpráva"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Odhlášeno"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120
+#: forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Vložte platnou e-mailovou adresu."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Obsah"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metadata"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "označen"
+msgstr[1] "označeny"
+msgstr[2] "označeno"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Označit vybrané komentáře"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "schválen"
+msgstr[1] "schváleny"
+msgstr[2] "schváleno"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Schválit vybrané komentáře"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "odebrán"
+msgstr[1] "odebrány"
+msgstr[2] "odebráno"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Odebrat vybrané komentáře"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 komentář byl úspěšně %(action)s."
+msgstr[1] "%(count)s komentáře byly úspěšně %(action)s."
+msgstr[2] "%(count)s komentářů bylo úspěšně %(action)s."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1458,7 +1401,6 @@
 msgstr "Poslední komentáře na webu %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Jméno"
 
@@ -1466,12 +1408,18 @@
 msgid "Email address"
 msgstr "E-mailová adresa"
 
+#: contrib/comments/forms.py:95
+#: contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7
+#: db/models/fields/__init__.py:1100
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Komentář"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
@@ -1479,18 +1427,18 @@
 msgstr[1] "Mluvte slušně! Slova %s jsou zde nepřípustná."
 msgstr[2] "Mluvte slušně! Slova %s jsou zde nepřípustná."
 
-#: contrib/comments/forms.py:180
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
+#: contrib/comments/forms.py:182
+msgid "If you enter anything in this field your comment will be treated as spam"
 msgstr "Jestliže do tohoto pole cokoli zadáte, bude komentář považován za spam"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22
+#: contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "typ obsahu"
 
 #: contrib/comments/models.py:24
 msgid "object ID"
-msgstr "ID objektu"
+msgstr "ID položky"
 
 #: contrib/comments/models.py:52
 msgid "user's name"
@@ -1504,7 +1452,8 @@
 msgid "user's URL"
 msgstr "URL uživatele"
 
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:56
+#: contrib/comments/models.py:76
 #: contrib/comments/models.py:169
 msgid "comment"
 msgstr "komentář"
@@ -1513,45 +1462,38 @@
 msgid "date/time submitted"
 msgstr "datum a čas byly zaslané"
 
+#: contrib/comments/models.py:60
+#: db/models/fields/__init__.py:895
+msgid "IP address"
+msgstr "Adresa IP"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "je veřejný"
 
 #: contrib/comments/models.py:62
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Pokud zrušíte zaškrtnutí tohoto políčka, komentář se na stránce nezobrazí."
+msgid "Uncheck this box to make the comment effectively disappear from the site."
+msgstr "Pokud zrušíte zaškrtnutí tohoto políčka, komentář se na stránce nezobrazí."
 
 #: contrib/comments/models.py:64
 msgid "is removed"
 msgstr "je odebrán"
 
 #: contrib/comments/models.py:65
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Zaškrtněte, pokud je komentář nevhodný. Místo něj bude zobrazena zpráva "
-"\"Tento komentář byl odebrán\"."
+msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
+msgstr "Zaškrtněte, pokud je komentář nevhodný. Místo něj bude zobrazena zpráva \"Tento komentář byl odebrán\"."
 
 #: contrib/comments/models.py:77
 msgid "comments"
 msgstr "komentář"
 
 #: contrib/comments/models.py:119
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Tento komentář zaslal přihlášený uživatel, jméno tedy není možné změnit."
+msgid "This comment was posted by an authenticated user and thus the name is read-only."
+msgstr "Tento komentář zaslal přihlášený uživatel, jméno tedy není možné změnit."
 
 #: contrib/comments/models.py:128
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Tento komentář zaslal přihlášený uživatel, e-mail tedy není možné změnit."
+msgid "This comment was posted by an authenticated user and thus the email is read-only."
+msgstr "Tento komentář zaslal přihlášený uživatel, e-mail tedy není možné změnit."
 
 #: contrib/comments/models.py:153
 #, python-format
@@ -1582,7 +1524,7 @@
 
 #: contrib/comments/models.py:182
 msgid "comment flags"
-msgstr "značka komentáře"
+msgstr "značky komentáře"
 
 #: contrib/comments/templates/comments/approve.html:4
 msgid "Approve a comment"
@@ -1593,7 +1535,6 @@
 msgstr "Opravdu chcete zveřejnit tento komentář?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Schválit"
 
@@ -1604,10 +1545,8 @@
 #: contrib/comments/templates/comments/approved.html:7
 #: contrib/comments/templates/comments/deleted.html:7
 #: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Děkujeme za váš čas věnovaný zlepšení kvality diskuze na našich stránkách"
+msgid "Thanks for taking the time to improve the quality of discussion on our site"
+msgstr "Děkujeme za váš čas věnovaný zlepšení kvality diskuze na našich stránkách"
 
 #: contrib/comments/templates/comments/delete.html:4
 msgid "Remove a comment"
@@ -1617,11 +1556,6 @@
 msgid "Really remove this comment?"
 msgstr "Opravdu chcete odebrat tento komentář?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Odebrat"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Děkujeme za odebrání"
@@ -1652,39 +1586,6 @@
 msgid "Preview"
 msgstr "Náhled"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Fronta komentářů ke schválení"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Žádné komentáře ke schválení"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "E-mail"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Přihlášený?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "Adresa IP"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Datum vložení"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "ano"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "ne"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Děkujeme za vložení komentáře"
@@ -1713,27 +1614,21 @@
 msgid "or make changes"
 msgstr "nebo upravit"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "název třídy modelu v Pythonu"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "typy obsahu"
 
 #: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Příklad: \"/o/kontakt/\". Ujistěte se, že máte počáteční a konečná lomítka."
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Příklad: \"/o/kontakt/\". Ujistěte se, že máte počáteční a konečná lomítka."
 
 #: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Tato hodnota musí obsahovat pouze písmena, číslice, podtržítka, pomlčky nebo "
-"lomítka."
+msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
+msgstr "Hodnota smí obsahovat pouze písmena, číslice, podtržítka, pomlčky nebo lomítka."
 
 #: contrib/flatpages/admin.py:22
 msgid "Advanced options"
@@ -1756,12 +1651,8 @@
 msgstr "název šablony"
 
 #: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Příklad: \"flatpages/kontaktni_stranka.html\". Pokud toto není zadáno, bude "
-"použita šablona \"flatpages/default.html\"."
+msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
+msgstr "Příklad: \"flatpages/kontaktni_stranka.html\". Pokud toto není zadáno, bude použita šablona \"flatpages/default.html\"."
 
 #: contrib/flatpages/models.py:13
 msgid "registration required"
@@ -1779,13 +1670,41 @@
 msgid "flat pages"
 msgstr "statické stránky"
 
-#: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Platnost formuláře bohužel vypršela. Pokračujte vyplněním formuláře z této "
-"stránky."
+#: contrib/formtools/wizard.py:140
+msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
+msgstr "Platnost formuláře bohužel vypršela. Pokračujte vyplněním formuláře z této stránky."
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr "Základní GIS pole -- mapováno na typ Geometry podle specifikace OpenGIS."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Bod"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Úsek čáry"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Polygon"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Mnohonásobný bod"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Mnohonásobný úsek čáry"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Mnohonásobný polygon"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Kolekce geometrií"
 
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
@@ -1800,12 +1719,8 @@
 msgstr "Neplatný typ geometrie."
 
 #: contrib/gis/forms/fields.py:20
-msgid ""
-"An error occurred when transforming the geometry to the SRID of the geometry "
-"form field."
-msgstr ""
-"Nastala chyba při transformaci geometrie na identifikátor SRID geometrického "
-"formulářového pole."
+msgid "An error occurred when transforming the geometry to the SRID of the geometry form field."
+msgstr "Nastala chyba při transformaci geometrie na identifikátor SRID geometrického formulářového pole."
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
@@ -1895,27 +1810,27 @@
 msgid "yesterday"
 msgstr "včera"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Zadejte poštovní směrovací číslo ve formátu NNNN nebo ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
-msgid "This field requires only numbers."
-msgstr "Toto pole musí obsahovat pouze číslice."
+msgstr "Zadejte poštovní směrovací číslo ve tvaru NNNN nebo ANNNNAAA."
 
 #: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
+msgid "This field requires only numbers."
+msgstr "Pole smí obsahovat pouze číslice."
+
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
-msgstr "Toto pole musí obsahovat 7 nebo 8 číslic."
-
-#: contrib/localflavor/ar/forms.py:79
-msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr ""
-"Zadejte platné identifikační číslo CUIT ve formátu XX-XXXXXXXX-X nebo "
-"XXXXXXXXXXXX"
+msgstr "Pole smí obsahovat jen 7 nebo 8 číslic."
 
 #: contrib/localflavor/ar/forms.py:80
+msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
+msgstr "Zadejte platné identifikační číslo CUIT ve tvaru XX-XXXXXXXX-X nebo XXXXXXXXXXXX"
+
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "Neplatné CUIT"
 
@@ -1955,57 +1870,55 @@
 msgid "Vienna"
 msgstr "Vídeň"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20
+#: contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
-msgstr "Zadejte poštovní směrovací číslo ve formátu XXXX."
+msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXX."
 
 #: contrib/localflavor/at/forms.py:48
 msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Zadejte platné rodné číslo (ASSN) ve formátu XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:16
+msgstr "Zadejte platné rodné číslo (ASSN) ve tvaru XXXX XXXXXX."
+
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Zadejte čtyřmístné poštovní směrovací číslo."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Zadejte poštovní směrovací číslo ve formátu XXXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:30
+msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXXX-XXX."
+
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Telefonní číslo musí být ve formátu XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
+msgstr "Telefonní číslo smí být pouze ve tvaru XX-XXXX-XXXX."
+
+#: contrib/localflavor/br/forms.py:59
+msgid "Select a valid brazilian state. That state is not one of the available states."
 msgstr "Neplatný brazilský stát. Vyberte jeden z nabízených států."
 
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr "Neplatné číslo CPF."
-
 #: contrib/localflavor/br/forms.py:95
+msgid "Invalid CPF number."
+msgstr "Neplatné číslo CPF."
+
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Toto pole musí obsahovat nejvýše 11 číslic nebo 14 znaků."
-
-#: contrib/localflavor/br/forms.py:134
+msgstr "Pole smí obsahovat nejvýše 11 číslic nebo 14 znaků."
+
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Neplatné číslo CNPJ."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
-msgstr "Toto pole musí obsahovat nejméně 14 číslic."
-
-#: contrib/localflavor/ca/forms.py:17
+msgstr "Pole smí obsahovat nejméně 14 číslic."
+
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
-msgstr "Zadejte poštovní směrovací číslo ve formátu XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:88
+msgstr "Zadejte poštovní směrovací číslo ve tvaru XXX XXX."
+
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Zadejte platné kanadské číslo soc. pojištění (SID) ve formátu XXX-XXX-XXX."
+msgstr "Zadejte platné kanadské číslo soc. pojištění (SID) ve tvaru XXX-XXX-XXX."
 
 #: contrib/localflavor/ch/ch_states.py:5
 msgid "Aargau"
@@ -2111,23 +2024,19 @@
 msgid "Zurich"
 msgstr "Curych"
 
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Zadejte platné švýcarské identifikační číslo nebo číslo cestovního pasu ve "
-"formátu X1234567<0 nebo 1234567890."
-
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/ch/forms.py:65
+msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
+msgstr "Zadejte platné švýcarské identifikační číslo nebo číslo cestovního pasu ve tvaru X1234567<0 nebo 1234567890."
+
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Zadejte platné chilské RUT."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Zadejte platné chilské RUT ve formátu XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:31
+msgstr "Zadejte platné chilské RUT ve tvaru XX.XXX.XXX-X."
+
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "Neplatné RUT."
 
@@ -2187,23 +2096,24 @@
 msgid "Moravian-Silesian Region"
 msgstr "Moravskoslezský kraj"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28
+#: contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Zadejte poštovní směrovací číslo ve formátu XXXXX nebo XXX XX."
-
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Zadejte rodné číslo ve formátu XXXXXX/XXXX nebo XXXXXXXXXX."
+msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXX nebo XXX XX."
 
 #: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Neplatný nepovinný parametr Gender, platné hodnoty jsou 'f' a 'm'."
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Zadejte rodné číslo ve tvaru XXXXXX/XXXX nebo XXXXXXXXXX."
 
 #: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr "Neplatný nepovinný parametr Gender, platné hodnoty jsou 'f' a 'm'."
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Zadejte platné rodné číslo."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Zadejte platné IČ."
 
@@ -2271,18 +2181,15 @@
 msgid "Thuringia"
 msgstr "Durynsko"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15
+#: contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
-msgstr "Zadejte poštovní směrovací číslo ve formátu XXXXX."
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Zadejte platné německé identifikační číslo ve formátu XXXXXXXXXXX-XXXXXXX-"
-"XXXXXXX-X."
+msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXX."
+
+#: contrib/localflavor/de/forms.py:42
+msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
+msgstr "Zadejte platné německé identifikační číslo ve tvaru XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
 
 #: contrib/localflavor/es/es_provinces.py:5
 msgid "Arava"
@@ -2551,80 +2458,506 @@
 msgid "Valencian Community"
 msgstr "Valencie"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Zadejte platné poštovní směrovací číslo ve formátu 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Zadejte platné telefonní číslo v jednom z formátů: 6XXXXXXXX, 8XXXXXXXX nebo "
-"9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:66
+msgstr "Zadejte platné poštovní směrovací číslo ve tvaru 01XXX - 52XXX."
+
+#: contrib/localflavor/es/forms.py:40
+msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
+msgstr "Zadejte platné telefonní číslo v jednom ze tvarů 6XXXXXXXX, 8XXXXXXXX nebo 9XXXXXXXX."
+
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Zadejte platné hodnoty NIF, NIE nebo CIF."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Zadejte platné hodnoty NIF nebo NIE."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Neplatný kontrolní součet pro NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Neplatný kontrolní součet pro NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Neplatný kontrolní součet pro CIF."
 
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Zadejte platné číslo bankovního účtu ve formátu XXXX-XXXX-XX-XXXXXXXXXX."
-
 #: contrib/localflavor/es/forms.py:143
+msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr "Zadejte platné číslo bankovního účtu ve tvaru XXXX-XXXX-XX-XXXXXXXXXX."
+
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Neplatný kontrolní součet pro číslo bankovního účtu."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Zadejte platné finské rodné číslo."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Telefonní číslo musí být ve tvaru 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Zadejte platné poštovní směrovací číslo."
+
+#: contrib/localflavor/id/forms.py:68
+#: contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Zadejte platné telefonní číslo"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Vložte platné číslo poznávací značky vozu"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Vložte platné číslo NIK/KTP"
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Bali"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Banten"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Bengkulu"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Yogyakarta"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Jakarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Gorontalo"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Jambi"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Jawa Barat"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Jawa Tengah"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Jawa Timur"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Kalimantan Barat"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Kalimantan Selatan"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Kalimantan Tengah"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Kalimantan Timur"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Kepulauan Bangka-Belitung"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Kepulauan Riau"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Lampung"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Maluku"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Maluku Utara"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Nanggroe Aceh Darussalam"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Nusa Tenggara Barat"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Nusa Tenggara Timur"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Papua"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Riau"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "Sulawesi Barat"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "Sulawesi Selatan"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "Sulawesi Tengah"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "Sulawesi Tenggara"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "Sulawesi Utara"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "Sumatera Barat"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "Sumatera Selatan"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "Sumatera Utara"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "Magelang"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "Surakarta - Solo"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "Madiun"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "Kediri"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "Tapanuli"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "Kepulauan Bangka Belitung"
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr "Corps Consulate"
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr "Corps Diplomatic"
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "Bandung"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr "Sulawesi Utara Daratan"
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - Timor"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr "Sulawesi Utara Kepulauan"
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - Lombok"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "Papua dan Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "Cirebon"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - Sumbawa"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - Flores"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - Sumba"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "Bogor"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "Pekalongan"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "Semarang"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "Pati"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "Surabaya"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "Madura"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "Malang"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "Jember"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "Banyumas"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "Federální vláda"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "Bojonegoro"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "Purwakarta"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "Sidoarjo"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "Garut"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "Armagh"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "Carlow"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "Cavan"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "Clare"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "Cork"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "Derry"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "Donegal"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "Down"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Dublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "Galway"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "Kerry"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "Kildare"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "Kilkenny"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "Laois"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "Leitrim"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "Limerick"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "Longford"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "Louth"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Mayo"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "Meath"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "Monaghan"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "Offaly"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "Roscommon"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "Sligo"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "Tipperary"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "Tyrone"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "Waterford"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "Westmeath"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "Wexford"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "Wicklow"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Zadejte poštovní směrovací číslo ve formátu XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Zadejte platné islandské identifikační číslo ve formátu XXXXXX-XXXX."
+msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXXXX."
 
 #: contrib/localflavor/is_/forms.py:18
+msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr "Zadejte platné islandské identifikační číslo ve tvaru XXXXXX-XXXX."
+
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "Neplatné islandské identifikační číslo."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Zadejte platné poštovní směrovací číslo."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Zadejte platné číslo SSN."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Zadejte platné daňové identifikační číslo."
 
 #: contrib/localflavor/jp/forms.py:16
 msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Zadejte poštovní směrovací číslo ve formátu XXXXXXX nebo XXX-XXXX."
+msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXXXX nebo XXX-XXXX."
 
 #: contrib/localflavor/jp/jp_prefectures.py:4
 msgid "Hokkaido"
@@ -2814,6 +3147,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Vložte platné kuvajtské občanské identifikační číslo"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2942,15 +3279,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Zadejte platné poštovní směrovací číslo"
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Zadejte platné telefonní číslo"
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Zadejte platné číslo SoFi"
 
@@ -3002,17 +3335,17 @@
 msgid "Zuid-Holland"
 msgstr "Jižní Holandsko"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Zadejte platné norské číslo sociálního pojištěni (SSN)."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
-msgstr "Toto pole musí obsahovat 8 číslic."
-
-#: contrib/localflavor/pe/forms.py:52
+msgstr "Pole musí obsahovat 8 číslic."
+
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
-msgstr "Toto pole musí obsahovat 11 číslic."
+msgstr "Pole musí obsahovat 11 číslic."
 
 #: contrib/localflavor/pl/forms.py:38
 msgid "National Identification Number consists of 11 digits."
@@ -3023,11 +3356,8 @@
 msgstr "Neplatný kontrolní součet pro Národní identifikační číslo."
 
 #: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Zadejte daňové identifikační číslo (NIP) ve formátu XXX-XXX-XX-XX nebo XX-XX-"
-"XXX-XXX."
+msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr "Zadejte daňové identifikační číslo (NIP) ve tvaru XXX-XXX-XX-XX nebo XX-XX-XXX-XXX."
 
 #: contrib/localflavor/pl/forms.py:72
 msgid "Wrong checksum for the Tax Number (NIP)."
@@ -3043,7 +3373,7 @@
 
 #: contrib/localflavor/pl/forms.py:148
 msgid "Enter a postal code in the format XX-XXX."
-msgstr "Zadejte poštovní směrovací číslo ve formátu XX-XXX."
+msgstr "Zadejte poštovní směrovací číslo ve tvaru XX-XXX."
 
 #: contrib/localflavor/pl/pl_voivodeships.py:8
 msgid "Lower Silesia"
@@ -3109,6 +3439,14 @@
 msgid "West Pomerania"
 msgstr "Západopomořanské vojvodství"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "Telefonní číslo musí mít 9 číslo nebo začínat + či 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Zadejte platné CIF."
@@ -3119,15 +3457,115 @@
 
 #: contrib/localflavor/ro/forms.py:141
 msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "Zadejte platné IBAN ve formátu ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
+msgstr "Zadejte platné IBAN ve tvaru ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
 
 #: contrib/localflavor/ro/forms.py:171
 msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "Telefonní číslo musí být ve formátu XXXX-XXXXXX."
+msgstr "Telefonní číslo musí být ve tvaru XXXX-XXXXXX."
 
 #: contrib/localflavor/ro/forms.py:194
 msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "Zadejte platné poštovní směrovací číslo ve formátu XXXXXX."
+msgstr "Zadejte platné poštovní směrovací číslo ve tvaru XXXXXX."
+
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Vložte platné číslo švédské organizace."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Vložte platné švédské osobní identifikační číslo."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Koordinační čísla nejsou povolena."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Vložte švédské poštovní směrovací číslo ve tvaru XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Stockholm"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
 
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
@@ -3761,19 +4199,43 @@
 msgid "Wales"
 msgstr "Wales"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Zadejte poštovní směrovací číslo ve formátu XXXXX nebo XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:54
+msgstr "Zadejte poštovní směrovací číslo ve tvaru XXXXX nebo XXXXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Telefonní číslo musí být ve tvaru XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Zadejte platné osobní číslo (U.S. SSN) ve formátu XXX-XX-XXXX."
-
-#: contrib/localflavor/za/forms.py:20
+msgstr "Zadejte platné osobní číslo (U.S. SSN) ve tvaru XXX-XX-XXXX."
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Vložte stát USA nebo teritorium."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Stát v USA (dvě velká písmena)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Telefonní číslo"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "Vložte platné číslo CI ve tvaru X.XXX.XXX-X,XXXXXXX-X nebo XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Vložte platné číslo CI."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Zadejte platné jihoafrické identifikační číslo"
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Zadejte platné jihoafrické poštovní směrovací číslo"
 
@@ -3813,28 +4275,25 @@
 msgid "Western Cape"
 msgstr "Západní Kapsko"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "opožděně vyhodnocená zpráva"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "přesměrovat z"
 
 #: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Toto by měla být absolutní cesta bez domény. Příklad: \"/udalosti/hledat/\"."
+msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
+msgstr "Toto by měla být absolutní cesta bez domény. Příklad: \"/udalosti/hledat/\"."
 
 #: contrib/redirects/models.py:9
 msgid "redirect to"
 msgstr "přesměrovat na"
 
 #: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na "
-"\"http://\"."
+msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
+msgstr "Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na \"http://\"."
 
 #: contrib/redirects/models.py:13
 msgid "redirect"
@@ -3876,250 +4335,351 @@
 msgid "sites"
 msgstr "weby"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Tato hodnota musí být celé číslo."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Tato hodnota musí být buď Ano (True), nebo Ne (False)."
-
-#: db/models/fields/__init__.py:427
-msgid "This field cannot be null."
-msgstr "Toto pole nemůže být prázdné (null)."
-
-#: db/models/fields/__init__.py:443
+#: core/validators.py:20
+#: forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Vložte platnou hodnotu."
+
+#: core/validators.py:87
+#: forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Vložte platnou adresu URL."
+
+#: core/validators.py:89
+#: forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Tato adresa URL je zřejmě neplatný odkaz."
+
+#: core/validators.py:123
+#: forms/fields.py:873
+msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr "Vložte platný identifikátor složený pouze z písmen, čísel, podtržítek a pomlček."
+
+#: core/validators.py:126
+#: forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Vložte platnou adresu typu IPv4."
+
+#: core/validators.py:129
+#: db/models/fields/__init__.py:571
 msgid "Enter only digits separated by commas."
 msgstr "Vložte pouze číslice oddělené čárkami."
 
-#: db/models/fields/__init__.py:474
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Hodnota musí být %(limit_value)s (nyní je %(show_value)s)."
+
+#: core/validators.py:153
+#: forms/fields.py:205
+#: forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Hodnota musí být menší nebo rovna %(limit_value)s."
+
+#: core/validators.py:158
+#: forms/fields.py:206
+#: forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Hodnota musí být větší nebo rovna %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid "Ensure this value has at least %(limit_value)d characters (it has %(show_value)d)."
+msgstr "Hodnota musí mít alespoň %(limit_value)d znaků, ale nyní jich má %(show_value)d."
+
+#: core/validators.py:170
+#, python-format
+msgid "Ensure this value has at most %(limit_value)d characters (it has %(show_value)d)."
+msgstr "Hodnota smí mít nejvýše %(limit_value)d znaků, ale nyní jich má %(show_value)d."
+
+#: db/models/base.py:818
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "Pole %(field_name)s musí být unikátní testem %(lookup)s pole %(date_field)s."
+
+#: db/models/base.py:833
+#: db/models/base.py:841
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "Položka %(model_name)s s touto hodnotou v poli %(field_label)s již existuje."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Hodnota %r není platnou volbou."
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be null."
+msgstr "Pole nemůže být null."
+
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Pole nemůže být prázdné."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Pole typu: %(field_type)s"
+
+#: db/models/fields/__init__.py:450
+#: db/models/fields/__init__.py:851
+#: db/models/fields/__init__.py:960
+#: db/models/fields/__init__.py:971
+#: db/models/fields/__init__.py:998
+msgid "Integer"
+msgstr "Celé číslo"
+
+#: db/models/fields/__init__.py:454
+#: db/models/fields/__init__.py:849
+msgid "This value must be an integer."
+msgstr "Hodnota musí být celé číslo."
+
+#: db/models/fields/__init__.py:489
+msgid "This value must be either True or False."
+msgstr "Hodnota musí být buď Ano (True) nebo Ne (False)."
+
+#: db/models/fields/__init__.py:491
+msgid "Boolean (Either True or False)"
+msgstr "Pravdivost (buď Ano (True), nebo Ne (False))"
+
+#: db/models/fields/__init__.py:538
+#: db/models/fields/__init__.py:981
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Řetězec (max. %(max_length)s znaků)"
+
+#: db/models/fields/__init__.py:566
+msgid "Comma-separated integers"
+msgstr "Celá čísla oddělená čárkou"
+
+#: db/models/fields/__init__.py:580
+msgid "Date (without time)"
+msgstr "Datum (bez času)"
+
+#: db/models/fields/__init__.py:584
 msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Vložte platné datum ve formátu RRRR-MM-DD."
-
-#: db/models/fields/__init__.py:483
+msgstr "Vložte platné datum ve tvaru RRRR-MM-DD."
+
+#: db/models/fields/__init__.py:585
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Neplatné datum: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:666
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "Vložte platné datum a čas ve formátu RRRR-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:601
+msgstr "Vložte platné datum a čas ve tvaru RRRR-MM-DD HH:MM[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:668
+msgid "Date (with time)"
+msgstr "Datum (s časem)"
+
+#: db/models/fields/__init__.py:734
 msgid "This value must be a decimal number."
-msgstr "Tato hodnota musí být desetinné číslo."
-
-#: db/models/fields/__init__.py:686
+msgstr "Hodnota musí být desetinné číslo."
+
+#: db/models/fields/__init__.py:736
+msgid "Decimal number"
+msgstr "Desetinné číslo"
+
+#: db/models/fields/__init__.py:791
+msgid "E-mail address"
+msgstr "E-mailová adresa"
+
+#: db/models/fields/__init__.py:798
+#: db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Cesta k souboru"
+
+#: db/models/fields/__init__.py:821
 msgid "This value must be a float."
-msgstr "Tato hodnota musí být desetinné číslo."
-
-#: db/models/fields/__init__.py:746
+msgstr "Hodnota musí být desetinné číslo."
+
+#: db/models/fields/__init__.py:823
+msgid "Floating point number"
+msgstr "Číslo s pohyblivou řádovou čárkou"
+
+#: db/models/fields/__init__.py:882
+msgid "Big (8 byte) integer"
+msgstr "Velké číslo (8 bajtů)"
+
+#: db/models/fields/__init__.py:911
 msgid "This value must be either None, True or False."
-msgstr "Tato hodnota musí být buď Nic (None), Ano (True) nebo Ne (False)."
-
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+msgstr "Hodnota musí být buď Nic (None), Ano (True) nebo Ne (False)."
+
+#: db/models/fields/__init__.py:913
+msgid "Boolean (Either True, False or None)"
+msgstr "Pravdivost (buď Ano (True), Ne (False) nebo Nic (None))"
+
+#: db/models/fields/__init__.py:1004
+msgid "Text"
+msgstr "Text"
+
+#: db/models/fields/__init__.py:1020
+msgid "Time"
+msgstr "Čas"
+
+#: db/models/fields/__init__.py:1024
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "Vložte platný čas ve formátu HH:MM[:ss[.uuuuuu]]"
-
-#: db/models/fields/related.py:792
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Výběr více než jedné položky je možný přidržením klávesy \"Control\" (nebo "
-"\"Command\" na Macu)."
-
-#: db/models/fields/related.py:870
+msgstr "Vložte platný čas ve tvaru HH:MM[:ss[.uuuuuu]]"
+
+#: db/models/fields/__init__.py:1108
+msgid "XML text"
+msgstr "XML text"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Položka typu %(model)s s primárním klíčem %(pk)r neexistuje."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Cizí klíč (typ určen pomocí souvisejícího pole)"
+
+#: db/models/fields/related.py:923
+msgid "One-to-one relationship"
+msgstr "Vazba jedna-jedna"
+
+#: db/models/fields/related.py:983
+msgid "Many-to-many relationship"
+msgstr "Vazba mnoho-mnoho"
+
+#: db/models/fields/related.py:1003
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Výběr více než jedné položky je možný přidržením klávesy \"Control\" (nebo \"Command\" na Macu)."
+
+#: db/models/fields/related.py:1064
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Vložte platné ID objektu %(self)s. Hodnota %(value)r je neplatná."
-msgstr[1] "Vložte platné ID objektu %(self)s. Hodnoty %(value)r jsou neplatné."
-msgstr[2] "Vložte platné ID objektu %(self)s. Hodnoty %(value)r jsou neplatné."
-
-#: forms/fields.py:54
+msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "Vložte platné ID položky %(self)s. Hodnota %(value)r je neplatná."
+msgstr[1] "Vložte platné ID položky %(self)s. Hodnoty %(value)r jsou neplatné."
+msgstr[2] "Vložte platné ID položky %(self)s. Hodnoty %(value)r jsou neplatné."
+
+#: forms/fields.py:65
 msgid "This field is required."
-msgstr "Toto pole je povinné."
-
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Vložte platnou hodnotu."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Délka této hodnoty má být nejvýše %(max)d znaků, ale nyní je %(length)d."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Délka této hodnoty má být nejméně %(min)d znaků, ale nyní je %(length)d."
-
-#: forms/fields.py:166
+msgstr "Pole je povinné."
+
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Vložte celé číslo."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Tato hodnota musí být menší nebo rovna %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Tato hodnota musí být větší nebo rovna %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235
+#: forms/fields.py:256
 msgid "Enter a number."
 msgstr "Vložte číslo."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
-msgstr "Tato hodnota nesmí celkem mít více než %s cifer."
-
-#: forms/fields.py:228
+msgstr "Hodnota nesmí celkem mít více než %s cifer."
+
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
-msgstr "Tato hodnota nesmí mít za desetinnou čárkou více než %s cifer."
-
-#: forms/fields.py:229
+msgstr "Hodnota nesmí mít za desetinnou čárkou více než %s cifer."
+
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Tato hodnota nesmí mít před desetinnou čárkou více než %s cifer."
-
-#: forms/fields.py:288 forms/fields.py:863
+msgstr "Hodnota nesmí mít před desetinnou čárkou více než %s cifer."
+
+#: forms/fields.py:323
+#: forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Vložte platné datum."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:351
+#: forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Vložte platný čas."
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Vložte platné datum a čas."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-"Soubor nebyl odeslán. Zkontrolujte parametr \"encoding type\" formuláře."
-
-#: forms/fields.py:448
+msgstr "Soubor nebyl odeslán. Zkontrolujte parametr \"encoding type\" formuláře."
+
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Žádný soubor nebyl odeslán."
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Odeslaný soubor je prázdný."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
-msgid ""
-"Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Délka názvu souboru má být nejvýše %(max)d znaků, ale nyní je %(length)d."
-
-#: forms/fields.py:483
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Nahrajte platný obrázek. Odeslaný soubor buď nebyl obrázek nebo byl poškozen."
-
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Vložte platnou adresu URL."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Tato adresa URL je zřejmě neplatný odkaz."
-
-#: forms/fields.py:625 forms/fields.py:703
+msgid "Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr "Délka názvu souboru má být nejvýše %(max)d znaků, ale nyní je %(length)d."
+
+#: forms/fields.py:473
+msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
+msgstr "Nahrajte platný obrázek. Odeslaný soubor buď nebyl obrázek nebo byl poškozen."
+
+#: forms/fields.py:596
+#: forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Vyberte platnou možnost, \"%(value)s\" není k dispozici."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:988
+#: forms/fields.py:672
+#: forms/fields.py:734
+#: forms/models.py:995
 msgid "Enter a list of values."
 msgstr "Vložte seznam hodnot."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Vložte platnou adresu typu IPv4."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Vložte platný identifikátor složený pouze z písmen, čísel, podtržítek a "
-"pomlček."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:298
+#: forms/formsets.py:300
 msgid "Order"
 msgstr "Pořadí"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"Pole %(field_name)s musí být unikátní testem %(lookup)s pole %(date_field)s."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr ""
-"Položka %(model_name)s s touto hodnotou v poli %(field_label)s již existuje."
-
-#: forms/models.py:581
+#: forms/models.py:556
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Opravte duplicitní data v poli %(field)s."
 
-#: forms/models.py:585
+#: forms/models.py:560
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr "Opravte duplicitní data v poli %(field)s, které musí být unikátní."
 
-#: forms/models.py:591
+#: forms/models.py:566
 #, python-format
-msgid ""
-"Please correct the duplicate data for %(field_name)s which must be unique "
-"for the %(lookup)s in %(date_field)s."
-msgstr ""
-"Opravte duplicitní data v poli %(field_name)s, které musí být unikátní "
-"testem %(lookup)s pole %(date_field)s."
-
-#: forms/models.py:599
+msgid "Please correct the duplicate data for %(field_name)s which must be unique for the %(lookup)s in %(date_field)s."
+msgstr "Opravte duplicitní data v poli %(field_name)s, které musí být unikátní testem %(lookup)s pole %(date_field)s."
+
+#: forms/models.py:574
 msgid "Please correct the duplicate values below."
 msgstr "Odstraňte duplicitní hodnoty níže."
 
-#: forms/models.py:852
+#: forms/models.py:848
 msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"Cizí klíč typu inline neodpovídá primárnímu klíči v rodičovské položce."
-
-#: forms/models.py:915
+msgstr "Cizí klíč typu inline neodpovídá primárnímu klíči v rodičovské položce."
+
+#: forms/models.py:914
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Vyberte platnou možnost. Tato není k dispozici."
 
-#: forms/models.py:989
+#: forms/models.py:996
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Vyberte platnou možnost, \"%s\" není k dispozici."
 
-#: forms/models.py:991
+#: forms/models.py:998
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "Hodnota \"%s\" není platný primární klíč."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "ano, ne, možná"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
@@ -4127,17 +4687,17 @@
 msgstr[1] "%(size)d bajty"
 msgstr[2] "%(size)d bajtů"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4230,23 +4790,28 @@
 msgid "February"
 msgstr "únor"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "March"
 msgstr "březen"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "April"
 msgstr "duben"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "May"
 msgstr "květen"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "June"
 msgstr "červen"
 
-#: utils/dates.py:19 utils/dates.py:31
+#: utils/dates.py:19
+#: utils/dates.py:31
 msgid "July"
 msgstr "červenec"
 
@@ -4346,7 +4911,7 @@
 msgid "Dec."
 msgstr "prosinec"
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "nebo"
 
@@ -4406,33 +4971,38 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
 msgstr "j. n. Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j. n. Y H:i"
+
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
 msgstr "H:i"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
 msgstr "j. F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
-msgstr "Záznam typu %(verbose_name)s byl úspěšně vytvořen."
-
-#: views/generic/create_update.py:156
+msgstr "Položka typu %(verbose_name)s byla úspěšně vytvořena."
+
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
-msgstr "Záznam typu %(verbose_name)s byl úspěšně aktualizován."
-
-#: views/generic/create_update.py:198
+msgstr "Položka typu %(verbose_name)s byla úspěšně aktualizována."
+
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
-msgstr "Záznam typu %(verbose_name)s byl smazán."
+msgstr "Položka typu %(verbose_name)s byla odstraněna."
+
Binary file web/lib/django/conf/locale/cs/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/cs/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/cs/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -1,118 +1,120 @@
 # Translation of djangojs.po to Czech
 # Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the DJANGO package.
-# Radek Svarz <translate@svarz.cz>, 2005.
+# Radek Svarz <translate@svarz.cz>, 2005,
+# Vlada Macek <macek@sandbox.cz>, 2010.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-20 12:52+0200\n"
+"POT-Creation-Date: 2010-04-07 13:17+0200\n"
+"PO-Revision-Date: 2010-04-07 13:33+0100\n"
+"Last-Translator: Vlada Macek <macek@sandbox.cz>\n"
 "Language-Team: Czech\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>1 && n<5 ? 1 : 2;\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
-msgstr "Dostupná %s"
+msgstr "Dostupné položky: %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "Vybrat vše"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "Přidat"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "Odebrat"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
-msgstr "Vybraná %s"
+msgstr "Vybrané položky: %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
 msgstr "Vyberte si a klikněte "
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
-msgstr "Vymazat vše"
+msgstr "Odebrat vše"
 
 #: contrib/admin/media/js/calendar.js:24
 #: contrib/admin/media/js/dateparse.js:32
-msgid ""
-"January February March April May June July August September October November "
-"December"
-msgstr ""
-"Leden Únor Březen Duben Květen Červen Červenec Srpen Září Říjen Listopad "
-"Prosinec"
+msgid "January February March April May June July August September October November December"
+msgstr "leden únor březen duben květen červen červenec srpen září říjen listopad prosinec"
 
 #: contrib/admin/media/js/calendar.js:25
 msgid "S M T W T F S"
-msgstr "N P U S C P S"
+msgstr "n p ú s č p s"
+
+#: contrib/admin/media/js/collapse.js:9
+#: contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Zobrazit"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Skrýt"
 
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
 msgstr "Neděle Pondělí Úterý Středa Čtvrtek Pátek Sobota"
 
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Ukázat"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Skrýt"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:50
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Now"
 msgstr "Nyní"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:54
 msgid "Clock"
 msgstr "Hodiny"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
 msgid "Choose a time"
 msgstr "Vyberte čas"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "Midnight"
 msgstr "Půlnoc"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "6 a.m."
-msgstr "6 ráno"
+msgstr "6h ráno"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
 msgid "Noon"
 msgstr "Poledne"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:92
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "Storno"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "Dnes"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "Kalendář"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "Včera"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "Zítra"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/cs/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,32 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j. F Y'
+TIME_FORMAT = 'G:i:s'
+DATETIME_FORMAT = 'j. F Y G:i:s'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'd.m.Y'
+SHORT_DATETIME_FORMAT = 'd.m.Y G:i:s'
+FIRST_DAY_OF_WEEK = 1 # Monday
+DATE_INPUT_FORMATS = (
+    '%d.%m.%Y', '%d.%m.%y',     # '25.10.2006', '25.10.06'
+    '%Y-%m-%d', '%y-%m-%d',     # '2006-10-25', '06-10-25'
+    # '%d. %B %Y', '%d. %b. %Y',  # '25. October 2006', '25. Oct. 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S', # '14:30:59'
+    '%H:%M',    # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%d.%m.%Y %H:%M:%S',    # '25.10.2006 14:30:59'
+    '%d.%m.%Y %H:%M',       # '25.10.2006 14:30'
+    '%d.%m.%Y',             # '25.10.2006'
+    '%Y-%m-%d %H:%M:%S',    # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',       # '2006-10-25 14:30'
+    '%Y-%m-%d',             # '2006-10-25'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+NUMBER_GROUPING = 3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/cy/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'd F Y'
+TIME_FORMAT = 'g:i:s A'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+# MONTH_DAY_FORMAT = 
+SHORT_DATE_FORMAT = 'j M Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+# DECIMAL_SEPARATOR = 
+# THOUSAND_SEPARATOR = 
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/da/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/da/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/da/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -6,8 +6,8 @@
 msgstr ""
 "Project-Id-Version: Django 1.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-26 21:43+0200\n"
-"PO-Revision-Date: 2008-11-07 20:41+0200\n"
+"POT-Creation-Date: 2010-04-26 15:48+0200\n"
+"PO-Revision-Date: 2010-02-20 20:41+0200\n"
 "Last-Translator: Finn Gruwier Larsen<finn@gruwier.dk>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -19,215 +19,235 @@
 msgstr "Arabisk"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "Bulgarsk"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "Bengalsk"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Bulgarsk"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "Catalansk"
+msgid "Bosnian"
+msgstr "Bosnisk"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "Catalansk"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "Tjekkisk"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "Walisisk"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "Dansk"
+msgid "Welsh"
+msgstr "Walisisk"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "Dansk"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "Tysk"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "Græsk"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "Engelsk"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "Spansk"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Estisk"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "Argentisk spansk"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "Estisk"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "Baskisk"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
 msgid "Persian"
 msgstr "Persisk"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
 msgid "Finnish"
 msgstr "Finsk"
 
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "Fransk"
-
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Irsk"
+msgid "French"
+msgstr "Fransk"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Galicisk"
+msgid "Frisian"
+msgstr "Frisisk"
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Ungarsk"
+msgid "Irish"
+msgstr "Irsk"
 
 #: conf/global_settings.py:64
+msgid "Galician"
+msgstr "Galicisk"
+
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "Hebræisk"
 
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "Hindi"
-
 #: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "Hindi"
+
+#: conf/global_settings.py:67
 msgid "Croatian"
 msgstr "Kroatisk"
 
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "Islandsk"
-
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "Italiensk"
+msgid "Hungarian"
+msgstr "Ungarsk"
 
 #: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "Islandsk"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "Italiensk"
+
+#: conf/global_settings.py:71
 msgid "Japanese"
 msgstr "Japansk"
 
-#: conf/global_settings.py:70
+#: conf/global_settings.py:72
 msgid "Georgian"
 msgstr "Georgisk"
 
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "Koreansk"
-
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
 msgid "Khmer"
 msgstr "Khmer"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
 msgid "Kannada"
 msgstr "Kannada"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "Lettisk"
-
 #: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "Litauisk"
+msgid "Korean"
+msgstr "Koreansk"
 
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "Makedonsk"
+msgid "Lithuanian"
+msgstr "Litauisk"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "Hollandsk"
+msgid "Latvian"
+msgstr "Lettisk"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "Norsk"
+msgid "Macedonian"
+msgstr "Makedonsk"
 
 #: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "Hollandsk"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "Norsk"
+
+#: conf/global_settings.py:81
 msgid "Polish"
 msgstr "Polsk"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:82
 msgid "Portuguese"
 msgstr "Portugisisk"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
 msgid "Brazilian Portuguese"
 msgstr "Brasiliansk portugisisk"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
 msgid "Romanian"
 msgstr "Rumænsk"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
 msgid "Russian"
 msgstr "Russisk"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
 msgid "Slovak"
 msgstr "Slovakisk"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
 msgid "Slovenian"
 msgstr "Slovensk"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
+msgid "Albanian"
+msgstr "Albansk"
+
+#: conf/global_settings.py:89
 msgid "Serbian"
 msgstr "Serbisk"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:90
+msgid "Serbian Latin"
+msgstr "Serbisk (latin)"
+
+#: conf/global_settings.py:91
 msgid "Swedish"
 msgstr "Svensk"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:92
 msgid "Tamil"
 msgstr "Tamil"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:93
 msgid "Telugu"
 msgstr "Telugu"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:94
 msgid "Thai"
 msgstr "Thai"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:95
 msgid "Turkish"
 msgstr "Tyrkisk"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:96
 msgid "Ukrainian"
 msgstr "Ukrainsk"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "Vietnamesisk"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
 msgstr "Forenklet kinesisk"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "Traditionelt kinesisk"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "%(count)d %(items)s blev slettet."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
 msgid "Are you sure?"
 msgstr "Er du sikker?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Slet valgte %(verbose_name_plural)s"
@@ -266,19 +286,19 @@
 msgid "This year"
 msgstr "Dette år"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Ja"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "Nej"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Ukendt"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "Handling"
 
@@ -310,104 +330,125 @@
 msgid "log entries"
 msgstr "logmeddelelser"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
 msgid "None"
 msgstr "Ingen"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Changed %s."
 msgstr "Ændrede %s."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:562
 msgid "and"
 msgstr "og"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Tilføjede %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Ændrede %(list)s for %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:577
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Slettede %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:581
 msgid "No fields changed."
 msgstr "Ingen felter ændret."
 
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
+#: contrib/admin/options.py:647
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "%(name)s \"%(obj)s\" blev tilføjet i databasen."
 
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
 msgid "You may edit it again below."
 msgstr "Du kan redigere det igen herunder."
 
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
 #, python-format
 msgid "You may add another %s below."
 msgstr "Du kan tilføje endnu en %s herunder."
 
-#: contrib/admin/options.py:634
+#: contrib/admin/options.py:682
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\" blev ændret."
 
-#: contrib/admin/options.py:642
+#: contrib/admin/options.py:690
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr "%(name)s \"%(obj)s\" blev tilføjet. Du kan redigere det igen herunder."
 
-#: contrib/admin/options.py:773
+#: contrib/admin/options.py:744
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: contrib/admin/options.py:762
+msgid "No action selected."
+msgstr "Ingen handling valgt."
+
+#: contrib/admin/options.py:842
 #, python-format
 msgid "Add %s"
 msgstr "Tilføj %s"
 
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
+#: contrib/admin/options.py:868 contrib/admin/options.py:1080
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "Der findes ikke et %(name)s-objekt med primærnøgle %(key)r."
 
-#: contrib/admin/options.py:861
+#: contrib/admin/options.py:933
 #, python-format
 msgid "Change %s"
 msgstr "Ret %s"
 
-#: contrib/admin/options.py:905
+#: contrib/admin/options.py:978
 msgid "Database error"
 msgstr "databasefejl"
 
-#: contrib/admin/options.py:941
-#,  python-format
+#: contrib/admin/options.py:1014
+#, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s %(name)s blev ændret."
 msgstr[1] "%(count)s %(name)s blev ændret."
 
-#: contrib/admin/options.py:1020
+#: contrib/admin/options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s valgt"
+msgstr[1] "Alle %(total_count)s valgt"
+
+#: contrib/admin/options.py:1046
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 af %(cnt)s valgt"
+
+#: contrib/admin/options.py:1093
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)s \"%(obj)s\" blev slettet."
 
-#: contrib/admin/options.py:1057
+#: contrib/admin/options.py:1130
 #, python-format
 msgid "Change history: %s"
 msgstr "Ændringshistorik: %s"
 
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -415,11 +456,11 @@
 "Indtast venligst et korrekt brugernavn og adgangskode. Bemærk, at begge "
 "felter er versalfølsomme."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Log venligst ind igen, da din session er udløbet."
 
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -427,62 +468,52 @@
 "Det ser ud til din browser ikke er indstillet til at acceptere cookies. Slå "
 "venligst cookies til, genindlæs denne side og prøv igen."
 
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Brugernavne kan ikke indeholde tegnet '@'."
 
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Din e-mail-adresse er ikke dit brugernavn. Prøv '%s' i stedet."
 
-#: contrib/admin/sites.py:367
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Website-administration"
 
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Log ind"
 
-#: contrib/admin/sites.py:426
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "Administration af %s"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Et eller flere %(fieldname)s i %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Et eller flere %(fieldname)s i %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Dato:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Tid:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Nuværende:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Ret:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Slå op"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Tilføj endnu en"
 
@@ -497,17 +528,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -542,7 +573,20 @@
 
 #: contrib/admin/templates/admin/actions.html:4
 msgid "Go"
-msgstr "Kør"
+msgstr "Udfør"
+
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr ""
 
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
@@ -550,28 +594,28 @@
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:27
+#: contrib/admin/templates/admin/base.html:28
 msgid "Welcome,"
 msgstr "Velkommen,"
 
-#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Dokumentation"
 
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Skift adgangskode"
 
-#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Log ud"
 
@@ -583,41 +627,42 @@
 msgid "Django administration"
 msgstr "Django administration"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Tilføj"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Historik"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Se på website"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Ret venligst fejlen herunder."
 msgstr[1] "Ret venligst fejlene herunder."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "Tilføj %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Filtrer"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Slet"
 
@@ -657,17 +702,17 @@
 "your account doesn't have permission to delete the following types of "
 "objects:"
 msgstr ""
-"Hvis du sletter %(object_name)s, vil du også slette relaterede objekter, "
-"men din konto har ikke rettigheder til at slette følgende objekttyper:"
+"Hvis du sletter %(object_name)s, vil du også slette relaterede objekter, men "
+"din konto har ikke rettigheder til at slette følgende objekttyper:"
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:22
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
-"Er du sikker på du vil slette de valgte %(object_name)s-objekter? Alle "
-"de følgende relaterede objekter vil blive slettet:"
+"Er du sikker på du vil slette de valgte %(object_name)s-objekter? Alle de "
+"følgende relaterede objekter vil blive slettet:"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -730,15 +775,9 @@
 msgstr "Bruger"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Funktion"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j. F Y H:i"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -784,7 +823,7 @@
 msgid "Save and continue editing"
 msgstr "Gem og fortsæt med at redigere"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -792,33 +831,39 @@
 "Indtast først et brugernavn og en adgangskode. Derefter får du yderligere "
 "redigeringsmuligheder."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Brugernavn"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Adgangskode"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Adgangskode (igen)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Indtast den samme adgangskode som ovenfor for verifikation."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Indtast en ny adgangskode for brugeren <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Adgangskode"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Adgangskode (igen)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Indtast den samme adgangskode som ovenfor for verifikation."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Tilføj endnu en %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Fjern"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Slet?"
@@ -832,9 +877,9 @@
 msgstr "Log ind igen"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Skift adgangskode"
 
@@ -847,7 +892,7 @@
 msgid "Your password was changed."
 msgstr "Din adgangskode blev ændret."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -856,21 +901,17 @@
 "din nye adgangskode to gange, så vi kan være sikre på, at den er indtastet "
 "korrekt."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Gammel adgangskode:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Ny adgangskode:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Bekræft ny adgangskode:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Gammel adgangskode"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Ny adgangskode"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Skift min adgangskode"
@@ -909,6 +950,14 @@
 "Indtast venligst din nye adgangskode to gange, så vi kan være sikre på, at "
 "den er indtastet korrekt."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Ny adgangskode:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Bekræft ny adgangskode:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Adgangskoden blev ikke nulstillet"
@@ -978,7 +1027,7 @@
 msgid "Reset my password"
 msgstr "Nulstil min adgangskode"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Alle datoer"
 
@@ -992,11 +1041,11 @@
 msgid "Select %s to change"
 msgstr "Vælg %s, der skal ændres"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "website"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "skabelon"
 
@@ -1056,89 +1105,7 @@
 msgid "Fields on %s objects"
 msgstr "Felter på %s-objekter"
 
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Heltal"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Boolsk (enten True eller False)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Streng (op til %(max_length)s)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Kommaseparerede heltal"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Dato (uden tid)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Dato (med tid)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Decimaltal"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "E-mail-adresse"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Sti"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Flydende-komma-tal"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "IP-adresse"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolsk (True, False eller None)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Relation til forældermodel"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Telefonnummer"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Tekst"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Tid"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stat (i USA, to store bogstaver)"
-
 #: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "XML-tekst"
-
-#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s ser ikke ud til at være et urlpattern-objekt"
@@ -1162,15 +1129,12 @@
 "your computer is \"internal\").</p>\n"
 msgstr ""
 "\n"
-"<p class=\"help\">For at installere bookmarklets, træk linket til din "
-"bogmærkelinje\n"
-" eller højreklik på linket og tilføj det til dine bogmærker. Du kan nu\n"
-"markere bookmarkletten fra enhver side på websitet. Bemærk, at nogle af "
-"disse \n"
-"bookmarkletter kræver, at du ser på websitet fra en computer der opfattes \n"
-"som \"intern\" (tal med din systemadministrator, hvis du ikke er sikker på "
-"om\n"
-"din computer er \"intern\").</p>\n"
+"<p class=\"help\">For at installere bookmarklets, træk linket til din\n"
+"bogmærkelinje eller højreklik på linket og tilføj det til dine bogmærker.\n"
+"Du kan nu markere bookmarkletten fra enhver side på websitet.\n"
+"Bemærk, at nogle af disse bookmarkletter kræver, at du ser på websitet fra\n"
+"en computer der opfattes som \"intern\" (tal med din systemadministrator,\n"
+"hvis du ikke er sikker på om din computer er \"intern\").</p>\n"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
 msgid "Documentation for this page"
@@ -1214,66 +1178,62 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Som ovenfor, men åbner administrationssiden i et nyt vindue."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Personlig information"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Rettigheder"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Vigtige datoer"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Grupper"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Tilføj bruger"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Adgangskoden blev ændret."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Skift adgangskode: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Brugernavn"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr "Påkrævet. Højst 30 tegn. Kun  bogstaver og cifre samt @/./+/-/_"
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
 msgstr ""
-"Påkrævet. Højst 30 tegn, kun alfanumeriske tegn (bogstaver og cifre samt "
-"understreg)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Dette felt må kun indeholde bogstaver og cifre samt understreg."
+"Dette felt må kun indeholde bogstaver og cifre samt disse tegn: @/./+/-/_"
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Bekræftelse af adgangskode"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "En bruger med dette brugernavn findes allerede."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "De to adgangskoder var ikke identiske."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Denne konto er inaktiv."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1281,11 +1241,11 @@
 "Din browser ser ud til ikke at have cookies aktiveret. Cookies er påkrævet "
 "for at kunne logge ind."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "E-mail"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1293,73 +1253,71 @@
 "Den e-mail-adresse er ikke tilknyttet en konto. Er du sikker på at du har "
 "registreret dig?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Adgangskode nulstillet på %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Ny adgangskode"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Bekræftelse af ny adgangskode"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Gammel adgangskode"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr ""
 "Din gamle adgangskode blev ikke indtastet korrekt. Indtast den venligst igen."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "navn"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "kodenavn"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "rettighed"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "rettigheder"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "gruppe"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "grupper"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "brugernavn"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Påkrævet. Højst 30 tegn. Kun  bogstaver og cifre samt disse tegn: @/./+/-/_"
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "fornavn"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "efternavn"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "e-mail-adresse"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "adgangskode"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1367,19 +1325,19 @@
 "Brug '[algo]$[salt]$[hexdigest]' eller brug <a href=\"password/\">formularen "
 "til skift af adgangskode</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "admin-status"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Bestemmer om brugeren kan logge ind på dette administrationswebsite."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "aktiv"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1387,26 +1345,26 @@
 "Bestemmer om brugeren skal behandles som aktiv. Fravælg dette frem for at "
 "slette en konto."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "superbrugerstatus"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
 msgstr ""
 "Bestemmer at denne bruger har alle rettigheder uden at tildele dem eksplicit."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "sidst logget ind"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "dato for registrering"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1414,39 +1372,77 @@
 "Udover de rettigheder, der manuelt er tildelt brugeren, vil denne også få "
 "alle rettigheder, der er tildelt hver gruppe, brugeren er medlem af."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "Rettigheder"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "bruger"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "brugere"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "meddelelse"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Logget ud"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Indtast en gyldig e-mail-adresse."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Indhold"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metadata"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "Markeret"
+msgstr[1] "Markeret"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Marker valgte kommentarer"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "Godkendt"
+msgstr[1] "Godkendt"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Godkend valgte kommentarer"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "fjernet"
+msgstr[1] "fjernet"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Fjern valgte kommentarer"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 kommentar blev %(action)s"
+msgstr[1] "%(count)s kommentarer blev %(action)s."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1458,7 +1454,6 @@
 msgstr "Seneste kommentarer på %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Navn"
 
@@ -1466,26 +1461,30 @@
 msgid "Email address"
 msgstr "E-mail-adresse"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Kommentar"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Var din mund! Ordet %s er ikke tilladt her."
 msgstr[1] "Var din mund! Ordene %s er ikke tilladt her."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr ""
 "Hvis du indtaster noget i dette felt, vil din kommentar blive betragtet som "
 "spam."
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "indholdstype"
 
@@ -1514,6 +1513,10 @@
 msgid "date/time submitted"
 msgstr "dato/tidspunkt for oprettelse"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "IP-adresse"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "er offentlig"
@@ -1596,7 +1599,6 @@
 msgstr "Vil du godkende denne kommentar?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Godkend"
 
@@ -1621,11 +1623,6 @@
 msgid "Really remove this comment?"
 msgstr "Skal kommentaren fjernes?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Fjern"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Tak for fjernelsen"
@@ -1644,7 +1641,7 @@
 
 #: contrib/comments/templates/comments/flagged.html:4
 msgid "Thanks for flagging"
-msgstr "Tak for flagningen"
+msgstr "Tak for markeringen"
 
 #: contrib/comments/templates/comments/form.html:17
 #: contrib/comments/templates/comments/preview.html:32
@@ -1656,39 +1653,6 @@
 msgid "Preview"
 msgstr "Forhåndsvis"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Moderationskø"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Ingen kommentarer at moderere"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "E-mail"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Autenticeret?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP-adresse"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Indsendt d."
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "ja"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "nej"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Tak for kommenteringen"
@@ -1716,11 +1680,11 @@
 msgid "or make changes"
 msgstr "eller gennemfør ændringer"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "klassenavn i Python-model"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "indholdstyper"
 
@@ -1785,7 +1749,7 @@
 msgid "flat pages"
 msgstr "flade sider"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1793,6 +1757,38 @@
 "Tiden er udløbet - vi beklager. Vær venlig at fortsætte med at udfylde "
 "formularen på denne side."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Punkt"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Linjesegment"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Polygon"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Multipunkt"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Multilinjesegment"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Multipolygon"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Geometrisamling"
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Ingen værdi givet for geometri."
@@ -1810,6 +1806,7 @@
 "An error occurred when transforming the geometry to the SRID of the geometry "
 "form field."
 msgstr ""
+"Der opstod en fejl ved transformation af geometrien til formularfeltets SRID"
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
@@ -1896,25 +1893,25 @@
 msgid "yesterday"
 msgstr "i går"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Indtast et postnummer i formatet NNNN eller ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "I dette felt skal kun indtastes cifre."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Dette felt kræver 7 eller 8 cifre."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Indtast en gyldig CUIT i format XX-XXXXXXXX-X eller XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "Ugyldig CUIT."
 
@@ -1954,8 +1951,8 @@
 msgid "Vienna"
 msgstr "Vienna"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Indtast et postnummer i formatet XXXX."
 
@@ -1963,45 +1960,45 @@
 msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
 msgstr "Indtast et gyldigt østrigsk sygesikringsnummer i format XXXX XXXXXX."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Indtast et firecifret postnummer."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Indtast et postnummer i formatet XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Telefinnumre skal være i formatet XX-XXXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
 msgstr "Vælg en gyldig brasiliansk provins. Denne provins er ikke gyldig."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Ugyldigt CPF-nummer."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Dette felt kræver mindst 11 og højst 14 tegn."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Ugyldigt CNPJ-nummer."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "dette felt kræver mindst 14 cifre."
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Indtast et postnummer i formatet XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr "Indtast et gyldigt kanadisk sygesikringsnummer i formatet XXX-XXX-XXX."
 
@@ -2109,7 +2106,7 @@
 msgid "Zurich"
 msgstr "Zurich"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2117,15 +2114,15 @@
 "Indtast et svejtsisk identitets- eller pasnr. i format X1234567<0 eller "
 "1234567890."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Indtast en gyldig chilensk RUT"
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Indtast en gyldig chilensk RUT. Formatet er XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "Den chilenske RUT er ugyldig."
 
@@ -2185,23 +2182,23 @@
 msgid "Moravian-Silesian Region"
 msgstr "Moravien-Silesien"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Indtast et postnr. i format XXXXX eller XXX XX."
 
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Indtast et fødselsnr. i formatet XXXXXX/XXXX or XXXXXXXXXX."
-
 #: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Ugyldig værdi for køn. Gyldige værdier er 'f' og 'm'."
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Indtast et fødselsnr. i formatet XXXXXX/XXXX or XXXXXXXXXX."
 
 #: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr "Ugyldig værdi for køn. Gyldige værdier er 'f' og 'm'."
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Indtast et gyldigt fødselsnummer."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Indtast et IC-nummer."
 
@@ -2269,12 +2266,12 @@
 msgid "Thuringia"
 msgstr "Thuringia"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Indtast et postnummer i formatet XXXXX"
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2548,75 +2545,507 @@
 msgid "Valencian Community"
 msgstr "Valencian Community"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Indtast et gyldigt postnr. i området 01XXX - 52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
 msgstr ""
-"Indtast et gyldigt telefonr. i et af disse formater: 6XXXXXXXX, 8XXXXXXXX, "
+"Indtast et gyldigt telefonnr. i et af disse formater: 6XXXXXXXX, 8XXXXXXXX, "
 "9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Indtast venligst gyldig NIF, NIE eller CIF."
 
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr "Indtast venligst gyldig NIF eller NIE."
-
 #: contrib/localflavor/es/forms.py:68
+msgid "Please enter a valid NIF or NIE."
+msgstr "Indtast venligst gyldig NIF eller NIE."
+
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Ugyldig kontrolsum for NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Ugyldig kontrolsum for NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Ugyldig kontrolsum for CIF."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr ""
 "Indtast venligst et gyldigt bankkontonr. i formatet XXX-XXXX-XX-XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Ugyldig kontrolsum for bankkontonr."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Indtast et gyldigt finsk sygesikringsnummer."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Telefonnumre skal være i formatet 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Indtast et gyldigt postnummer"
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Indtast et gyldigt telefonnummer"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Indtast et gyldigt bilnummer"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Indtast et gyldigt NIK/KTP-nummer."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Bali"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Banten"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Bengkulu"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Yogyakarta"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Jakarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Gorontalo"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Jambi"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Jawa Barat"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Jawa Tengah"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Jawa Timur"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Kalimantan Barat"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Kalimantan Selatan"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Kalimantan Tengah"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Kalimantan Timur"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Kepulauan Bangka-Belitung"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Kepulauan Riau"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Lampung"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Maluku"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Maluku Utara"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Nanggroe Aceh Darussalam"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Nusa Tenggara Barat"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Nusa Tenggara Timur"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Papua"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Riau"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "Sulawesi Selatan"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "Sulawesi Tengah"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "Sulawesi Tenggara"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "Sulawesi Utara"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "Sumatera Barat"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "Sumatera Selatan"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "Sumatera Utara"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "Magelang"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "Surakarta - Solo"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "Madiun"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "Kediri"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "Tapanuli"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "Kepulauan Bangka Belitung"
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr "Corps Consulate"
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr "Corps Diplomatic"
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "Bandung"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr "Sulawesi Utara Daratan"
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - Timor"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr "Sulawesi Utara Kepulauan"
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - Lombok"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "Papua dan Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "Cirebon"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - Sumbawa"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - Flores"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - Sumba"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "Bogor"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "Pekalongan"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "Semarang"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "Pati"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "Surabaya"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "Madura"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "Malang"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "Jember"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "Banyumas"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "Federal Government"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "Bojonegoro"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "Purwakarta"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "Sidoarjo"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "Garut"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "Armagh"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "Carlow"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "Cavan"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "Clare"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "Cork"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "Derry"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "Donegal"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "Down"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Dublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "Galway"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "Kerry"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "Kildare"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "Kilkenny"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "Laois"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "Leitrim"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "Limerick"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "Longford"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "Louth"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Mayo"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "Meath"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "Monaghan"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "Offaly"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "Roscommon"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "Shigo"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "Tipperary"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "Tyrol"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "Waterford"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "Westmeath"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "Wexford"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "Wicklow"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Indtast et postnr. i formatet XXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr ""
 "Indtast et gyldigt islandsk identifikationsnr. Formatet er XXXXXX-XXXX."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "Det islandske identifikationsnummer er ikke gyldigt."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Indtast et gyldigt postnummer."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Indtast et gyldigt sygesikringsnummer."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Indtast et gyldigt momsnummer."
 
@@ -2812,6 +3241,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Indtast et gyldigt kuwaitisk personnummer."
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2940,15 +3373,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Indtast et gyldigt postnummer"
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Indtast et gyldigt telefonnummer"
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Indtast et gyldigt SoFi-nummer"
 
@@ -3000,15 +3429,15 @@
 msgid "Zuid-Holland"
 msgstr "Zuid-Holland"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Indtast et gyldigt norsk sygesikringsnummer."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Dette felt kræver 8 cifre."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Dette felt kræver 11 cifre."
 
@@ -3105,6 +3534,14 @@
 msgid "West Pomerania"
 msgstr "West Pomerania"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Indtast et postnummer i formatet XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Indtast et gyldigt CIF."
@@ -3125,6 +3562,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Indtast et gyldigt postnummer i formatet XXXXXX"
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Indtast et gyldigt svensk organisationsnummer."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Indtast et gyldigt svensk personnummer."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Koordinationsnumre er ikke tilladt."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Indtast et svensk postnummer i formatet XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Stockholm"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Banska Bystrica"
@@ -3211,7 +3748,7 @@
 
 #: contrib/localflavor/sk/sk_districts.py:29
 msgid "Komarno"
-msgstr "mar"
+msgstr "Komarno"
 
 #: contrib/localflavor/sk/sk_districts.py:30
 msgid "Kosice I"
@@ -3475,7 +4012,7 @@
 
 #: contrib/localflavor/uk/forms.py:21
 msgid "Enter a valid postcode."
-msgstr "Indtast et gyldigt filnavn."
+msgstr "Indtast et gyldigt postnummer."
 
 #: contrib/localflavor/uk/uk_regions.py:11
 msgid "Bedfordshire"
@@ -3757,19 +4294,44 @@
 msgid "Wales"
 msgstr "Walisisk"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Indtast et postnr. i format XXXXX eller XXXXX-XXXX."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Telefonnumre skal være i formatet XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr "Indtast et gyldigt U. S sygesikringsnummer i format XXX-XX-XXXX."
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Indtast en amerikansk stat."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Stat (i USA, to store bogstaver)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Telefonnummer"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+"Indtast et gyldigt CI-nummer i formatet X.XXX.XXX-X,XXXXXXX-X eller XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Indtast et gyldigt CI-nummer."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Indtast et gyldigt sydafrikansk sygesikringsnummer."
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Indtast et gyldigt sydafrikansk postnummer."
 
@@ -3809,6 +4371,10 @@
 msgid "Western Cape"
 msgstr "Western Cape"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "doven meddelelse"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "rediriger fra"
@@ -3873,58 +4439,218 @@
 msgid "sites"
 msgstr "websites"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Denne værdi skal et heltal."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Denne værdi skal være enten True eller False."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Indtast en gyldig værdi."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Indtast en gyldig URL."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Denne URL henviser ikke til en gyldig side eller fil."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Dette felt må kun indeholde bogstaver, cifre, understreger og bindestreger."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Indtast en gyldig IPv4-adresse."
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Indtast kun cifre adskilt af kommaer."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Denne værdi skal være %(limit_value)s (den er %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Denne værdi skal være mindre end eller lig %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Denne værdi skal være større end eller lig %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Denne værdi skal mindst indeholde %(limit_value)d tegn (den indeholder %"
+"(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Denne værdi må maksimalt indeholde %(limit_value)d tegn (den har %"
+"(show_value)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s skal være unik for %(date_field)s %(lookup)s."
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s med dette %(field_label)s eksisterer allerede."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Værdien %r er ikke et gyldigt valg."
+
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Dette felt kan ikke være null."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Indtast kun cifre adskilt af kommaer."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Dette felt kan ikke være tomt."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Felt af type: %(field_type)s"
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Heltal"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+msgid "This value must be an integer."
+msgstr "Denne værdi skal et heltal."
+
+#: db/models/fields/__init__.py:490
+msgid "This value must be either True or False."
+msgstr "Denne værdi skal være enten True eller False."
+
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Boolsk (enten True eller False)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Streng (op til %(max_length)s)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Kommaseparerede heltal"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Dato (uden tid)"
+
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Indtast en gyldig dato i formatet ÅÅÅÅ-MM-DD."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Ugyldig dato: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr "Indtast gyldig dato og tid i formatet ÅÅÅÅ-MM-DD TT:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Dato (med tid)"
+
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "Denne værdi skal et decimaltal."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Decimaltal"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "E-mail-adresse"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Sti"
+
+#: db/models/fields/__init__.py:822
 msgid "This value must be a float."
 msgstr "Denne værdi skal være et kommatal."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "Flydende-komma-tal"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Stort heltal (8 byte)"
+
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr "Denne værdi skal være None, True eller False."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Boolsk (True, False eller None)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Tekst"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Tid"
+
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Indtast en gyldig tid i formatet TT:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "XML-tekst"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "En model %(model)s med primærnøgle %(pk)r eksisterer ikke."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Fremmednøgle (type bestemt af relateret felt)"
+
+#: db/models/fields/related.py:923
+msgid "One-to-one relationship"
+msgstr "En-til-en-relation"
+
+#: db/models/fields/related.py:983
+msgid "Many-to-many relationship"
+msgstr "Mange-til-mange-relation"
+
+#: db/models/fields/related.py:1003
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Hold \"Ctrl\" (eller \"Æbletasten\" på Mac) nede for at vælge mere end en."
 
-#: db/models/fields/related.py:894
+#: db/models/fields/related.py:1064
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3934,89 +4660,64 @@
 msgstr[1] ""
 "Indtast venligst gyldige %(self)s-ID'er. Værdierne %(value)r er ugyldige."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Dette felt er påkrævet."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Indtast en gyldig værdi."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Denne værdi må maksimalt indeholde %(max)d tegn (den har %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Denne værdi skal mindst indeholde %(min)d tegn (den indeholder %(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Indtast et heltal."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Denne værdi skal være mindre end eller lig %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Denne værdi skal være større end eller lig %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Indtast et tal."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Der må maksimalt være %s cifre i alt."
 
-#: forms/fields.py:228
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Der må højst være %s decimalpladser."
 
-#: forms/fields.py:229
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Der må maksimalt være %s cifre før decimaltegnet."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Indtast en gyldig dato."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Indtast en gyldig tid."
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Indtast gyldig dato/tid."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "Ingen fil blev indsendt. Kontroller kodningstypen i formularen."
 
-#: forms/fields.py:448
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Ingen fil blev indsendt."
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Den indsendte fil er tom."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
 msgstr "Denne værdi må maksimalt indeholde %(max)d tegn (den har %(length)d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4024,116 +4725,88 @@
 "Indsend en billedfil. Filen, du indsendte, var enten ikke et billede eller "
 "en defekt billedfil."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Indtast en gyldig URL."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Denne URL henviser ikke til en gyldig side eller fil."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr ""
 "Marker en gyldigt valgmulighed; '%(value)s' er ikke en af de tilgængelige "
 "valgmuligheder."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:995
 msgid "Enter a list of values."
 msgstr "Indtast en liste af værdier."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Indtast en gyldig IPv4-adresse."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Dette felt må kun indeholde bogstaver, cifre, understreger og bindestreger."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Rækkefølge"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s skal være unik for %(date_field)s %(lookup)s."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s med dette %(field_label)s eksisterer allerede."
-
-#: forms/models.py:594
+#: forms/models.py:556
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Ret venligst duplikerede data for %(field)s."
 
-#: forms/models.py:598
+#: forms/models.py:560
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr "Ret venligst de duplikerede data for %(field)s, som skal være unik."
 
-#: forms/models.py:604
+#: forms/models.py:566
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
 "for the %(lookup)s in %(date_field)s."
 msgstr ""
-"Ret venligst de duplikerede data for %(field_name)s, som skal være unik "
-"for %(lookup)s i %(date_field)s."
-
-#: forms/models.py:612
+"Ret venligst de duplikerede data for %(field_name)s, som skal være unik for %"
+"(lookup)s i %(date_field)s."
+
+#: forms/models.py:574
 msgid "Please correct the duplicate values below."
 msgstr "Ret venligst de duplikerede data herunder."
 
-#: forms/models.py:867
+#: forms/models.py:848
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr ""
 "Den indlejrede fremmednøgle passede ikke med forælderinstansens primærnøgle."
 
-#: forms/models.py:930
+#: forms/models.py:914
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr ""
 "Marker en gyldig valgmulighed. Det valg, du har foretaget, er ikke blandt de "
 "tilgængelige valgmuligheder."
 
-#: forms/models.py:1004
+#: forms/models.py:996
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr ""
 "Marker et gyldigt valg. %s er ikke en af de tilgængelige valgmuligheder."
 
-#: forms/models.py:1006
+#: forms/models.py:998
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" er ikke en gyldig værdi for en primærnøgle."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "ja,nej,måske"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d byte"
 msgstr[1] "%(size)d bytes"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4342,7 +5015,7 @@
 msgid "Dec."
 msgstr "Dec."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "eller"
 
@@ -4396,34 +5069,37 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
 msgstr "j. F Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j. F Y H:i"
+
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
 msgstr "H:i"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
 msgstr "j. F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "%(verbose_name)s blev oprettet."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "%(verbose_name)s blev opdateret."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s blev slettet."
-
Binary file web/lib/django/conf/locale/da/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/da/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/da/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-09 20:20+0200\n"
+"POT-Creation-Date: 2010-04-26 15:49+0200\n"
 "PO-Revision-Date: 2008-08-13 22:00+0200\n"
 "Last-Translator: Finn Gruwier Larsen<finn@gruwier.dk>\n"
 "Language-Team: \n"
@@ -14,36 +14,43 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
 msgstr "Tilgængelige %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "Vælg alle"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "Tilføj"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "Fjern"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
 msgstr "Valgte %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
 msgstr "Foretag dit/dine valg og klik "
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
 msgstr "Fravælg alle"
 
+#: contrib/admin/media/js/actions.js:17
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] "%(sel)s af %(cnt)s valgt"
+msgstr[1] "%(sel)s af %(cnt)s valgt"
+
 #: contrib/admin/media/js/calendar.js:24
 #: contrib/admin/media/js/dateparse.js:32
 msgid ""
@@ -57,62 +64,63 @@
 msgid "S M T W T F S"
 msgstr "S M T O T F L"
 
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Vis"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Skjul"
+
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
 msgstr "Søndag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag"
 
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Vis"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Skjul"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Now"
 msgstr "Nu"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
 msgid "Clock"
 msgstr "Ur"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
 msgid "Choose a time"
 msgstr "Vælg et tidspunkt"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Midnight"
 msgstr "Midnat"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "6 a.m."
 msgstr "6 morgen"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "Noon"
 msgstr "Middag"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "Annuller"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "I dag"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "Kalender"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "I går"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "I morgen"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/da/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,26 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j. F Y'
+TIME_FORMAT = 'H:i'
+DATETIME_FORMAT = 'j. F Y H:i'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'd.m.Y'
+SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+FIRST_DAY_OF_WEEK = 1
+DATE_INPUT_FORMATS = (
+    '%d.%m.%Y',                         # '25.10.2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',                         # '14:30:59'
+    '%H:%M',                            # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%d.%m.%Y %H:%M:%S',                # '25.10.2006 14:30:59'
+    '%d.%m.%Y %H:%M',                   # '25.10.2006 14:30'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/de/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/de/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/de/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -7,8 +7,8 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-23 18:58+0200\n"
-"PO-Revision-Date: 2008-08-28 22:58+0100\n"
+"POT-Creation-Date: 2010-05-05 00:38+0200\n"
+"PO-Revision-Date: 2010-04-26 13:53+0100\n"
 "Last-Translator: Jannis Leidel <jannis@leidel.info>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
@@ -24,215 +24,251 @@
 msgstr "Arabisch"
 
 #: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "Bengali"
+msgid "Bulgarian"
+msgstr "Bulgarisch"
 
 #: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Bulgarisch"
+msgid "Bengali"
+msgstr "Bengali"
 
 #: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr "Bosnisch"
+
+#: conf/global_settings.py:48
 msgid "Catalan"
 msgstr "Katalanisch"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "Tschechisch"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:50
 msgid "Welsh"
 msgstr "Walisisch"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:51
 msgid "Danish"
 msgstr "Dänisch"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "Deutsch"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "Griechisch"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "Englisch"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
+msgid "British English"
+msgstr "Britisches Englisch"
+
+#: conf/global_settings.py:56
 msgid "Spanish"
 msgstr "Spanisch"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Estnisch"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "Argentinisches Spanisch"
-
 #: conf/global_settings.py:57
-msgid "Basque"
-msgstr "Baskisch"
+msgid "Argentinean Spanish"
+msgstr "Argentinisches Spanisch"
 
 #: conf/global_settings.py:58
+msgid "Estonian"
+msgstr "Estnisch"
+
+#: conf/global_settings.py:59
+msgid "Basque"
+msgstr "Baskisch"
+
+#: conf/global_settings.py:60
 msgid "Persian"
 msgstr "Persisch"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:61
 msgid "Finnish"
 msgstr "Finnisch"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:62
 msgid "French"
 msgstr "Französisch"
 
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Irisch"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Galicisch"
-
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Ungarisch"
+msgid "Frisian"
+msgstr "Friesisch"
 
 #: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "Hebräisch"
+msgid "Irish"
+msgstr "Irisch"
 
 #: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "Hindi"
+msgid "Galician"
+msgstr "Galicisch"
 
 #: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "Kroatisch"
+msgid "Hebrew"
+msgstr "Hebräisch"
 
 #: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "Isländisch"
+msgid "Hindi"
+msgstr "Hindi"
 
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "Italienisch"
+msgid "Croatian"
+msgstr "Kroatisch"
 
 #: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "Japanisch"
+msgid "Hungarian"
+msgstr "Ungarisch"
 
 #: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "Georgisch"
+msgid "Icelandic"
+msgstr "Isländisch"
 
 #: conf/global_settings.py:71
-msgid "Korean"
-msgstr "Koreanisch"
+msgid "Italian"
+msgstr "Italienisch"
 
 #: conf/global_settings.py:72
+msgid "Japanese"
+msgstr "Japanisch"
+
+#: conf/global_settings.py:73
+msgid "Georgian"
+msgstr "Georgisch"
+
+#: conf/global_settings.py:74
 msgid "Khmer"
 msgstr "Khmer"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:75
 msgid "Kannada"
 msgstr "Kannada"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "Lettisch"
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "Litauisch"
-
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "Mazedonisch"
+msgid "Korean"
+msgstr "Koreanisch"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "Holländisch"
+msgid "Lithuanian"
+msgstr "Litauisch"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "Norwegisch"
+msgid "Latvian"
+msgstr "Lettisch"
 
 #: conf/global_settings.py:79
+msgid "Macedonian"
+msgstr "Mazedonisch"
+
+#: conf/global_settings.py:80
+msgid "Mongolian"
+msgstr "Mongolisch"
+
+#: conf/global_settings.py:81
+msgid "Dutch"
+msgstr "Holländisch"
+
+#: conf/global_settings.py:82
+msgid "Norwegian"
+msgstr "Norwegisch"
+
+#: conf/global_settings.py:83
+msgid "Norwegian Bokmal"
+msgstr "Norwegisch (Bokmål)"
+
+#: conf/global_settings.py:84
+msgid "Norwegian Nynorsk"
+msgstr "Norwegisch (Nynorsk)"
+
+#: conf/global_settings.py:85
 msgid "Polish"
 msgstr "Polnisch"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:86
 msgid "Portuguese"
 msgstr "Portugiesisch"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:87
 msgid "Brazilian Portuguese"
 msgstr "Brasilianisches Portugiesisch"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:88
 msgid "Romanian"
 msgstr "Rumänisch"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:89
 msgid "Russian"
 msgstr "Russisch"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:90
 msgid "Slovak"
 msgstr "Slowakisch"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:91
 msgid "Slovenian"
 msgstr "Slowenisch"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:92
+msgid "Albanian"
+msgstr "Albanisch"
+
+#: conf/global_settings.py:93
 msgid "Serbian"
 msgstr "Serbisch"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:94
+msgid "Serbian Latin"
+msgstr "Serbisch (Latein)"
+
+#: conf/global_settings.py:95
 msgid "Swedish"
 msgstr "Schwedisch"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:96
 msgid "Tamil"
 msgstr "Tamilisch"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:97
 msgid "Telugu"
 msgstr "Telugisch"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:98
 msgid "Thai"
 msgstr "Thailändisch"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:99
 msgid "Turkish"
 msgstr "Türkisch"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:100
 msgid "Ukrainian"
 msgstr "Ukrainisch"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:101
+msgid "Vietnamese"
+msgstr "Vietnamesisch"
+
+#: conf/global_settings.py:102
 msgid "Simplified Chinese"
 msgstr "Vereinfachtes Chinesisch"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:103
 msgid "Traditional Chinese"
 msgstr "Traditionelles Chinesisch"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:48
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Erfolgreich %(count)d %(items)s gelöscht."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
+#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
 msgid "Are you sure?"
 msgstr "Sind Sie sicher?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:73
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Ausgewählte %(verbose_name_plural)s löschen"
@@ -271,19 +307,19 @@
 msgid "This year"
 msgstr "Dieses Jahr"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Ja"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "Nein"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Unbekannt"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "Aktion:"
 
@@ -315,61 +351,60 @@
 msgid "log entries"
 msgstr "Logeinträge"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:138 contrib/admin/options.py:153
 msgid "None"
 msgstr "-"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:559
 #, python-format
 msgid "Changed %s."
 msgstr "%s geändert."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
+#: contrib/admin/options.py:559 contrib/admin/options.py:569
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:568
 msgid "and"
 msgstr "und"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:564
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "%(name)s \"%(object)s\" hinzugefügt."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "%(list)s von %(name)s \"%(object)s\" geändert."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:573
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "%(name)s \"%(object)s\" gelöscht."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:577
 msgid "No fields changed."
 msgstr "Keine Felder geändert."
 
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
+#: contrib/admin/options.py:643
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt."
 
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:647 contrib/admin/options.py:680
 msgid "You may edit it again below."
 msgstr "Das Element kann jetzt erneut bearbeitet werden."
 
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
+#: contrib/admin/options.py:657 contrib/admin/options.py:690
 #, python-format
 msgid "You may add another %s below."
 msgstr "Es kann ein weiteres Element des Typs %s angelegt werden."
 
-#: contrib/admin/options.py:634
+#: contrib/admin/options.py:678
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\" wurde erfolgreich geändert."
 
-#: contrib/admin/options.py:642
+#: contrib/admin/options.py:686
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -377,45 +412,69 @@
 "%(name)s \"%(obj)s\" wurde erfolgreich hinzugefügt. Das Element kann jetzt "
 "geändert werden."
 
-#: contrib/admin/options.py:773
+#: contrib/admin/options.py:740 contrib/admin/options.py:997
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Es müssen Objekte aus der Liste ausgewählt werden, um Aktionen "
+"durchzuführen. Es wurden keine Objekte geändert."
+
+#: contrib/admin/options.py:759
+msgid "No action selected."
+msgstr "Keine Aktion ausgewählt."
+
+#: contrib/admin/options.py:840
 #, python-format
 msgid "Add %s"
 msgstr "%s hinzufügen"
 
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
+#: contrib/admin/options.py:866 contrib/admin/options.py:1105
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr ""
 "Das %(name)s-Objekt mit dem Primärschlüssel %(key)r ist nicht vorhanden."
 
-#: contrib/admin/options.py:861
+#: contrib/admin/options.py:931
 #, python-format
 msgid "Change %s"
 msgstr "%s ändern"
 
-#: contrib/admin/options.py:905
+#: contrib/admin/options.py:977
 msgid "Database error"
 msgstr "Datenbankfehler"
 
-#: contrib/admin/options.py:941
+#: contrib/admin/options.py:1039
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s \"%(name)s\" wurde erfolgreich geändert."
 msgstr[1] "%(count)s \"%(name)s\" wurden erfolgreich geändert."
 
-#: contrib/admin/options.py:1020
+#: contrib/admin/options.py:1066
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s ausgewählt"
+msgstr[1] "Alle %(total_count)s ausgewählt"
+
+#: contrib/admin/options.py:1071
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 von %(cnt)s ausgewählt"
+
+#: contrib/admin/options.py:1118
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)s \"%(obj)s\" wurde erfolgreich gelöscht."
 
-#: contrib/admin/options.py:1057
+#: contrib/admin/options.py:1155
 #, python-format
 msgid "Change history: %s"
 msgstr "Änderungsgeschichte: %s"
 
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -423,11 +482,11 @@
 "Bitte einen gültigen Benutzernamen und ein Passwort eingeben. Beide Felder "
 "berücksichtigen die Groß-/Kleinschreibung."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Bitte melden Sie sich erneut an, da Ihre Sitzung abgelaufen ist."
 
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -435,64 +494,54 @@
 "Ihr Browser scheint keine Cookies zu akzeptieren. Bitte aktivieren Sie diese "
 "und laden Sie die Seite neu."
 
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
+#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Benutzernamen dürfen das Zeichen '@' nicht enthalten."
 
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
 "Die E-Mail-Adresse entspricht nicht Ihrem Benutzernamen. Bitte stattdessen '%"
 "s' versuchen."
 
-#: contrib/admin/sites.py:367
+#: contrib/admin/sites.py:389
 msgid "Site administration"
 msgstr "Website-Verwaltung"
 
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Anmelden"
 
-#: contrib/admin/sites.py:426
+#: contrib/admin/sites.py:448
 #, python-format
 msgid "%s administration"
 msgstr "%s-Verwaltung"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Ein oder mehrere %(fieldname)s in %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Ein oder mehrere %(fieldname)s in %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Datum:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Zeit:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Derzeit:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Ändern:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Suchen"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Neu hinzufügen"
 
@@ -508,17 +557,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -554,7 +603,20 @@
 
 #: contrib/admin/templates/admin/actions.html:4
 msgid "Go"
-msgstr "Los"
+msgstr "Ausführen"
+
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr "Hier klicken, um die Objekte aller Seiten auszuwählen"
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Alle %(total_count)s %(module_name)s auswählen"
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "Auswahl widerrufen"
 
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
@@ -562,28 +624,28 @@
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:27
+#: contrib/admin/templates/admin/base.html:28
 msgid "Welcome,"
 msgstr "Willkommen,"
 
-#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Dokumentation"
 
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Passwort ändern"
 
-#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Abmelden"
 
@@ -595,41 +657,42 @@
 msgid "Django administration"
 msgstr "Django-Verwaltung"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Hinzufügen"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Geschichte"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Auf der Website anzeigen"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Bitte den aufgeführten Fehler korrigieren."
 msgstr[1] "Bitte die aufgeführten Fehler korrigieren."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "%(name)s hinzufügen"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Filter"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Löschen"
 
@@ -677,10 +740,11 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
 "Sind Sie sicher, dass Sie die ausgewählten %(object_name)s-Objekte löschen "
-"wollen? Es werden zusätzlich die folgenden davon abhängigen Daten gelöscht:"
+"wollen? Die folgenden Objekte und und die von ihnen abhängigen Daten werden "
+"gelöscht:"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -743,15 +807,9 @@
 msgstr "Benutzer"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Aktion"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j. N Y, H:i"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -797,7 +855,7 @@
 msgid "Save and continue editing"
 msgstr "Sichern und weiter bearbeiten"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -805,35 +863,41 @@
 "Zuerst einen Benutzer und ein Passwort eingeben. Danach können weitere "
 "Optionen für den Benutzer geändert werden."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Benutzername"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Passwort"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Passwort (wiederholen)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Bitte das gleiche Passwort zur Überprüfung nochmal eingeben."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr ""
 "Bitte geben Sie ein neues Passwort für den Benutzer <strong>%(username)s</"
 "strong> ein."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Passwort"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Passwort (wiederholen)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Bitte das gleiche Passwort zur Überprüfung nochmal eingeben."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "%(verbose_name)s hinzufügen"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Entfernen"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Löschen?"
@@ -847,9 +911,9 @@
 msgstr "Erneut anmelden"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Passwort ändern"
 
@@ -862,30 +926,26 @@
 msgid "Your password was changed."
 msgstr "Ihr Passwort wurde geändert."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
 msgstr ""
 "Bitte geben Sie aus Sicherheitsgründen erst Ihr altes Passwort und darunter "
 "dann zweimal (um sicherzustellen, dass Sie es korrekt eingegeben haben) das "
-"neue Kennwort ein."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Altes Passwort:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Neues Passwort:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Passwort wiederholen:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+"neue Passwort ein."
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Altes Passwort"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Neues Passwort"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Mein Passwort ändern"
@@ -924,6 +984,14 @@
 "Bitte geben Sie Ihr neues Passwort zweimal ein, damit wir überprüfen können, "
 "ob es richtig eingetippt wurde."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Neues Passwort:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Passwort wiederholen:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Passwort wurde nicht erfolgreich zurückgesetzt"
@@ -992,25 +1060,25 @@
 msgid "Reset my password"
 msgstr "Mein Passwort zurücksetzen"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Alle Daten"
 
-#: contrib/admin/views/main.py:70
+#: contrib/admin/views/main.py:65
 #, python-format
 msgid "Select %s"
 msgstr "%s auswählen"
 
-#: contrib/admin/views/main.py:70
+#: contrib/admin/views/main.py:65
 #, python-format
 msgid "Select %s to change"
 msgstr "%s zur Änderung auswählen"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "Site"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "Template"
 
@@ -1070,89 +1138,7 @@
 msgid "Fields on %s objects"
 msgstr "Felder am %s Objekt"
 
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Ganzzahl"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Boolescher Wert (True oder False)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Zeichenkette (bis zu %(max_length)s Zeichen)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Kommaseparierte Liste von Ganzzahlen"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Datum (ohne Uhrzeit)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Datum (mit Uhrzeit)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Dezimalzahl"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "E-Mail-Adresse"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Dateipfad"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Gleitkommazahl"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "IP-Adresse"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolescher Wert (True, False oder None)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Beziehung zum Eltern-Modell"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Telefonnummer"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Text"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Zeit"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "Adresse (URL)"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "U.S.-Bundesstaat (zwei Großbuchstaben)"
-
 #: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "XML-Text"
-
-#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s ist scheinbar kein urlpattern-Objekt"
@@ -1229,66 +1215,63 @@
 msgstr ""
 "Wie zuvor, aber öffnet die Administrationsseite in einem neuen Fenster."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Persönliche Infos"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Berechtigungen"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Wichtige Daten"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Gruppen"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Benutzer hinzufügen"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Passwort erfolgreich geändert."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Passwort ändern: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Benutzername"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
 msgstr ""
 "Erforderlich. 30 Zeichen oder weniger. Nur alphanumerische Zeichen "
-"(Buchstaben, Ziffern und Unterstriche) sind erlaubt."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Dieser Wert darf nur Buchstaben, Ziffern und Unterstriche enthalten."
+"(Buchstaben, Ziffern und @/./+/-/_) sind erlaubt."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Dieser Wert darf nur Buchstaben, Ziffern und @/./+/-/_ enthalten."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Passwort bestätigen"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Dieser Benutzername ist bereits vergeben."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Die beiden Passwörter sind nicht identisch."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Dieser Benutzer ist inaktiv."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1296,11 +1279,11 @@
 "Der Webbrowser scheint keine Cookies aktiviert zu haben. Cookies sind für "
 "die Anmeldung zwingend erforderlich."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "E-Mail-Adresse"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1308,72 +1291,71 @@
 "Zu dieser E-Mail-Adresse existiert kein Benutzer. Sicher, dass Sie sich mit "
 "dieser Adresse registriert haben?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Passwort auf %s zurücksetzen"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Neues Passwort"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Neues Passwort bestätigen"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Altes Passwort"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr "Das alte Passwort war falsch. Bitte neu eingeben."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "Name"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "Codename"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "Berechtigung"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "Berechtigungen"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "Gruppe"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "Gruppen"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "Benutzername"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Erforderlich. 30 Zeichen oder weniger. Nur alphanumerische Zeichen "
+"(Buchstaben, Ziffern und @/./+/-/_) sind erlaubt."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "Vorname"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "Nachname"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "E-Mail-Adresse"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "Passwort"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1381,20 +1363,20 @@
 "Die Form '[algo]$[salt]$[hexdigest]' verwenden, oder das <a href=\"password/"
 "\">Passwort ändern Formular</a> benutzen."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "Redakteur-Status"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr ""
 "Legt fest, ob sich der Benutzer an der Administrationsseite anmelden kann."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "Aktiv"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1402,11 +1384,11 @@
 "Legt fest, ob dieser Benutzer aktiv ist. Kann deaktiviert werden, anstatt "
 "Benutzer zu löschen."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "Administrator-Status"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
@@ -1414,15 +1396,15 @@
 "Legt fest, dass der Benutzer alle Berechtigungen hat, ohne diese einzeln "
 "zuweisen zu müssen."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "Letzte Anmeldung"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "Mitglied seit"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1430,39 +1412,77 @@
 "Zusätzlich zu den manuell angelegten Rechten erhält dieser Benutzer auch "
 "alle Rechte, die seine zugewiesenen Gruppen haben."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "Berechtigungen"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "Benutzer"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "Benutzer"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "Mitteilung"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Abgemeldet"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Bitte eine gültige E-Mail-Adresse eingeben."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Inhalt"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metadaten"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "markiert"
+msgstr[1] "markiert"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Ausgewählte Kommentare markieren"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "freigegeben"
+msgstr[1] "freigegeben"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Ausgewählte Kommentare freigeben"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "entfernt"
+msgstr[1] "entfernt"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Ausgewählte Kommentare entfernen"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 Kommentar wurde erfolgreich %(action)s."
+msgstr[1] "%(count)s Kommentare wurden erfolgreich %(action)s."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1474,7 +1494,6 @@
 msgstr "Die neuesten Kommentare auf %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Name"
 
@@ -1482,26 +1501,30 @@
 msgid "Email address"
 msgstr "E-Mail-Adresse"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "Adresse (URL)"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Kommentar"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Keine Schimpfworte! Das Wort %s ist hier nicht erlaubt!"
 msgstr[1] "Keine Schimpfworte! Die Wörter %s sind hier nicht erlaubt!"
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr ""
 "Wenn Sie irgendetwas in dieses Feld eintragen, wird der Kommentar als Spam "
 "betrachtet"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "Inhaltstyp"
 
@@ -1530,6 +1553,10 @@
 msgid "date/time submitted"
 msgstr "Datum/Zeit Erstellung"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "IP-Adresse"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "ist öffentlich"
@@ -1615,7 +1642,6 @@
 msgstr "Wollen Sie diesen Kommentar wirklich freigeben?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Freigeben"
 
@@ -1640,11 +1666,6 @@
 msgid "Really remove this comment?"
 msgstr "Wollen Sie diesen Kommentar wirklich entfernen?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Entfernen"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Vielen Dank, dass Sie diesen Kommentar entfernt haben"
@@ -1675,39 +1696,6 @@
 msgid "Preview"
 msgstr "Vorschau"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Kommentar-Moderation"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Es sind keine Kommentare zu moderieren"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "E-Mail-Adresse"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Authentifiziert?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP-Adresse"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Verfassungsdatum"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "ja"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "nein"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Vielen Dank, dass Sie einen Kommentar geschrieben haben"
@@ -1735,11 +1723,11 @@
 msgid "or make changes"
 msgstr "oder Änderungen vornehmen"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "Python Modell-Klassenname"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "Inhaltstypen"
 
@@ -1803,7 +1791,7 @@
 msgid "flat pages"
 msgstr "Seiten"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1811,6 +1799,38 @@
 "Es tut uns leid, aber das Formular hat seine Gültigkeit verloren. Bitte "
 "füllen Sie es erneut aus."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr "Das Basis-GIS-Feld, das dem OpenGIS-Geometrie-Typ entspricht."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Punkt"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Linienzug"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Polygon"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Mehrere Punkte"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Mehrere Linienzüge"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Mehrere Polygone"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Sammlung geometrischer Objekte"
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Kein geometrischer Wert gegeben."
@@ -1916,26 +1936,26 @@
 msgid "yesterday"
 msgstr "gestern"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Bitte eine gültige Postleitzahl im Format NNNN oder ANNNNAAA eingeben."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
+#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Dieses Feld darf nur Ziffern enthalten."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Dieses Feld benötigt 7 oder 8 Ziffern."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr ""
 "Bitte eine gültige CUIT im Format XX-XXXXXXXX-X oder XXXXXXXXXXXX eingeben."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "Ungültige CUIT."
 
@@ -1975,8 +1995,8 @@
 msgid "Vienna"
 msgstr "Wien"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Bitte eine gültige Postleitzahl im Format XXXX eingeben."
 
@@ -1986,45 +2006,45 @@
 "Bitte eine gültige österreichische Sozialversicherungsnummer im Format XXXX "
 "XXXXXX eingeben."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Bitte eine gültige vierstellige Postleitzahl eingeben."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:17
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Bitte eine gültige Postleitzahl im Format XXXXX-XXX eingeben."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:26
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Telefonnummern müssen das Format XX-XXXX-XXXX haben."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:54
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
 msgstr "Bitte einen gültigen brasilianischen Bundesstaat auswählen."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:90
 msgid "Invalid CPF number."
 msgstr "Ungültige CPF-Nummer."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:91
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Dieses Feld benötigt mindestens 11 Ziffern oder 14 Zeichen."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:130
 msgid "Invalid CNPJ number."
 msgstr "Ungültige CNPJ-Nummer."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:132
 msgid "This field requires at least 14 digits"
 msgstr "Dieses Feld benötigt mindestens 14 Ziffern"
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Bitte eine gültige Postleitzahl im Format XXX XXX eingeben."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr ""
 "Bitte eine gültige kanadische Sozialversicherungsnummer im Format XXX-XXX-"
@@ -2134,7 +2154,7 @@
 msgid "Zurich"
 msgstr "Zürich"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2142,15 +2162,15 @@
 "Bitte eine gültige Schweizer Identifikations- oder Reisepassnummer im "
 "FormatX1234567<0 oder 1234567890 eingeben."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Bitte eine gültige chilenische RUT eingeben."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Bitte eine chilenische RUT im Format XX.XXX.XXX-X eingeben."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "Diese chilenische RUT ist ungültig."
 
@@ -2210,24 +2230,24 @@
 msgid "Moravian-Silesian Region"
 msgstr "Mährisch-Schlesische Region"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Bitte eine gültige Postleitzahl im Format XXXXX oder XXX XX eingeben."
 
-#: contrib/localflavor/cz/forms.py:47
+#: contrib/localflavor/cz/forms.py:48
 msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
 msgstr ""
 "Bitte eine Geburtsnummer im Format XXXXXX/XXXX oder XXXXXXXXXX eingeben."
 
-#: contrib/localflavor/cz/forms.py:48
+#: contrib/localflavor/cz/forms.py:49
 msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
 msgstr "Ungültiger Wert für Geschlecht, gültig sind: 'f' und 'm'"
 
-#: contrib/localflavor/cz/forms.py:49
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Bitte eine gültige Geburtsnummer eingeben."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Bitte eine gültige IC-Nummer eingeben."
 
@@ -2295,12 +2315,12 @@
 msgid "Thuringia"
 msgstr "Thüringen"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Bitte eine gültige Postleitzahl im Format XXXXX eingeben."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2575,11 +2595,11 @@
 msgid "Valencian Community"
 msgstr "Valencia"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Bitte eine gültige Postleitzahl im Format 01XXX bis 52XXX eingeben."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
@@ -2587,64 +2607,496 @@
 "Bitte eine gültige Telefonnummer in einem der folgenden Formate eingeben "
 "6XXXXXXXX, 8XXXXXXXX oder 9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Bitte eine gültige NIF, NIE oder CIF eingeben."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Bitte eine gültige NIF oder NIE eingeben."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Ungültige Prüfsumme für NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Ungültige Prüfsumme für NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Ungültige Prüfsumme für CIF."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr ""
 "Bitte eine gültige Kontonummer im Format XXXX-XXXX-XX-XXXXXXXXXX eingeben."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Ungültige Prüfsumme für Kontonummer."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Bitte eine gültige finnische Sozialversicherungsnummer eingeben."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Telefonnummern müssen das Format 0X XX XX XX XX haben."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Bitte eine gültige Postleitzahl eingeben"
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Bitte eine gültige Telefonnummer eingeben"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Bitte eine gültige Nummernschildnummer eingeben"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Bitte eine gültige NIK/KTP-Nummer eingeben."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Bali"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Banten"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Bengkulu"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Yogyakarta"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Jakarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Gorontalo"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Jambi"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Jawa Barat"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Jawa Tengah"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Jawa Timur"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Kalimantan Barat"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Kalimantan Selatan"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Kalimantan Tengah"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Kalimantan Timur"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Kepulauan Bangka-Belitung"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Kepulauan Riau"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Lampung"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Maluku"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Maluku Utara"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Nanggroe Aceh Darussalam"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Nusa Tenggara Barat"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Nusa Tenggara Timur"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Papua"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Riau"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "Sulawesi Barat"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "Sulawesi Selatan"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "Sulawesi Tengah"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "Sulawesi Tenggara"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "Sulawesi Utara"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "Sumatera Barat"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "Sumatera Selatan"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "Sumatera Utara"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "Magelang"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "Surakarta - Solo"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "Madiun"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "Kediri"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "Tapanuli"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "Kepulauan Bangka Belitung"
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr "Corps Diplomatic"
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr "Corps Diplomatic"
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "Bandung"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr "Sulawesi Utara Daratan"
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - Timor"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr "Sulawesi Utara Kepulauan"
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - Lombok"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "Papua dan Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "Cirebon"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - Sumbawa"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - Flores"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - Sumba"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "Bogor"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "Pekalongan"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "Semarang"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "Pati"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "Surabaya"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "Madura"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "Malang"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "Jember"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "Banyumas"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "Bundesregierung"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "Bojonegoro"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "Purwakarta"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "Sidoarjo"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "Garut"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "Armagh"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "Carlow"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "Cavan"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "Clare"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "Cork"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "Derry"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "Donegal"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "Down"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Dublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "Galway"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "Kerry"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "Kildare"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "Kilkenny"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "Laois"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "Leitrim"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "Limerick"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "Longford"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "Louth"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Mayo"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "Meath"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "Monaghan"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "Offaly"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "Roscommon"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "Sligo"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "Tipperary"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "Tyrone"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "Waterford"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "Westmeath"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "Wexford"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "Wicklow"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Bitte eine gültige Postleitzahl im Format XXXXXXX eingeben."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr ""
 "Bitte eine gültige isländische Identifikationsnummer im Format XXXXXX-XXXX "
 "eingeben."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "Die isländische Identifikationsnummer ist nicht gültig."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Bitte eine gültige Postleitzahl eingeben."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Bitte eine gültige Sozialversicherungsnummer eingeben."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Bitte eine gültige Umsatzsteuernummer eingeben."
 
@@ -2841,6 +3293,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Bitte eine gültige Kuwaitische Identifikationsnummer eingeben"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2969,15 +3425,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Bitte eine gültige Postleitzahl eingeben"
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Bitte eine gültige Telefonnummer eingeben"
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Bitte eine gültige SoFi-Nummer eingeben"
 
@@ -3029,15 +3481,15 @@
 msgid "Zuid-Holland"
 msgstr "Südholland"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Bitte eine gültige norwegische Sozialversicherungsnummer eingeben."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Dieses Feld benötigt 8 Zeichen."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Dieses Feld benötigt 11 Zeichen."
 
@@ -3139,6 +3591,15 @@
 msgid "West Pomerania"
 msgstr "Vorpommern"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Bitte eine gültige Postleitzahl im Format XXXX-XXX eingeben."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+"Telefonnummern müssen aus 9 Ziffern bestehen, oder mit + oder 00 beginnen."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Bitte eine gültige CIF eingeben."
@@ -3160,6 +3621,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Bitte eine gültige Postleitzahl im Format XXXXXX eingeben"
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Bitte eine gültige Schwedische Organisationsnummer eingeben."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Bitte eine gültige schwedische Personenidentifikationsnummer eingeben."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Ordnungsnummern sind nicht erlaubt."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Bitte eine gültige schwedische Postleitzahl im Format XXXXX eingeben."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Stockholm"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Banská Bystrica"
@@ -3792,22 +4353,47 @@
 msgid "Wales"
 msgstr "Wales"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr ""
 "Bitte eine gültige Postleitzahl im Format XXXXX oder XXXXX-XXXX eingeben."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Telefonnummern müssen das Format XXX-XXX-XXXX haben."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr ""
 "Bitte eine gültige US-amerikanische Sozialversicherungsnummer im Format XXX-"
 "XX-XXXX eingeben."
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Geben Sie einen US-Bundesstaat oder Territorium ein."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "U.S.-Bundesstaat (zwei Großbuchstaben)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Telefonnummer"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+"Bitte eine gültige CI im Format X.XXX.XXX-X,XXXXXXX-X oder XXXXXXXX eingeben."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Bitte eine gültige CI-Nummer eingeben."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Bitte eine gültige südafrikanische Identifikationsnummer eingeben"
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Bitte eine gültige südafrikanische Postleitzahl eingeben"
 
@@ -3847,6 +4433,10 @@
 msgid "Western Cape"
 msgstr "Westkap"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "Lazy Nachricht"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "Umleitung von"
@@ -3911,61 +4501,224 @@
 msgid "sites"
 msgstr "Sites"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Dieser Wert muss eine Ganzzahl sein."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Dieser Wert muss True oder False sein."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Bitte einen gültigen Wert eingeben."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Bitte eine gültige Adresse eingeben."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Diese Adresse scheint nicht gültig zu sein."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Bitte ein gültiges Kürzel, bestehend aus Buchstaben, Ziffern, Unterstrichen "
+"und Bindestrichen, eingeben."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Bitte eine gültige IPv4-Adresse eingeben."
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Bitte nur durch Komma getrennte Ziffern eingeben."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+"Bitte sicherstellen, dass der Wert %(limit_value)s ist. (Er ist %(show_value)"
+"s)"
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Dieser Wert muss kleiner oder gleich %(limit_value)s sein."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Dieser Wert muss größer oder gleich %(limit_value)s sein."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Bitte sicherstellen, dass der Wert mindestens %(limit_value)d Zeichen hat. "
+"(Er hat %(show_value)d)"
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Bitte sicherstellen, dass der Wert maximal %(limit_value)d Zeichen hat. (Er "
+"hat %(show_value)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s muss für %(date_field)s %(lookup)s eindeutig sein."
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s mit diesem %(field_label)s existiert bereits."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Wert %r ist keine gültige Option."
+
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Dieses Feld darf nicht leer sein."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Bitte nur durch Komma getrennte Ziffern eingeben."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Dieses Feld darf nicht leer sein."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Feldtyp: %(field_type)s"
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Ganzzahl"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+msgid "This value must be an integer."
+msgstr "Dieser Wert muss eine Ganzzahl sein."
+
+#: db/models/fields/__init__.py:490
+msgid "This value must be either True or False."
+msgstr "Dieser Wert muss True oder False sein."
+
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Boolescher Wert (True oder False)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Zeichenkette (bis zu %(max_length)s Zeichen)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Kommaseparierte Liste von Ganzzahlen"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Datum (ohne Uhrzeit)"
+
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Bitte ein gültiges Datum im Format JJJJ-MM-TT eingeben."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Ungültiges Datum: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr ""
 "Bitte eine gültige Datums- und Zeitangabe im Format JJJJ-MM-TT SS:MM[ss[."
 "uuuuuu]] eingeben."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Datum (mit Uhrzeit)"
+
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "Dieser Wert muss eine Dezimalzahl sein."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Dezimalzahl"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "E-Mail-Adresse"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Dateipfad"
+
+#: db/models/fields/__init__.py:822
 msgid "This value must be a float."
 msgstr "Dieser Wert muss eine Gleitkommazahl sein."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "Gleitkommazahl"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Große Ganzzahl (8 Byte)"
+
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr "Dieser Wert muss None, True oder False sein."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Boolescher Wert (True, False oder None)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Text"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Zeit"
+
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Bitte eine gültige Zeit im Format HH:MM[:ss[.uuuuuu]] eingeben."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "XML-Text"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Modell %(model)s mit dem Primärschlüssel %(pk)r ist nicht vorhanden."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Fremdschlüssel (Typ definiert durch verknüpftes Feld)"
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr "One-to-one-Beziehung"
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr "Many-to-many-Beziehung"
+
+#: db/models/fields/related.py:1000
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Halten Sie die Strg-Taste (⌘ für Mac) während des Klickens gedrückt, um "
 "mehrere Einträge auszuwählen."
 
-#: db/models/fields/related.py:894
+#: db/models/fields/related.py:1061
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3975,87 +4728,59 @@
 msgstr[1] ""
 "Bitte gültige IDs für %(self)s eingeben. Die Werte %(value)r sind ungültig."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Dieses Feld ist zwingend erforderlich."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Bitte einen gültigen Wert eingeben."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Bitte sicherstellen, dass der Text maximal %(max)d Zeichen hat. (Er hat %"
-"(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Bitte sicherstellen, dass der Text wenigstens %(min)d Zeichen hat. (Er hat %"
-"(length)d.)"
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Bitte eine ganze Zahl eingeben."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Dieser Wert muss kleiner oder gleich %s sein."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Dieser Wert muss größer oder gleich %s sein."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Bitte eine Zahl eingeben."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Bitte geben Sie nicht mehr als insgesamt %s Ziffern ein."
 
-#: forms/fields.py:228
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Bitte geben Sie nicht mehr als %s Dezimalstellen ein."
 
-#: forms/fields.py:229
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Bitte geben Sie nicht mehr als %s Ziffern vor dem Komma ein."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Bitte ein gültiges Datum eingeben."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Bitte eine gültige Uhrzeit eingeben."
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Bitte ein gültiges Datum und Uhrzeit eingeben."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr ""
 "Es wurde keine Datei übermittelt. Überprüfen Sie das Encoding des Formulars."
 
-#: forms/fields.py:448
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Es wurde keine Datei übertragen."
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Die ausgewählte Datei ist leer."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4063,7 +4788,7 @@
 "Bitte sicherstellen, dass der Dateiname maximal %(max)d Zeichen hat. (Er hat "
 "%(length)d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4071,114 +4796,86 @@
 "Bitte ein Bild hochladen. Die hochgeladene Datei ist kein Bild oder ist "
 "defekt."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Bitte eine gültige Adresse eingeben."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Diese Adresse scheint nicht gültig zu sein."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr ""
 "Bitte eine gültige Auswahl treffen. %(value)s ist keine gültige Auswahl."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
 msgid "Enter a list of values."
 msgstr "Bitte eine Liste mit Werten eingeben."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Bitte eine gültige IPv4-Adresse eingeben."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Bitte ein gültiges Kürzel, bestehend aus Buchstaben, Ziffern, Unterstrichen "
-"und Bindestrichen, eingeben."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Reihenfolge"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s muss für %(date_field)s %(lookup)s eindeutig sein."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s mit diesem %(field_label)s existiert bereits."
-
-#: forms/models.py:594
+#: forms/models.py:562
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Bitte die doppelten Daten für %(field)s korrigieren."
 
-#: forms/models.py:598
+#: forms/models.py:566
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Bitte die doppelten Daten für %(field)s korrigieren, das eindeutig sein muss."
-
-#: forms/models.py:604
+msgstr ""
+"Bitte die doppelten Daten für %(field)s korrigieren, das eindeutig sein muss."
+
+#: forms/models.py:572
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
 "for the %(lookup)s in %(date_field)s."
 msgstr ""
-"Bitte die doppelten Daten für %(field_name)s korrigieren, da es für "
-"%(lookup)s in %(date_field)s eindeutig sein muss."
-
-#: forms/models.py:612
+"Bitte die doppelten Daten für %(field_name)s korrigieren, da es für %(lookup)"
+"s in %(date_field)s eindeutig sein muss."
+
+#: forms/models.py:580
 msgid "Please correct the duplicate values below."
 msgstr "Bitte die unten aufgeführten doppelten Werte korrigieren."
 
-#: forms/models.py:867
+#: forms/models.py:855
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr ""
 "Der Inline-Fremdschlüssel passt nicht zum Primärschlüssel der übergeordneten "
 "Instanz."
 
-#: forms/models.py:930
+#: forms/models.py:921
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Bitte eine gültige Auswahl treffen. Dies ist keine gültige Auswahl."
 
-#: forms/models.py:1004
+#: forms/models.py:1003
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Bitte eine gültige Auswahl treffen. %s ist keine gültige Auswahl."
 
-#: forms/models.py:1006
+#: forms/models.py:1005
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" ist kein gültiger Wert für einen Primärschlüssel."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:776
 msgid "yes,no,maybe"
 msgstr "Ja,Nein,Vielleicht"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:807
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d Byte"
 msgstr[1] "%(size)d Bytes"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:809
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:811
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4387,7 +5084,7 @@
 msgid "Dec."
 msgstr "Dez."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "oder"
 
@@ -4441,33 +5138,76 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:518
 msgid "DATE_FORMAT"
 msgstr "j. N Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:519
+msgid "DATETIME_FORMAT"
+msgstr "j. N Y, H:i"
+
+#: utils/translation/trans_real.py:520
 msgid "TIME_FORMAT"
 msgstr "H:i"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:541
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:542
 msgid "MONTH_DAY_FORMAT"
 msgstr "j. F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "%(verbose_name)s wurde erfolgreich angelegt."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "%(verbose_name)s wurde erfolgreich aktualisiert."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s wurde gelöscht."
+
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "Ein oder mehrere %(fieldname)s in %(name)s: %(obj)s"
+
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "Ein oder mehrere %(fieldname)s in %(name)s:"
+
+#~ msgid "Old password:"
+#~ msgstr "Altes Passwort:"
+
+#~ msgid "Relation to parent model"
+#~ msgstr "Beziehung zum Eltern-Modell"
+
+#~ msgid "Add user"
+#~ msgstr "Benutzer hinzufügen"
+
+#~ msgid "Comment moderation queue"
+#~ msgstr "Kommentar-Moderation"
+
+#~ msgid "No comments to moderate"
+#~ msgstr "Es sind keine Kommentare zu moderieren"
+
+#~ msgid "Email"
+#~ msgstr "E-Mail-Adresse"
+
+#~ msgid "Authenticated?"
+#~ msgstr "Authentifiziert?"
+
+#~ msgid "IP Address"
+#~ msgstr "IP-Adresse"
+
+#~ msgid "Date posted"
+#~ msgstr "Verfassungsdatum"
+
+#~ msgid "yes"
+#~ msgstr "ja"
+
+#~ msgid "no"
+#~ msgstr "nein"
Binary file web/lib/django/conf/locale/de/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/de/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/de/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -7,44 +7,84 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-15 14:38+0200\n"
+"POT-Creation-Date: 2010-05-05 00:38+0200\n"
 "PO-Revision-Date: 2008-06-23 21:02+0100\n"
 "Last-Translator: Jannis Leidel <jannis@leidel.info>\n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
 msgstr "Verfügbare %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "Alles auswählen"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "Hinzufügen"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "Entfernen"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
 msgstr "Ausgewählte %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
 msgstr "Auswahl treffen und Klick auf"
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
 msgstr "Alles abwählen"
 
+#: contrib/admin/media/js/actions.js:18
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] "%(sel)s von %(cnt)s ausgewählt"
+msgstr[1] "%(sel)s von %(cnt)s ausgewählt"
+
+#: contrib/admin/media/js/actions.js:109
+#: contrib/admin/media/js/actions.min.js:5
+msgid ""
+"You have unsaved changes on individual editable fields. If you run an "
+"action, your unsaved changes will be lost."
+msgstr ""
+"Sie haben Änderungen an editierbaren Feldern vorgenommen und nicht "
+"gespeichert. Wollen Sie die Aktion trotzdem ausführen und Ihre Änderungen "
+"verwerfen?"
+
+#: contrib/admin/media/js/actions.js:121
+#: contrib/admin/media/js/actions.min.js:6
+msgid ""
+"You have selected an action, but you haven't saved your changes to "
+"individual fields yet. Please click OK to save. You'll need to re-run the "
+"action."
+msgstr ""
+"Sie haben eine Aktion ausgewählt, aber ihre vorgenommenen Änderungen nicht "
+"gespeichert. Klicken Sie OK, um dennoch zu speichern. Danach müssen Sie die "
+"Aktion erneut ausführen."
+
+#: contrib/admin/media/js/actions.js:123
+#: contrib/admin/media/js/actions.min.js:6
+msgid ""
+"You have selected an action, and you haven't made any changes on individual "
+"fields. You're probably looking for the Go button rather than the Save "
+"button."
+msgstr ""
+"Sie haben eine Aktion ausgewählt, aber keine Änderungen an editierbaren "
+"Feldern vorgenommen. Sie wollten wahrscheinlich auf 'Ausführen' und nicht "
+"auf 'Speichern' klicken."
+
 #: contrib/admin/media/js/calendar.js:24
 #: contrib/admin/media/js/dateparse.js:32
 msgid ""
@@ -58,62 +98,63 @@
 msgid "S M T W T F S"
 msgstr "S M D M D F S"
 
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Einblenden"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Ausblenden"
+
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
 msgstr "Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag"
 
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Einblenden"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Ausblenden"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Now"
 msgstr "Jetzt"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
 msgid "Clock"
 msgstr "Uhr"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
 msgid "Choose a time"
 msgstr "Uhrzeit"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Midnight"
 msgstr "Mitternacht"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "6 a.m."
 msgstr "6 Uhr"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "Noon"
 msgstr "Mittag"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "Abbrechen"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "Heute"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "Kalender"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "Gestern"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "Morgen"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/de/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,32 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j. F Y'
+TIME_FORMAT = 'H:i:s'
+DATETIME_FORMAT = 'j. F Y H:i:s'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'd.m.Y'
+SHORT_DATETIME_FORMAT = 'd.m.Y H:i:s'
+FIRST_DAY_OF_WEEK = 1 # Monday
+DATE_INPUT_FORMATS = (
+    '%d.%m.%Y', '%d.%m.%y',     # '25.10.2006', '25.10.06'
+    '%Y-%m-%d', '%y-%m-%d',     # '2006-10-25', '06-10-25'
+    # '%d. %B %Y', '%d. %b. %Y',  # '25. October 2006', '25. Oct. 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S', # '14:30:59'
+    '%H:%M',    # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%d.%m.%Y %H:%M:%S',    # '25.10.2006 14:30:59'
+    '%d.%m.%Y %H:%M',       # '25.10.2006 14:30'
+    '%d.%m.%Y',             # '25.10.2006'
+    '%Y-%m-%d %H:%M:%S',    # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',       # '2006-10-25 14:30'
+    '%Y-%m-%d',             # '2006-10-25'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+NUMBER_GROUPING = 3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/el/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'd F Y'
+TIME_FORMAT = 'g:i:s A'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'd M Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/en/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,38 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'N j, Y'
+TIME_FORMAT = 'P'
+DATETIME_FORMAT = 'N j, Y, P'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'F j'
+SHORT_DATE_FORMAT = 'm/d/Y'
+SHORT_DATETIME_FORMAT = 'm/d/Y P'
+FIRST_DAY_OF_WEEK = 0 # Sunday
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
+    # '%b %d %Y', '%b %d, %Y',            # 'Oct 25 2006', 'Oct 25, 2006'
+    # '%d %b %Y', '%d %b, %Y',            # '25 Oct 2006', '25 Oct, 2006'
+    # '%B %d %Y', '%B %d, %Y',            # 'October 25 2006', 'October 25, 2006'
+    # '%d %B %Y', '%d %B, %Y',            # '25 October 2006', '25 October, 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',        # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
+    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
+    '%m/%d/%Y',              # '10/25/2006'
+    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
+    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
+    '%m/%d/%y',              # '10/25/06'
+)
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+NUMBER_GROUPING = 3
+
Binary file web/lib/django/conf/locale/en_GB/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/en_GB/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,4996 @@
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-29 16:32+0200\n"
+"PO-Revision-Date: 2010-03-25 08:00+1000\n"
+"Last-Translator: Simon Meers <DrMeers@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: conf/global_settings.py:44
+msgid "Arabic"
+msgstr ""
+
+#: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr ""
+
+#: conf/global_settings.py:46
+msgid "Bengali"
+msgstr ""
+
+#: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr ""
+
+#: conf/global_settings.py:48
+msgid "Catalan"
+msgstr ""
+
+#: conf/global_settings.py:49
+msgid "Czech"
+msgstr ""
+
+#: conf/global_settings.py:50
+msgid "Welsh"
+msgstr ""
+
+#: conf/global_settings.py:51
+msgid "Danish"
+msgstr ""
+
+#: conf/global_settings.py:52
+msgid "German"
+msgstr ""
+
+#: conf/global_settings.py:53
+msgid "Greek"
+msgstr ""
+
+#: conf/global_settings.py:54
+msgid "English"
+msgstr ""
+
+#: conf/global_settings.py:55
+msgid "British English"
+msgstr ""
+
+#: conf/global_settings.py:56
+msgid "Spanish"
+msgstr ""
+
+#: conf/global_settings.py:57
+msgid "Argentinean Spanish"
+msgstr ""
+
+#: conf/global_settings.py:58
+msgid "Estonian"
+msgstr ""
+
+#: conf/global_settings.py:59
+msgid "Basque"
+msgstr ""
+
+#: conf/global_settings.py:60
+msgid "Persian"
+msgstr ""
+
+#: conf/global_settings.py:61
+msgid "Finnish"
+msgstr ""
+
+#: conf/global_settings.py:62
+msgid "French"
+msgstr ""
+
+#: conf/global_settings.py:63
+msgid "Frisian"
+msgstr ""
+
+#: conf/global_settings.py:64
+msgid "Irish"
+msgstr ""
+
+#: conf/global_settings.py:65
+msgid "Galician"
+msgstr ""
+
+#: conf/global_settings.py:66
+msgid "Hebrew"
+msgstr ""
+
+#: conf/global_settings.py:67
+msgid "Hindi"
+msgstr ""
+
+#: conf/global_settings.py:68
+msgid "Croatian"
+msgstr ""
+
+#: conf/global_settings.py:69
+msgid "Hungarian"
+msgstr ""
+
+#: conf/global_settings.py:70
+msgid "Icelandic"
+msgstr ""
+
+#: conf/global_settings.py:71
+msgid "Italian"
+msgstr ""
+
+#: conf/global_settings.py:72
+msgid "Japanese"
+msgstr ""
+
+#: conf/global_settings.py:73
+msgid "Georgian"
+msgstr ""
+
+#: conf/global_settings.py:74
+msgid "Khmer"
+msgstr ""
+
+#: conf/global_settings.py:75
+msgid "Kannada"
+msgstr ""
+
+#: conf/global_settings.py:76
+msgid "Korean"
+msgstr ""
+
+#: conf/global_settings.py:77
+msgid "Lithuanian"
+msgstr ""
+
+#: conf/global_settings.py:78
+msgid "Latvian"
+msgstr ""
+
+#: conf/global_settings.py:79
+msgid "Macedonian"
+msgstr ""
+
+#: conf/global_settings.py:80
+msgid "Dutch"
+msgstr ""
+
+#: conf/global_settings.py:81
+msgid "Norwegian"
+msgstr ""
+
+#: conf/global_settings.py:82
+msgid "Norwegian Bokmal"
+msgstr ""
+
+#: conf/global_settings.py:83
+msgid "Norwegian Nynorsk"
+msgstr ""
+
+#: conf/global_settings.py:84
+msgid "Polish"
+msgstr ""
+
+#: conf/global_settings.py:85
+msgid "Portuguese"
+msgstr ""
+
+#: conf/global_settings.py:86
+msgid "Brazilian Portuguese"
+msgstr ""
+
+#: conf/global_settings.py:87
+msgid "Romanian"
+msgstr ""
+
+#: conf/global_settings.py:88
+msgid "Russian"
+msgstr ""
+
+#: conf/global_settings.py:89
+msgid "Slovak"
+msgstr ""
+
+#: conf/global_settings.py:90
+msgid "Slovenian"
+msgstr ""
+
+#: conf/global_settings.py:91
+msgid "Albanian"
+msgstr ""
+
+#: conf/global_settings.py:92
+msgid "Serbian"
+msgstr ""
+
+#: conf/global_settings.py:93
+msgid "Serbian Latin"
+msgstr ""
+
+#: conf/global_settings.py:94
+msgid "Swedish"
+msgstr ""
+
+#: conf/global_settings.py:95
+msgid "Tamil"
+msgstr ""
+
+#: conf/global_settings.py:96
+msgid "Telugu"
+msgstr ""
+
+#: conf/global_settings.py:97
+msgid "Thai"
+msgstr ""
+
+#: conf/global_settings.py:98
+msgid "Turkish"
+msgstr ""
+
+#: conf/global_settings.py:99
+msgid "Ukrainian"
+msgstr ""
+
+#: conf/global_settings.py:100
+msgid "Vietnamese"
+msgstr ""
+
+#: conf/global_settings.py:101
+msgid "Simplified Chinese"
+msgstr ""
+
+#: conf/global_settings.py:102
+msgid "Traditional Chinese"
+msgstr ""
+
+#: contrib/admin/actions.py:52
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr ""
+
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
+msgid "Are you sure?"
+msgstr ""
+
+#: contrib/admin/actions.py:77
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:44
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
+msgid "All"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:113
+msgid "Any date"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:114
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:117
+msgid "Past 7 days"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:119
+msgid "This month"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:121
+msgid "This year"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+msgid "Yes"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+msgid "No"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
+msgid "Unknown"
+msgstr ""
+
+#: contrib/admin/helpers.py:20
+msgid "Action:"
+msgstr ""
+
+#: contrib/admin/models.py:19
+msgid "action time"
+msgstr ""
+
+#: contrib/admin/models.py:22
+msgid "object id"
+msgstr ""
+
+#: contrib/admin/models.py:23
+msgid "object repr"
+msgstr ""
+
+#: contrib/admin/models.py:24
+msgid "action flag"
+msgstr ""
+
+#: contrib/admin/models.py:25
+msgid "change message"
+msgstr ""
+
+#: contrib/admin/models.py:28
+msgid "log entry"
+msgstr ""
+
+#: contrib/admin/models.py:29
+msgid "log entries"
+msgstr ""
+
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
+msgid "None"
+msgstr ""
+
+#: contrib/admin/options.py:563
+#, python-format
+msgid "Changed %s."
+msgstr ""
+
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:573
+msgid "and"
+msgstr ""
+
+#: contrib/admin/options.py:568
+#, python-format
+msgid "Added %(name)s \"%(object)s\"."
+msgstr ""
+
+#: contrib/admin/options.py:572
+#, python-format
+msgid "Changed %(list)s for %(name)s \"%(object)s\"."
+msgstr ""
+
+#: contrib/admin/options.py:577
+#, python-format
+msgid "Deleted %(name)s \"%(object)s\"."
+msgstr ""
+
+#: contrib/admin/options.py:581
+msgid "No fields changed."
+msgstr ""
+
+#: contrib/admin/options.py:647
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr ""
+
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
+msgid "You may edit it again below."
+msgstr ""
+
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
+#, python-format
+msgid "You may add another %s below."
+msgstr ""
+
+#: contrib/admin/options.py:682
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr ""
+
+#: contrib/admin/options.py:690
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+
+#: contrib/admin/options.py:744
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: contrib/admin/options.py:762
+msgid "No action selected."
+msgstr ""
+
+#: contrib/admin/options.py:842
+#, python-format
+msgid "Add %s"
+msgstr ""
+
+#: contrib/admin/options.py:868 contrib/admin/options.py:1080
+#, python-format
+msgid "%(name)s object with primary key %(key)r does not exist."
+msgstr ""
+
+#: contrib/admin/options.py:933
+#, python-format
+msgid "Change %s"
+msgstr ""
+
+#: contrib/admin/options.py:978
+msgid "Database error"
+msgstr ""
+
+#: contrib/admin/options.py:1014
+#, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/options.py:1046
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: contrib/admin/options.py:1093
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr ""
+
+#: contrib/admin/options.py:1130
+#, python-format
+msgid "Change history: %s"
+msgstr ""
+
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
+msgid "Please log in again, because your session has expired."
+msgstr ""
+
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
+#: contrib/admin/views/decorators.py:66
+msgid "Usernames cannot contain the '@' character."
+msgstr ""
+
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr ""
+
+#: contrib/admin/sites.py:393
+msgid "Site administration"
+msgstr ""
+
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/templates/registration/password_reset_complete.html:14
+#: contrib/admin/views/decorators.py:20
+msgid "Log in"
+msgstr ""
+
+#: contrib/admin/sites.py:452
+#, python-format
+msgid "%s administration"
+msgstr ""
+
+#: contrib/admin/widgets.py:75
+msgid "Date:"
+msgstr ""
+
+#: contrib/admin/widgets.py:75
+msgid "Time:"
+msgstr ""
+
+#: contrib/admin/widgets.py:99
+msgid "Currently:"
+msgstr ""
+
+#: contrib/admin/widgets.py:99
+msgid "Change:"
+msgstr ""
+
+#: contrib/admin/widgets.py:129
+msgid "Lookup"
+msgstr ""
+
+#: contrib/admin/widgets.py:244
+msgid "Add Another"
+msgstr ""
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr ""
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/app_index.html:8
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/object_history.html:6
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Home"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr ""
+
+#: contrib/admin/templates/admin/app_index.html:10
+#: contrib/admin/templates/admin/index.html:19
+#, python-format
+msgid "%(name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:28
+msgid "Welcome,"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:33
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Change password"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:48
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Log out"
+msgstr ""
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/index.html:29
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:28
+#: contrib/admin/templates/admin/object_history.html:10
+msgid "History"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
+msgid "View on site"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/templates/admin/change_list.html:63
+#, python-format
+msgid "Add %(name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_list.html:82
+msgid "Filter"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:10
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
+msgid "Delete"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:16
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:23
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+msgid "Delete multiple objects"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, python-format
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:35
+msgid "Change"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:45
+msgid "You don't have permission to edit anything."
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "Recent Actions"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:54
+msgid "My Actions"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:58
+msgid "None available"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr ""
+
+#: contrib/admin/templates/admin/invalid_setup.html:7
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:19
+msgid "Username:"
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Password:"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:22
+msgid "Date/time"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:23
+msgid "User"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:24
+msgid "Action"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:38
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr ""
+
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr ""
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Search"
+msgstr ""
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr ""
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save as new"
+msgstr ""
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and add another"
+msgstr ""
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save and continue editing"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/tabular.html:15
+msgid "Delete?"
+msgstr ""
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr ""
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "Password change"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:43
+#: contrib/admin/templates/registration/password_reset_confirm.html:21
+msgid "Change my password"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_form.html:10
+msgid "Password reset"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_complete.html:6
+#: contrib/admin/templates/registration/password_reset_complete.html:10
+msgid "Password reset complete"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_complete.html:12
+msgid "Your password has been set.  You may go ahead and log in now."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+msgid "Password reset confirmation"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:12
+msgid "Enter new password"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:14
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:26
+msgid "Password reset unsuccessful"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:28
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used.  Please request a new password reset."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+msgid "Please go to the following page and choose a new password:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:9
+msgid "Your username, in case you've forgotten:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Thanks for using our site!"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+#, python-format
+msgid "The %(site_name)s team"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr ""
+
+#: contrib/admin/templatetags/admin_list.py:239
+msgid "All dates"
+msgstr ""
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s"
+msgstr ""
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s to change"
+msgstr ""
+
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
+msgid "site"
+msgstr ""
+
+#: contrib/admin/views/template.py:40
+msgid "template"
+msgstr ""
+
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
+msgid "tag:"
+msgstr ""
+
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
+msgid "filter:"
+msgstr ""
+
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
+msgid "view:"
+msgstr ""
+
+#: contrib/admindocs/views.py:190
+#, python-format
+msgid "App %r not found"
+msgstr ""
+
+#: contrib/admindocs/views.py:197
+#, python-format
+msgid "Model %(model_name)r not found in app %(app_label)r"
+msgstr ""
+
+#: contrib/admindocs/views.py:209
+#, python-format
+msgid "the related `%(app_label)s.%(data_type)s` object"
+msgstr ""
+
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
+msgid "model:"
+msgstr ""
+
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
+#, python-format
+msgid "related `%(app_label)s.%(object_name)s` objects"
+msgstr ""
+
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
+#, python-format
+msgid "all %s"
+msgstr ""
+
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
+#, python-format
+msgid "number of %s"
+msgstr ""
+
+#: contrib/admindocs/views.py:271
+#, python-format
+msgid "Fields on %s objects"
+msgstr ""
+
+#: contrib/admindocs/views.py:361
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
+msgid "Documentation bookmarklets"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
+msgid "Documentation for this page"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
+msgid "Show object ID"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
+msgid "Edit this object (current window)"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
+msgid "Edit this object (new window)"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
+msgid "As above, but opens the admin page in a new window."
+msgstr ""
+
+#: contrib/auth/admin.py:29
+msgid "Personal info"
+msgstr ""
+
+#: contrib/auth/admin.py:30
+msgid "Permissions"
+msgstr ""
+
+#: contrib/auth/admin.py:31
+msgid "Important dates"
+msgstr ""
+
+#: contrib/auth/admin.py:32
+msgid "Groups"
+msgstr ""
+
+#: contrib/auth/admin.py:114
+msgid "Password changed successfully."
+msgstr ""
+
+#: contrib/auth/admin.py:124
+#, python-format
+msgid "Change password: %s"
+msgstr ""
+
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr ""
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr ""
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr ""
+
+#: contrib/auth/forms.py:18
+msgid "Password confirmation"
+msgstr ""
+
+#: contrib/auth/forms.py:31
+msgid "A user with that username already exists."
+msgstr ""
+
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
+msgid "The two password fields didn't match."
+msgstr ""
+
+#: contrib/auth/forms.py:83
+msgid "This account is inactive."
+msgstr ""
+
+#: contrib/auth/forms.py:88
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+
+#: contrib/auth/forms.py:101
+msgid "E-mail"
+msgstr ""
+
+#: contrib/auth/forms.py:110
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+
+#: contrib/auth/forms.py:136
+#, python-format
+msgid "Password reset on %s"
+msgstr ""
+
+#: contrib/auth/forms.py:145
+msgid "New password confirmation"
+msgstr ""
+
+#: contrib/auth/forms.py:178
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr ""
+
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
+msgid "name"
+msgstr ""
+
+#: contrib/auth/models.py:68
+msgid "codename"
+msgstr ""
+
+#: contrib/auth/models.py:72
+msgid "permission"
+msgstr ""
+
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
+msgid "permissions"
+msgstr ""
+
+#: contrib/auth/models.py:98
+msgid "group"
+msgstr ""
+
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
+msgid "groups"
+msgstr ""
+
+#: contrib/auth/models.py:196
+msgid "username"
+msgstr ""
+
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+
+#: contrib/auth/models.py:197
+msgid "first name"
+msgstr ""
+
+#: contrib/auth/models.py:198
+msgid "last name"
+msgstr ""
+
+#: contrib/auth/models.py:199
+msgid "e-mail address"
+msgstr ""
+
+#: contrib/auth/models.py:200
+msgid "password"
+msgstr ""
+
+#: contrib/auth/models.py:200
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+
+#: contrib/auth/models.py:201
+msgid "staff status"
+msgstr ""
+
+#: contrib/auth/models.py:201
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+
+#: contrib/auth/models.py:202
+msgid "active"
+msgstr ""
+
+#: contrib/auth/models.py:202
+msgid ""
+"Designates whether this user should be treated as active. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+
+#: contrib/auth/models.py:203
+msgid "superuser status"
+msgstr ""
+
+#: contrib/auth/models.py:203
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+
+#: contrib/auth/models.py:204
+msgid "last login"
+msgstr ""
+
+#: contrib/auth/models.py:205
+msgid "date joined"
+msgstr ""
+
+#: contrib/auth/models.py:207
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+
+#: contrib/auth/models.py:208
+msgid "user permissions"
+msgstr ""
+
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
+msgid "user"
+msgstr ""
+
+#: contrib/auth/models.py:213
+msgid "users"
+msgstr ""
+
+#: contrib/auth/models.py:394
+msgid "message"
+msgstr ""
+
+#: contrib/auth/views.py:79
+msgid "Logged out"
+msgstr ""
+
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
+msgid "Enter a valid e-mail address."
+msgstr ""
+
+#: contrib/comments/admin.py:12
+msgid "Content"
+msgstr ""
+
+#: contrib/comments/admin.py:15
+msgid "Metadata"
+msgstr ""
+
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr ""
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr ""
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr ""
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr ""
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr ""
+
+#: contrib/comments/forms.py:93
+msgid "Name"
+msgstr ""
+
+#: contrib/comments/forms.py:94
+msgid "Email address"
+msgstr ""
+
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr ""
+
+#: contrib/comments/forms.py:96
+msgid "Comment"
+msgstr ""
+
+#: contrib/comments/forms.py:175
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr ""
+
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
+msgid "content type"
+msgstr ""
+
+#: contrib/comments/models.py:24
+msgid "object ID"
+msgstr ""
+
+#: contrib/comments/models.py:52
+msgid "user's name"
+msgstr ""
+
+#: contrib/comments/models.py:53
+msgid "user's email address"
+msgstr ""
+
+#: contrib/comments/models.py:54
+msgid "user's URL"
+msgstr ""
+
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
+msgid "comment"
+msgstr ""
+
+#: contrib/comments/models.py:59
+msgid "date/time submitted"
+msgstr ""
+
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr ""
+
+#: contrib/comments/models.py:61
+msgid "is public"
+msgstr ""
+
+#: contrib/comments/models.py:62
+msgid ""
+"Uncheck this box to make the comment effectively disappear from the site."
+msgstr ""
+
+#: contrib/comments/models.py:64
+msgid "is removed"
+msgstr ""
+
+#: contrib/comments/models.py:65
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr ""
+
+#: contrib/comments/models.py:119
+msgid ""
+"This comment was posted by an authenticated user and thus the name is read-"
+"only."
+msgstr ""
+
+#: contrib/comments/models.py:128
+msgid ""
+"This comment was posted by an authenticated user and thus the email is read-"
+"only."
+msgstr ""
+
+#: contrib/comments/models.py:153
+#, python-format
+msgid ""
+"Posted by %(user)s at %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+msgstr ""
+
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr ""
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr ""
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr ""
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:4
+msgid "Approve a comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:7
+msgid "Really make this comment public?"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:12
+msgid "Approve"
+msgstr ""
+
+#: contrib/comments/templates/comments/approved.html:4
+msgid "Thanks for approving"
+msgstr ""
+
+#: contrib/comments/templates/comments/approved.html:7
+#: contrib/comments/templates/comments/deleted.html:7
+#: contrib/comments/templates/comments/flagged.html:7
+msgid ""
+"Thanks for taking the time to improve the quality of discussion on our site"
+msgstr ""
+
+#: contrib/comments/templates/comments/delete.html:4
+msgid "Remove a comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/delete.html:7
+msgid "Really remove this comment?"
+msgstr ""
+
+#: contrib/comments/templates/comments/deleted.html:4
+msgid "Thanks for removing"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:4
+msgid "Flag this comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:7
+msgid "Really flag this comment?"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:12
+msgid "Flag"
+msgstr ""
+
+#: contrib/comments/templates/comments/flagged.html:4
+msgid "Thanks for flagging"
+msgstr ""
+
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
+msgid "Post"
+msgstr ""
+
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
+msgid "Preview"
+msgstr ""
+
+#: contrib/comments/templates/comments/posted.html:4
+msgid "Thanks for commenting"
+msgstr ""
+
+#: contrib/comments/templates/comments/posted.html:7
+msgid "Thank you for your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:4
+#: contrib/comments/templates/comments/preview.html:13
+msgid "Preview your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:11
+msgid "Please correct the error below"
+msgid_plural "Please correct the errors below"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "Post your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "or make changes"
+msgstr ""
+
+#: contrib/contenttypes/models.py:77
+msgid "python model class name"
+msgstr ""
+
+#: contrib/contenttypes/models.py:82
+msgid "content types"
+msgstr ""
+
+#: contrib/flatpages/admin.py:9
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+
+#: contrib/flatpages/admin.py:11
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+
+#: contrib/flatpages/admin.py:22
+msgid "Advanced options"
+msgstr ""
+
+#: contrib/flatpages/models.py:8
+msgid "title"
+msgstr ""
+
+#: contrib/flatpages/models.py:9
+msgid "content"
+msgstr ""
+
+#: contrib/flatpages/models.py:10
+msgid "enable comments"
+msgstr ""
+
+#: contrib/flatpages/models.py:11
+msgid "template name"
+msgstr ""
+
+#: contrib/flatpages/models.py:12
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+
+#: contrib/flatpages/models.py:13
+msgid "registration required"
+msgstr ""
+
+#: contrib/flatpages/models.py:13
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr ""
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr ""
+
+#: contrib/formtools/wizard.py:140
+msgid ""
+"We apologize, but your form has expired. Please continue filling out the "
+"form from this page."
+msgstr ""
+"We apologise, but your form has expired. Please continue filling out the "
+"form from this page."
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr ""
+
+#: contrib/gis/forms/fields.py:17
+msgid "No geometry value provided."
+msgstr ""
+
+#: contrib/gis/forms/fields.py:18
+msgid "Invalid geometry value."
+msgstr ""
+
+#: contrib/gis/forms/fields.py:19
+msgid "Invalid geometry type."
+msgstr ""
+
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "th"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "st"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "nd"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "rd"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:51
+#, python-format
+msgid "%(value).1f million"
+msgid_plural "%(value).1f million"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:54
+#, python-format
+msgid "%(value).1f billion"
+msgid_plural "%(value).1f billion"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:57
+#, python-format
+msgid "%(value).1f trillion"
+msgid_plural "%(value).1f trillion"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "one"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "two"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "three"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "four"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "five"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "six"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "seven"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "eight"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "nine"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:93
+msgid "today"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:95
+msgid "tomorrow"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:97
+msgid "yesterday"
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:28
+msgid "Enter a postal code in the format NNNN or ANNNNAAA."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
+msgid "This field requires only numbers."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:51
+msgid "This field requires 7 or 8 digits."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:80
+msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:81
+msgid "Invalid CUIT."
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:5
+msgid "Burgenland"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:6
+msgid "Carinthia"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:7
+msgid "Lower Austria"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:8
+msgid "Upper Austria"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:9
+msgid "Salzburg"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:10
+msgid "Styria"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:11
+msgid "Tyrol"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:12
+msgid "Vorarlberg"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:13
+msgid "Vienna"
+msgstr ""
+
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
+msgid "Enter a zip code in the format XXXX."
+msgstr ""
+
+#: contrib/localflavor/at/forms.py:48
+msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/au/forms.py:17
+msgid "Enter a 4 digit post code."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:22
+msgid "Enter a zip code in the format XXXXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:31
+msgid "Phone numbers must be in XX-XXXX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:59
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:95
+msgid "Invalid CPF number."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:96
+msgid "This field requires at most 11 digits or 14 characters."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:135
+msgid "Invalid CNPJ number."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:137
+msgid "This field requires at least 14 digits"
+msgstr ""
+
+#: contrib/localflavor/ca/forms.py:25
+msgid "Enter a postal code in the format XXX XXX."
+msgstr ""
+
+#: contrib/localflavor/ca/forms.py:96
+msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:5
+msgid "Aargau"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:6
+msgid "Appenzell Innerrhoden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:7
+msgid "Appenzell Ausserrhoden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:8
+msgid "Basel-Stadt"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:9
+msgid "Basel-Land"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:10
+msgid "Berne"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:11
+msgid "Fribourg"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:12
+msgid "Geneva"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:13
+msgid "Glarus"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:14
+msgid "Graubuenden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:15
+msgid "Jura"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:16
+msgid "Lucerne"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:17
+msgid "Neuchatel"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:18
+msgid "Nidwalden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:19
+msgid "Obwalden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:20
+msgid "Schaffhausen"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:21
+msgid "Schwyz"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:22
+msgid "Solothurn"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:23
+msgid "St. Gallen"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:24
+msgid "Thurgau"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:25
+msgid "Ticino"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:26
+msgid "Uri"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:27
+msgid "Valais"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:28
+msgid "Vaud"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:29
+msgid "Zug"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:30
+msgid "Zurich"
+msgstr ""
+
+#: contrib/localflavor/ch/forms.py:65
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:30
+msgid "Enter a valid Chilean RUT."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:32
+msgid "The Chilean RUT is not valid."
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:8
+msgid "Prague"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:9
+msgid "Central Bohemian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:10
+msgid "South Bohemian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:11
+msgid "Pilsen Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:12
+msgid "Carlsbad Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:13
+msgid "Usti Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:14
+msgid "Liberec Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:15
+msgid "Hradec Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:16
+msgid "Pardubice Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:17
+msgid "Vysocina Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:18
+msgid "South Moravian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:19
+msgid "Olomouc Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:20
+msgid "Zlin Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:21
+msgid "Moravian-Silesian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
+msgid "Enter a postal code in the format XXXXX or XXX XX."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:48
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:50
+msgid "Enter a valid birth number."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:107
+msgid "Enter a valid IC number."
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:5
+msgid "Baden-Wuerttemberg"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:6
+msgid "Bavaria"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:7
+msgid "Berlin"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:8
+msgid "Brandenburg"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:9
+msgid "Bremen"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:10
+msgid "Hamburg"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:11
+msgid "Hessen"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:12
+msgid "Mecklenburg-Western Pomerania"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:13
+msgid "Lower Saxony"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:14
+msgid "North Rhine-Westphalia"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:15
+msgid "Rhineland-Palatinate"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:16
+msgid "Saarland"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:17
+msgid "Saxony"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:18
+msgid "Saxony-Anhalt"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:19
+msgid "Schleswig-Holstein"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:20
+msgid "Thuringia"
+msgstr ""
+
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
+msgid "Enter a zip code in the format XXXXX."
+msgstr ""
+
+#: contrib/localflavor/de/forms.py:42
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:5
+msgid "Arava"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:6
+msgid "Albacete"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:7
+msgid "Alacant"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:8
+msgid "Almeria"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:9
+msgid "Avila"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:10
+msgid "Badajoz"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:11
+msgid "Illes Balears"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:12
+msgid "Barcelona"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:13
+msgid "Burgos"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:14
+msgid "Caceres"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:15
+msgid "Cadiz"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:16
+msgid "Castello"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:17
+msgid "Ciudad Real"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:18
+msgid "Cordoba"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:19
+msgid "A Coruna"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:20
+msgid "Cuenca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:21
+msgid "Girona"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:22
+msgid "Granada"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:23
+msgid "Guadalajara"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:24
+msgid "Guipuzkoa"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:25
+msgid "Huelva"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:26
+msgid "Huesca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:27
+msgid "Jaen"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:28
+msgid "Leon"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:29
+msgid "Lleida"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:30
+#: contrib/localflavor/es/es_regions.py:17
+msgid "La Rioja"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:31
+msgid "Lugo"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:32
+#: contrib/localflavor/es/es_regions.py:18
+msgid "Madrid"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:33
+msgid "Malaga"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:34
+msgid "Murcia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:35
+msgid "Navarre"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:36
+msgid "Ourense"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:37
+msgid "Asturias"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:38
+msgid "Palencia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:39
+msgid "Las Palmas"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:40
+msgid "Pontevedra"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:41
+msgid "Salamanca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:42
+msgid "Santa Cruz de Tenerife"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:43
+#: contrib/localflavor/es/es_regions.py:11
+msgid "Cantabria"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:44
+msgid "Segovia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:45
+msgid "Seville"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:46
+msgid "Soria"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:47
+msgid "Tarragona"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:48
+msgid "Teruel"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:49
+msgid "Toledo"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:50
+msgid "Valencia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:51
+msgid "Valladolid"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:52
+msgid "Bizkaia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:53
+msgid "Zamora"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:54
+msgid "Zaragoza"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:55
+msgid "Ceuta"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:56
+msgid "Melilla"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:5
+msgid "Andalusia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:6
+msgid "Aragon"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:7
+msgid "Principality of Asturias"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:8
+msgid "Balearic Islands"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:9
+msgid "Basque Country"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:10
+msgid "Canary Islands"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:12
+msgid "Castile-La Mancha"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:13
+msgid "Castile and Leon"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:14
+msgid "Catalonia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:15
+msgid "Extremadura"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:16
+msgid "Galicia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:19
+msgid "Region of Murcia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:20
+msgid "Foral Community of Navarre"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:21
+msgid "Valencian Community"
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:20
+msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:40
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:67
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:68
+msgid "Please enter a valid NIF or NIE."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:69
+msgid "Invalid checksum for NIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:71
+msgid "Invalid checksum for CIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:144
+msgid "Invalid checksum for bank account number."
+msgstr ""
+
+#: contrib/localflavor/fi/forms.py:29
+msgid "Enter a valid Finnish social security number."
+msgstr ""
+
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
+msgid "Enter a zip code in the format XXXXXXX."
+msgstr ""
+
+#: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/is_/forms.py:19
+msgid "The Icelandic identification number is not valid."
+msgstr ""
+
+#: contrib/localflavor/it/forms.py:15
+msgid "Enter a valid zip code."
+msgstr ""
+
+#: contrib/localflavor/it/forms.py:44
+msgid "Enter a valid Social Security number."
+msgstr ""
+
+#: contrib/localflavor/it/forms.py:69
+msgid "Enter a valid VAT number."
+msgstr ""
+
+#: contrib/localflavor/jp/forms.py:16
+msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:4
+msgid "Hokkaido"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:5
+msgid "Aomori"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:6
+msgid "Iwate"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:7
+msgid "Miyagi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:8
+msgid "Akita"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:9
+msgid "Yamagata"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:10
+msgid "Fukushima"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:11
+msgid "Ibaraki"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:12
+msgid "Tochigi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:13
+msgid "Gunma"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:14
+msgid "Saitama"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:15
+msgid "Chiba"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:16
+msgid "Tokyo"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:17
+msgid "Kanagawa"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:18
+msgid "Yamanashi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:19
+msgid "Nagano"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:20
+msgid "Niigata"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:21
+msgid "Toyama"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:22
+msgid "Ishikawa"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:23
+msgid "Fukui"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:24
+msgid "Gifu"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:25
+msgid "Shizuoka"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:26
+msgid "Aichi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:27
+msgid "Mie"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:28
+msgid "Shiga"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:29
+msgid "Kyoto"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:30
+msgid "Osaka"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:31
+msgid "Hyogo"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:32
+msgid "Nara"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:33
+msgid "Wakayama"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:34
+msgid "Tottori"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:35
+msgid "Shimane"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:36
+msgid "Okayama"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:37
+msgid "Hiroshima"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:38
+msgid "Yamaguchi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:39
+msgid "Tokushima"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:40
+msgid "Kagawa"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:41
+msgid "Ehime"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:42
+msgid "Kochi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:43
+msgid "Fukuoka"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:44
+msgid "Saga"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:45
+msgid "Nagasaki"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:46
+msgid "Kumamoto"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:47
+msgid "Oita"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:48
+msgid "Miyazaki"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:49
+msgid "Kagoshima"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:50
+msgid "Okinawa"
+msgstr ""
+
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:12
+msgid "Aguascalientes"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:13
+msgid "Baja California"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:14
+msgid "Baja California Sur"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:15
+msgid "Campeche"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:16
+msgid "Chihuahua"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:17
+msgid "Chiapas"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:18
+msgid "Coahuila"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:19
+msgid "Colima"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:20
+msgid "Distrito Federal"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:21
+msgid "Durango"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:22
+msgid "Guerrero"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:23
+msgid "Guanajuato"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:24
+msgid "Hidalgo"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:25
+msgid "Jalisco"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:26
+msgid "Estado de México"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:27
+msgid "Michoacán"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:28
+msgid "Morelos"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:29
+msgid "Nayarit"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:30
+msgid "Nuevo León"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:31
+msgid "Oaxaca"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:32
+msgid "Puebla"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:33
+msgid "Querétaro"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:34
+msgid "Quintana Roo"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:35
+msgid "Sinaloa"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:36
+msgid "San Luis Potosí"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:37
+msgid "Sonora"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:38
+msgid "Tabasco"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:39
+msgid "Tamaulipas"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:40
+msgid "Tlaxcala"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:41
+msgid "Veracruz"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:42
+msgid "Yucatán"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:43
+msgid "Zacatecas"
+msgstr ""
+
+#: contrib/localflavor/nl/forms.py:22
+msgid "Enter a valid postal code"
+msgstr ""
+
+#: contrib/localflavor/nl/forms.py:79
+msgid "Enter a valid SoFi number"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:4
+msgid "Drenthe"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:5
+msgid "Flevoland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:6
+msgid "Friesland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:7
+msgid "Gelderland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:8
+msgid "Groningen"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:9
+msgid "Limburg"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:10
+msgid "Noord-Brabant"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:11
+msgid "Noord-Holland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:12
+msgid "Overijssel"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:13
+msgid "Utrecht"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:14
+msgid "Zeeland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:15
+msgid "Zuid-Holland"
+msgstr ""
+
+#: contrib/localflavor/no/forms.py:34
+msgid "Enter a valid Norwegian social security number."
+msgstr ""
+
+#: contrib/localflavor/pe/forms.py:25
+msgid "This field requires 8 digits."
+msgstr ""
+
+#: contrib/localflavor/pe/forms.py:53
+msgid "This field requires 11 digits."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:38
+msgid "National Identification Number consists of 11 digits."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:39
+msgid "Wrong checksum for the National Identification Number."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:71
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:72
+msgid "Wrong checksum for the Tax Number (NIP)."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:110
+msgid "Wrong checksum for the National Business Register Number (REGON)."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:148
+msgid "Enter a postal code in the format XX-XXX."
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:8
+msgid "Lower Silesia"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:9
+msgid "Kuyavia-Pomerania"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:10
+msgid "Lublin"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:11
+msgid "Lubusz"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:12
+msgid "Lodz"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:13
+msgid "Lesser Poland"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:14
+msgid "Masovia"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:15
+msgid "Opole"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:16
+msgid "Subcarpatia"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:17
+msgid "Podlasie"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:18
+msgid "Pomerania"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:19
+msgid "Silesia"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:20
+msgid "Swietokrzyskie"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:21
+msgid "Warmia-Masuria"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:22
+msgid "Greater Poland"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:23
+msgid "West Pomerania"
+msgstr ""
+
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:19
+msgid "Enter a valid CIF."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:56
+msgid "Enter a valid CNP."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:141
+msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:171
+msgid "Phone numbers must be in XXXX-XXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:194
+msgid "Enter a valid postal code in the format XXXXXX"
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:8
+msgid "Banska Bystrica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:9
+msgid "Banska Stiavnica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:10
+msgid "Bardejov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:11
+msgid "Banovce nad Bebravou"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:12
+msgid "Brezno"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:13
+msgid "Bratislava I"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:14
+msgid "Bratislava II"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:15
+msgid "Bratislava III"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:16
+msgid "Bratislava IV"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:17
+msgid "Bratislava V"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:18
+msgid "Bytca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:19
+msgid "Cadca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:20
+msgid "Detva"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:21
+msgid "Dolny Kubin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:22
+msgid "Dunajska Streda"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:23
+msgid "Galanta"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:24
+msgid "Gelnica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:25
+msgid "Hlohovec"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:26
+msgid "Humenne"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:27
+msgid "Ilava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:28
+msgid "Kezmarok"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:29
+msgid "Komarno"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:30
+msgid "Kosice I"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:31
+msgid "Kosice II"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:32
+msgid "Kosice III"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:33
+msgid "Kosice IV"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:34
+msgid "Kosice - okolie"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:35
+msgid "Krupina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:36
+msgid "Kysucke Nove Mesto"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:37
+msgid "Levice"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:38
+msgid "Levoca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:39
+msgid "Liptovsky Mikulas"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:40
+msgid "Lucenec"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:41
+msgid "Malacky"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:42
+msgid "Martin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:43
+msgid "Medzilaborce"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:44
+msgid "Michalovce"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:45
+msgid "Myjava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:46
+msgid "Namestovo"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:47
+msgid "Nitra"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:48
+msgid "Nove Mesto nad Vahom"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:49
+msgid "Nove Zamky"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:50
+msgid "Partizanske"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:51
+msgid "Pezinok"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:52
+msgid "Piestany"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:53
+msgid "Poltar"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:54
+msgid "Poprad"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:55
+msgid "Povazska Bystrica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:56
+msgid "Presov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:57
+msgid "Prievidza"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:58
+msgid "Puchov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:59
+msgid "Revuca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:60
+msgid "Rimavska Sobota"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:61
+msgid "Roznava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:62
+msgid "Ruzomberok"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:63
+msgid "Sabinov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:64
+msgid "Senec"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:65
+msgid "Senica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:66
+msgid "Skalica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:67
+msgid "Snina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:68
+msgid "Sobrance"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:69
+msgid "Spisska Nova Ves"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:70
+msgid "Stara Lubovna"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:71
+msgid "Stropkov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:72
+msgid "Svidnik"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:73
+msgid "Sala"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:74
+msgid "Topolcany"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:75
+msgid "Trebisov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:76
+msgid "Trencin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:77
+msgid "Trnava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:78
+msgid "Turcianske Teplice"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:79
+msgid "Tvrdosin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:80
+msgid "Velky Krtis"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:81
+msgid "Vranov nad Toplou"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:82
+msgid "Zlate Moravce"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:83
+msgid "Zvolen"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:84
+msgid "Zarnovica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:85
+msgid "Ziar nad Hronom"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:86
+msgid "Zilina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:8
+msgid "Banska Bystrica region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:9
+msgid "Bratislava region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:10
+msgid "Kosice region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:11
+msgid "Nitra region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:12
+msgid "Presov region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:13
+msgid "Trencin region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:14
+msgid "Trnava region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:15
+msgid "Zilina region"
+msgstr ""
+
+#: contrib/localflavor/uk/forms.py:21
+msgid "Enter a valid postcode."
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:11
+msgid "Bedfordshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:12
+msgid "Buckinghamshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:14
+msgid "Cheshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:15
+msgid "Cornwall and Isles of Scilly"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:16
+msgid "Cumbria"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:17
+msgid "Derbyshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:18
+msgid "Devon"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:19
+msgid "Dorset"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:20
+msgid "Durham"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:21
+msgid "East Sussex"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:22
+msgid "Essex"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:23
+msgid "Gloucestershire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:24
+msgid "Greater London"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:25
+msgid "Greater Manchester"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:26
+msgid "Hampshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:27
+msgid "Hertfordshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:28
+msgid "Kent"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:29
+msgid "Lancashire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:30
+msgid "Leicestershire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:31
+msgid "Lincolnshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:32
+msgid "Merseyside"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:33
+msgid "Norfolk"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:34
+msgid "North Yorkshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:35
+msgid "Northamptonshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:36
+msgid "Northumberland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:37
+msgid "Nottinghamshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:38
+msgid "Oxfordshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:39
+msgid "Shropshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:40
+msgid "Somerset"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:41
+msgid "South Yorkshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:42
+msgid "Staffordshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:43
+msgid "Suffolk"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:44
+msgid "Surrey"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:45
+msgid "Tyne and Wear"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:46
+msgid "Warwickshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:47
+msgid "West Midlands"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:48
+msgid "West Sussex"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:49
+msgid "West Yorkshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:50
+msgid "Wiltshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:51
+msgid "Worcestershire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:55
+msgid "County Antrim"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:56
+msgid "County Armagh"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:57
+msgid "County Down"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:58
+msgid "County Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:59
+msgid "County Londonderry"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:60
+msgid "County Tyrone"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:64
+msgid "Clwyd"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:65
+msgid "Dyfed"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:66
+msgid "Gwent"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:67
+msgid "Gwynedd"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:68
+msgid "Mid Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:69
+msgid "Powys"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:70
+msgid "South Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:71
+msgid "West Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:75
+msgid "Borders"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:76
+msgid "Central Scotland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:77
+msgid "Dumfries and Galloway"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:78
+msgid "Fife"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:79
+msgid "Grampian"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:80
+msgid "Highland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:81
+msgid "Lothian"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:82
+msgid "Orkney Islands"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:83
+msgid "Shetland Islands"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:84
+msgid "Strathclyde"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:85
+msgid "Tayside"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:86
+msgid "Western Isles"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:90
+msgid "England"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:91
+msgid "Northern Ireland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:92
+msgid "Scotland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:93
+msgid "Wales"
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:55
+msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr ""
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr ""
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr ""
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr ""
+
+#: contrib/localflavor/za/forms.py:21
+msgid "Enter a valid South African ID number"
+msgstr ""
+
+#: contrib/localflavor/za/forms.py:55
+msgid "Enter a valid South African postal code"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:4
+msgid "Eastern Cape"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:5
+msgid "Free State"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:6
+msgid "Gauteng"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:7
+msgid "KwaZulu-Natal"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:8
+msgid "Limpopo"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:9
+msgid "Mpumalanga"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:10
+msgid "Northern Cape"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:11
+msgid "North West"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:12
+msgid "Western Cape"
+msgstr ""
+
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr ""
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr ""
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr ""
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr ""
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr ""
+
+#: contrib/sessions/models.py:45
+msgid "session key"
+msgstr ""
+
+#: contrib/sessions/models.py:47
+msgid "session data"
+msgstr ""
+
+#: contrib/sessions/models.py:48
+msgid "expire date"
+msgstr ""
+
+#: contrib/sessions/models.py:53
+msgid "session"
+msgstr ""
+
+#: contrib/sessions/models.py:54
+msgid "sessions"
+msgstr ""
+
+#: contrib/sites/models.py:32
+msgid "domain name"
+msgstr ""
+
+#: contrib/sites/models.py:33
+msgid "display name"
+msgstr ""
+
+#: contrib/sites/models.py:39
+msgid "sites"
+msgstr ""
+
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr ""
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr ""
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr ""
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr ""
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr ""
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr ""
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr ""
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr ""
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr ""
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr ""
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be null."
+msgstr ""
+
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr ""
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr ""
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr ""
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+msgid "This value must be an integer."
+msgstr ""
+
+#: db/models/fields/__init__.py:490
+msgid "This value must be either True or False."
+msgstr ""
+
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr ""
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr ""
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr ""
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr ""
+
+#: db/models/fields/__init__.py:585
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr ""
+
+#: db/models/fields/__init__.py:586
+#, python-format
+msgid "Invalid date: %s"
+msgstr ""
+
+#: db/models/fields/__init__.py:667
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
+msgstr ""
+
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr ""
+
+#: db/models/fields/__init__.py:735
+msgid "This value must be a decimal number."
+msgstr ""
+
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr ""
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr ""
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr ""
+
+#: db/models/fields/__init__.py:822
+msgid "This value must be a float."
+msgstr ""
+
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr ""
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr ""
+
+#: db/models/fields/__init__.py:912
+msgid "This value must be either None, True or False."
+msgstr ""
+
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr ""
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr ""
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr ""
+
+#: db/models/fields/__init__.py:1025
+msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
+msgstr ""
+
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr ""
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr ""
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr ""
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr ""
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr ""
+
+#: db/models/fields/related.py:1000
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+
+#: db/models/fields/related.py:1061
+#, python-format
+msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] ""
+msgstr[1] ""
+
+#: forms/fields.py:65
+msgid "This field is required."
+msgstr ""
+
+#: forms/fields.py:204
+msgid "Enter a whole number."
+msgstr ""
+
+#: forms/fields.py:235 forms/fields.py:256
+msgid "Enter a number."
+msgstr ""
+
+#: forms/fields.py:259
+#, python-format
+msgid "Ensure that there are no more than %s digits in total."
+msgstr ""
+
+#: forms/fields.py:260
+#, python-format
+msgid "Ensure that there are no more than %s decimal places."
+msgstr ""
+
+#: forms/fields.py:261
+#, python-format
+msgid "Ensure that there are no more than %s digits before the decimal point."
+msgstr ""
+
+#: forms/fields.py:323 forms/fields.py:838
+msgid "Enter a valid date."
+msgstr ""
+
+#: forms/fields.py:351 forms/fields.py:839
+msgid "Enter a valid time."
+msgstr ""
+
+#: forms/fields.py:377
+msgid "Enter a valid date/time."
+msgstr ""
+
+#: forms/fields.py:435
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+
+#: forms/fields.py:436
+msgid "No file was submitted."
+msgstr ""
+
+#: forms/fields.py:437
+msgid "The submitted file is empty."
+msgstr ""
+
+#: forms/fields.py:438
+#, python-format
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+
+#: forms/fields.py:473
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+
+#: forms/fields.py:596 forms/fields.py:671
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr ""
+
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
+msgid "Enter a list of values."
+msgstr ""
+
+#: forms/formsets.py:298 forms/formsets.py:300
+msgid "Order"
+msgstr ""
+
+#: forms/models.py:567
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr ""
+
+#: forms/models.py:571
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+
+#: forms/models.py:577
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+
+#: forms/models.py:585
+msgid "Please correct the duplicate values below."
+msgstr ""
+
+#: forms/models.py:860
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr ""
+
+#: forms/models.py:926
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+
+#: forms/models.py:1008
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr ""
+
+#: forms/models.py:1010
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr ""
+
+#: template/defaultfilters.py:781
+msgid "yes,no,maybe"
+msgstr ""
+
+#: template/defaultfilters.py:812
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/defaultfilters.py:814
+#, python-format
+msgid "%.1f KB"
+msgstr ""
+
+#: template/defaultfilters.py:816
+#, python-format
+msgid "%.1f MB"
+msgstr ""
+
+#: template/defaultfilters.py:817
+#, python-format
+msgid "%.1f GB"
+msgstr ""
+
+#: utils/dateformat.py:42
+msgid "p.m."
+msgstr ""
+
+#: utils/dateformat.py:43
+msgid "a.m."
+msgstr ""
+
+#: utils/dateformat.py:48
+msgid "PM"
+msgstr ""
+
+#: utils/dateformat.py:49
+msgid "AM"
+msgstr ""
+
+#: utils/dateformat.py:98
+msgid "midnight"
+msgstr ""
+
+#: utils/dateformat.py:100
+msgid "noon"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Mon"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Tue"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Wed"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Thu"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Fri"
+msgstr ""
+
+#: utils/dates.py:11
+msgid "Sat"
+msgstr ""
+
+#: utils/dates.py:11
+msgid "Sun"
+msgstr ""
+
+#: utils/dates.py:18
+msgid "January"
+msgstr ""
+
+#: utils/dates.py:18
+msgid "February"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "March"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "April"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "May"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "June"
+msgstr ""
+
+#: utils/dates.py:19 utils/dates.py:31
+msgid "July"
+msgstr ""
+
+#: utils/dates.py:19
+msgid "August"
+msgstr ""
+
+#: utils/dates.py:19
+msgid "September"
+msgstr ""
+
+#: utils/dates.py:19
+msgid "October"
+msgstr ""
+
+#: utils/dates.py:19
+msgid "November"
+msgstr ""
+
+#: utils/dates.py:20
+msgid "December"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "jan"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "feb"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "mar"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "apr"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "may"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "jun"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "jul"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "aug"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "sep"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "oct"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "nov"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "dec"
+msgstr ""
+
+#: utils/dates.py:31
+msgid "Jan."
+msgstr ""
+
+#: utils/dates.py:31
+msgid "Feb."
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Aug."
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Sept."
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Oct."
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Nov."
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Dec."
+msgstr ""
+
+#: utils/text.py:130
+msgid "or"
+msgstr ""
+
+#: utils/timesince.py:21
+msgid "year"
+msgid_plural "years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:22
+msgid "month"
+msgid_plural "months"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:23
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:24
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:25
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:26
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:45
+msgid "minutes"
+msgstr ""
+
+#: utils/timesince.py:50
+#, python-format
+msgid "%(number)d %(type)s"
+msgstr ""
+
+#: utils/timesince.py:56
+#, python-format
+msgid ", %(number)d %(type)s"
+msgstr ""
+
+#: utils/translation/trans_real.py:518
+msgid "DATE_FORMAT"
+msgstr "N j, Y"
+
+#: utils/translation/trans_real.py:519
+msgid "DATETIME_FORMAT"
+msgstr "N j, Y, P"
+
+#: utils/translation/trans_real.py:520
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: utils/translation/trans_real.py:541
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:542
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
+
+#: views/generic/create_update.py:115
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr ""
+
+#: views/generic/create_update.py:158
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr ""
+
+#: views/generic/create_update.py:201
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr ""
Binary file web/lib/django/conf/locale/en_GB/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/en_GB/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,114 @@
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-09-02 22:36-0700\n"
+"PO-Revision-Date: 2010-03-25 08:00+1000\n"
+"Last-Translator: Simon Meers <DrMeers@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:24
+#: contrib/admin/media/js/dateparse.js:32
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Now"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+msgid "Clock"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Midnight"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "6 a.m."
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Noon"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+msgid "Cancel"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+msgid "Calendar"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+msgid "Yesterday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+msgid "Tomorrow"
+msgstr ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/en_GB/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,39 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'N j, Y'                  # 'Oct. 25, 2006'
+TIME_FORMAT = 'P'                       # '2:30 pm'
+DATETIME_FORMAT = 'N j, Y, P'           # 'Oct. 25, 2006, 2:30 pm'
+YEAR_MONTH_FORMAT = 'F Y'               # 'October 2006'
+MONTH_DAY_FORMAT = 'F j'                # 'October 25'
+SHORT_DATE_FORMAT = 'd/m/Y'             # '25/10/2006'
+SHORT_DATETIME_FORMAT = 'd/m/Y P'       # '25/10/2006 2:30 pm'
+FIRST_DAY_OF_WEEK = 0                   # Sunday
+DATE_INPUT_FORMATS = (
+    '%d/%m/%Y', '%d/%m/%y',             # '25/10/2006', '25/10/06'
+    '%Y-%m-%d',                         # '2006-10-25'
+    # '%b %d %Y', '%b %d, %Y',          # 'Oct 25 2006', 'Oct 25, 2006'
+    # '%d %b %Y', '%d %b, %Y',          # '25 Oct 2006', '25 Oct, 2006'
+    # '%B %d %Y', '%B %d, %Y',          # 'October 25 2006', 'October 25, 2006'
+    # '%d %B %Y', '%d %B, %Y',          # '25 October 2006', '25 October, 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',                         # '14:30:59'
+    '%H:%M',                            # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',                # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',                   # '2006-10-25 14:30'
+    '%Y-%m-%d',                         # '2006-10-25'
+    '%d/%m/%Y %H:%M:%S',                # '25/10/2006 14:30:59'
+    '%d/%m/%Y %H:%M',                   # '25/10/2006 14:30'
+    '%d/%m/%Y',                         # '25/10/2006'
+    '%d/%m/%y %H:%M:%S',                # '25/10/06 14:30:59'
+    '%d/%m/%y %H:%M',                   # '25/10/06 14:30'
+    '%d/%m/%y',                         # '25/10/06'
+)
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+NUMBER_GROUPING = 3
+
Binary file web/lib/django/conf/locale/es/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/es/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/es/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -5,8 +5,8 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-07 15:15+0200\n"
-"PO-Revision-Date: 2009-07-07 15:22+0200\n"
+"POT-Creation-Date: 2010-03-08 09:11-0700\n"
+"PO-Revision-Date: 2009-11-30 11:31+0100\n"
 "Last-Translator: Django Spanish Team <django-cat@googlegroups.com>Language-"
 "Team: Django Spanish Team <django-cat@googlegroups.com>MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -18,215 +18,236 @@
 msgstr "árabe"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "búlgaro"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "bengalí"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "búlgaro"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "catalán"
+msgid "Bosnian"
+msgstr "bosnio"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "catalán"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "checo"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "galés"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "danés"
+msgid "Welsh"
+msgstr "galés"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "danés"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "alemán"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "griego"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "inglés"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "español"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "estonio"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "español de Argentina"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "estonio"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "vasco"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
 msgid "Persian"
 msgstr "persa"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
 msgid "Finnish"
 msgstr "finés"
 
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "francés"
-
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "irlandés"
+msgid "French"
+msgstr "francés"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "gallego"
+msgid "Frisian"
+msgstr ""
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "húngaro"
+msgid "Irish"
+msgstr "irlandés"
 
 #: conf/global_settings.py:64
+msgid "Galician"
+msgstr "gallego"
+
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "hebreo"
 
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "hindi"
-
 #: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "hindi"
+
+#: conf/global_settings.py:67
 msgid "Croatian"
 msgstr "croata"
 
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "islandés"
-
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "italiano"
+msgid "Hungarian"
+msgstr "húngaro"
 
 #: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "islandés"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "italiano"
+
+#: conf/global_settings.py:71
 msgid "Japanese"
 msgstr "japonés"
 
-#: conf/global_settings.py:70
+#: conf/global_settings.py:72
 msgid "Georgian"
 msgstr "georgiano"
 
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "koreano"
-
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
 msgid "Khmer"
 msgstr "khmer"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
 msgid "Kannada"
 msgstr "kannada"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "letón"
-
 #: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "lituano"
+msgid "Korean"
+msgstr "koreano"
 
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "macedonio"
+msgid "Lithuanian"
+msgstr "lituano"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "holandés"
+msgid "Latvian"
+msgstr "letón"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "noruego"
+msgid "Macedonian"
+msgstr "macedonio"
 
 #: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "holandés"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "noruego"
+
+#: conf/global_settings.py:81
 msgid "Polish"
 msgstr "polaco"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:82
 msgid "Portuguese"
 msgstr "portugués"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
 msgid "Brazilian Portuguese"
 msgstr "portugués de Brasil"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
 msgid "Romanian"
 msgstr "rumano"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
 msgid "Russian"
 msgstr "ruso"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
 msgid "Slovak"
 msgstr "eslovaco"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
 msgid "Slovenian"
 msgstr "esloveno"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
+msgid "Albanian"
+msgstr "albanés"
+
+#: conf/global_settings.py:89
 msgid "Serbian"
 msgstr "serbio"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:90
+#, fuzzy
+msgid "Serbian Latin"
+msgstr "serbio"
+
+#: conf/global_settings.py:91
 msgid "Swedish"
 msgstr "sueco"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:92
 msgid "Tamil"
 msgstr "tamil"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:93
 msgid "Telugu"
 msgstr "telugu"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:94
 msgid "Thai"
 msgstr "tailandés"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:95
 msgid "Turkish"
 msgstr "turco"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:96
 msgid "Ukrainian"
 msgstr "ucraniano"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "vietnamita"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
 msgstr "chino simplificado"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "chino tradicional"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Eliminado/s %(count)d %(items)s satisfactoriamente."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1025
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1101
 msgid "Are you sure?"
 msgstr "¿Está seguro?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Eliminar %(verbose_name_plural)s seleccionado/s"
@@ -265,19 +286,19 @@
 msgid "This year"
 msgstr "Este año"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
 msgid "Yes"
 msgstr "Sí"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
 msgid "No"
 msgstr "No"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:470
 msgid "Unknown"
 msgstr "Desconocido"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:19
 msgid "Action:"
 msgstr "Acción:"
 
@@ -309,105 +330,130 @@
 msgid "log entries"
 msgstr "entradas de registro"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:139 contrib/admin/options.py:154
 msgid "None"
 msgstr "Ninguno"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:558
 #, python-format
 msgid "Changed %s."
 msgstr "Modificado/a %s."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
+#: contrib/admin/options.py:558 contrib/admin/options.py:568
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:802
+#: forms/models.py:553
 msgid "and"
 msgstr "y"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Añadido/a \"%(object)s\" %(name)s."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:567
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Modificados %(list)s para \"%(object)s\" %(name)s."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Eliminado/a \"%(object)s\" %(name)s."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:576
 msgid "No fields changed."
 msgstr "No ha cambiado ningún campo."
 
-#: contrib/admin/options.py:598 contrib/auth/admin.py:67
+#: contrib/admin/options.py:642
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "Se añadió con éxito el %(name)s \"%(obj)s\"."
 
-#: contrib/admin/options.py:602 contrib/admin/options.py:635
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:646 contrib/admin/options.py:679
 msgid "You may edit it again below."
 msgstr "Puede editarlo de nuevo abajo."
 
-#: contrib/admin/options.py:612 contrib/admin/options.py:645
+#: contrib/admin/options.py:656 contrib/admin/options.py:689
 #, python-format
 msgid "You may add another %s below."
 msgstr "Puede añadir otro %s abajo."
 
-#: contrib/admin/options.py:633
+#: contrib/admin/options.py:677
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "Se modificó con éxito el %(name)s \"%(obj)s\"."
 
-#: contrib/admin/options.py:641
+#: contrib/admin/options.py:685
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr ""
 "Se añadió con éxito el %(name)s \"%(obj)s. Puede editarlo de nuevo abajo."
 
-#: contrib/admin/options.py:772
+#: contrib/admin/options.py:743
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Se deben seleccionar elementos para poder realizar acciones sobre estos. No " 
+"se han modificado elementos."
+
+#: contrib/admin/options.py:761
+msgid "No action selected."
+msgstr "No se seleccionó ninguna acción."
+
+#: contrib/admin/options.py:841
 #, python-format
 msgid "Add %s"
 msgstr "Añadir %s"
 
-#: contrib/admin/options.py:803 contrib/admin/options.py:1003
+#: contrib/admin/options.py:867 contrib/admin/options.py:1081
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "No existe ningún objeto %(name)s con la clave primaria %(key)r."
 
-#: contrib/admin/options.py:860
+#: contrib/admin/options.py:932
 #, python-format
 msgid "Change %s"
 msgstr "Modificar %s"
 
-#: contrib/admin/options.py:904
+#: contrib/admin/options.py:977
 msgid "Database error"
 msgstr "Error en la base de datos"
 
-#: contrib/admin/options.py:940
+#: contrib/admin/options.py:1013
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s %(name)s fué modificado con éxito."
 msgstr[1] "%(count)s %(name)s fueron modificados con éxito."
 
-#: contrib/admin/options.py:1018
+#: contrib/admin/options.py:1040
+#, python-format
+msgid "of %(count)d selected"
+msgid_plural "of %(count)d selected"
+msgstr[0] "de %(count)d seleccionado"
+msgstr[1] "de %(count)d seleccionados"
+
+#: contrib/admin/options.py:1042
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s seleccionado"
+msgstr[1] "Todos %(total_count)s seleccionados"
+
+#: contrib/admin/options.py:1094
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "Se eliminó con éxito el %(name)s \"%(obj)s\"."
 
-#: contrib/admin/options.py:1054
+#: contrib/admin/options.py:1131
 #, python-format
 msgid "Change history: %s"
 msgstr "Histórico de modificaciones: %s"
 
-#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -415,11 +461,11 @@
 "Por favor, introduzca un nombre de usuario y contraseña correctos. Note que "
 "ambos campos son sensibles a mayúsculas/minúsculas."
 
-#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Por favor, inicie sesión de nuevo, ya que su sesión ha caducado."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -427,64 +473,54 @@
 "Parece que su navegador no está configurado para aceptar cookies. "
 "Actívelas , recargue esta página, e inténtelo de nuevo."
 
-#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Los nombres de usuario no pueden contener el carácter '@'."
 
-#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
 "Su dirección de correo no es su nombre de usuario. Pruebe con '%s' en su "
 "lugar."
 
-#: contrib/admin/sites.py:360
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Sitio administrativo"
 
-#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Iniciar sesión"
 
-#: contrib/admin/sites.py:417
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "Administración de %s"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Uno o más %(fieldname)s en %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Uno o más %(fieldname)s en %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Fecha:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Hora:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Actualmente:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Modificar:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Buscar"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Añadir otro"
 
@@ -499,17 +535,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:39
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -547,34 +583,47 @@
 msgid "Go"
 msgstr "Ir"
 
+#: contrib/admin/templates/admin/actions.html:10
+msgid "Click here to select the objects across all pages"
+msgstr "Pulse aquí para seleccionar los objetos a través de todas las páginas"
+
+#: contrib/admin/templates/admin/actions.html:10
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Seleccionar todos los %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:12
+msgid "Clear selection"
+msgstr "Limpiar selección"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:27
 msgid "Welcome,"
 msgstr "Bienvenido/a,"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Documentación"
 
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Cambiar contraseña"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Terminar sesión"
 
@@ -586,41 +635,42 @@
 msgid "Django administration"
 msgstr "Administración de Django"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Añadir"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Histórico"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Ver en el sitio"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:68
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Por favor, corrija el siguiente error."
 msgstr[1] "Por favor, corrija los siguientes errores."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:60
 #, python-format
 msgid "Add %(name)s"
 msgstr "Añadir %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:79
 msgid "Filter"
 msgstr "Filtro"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:294
 msgid "Delete"
 msgstr "Eliminar"
 
@@ -668,10 +718,10 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
-msgstr ""
-"¿Está seguro de que quiere borrar los %(object_name)s? Los siguientes "
-"objetos y sus elementos relacionados serán eliminados:"
+"the following objects and their related items will be deleted:"
+msgstr ""
+"¿Está seguro de que quiere eliminar los %(object_name)s seleccionados? Los "
+"siguientes objetos y sus elementos relacionados serán eliminados:"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -734,15 +784,9 @@
 msgstr "Usuario"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Acción"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j N Y P"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -788,7 +832,7 @@
 msgid "Save and continue editing"
 msgstr "Grabar y continuar editando"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -796,35 +840,41 @@
 "Primero introduzca un nombre de usuario y una contraseña. Luego podrá editar "
 "el resto de opciones del usuario."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Nombre de usuario"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Contraseña"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Contraseña (de nuevo)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Introduzca la misma contraseña que arriba, para verificación."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr ""
 "Introduzca una nueva contraseña para el usuario <strong>%(username)s</"
 "strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Contraseña"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Contraseña (de nuevo)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Introduzca la misma contraseña que arriba, para verificación."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:53
+#: contrib/admin/templates/admin/edit_inline/tabular.html:99
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Agregar otro %(verbose_name)s."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:56
+#: contrib/admin/templates/admin/edit_inline/tabular.html:102
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Eliminar"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Eliminar?"
@@ -838,9 +888,9 @@
 msgstr "Iniciar sesión de nuevo"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Cambio de contraseña"
 
@@ -853,7 +903,7 @@
 msgid "Your password was changed."
 msgstr "Su contraseña ha sido cambiada."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -862,21 +912,17 @@
 "introduzca la nueva contraseña dos veces para verificar que la ha escrito "
 "correctamente."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Contraseña antigua:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Contraseña nueva:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirme contraseña:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Contraseña antigua"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Contraseña nueva"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Cambiar mi contraseña"
@@ -917,6 +963,14 @@
 "Por favor, introduzca su contraseña nueva dos veces para verificar que la ha "
 "escrito correctamente."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Contraseña nueva:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Confirme contraseña:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Restablecimiento de contraseña fallido"
@@ -987,7 +1041,7 @@
 msgid "Reset my password"
 msgstr "Restablecer mi contraseña"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:240
 msgid "All dates"
 msgstr "Todas las fechas"
 
@@ -1001,154 +1055,72 @@
 msgid "Select %s to change"
 msgstr "Escoja %s a modificar"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "sitio"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "plantilla"
 
-#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "etiqueta:"
 
-#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "filtro:"
 
-#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "vista:"
 
-#: contrib/admindocs/views.py:187
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "Aplicación %r no encontrada"
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr ""
 "El modelo %(model_name)r no se ha encontrado en la aplicación %(app_label)r"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "el objeto relacionado `%(app_label)s.%(data_type)s`"
 
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:225
-#: contrib/admindocs/views.py:230 contrib/admindocs/views.py:244
-#: contrib/admindocs/views.py:258 contrib/admindocs/views.py:263
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "modelo:"
 
-#: contrib/admindocs/views.py:221 contrib/admindocs/views.py:253
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "los objetos relacionados `%(app_label)s.%(object_name)s`"
 
-#: contrib/admindocs/views.py:225 contrib/admindocs/views.py:258
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "todo %s"
 
-#: contrib/admindocs/views.py:230 contrib/admindocs/views.py:263
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "número de %s"
 
-#: contrib/admindocs/views.py:268
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "Campos en %s objetos"
 
-#: contrib/admindocs/views.py:331 contrib/admindocs/views.py:342
-#: contrib/admindocs/views.py:344 contrib/admindocs/views.py:350
-#: contrib/admindocs/views.py:351 contrib/admindocs/views.py:353
-msgid "Integer"
-msgstr "Entero"
-
-#: contrib/admindocs/views.py:332
-msgid "Boolean (Either True or False)"
-msgstr "Booleano (Verdadero o Falso)"
-
-#: contrib/admindocs/views.py:333 contrib/admindocs/views.py:352
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Cadena (máximo %(max_length)s)"
-
-#: contrib/admindocs/views.py:334
-msgid "Comma-separated integers"
-msgstr "Enteros separados por comas"
-
-#: contrib/admindocs/views.py:335
-msgid "Date (without time)"
-msgstr "Fecha (sin hora)"
-
-#: contrib/admindocs/views.py:336
-msgid "Date (with time)"
-msgstr "Fecha (con hora)"
-
-#: contrib/admindocs/views.py:337
-msgid "Decimal number"
-msgstr "Número decimal"
-
-#: contrib/admindocs/views.py:338
-msgid "E-mail address"
-msgstr "Dirección de correo electrónico"
-
-#: contrib/admindocs/views.py:339 contrib/admindocs/views.py:340
-#: contrib/admindocs/views.py:343
-msgid "File path"
-msgstr "Ruta de fichero"
-
-#: contrib/admindocs/views.py:341
-msgid "Floating point number"
-msgstr "Número en coma flotante"
-
-#: contrib/admindocs/views.py:345 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "Dirección IP"
-
-#: contrib/admindocs/views.py:347
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleano (Verdadero, Falso o Nulo)"
-
-#: contrib/admindocs/views.py:348
-msgid "Relation to parent model"
-msgstr "Relación con el modelo padre"
-
-#: contrib/admindocs/views.py:349
-msgid "Phone number"
-msgstr "Número de teléfono"
-
-#: contrib/admindocs/views.py:354
-msgid "Text"
-msgstr "Texto"
-
-#: contrib/admindocs/views.py:355
-msgid "Time"
-msgstr "Hora"
-
-#: contrib/admindocs/views.py:356 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:357
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estado de los EEUU (dos letras mayúsculas)"
-
-#: contrib/admindocs/views.py:358
-msgid "XML text"
-msgstr "Texto XML"
-
-#: contrib/admindocs/views.py:384
+#: contrib/admindocs/views.py:361
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s no parece ser un objeto urlpattern"
@@ -1222,66 +1194,62 @@
 msgstr ""
 "Como antes, pero abre la página de administración en una nueva ventana."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Información personal"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Permisos"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Fechas importantes"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Grupos"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Añadir usuario"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "La contraseña se ha cambiado con éxito."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Cambiar contraseña: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Requerido. 30 caracteres o menos. Sólo caracteres alfanuméricos (letras, "
-"dígitos y guiones bajos)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Este valor debe contener sólo letras, números y guiones bajos."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Nombre de usuario"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr ""
+"Requerido. 30 caracteres o menos. Letras, dígitos y @/./+/-/_ solamente."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Este valor puede contener sólo letras, números y @/./+/-/_."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Contraseña (confirmación)"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Ya existe un usuario con este nombre."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Las dos contraseñas no coinciden."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Esta cuenta está inactiva."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1289,11 +1257,11 @@
 "Su navegador no parece tener las cookies habilitadas. Las cookies se "
 "necesitan para poder ingresar."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "Correo electrónico"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1301,74 +1269,71 @@
 "Esta dirección de correo electrónico no tiene una cuenta de usuario "
 "asociada. ¿Está seguro de que se ha registrado?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Contraseña restablecida en %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Contraseña nueva"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Contraseña nueva (confirmación):"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Contraseña antigua"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr ""
 "Su contraseña antigua es incorrecta. Por favor, vuelva a introducirla "
 "correctamente."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "nombre"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "nombre en código"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "permiso"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "permisos"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "grupo"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "grupos"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "nombre de usuario"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr "Requerido. 30 caracteres o menos. Letras, números y @/./+/-/_"
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "nombre propio"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "apellidos"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "dirección de correo electrónico"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "contraseña"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1376,19 +1341,19 @@
 "Use'[algo]$[sal]$[hash hexadecimal]' o use <a href=\"password/\">el "
 "formulario para cambiar la contraseña</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "es staff"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Indica si el usuario puede entrar en este sitio de administración."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "activo"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1396,11 +1361,11 @@
 "Indica si el usuario puede ser tratado como activo. Desmarque esta opción en "
 "lugar de borrar la cuenta."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "es superusuario"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
@@ -1408,15 +1373,15 @@
 "Indica que este usuario tiene todos los permisos sin asignárselos "
 "explícitamente."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "último inicio de sesión"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "fecha de alta"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1424,39 +1389,71 @@
 "Además de los permisos asignados manualmente, este usuario también tendrá "
 "todos los permisos de los grupos en los que esté."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "permisos de usuario"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "usuario"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "usuarios"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "mensaje"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Sesión terminada"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:416
 msgid "Enter a valid e-mail address."
 msgstr "Introduzca una dirección de correo electrónico válida."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "contenido"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "metadatos"
 
+#: contrib/comments/admin.py:39
+msgid "flagged"
+msgstr "marcado"
+
+#: contrib/comments/admin.py:40
+msgid "Flag selected comments"
+msgstr "Marcar los comentarios seleccionados"
+
+#: contrib/comments/admin.py:43
+msgid "approved"
+msgstr "aprobado"
+
+#: contrib/comments/admin.py:44
+msgid "Approve selected comments"
+msgstr "aprobar los comentarios seleccionados"
+
+#: contrib/comments/admin.py:47
+msgid "removed"
+msgstr "eliminado"
+
+#: contrib/comments/admin.py:48
+msgid "Remove selected comments"
+msgstr "Eliminar los comentarios seleccionados"
+
+#: contrib/comments/admin.py:60
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 comentarios ha sido %(action)s satisfactoriamente."
+msgstr[1] "%(count)s comentarios han sido %(action)s satisfactoriamente."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1468,7 +1465,6 @@
 msgstr "Últimos comentarios en %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Nombre"
 
@@ -1476,24 +1472,28 @@
 msgid "Email address"
 msgstr "dirección de correo electrónico"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1120
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Comentario"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "¡Cuide su vocabulario! Aquí no admitimos la palabra %s."
 msgstr[1] "¡Cuide su vocabulario! Aquí no admitimos las palabras %s."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr "Si introduce algo en este campo su comentario será tratado como spam"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "tipo de contenido"
 
@@ -1522,6 +1522,10 @@
 msgid "date/time submitted"
 msgstr "fecha/hora de envío"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:916
+msgid "IP address"
+msgstr "Dirección IP"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "es público"
@@ -1598,14 +1602,13 @@
 
 #: contrib/comments/templates/comments/approve.html:4
 msgid "Approve a comment"
-msgstr "Aprovar un comentario"
+msgstr "Aprobar un comentario"
 
 #: contrib/comments/templates/comments/approve.html:7
 msgid "Really make this comment public?"
 msgstr "Realmente desea hacer este comentario público?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Aprobar"
 
@@ -1630,11 +1633,6 @@
 msgid "Really remove this comment?"
 msgstr "¿Realmente desea eliminar este comentario?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Eliminar"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Gracias por eliminar"
@@ -1665,39 +1663,6 @@
 msgid "Preview"
 msgstr "Previsualizar"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Cola de moderación de comentarios"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "No hay comentarios por moderar"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Correo electrónico"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "¿Autentificado?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "Dirección IP"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Fecha de envío"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "sí"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "no"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Gracias por comentar"
@@ -1725,11 +1690,11 @@
 msgid "or make changes"
 msgstr "o haga cambios"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "nombre de la clase modelo de python"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "tipos de contenido"
 
@@ -1790,7 +1755,7 @@
 msgid "flat pages"
 msgstr "páginas estáticas"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1798,6 +1763,41 @@
 "Lo sentimos, pero su formulario ha expirado. Por favor, continue rellenando "
 "el formulario en esta página."
 
+#: contrib/gis/db/models/fields.py:50
+#, fuzzy
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+"El campo GIS base -- se relaciona con el tipo Geometry de la especificación "
+"de OpenGIS."
+
+#: contrib/gis/db/models/fields.py:269
+msgid "Point"
+msgstr "Punto"
+
+#: contrib/gis/db/models/fields.py:273
+msgid "Line string"
+msgstr "Cadena de línea"
+
+#: contrib/gis/db/models/fields.py:277
+msgid "Polygon"
+msgstr "Polígono"
+
+#: contrib/gis/db/models/fields.py:281
+msgid "Multi-point"
+msgstr "Punto múltiple"
+
+#: contrib/gis/db/models/fields.py:285
+msgid "Multi-line string"
+msgstr "Cadena de línea múltiple"
+
+#: contrib/gis/db/models/fields.py:289
+msgid "Multi polygon"
+msgstr "Polígono múltiple"
+
+#: contrib/gis/db/models/fields.py:293
+msgid "Geometry collection"
+msgstr "Colección de \"Geometry\""
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "No se indico ningún valor de geometría."
@@ -1815,8 +1815,8 @@
 "An error occurred when transforming the geometry to the SRID of the geometry "
 "form field."
 msgstr ""
-"Ocurrió un error al transformar la geometria al SRID de la geometria "
-"del campo de formulario."
+"Ocurrió un error al transformar la geometria al SRID de la geometria del "
+"campo de formulario."
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
@@ -1903,25 +1903,25 @@
 msgid "yesterday"
 msgstr "ayer"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Introduzca un código postal en el formato NNNN or ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Este campo sólo acepta números."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Este campo necesita 7 u 8 dígitos."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Introduzca un CUIT válido en el formato XX-XXXXXXXX-X o XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "CUIT inválido."
 
@@ -1961,8 +1961,8 @@
 msgid "Vienna"
 msgstr "Viena"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Introduzca un código postal en el formato XXXX."
 
@@ -1972,19 +1972,19 @@
 "Introduzca un número de la Seguridad Social Austriaca válido en el formato "
 "XXXX XXXXXX."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Introduzca un código postal de 4 dígitos."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Introduzca un código postal en el formato XXXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Los números de teléfono deben tener el formato XXX-XXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
@@ -1992,27 +1992,27 @@
 "Seleccione un estado brasileño válido. Este estado no es uno de los estados "
 "disponibles."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Número CPF inválido."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Este campo necesita un máximo de 11 dígitos o 14 caracteres."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Número CNPJ inválido."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "Este campo necesita 14 dígitos como mínimo"
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Introduzca un código postal en el formato XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr ""
 "Introduzca un Número del Seguro Social de Canadá válido en el formato XXX-"
@@ -2122,7 +2122,7 @@
 msgid "Zurich"
 msgstr "Zurich"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2130,15 +2130,15 @@
 "Introduzca un número de identificación o pasaporte suizos válidos en el "
 "formato X1234567<0 o 1234567890."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Introduzca un RUT chileno válido."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Introduzca un RUT chileno válido. El formato es XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "El RUT chileno no es válido."
 
@@ -2198,25 +2198,25 @@
 msgid "Moravian-Silesian Region"
 msgstr "Región Moravia-Silesiana"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Introduzca un código postal en el formato XXXXX o XXX XX."
 
-#: contrib/localflavor/cz/forms.py:47
+#: contrib/localflavor/cz/forms.py:48
 msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
 msgstr ""
 "Introduzca un número de nacimiento en el formato XXXXXX/XXXX o XXXXXXXXXX."
 
-#: contrib/localflavor/cz/forms.py:48
+#: contrib/localflavor/cz/forms.py:49
 msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
 msgstr ""
 "El parámetro opcional 'Género' es inválido, los valores válidos son 'f' y 'm'"
 
-#: contrib/localflavor/cz/forms.py:49
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Introduzca un número de nacimiento válido."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Introduzca un número IC válido."
 
@@ -2284,12 +2284,12 @@
 msgid "Thuringia"
 msgstr "Thuringia"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Introduzca un código postal en el formato XXXXX."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2564,11 +2564,11 @@
 msgid "Valencian Community"
 msgstr "Comunidad Valenciana"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Introduzca un código postal en el rango y formato 01XXX - 52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
@@ -2576,65 +2576,497 @@
 "Introduzca un número de teléfono válido en el formato 6XXXXXXXX, 8XXXXXXXX o "
 "9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Por favor introduzca un NIF, NIE o CIF válido."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Por favor, introduzca un NIF o NIE válido."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "El NIF es incorrecto."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "El NIE es incorrecto."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "El CIF es incorrecto."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr ""
 "Introduzca un número de cuenta bancaria en el formato XXXX-XXXX-XX-"
 "XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "El número de cuenta bancaria es incorrecto."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Introduzca un número de seguro social finlandés válido."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Los números de teléfono deben tener el formato 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Introduzca un código postal válido"
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Introduzca un número de teléfono válido"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Introduzca un número de placa vehicular válido"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Introduzca un número NIK/KTP válido."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Jacarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "de Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "sesión"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Introduzca un código postal en el formato XXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr ""
 "Introduzca un número de identificación de Islandia válido. El formato es "
 "XXXXXX-XXXX."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "El número de identificación de Islandia no es válido."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Introduzca un código postal válido."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Introduzca un número de Seguro Social válido."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Introduzca un número VAT válido."
 
@@ -2830,6 +3262,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Introduzca un ID Civil kuwaití válido"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2958,15 +3394,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Introduzca un código postal válido"
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Introduzca un número de teléfono válido"
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Introduzca un número SoFi válido"
 
@@ -3018,15 +3450,15 @@
 msgid "Zuid-Holland"
 msgstr "Zuid-Holland"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Introduzca un número de seguro social de Noruega válido."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Este campo necesita 8 dígitos."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Este campo necesita 11 dígitos."
 
@@ -3052,7 +3484,8 @@
 #: contrib/localflavor/pl/forms.py:109
 msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
 msgstr ""
-"El Número Nacional de Registro de Negocios (REGON) consiste en 9 o 14 dígitos."
+"El Número Nacional de Registro de Negocios (REGON) consiste en 9 o 14 "
+"dígitos."
 
 #: contrib/localflavor/pl/forms.py:110
 msgid "Wrong checksum for the National Business Register Number (REGON)."
@@ -3126,6 +3559,14 @@
 msgid "West Pomerania"
 msgstr "West Pomerania"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Introduzca un código postal en el formato XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "Los números de teléfono deben ser de 9 dígitos, o comenzar con + o 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Introduzca un CIF válido."
@@ -3146,6 +3587,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Introduzca un código postal válido en el formato XXXXXX"
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Introduzca un número de organización sueca válido."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Introduzca un número de identidad personal sueco válido."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "No se admiten número de Co-ordinación."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Introduzca un código postal en el formato XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Estocolmo"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Región de Bystrica"
@@ -3778,20 +4319,44 @@
 msgid "Wales"
 msgstr "Gales"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Introduzca un código postal en el formato XXXXX o XXXX-XXXX."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Los números de teléfono deben tener el formato XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr ""
 "Introduzca un Número Seguro Social de EEUU válido en el formato XXX-XX-XXXX"
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Introduzca un estado o territorio de los EEUU."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Estado de los EEUU (dos letras mayúsculas)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Número de teléfono"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "Introduzca un número de CI válido en el formato X.XXX.XXX-X,XXXXXXX-X o XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Introduzca un número CI válido."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Introduzca un ID surafricano válido"
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Introduzca un código postal surafricano válido"
 
@@ -3831,6 +4396,10 @@
 msgid "Western Cape"
 msgstr "Western Cape"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "mensaje vago"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "redirigir desde"
@@ -3895,60 +4464,223 @@
 msgid "sites"
 msgstr "sitios"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Este valor debe ser un entero."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Este valor debe ser Verdadero o Falso."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Introduzca un valor correcto."
+
+#: core/validators.py:87 forms/fields.py:517
+msgid "Enter a valid URL."
+msgstr "Introduzca una URL válida."
+
+#: core/validators.py:89 forms/fields.py:518
+msgid "This URL appears to be a broken link."
+msgstr "La URL parece ser un enlace roto."
+
+#: core/validators.py:123 forms/fields.py:861
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Introduzca un 'slug' válido, consistente en letras, números, guiones bajos o "
+"medios."
+
+#: core/validators.py:126 forms/fields.py:854
+msgid "Enter a valid IPv4 address."
+msgstr "Introduzca una dirección IPv4 válida."
+
+#: core/validators.py:129 db/models/fields/__init__.py:598
+msgid "Enter only digits separated by commas."
+msgstr "Introduzca sólo dígitos separados por comas."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+"Asegúrese de que este valor es %(limit_value)s (actualmente es "
+"%(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:196 forms/fields.py:246
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Asegúrese de que este valor es menor o igual a %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:197 forms/fields.py:247
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Asegúrese de que este valor es mayor o igual a %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Asegúrese de que este valor tiene al menos %(limit_value)d caracteres ("
+"actualmente tiene %(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Asegúrese de que este valor tiene a lo más %(limit_value)d caracteres ("
+"actualmente tiene %(show_value)d)."
+
+#: db/models/base.py:780
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "El campo %(field_name)s debe ser único para %(lookup)s %(date_field)s"
+
+#: db/models/base.py:795 db/models/base.py:803
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "Ya existe %(model_name)s con este %(field_label)s."
+
+#: db/models/fields/__init__.py:62
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "El valor %r no es una opción válida."
+
+#: db/models/fields/__init__.py:63
 msgid "This field cannot be null."
 msgstr "Este campo no puede estar vacío."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Introduzca sólo dígitos separados por comas."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be blank."
+msgstr "Este campo no puede estar vacío."
+
+#: db/models/fields/__init__.py:69
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Campo de tipo: %(field_type)s"
+
+#: db/models/fields/__init__.py:477 db/models/fields/__init__.py:878
+#: db/models/fields/__init__.py:980 db/models/fields/__init__.py:991
+#: db/models/fields/__init__.py:1018
+msgid "Integer"
+msgstr "Entero"
+
+#: db/models/fields/__init__.py:481 db/models/fields/__init__.py:876
+msgid "This value must be an integer."
+msgstr "Este valor debe ser un entero."
+
+#: db/models/fields/__init__.py:516
+msgid "This value must be either True or False."
+msgstr "Este valor debe ser Verdadero o Falso."
+
+#: db/models/fields/__init__.py:518
+msgid "Boolean (Either True or False)"
+msgstr "Booleano (Verdadero o Falso)"
+
+#: db/models/fields/__init__.py:565 db/models/fields/__init__.py:1001
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Cadena (máximo %(max_length)s)"
+
+#: db/models/fields/__init__.py:593
+msgid "Comma-separated integers"
+msgstr "Enteros separados por comas"
+
+#: db/models/fields/__init__.py:607
+msgid "Date (without time)"
+msgstr "Fecha (sin hora)"
+
+#: db/models/fields/__init__.py:611
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:612
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Fecha no válida: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:693
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr ""
 "Introduzca una fecha/hora válida en formato AAAA-MM-DD HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:695
+msgid "Date (with time)"
+msgstr "Fecha (con hora)"
+
+#: db/models/fields/__init__.py:761
 msgid "This value must be a decimal number."
 msgstr "Este valor debe ser un entero."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:763
+msgid "Decimal number"
+msgstr "Número decimal"
+
+#: db/models/fields/__init__.py:818
+msgid "E-mail address"
+msgstr "Dirección de correo electrónico"
+
+#: db/models/fields/__init__.py:825 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Ruta de fichero"
+
+#: db/models/fields/__init__.py:848
 msgid "This value must be a float."
 msgstr "Este valor debe ser un número con coma flotante."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:850
+msgid "Floating point number"
+msgstr "Número en coma flotante"
+
+#: db/models/fields/__init__.py:903
+msgid "Big (8 byte) integer"
+msgstr "Entero grande (8 bytes)"
+
+#: db/models/fields/__init__.py:932
 msgid "This value must be either None, True or False."
 msgstr "Este valor debe ser Verdadero, Falso o Ninguno."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:934
+msgid "Boolean (Either True, False or None)"
+msgstr "Booleano (Verdadero, Falso o Nulo)"
+
+#: db/models/fields/__init__.py:1024
+msgid "Text"
+msgstr "Texto"
+
+#: db/models/fields/__init__.py:1040
+msgid "Time"
+msgstr "Hora"
+
+#: db/models/fields/__init__.py:1044
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Introduzca una hora válida en formato HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/__init__.py:1128
+msgid "XML text"
+msgstr "Texto XML"
+
+#: db/models/fields/related.py:755
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "No existe ningún objeto %(model)s con la clave primaria %(pk)r."
+
+#: db/models/fields/related.py:757
+msgid "Foreign Key (type determined by related field)"
+msgstr "Llave foránea (tipo determinado por el campo relacionado)"
+
+#: db/models/fields/related.py:879
+msgid "One-to-one relationship"
+msgstr "Relación uno-a-uno"
+
+#: db/models/fields/related.py:939
+msgid "Many-to-many relationship"
+msgstr "Relación muchos-a-muchos"
+
+#: db/models/fields/related.py:959
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Mantenga presionado \"Control\", o \"Command\" en un Mac, para seleccionar "
 "más de una opción."
 
-#: db/models/fields/related.py:894
+#: db/models/fields/related.py:1020
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3960,88 +4692,60 @@
 "Por favor, introduzca IDs de %(self)s válidos. Los valores %(value)r no son "
 "válidos."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Este campo es obligatorio."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Introduzca un valor correcto."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Asegúrese de que su texto tiene a lo más %(max)d caracteres (actualmente "
-"tiene %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Asegúrese de que su texto tiene al menos %(min)d caracteres (actualmente "
-"tiene %(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:195
 msgid "Enter a whole number."
 msgstr "Introduzca un número entero."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Asegúrese de que este valor es menor o igual a %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Asegúrese de que este valor es mayor o igual a %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:225 forms/fields.py:245
 msgid "Enter a number."
 msgstr "Introduzca un número."
 
-#: forms/fields.py:227
+#: forms/fields.py:248
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Asegúrese de que no hay más de %s dígitos en total."
 
-#: forms/fields.py:228
+#: forms/fields.py:249
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Asegúrese de que no hay más de %s decimales."
 
-#: forms/fields.py:229
+#: forms/fields.py:250
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Asegúrese de que no hay más de %s dígitos antes de la coma decimal."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:311 forms/fields.py:826
 msgid "Enter a valid date."
 msgstr "Introduzca una fecha válida."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:339 forms/fields.py:827
 msgid "Enter a valid time."
 msgstr "Introduzca una hora válida."
 
-#: forms/fields.py:361
+#: forms/fields.py:365
 msgid "Enter a valid date/time."
 msgstr "Introduzca una fecha/hora válida."
 
-#: forms/fields.py:447
+#: forms/fields.py:423
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr ""
 "No se ha enviado ningún fichero. Compruebe el tipo de codificación en el "
 "formulario."
 
-#: forms/fields.py:448
+#: forms/fields.py:424
 msgid "No file was submitted."
 msgstr "No se ha enviado ningún fichero"
 
-#: forms/fields.py:449
+#: forms/fields.py:425
 msgid "The submitted file is empty."
 msgstr "El fichero enviado está vacío."
 
-#: forms/fields.py:450
+#: forms/fields.py:426
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4049,7 +4753,7 @@
 "Asegúrese de que su texto tiene no más de %(max)d caracteres (actualmente "
 "tiene %(length)d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:461
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4057,61 +4761,32 @@
 "Envíe una imagen válida. El fichero que ha enviado no era una imagen o se "
 "trataba de una imagen corrupta."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Introduzca una URL válida."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "La URL parece ser un enlace roto."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:584 forms/fields.py:659
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr ""
 "Escoja una opción válida. %(value)s no es una de las opciones disponibles."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
+#: forms/fields.py:660 forms/fields.py:722 forms/models.py:980
 msgid "Enter a list of values."
 msgstr "Introduzca una lista de valores."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Introduzca una dirección IPv4 válida."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Introduzca un 'slug' válido, consistente en letras, números, guiones bajos o "
-"medios."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:290 forms/formsets.py:292
 msgid "Order"
 msgstr "Orden"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "El campo %(field_name)s debe ser único para %(lookup)s %(date_field)s"
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Ya existe %(model_name)s con este %(field_label)s."
-
-#: forms/models.py:594
+#: forms/models.py:547
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Por favor, corrija el dato duplicado para %(field)s."
 
-#: forms/models.py:598
+#: forms/models.py:551
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr ""
 "Por favor corriga el dato duplicado para %(field)s, el cual debe ser único."
 
-#: forms/models.py:604
+#: forms/models.py:557
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
@@ -4120,52 +4795,52 @@
 "Por favor corriga los datos duplicados para %(field_name)s el cual debe ser "
 "único para %(lookup)s en %(date_field)s."
 
-#: forms/models.py:612
+#: forms/models.py:565
 msgid "Please correct the duplicate values below."
 msgstr "Por favor, corrija los valores duplicados abajo."
 
-#: forms/models.py:867
+#: forms/models.py:839
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr ""
 "La clave foránea en linea no coincide con la clave primaria de la instancia "
 "padre."
 
-#: forms/models.py:930
+#: forms/models.py:905
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Escoja una opción válida. Esa opción no está entre las disponibles."
 
-#: forms/models.py:1004
+#: forms/models.py:981
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Escoja una opción válida; '%s' no es una de las opciones disponibles."
 
-#: forms/models.py:1006
+#: forms/models.py:983
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" no es un valor válido para una clave primaria."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "sí,no,tal vez"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d byte"
 msgstr[1] "%(size)d bytes"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4374,7 +5049,7 @@
 msgid "Dec."
 msgstr "dic."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "o"
 
@@ -4428,37 +5103,80 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
 msgstr "j N Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j N Y P"
+
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
 msgstr "P"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
 msgstr "j \\de F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "El/La %(verbose_name)s se ha creado exitosamente."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "Se actualizó con éxito el %(verbose_name)s."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "El/La %(verbose_name)s ha sido borrado."
 
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "Uno o más %(fieldname)s en %(name)s: %(obj)s"
+
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "Uno o más %(fieldname)s en %(name)s:"
+
+#~ msgid "Old password:"
+#~ msgstr "Contraseña antigua:"
+
+#~ msgid "Relation to parent model"
+#~ msgstr "Relación con el modelo padre"
+
+#~ msgid "Add user"
+#~ msgstr "Añadir usuario"
+
+#~ msgid "Comment moderation queue"
+#~ msgstr "Cola de moderación de comentarios"
+
+#~ msgid "No comments to moderate"
+#~ msgstr "No hay comentarios por moderar"
+
+#~ msgid "Email"
+#~ msgstr "Correo electrónico"
+
+#~ msgid "Authenticated?"
+#~ msgstr "¿Autentificado?"
+
+#~ msgid "IP Address"
+#~ msgstr "Dirección IP"
+
+#~ msgid "Date posted"
+#~ msgstr "Fecha de envío"
+
+#~ msgid "yes"
+#~ msgstr "sí"
+
+#~ msgid "no"
+#~ msgstr "no"
+
 #~ msgid "verbose_name"
 #~ msgid_plural "verbose_name_plural"
 #~ msgstr[0] "verbose_name"
@@ -4554,9 +5272,6 @@
 #~ msgid "deletion date"
 #~ msgstr "fecha de eliminación"
 
-#~ msgid "moderator deletion"
-#~ msgstr "eliminación del moderador"
-
 #~ msgid "moderator deletions"
 #~ msgstr "eliminaciones del moderador"
 
@@ -4687,9 +5402,6 @@
 #~ msgid "The URL %s is a broken link."
 #~ msgstr "La URL %s es un enlace roto."
 
-#~ msgid "Enter a valid U.S. state abbreviation."
-#~ msgstr "Introduzca una abreviatura válida de estado de los EEUU."
-
 #~ msgid "This field must match the '%s' field."
 #~ msgstr "Este campo debe concordar con el campo '%s'."
 
@@ -4702,9 +5414,6 @@
 #~ msgid "This field must be given if %(field)s is not %(value)s"
 #~ msgstr "Se debe proporcionar este campo si %(field)s no es %(value)s"
 
-#~ msgid "Duplicate values are not allowed."
-#~ msgstr "No se admiten valores duplicados."
-
 #~ msgid "This value must be between %(lower)s and %(upper)s."
 #~ msgstr "Este valor debe estar entre %(lower)s y %(upper)s."
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/es/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,30 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = r'j \de F \de Y'
+TIME_FORMAT = 'H:i:s'
+DATETIME_FORMAT = r'j \de F \de Y \a \l\a\s H:i'
+YEAR_MONTH_FORMAT = r'F \de Y'
+MONTH_DAY_FORMAT = r'j \de F'
+SHORT_DATE_FORMAT = 'd/m/Y'
+SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+FIRST_DAY_OF_WEEK = 1 # Monday
+DATE_INPUT_FORMATS = (
+    # '31/12/2009', '31/12/09'
+    '%d/%m/%Y', '%d/%m/%y'
+)
+TIME_INPUT_FORMATS = (
+    # '14:30:59', '14:30'
+    '%H:%M:%S', '%H:%M'
+)
+DATETIME_INPUT_FORMATS = (
+    '%d/%m/%Y %H:%M:%S',
+    '%d/%m/%Y %H:%M',
+    '%d/%m/%y %H:%M:%S',
+    '%d/%m/%y %H:%M',
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+NUMBER_GROUPING = 3
+
Binary file web/lib/django/conf/locale/es_AR/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/es_AR/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/es_AR/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -6,229 +6,267 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-21 23:56-0300\n"
-"PO-Revision-Date: 2009-07-22 00:13-0300\n"
+"POT-Creation-Date: 2010-05-04 12:05-0300\n"
+"PO-Revision-Date: 2010-05-04 22:18-0300\n"
 "Last-Translator: Ramiro Morales <rm0@gmx.net>\n"
 "Language-Team: Django-I18N <django-i18n@googlegroups.com>\n"
+"Language: es_AR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.1\n"
 
 #: conf/global_settings.py:44
 msgid "Arabic"
 msgstr "árabe"
 
 #: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "bengalí"
+msgid "Bulgarian"
+msgstr "búlgaro"
 
 #: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "búlgaro"
+msgid "Bengali"
+msgstr "bengalí"
 
 #: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr "bosnio"
+
+#: conf/global_settings.py:48
 msgid "Catalan"
 msgstr "catalán"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "checo"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:50
 msgid "Welsh"
 msgstr "galés"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:51
 msgid "Danish"
 msgstr "danés"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "alemán"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "griego"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "inglés"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
+msgid "British English"
+msgstr "inglés británico"
+
+#: conf/global_settings.py:56
 msgid "Spanish"
 msgstr "español"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "estonio"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "español de Argentina"
-
 #: conf/global_settings.py:57
-msgid "Basque"
-msgstr "vasco"
+msgid "Argentinean Spanish"
+msgstr "español de Argentina"
 
 #: conf/global_settings.py:58
+msgid "Estonian"
+msgstr "estonio"
+
+#: conf/global_settings.py:59
+msgid "Basque"
+msgstr "vasco"
+
+#: conf/global_settings.py:60
 msgid "Persian"
 msgstr "persa"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:61
 msgid "Finnish"
 msgstr "finlandés"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:62
 msgid "French"
 msgstr "francés"
 
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "irlandés"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "gallego"
-
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "húngaro"
+msgid "Frisian"
+msgstr "frisón"
 
 #: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "hebreo"
+msgid "Irish"
+msgstr "irlandés"
 
 #: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "Hindi"
+msgid "Galician"
+msgstr "gallego"
 
 #: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "croata"
+msgid "Hebrew"
+msgstr "hebreo"
 
 #: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "islandés"
+msgid "Hindi"
+msgstr "hindi"
 
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "italiano"
+msgid "Croatian"
+msgstr "croata"
 
 #: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "japonés"
+msgid "Hungarian"
+msgstr "húngaro"
 
 #: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "georgiano"
+msgid "Icelandic"
+msgstr "islandés"
 
 #: conf/global_settings.py:71
-msgid "Korean"
-msgstr "koreano"
+msgid "Italian"
+msgstr "italiano"
 
 #: conf/global_settings.py:72
+msgid "Japanese"
+msgstr "japonés"
+
+#: conf/global_settings.py:73
+msgid "Georgian"
+msgstr "georgiano"
+
+#: conf/global_settings.py:74
 msgid "Khmer"
 msgstr "jémer"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:75
 msgid "Kannada"
 msgstr "canarés"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "letón"
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "lituano"
-
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "macedonio"
+msgid "Korean"
+msgstr "coreano"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "holandés"
+msgid "Lithuanian"
+msgstr "lituano"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "noruego"
+msgid "Latvian"
+msgstr "letón"
 
 #: conf/global_settings.py:79
+msgid "Macedonian"
+msgstr "macedonio"
+
+#: conf/global_settings.py:80
+msgid "Mongolian"
+msgstr "mongol"
+
+#: conf/global_settings.py:81
+msgid "Dutch"
+msgstr "holandés"
+
+#: conf/global_settings.py:82
+msgid "Norwegian"
+msgstr "noruego"
+
+#: conf/global_settings.py:83
+msgid "Norwegian Bokmal"
+msgstr "bokmål"
+
+#: conf/global_settings.py:84
+msgid "Norwegian Nynorsk"
+msgstr "nynorsk"
+
+#: conf/global_settings.py:85
 msgid "Polish"
 msgstr "polaco"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:86
 msgid "Portuguese"
 msgstr "portugués"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:87
 msgid "Brazilian Portuguese"
 msgstr "portugués de Brasil"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:88
 msgid "Romanian"
 msgstr "rumano"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:89
 msgid "Russian"
 msgstr "ruso"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:90
 msgid "Slovak"
 msgstr "eslovaco"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:91
 msgid "Slovenian"
 msgstr "esloveno"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:92
+msgid "Albanian"
+msgstr "albanés"
+
+#: conf/global_settings.py:93
 msgid "Serbian"
 msgstr "serbio"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:94
+msgid "Serbian Latin"
+msgstr "Latín de Serbia"
+
+#: conf/global_settings.py:95
 msgid "Swedish"
 msgstr "sueco"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:96
 msgid "Tamil"
 msgstr "tamil"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:97
 msgid "Telugu"
 msgstr "telugu"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:98
 msgid "Thai"
 msgstr "tailandés"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:99
 msgid "Turkish"
 msgstr "turco"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:100
 msgid "Ukrainian"
 msgstr "ucraniano"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:101
+msgid "Vietnamese"
+msgstr "vietnamita"
+
+#: conf/global_settings.py:102
 msgid "Simplified Chinese"
 msgstr "chino simplificado"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:103
 msgid "Traditional Chinese"
 msgstr "chino tradicional"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:48
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Se eliminaron con éxito %(count)d %(items)s."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
+#: contrib/admin/actions.py:55 contrib/admin/options.py:1125
 msgid "Are you sure?"
 msgstr "¿Está seguro?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:73
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Eliminar %(verbose_name_plural)s seleccionados/as"
@@ -267,19 +305,19 @@
 msgid "This year"
 msgstr "Este año"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Sí"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "No"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Desconocido"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "Acción:"
 
@@ -311,61 +349,60 @@
 msgid "log entries"
 msgstr "entradas de registro"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:138 contrib/admin/options.py:153
 msgid "None"
 msgstr "Ninguno"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:559
 #, python-format
 msgid "Changed %s."
 msgstr "Modifica %s."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
+#: contrib/admin/options.py:559 contrib/admin/options.py:569
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:568
 msgid "and"
 msgstr "y"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:564
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Se agregó %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Se modificaron %(list)s en %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:573
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Se eliminó %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:577
 msgid "No fields changed."
 msgstr "No ha modificado ningún campo."
 
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
+#: contrib/admin/options.py:643
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "Se agregó con éxito %(name)s \"%(obj)s\"."
 
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:647 contrib/admin/options.py:680
 msgid "You may edit it again below."
 msgstr "Puede modificarlo/a nuevamente abajo."
 
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
+#: contrib/admin/options.py:657 contrib/admin/options.py:690
 #, python-format
 msgid "You may add another %s below."
 msgstr "Puede agregar otro/a %s abajo."
 
-#: contrib/admin/options.py:634
+#: contrib/admin/options.py:678
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "Se modificó con éxito %(name)s \"%(obj)s\"."
 
-#: contrib/admin/options.py:642
+#: contrib/admin/options.py:686
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -373,44 +410,68 @@
 "Se agregó con éxito %(name)s \"%(obj)s\". Puede modificarlo/a nuevamente "
 "abajo."
 
-#: contrib/admin/options.py:773
+#: contrib/admin/options.py:740 contrib/admin/options.py:997
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Deben existir items seleccionados para poder realizar acciones sobre los "
+"mismos. No se modificó ningún item."
+
+#: contrib/admin/options.py:759
+msgid "No action selected."
+msgstr "No se ha seleccionado ninguna acción."
+
+#: contrib/admin/options.py:840
 #, python-format
 msgid "Add %s"
 msgstr "Agregar %s"
 
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
+#: contrib/admin/options.py:866 contrib/admin/options.py:1105
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "No existe un objeto %(name)s con una clave primaria %(key)r."
 
-#: contrib/admin/options.py:861
+#: contrib/admin/options.py:931
 #, python-format
 msgid "Change %s"
 msgstr "Modificar %s"
 
-#: contrib/admin/options.py:905
+#: contrib/admin/options.py:977
 msgid "Database error"
 msgstr "Error de base de datos"
 
-#: contrib/admin/options.py:941
+#: contrib/admin/options.py:1039
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "Se ha modificado con éxito %(count)s %(name)s."
 msgstr[1] "Se han modificado con éxito %(count)s %(name)s."
 
-#: contrib/admin/options.py:1020
+#: contrib/admin/options.py:1066
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count) seleccionados/as"
+msgstr[1] "Los/as %(total_count)s han sido seleccionados/as"
+
+#: contrib/admin/options.py:1071
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 de %(cnt)s seleccionados/as"
+
+#: contrib/admin/options.py:1118
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "Se eliminó con éxito %(name)s \"%(obj)s\"."
 
-#: contrib/admin/options.py:1057
+#: contrib/admin/options.py:1155
 #, python-format
 msgid "Change history: %s"
 msgstr "Historia de modificaciones: %s"
 
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -418,11 +479,11 @@
 "Por favor introduzca un nombre de usuario y una contraseña correctos. Note "
 "que ambos campos son sensibles a mayúsculas/minúsculas."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:307 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Por favor, identifíquese de nuevo porque su sesión ha caducado."
 
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:314 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -430,64 +491,54 @@
 "Parece que su navegador no está configurado para aceptar cookies. Por favor "
 "actívelas, recargue esta página, e inténtelo de nuevo."
 
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
+#: contrib/admin/sites.py:330 contrib/admin/sites.py:336
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Los nombres de usuario no pueden contener el carácter '@'."
 
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:333 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
 "Su dirección de correo electrónico no es su nombre de usuario. Intente "
 "nuevamente usando '%s'."
 
-#: contrib/admin/sites.py:367
+#: contrib/admin/sites.py:389
 msgid "Site administration"
 msgstr "Administración de sitio"
 
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Identificarse"
 
-#: contrib/admin/sites.py:426
+#: contrib/admin/sites.py:448
 #, python-format
 msgid "%s administration"
 msgstr "Administración de %s"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Uno o más %(fieldname)s en %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Uno o más %(fieldname)s en %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Fecha:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Hora:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Actualmente"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Modificar:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Buscar"
 
-#: contrib/admin/widgets.py:235
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Agregar otro/a"
 
@@ -502,17 +553,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -550,34 +601,47 @@
 msgid "Go"
 msgstr "Ejecutar"
 
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr "Haga click aquí para seleccionar los objetos de todas las páginas"
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Seleccionar lo(s)/a(s) %(total_count)s de %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "Borrar selección"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:27
+#: contrib/admin/templates/admin/base.html:28
 msgid "Welcome,"
 msgstr "Bienvenido,"
 
-#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Documentación"
 
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Cambiar contraseña"
 
-#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Cerrar sesión"
 
@@ -589,41 +653,42 @@
 msgid "Django administration"
 msgstr "Administración de Django"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Agregar"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Historia"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Ver en el sitio"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Por favor, corrija el siguiente error."
 msgstr[1] "Por favor, corrija los siguientes errores."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "Agregar %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Filtrar"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Eliminar"
 
@@ -671,10 +736,10 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
 "¿Está seguro de que quiere eliminar los objetos %(object_name)s "
-"seleccionados? Se eliminarán todos los siguientes objetos "
+"seleccionados? Se eliminarán todos los siguientes objetos y sus items "
 "relacionados:"
 
 #: contrib/admin/templates/admin/filter.html:2
@@ -738,21 +803,15 @@
 msgstr "Usuario"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Acción"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j N Y P"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
 "admin site."
 msgstr ""
-"Este objeto no tiene historia de modificaciones. Probablemente no fué "
+"Este objeto no tiene historia de modificaciones. Probablemente no fue "
 "añadido usando este sitio de administración."
 
 #: contrib/admin/templates/admin/pagination.html:10
@@ -762,7 +821,7 @@
 #: contrib/admin/templates/admin/pagination.html:11
 #: contrib/admin/templates/admin/submit_line.html:3
 msgid "Save"
-msgstr "Grabar"
+msgstr "Guardar"
 
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Search"
@@ -782,17 +841,17 @@
 
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
-msgstr "Grabar como nuevo"
+msgstr "Guardar como nuevo"
 
 #: contrib/admin/templates/admin/submit_line.html:6
 msgid "Save and add another"
-msgstr "Grabar y añadir otro"
+msgstr "Guardar y agregar otro"
 
 #: contrib/admin/templates/admin/submit_line.html:7
 msgid "Save and continue editing"
-msgstr "Grabar y continuar editando"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+msgstr "Guardar y continuar editando"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -800,36 +859,42 @@
 "Primero, introduzca un nombre de usuario y una contraseña. Luego podrá "
 "configurar opciones adicionales."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Nombre de usuario:"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Contraseña:"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Contraseña (de nuevo)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr ""
-"Para verificación, introduzca la misma contraseña que introdujo arriba."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr ""
 "Introduzca una nueva contraseña para el usuario <strong>%(username)s</"
 "strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Contraseña:"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Contraseña (de nuevo)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr ""
+"Para verificación, introduzca la misma contraseña que introdujo arriba."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Agregar otro/a %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Eliminar"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Eliminar?"
@@ -843,9 +908,9 @@
 msgstr "Identificarse de nuevo"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Cambio de contraseña"
 
@@ -858,7 +923,7 @@
 msgid "Your password was changed."
 msgstr "Su contraseña ha sido cambiada."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -867,21 +932,17 @@
 "antigua y luego introduzca la nueva contraseña dos veces para verificar que "
 "la ha escrito correctamente."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Contraseña antigua:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Contraseña nueva:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirme contraseña:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Contraseña antigua"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Contraseña nueva"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Cambiar mi contraseña"
@@ -920,6 +981,14 @@
 "Por favor introduzca su nueva contraseña dos veces de manera que podamos "
 "verificar que la ha escrito correctamente."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Contraseña nueva:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Confirme contraseña:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Reinicialización de contraseña exitosa"
@@ -949,8 +1018,7 @@
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Recibe este mensaje debido a que solicitó recuperar la contraseña"
+msgstr "Recibe este mensaje debido a que solicitó recuperar la contraseña"
 
 #: contrib/admin/templates/registration/password_reset_email.html:3
 #, python-format
@@ -992,25 +1060,25 @@
 msgid "Reset my password"
 msgstr "Recuperar mi contraseña"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Todas las fechas"
 
-#: contrib/admin/views/main.py:70
+#: contrib/admin/views/main.py:65
 #, python-format
 msgid "Select %s"
 msgstr "Seleccione %s"
 
-#: contrib/admin/views/main.py:70
+#: contrib/admin/views/main.py:65
 #, python-format
 msgid "Select %s to change"
 msgstr "Seleccione %s a modificar"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "sitio"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "plantilla"
 
@@ -1070,89 +1138,7 @@
 msgid "Fields on %s objects"
 msgstr "Campos en objetos %s"
 
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Entero"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Booleano (Verdadero o Falso)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Cadena (máximo %(max_length)s)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Enteros separados por comas"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Fecha (sin hora)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Fecha (con hora)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Número decimal"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "Dirección de correo electrónico"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Ruta de archivo"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Número de punto flotante"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "Dirección IP"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleano (Verdadero, Falso o Nulo)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Relación con el modelo padre"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Número de teléfono"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Texto"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Hora"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estado de los EE.UU. (dos letras mayúsculas)"
-
 #: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "Texto XML"
-
-#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s no parece ser un objeto urlpattern"
@@ -1226,66 +1212,63 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Ídem, pero abre la página de administración en una nueva ventana."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Información personal"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Permisos"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Fechas importantes"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Grupos"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Agregar usuario"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Cambio de contraseña exitoso"
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Cambiar contraseña: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Nombre de usuario:"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
 msgstr ""
 "Obligatorio. Longitud máxima 30 caracteres alfanuméricos (letras, dígitos y "
-"guiones bajos)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Este valor debe contener sólo letras, números y guiones bajos."
+"@/./+/-/_) solamente."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Este valor solo puede contener letras, números y @/./+/-/_."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Confirmación de contraseña"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Ya existe un usuario con ese nombre."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Los dos campos de contraseñas no coinciden entre si."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Esta cuenta está inactiva"
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1293,86 +1276,85 @@
 "Su navegador Web aparenta no estar configurado para aceptar cookies. Las "
 "cookies son un requerimiento para poder ingresar."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "Correo electrónico"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
 msgstr ""
-"Esa dirección de e-mail no está asociada a ninguna cuenta de usuario. ¿Está "
-"seguro de que ya se ha registrado?"
-
-#: contrib/auth/forms.py:135
+"Esa dirección de correo electrónico no está asociada a ninguna cuenta de "
+"usuario. ¿Está seguro de que ya se ha registrado?"
+
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Reinicialización de contraseña en %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Contraseña nueva"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Confirmación de contraseña nueva"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Contraseña antigua"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr ""
 "La antigua contraseña introducida es incorrecta. Por favor introdúzcala "
 "nuevamente."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "nombre"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "nombre en código"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "permiso"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "permisos"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "grupo"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "grupos"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "nombre de usuario"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Obligatorio. Longitud máxima de 30 caracteres alfanuméricos (letras, dígitos "
+"y @/./+/-/_)."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "nombre"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "apellido"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "dirección de correo electrónico"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "contraseña"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1380,19 +1362,19 @@
 "Use '[algo]$[salt]$[hexdigest]' o use el <a href=\"password/\">formulario de "
 "cambio de contraseña</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "es staff"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Indica si el usuario puede ingresar a este sitio de administración."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "activo"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1400,11 +1382,11 @@
 "Indica si el usuario debe ser tratado como un usuario activo. Desactive este "
 "campo en lugar de eliminar usuarios."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "es superusuario"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
@@ -1412,15 +1394,15 @@
 "Indica que este usuario posee todos los permisos sin que sea necesario "
 "asignarle los mismos en forma explícita."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "último ingreso"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "fecha de creación"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1428,39 +1410,77 @@
 "Además de los permisos asignados manualmente, este usuario también poseerá "
 "todos los permisos de los grupos a los que pertenezca."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "permisos de usuario"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "usuario"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "usuarios"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "mensaje"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Sesión cerrada"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Introduzca una dirección de correo electrónico válida"
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Contenido"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metadatos"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "marcado"
+msgstr[1] "marcados"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Marcar comentarios seleccionados"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "aprobado"
+msgstr[1] "aprobados"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Aprobar comentario seleccionado"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "eliminado"
+msgstr[1] "eliminados"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Eliminar comentarios seleccionados"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "un comentario fue %(action)s satisfactoriamente."
+msgstr[1] "%(count)s comentarios fueros %(action)s satisfactoriamente"
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1472,7 +1492,6 @@
 msgstr "Últimos comentarios en %(site_name)s."
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Nombre"
 
@@ -1480,24 +1499,28 @@
 msgid "Email address"
 msgstr "Dirección de correo electrónico"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Comentario"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "¡Controla tu lenguaje! Aquí no admitimos la palabra %s."
 msgstr[1] "¡Controla tu lenguaje! Aquí no admitimos las palabras %s."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr "Si introduce algo en este campo su comentario será tratado como spam"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "tipo de contenido"
 
@@ -1526,6 +1549,10 @@
 msgid "date/time submitted"
 msgstr "fecha/hora de envío"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "Dirección IP"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "es público"
@@ -1533,8 +1560,7 @@
 #: contrib/comments/models.py:62
 msgid ""
 "Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"deseleccione esta caja para lograr que el comentario desaparezca del sitio."
+msgstr "desmarque este ítem para que el comentario desaparezca del sitio."
 
 #: contrib/comments/models.py:64
 msgid "is removed"
@@ -1545,7 +1571,7 @@
 "Check this box if the comment is inappropriate. A \"This comment has been "
 "removed\" message will be displayed instead."
 msgstr ""
-"Marque esta caja si el comentario es inapropiado. En su lugar se mostrará un "
+"Marque este ítem si el comentario es inapropiado. En su lugar se mostrará un "
 "mensaje \"Este comentario ha sido eliminado\"."
 
 #: contrib/comments/models.py:77
@@ -1608,7 +1634,6 @@
 msgstr "¿Confirma que realmente desea hacer este comentario público?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Aprobar"
 
@@ -1633,11 +1658,6 @@
 msgid "Really remove this comment?"
 msgstr "¿Confirma que realmente desea eliminar este comentario?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Eliminar"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "¡Gracias por eliminar!"
@@ -1668,39 +1688,6 @@
 msgid "Preview"
 msgstr "Previsualización"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Cola de comentarios que necesitan revisión"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "No hay comentarios que necesiten revisación"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Correo electrónico"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "¿Identificado?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "Dirección IP"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "fecha de creación"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "sí"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "no"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Gracias por dejar su comentario"
@@ -1728,11 +1715,11 @@
 msgid "or make changes"
 msgstr "o realice modificaciones"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "nombre de la clase python del modelo"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "tipos de contenido"
 
@@ -1795,7 +1782,7 @@
 msgid "flat pages"
 msgstr "páginas estáticas"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1803,6 +1790,40 @@
 "Lamentablemente su formulario ha caducado. Por favor continúe rellenando el "
 "formulario en esta página."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+"El campo GIS base -- corresponde al tipo Geometry de la especificación "
+"OpenGIS."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Punto"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Secuencia de líneas"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Polígono"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Multi-punto"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Cadena multi-línea"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Multi polígono"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Colección de Geometry's"
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "No se ha proporcionado un valor de geometría."
@@ -1825,19 +1846,19 @@
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
-msgstr "th"
+msgstr "to"
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "st"
-msgstr "st"
+msgstr "ro"
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "nd"
-msgstr "nd"
+msgstr "do"
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "rd"
-msgstr "rd"
+msgstr "ro"
 
 #: contrib/humanize/templatetags/humanize.py:51
 #, python-format
@@ -1908,25 +1929,25 @@
 msgid "yesterday"
 msgstr "ayer"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Introduzca un código postal en formato NNNN o ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:92
+#: contrib/localflavor/br/forms.py:131 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
-msgstr "Este campo permite sólo valores numéricos."
-
-#: contrib/localflavor/ar/forms.py:50
+msgstr "Este campo sólo permite valores numéricos."
+
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Este campo requiere 7 u 8 dígitos."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Introduzca un CUIT válido en formato XX-XXXXXXXX-X o XXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "CUIT inválido."
 
@@ -1966,29 +1987,30 @@
 msgid "Vienna"
 msgstr "Viena"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Introduzca un zip code en formato XXXX."
 
 #: contrib/localflavor/at/forms.py:48
 msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
 msgstr ""
-"Introduzca un Número de Seguridad Social austríaco en formato XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:16
+"Introduzca un Número de Seguridad Social austríaco válido en formato XXXX "
+"XXXXXX."
+
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Introduzca un post code de 4 dígitos."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:17
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Introduzca un zip code en formato XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:26
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Los números telefónicos deben respetar el formato XX-XXXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:54
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
@@ -1996,30 +2018,31 @@
 "Seleccione un estado Brasileño válido. Ese estado no es uno de los estados "
 "disponibles."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:90
 msgid "Invalid CPF number."
 msgstr "Número CPF inválido."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:91
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Este campo requiere como máximo 11 dígitos o 14 caracteres."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:130
 msgid "Invalid CNPJ number."
 msgstr "Número CNPJ inválido."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:132
 msgid "This field requires at least 14 digits"
 msgstr "Este campo requiere al menos 14 dígitos."
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Introduzca un código postal en formato XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr ""
-"Introduzca un Número de Seguridad Social Canadiense en formato XXX-XXX-XXX."
+"Introduzca un Número de Seguridad Social Canadiense válido en formato XXX-"
+"XXX-XXX."
 
 #: contrib/localflavor/ch/ch_states.py:5
 msgid "Aargau"
@@ -2125,7 +2148,7 @@
 msgid "Zurich"
 msgstr "Zurich"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2133,15 +2156,15 @@
 "Introduzca un número válido de tarjeta de identidad o pasaporte Suizos en "
 "formato X1234567<0 o 1234567890."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Introduzca un RUT chileno válido."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Introduzca un RUT chileno válido. EL formato es XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "El RUT chileno no es válido."
 
@@ -2155,7 +2178,7 @@
 
 #: contrib/localflavor/cz/cz_regions.py:10
 msgid "South Bohemian Region"
-msgstr "región Bohemian Meridional"
+msgstr "región Bohemia Meridional"
 
 #: contrib/localflavor/cz/cz_regions.py:11
 msgid "Pilsen Region"
@@ -2201,24 +2224,26 @@
 msgid "Moravian-Silesian Region"
 msgstr "región Moravia-Silesia"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Introduzca un código postal en formato XXXXX o XXX XX."
 
-#: contrib/localflavor/cz/forms.py:47
+#: contrib/localflavor/cz/forms.py:48
 msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
 msgstr ""
 "Introduzca un número de nacimiento en formato XXXXXX/XXXX o XXXXXXXXXX."
 
-#: contrib/localflavor/cz/forms.py:48
+#: contrib/localflavor/cz/forms.py:49
 msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Parámetro opcional Género inválido, valores válidos son 'f' y 'm'"
-
-#: contrib/localflavor/cz/forms.py:49
+msgstr ""
+"Valor erróneo para el parámetro opcional género. Los valores válidos son 'f' "
+"y 'm'"
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
-msgstr "Introduzca un número ide nacimiento válido."
-
-#: contrib/localflavor/cz/forms.py:106
+msgstr "Introduzca un número de nacimiento válido."
+
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Introduzca un número IC válido."
 
@@ -2232,11 +2257,11 @@
 
 #: contrib/localflavor/de/de_states.py:7
 msgid "Berlin"
-msgstr "Berlin"
+msgstr "Berlín"
 
 #: contrib/localflavor/de/de_states.py:8
 msgid "Brandenburg"
-msgstr "Brandenburg"
+msgstr "Brandenburgo"
 
 #: contrib/localflavor/de/de_states.py:9
 msgid "Bremen"
@@ -2260,7 +2285,7 @@
 
 #: contrib/localflavor/de/de_states.py:14
 msgid "North Rhine-Westphalia"
-msgstr "North Rhine-Westphalia"
+msgstr "Renania septentrional-Westfalia"
 
 #: contrib/localflavor/de/de_states.py:15
 msgid "Rhineland-Palatinate"
@@ -2286,12 +2311,12 @@
 msgid "Thuringia"
 msgstr "Thuringia"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Introduzca un zip code en formato XXXXX."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2566,13 +2591,13 @@
 msgid "Valencian Community"
 msgstr "Comunidad Valenciana"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr ""
 "Introduzca un código postal en el siguiente rango y con el siguiente "
 "formato: 01XXX - 52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
@@ -2580,65 +2605,497 @@
 "Introduzca un número telefónico en uno de los siguientes formatos: "
 "6XXXXXXXX, 8XXXXXXXX o 9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Por favor introduzca un NIF, NIE o CIF válidos."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Por favor, introduzca un NIF o CIE válidos."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Código de verificación de NIF inválido."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Código de verificación de NIE inválido."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Código de verificación de CIF inválido."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr ""
 "Por favor introduzca un número de cuenta bancaria válido en formato XXXX-"
 "XXXX-XX-XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Código de verificación de número de cuenta bancaria inválido."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Introduzca un número de seguridad social finlandés válido."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Los números telefónicos deben respetar el formato 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Introduzca un código postal válido."
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Introduzca un número telefónico válido."
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Introduzca un número de placa de licencia de vehículo válido."
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Introduzca un número NIK/KTP válido."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Bali"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Banten"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Bengkulu"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Yogyakarta"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Jakarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Gorontalo"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Jambi"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Java Barat"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Java Central"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Java Oriental"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Kalimantan Occidental"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Kalimantan Meridional"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Kalimantan Central"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Kalimantan Oriental"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Kepulauan Bangka-Belitung"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Islas Riau"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Lampung"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Molucas"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Molucas Septentrional"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Aceh"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Nusatenggara Occidental"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Nusatenggara Oriental"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Papúa"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Provincia de Papúa Occidental"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Riau"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "Célebes Occidental"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Dublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Mayo"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "Meath"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Introduzca un zip code en formato XXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr ""
 "Introduzca un número de identificación islandés válido. El formato es XXXXXX-"
 "XXXX."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "El número de identificación islandés no es válido."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Introduzca un zip code válido."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Introduzca un número de Seguridad Social válido."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Introduzca un número VAT válido."
 
@@ -2696,7 +3153,7 @@
 
 #: contrib/localflavor/jp/jp_prefectures.py:16
 msgid "Tokyo"
-msgstr "Tokyo"
+msgstr "Tokio"
 
 #: contrib/localflavor/jp/jp_prefectures.py:17
 msgid "Kanagawa"
@@ -2834,6 +3291,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Introduzca un número de ID civil kuwaití válido."
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2962,15 +3423,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Introduzca un código postal válido."
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Introduzca un número telefónico válido."
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Introduzca un número SoFi válido."
 
@@ -3022,15 +3479,15 @@
 msgid "Zuid-Holland"
 msgstr "Holanda Meridional"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Introduzca un número de seguridad social Noruego válido."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Este campo requiere 8 dígitos."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Este campo requiere 11 dígitos."
 
@@ -3062,7 +3519,7 @@
 #: contrib/localflavor/pl/forms.py:110
 msgid "Wrong checksum for the National Business Register Number (REGON)."
 msgstr ""
-"Código de verificación de Número Nacional de Registro de negocios (REGON) "
+"Código de verificación de Número Nacional de Registro de Negocios (REGON) "
 "inválido."
 
 #: contrib/localflavor/pl/forms.py:148
@@ -3133,6 +3590,14 @@
 msgid "West Pomerania"
 msgstr "Pomerania Occidental"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Introduzca un zip code en formato XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "Los números telefónicos deben ser de 9 dígitos o comenzar con + o 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Introduzca un CIF válido."
@@ -3153,6 +3618,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Introduzca un código postal válido en formato XXXXXX"
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Introduzca un número de organización sueco válido."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Introduzca un número de identidad personal sueco válido."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "No se admiten números de co-ordinación"
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Introduzca un código postal sueco en formato XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Estocolmo"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergrötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Escania"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Banska Bystrica"
@@ -3785,19 +4350,44 @@
 msgid "Wales"
 msgstr "Gales"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Introduzca un zip code en el formato XXXXX o XXXXX-XXXX."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Los números telefónicos deben respetar el formato XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr "Introduzca un Número de Seguridad Social en formato XXX-XX-XXXX."
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Introduzca un estado de EE.UU. o un territorio."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Estado de los EE.UU. (dos letras mayúsculas)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Número de teléfono"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+"Introduzca un número CI válido en formato X.XXX.XXX-X,XXXXXXX-X o XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Introduzca un número CI válido."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
-msgstr "Introduzca un número ID de Sudáfrica válido."
-
-#: contrib/localflavor/za/forms.py:54
+msgstr "Introduzca un número de ID de Sudáfrica válido."
+
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Introduzca un código postal de Sudáfrica válido."
 
@@ -3837,6 +4427,10 @@
 msgid "Western Cape"
 msgstr "Western Cape"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "mensaje lazy"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "redirigir desde"
@@ -3875,7 +4469,7 @@
 
 #: contrib/sessions/models.py:47
 msgid "session data"
-msgstr "datos de sesión"
+msgstr "datos de la sesión"
 
 #: contrib/sessions/models.py:48
 msgid "expire date"
@@ -3901,61 +4495,224 @@
 msgid "sites"
 msgstr "sitios"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Este valor debe ser un número entero."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Este valor debe ser True o False."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Introduzca un valor válido."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Introduzca una URL válida."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "La URL parece ser un enlace roto."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr "Introduzca un 'slug' válido consistente de letras, números o guiones."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Introduzca una dirección IPv4 válida"
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Introduzca sólo dígitos separados por comas."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+"Asegúrese de que este valor sea %(limit_value)s (actualmente es %(show_value)"
+"s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Asegúrese de que este valor sea menor o igual a %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Asegúrese de que este valor sea mayor o igual a %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Asegúrese de que este valor tenga al menos %(limit_value)d caracteres (tiene "
+"%(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Asegúrese de que este valor tenga como máximo %(limit_value)d caracteres "
+"(tiene %(show_value)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr ""
+"%(field_name)s debe ser único/a para un %(lookup)s %(date_field)s "
+"determinado."
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "Ya existe un/a %(model_name)s con este/a %(field_label)s."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "El valor %r no es una opción válida."
+
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Este campo no puede ser nulo."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Introduzca sólo dígitos separados por comas."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Este campo no puede estar en blanco."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Campo tipo: %(field_type)s"
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Entero"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+msgid "This value must be an integer."
+msgstr "Este valor debe ser un número entero."
+
+#: db/models/fields/__init__.py:490
+msgid "This value must be either True or False."
+msgstr "Este valor debe ser True o False."
+
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Booleano (Verdadero o Falso)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Cadena (máximo %(max_length)s)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Enteros separados por comas"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Fecha (sin hora)"
+
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Fecha no válida: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr ""
 "Introduzca un valor de fecha/hora válido en formato AAAA-MM-DD HH:MM[:ss[."
 "uuuuuu]]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Fecha (con hora)"
+
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "Este valor debe ser un número decimal."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Número decimal"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "Dirección de correo electrónico"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Ruta de archivo"
+
+#: db/models/fields/__init__.py:822
 msgid "This value must be a float."
 msgstr "Este valor debe ser un valor en representación de punto flotante."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "Número de punto flotante"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Entero grande (8 bytes)"
+
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr "Este valor debe ser None, True o False."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Booleano (Verdadero, Falso o Nulo)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Texto"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Hora"
+
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Introduzca un valor de hora válido en formato HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "Texto XML"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "No existe un modelo %(model)s con una clave primaria %(pk)r."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Clave foránea (el tipo está determinado por el campo relacionado)"
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr "Relación uno-a-uno"
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr "Relación muchos-a-muchos"
+
+#: db/models/fields/related.py:1000
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Mantenga presionada \"Control\" (\"Command\" en una Mac) para seleccionar "
 "más de uno."
 
-#: db/models/fields/related.py:894
+#: db/models/fields/related.py:1061
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3967,87 +4724,59 @@
 "Por favor, introduzca IDs de %(self)s válidos. Los valores %(value)r no son "
 "válidos."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Este campo es obligatorio."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Introduzca un valor válido."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Asegúrese de que este valor tenga como máximo %(max)d caracteres (tiene %"
-"(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Asegúrese de que este valor tenga al menos %(min)d caracteres (tiene %"
-"(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Introduzca un número entero."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Asegúrese de que este valor sea menor o igual a %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Asegúrese de que este valor sea mayor o igual a %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Introduzca un número."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Asegúrese de que no existan en total mas de %s dígitos."
 
-#: forms/fields.py:228
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Asegúrese de que no existan mas de %s lugares decimales."
 
-#: forms/fields.py:229
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Asegúrese de que no existan mas de %s dígitos antes del punto decimal."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Introduzca una fecha válida."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Introduzca un valor de hora válido."
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Introduzca un valor de fecha/hora válido."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr ""
 "No se envió un archivo. Verifique el tipo de codificación en el formulario."
 
-#: forms/fields.py:448
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "No se envió ningún archivo."
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "El archivo enviado está vacío."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4055,70 +4784,41 @@
 "Asegúrese de que este nombre de archivo tenga como máximo %(max)d caracteres "
 "(tiene %(length)d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
 msgstr ""
-"Envíe una imagen válida. El archivo que ha enviado no era una imagen o se "
-"trataba de una imagen corrupta."
-
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Introduzca una URL válida."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "La URL parece ser un enlace roto."
-
-#: forms/fields.py:625 forms/fields.py:703
+"Seleccione una imagen válida. El archivo que ha seleccionado no es una "
+"imagen o es un un archivo de imagen corrupto."
+
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr ""
 "Seleccione una opción válida. %(value)s no es una de las opciones "
 "disponibles."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
 msgid "Enter a list of values."
 msgstr "Introduzca una lista de valores."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Introduzca una dirección IPv4 válida"
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "Introduzca un 'slug' válido consistente de letras, números o guiones."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Ordenar"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"%(field_name)s debe ser único/a para un %(lookup)s %(date_field)s "
-"determinado."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Ya existe un/a %(model_name)s con este/a %(field_label)s."
-
-#: forms/models.py:594
+#: forms/models.py:562
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Por favor, corrija la información duplicada en %(field)s."
 
-#: forms/models.py:598
+#: forms/models.py:566
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr ""
 "Por favor corrija la información duplicada en %(field)s, que debe ser única."
 
-#: forms/models.py:604
+#: forms/models.py:572
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
@@ -4127,54 +4827,55 @@
 "Por favor corrija la información duplicada en %(field_name)s que debe ser "
 "única para el %(lookup)s en %(date_field)s."
 
-#: forms/models.py:612
+#: forms/models.py:580
 msgid "Please correct the duplicate values below."
 msgstr "Por favor, corrija los valores duplicados detallados mas abajo."
 
-#: forms/models.py:867
+#: forms/models.py:855
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr ""
-"La clave foránea del modelo inline no coincide con la de la instancia padre."
-
-#: forms/models.py:930
+"La clave foránea del modelo inline no coincide con la clave primaria de la "
+"instancia padre."
+
+#: forms/models.py:921
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr ""
-"Seleccione una opción válida. Esa opción no es una de las opciones "
+"Seleccione una opción válida. La opción seleccionada no es una de las "
 "disponibles."
 
-#: forms/models.py:1004
+#: forms/models.py:1003
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr ""
 "Seleccione una opción válida. %s no es una de las opciones disponibles."
 
-#: forms/models.py:1006
+#: forms/models.py:1005
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" no es un valor válido para una clave primaria."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:776
 msgid "yes,no,maybe"
 msgstr "si,no,talvez"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:807
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d byte"
 msgstr[1] "%(size)d bytes"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:809
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:811
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4383,7 +5084,7 @@
 msgid "Dec."
 msgstr "Dic."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "o"
 
@@ -4437,33 +5138,44 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:518
 msgid "DATE_FORMAT"
 msgstr "j N Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:519
+msgid "DATETIME_FORMAT"
+msgstr "j N Y P"
+
+#: utils/translation/trans_real.py:520
 msgid "TIME_FORMAT"
 msgstr "P"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:541
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:542
 msgid "MONTH_DAY_FORMAT"
 msgstr "j \\de F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "Se creó con éxito %(verbose_name)s."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "Se actualizó con éxito %(verbose_name)s."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "Se eliminó %(verbose_name)s."
+
+#: contrib/admin/options.py:1040
+#, python-format
+msgid "of %(count)d selected"
+msgid_plural "of %(count)d selected"
+msgstr[0] "de %(count)d seleccionados"
+msgstr[1] "de %(count)d seleccionados"
Binary file web/lib/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -6,44 +6,85 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-10-06 14:18-0300\n"
-"PO-Revision-Date: 2007-07-14 14:36-0300\n"
+"POT-Creation-Date: 2010-05-04 22:01-0300\n"
+"PO-Revision-Date: 2010-05-04 22:10-0300\n"
 "Last-Translator: Ramiro Morales <rm0@gmx.net>\n"
 "Language-Team: Django-I18N <django-i18n@googlegroups.com>\n"
+"Language: es_AR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.1\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
 msgstr "%s disponibles"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "Seleccionar todos"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "Agregar"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "Eliminar"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
 msgstr "%s elegidos"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
 msgstr "Seleccione los items a agregar y haga click en "
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
 msgstr "Eliminar todos"
 
+#: contrib/admin/media/js/actions.js:18
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] "%(sel)s de %(cnt)s seleccionado/a"
+msgstr[1] "%(sel)s de %(cnt)s seleccionados/as"
+
+#: contrib/admin/media/js/actions.js:109
+#: contrib/admin/media/js/actions.min.js:5
+msgid ""
+"You have unsaved changes on individual editable fields. If you run an "
+"action, your unsaved changes will be lost."
+msgstr ""
+"Tiene modificaciones sin guardar en campos modificables individuales. Si "
+"ejecuta una acción las mismas se perderán."
+
+#: contrib/admin/media/js/actions.js:121
+#: contrib/admin/media/js/actions.min.js:6
+msgid ""
+"You have selected an action, but you haven't saved your changes to "
+"individual fields yet. Please click OK to save. You'll need to re-run the "
+"action."
+msgstr ""
+"Ha seleccionado una acción, pero todavía no ha grabado las modificaciones "
+"que ha realizado en campos individuales. Por favor haga click en Aceptar "
+"para grabarlas. Necesitará ejecutar la acción nuevamente."
+
+#: contrib/admin/media/js/actions.js:123
+#: contrib/admin/media/js/actions.min.js:6
+msgid ""
+"You have selected an action, and you haven't made any changes on individual "
+"fields. You're probably looking for the Go button rather than the Save "
+"button."
+msgstr ""
+"Ha seleccionado una acción pero no ha realizado ninguna modificación en "
+"campos individuales. Es probable que lo que necesite usar en realidad sea el "
+"botón Ejecutar y no el botón Guardar."
+
 #: contrib/admin/media/js/calendar.js:24
 #: contrib/admin/media/js/dateparse.js:32
 msgid ""
@@ -57,62 +98,63 @@
 msgid "S M T W T F S"
 msgstr "D L M M J V S"
 
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Mostrar"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Ocultar"
+
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
 msgstr "Domingo Lunes Martes Miércoles Jueves Viernes Sábado"
 
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Mostrar"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Ocultar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Now"
 msgstr "Ahora"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
 msgid "Clock"
 msgstr "Reloj"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
 msgid "Choose a time"
 msgstr "Elija una hora"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Midnight"
 msgstr "Medianoche"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "6 a.m."
 msgstr "6 a.m."
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "Noon"
 msgstr "Mediodía"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "Hoy"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "Calendario"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "Ayer"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "Mañana"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/es_AR/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,29 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = r'j N Y'
+TIME_FORMAT = r'H:i:s'
+DATETIME_FORMAT = r'j N Y H:i:s'
+YEAR_MONTH_FORMAT = r'F Y'
+MONTH_DAY_FORMAT = r'j \de F'
+SHORT_DATE_FORMAT = r'd/m/Y'
+SHORT_DATETIME_FORMAT = r'd/m/Y H:i'
+FIRST_DAY_OF_WEEK = 0 # 0: Sunday, 1: Monday
+DATE_INPUT_FORMATS = (
+    '%d/%m/%Y', # '31/12/2009'
+    '%d/%m/%y', # '31/12/09'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S', # '14:30:59'
+    '%H:%M',    # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%d/%m/%Y %H:%M:%S',
+    '%d/%m/%Y %H:%M',
+    '%d/%m/%y %H:%M:%S',
+    '%d/%m/%y %H:%M',
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+NUMBER_GROUPING = 3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/et/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'G:i:s'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'd.m.Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/eu/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = r'Yeko M\re\n d\a'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+# MONTH_DAY_FORMAT = 
+SHORT_DATE_FORMAT = 'Y M j'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/fa/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'G:i:s'
+DATETIME_FORMAT = 'j F Y، ساعت G:i:s'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'Y/n/j'
+SHORT_DATETIME_FORMAT = 'Y/n/j،‏ G:i:s'
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/fi/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/fi/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/fi/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -6,9 +6,9 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-24 14:45+0300\n"
+"POT-Creation-Date: 2010-03-27 16:17+0200\n"
 "PO-Revision-Date: 2007-09-15 00:34+0300\n"
-"Last-Translator: Leo Honkanen <sealage@gmail.com>\n"
+"Last-Translator: Ville Säävuori <ville@syneus.fi>\n"
 "Language-Team: Django I18N <Django-I18N@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -22,215 +22,235 @@
 msgstr "arabia"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "bulgaria"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "bengali"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "bulgaria"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "katalaani"
+msgid "Bosnian"
+msgstr "bosnia"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "katalaani"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "tšekki"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "wales"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "tanska"
+msgid "Welsh"
+msgstr "wales"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "tanska"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "saksa"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "kreikka"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "englanti"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "espanja"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "viro"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "Argentiinan espanja"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "viro"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "baski"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
 msgid "Persian"
 msgstr "persia"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
 msgid "Finnish"
 msgstr "suomi"
 
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "ranska"
-
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "irlanti"
+msgid "French"
+msgstr "ranska"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "galicia"
+msgid "Frisian"
+msgstr "friisi"
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "unkari"
+msgid "Irish"
+msgstr "irlanti"
 
 #: conf/global_settings.py:64
+msgid "Galician"
+msgstr "galicia"
+
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "heprea"
 
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "hindi"
-
 #: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "hindi"
+
+#: conf/global_settings.py:67
 msgid "Croatian"
 msgstr "kroatia"
 
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "islanti"
-
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "italia"
+msgid "Hungarian"
+msgstr "unkari"
 
 #: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "islanti"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "italia"
+
+#: conf/global_settings.py:71
 msgid "Japanese"
 msgstr "japani"
 
-#: conf/global_settings.py:70
+#: conf/global_settings.py:72
 msgid "Georgian"
 msgstr "georgia"
 
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "korea"
-
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
 msgid "Khmer"
 msgstr "khmer"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
 msgid "Kannada"
 msgstr "kannada"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "latvia"
-
 #: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "liettua"
+msgid "Korean"
+msgstr "korea"
 
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "makedonia"
+msgid "Lithuanian"
+msgstr "liettua"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "hollanti"
+msgid "Latvian"
+msgstr "latvia"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "norja"
+msgid "Macedonian"
+msgstr "makedonia"
 
 #: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "hollanti"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "norja"
+
+#: conf/global_settings.py:81
 msgid "Polish"
 msgstr "puola"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:82
 msgid "Portuguese"
 msgstr "portugali"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
 msgid "Brazilian Portuguese"
 msgstr "brasilian portugali"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
 msgid "Romanian"
 msgstr "romania"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
 msgid "Russian"
 msgstr "venäjä"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
 msgid "Slovak"
 msgstr "slovakia"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
 msgid "Slovenian"
 msgstr "slovenia"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
+msgid "Albanian"
+msgstr "albaani"
+
+#: conf/global_settings.py:89
 msgid "Serbian"
 msgstr "serbia"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:90
+msgid "Serbian Latin"
+msgstr "serbian latina"
+
+#: conf/global_settings.py:91
 msgid "Swedish"
 msgstr "ruotsi"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:92
 msgid "Tamil"
 msgstr "tamili"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:93
 msgid "Telugu"
 msgstr "telugu"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:94
 msgid "Thai"
 msgstr "thain kieli"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:95
 msgid "Turkish"
 msgstr "turkki"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:96
 msgid "Ukrainian"
 msgstr "ukraina"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "vietnam"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
 msgstr "kiina (yksinkertaistettu)"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "kiina (perinteinen)"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Onnistuneesti poistettu %(count)d \"%(items)s\"-kohdetta."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1025
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1097
 msgid "Are you sure?"
 msgstr "Oletko varma?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Poista valitut \"%(verbose_name_plural)s\"-kohteet"
@@ -269,19 +289,19 @@
 msgid "This year"
 msgstr "Tänä vuonna"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
 msgid "Yes"
 msgstr "Kyllä"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
 msgid "No"
 msgstr "Ei"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:470
 msgid "Unknown"
 msgstr "Tuntematon"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:19
 msgid "Action:"
 msgstr "Toiminto:"
 
@@ -313,104 +333,127 @@
 msgid "log entries"
 msgstr "lokimerkinnät"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:140 contrib/admin/options.py:155
 msgid "None"
 msgstr "Ei arvoa"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:558
 #, python-format
 msgid "Changed %s."
 msgstr "Muokattu: %s."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:587
+#: contrib/admin/options.py:558 contrib/admin/options.py:568
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:840
+#: forms/models.py:556
 msgid "and"
 msgstr "ja"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Lisätty %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:567
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Muutettu %(list)s kohteelle %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Poistettu %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:576
 msgid "No fields changed."
 msgstr "Ei muutoksia kenttiin."
 
-#: contrib/admin/options.py:598 contrib/auth/admin.py:67
+#: contrib/admin/options.py:642
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "%(name)s \"%(obj)s\" on lisätty."
 
-#: contrib/admin/options.py:602 contrib/admin/options.py:635
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:646 contrib/admin/options.py:679
 msgid "You may edit it again below."
 msgstr "Voit muokata sitä edelleen alla."
 
-#: contrib/admin/options.py:612 contrib/admin/options.py:645
+#: contrib/admin/options.py:656 contrib/admin/options.py:689
 #, python-format
 msgid "You may add another %s below."
 msgstr "Uusi %s on lisättävissä alla."
 
-#: contrib/admin/options.py:633
+#: contrib/admin/options.py:677
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\" on muutettu."
 
-#: contrib/admin/options.py:641
+#: contrib/admin/options.py:685
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr "%(name)s \"%(obj)s\" on lisätty. Voit muokata sitä uudelleen alla."
 
-#: contrib/admin/options.py:772
+#: contrib/admin/options.py:739
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: contrib/admin/options.py:757
+msgid "No action selected."
+msgstr "Ei toimintoa valittuna."
+
+#: contrib/admin/options.py:837
 #, python-format
 msgid "Add %s"
 msgstr "Lisää %s"
 
-#: contrib/admin/options.py:803 contrib/admin/options.py:1003
+#: contrib/admin/options.py:863 contrib/admin/options.py:1077
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "%(name)s perusavaimella %(key)r ei ole olemassa."
 
-#: contrib/admin/options.py:860
+#: contrib/admin/options.py:928
 #, python-format
 msgid "Change %s"
 msgstr "Muokkaa %s"
 
-#: contrib/admin/options.py:904
+#: contrib/admin/options.py:973
 msgid "Database error"
 msgstr "Tietokantavirhe"
 
-#: contrib/admin/options.py:940
+#: contrib/admin/options.py:1009
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s %(name)s on muokattu."
 msgstr[1] "%(count)s \"%(name)s\"-kohdetta on muokattu."
 
-#: contrib/admin/options.py:1018
+#: contrib/admin/options.py:1036
+#, python-format
+msgid "of %(count)d selected"
+msgid_plural "of %(count)d selected"
+msgstr[0] "valittuna (%(count)d mahdollisesta)"
+msgstr[1] "valittuna (%(count)d mahdollisesta)"
+
+#: contrib/admin/options.py:1038
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s valittu"
+msgstr[1] "Kaikki %(total_count)s valittu"
+
+#: contrib/admin/options.py:1090
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)s \"%(obj)s\" on poistettu."
 
-#: contrib/admin/options.py:1054
+#: contrib/admin/options.py:1127
 #, python-format
 msgid "Change history: %s"
 msgstr "Muokkaushistoria: %s"
 
-#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -418,11 +461,11 @@
 "Käyttäjätunnus tai salasana ei kelpaa. Huomaa, että isot ja pienet kirjaimet "
 "ovat merkitseviä."
 
-#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Kirjaudu uudelleen sisään, sillä istuntosi on vanhentunut."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -430,62 +473,52 @@
 "Selaimesi ei vaikuta sallivan evästeitä. Muuta asetukset sallimaan evästeet, "
 "lataa tämä sivu uudelleen ja yritä uudestaan."
 
-#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Käyttäjätunnuksessa ei saa olla '@'-merkkiä."
 
-#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Sähköpostiosoitteesi ei ole käyttäjätunnuksesi. Kokeile '%s'."
 
-#: contrib/admin/sites.py:360
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Sivuston ylläpito"
 
-#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Kirjaudu sisään"
 
-#: contrib/admin/sites.py:417
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "%s ylläpito"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Yksi tai useampi %(fieldname)s kohteessa %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Yksi tai useampi %(fieldname)s kohteessa %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Pvm:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Klo:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Tällä hetkellä:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Muokkaa:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Etsi"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Lisää seuraava"
 
@@ -500,17 +533,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:39
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -547,34 +580,47 @@
 msgid "Go"
 msgstr "Suorita"
 
+#: contrib/admin/templates/admin/actions.html:10
+msgid "Click here to select the objects across all pages"
+msgstr "Klikkaa tästä valitaksesi kohteet kaikilta sivuilta"
+
+#: contrib/admin/templates/admin/actions.html:10
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Valitse kaikki %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:12
+msgid "Clear selection"
+msgstr "Tyhjennä valinta"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:27
 msgid "Welcome,"
 msgstr "Tervetuloa,"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Ohjeita"
 
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Vaihda salasana"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Kirjaudu ulos"
 
@@ -586,41 +632,42 @@
 msgid "Django administration"
 msgstr "Djangon ylläpito"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Lisää"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Muokkaushistoria"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Näytä lopputulos"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:68
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Korjaa allaoleva virhe."
 msgstr[1] "Korjaa allaolevat virheet."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:60
 #, python-format
 msgid "Add %(name)s"
 msgstr "Lisää %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:79
 msgid "Filter"
 msgstr "Suodatin"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:297
 msgid "Delete"
 msgstr "Poista"
 
@@ -667,10 +714,10 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
 "Haluatko varmasti poistaa valitut (%(object_name)s) kohteet? Myös seuraavat "
-"kohteet poistettaisiin samalla:"
+"kohteet ja niihin liittyvät kohteet poistettaisiin samalla:"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -732,15 +779,9 @@
 msgstr "Käyttäjä"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Tapahtuma"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j.n.Y G:i"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -753,6 +794,11 @@
 msgid "Show all"
 msgstr "Näytä kaikki"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Tallenna ja poistu"
+
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Search"
 msgstr "Haku"
@@ -769,10 +815,6 @@
 msgid "%(full_result_count)s total"
 msgstr "yhteensä %(full_result_count)s"
 
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Tallenna ja poistu"
-
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
 msgstr "Tallenna uutena"
@@ -785,7 +827,7 @@
 msgid "Save and continue editing"
 msgstr "Tallenna välillä ja jatka muokkaamista"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -793,33 +835,39 @@
 "Syötä ensin käyttäjätunnus ja salasana. Sen jälkeen voit muokata muita "
 "käyttäjän tietoja."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Käyttäjätunnus"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Salasana"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Salasana toistamiseen"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Syötä sama salasana tarkistuksen vuoksi toistamiseen."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Syötä käyttäjän <strong>%(username)s</strong> uusi salasana."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Salasana"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Salasana toistamiseen"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Syötä sama salasana tarkistuksen vuoksi toistamiseen."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:53
+#: contrib/admin/templates/admin/edit_inline/tabular.html:99
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Lisää toinen %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:56
+#: contrib/admin/templates/admin/edit_inline/tabular.html:102
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Poista"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Poista?"
@@ -833,9 +881,9 @@
 msgstr "Kirjaudu uudelleen sisään"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Salasanan vaihtaminen"
 
@@ -848,7 +896,7 @@
 msgid "Your password was changed."
 msgstr "Salasanasi on vaihdettu."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -856,21 +904,17 @@
 "Syötä vanha salasanasi varmistukseksi, ja syötä sitten uusi salasanasi kaksi "
 "kertaa, jotta se tulee varmasti oikein."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Vanha salasana:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Uusi salasana:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Varmista uusi salasana:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Vanha salasana"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Uusi salasana"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Vaihda salasana"
@@ -909,6 +953,14 @@
 "Syötä uusi salasanasi kaksi kertaa, jotta voimme varmistaa että syötit sen "
 "oikein."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Uusi salasana:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Varmista uusi salasana:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Salasanan nollaus ei onnistunut"
@@ -976,7 +1028,7 @@
 msgid "Reset my password"
 msgstr "Nollaa salasanani"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:240
 msgid "All dates"
 msgstr "Kaikki päivät"
 
@@ -990,152 +1042,71 @@
 msgid "Select %s to change"
 msgstr "Valitse muokattava %s"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "sivusto"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "mallipohjan nimi"
 
-#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "tagi:"
 
-#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "suodatin:"
 
-#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "näkymä:"
 
-#: contrib/admindocs/views.py:187
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "Sovellusta %r ei löydy"
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "Sovelluksesta %(app_label)r ei löydy mallia %(model_name)r"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "tähän liittyvä `%(app_label)s.%(data_type)s`-kohde"
 
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "malli:"
 
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "tähän liittyvät `%(app_label)s.%(object_name)s`-kohteet"
 
-#: contrib/admindocs/views.py:242
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "kaikki %s"
 
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "%s-kohteiden lukumäärä"
 
-#: contrib/admindocs/views.py:252
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "%s-kohteiden kentät"
 
-#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
-msgid "Integer"
-msgstr "Kokonaisluku"
-
-#: contrib/admindocs/views.py:316
-msgid "Boolean (Either True or False)"
-msgstr "Totuusarvo: joko tosi (True) tai epätosi (False)"
-
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Merkkijono (enintään %(max_length)s merkkiä)"
-
-#: contrib/admindocs/views.py:318
-msgid "Comma-separated integers"
-msgstr "Pilkulla erotetut kokonaisluvut"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (without time)"
-msgstr "Päivämäärä (ilman kellonaikaa)"
-
-#: contrib/admindocs/views.py:320
-msgid "Date (with time)"
-msgstr "Päivämäärä ja kellonaika"
-
-#: contrib/admindocs/views.py:321
-msgid "Decimal number"
-msgstr "Desimaaliluku"
-
-#: contrib/admindocs/views.py:322
-msgid "E-mail address"
-msgstr "Sähköpostiosoite"
-
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
-msgid "File path"
-msgstr "Tiedostopolku"
-
-#: contrib/admindocs/views.py:325
-msgid "Floating point number"
-msgstr "Liukuluku"
-
-#: contrib/admindocs/views.py:329 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "IP-osoite"
-
-#: contrib/admindocs/views.py:331
-msgid "Boolean (Either True, False or None)"
-msgstr "Totuusarvo: joko tosi (True), epätosi (False) tai ei mikään (None)"
-
-#: contrib/admindocs/views.py:332
-msgid "Relation to parent model"
-msgstr "Relaatio emomalliin"
-
-#: contrib/admindocs/views.py:333
-msgid "Phone number"
-msgstr "Puhelinnumero"
-
-#: contrib/admindocs/views.py:338
-msgid "Text"
-msgstr "Tekstiä"
-
-#: contrib/admindocs/views.py:339
-msgid "Time"
-msgstr "Kellonaika"
-
-#: contrib/admindocs/views.py:340 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL-osoite"
-
-#: contrib/admindocs/views.py:341
-msgid "U.S. state (two uppercase letters)"
-msgstr "USA:n osavaltio (suuraakkosin, kaksi kirjainta)"
-
-#: contrib/admindocs/views.py:342
-msgid "XML text"
-msgstr "XML-teksti"
-
-#: contrib/admindocs/views.py:368
+#: contrib/admindocs/views.py:361
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s ei näytä olevan urlpattern-olio"
@@ -1206,78 +1177,74 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Kuten yllä, mutta avaa ylläpitosivun uuteen ikkunaan."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Henkilökohtaiset tiedot"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Oikeudet"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Tärkeät päivämäärät"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Ryhmät"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Uusi käyttäjä"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Salasana muutettu onnistuneesti."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Vaihda salasana: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Käyttäjätunnus"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
 msgstr ""
-" Vaaditaan. Enintään 30 kirjanta (A-Z, a-z), numeroa (0-9) tai alaviivaa (_)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
+" Vaaditaan. Enintään 30 merkkiä. Vain kirjaimet, numerot ja @/./+/-/_ ovat sallittuja."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
 msgstr ""
-"Tässä voidaan käyttää vain kirjaimia (A-Z, a-z), numeroita (0-9) ja "
-"alaviivoja (_)."
+"Tässä voidaan käyttää vain kirjaimia, numeroita ja @/./+/-/_ merkkejä."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Salasanan vahvistaminen"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Käyttäjätunnus on jo rekisteröity."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Salasanat eivät täsmää."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Tämä käyttäjätili ei ole voimassa."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
 msgstr ""
 "Selaimesi ei näytä sallivan evästeitä. Sisäänkirjautuminen vaatii evästeen."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "Sähköposti"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1285,72 +1252,70 @@
 "Sähköpostiosoitetta vastaavaa käyttäjätunnusta ei löydy. Oletko varmasti jo "
 "rekisteröitynyt?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Salasanan nollaus sivustolla %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Uusi salasana"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Uusi salasana uudelleen"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Vanha salasana"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr "Vanha salasana on virheellinen. Yritä uudelleen."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "nimi"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "tunniste"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "oikeus"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "oikeudet"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "ryhmä"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "ryhmät"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "käyttäjätunnus"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+" Vaaditaan. Enintään 30 merkkiä. Vain kirjaimet, numerot ja @/./+/-/_ ovat sallittuja."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "etunimi"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "sukunimi"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "sähköposti"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "salasana"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1358,19 +1323,19 @@
 "Syötä muodossa '[algo]$[suola]$[heksa-digest]' tai käytä <a href=\"password/"
 "\">muutoslomaketta</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "ylläpitäjä"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Määrittää, pääseekö käyttäjä tähän sivuston ylläpito-osioon."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "voimassa"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1378,26 +1343,26 @@
 "Määrää, voiko käyttäjä kirjautua sisään. Tällä voi estää käyttäjätilin "
 "käytön poistamatta sitä."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "pääkäyttäjä"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
 msgstr ""
 "Antaa käyttäjälle kaikki oikeudet ilman, että niitä täytyy erikseen luetella."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "viimeisin kirjautuminen"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "liittynyt"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1405,39 +1370,77 @@
 "Erikseen mainittujen oikeuksien lisäksi käyttäjä saa myös kaikki niiden "
 "ryhmien oikeudet, joiden jäsen hän on."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "käyttäjän oikeudet"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "käyttäjä"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "käyttäjät"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "viesti"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Kirjautunut ulos"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:416
 msgid "Enter a valid e-mail address."
 msgstr "Syötä kelvollinen sähköpostiosoite."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Sisältö"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metatieto"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "merkitty"
+msgstr[1] "merkitty"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Merkitse valitut kommentit"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "hyväksytty"
+msgstr[1] "hyväksytty"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Hyväksy valitut kommentit"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "poistettu"
+msgstr[1] "poistettu"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Poista valitut kommentit"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 kommentti %(count)s onnistuneesti."
+msgstr[1] "%(count)s kommenttia %(action)s onnistuneesti."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1449,7 +1452,6 @@
 msgstr "Sivuston %(site_name)s viimeisimmät kommentit"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Nimi"
 
@@ -1457,25 +1459,29 @@
 msgid "Email address"
 msgstr "Sähköpostiosoite"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1128
+msgid "URL"
+msgstr "URL-osoite"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Kommentti"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Siivoa suusi! Sanaa \"%s\" ei saa käyttää tässä."
 msgstr[1] "Siivoa suusi! Sanoja \"%s\" ei saa käyttää tässä."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr ""
 "Jos syötät tähän kenttään jotain, kommenttisi luokitellaan roskapostiksi"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "sisältötyyppi"
 
@@ -1504,6 +1510,10 @@
 msgid "date/time submitted"
 msgstr "lähettämishetki"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:923
+msgid "IP address"
+msgstr "IP-osoite"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "on julkinen"
@@ -1586,7 +1596,6 @@
 msgstr "Haluatko varmasti tehdä kommentista julkisen?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Hyväksy"
 
@@ -1609,11 +1618,6 @@
 msgid "Really remove this comment?"
 msgstr "Haluatko varmasti poistaa tämän kommentin?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Poista"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Kiitos poistamisesta"
@@ -1644,39 +1648,6 @@
 msgid "Preview"
 msgstr "Esikatsele"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Kommenttien valvontajono"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Ei valvottavia kommentteja"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Sähköposti"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Kirjautunut?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP-osoite"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Lähettämispvm"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "kyllä"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "ei"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Kiitos kommentista"
@@ -1704,11 +1675,11 @@
 msgid "or make changes"
 msgstr "tai tee muutoksia"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "mallin python-luokan nimi"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "sisältötyypit"
 
@@ -1772,7 +1743,7 @@
 msgid "flat pages"
 msgstr "tekstisivut"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1780,6 +1751,38 @@
 "Pahoittelumme, mutta sessiosi on vanhentunut. Ole hyvä ja jatka lomakkeen "
 "täyttämistä tältä sivulta."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:269
+msgid "Point"
+msgstr "Piste"
+
+#: contrib/gis/db/models/fields.py:273
+msgid "Line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:277
+msgid "Polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:281
+msgid "Multi-point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:285
+msgid "Multi-line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:289
+msgid "Multi polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:293
+msgid "Geometry collection"
+msgstr ""
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Geometria-arvoa ei annettu."
@@ -1883,25 +1886,25 @@
 msgid "yesterday"
 msgstr "eilen"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Syötä postinumero muodossa NNNN tai ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Tähän kenttään kelpaavat vain numerot."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Tähän kenttään vaaditaan 7 tai 8 numeroa."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Syötä validi CUIT joko XX-XXXXXXXX-X tai XXXXXXXXXXXX -muodossa."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "Virheellinen CUIT."
 
@@ -1941,8 +1944,8 @@
 msgid "Vienna"
 msgstr "Wien"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Syötä postinumero muodossa XXXX."
 
@@ -1950,19 +1953,19 @@
 msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
 msgstr "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Syötä nelinumeroinen postinumero."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Syötä postinumero muodossa XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Puhelinnumeron tulee olla muodossa XX-XXXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
@@ -1970,27 +1973,27 @@
 "Select a valid brazilian state. That state is not one of the available "
 "states."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Virheellinen CPF-numero."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Tämä kenttä vaatii vähintään 11 ja enintään 14 merkkiä."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Virheellinen CNPJ-numero."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "Tähän kenttään vaaditaan ainakin 14 numeroa."
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Syötä postinumero muodossa XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 
@@ -2098,7 +2101,7 @@
 msgid "Zurich"
 msgstr "Zurich"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2106,15 +2109,15 @@
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Syötä oikea chileläinen RUT"
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "The Chilean RUT is not valid."
 
@@ -2174,24 +2177,24 @@
 msgid "Moravian-Silesian Region"
 msgstr "Moravian-Silesian Region"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Syötä postinumero muodossa XXXXX tai XXX XX."
 
-#: contrib/localflavor/cz/forms.py:47
+#: contrib/localflavor/cz/forms.py:48
 msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
 msgstr "Syötä henkilötunnus muodossa XXXXXX/XXXX tai XXXXXXXXXX."
 
-#: contrib/localflavor/cz/forms.py:48
+#: contrib/localflavor/cz/forms.py:49
 msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
 msgstr ""
 "Virheellinen valinnainen sukupuoli, valitse 'f' (nainen) tai 'm' (mies)"
 
-#: contrib/localflavor/cz/forms.py:49
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Syötä oikea henkilötunnus."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Syötä oikea IC-tunnus."
 
@@ -2259,12 +2262,12 @@
 msgid "Thuringia"
 msgstr "Thuringia"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Syötä postinumero muodossa XXXXX."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2539,11 +2542,11 @@
 msgid "Valencian Community"
 msgstr "Valencian Community"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Syötä validi postinumero väliltä ja muodossa 01XXX-52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
@@ -2551,63 +2554,495 @@
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Please enter a valid NIF, NIE, or CIF."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Please enter a valid NIF or NIE."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Invalid checksum for NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Invalid checksum for NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Invalid checksum for CIF."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Invalid checksum for bank account number."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Syötä oikea suomalainen henkilötunnus."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Phone numbers must be in 0X XX XX XX XX format."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Enter a valid post code"
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Syötä oikea puhelinnumero"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Enter a valid vehicle license plate number"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Enter a valid NIK/KTP number"
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Bali"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Banten"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Bengkulu"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Yogyakarta"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Jakarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Gorontalo"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Jambi"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Jawa Barat"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Jawa Tengah"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Jawa Timur"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Kalimantan Barat"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Kalimantan Selatan"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Kalimantan Tengah"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Kalimantan Timur"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Kepulauan Bangka-Belitung"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Kepulauan Riau"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Lampung"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Maluku"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Maluku Utara"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Nanggroe Aceh Darussalam"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Nusa Tenggara Barat"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Nusa Tenggara Timur"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Papua"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Riau"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "Sulawesi Barat"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "Sulawesi Selatan"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "Sulawesi Tengah"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "Sulawesi Tenggara"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "Sulawesi Utara"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "Sumatera Barat"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "Sumatera Selatan"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "Sumatera Utara"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "Magelang"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "Surakarta - Solo"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "Madiun"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "Kediri"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "Tapanuli"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "Kepulauan Bangka Belitung"
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr "Corps Consulate"
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr "Corps Diplomatic"
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "Bandung"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr "Sulawesi Utara Daratan"
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - Timor"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr "Sulawesi Utara Kepulauan"
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - Lombok"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "Papua dan Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "Cirebon"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - Sumbawa"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - Flores"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - Sumba"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "Bogor"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "Pekalongan"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "Semarang"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "Pati"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "Surabaya"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "Madura"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "Malang"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "Jember"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "Banyumas"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "Federal Government"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "Bojonegoro"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "Purwakarta"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "Sidoarjo"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "Garut"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "Armagh"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "Carlow"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "Cavan"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "Clare"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "Cork"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "Derry"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "Donegal"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "Down"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Dublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "Galway"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "Kerry"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "Kildare"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "Kilkenny"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "Laois"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "Leitrim"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "Limerick"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "Longford"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "Louth"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Mayo"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "Meath"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "Monaghan"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "Offaly"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "Roscommon"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "Sligo"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "Tipperary"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "Tyrone"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "Waterford"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "Westmeath"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "Wexford"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "Wicklow"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Syötä postinumero muodossa XXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "The Icelandic identification number is not valid."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Syötä oikea postinumero."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Syötä oikea henkilötunnus."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Syötä oikea ALV-tunnus."
 
@@ -2803,6 +3238,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Enter a valid Kuwaiti Civil ID number"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2931,15 +3370,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Syötä oikea postinumero"
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Syötä oikea puhelinnumero"
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Syötä ikea SoFi-numero"
 
@@ -2991,15 +3426,15 @@
 msgid "Zuid-Holland"
 msgstr "Zuid-Holland"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Syötä oikea norjalainen henkilötunnus."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Tähän kenttään vaaditaan 8 numeroa."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Tähän kenttään vaaditaan 11 numeroa."
 
@@ -3097,6 +3532,14 @@
 msgid "West Pomerania"
 msgstr "West Pomerania"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Enter a zip code in the format XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "Phone numbers must have 9 digits, or start by + or 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Enter a valid CIF."
@@ -3117,6 +3560,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Syötä postinumero muodossa XXXXXX."
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Enter a valid Swedish organisation number."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Enter a valid Swedish personal identity number."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Co-ordination numbers are not allowed."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Enter a Swedish postal code in the format XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Stockholm"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Banska Bystrica"
@@ -3749,19 +4292,43 @@
 msgid "Wales"
 msgstr "Scotland"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Phone numbers must be in XXX-XXX-XXXX format."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Enter a U.S. state or territory."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "USA:n osavaltio (suuraakkosin, kaksi kirjainta)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Puhelinnumero"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Enter a valid CI number."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Enter a valid South African ID number"
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Enter a valid South African postal code"
 
@@ -3801,6 +4368,10 @@
 msgid "Western Cape"
 msgstr "Western Cape"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "laiska viesti"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "ohjaa osoitteesta"
@@ -3865,59 +4436,218 @@
 msgid "sites"
 msgstr "sivustot"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Tarvitaan kokonaisluku."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Tarvitaan tosi (True) tai epätosi (False)."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Syötä oikea arvo."
+
+#: core/validators.py:87 forms/fields.py:517
+msgid "Enter a valid URL."
+msgstr "Syötä oikea URL-osoite."
+
+#: core/validators.py:89 forms/fields.py:518
+msgid "This URL appears to be a broken link."
+msgstr "Tämä URL-osoite on rikkinäinen linkki."
+
+#: core/validators.py:123 forms/fields.py:861
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Tässä voidaan käyttää vain kirjaimia (a-z), numeroita (0-9) sekä ala- ja "
+"tavuviivoja (_ -)."
+
+#: core/validators.py:126 forms/fields.py:854
+msgid "Enter a valid IPv4 address."
+msgstr "Syötä kelvollinen IPv4-osoite."
+
+#: core/validators.py:129 db/models/fields/__init__.py:599
+msgid "Enter only digits separated by commas."
+msgstr "Vain pilkulla erotetut kokonaisluvut kelpaavat tässä."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Tämän arvon on oltava %(limit_value)s (nyt %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:196 forms/fields.py:246
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Tämän arvon on oltava enintään %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:197 forms/fields.py:247
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Tämän luvun on oltava vähintään %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr "Tähän tarvitaan vähintään %(limit_value)d merkkiä (nyt on vain %(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr "Tähän kelpaa enintään %(limit_value)d merkkiä (nyt on %(show_value)d)."
+
+#: db/models/base.py:818
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr ""
+"\"%(field_name)s\"-kentän on oltava uniikki suhteessa: %(date_field)s %"
+"(lookup)s."
+
+#: db/models/base.py:833 db/models/base.py:841
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s jolla on tämä %(field_label)s, on jo olemassa."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Arvo %r ei kelpaa."
+
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Tämän kentän arvo ei voi olla \"null\"."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Vain pilkulla erotetut kokonaisluvut kelpaavat tässä."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Tämän kenttä ei voi olla tyhjä."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Kenttä tyyppiä: %(field_type)s"
+
+#: db/models/fields/__init__.py:478 db/models/fields/__init__.py:879
+#: db/models/fields/__init__.py:988 db/models/fields/__init__.py:999
+#: db/models/fields/__init__.py:1026
+msgid "Integer"
+msgstr "Kokonaisluku"
+
+#: db/models/fields/__init__.py:482 db/models/fields/__init__.py:877
+msgid "This value must be an integer."
+msgstr "Tarvitaan kokonaisluku."
+
+#: db/models/fields/__init__.py:517
+msgid "This value must be either True or False."
+msgstr "Tarvitaan tosi (True) tai epätosi (False)."
+
+#: db/models/fields/__init__.py:519
+msgid "Boolean (Either True or False)"
+msgstr "Totuusarvo: joko tosi (True) tai epätosi (False)"
+
+#: db/models/fields/__init__.py:566 db/models/fields/__init__.py:1009
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Merkkijono (enintään %(max_length)s merkkiä)"
+
+#: db/models/fields/__init__.py:594
+msgid "Comma-separated integers"
+msgstr "Pilkulla erotetut kokonaisluvut"
+
+#: db/models/fields/__init__.py:608
+msgid "Date (without time)"
+msgstr "Päivämäärä (ilman kellonaikaa)"
+
+#: db/models/fields/__init__.py:612
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Päivämäärän pitää olla muodossa VVVV-KK-PP."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:613
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Päivämäärä %s ei kelpaa"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:694
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr "Ajankohdan pitää olla muodossa VVVV-KK-PP TT:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:696
+msgid "Date (with time)"
+msgstr "Päivämäärä ja kellonaika"
+
+#: db/models/fields/__init__.py:762
 msgid "This value must be a decimal number."
 msgstr "Tähän tarvitaan desimaaliluku."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:764
+msgid "Decimal number"
+msgstr "Desimaaliluku"
+
+#: db/models/fields/__init__.py:819
+msgid "E-mail address"
+msgstr "Sähköpostiosoite"
+
+#: db/models/fields/__init__.py:826 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Tiedostopolku"
+
+#: db/models/fields/__init__.py:849
 msgid "This value must be a float."
 msgstr "Tämän luvun on oltava liukuluku."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:851
+msgid "Floating point number"
+msgstr "Liukuluku"
+
+#: db/models/fields/__init__.py:910
+msgid "Big (8 byte) integer"
+msgstr "Suuri (8-tavuinen) kokonaisluku"
+
+#: db/models/fields/__init__.py:939
 msgid "This value must be either None, True or False."
 msgstr "Tähän tarvitaan tyhjä (None), tosi (True) tai epätosi (False)."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:941
+msgid "Boolean (Either True, False or None)"
+msgstr "Totuusarvo: joko tosi (True), epätosi (False) tai ei mikään (None)"
+
+#: db/models/fields/__init__.py:1032
+msgid "Text"
+msgstr "Tekstiä"
+
+#: db/models/fields/__init__.py:1048
+msgid "Time"
+msgstr "Kellonaika"
+
+#: db/models/fields/__init__.py:1052
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Ajan täytyy olla muodossa TT:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:792
+#: db/models/fields/__init__.py:1136
+msgid "XML text"
+msgstr "XML-teksti"
+
+#: db/models/fields/related.py:755
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Mallia %(model)s pääavaimella %(pk)r ei ole olemassa."
+
+#: db/models/fields/related.py:757
+msgid "Foreign Key (type determined by related field)"
+msgstr "Vierasavain (tyyppi määräytyy liittyvän kentän mukaan)"
+
+#: db/models/fields/related.py:879
+msgid "One-to-one relationship"
+msgstr "Yksi-yhteen relaatio"
+
+#: db/models/fields/related.py:939
+msgid "Many-to-many relationship"
+msgstr "Moni-moneen relaatio"
+
+#: db/models/fields/related.py:959
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 " Pidä \"Ctrl\"-näppäin (tai Macin \"Command\") pohjassa valitaksesi useita "
 "vaihtoehtoja."
 
-#: db/models/fields/related.py:870
+#: db/models/fields/related.py:1020
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3925,82 +4655,58 @@
 msgstr[0] "Syöttämäsi %(self)s-tunniste %(value)r ei kelpaa."
 msgstr[1] "Syöttämäsi %(self)s-tunnisteet %(value)r eivät kelpaa."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Tämä kenttä vaaditaan."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Syötä oikea arvo."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Tähän kelpaa enintään %(max)d merkkiä (nyt niitä on %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "Tähän tarvitaan vähintään %(min)d merkkiä (nyt on vain %(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:195
 msgid "Enter a whole number."
 msgstr "Syötä kokonaisluku."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Tämän luvun on oltava enintään %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Tämän luvun on oltava vähintään %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:225 forms/fields.py:245
 msgid "Enter a number."
 msgstr "Syötä kokonaisluku."
 
-#: forms/fields.py:227
+#: forms/fields.py:248
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Tässä luvussa voi olla yhteensä enintään %s numeroa."
 
-#: forms/fields.py:228
+#: forms/fields.py:249
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Tässä luvussa saa olla enintään %s desimaalia."
 
-#: forms/fields.py:229
+#: forms/fields.py:250
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Tässä luvussa saa olla enintään %s numeroa ennen desimaalipilkkua."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:311 forms/fields.py:826
 msgid "Enter a valid date."
 msgstr "Syötä oikea päivämäärä."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:339 forms/fields.py:827
 msgid "Enter a valid time."
 msgstr "Syötä oikea kellonaika."
 
-#: forms/fields.py:361
+#: forms/fields.py:365
 msgid "Enter a valid date/time."
 msgstr "Syötä oikea pvm/kellonaika."
 
-#: forms/fields.py:447
+#: forms/fields.py:423
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "Tiedostoa ei lähetetty. Tarkista lomakkeen koodaus (encoding)."
 
-#: forms/fields.py:448
+#: forms/fields.py:424
 msgid "No file was submitted."
 msgstr "Yhtään tiedostoa ei ole lähetetty."
 
-#: forms/fields.py:449
+#: forms/fields.py:425
 msgid "The submitted file is empty."
 msgstr "Lähetetty tiedosto on tyhjä."
 
-#: forms/fields.py:450
+#: forms/fields.py:426
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4008,68 +4714,37 @@
 "Tähän tiedostonimeen kelpaa enintään %(max)d merkkiä (nyt niitä on %(length)"
 "d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:461
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
 msgstr ""
 "Kuva ei kelpaa. Lähettämäsi tiedosto ei ole kuva, tai tiedosto on vioittunut."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Syötä oikea URL-osoite."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Tämä URL-osoite on rikkinäinen linkki."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:584 forms/fields.py:659
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Valitse oikea vaihtoehto. %(value)s ei ole vaihtoehtojen joukossa."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:991
+#: forms/fields.py:660 forms/fields.py:722 forms/models.py:989
 msgid "Enter a list of values."
 msgstr "Syötä lista."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Syötä kelvollinen IPv4-osoite."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Tässä voidaan käyttää vain kirjaimia (a-z), numeroita (0-9) sekä ala- ja "
-"tavuviivoja (_ -)."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:293 forms/formsets.py:295
 msgid "Order"
 msgstr "Järjestys"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"\"%(field_name)s\"-kentän on oltava uniikki suhteessa: %(date_field)s %"
-"(lookup)s."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s jolla on tämä %(field_label)s, on jo olemassa."
-
-#: forms/models.py:581
+#: forms/models.py:550
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Korjaa kaksoisarvo kentälle %(field)s."
 
-#: forms/models.py:585
+#: forms/models.py:554
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr "Ole hyvä ja korjaa uniikin kentän %(field)s kaksoisarvo."
 
-#: forms/models.py:591
+#: forms/models.py:560
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
@@ -4078,50 +4753,50 @@
 "Please correct the duplicate data for %(field_name)s which must be unique "
 "for the %(lookup)s in %(date_field)s."
 
-#: forms/models.py:599
+#: forms/models.py:568
 msgid "Please correct the duplicate values below."
 msgstr "Korjaa allaolevat kaksoisarvot."
 
-#: forms/models.py:855
+#: forms/models.py:842
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr "Liittyvä perusavain ei vastannut vanhemman perusavainta."
 
-#: forms/models.py:918
+#: forms/models.py:908
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Valitse oikea vaihtoehto. Valintasi ei löydy vaihtoehtojen joukosta."
 
+#: forms/models.py:990
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Valitse oikea vaihtoehto. %s ei löydy vaihtoehtojen joukosta."
+
 #: forms/models.py:992
 #, python-format
-msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Valitse oikea vaihtoehto. %s ei löydy vaihtoehtojen joukosta."
-
-#: forms/models.py:994
-#, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" ei kelpaa perusavaimeksi."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "kyllä,ei,ehkä"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d tavu"
 msgstr[1] "%(size)d tavua"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f Kt"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f Mt"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f Gt"
@@ -4330,7 +5005,7 @@
 msgid "Dec."
 msgstr "joulu"
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "tai"
 
@@ -4384,37 +5059,80 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
 msgstr "j.n.Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j.n.Y H:i"
+
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
-msgstr "G:i"
-
-#: utils/translation/trans_real.py:417
+msgstr "H:i"
+
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
 msgstr "N Y"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
 msgstr "N j, Y"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "%(verbose_name)s luotiin onnistuneesti."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "%(verbose_name)s päivitettiin onnistuneesti."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s on poistettu."
 
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "Yksi tai useampi %(fieldname)s kohteessa %(name)s: %(obj)s"
+
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "Yksi tai useampi %(fieldname)s kohteessa %(name)s:"
+
+#~ msgid "Old password:"
+#~ msgstr "Vanha salasana:"
+
+#~ msgid "Relation to parent model"
+#~ msgstr "Relaatio emomalliin"
+
+#~ msgid "Add user"
+#~ msgstr "Uusi käyttäjä"
+
+#~ msgid "Comment moderation queue"
+#~ msgstr "Kommenttien valvontajono"
+
+#~ msgid "No comments to moderate"
+#~ msgstr "Ei valvottavia kommentteja"
+
+#~ msgid "Email"
+#~ msgstr "Sähköposti"
+
+#~ msgid "Authenticated?"
+#~ msgstr "Kirjautunut?"
+
+#~ msgid "IP Address"
+#~ msgstr "IP-osoite"
+
+#~ msgid "Date posted"
+#~ msgstr "Lähettämispvm"
+
+#~ msgid "yes"
+#~ msgstr "kyllä"
+
+#~ msgid "no"
+#~ msgstr "ei"
+
 #~ msgid "DATE_WITH_TIME_FULL"
 #~ msgstr "N j, Y, P"
 
@@ -4502,9 +5220,6 @@
 #~ msgid "deletion date"
 #~ msgstr "poistamispäivä"
 
-#~ msgid "moderator deletion"
-#~ msgstr "valvojan poisto"
-
 #~ msgid "moderator deletions"
 #~ msgstr "valvojien poistot"
 
@@ -4641,9 +5356,6 @@
 #~ msgid "The URL %s is a broken link."
 #~ msgstr "Osoite %s on rikkoutunut tai väärä linkki."
 
-#~ msgid "Enter a valid U.S. state abbreviation."
-#~ msgstr "Syötä USA:n osavaltion lyhenne."
-
 #~ msgid "This field must match the '%s' field."
 #~ msgstr "Arvon täytyy olla sama kuin kentässä '%s'."
 
@@ -4656,9 +5368,6 @@
 #~ msgid "This field must be given if %(field)s is not %(value)s"
 #~ msgstr "Tämä kenttä pitää täyttää, jos %(field)s ei ole %(value)s."
 
-#~ msgid "Duplicate values are not allowed."
-#~ msgstr "Samaa arvoa ei voi käyttää kahdesti."
-
 #~ msgid "This value must be between %(lower)s and %(upper)s."
 #~ msgstr "Tämän luvun on oltava välillä %(lower)s–%(upper)s."
 
Binary file web/lib/django/conf/locale/fi/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/fi/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/fi/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -9,7 +9,7 @@
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2008-08-30 19:35+0300\n"
 "PO-Revision-Date: 2006-08-05 15:27+0300\n"
-"Last-Translator: Ville Säävuori <ville@unessa.net>\n"
+"Last-Translator: Ville Säävuori <ville@syneus.fi>\n"
 "Language-Team: Django I18N <Django-I18N@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/fi/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j. F Y'
+TIME_FORMAT = 'G.i.s'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'j.n.Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/fr/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/fr/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/fr/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -2,12 +2,15 @@
 # This file is distributed under the same license as the Django package.
 # Copyright (C) 2008 Django Software Foundation and individual contributors.
 #
+# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2009-2010.
+# Claude Paroz <claude@2xlibre.net>, 2009
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-01 12:35+0100\n"
-"PO-Revision-Date: 2009-03-01 12:35+0100\n"
+"POT-Creation-Date: 2010-04-26 15:44+0200\n"
+"PO-Revision-Date: 2010-04-17 00:18+0200\n"
 "Last-Translator: Stéphane Raimbault <stephane.raimbault@gmail.com>\n"
 "Language-Team: French <http://django-fr.org>\n"
 "MIME-Version: 1.0\n"
@@ -20,205 +23,239 @@
 msgstr "Arabe"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "Bulgare"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "Bengalî"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Bulgare"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "Catalan"
+msgid "Bosnian"
+msgstr "Bosniaque"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "Catalan"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "Tchèque"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "Gallois"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "Dannois"
+msgid "Welsh"
+msgstr "Gallois"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "Dannois"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "Allemand"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "Grec"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "Anglais"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "Espagnol"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Estonien"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "Espagnol argentin"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "Estonien"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "Basque"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
 msgid "Persian"
 msgstr "Perse"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
 msgid "Finnish"
 msgstr "Finlandais"
 
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "Français"
-
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Irlandais"
+msgid "French"
+msgstr "Français"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Galicien"
+msgid "Frisian"
+msgstr "Frise"
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Hongrois"
+msgid "Irish"
+msgstr "Irlandais"
 
 #: conf/global_settings.py:64
+msgid "Galician"
+msgstr "Galicien"
+
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "Hébreu"
 
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "Hindi"
-
 #: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "Hindi"
+
+#: conf/global_settings.py:67
 msgid "Croatian"
 msgstr "Croate"
 
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "Islandais"
-
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "Italien"
+msgid "Hungarian"
+msgstr "Hongrois"
 
 #: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "Islandais"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "Italien"
+
+#: conf/global_settings.py:71
 msgid "Japanese"
 msgstr "Japonais"
 
-#: conf/global_settings.py:70
+#: conf/global_settings.py:72
 msgid "Georgian"
 msgstr "Géorgien"
 
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "Coréen"
-
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
 msgid "Khmer"
 msgstr "Khmer"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
 msgid "Kannada"
 msgstr "Kannada"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "Letton"
-
 #: conf/global_settings.py:75
+msgid "Korean"
+msgstr "Coréen"
+
+#: conf/global_settings.py:76
 msgid "Lithuanian"
 msgstr "Lituanien"
 
-#: conf/global_settings.py:76
+#: conf/global_settings.py:77
+msgid "Latvian"
+msgstr "Letton"
+
+#: conf/global_settings.py:78
 msgid "Macedonian"
 msgstr "Macédonien"
 
-#: conf/global_settings.py:77
+#: conf/global_settings.py:79
 msgid "Dutch"
 msgstr "Hollandais"
 
-#: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "Norvégien"
-
-#: conf/global_settings.py:79
-msgid "Polish"
-msgstr "Polonais"
-
 #: conf/global_settings.py:80
-msgid "Portuguese"
-msgstr "Portugais"
+msgid "Norwegian"
+msgstr "Norvégien"
 
 #: conf/global_settings.py:81
-msgid "Brazilian Portuguese"
-msgstr "Portugais brésilien"
+msgid "Polish"
+msgstr "Polonais"
 
 #: conf/global_settings.py:82
-msgid "Romanian"
-msgstr "Roumain"
+msgid "Portuguese"
+msgstr "Portugais"
 
 #: conf/global_settings.py:83
-msgid "Russian"
-msgstr "Russe"
+msgid "Brazilian Portuguese"
+msgstr "Portugais brésilien"
 
 #: conf/global_settings.py:84
-msgid "Slovak"
-msgstr "Slovaque"
+msgid "Romanian"
+msgstr "Roumain"
 
 #: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr "Slovène"
+msgid "Russian"
+msgstr "Russe"
 
 #: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "Serbe"
+msgid "Slovak"
+msgstr "Slovaque"
 
 #: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "Suédois"
+msgid "Slovenian"
+msgstr "Slovène"
 
 #: conf/global_settings.py:88
+msgid "Albanian"
+msgstr "Albanais"
+
+#: conf/global_settings.py:89
+msgid "Serbian"
+msgstr "Serbe"
+
+#: conf/global_settings.py:90
+msgid "Serbian Latin"
+msgstr "Serbe latin"
+
+#: conf/global_settings.py:91
+msgid "Swedish"
+msgstr "Suédois"
+
+#: conf/global_settings.py:92
 msgid "Tamil"
 msgstr "Tamoul"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:93
 msgid "Telugu"
 msgstr "Télougou"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:94
 msgid "Thai"
 msgstr "Thaï"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:95
 msgid "Turkish"
 msgstr "Turc"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:96
 msgid "Ukrainian"
 msgstr "Ukrainien"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "Vietnamien"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
 msgstr "Chinois simplifié"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "Chinois traditionnel"
 
+#: contrib/admin/actions.py:52
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr "%(count)d %(items)s supprimés avec succès."
+
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
+msgid "Are you sure?"
+msgstr "Êtes-vous sûr ?"
+
+#: contrib/admin/actions.py:77
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr "Supprimer les %(verbose_name_plural)s sélectionnés"
+
 #: contrib/admin/filterspecs.py:44
 #, python-format
 msgid ""
@@ -228,43 +265,47 @@
 "<h3>Par %s&nbsp;:</h3>\n"
 "<ul>\n"
 
-#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:91
-#: contrib/admin/filterspecs.py:146 contrib/admin/filterspecs.py:172
+#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
 msgid "All"
 msgstr "Tout"
 
-#: contrib/admin/filterspecs.py:112
+#: contrib/admin/filterspecs.py:113
 msgid "Any date"
 msgstr "Toutes les dates"
 
-#: contrib/admin/filterspecs.py:113
+#: contrib/admin/filterspecs.py:114
 msgid "Today"
 msgstr "Aujourd'hui"
 
-#: contrib/admin/filterspecs.py:116
+#: contrib/admin/filterspecs.py:117
 msgid "Past 7 days"
 msgstr "Les 7 derniers jours"
 
-#: contrib/admin/filterspecs.py:118
+#: contrib/admin/filterspecs.py:119
 msgid "This month"
 msgstr "Ce mois-ci"
 
-#: contrib/admin/filterspecs.py:120
+#: contrib/admin/filterspecs.py:121
 msgid "This year"
 msgstr "Cette année"
 
-#: contrib/admin/filterspecs.py:146 forms/widgets.py:390
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Oui"
 
-#: contrib/admin/filterspecs.py:146 forms/widgets.py:390
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "Non"
 
-#: contrib/admin/filterspecs.py:153 forms/widgets.py:390
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Inconnu"
 
+#: contrib/admin/helpers.py:20
+msgid "Action:"
+msgstr "Action :"
+
 #: contrib/admin/models.py:19
 msgid "action time"
 msgstr "heure de l'action"
@@ -293,60 +334,60 @@
 msgid "log entries"
 msgstr "entrées d'historique"
 
-#: contrib/admin/options.py:129 contrib/admin/options.py:143
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
 msgid "None"
 msgstr "Aucun(e)"
 
-#: contrib/admin/options.py:375
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Changed %s."
 msgstr "Modifié %s."
 
-#: contrib/admin/options.py:375 contrib/admin/options.py:385
-#: contrib/comments/templates/comments/preview.html:15 forms/models.py:294
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:562
 msgid "and"
 msgstr "et"
 
-#: contrib/admin/options.py:380
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "%(name)s « %(object)s » ajouté."
 
-#: contrib/admin/options.py:384
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "%(list)s modifié pour %(name)s « %(object)s »."
 
-#: contrib/admin/options.py:389
+#: contrib/admin/options.py:577
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "%(name)s « %(object)s » supprimé."
 
-#: contrib/admin/options.py:393
+#: contrib/admin/options.py:581
 msgid "No fields changed."
 msgstr "Aucun champ modifié."
 
-#: contrib/admin/options.py:454 contrib/auth/admin.py:67
+#: contrib/admin/options.py:647
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "L'objet %(name)s « %(obj)s » a été ajouté avec succès."
 
-#: contrib/admin/options.py:458 contrib/admin/options.py:491
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
 msgid "You may edit it again below."
 msgstr "Vous pouvez continuer l'édition ci-dessous."
 
-#: contrib/admin/options.py:468 contrib/admin/options.py:501
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
 #, python-format
 msgid "You may add another %s below."
 msgstr "Vous pouvez ajouter un autre %s ci-dessous."
 
-#: contrib/admin/options.py:489
+#: contrib/admin/options.py:682
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "L'objet %(name)s « %(obj)s » a été modifié avec succès."
 
-#: contrib/admin/options.py:497
+#: contrib/admin/options.py:690
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -354,43 +395,70 @@
 "L'objet %(name)s « %(obj)s » a été ajouté avec succès. Vous pouvez continuer "
 "l'édition ci-dessous."
 
+#: contrib/admin/options.py:744
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Des éléments doivent être sélectionnés afin d'appliquer les actions. Aucun "
+"élément n'a été modifié."
+
+#: contrib/admin/options.py:762
+msgid "No action selected."
+msgstr "Aucune action sélectionnée."
+
 # Titre
-#: contrib/admin/options.py:565
+#: contrib/admin/options.py:842
 #, python-format
 msgid "Add %s"
 msgstr "Ajout %s"
 
-#: contrib/admin/options.py:596 contrib/admin/options.py:710
+#: contrib/admin/options.py:868 contrib/admin/options.py:1080
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "L'objet %(name)s avec la clef primaire %(key)r n'existe pas."
 
 # Titre
-#: contrib/admin/options.py:643
+#: contrib/admin/options.py:933
 #, python-format
 msgid "Change %s"
-msgstr "Changement %s"
-
-#: contrib/admin/options.py:675
+msgstr "Modification de %s"
+
+#: contrib/admin/options.py:978
 msgid "Database error"
 msgstr "Erreur de base de données"
 
-#: contrib/admin/options.py:725
+#: contrib/admin/options.py:1014
+#, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] "%(count)s objet %(name)s a été modifié avec succès."
+msgstr[1] "%(count)s objets %(name)s ont été modifiés avec succès."
+
+#: contrib/admin/options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s sélectionné"
+msgstr[1] "Tous les %(total_count)s sélectionnés"
+
+#: contrib/admin/options.py:1046
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 sur %(cnt)s sélectionné"
+
+#: contrib/admin/options.py:1093
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "L'objet %(name)s « %(obj)s » a été supprimé avec succès."
 
-#: contrib/admin/options.py:732
-msgid "Are you sure?"
-msgstr "Êtes-vous sûr ?"
-
-#: contrib/admin/options.py:761
+#: contrib/admin/options.py:1130
 #, python-format
 msgid "Change history: %s"
 msgstr "Historique des changements : %s"
 
-#: contrib/admin/sites.py:15 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -399,11 +467,11 @@
 "chacun de ces champs est sensible à la casse (différenciation des majuscules/"
 "minuscules)."
 
-#: contrib/admin/sites.py:242 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Reconnectez-vous car votre session a expiré."
 
-#: contrib/admin/sites.py:249 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -411,64 +479,54 @@
 "Il semblerait que votre navigateur n'accepte pas les cookies. Activez-les, "
 "rechargez cette page puis essayez à nouveau."
 
-#: contrib/admin/sites.py:265 contrib/admin/sites.py:271
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Les noms d'utilisateur ne peuvent contenir le caractère « @ »."
 
-#: contrib/admin/sites.py:268 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
 "Votre adresse électronique n'est pas votre nom d'utilisateur. Essayez « %s » "
 "à la place."
 
-#: contrib/admin/sites.py:328
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Administration du site"
 
-#: contrib/admin/sites.py:341 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Connexion"
 
-#: contrib/admin/sites.py:388
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "Administration %s"
 
-#: contrib/admin/util.py:144
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Un ou plusieurs %(fieldname)s dans %(name)s : %(obj)s"
-
-#: contrib/admin/util.py:149
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Un ou plusieurs %(fieldname)s dans %(name)s :"
-
-#: contrib/admin/widgets.py:70
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Date :"
 
-#: contrib/admin/widgets.py:70
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Heure :"
 
-#: contrib/admin/widgets.py:94
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Actuellement :"
 
-#: contrib/admin/widgets.py:94
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Modification :"
 
-#: contrib/admin/widgets.py:123
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Recherche"
 
-#: contrib/admin/widgets.py:230
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Ajouter un autre"
 
@@ -483,16 +541,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:33
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -522,6 +581,27 @@
 "administrateurs du site et sera corrigée dans les meilleurs délais. Merci "
 "pour votre patience."
 
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr "Exécuter l'action sélectionnée"
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr "Envoyer"
+
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr "Cliquez ici pour sélectionner tous les objets sur l'ensemble des pages"
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Sélectionner tous les %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "Effacer la sélection"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
@@ -532,24 +612,24 @@
 msgid "Welcome,"
 msgstr "Bienvenue,"
 
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Documentation"
 
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Modifier votre mot de passe"
 
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Déconnexion"
 
@@ -561,40 +641,42 @@
 msgid "Django administration"
 msgstr "Administration de Django"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Ajouter"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Historique"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Voir sur le site"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Corrigez l'erreur suivante."
 msgstr[1] "Corrigez les erreurs suivantes."
 
-#: contrib/admin/templates/admin/change_list.html:16
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "Ajouter %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:26
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Filtre"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:246
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Supprimer"
 
@@ -619,8 +701,33 @@
 "s » ? Les éléments suivants sont liés à celui-ci et seront aussi supprimés :"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
 msgid "Yes, I'm sure"
-msgstr "Oui, j'en suis certain"
+msgstr "Oui, je suis sûr"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+msgid "Delete multiple objects"
+msgstr "Supprimer plusieurs objets"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+"Supprimer l'objet %(object_name)s provoquerait la suppression des objets qui "
+"lui sont liés, mais votre compte ne possède pas la permission de supprimer "
+"les types d'objets suivants :"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, python-format
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Voulez-vous vraiment supprimer les objets %(object_name)s sélectionnés ? "
+"Tous les objets suivants et leurs éléments liés seront aussi supprimés :"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -652,6 +759,10 @@
 msgid "None available"
 msgstr "Aucun(e) disponible"
 
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr "Contenu inconnu"
+
 #: contrib/admin/templates/admin/invalid_setup.html:7
 msgid ""
 "Something's wrong with your database installation. Make sure the appropriate "
@@ -679,15 +790,9 @@
 msgstr "Utilisateur"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Action"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "j F Y, G:i"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -700,9 +805,14 @@
 msgid "Show all"
 msgstr "Tout afficher"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Enregistrer"
+
 #: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Envoyer"
+msgid "Search"
+msgstr "Rechercher"
 
 #: contrib/admin/templates/admin/search_form.html:10
 #, python-format
@@ -716,10 +826,6 @@
 msgid "%(full_result_count)s total"
 msgstr "%(full_result_count)s résultats"
 
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Enregistrer"
-
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
 msgstr "Enregistrer en tant que nouveau"
@@ -732,7 +838,7 @@
 msgid "Save and continue editing"
 msgstr "Enregistrer et continuer les modifications"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -740,35 +846,41 @@
 "Saisissez tout d'abord un nom d'utilisateur et un mot de passe. Vous pourrez "
 "ensuite modifier plus d'options."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Nom d'utilisateur"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Mot de passe"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Mot de passe (à nouveau)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "Saisissez le même mot de passe que précédemment, par sécurité."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr ""
 "Saisissez un nouveau mot de passe pour l'utilisateur <strong>%(username)s</"
 "strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Mot de passe"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Mot de passe (à nouveau)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Saisissez le même mot de passe que précédemment, pour vérification."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Ajouter un objet %(verbose_name)s supplémentaire"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Supprimer"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Supprimer ?"
@@ -782,9 +894,9 @@
 msgstr "Connectez-vous à nouveau"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Modification de votre mot de passe"
 
@@ -797,7 +909,7 @@
 msgid "Your password was changed."
 msgstr "Votre mot de passe a été modifié."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -806,21 +918,17 @@
 "nouveau mot de passe à deux reprises afin de vérifier qu'il est correctement "
 "saisi."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Ancien mot de passe :"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nouveau mot de passe :"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirmation du mot de passe :"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Ancien mot de passe"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Nouveau mot de passe"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Modifier mon mot de passe"
@@ -860,6 +968,14 @@
 "Saisissez deux fois votre nouveau mot de passe afin de vérifier qu'il est "
 "correctement saisi."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Nouveau mot de passe :"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Confirmation du mot de passe :"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Échec lors de la mise à jour du mot de passe"
@@ -931,167 +1047,86 @@
 msgid "Reset my password"
 msgstr "Réinitialiser mon mot de passe"
 
-#: contrib/admin/templatetags/admin_list.py:285
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Toutes les dates"
 
-#: contrib/admin/views/main.py:69
+#: contrib/admin/views/main.py:70
 #, python-format
 msgid "Select %s"
 msgstr "Sélectionnez %s"
 
-#: contrib/admin/views/main.py:69
+#: contrib/admin/views/main.py:70
 #, python-format
 msgid "Select %s to change"
 msgstr "Sélectionnez l'objet %s à changer"
 
-#: contrib/admin/views/template.py:36 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "site"
 
-#: contrib/admin/views/template.py:38
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "template"
 
-#: contrib/admindocs/views.py:57 contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "mot-clé :"
 
-#: contrib/admindocs/views.py:90 contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "filtre :"
 
-#: contrib/admindocs/views.py:154 contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "vue :"
 
-#: contrib/admindocs/views.py:186
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "L'application %r n'a pas été trouvée"
 
-#: contrib/admindocs/views.py:193
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr ""
 "Le modèle %(model_name)r n'a pas été trouvé dans l'application %(app_label)r"
 
-#: contrib/admindocs/views.py:205
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "l'objet « %(app_label)s.%(data_type)s » en relation"
 
-#: contrib/admindocs/views.py:205 contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241 contrib/admindocs/views.py:246
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "modèle :"
 
-#: contrib/admindocs/views.py:236
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "les objets « %(app_label)s.%(object_name)s » en relation"
 
-#: contrib/admindocs/views.py:241
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "tous les %s"
 
-#: contrib/admindocs/views.py:246
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "nombre de %s"
 
-#: contrib/admindocs/views.py:251
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "Champs sur les objets %s"
 
-#: contrib/admindocs/views.py:314 contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327 contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "Entier"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "Booléen (soit vrai ou faux)"
-
-#: contrib/admindocs/views.py:316 contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Chaîne de caractère (jusqu'à %(max_length)s)"
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "Des entiers séparés par une virgule"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "Date (sans l'heure)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "Date (avec l'heure)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "Nombre décimal"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "Adresse électronique"
-
-#: contrib/admindocs/views.py:322 contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "Chemin vers le fichier"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "Nombre à virgule flottante"
-
-#: contrib/admindocs/views.py:328 contrib/comments/models.py:58
-msgid "IP address"
-msgstr "adresse IP"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "Booléen (soit vrai, faux ou nul)"
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "Relation au modèle parent"
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "Numéro de téléphone"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "Texte"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "Heure"
-
-#: contrib/admindocs/views.py:339 contrib/comments/forms.py:19
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "État Américain (deux lettres majuscules)"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "Texte XML"
-
-#: contrib/admindocs/views.py:367
+#: contrib/admindocs/views.py:361
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s ne semble pas être un objet urlpattern"
@@ -1165,67 +1200,65 @@
 "Comme ci-dessus, mais ouvre la page d'administration dans une nouvelle "
 "fenêtre."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Information personnelle"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Permissions"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Dates importantes"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Groupes"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Ajouter l'utilisateur"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Mot de passe modifié avec succès"
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Modifier le mot de passe : %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:127
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
 msgstr ""
-"Requis. 30 caractères maximum, alphanumériques uniquement (lettres, "
-"chiffres, et tirets bas _)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
+"Requis. 30 caractères maximum. Uniquement des lettres, nombres et les "
+"caractères « @ », « . », « + », « - » et « _ »."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
 msgstr ""
-"Ce champ ne doit contenir que des lettres, des nombres et des tirets bas _."
+"Cette valeur peut uniquement contenir des lettres, nombres et les caractères "
+"« @ », « . », « + », « - » et « _ »."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Confirmation de votre mot de passe"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Un utilisateur avec ce nom existe déjà."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Les deux mots de passe ne correspondent pas."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Ce compte est inactif."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1233,11 +1266,11 @@
 "Votre navigateur ne semble pas avoir activé les cookies. Les cookies sont "
 "nécessaires pour se connecter."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "Courriel"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1245,72 +1278,71 @@
 "Cette adresse électronique ne correspond à aucun compte utilisateur. Êtes-"
 "vous sûr de vous être enregistré ?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
-msgstr "Mot de passe mis à jour sur %s"
-
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Nouveau mot de passe"
-
-#: contrib/auth/forms.py:144
+msgstr "Mise à jour du mot de passe sur %s"
+
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Confirmation du nouveau mot de passe"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Ancien mot de passe"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr "Votre ancien mot de passe est incorrect. Veuillez le rectifier."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "nom"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "nom de code"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "permission"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "permissions"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "groupe"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:137
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "groupes"
 
-#: contrib/auth/models.py:127
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "nom d'utilisateur"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Requis. 30 caractères maximum. Uniquement des lettres, nombres et les "
+"caractères « @ », « . », « + », « - » et « _ »."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "prénom"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "nom"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "adresse électronique"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "mot de passe"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1318,19 +1350,19 @@
 "Utilisez « [algo]$[salt]$[hexdigest] » ou le <a href=\"password/\">formulaire "
 "de changement de mot de passe</a>."
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "statut équipe"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Précise si l'utilisateur peut se connecter à ce site d'administration."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "actif"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1338,11 +1370,11 @@
 "Précise si l'utilisateur doit être considéré comme actif. Décochez ceci "
 "plutôt que de supprimer le compte."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "statut super-utilisateur"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
@@ -1350,15 +1382,15 @@
 "Précise que l'utilisateur possède toutes les permissions sans les assigner "
 "explicitement."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "dernière connexion"
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "date d'inscription"
 
-#: contrib/auth/models.py:138
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1367,60 +1399,106 @@
 "recevra aussi toutes les permissions de tous les groupes auxquels il "
 "appartient. "
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "permissions de l'utilisateur"
 
-#: contrib/auth/models.py:143
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
 msgid "user"
 msgstr "utilisateur"
 
-#: contrib/auth/models.py:144
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "utilisateurs"
 
-#: contrib/auth/models.py:300
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "message"
 
-#: contrib/auth/views.py:50
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Déconnecté"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:428
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Entrez une adresse de courriel valide."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Contenu"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
-msgstr "Metadonnées"
-
-#: contrib/comments/forms.py:17
-#: contrib/comments/templates/comments/moderation_queue.html:34
+msgstr "Métadonnées"
+
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "marqué"
+msgstr[1] "marqués"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Marquer les commentaires sélectionnés"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "approuvé"
+msgstr[1] "approuvés"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Approuver les commentaires sélectionnés"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "supprimé"
+msgstr[1] "supprimés"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Supprimer les commentaires sélectionnés"
+
+# Nous avons artificiellement ajouté un « s » à l'action de la forme plurielle
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 commentaire a été %(action)s avec succès."
+msgstr[1] "%(count)s commentaires ont été %(action)ss avec succès."
+
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr "Commentaires sur %(site_name)s"
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr "Derniers commentaires sur %(site_name)s"
+
+#: contrib/comments/forms.py:93
 msgid "Name"
 msgstr "Nom"
 
-#: contrib/comments/forms.py:18
+#: contrib/comments/forms.py:94
 msgid "Email address"
 msgstr "Adresse électronique"
 
-#: contrib/comments/forms.py:20
-#: contrib/comments/templates/comments/moderation_queue.html:35
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
+#: contrib/comments/forms.py:96
 msgid "Comment"
 msgstr "Commentaire"
 
-#: contrib/comments/forms.py:23
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Si vous saisissez quelque chose dans ce champ, votre commentaire sera "
-"considéré comme étant indésirable"
-
-#: contrib/comments/forms.py:146
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
@@ -1428,45 +1506,61 @@
 msgstr[1] ""
 "Attention à votre langage ! Les termes %s ne sont pas autorisés ici."
 
-#: contrib/comments/models.py:23
+#: contrib/comments/forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr ""
+"Si vous saisissez quelque chose dans ce champ, votre commentaire sera "
+"considéré comme étant indésirable"
+
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
+msgid "content type"
+msgstr "type de contenu"
+
+#: contrib/comments/models.py:24
 msgid "object ID"
 msgstr "ID de l'objet"
 
-#: contrib/comments/models.py:50
+#: contrib/comments/models.py:52
 msgid "user's name"
 msgstr "nom de l'utilisateur"
 
-#: contrib/comments/models.py:51
+#: contrib/comments/models.py:53
 msgid "user's email address"
 msgstr "adresse électronique de l'utilisateur"
 
-#: contrib/comments/models.py:52
+#: contrib/comments/models.py:54
 msgid "user's URL"
 msgstr "URL de l'utilisateur"
 
-#: contrib/comments/models.py:54
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
 msgid "comment"
 msgstr "commentaire"
 
-#: contrib/comments/models.py:57
+#: contrib/comments/models.py:59
 msgid "date/time submitted"
 msgstr "date et heure soumises"
 
-#: contrib/comments/models.py:59
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "adresse IP"
+
+#: contrib/comments/models.py:61
 msgid "is public"
 msgstr "est public"
 
-#: contrib/comments/models.py:60
+#: contrib/comments/models.py:62
 msgid ""
 "Uncheck this box to make the comment effectively disappear from the site."
 msgstr ""
 "Décochez cette case pour faire vraiment disparaître ce commentaire du site."
 
-#: contrib/comments/models.py:62
+#: contrib/comments/models.py:64
 msgid "is removed"
 msgstr "est supprimé"
 
-#: contrib/comments/models.py:63
+#: contrib/comments/models.py:65
 msgid ""
 "Check this box if the comment is inappropriate. A \"This comment has been "
 "removed\" message will be displayed instead."
@@ -1474,7 +1568,11 @@
 "Cochez cette case si le commentaire est inadéquat. Un message type « Ce "
 "commentaire a été supprimé » sera affiché en lieu et place de celui-ci."
 
-#: contrib/comments/models.py:115
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr "commentaires"
+
+#: contrib/comments/models.py:119
 msgid ""
 "This comment was posted by an authenticated user and thus the name is read-"
 "only."
@@ -1482,7 +1580,7 @@
 "Ce commentaire a été posté par un utilisateur authentifié, le nom est donc "
 "en lecture seule."
 
-#: contrib/comments/models.py:124
+#: contrib/comments/models.py:128
 msgid ""
 "This comment was posted by an authenticated user and thus the email is read-"
 "only."
@@ -1490,7 +1588,7 @@
 "Ce commentaire a été posté par un utilisateur authentifié et le courriel est "
 "donc en lecture seule"
 
-#: contrib/comments/models.py:149
+#: contrib/comments/models.py:153
 #, python-format
 msgid ""
 "Posted by %(user)s at %(date)s\n"
@@ -1505,6 +1603,22 @@
 "\n"
 "http://%(domain)s%(url)s"
 
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr "indicateur"
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr "date"
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr "indicateur de commentaire"
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr "indicateurs de commentaire"
+
 #: contrib/comments/templates/comments/approve.html:4
 msgid "Approve a comment"
 msgstr "Valider un commentaire"
@@ -1514,7 +1628,6 @@
 msgstr "Voulez-vous rendre ce commentaire public ?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Valider"
 
@@ -1539,11 +1652,6 @@
 msgid "Really remove this comment?"
 msgstr "Voulez-vous supprimer définitivement ce commentaire ?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Supprimer"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Merci pour cette suppression"
@@ -1564,49 +1672,16 @@
 msgid "Thanks for flagging"
 msgstr "Merci d'avoir signalé ce commentaire"
 
-#: contrib/comments/templates/comments/form.html:16
-#: contrib/comments/templates/comments/preview.html:31
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
 msgid "Post"
 msgstr "Envoyer"
 
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
 msgid "Preview"
 msgstr "Prévisualiser"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Liste de modération des commentaires"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Aucun commentaire à modérer"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Courriel"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Authentifié ?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "Adresse IP"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Date de soumission"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "oui"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "non"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Merci pour votre commentaire"
@@ -1616,33 +1691,29 @@
 msgstr "Merci pour votre commentaire"
 
 #: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:12
+#: contrib/comments/templates/comments/preview.html:13
 msgid "Preview your comment"
 msgstr "Prévisualiser votre commentaire"
 
-#: contrib/comments/templates/comments/preview.html:10
+#: contrib/comments/templates/comments/preview.html:11
 msgid "Please correct the error below"
 msgid_plural "Please correct the errors below"
 msgstr[0] "Veuillez corriger l'erreur suivante."
 msgstr[1] "Veuillez corriger les erreurs suivantes."
 
-#: contrib/comments/templates/comments/preview.html:15
+#: contrib/comments/templates/comments/preview.html:16
 msgid "Post your comment"
 msgstr "Envoyer votre commentaire"
 
-#: contrib/comments/templates/comments/preview.html:15
+#: contrib/comments/templates/comments/preview.html:16
 msgid "or make changes"
 msgstr "ou le modifier"
 
-#: contrib/contenttypes/models.py:67
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "nom de la classe python du modèle"
 
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "type de contenu"
-
-#: contrib/contenttypes/models.py:72
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "types de contenu"
 
@@ -1659,7 +1730,7 @@
 "slashes."
 msgstr ""
 "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas « _ », "
-"des traits d'union, et des « / »."
+"des traits d'union et des « / »."
 
 #: contrib/flatpages/admin.py:22
 msgid "Advanced options"
@@ -1707,7 +1778,7 @@
 msgid "flat pages"
 msgstr "pages statiques"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1715,17 +1786,59 @@
 "Nous sommes désolés, mais votre formulaire a expiré. Veuillez compléter le "
 "formulaire sur cette page."
 
-#: contrib/gis/forms/fields.py:14
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+"Le champ GIS -- convertit dans le type de spécification géométrique "
+"d'OpenGIS."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Point"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Chaîne de segment"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Polygone"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Multipoint"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Chaîne multisegment"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Multipolygone"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Collection géométrique"
+
+#: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
-msgstr "Valeur géométrique manquante."
-
-#: contrib/gis/forms/fields.py:15
+msgstr "Acune valeur géométrique fournie."
+
+#: contrib/gis/forms/fields.py:18
 msgid "Invalid geometry value."
-msgstr "Valeur géométrique non valide"
-
-#: contrib/gis/forms/fields.py:16
+msgstr "Valeur géométrique non valide."
+
+#: contrib/gis/forms/fields.py:19
 msgid "Invalid geometry type."
-msgstr "Type de géométrie non valide"
+msgstr "Type de géométrie non valide."
+
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+"Une erreur est survenue lors de la transformation de l'objet géométrique "
+"dans le SRID du champ de formulaire géométrique."
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
@@ -1737,7 +1850,7 @@
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "nd"
-msgstr "<sup>d</sup>"
+msgstr "<sup>e</sup>"
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "rd"
@@ -1812,25 +1925,25 @@
 msgid "yesterday"
 msgstr "hier"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Saisissez un code postal au format NNNN ou ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Ce champ ne doit contenir que des nombres."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Ce champ requiert 7 ou 8 chiffres."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Saisissez un numéro CUIT au format XX-XXXXXXXX-X ou XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "CUIT non valide."
 
@@ -1870,8 +1983,8 @@
 msgid "Vienna"
 msgstr "Vienne"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Saisissez un code postal norvégien au format XXXX."
 
@@ -1881,19 +1994,19 @@
 "Saisissez un numéro de sécurité sociale autrichien valide au format XXXX "
 "XXXXXX."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Saisissez un code postal australien (4 chiffres)."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Saisissez un code postal brésilien au format XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Les numéros de téléphone doivent être au format XX-XXXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
@@ -1901,27 +2014,27 @@
 "Sélectionnez un état brésilien valide. Cet état ne fait pas partie de ceux "
 "disponibles."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Numéro CPF non valide."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Ce champ requiert au plus 11 chiffres ou 14 caractères."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Numéro CNPJ non valide."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "Ce champ requiert au minimum 14 chiffres"
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Saisissez un code postal au format XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr ""
 "Saisissez un numéro de sécurité sociale canadien au format XXX-XXX-XXX."
@@ -2030,7 +2143,7 @@
 msgid "Zurich"
 msgstr "Zurich"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2038,15 +2151,15 @@
 "Saisissez un numéro de passeport ou de carte d'identité suisse valide au "
 "format X1234567<0 ou 1234567890."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Saisissez un RUT chilien valide."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Saisissez un RUT chilien valide au format XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "Ce RUT chilien est non valide."
 
@@ -2054,9 +2167,8 @@
 msgid "Prague"
 msgstr "Prague"
 
-# Ticket #10385
 #: contrib/localflavor/cz/cz_regions.py:9
-msgid "Cenral Bohemian Region"
+msgid "Central Bohemian Region"
 msgstr "Bohême du Centre"
 
 #: contrib/localflavor/cz/cz_regions.py:10
@@ -2107,25 +2219,25 @@
 msgid "Moravian-Silesian Region"
 msgstr "Moravie-Silésie"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Saisissez un code postal au format XXXXX ou XXX XX."
 
-#: contrib/localflavor/cz/forms.py:47
+#: contrib/localflavor/cz/forms.py:48
 msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
 msgstr "Saisissez une date de naissance au format XXXXXX/XXXX ou XXXXXXXXXX."
 
-#: contrib/localflavor/cz/forms.py:48
+#: contrib/localflavor/cz/forms.py:49
 msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
 msgstr ""
 "Le paramètre optionnel du genre est non valide, les valeurs autorisées sont "
 "« f » et « m »"
 
-#: contrib/localflavor/cz/forms.py:49
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Saisissez une date de naissance valide."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Saisissez un numéro IC valide."
 
@@ -2193,12 +2305,12 @@
 msgid "Thuringia"
 msgstr "Thuringe"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Saisissez un code postal au format XXXXX."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2473,74 +2585,508 @@
 msgid "Valencian Community"
 msgstr "Communauté valencienne"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Saisissez un code postal dans l'intervalle et au format 01XXX - 52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
 msgstr ""
 "Saisissez un numéro de téléphone au format 6XXXXXXXX, 8XXXXXXXX ou 9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Saisissez une adresse NIF, NIE ou CIF valide."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Saisissez un NIF ou NIE valide."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Mauvais checksum pour NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Mauvais checksum pour NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Mauvais checksum pour CIF."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr ""
 "Saisissez un numéro de compte bancaire valide au format XXXXX-XXXX-XX-"
 "XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Somme de contrôle non valide pour le numéro de compte bancaire."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Saisissez un numéro de sécurité sociale finlandais."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Les numéros de téléphone doivent être au format 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Saisissez un code postal valide"
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Saisissez un numéro de téléphone valide"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Saisissez un numéro de plaque d'immatriculation valide"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Saisissez un numéro NIK/KTP valide"
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Bali"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Banten"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Bengkulu"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Yogyakarta"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Jakarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Gorontalo"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Jambi"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Java occidental"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Java central"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Java oriental"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Kalimantan occidental"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Kalimantan du sud"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Kalimantan central"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Kalimantan oriental"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Île Bangka-Belitung"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Île Riau"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Lampung"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Moluques"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Moluques du nord"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Nanggroe Aceh Darussalam"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Nusa Tenggara occidental"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Nusa Tenggara oriental"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Papouasie"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Papouasie occidentale"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Riau"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "Sulawesi occidental"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "Sulawesi du Sud"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "Sulawesi central"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "Sulawesi du Sud-Est"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "Sulawesi du Nord"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "Sumaratera occidental"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "Sumatera du Sud"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "Sumatera du Nord"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "Megelang"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "Surakarta - Solo"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "Madiun"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "Kediri"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "Tapanuli"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "Kepulauan Bangka Belitung"
+
+# http://en.wikipedia.org/wiki/Consular_corps
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr "Corps consulaire"
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr "Corps diplomatique"
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "Bandung"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr "Sulawesi du Nord"
+
+# NTT signifie Nusa Tenggara Timur
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - Timor"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr "Îles de Sulawesi du Nord"
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - Lombok"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "Papua dan Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "Cirebon"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - Sumbawa"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - Florès"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - Sumba"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "Bogor"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "Pekalongan"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "Semarang"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "Pati"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "Surabaya"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "Madura"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "Malang"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "Jember"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "Banyumas"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "Gouvernement fédéral"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "Bojonegoro"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "Purwakarta"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "Sidoarjo"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "Garut"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "Armagh"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "Carlow"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "Cavan"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "Clare"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "Cork"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "Derry"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "Donegal"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "Down"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Dublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "Galway"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "Kerry"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "Kildare"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "Kilkenny"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "Laois"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "Leitrim"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "Limerick"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "Longford"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "Louth"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Mayo"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "Meath"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "Monaghan"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "Offaly"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "Roscommon"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "Sligo"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "Tipperary"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "Tyrone"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "Waterford"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "Westmeath"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "Wexford"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "Wicklow"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Saisissez un code postal au format XXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr "Saisissez un code postal islandais valide au format XXXXXX-XXXX."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "Le numéro d'identification islandais est non valide."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Saisissez un code postal valide."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Saisissez un numéro valide de Sécurité Sociale."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Saisissez un numéro de TVA valide."
 
@@ -2736,6 +3282,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Saisissez un numéro d'identification civil koweïtien valide"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2864,15 +3414,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Saisissez un code postal valide."
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Saisissez un numéro de téléphone valide."
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Saisissez un numéro SoFi valide."
 
@@ -2924,21 +3470,21 @@
 msgid "Zuid-Holland"
 msgstr "Hollande-Méridionale"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Saisissez un numéro de sécurité sociale norvégien valide."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
-msgstr "Ce champ requiert 8 chiffres."
-
-#: contrib/localflavor/pe/forms.py:52
+msgstr "Ce champ requiert 8 chiffres."
+
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
-msgstr "Ce champ requiert 11 chiffres."
+msgstr "Ce champ requiert 11 chiffres."
 
 #: contrib/localflavor/pl/forms.py:38
 msgid "National Identification Number consists of 11 digits."
-msgstr "Le numéro national d'identification (NIN) comporte 11 chiffres."
+msgstr "Le numéro national d'identification (NIN) comporte 11 chiffres."
 
 #: contrib/localflavor/pl/forms.py:39
 msgid "Wrong checksum for the National Identification Number."
@@ -2954,18 +3500,18 @@
 msgid "Wrong checksum for the Tax Number (NIP)."
 msgstr "Somme de contrôle non valide du numéro de taxe (NIP)."
 
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
 msgstr ""
-"Le numéro de registre du commerce national (REGON) comporte 7 ou 9 chiffres."
-
-#: contrib/localflavor/pl/forms.py:112
+"Le numéro de registre du commerce national (REGON) comporte 9 ou 14 chiffres."
+
+#: contrib/localflavor/pl/forms.py:110
 msgid "Wrong checksum for the National Business Register Number (REGON)."
 msgstr ""
 "Somme de contrôle non valide pour le numéro de registre du commerce national "
 "(REGON)."
 
-#: contrib/localflavor/pl/forms.py:155
+#: contrib/localflavor/pl/forms.py:148
 msgid "Enter a postal code in the format XX-XXX."
 msgstr "Saisissez un code postal au format XX-XXX."
 
@@ -3033,6 +3579,16 @@
 msgid "West Pomerania"
 msgstr "Poméranie Occidentale"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Saisissez un code postal au format XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+"Les numéros de téléphone doivent comporter 9 chiffres, ou débuter par un + "
+"ou 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Saisissez une CIF valide."
@@ -3053,6 +3609,107 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Saisissez un code postal valide au format XXXXXX"
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Saisissez un numéro d'organisation suédois valide."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Saisissez un numéro d'identité personnelle suédois valide."
+
+# The source code doesn't offer any help to explain the term
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Le nombres de co-ordination ne sont pas autorisés."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Saisissez un code postal suédois au format XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Stockholm"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Banská Bystrica"
@@ -3075,23 +3732,23 @@
 
 #: contrib/localflavor/sk/sk_districts.py:13
 msgid "Bratislava I"
-msgstr "Bratislava·I"
+msgstr "Bratislava I"
 
 #: contrib/localflavor/sk/sk_districts.py:14
 msgid "Bratislava II"
-msgstr "Bratislava·II"
+msgstr "Bratislava II"
 
 #: contrib/localflavor/sk/sk_districts.py:15
 msgid "Bratislava III"
-msgstr "Bratislava·III"
+msgstr "Bratislava III"
 
 #: contrib/localflavor/sk/sk_districts.py:16
 msgid "Bratislava IV"
-msgstr "Bratislava·IV"
+msgstr "Bratislava IV"
 
 #: contrib/localflavor/sk/sk_districts.py:17
 msgid "Bratislava V"
-msgstr "Bratislava·V"
+msgstr "Bratislava V"
 
 #: contrib/localflavor/sk/sk_districts.py:18
 msgid "Bytca"
@@ -3685,20 +4342,45 @@
 msgid "Wales"
 msgstr "Pays de Galles"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Saisissez un code postal américain au format XXXXX ou XXXXX-XXXX."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Les numéros de téléphone doivent être au format XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr ""
 "Saisissez un numéro de sécurité sociale américain au format XXX-XX-XXXX."
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Saisissez un état ou un territoire américain."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "État Américain (deux lettres majuscules)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Numéro de téléphone"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+"Saisissez un numéro de CI valide au format X.XXX.XXX-X,XXXXXXX-X ou XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Saisissez un numéro CI valide."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Saisissez un numéro d'identification sud-africain valide."
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Saisissez un code postal sud-africain valide."
 
@@ -3738,6 +4420,10 @@
 msgid "Western Cape"
 msgstr "Cap-Occidental"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "message « lazy »"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "redirigé depuis"
@@ -3802,61 +4488,227 @@
 msgid "sites"
 msgstr "sites"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:700
-msgid "This value must be an integer."
-msgstr "Cette valeur doit être un entier."
-
-#: db/models/fields/__init__.py:387
-msgid "This value must be either True or False."
-msgstr "Cette valeur doit être soit vraie (True) soit fausse (False)."
-
-#: db/models/fields/__init__.py:420
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Saisissez une valeur valide."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Saisissez une URL valide."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Cette URL semble être cassée."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et "
+"des traits d'union."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Saisissez une adresse IPv4 valide."
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Saisissez uniquement des chiffres séparés par des virgules."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+"Assurez-vous que cette valeur est %(limit_value)s (actuellement %(show_value)"
+"s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr ""
+"Assurez-vous que cette valeur est inférieure ou égale à %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr ""
+"Assurez-vous que cette valeur est supérieure ou égale à %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Assurez-vous que cette valeur comporte au moins %(limit_value)d caractères "
+"(actuellement %(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Assurez-vous que cette valeur comporte au maximum %(limit_value)d caractères "
+"(actuellement %(show_value)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr ""
+"%(field_name)s doit être unique pour la partie %(lookup)s de %(date_field)s."
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "Un(e) %(model_name)s avec ce %(field_label)s existe déjà."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "La valeur « %r » n'est pas un choix valide."
+
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Ce champ ne peut pas être vide."
 
-#: db/models/fields/__init__.py:436
-msgid "Enter only digits separated by commas."
-msgstr "Saisissez uniquement des chiffres séparés par des virgules."
-
-#: db/models/fields/__init__.py:467
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Ce champ ne peut pas être vide."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Champ de type : %(field_type)s"
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Entier"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+msgid "This value must be an integer."
+msgstr "Cette valeur doit être un entier."
+
+#: db/models/fields/__init__.py:490
+msgid "This value must be either True or False."
+msgstr "Cette valeur doit être soit vraie (True) soit fausse (False)."
+
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Booléen (soit vrai ou faux)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Chaîne de caractère (jusqu'à %(max_length)s)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Des entiers séparés par une virgule"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Date (sans l'heure)"
+
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Saisissez une date valide au format AAAA-MM-JJ."
 
-#: db/models/fields/__init__.py:476
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Date non valide : %s"
 
-#: db/models/fields/__init__.py:540 db/models/fields/__init__.py:558
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr ""
 "Saisissez une date et une heure valides au format AAAA-MM-JJ HH:MM[:ss[."
 "uuuuuu]]."
 
-#: db/models/fields/__init__.py:594
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Date (avec l'heure)"
+
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "Cette valeur doit être un nombre décimal."
 
-#: db/models/fields/__init__.py:676
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Nombre décimal"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "Adresse électronique"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Chemin vers le fichier"
+
+#: db/models/fields/__init__.py:822
 msgid "This value must be a float."
 msgstr "Cette valeur doit être un nombre réel."
 
-#: db/models/fields/__init__.py:736
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "Nombre à virgule flottante"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Grand entier (8 octets)"
+
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr "Cette valeur doit être nulle (None), vraie (True) ou fausse (False)."
 
-#: db/models/fields/__init__.py:834 db/models/fields/__init__.py:848
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Booléen (soit vrai, faux ou nul)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Texte"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Heure"
+
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Saisissez une heure valide au format HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:767
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "Texte XML"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Le modèle %(model)s avec la clef primaire %(pk)r n'existe pas."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Clé étrangère (type défini par le champ lié)"
+
+#: db/models/fields/related.py:923
+msgid "One-to-one relationship"
+msgstr "Relation un à un"
+
+#: db/models/fields/related.py:983
+msgid "Many-to-many relationship"
+msgstr "Relation plusieurs à plusieurs"
+
+#: db/models/fields/related.py:1003
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Maintenez appuyé « Ctrl », ou « Commande (touche pomme) » sur un Mac, pour en "
 "sélectionner plusieurs."
 
-#: db/models/fields/related.py:845
+#: db/models/fields/related.py:1064
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3866,87 +4718,67 @@
 msgstr[1] ""
 "Saisissez des ID %(self)s valides. Les valeurs %(value)r sont non valides."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Ce champ est obligatoire."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Saisissez une valeur valide."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Assurez-vous que cette valeur fait moins de %(max)d caractères (actuellement "
-"%(length)d caractères)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Assurez-vous que cette valeur fait plus de %(min)d caractères (actuellement %"
-"(length)d caractères)."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Saisissez un nombre entier."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Assurez-vous que cette valeur est inférieure ou égale à %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Assurez-vous que cette valeur est supérieure ou égale à %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Saisissez un nombre."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Assurez-vous qu'il n'y a pas plus de %s chiffres au total."
 
-#: forms/fields.py:228
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Assurez-vous qu'il n'y a pas plus de %s chiffres après la virgule."
 
-#: forms/fields.py:229
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Assurez-vous qu'il n'y a pas plus de %s chiffres avant la virgule."
 
-#: forms/fields.py:287 forms/fields.py:849
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Saisissez une date valide."
 
-#: forms/fields.py:321 forms/fields.py:850
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Saisissez une heure valide."
 
-#: forms/fields.py:360
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Saisissez une date et une heure valides."
 
-#: forms/fields.py:446
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr ""
 "Aucun fichier n'a été soumis. Vérifiez le type d'encodage du formulaire."
 
-#: forms/fields.py:447
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Aucun fichier n'a été soumis."
 
-#: forms/fields.py:448
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Le fichier soumis est vide."
 
-#: forms/fields.py:477
+#: forms/fields.py:438
+#, python-format
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+"Assurez-vous que ce nom de fichier ne contient pas plus de %(max)d "
+"caractères (actuellement %(length)d caractères)."
+
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -3954,108 +4786,114 @@
 "Téléversez une image valide. Le fichier que vous avez transféré n'est pas "
 "une image ou bien est corrompu."
 
-#: forms/fields.py:538
-msgid "Enter a valid URL."
-msgstr "Saisissez une URL valide."
-
-#: forms/fields.py:539
-msgid "This URL appears to be a broken link."
-msgstr "Cette URL semble être cassée."
-
-#: forms/fields.py:618 forms/fields.py:696
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Sélectionnez un choix valide. %(value)s n'en fait pas partie."
 
-#: forms/fields.py:697 forms/fields.py:758 forms/models.py:721
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:995
 msgid "Enter a list of values."
 msgstr "Saisissez une liste de valeurs."
 
-#: forms/fields.py:878
-msgid "Enter a valid IPv4 address."
-msgstr "Saisissez une adresse IPv4 valide."
-
-#: forms/fields.py:888
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et "
-"des traits d'union."
-
 # Si « : » est requis, créer un ticket
-#: forms/formsets.py:242 forms/formsets.py:244
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Ordre"
 
-#: forms/models.py:287 forms/models.py:296
+#: forms/models.py:556
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Corrigez les données à double dans %(field)s."
+
+#: forms/models.py:560
 #, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "Un(e) %(model_name)s avec ce %(field_label)s existe déjà."
-
-#: forms/models.py:594
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+"Corrigez les données à double dans %(field)s qui doit contenir des valeurs "
+"uniques."
+
+#: forms/models.py:566
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+"Corrigez les données à double dans %(field_name)s qui doit contenir des "
+"valeurs uniques pour la partie %(lookup)s de %(date_field)s."
+
+#: forms/models.py:574
+msgid "Please correct the duplicate values below."
+msgstr "Corrigez les valeurs à double ci-dessous."
+
+#: forms/models.py:848
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr ""
 "La clé étrangère en ligne ne correspond pas à la clé primaire de l'instance "
 "parente."
 
-#: forms/models.py:651
+#: forms/models.py:914
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr ""
 "Sélectionnez un choix valide. Ce choix ne fait pas partie de ceux "
 "disponibles."
 
-#: forms/models.py:722
+#: forms/models.py:996
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Sélectionnez un choix valide ; %s n'en fait pas partie."
 
-#: template/defaultfilters.py:743
+#: forms/models.py:998
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr "« %s » n'est pas une valeur correcte pour une clé primaire."
+
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "oui, non, peut-être"
 
-#: template/defaultfilters.py:774
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d octet"
 msgstr[1] "%(size)d octets"
 
-#: template/defaultfilters.py:776
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f Ko"
 
-#: template/defaultfilters.py:778
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f Mo"
 
-#: template/defaultfilters.py:779
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f Go"
 
-#: utils/dateformat.py:41
+#: utils/dateformat.py:42
 msgid "p.m."
 msgstr "après-midi"
 
-#: utils/dateformat.py:42
+#: utils/dateformat.py:43
 msgid "a.m."
 msgstr "matin"
 
-#: utils/dateformat.py:47
+#: utils/dateformat.py:48
 msgid "PM"
 msgstr "Après-midi"
 
-#: utils/dateformat.py:48
+#: utils/dateformat.py:49
 msgid "AM"
 msgstr "Matin"
 
-#: utils/dateformat.py:97
+#: utils/dateformat.py:98
 msgid "midnight"
 msgstr "minuit"
 
-#: utils/dateformat.py:99
+#: utils/dateformat.py:100
 msgid "noon"
 msgstr "midi"
 
@@ -4241,7 +5079,7 @@
 msgid "Dec."
 msgstr "déc."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "ou"
 
@@ -4281,47 +5119,51 @@
 msgstr[0] "minute"
 msgstr[1] "minutes"
 
-#: utils/timesince.py:43
+#: utils/timesince.py:45
 msgid "minutes"
 msgstr "minutes"
 
-#: utils/timesince.py:48
+#: utils/timesince.py:50
 #, python-format
 msgid "%(number)d %(type)s"
 msgstr "%(number)d %(type)s"
 
-#: utils/timesince.py:54
+#: utils/timesince.py:56
 #, python-format
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:403
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
 msgstr "j F Y"
 
-#: utils/translation/trans_real.py:405
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j F Y, G:i"
+
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
 msgstr "G:i:s"
 
-#: utils/translation/trans_real.py:421
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y"
 
-#: utils/translation/trans_real.py:422
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
 msgstr "j F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "L'objet %(verbose_name)s a été créé avec succès."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "L'objet %(verbose_name)s a été mis à jour avec succès."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "L'objet %(verbose_name)s a été supprimé."
Binary file web/lib/django/conf/locale/fr/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/fr/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/fr/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -1,49 +1,60 @@
-# French translation for Django Javascript. 
-# Copyright (C) 2005 Mikaël Barbero
-# This file is distributed under the same license as the Django package. 
+# French translation for Django Javascript.
+# Copyright (C) 2005-2010 Django Software Foundation and individual contributors.
+# This file is distributed under the same license as the Django package.
+#
+# Mikaël Barbero, 2005.
+# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2010.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-11-04 11:14+0100\n"
-"PO-Revision-Date: 2009-03-01 12:43+0100\n"
+"POT-Creation-Date: 2010-04-26 15:45+0200\n"
+"PO-Revision-Date: 2010-04-16 23:56+0200\n"
 "Last-Translator: Stéphane Raimbault <stephane.raimbault@gmail.com>\n"
 "Language-Team: French <http://django-fr.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n>1\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
 msgstr "%s disponible(s)"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "Tout choisir"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "Ajouter"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "Enlever"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
 msgstr "%s choisi(es)"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
 msgstr "Sélectionnez un ou plusieurs choix et cliquez "
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
 msgstr "Tout enlever"
 
+#: contrib/admin/media/js/actions.js:17
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] "%(sel)s sur %(cnt)s sélectionné"
+msgstr[1] "%(sel)s sur %(cnt)s sélectionnés"
+
 #: contrib/admin/media/js/calendar.js:24
 #: contrib/admin/media/js/dateparse.js:32
 msgid ""
@@ -57,62 +68,63 @@
 msgid "S M T W T F S"
 msgstr "D L M M J V S"
 
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Afficher"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Masquer"
+
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
 msgstr "Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi"
 
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Afficher"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Masquer"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Now"
 msgstr "Maintenant"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
 msgid "Clock"
 msgstr "Horloge"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
 msgid "Choose a time"
 msgstr "Choisir une heure"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Midnight"
 msgstr "Minuit"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "6 a.m."
 msgstr "6:00"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "Noon"
 msgstr "Midi"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "Annuler"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "Aujourd'hui"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "Calendrier"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "Hier"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "Demain"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/fr/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,36 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'H:i:s'
+DATETIME_FORMAT = 'j F Y H:i:s'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j N Y'
+SHORT_DATETIME_FORMAT = 'j N Y H:i:s'
+FIRST_DAY_OF_WEEK = 1 # Monday
+DATE_INPUT_FORMATS = (
+    '%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06'
+    '%d.%m.%Y', '%d.%m.%y', # Swiss (fr_CH), '25.10.2006', '25.10.06'
+    '%Y-%m-%d', '%y-%m-%d', # '2006-10-25', '06-10-25'
+    # '%d %B %Y', '%d %b %Y', # '25 octobre 2006', '25 oct. 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S', # '14:30:59'
+    '%H:%M',    # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%d/%m/%Y %H:%M:%S',    # '25/10/2006 14:30:59'
+    '%d/%m/%Y %H:%M',       # '25/10/2006 14:30'
+    '%d/%m/%Y',             # '25/10/2006'
+    '%d.%m.%Y %H:%M:%S',    # Swiss (fr_CH), '25.10.2006 14:30:59'
+    '%d.%m.%Y %H:%M',       # Swiss (fr_CH), '25.10.2006 14:30'
+    '%d.%m.%Y',             # Swiss (fr_CH), '25.10.2006'
+    '%Y-%m-%d %H:%M:%S',    # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',       # '2006-10-25 14:30'
+    '%Y-%m-%d',             # '2006-10-25'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/fy_NL/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/fy_NL/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,4997 @@
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-01-27 09:58-0800\n"
+"PO-Revision-Date: 2010-01-27 22:36-0700\n"
+"Last-Translator: Wim Benes <fryskefirefox@gmail.com>\n"
+"Language-Team: FRISIAN <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr ""
+
+#: forms/models.py:964
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr ""
+
+#: contrib/admin/options.py:1006
+#, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] ""
+msgstr[1] ""
+
+#: db/models/base.py:775
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr ""
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr ""
+
+#: db/models/base.py:790 db/models/base.py:798
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s mei dit %(field_label)s bestiet al."
+
+#: contrib/admin/templates/admin/app_index.html:10
+#: contrib/admin/templates/admin/index.html:19
+#, python-format
+msgid "%(name)s"
+msgstr ""
+
+#: contrib/admin/options.py:860 contrib/admin/options.py:1072
+#, python-format
+msgid "%(name)s object with primary key %(key)r does not exist."
+msgstr ""
+
+#: utils/timesince.py:50
+#, python-format
+msgid "%(number)d %(type)s"
+msgstr ""
+
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr ""
+
+#: template/defaultfilters.py:806
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:54
+#, python-format
+msgid "%(value).1f billion"
+msgid_plural "%(value).1f billion"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:51
+#, python-format
+msgid "%(value).1f million"
+msgid_plural "%(value).1f million"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:57
+#, python-format
+msgid "%(value).1f trillion"
+msgid_plural "%(value).1f trillion"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/defaultfilters.py:811
+#, python-format
+msgid "%.1f GB"
+msgstr ""
+
+#: template/defaultfilters.py:808
+#, python-format
+msgid "%.1f KB"
+msgstr ""
+
+#: template/defaultfilters.py:810
+#, python-format
+msgid "%.1f MB"
+msgstr ""
+
+#: contrib/admin/sites.py:447
+#, python-format
+msgid "%s administration"
+msgstr ""
+
+#: contrib/admindocs/views.py:361
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr ""
+
+#: utils/timesince.py:56
+#, python-format
+msgid ", %(number)d %(type)s"
+msgstr ""
+
+#: contrib/comments/admin.py:60
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/filterspecs.py:44
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:7
+#, python-format
+msgid ""
+"<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:19
+msgid "A Coruna"
+msgstr ""
+
+#: contrib/auth/forms.py:31
+msgid "A user with that username already exists."
+msgstr ""
+
+#: utils/dateformat.py:49
+msgid "AM"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:5
+msgid "Aargau"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:24
+msgid "Action"
+msgstr ""
+
+#: contrib/admin/helpers.py:19
+msgid "Action:"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/index.html:29
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_list.html:57
+#, python-format
+msgid "Add %(name)s"
+msgstr ""
+
+#: contrib/admin/options.py:834
+#, python-format
+msgid "Add %s"
+msgstr ""
+
+#: contrib/admin/widgets.py:238
+msgid "Add Another"
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:33
+#: contrib/admin/templates/admin/edit_inline/tabular.html:78
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr ""
+
+#: contrib/admin/options.py:561
+#, python-format
+msgid "Added %(name)s \"%(object)s\"."
+msgstr ""
+
+#: contrib/flatpages/admin.py:22
+msgid "Advanced options"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:12
+msgid "Aguascalientes"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:26
+msgid "Aichi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:8
+msgid "Akita"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:7
+msgid "Alacant"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:6
+msgid "Albacete"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
+msgid "All"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "All %(total_count)s %(module_name)s selected"
+msgstr ""
+
+#: contrib/admin/templatetags/admin_list.py:240
+msgid "All dates"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:8
+msgid "Almeria"
+msgstr ""
+
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:5
+msgid "Andalusia"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:113
+msgid "Any date"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:5
+msgid "Aomori"
+msgstr ""
+
+#: contrib/admindocs/views.py:190
+#, python-format
+msgid "App %r not found"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:7
+msgid "Appenzell Ausserrhoden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:6
+msgid "Appenzell Innerrhoden"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:12
+msgid "Approve"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:4
+msgid "Approve a comment"
+msgstr ""
+
+#: contrib/comments/admin.py:44
+msgid "Approve selected comments"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "April"
+msgstr ""
+
+#: conf/global_settings.py:44
+msgid "Arabic"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:6
+msgid "Aragon"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:5
+msgid "Arava"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:23
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, python-format
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: contrib/admin/actions.py:67 contrib/admin/options.py:1094
+msgid "Are you sure?"
+msgstr ""
+
+#: conf/global_settings.py:56
+msgid "Argentinean Spanish"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
+msgid "As above, but opens the admin page in a new window."
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:37
+msgid "Asturias"
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Aug."
+msgstr ""
+
+#: utils/dates.py:19
+msgid "August"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:9
+msgid "Avila"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:10
+msgid "Badajoz"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:5
+msgid "Baden-Wuerttemberg"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:13
+msgid "Baja California"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:14
+msgid "Baja California Sur"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:8
+msgid "Balearic Islands"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:11
+msgid "Banovce nad Bebravou"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:8
+msgid "Banska Bystrica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:8
+msgid "Banska Bystrica region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:9
+msgid "Banska Stiavnica"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:12
+msgid "Barcelona"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:10
+msgid "Bardejov"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:9
+msgid "Basel-Land"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:8
+msgid "Basel-Stadt"
+msgstr ""
+
+#: conf/global_settings.py:57
+msgid "Basque"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:9
+msgid "Basque Country"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:6
+msgid "Bavaria"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:11
+msgid "Bedfordshire"
+msgstr ""
+
+#: conf/global_settings.py:45
+msgid "Bengali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:7
+msgid "Berlin"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:10
+msgid "Berne"
+msgstr ""
+
+#: db/models/fields/__init__.py:892
+msgid "Big (8 byte) integer"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:52
+msgid "Bizkaia"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr ""
+
+#: db/models/fields/__init__.py:512
+msgid "Boolean (Either True or False)"
+msgstr ""
+
+#: db/models/fields/__init__.py:923
+msgid "Boolean (Either True, False or None)"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:75
+msgid "Borders"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:8
+msgid "Brandenburg"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:13
+msgid "Bratislava I"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:14
+msgid "Bratislava II"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:15
+msgid "Bratislava III"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:16
+msgid "Bratislava IV"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:17
+msgid "Bratislava V"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:9
+msgid "Bratislava region"
+msgstr ""
+
+#: conf/global_settings.py:81
+msgid "Brazilian Portuguese"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:9
+msgid "Bremen"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:12
+msgid "Brezno"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:12
+msgid "Buckinghamshire"
+msgstr ""
+
+#: conf/global_settings.py:46
+msgid "Bulgarian"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:5
+msgid "Burgenland"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:13
+msgid "Burgos"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:18
+msgid "Bytca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:14
+msgid "Caceres"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:19
+msgid "Cadca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:15
+msgid "Cadiz"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:15
+msgid "Campeche"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:10
+msgid "Canary Islands"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:43
+#: contrib/localflavor/es/es_regions.py:11
+msgid "Cantabria"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:6
+msgid "Carinthia"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:12
+msgid "Carlsbad Region"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:16
+msgid "Castello"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:13
+msgid "Castile and Leon"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:12
+msgid "Castile-La Mancha"
+msgstr ""
+
+#: conf/global_settings.py:47
+msgid "Catalan"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:14
+msgid "Catalonia"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:9
+msgid "Central Bohemian Region"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:76
+msgid "Central Scotland"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:55
+msgid "Ceuta"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:35
+msgid "Change"
+msgstr ""
+
+#: contrib/admin/options.py:925
+#, python-format
+msgid "Change %s"
+msgstr ""
+
+#: contrib/admin/options.py:1124
+#, python-format
+msgid "Change history: %s"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:43
+#: contrib/admin/templates/registration/password_reset_confirm.html:21
+msgid "Change my password"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Change password"
+msgstr ""
+
+#: contrib/auth/admin.py:121
+#, python-format
+msgid "Change password: %s"
+msgstr ""
+
+#: contrib/admin/widgets.py:96
+msgid "Change:"
+msgstr ""
+
+#: contrib/admin/options.py:565
+#, python-format
+msgid "Changed %(list)s for %(name)s \"%(object)s\"."
+msgstr ""
+
+#: contrib/admin/options.py:556
+#, python-format
+msgid "Changed %s."
+msgstr ""
+
+#: contrib/comments/models.py:65
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:14
+msgid "Cheshire"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:17
+msgid "Chiapas"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:15
+msgid "Chiba"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:16
+msgid "Chihuahua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:17
+msgid "Ciudad Real"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:16
+msgid "Clear selection"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:14
+msgid "Click here to select all objects across all pages"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:64
+msgid "Clwyd"
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:18
+msgid "Coahuila"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:19
+msgid "Colima"
+msgstr ""
+
+#: db/models/fields/__init__.py:582
+msgid "Comma-separated integers"
+msgstr ""
+
+#: contrib/comments/forms.py:96
+msgid "Comment"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr ""
+
+#: contrib/comments/admin.py:12
+msgid "Content"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:18
+msgid "Cordoba"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:15
+msgid "Cornwall and Isles of Scilly"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:55
+msgid "County Antrim"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:56
+msgid "County Armagh"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:57
+msgid "County Down"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:58
+msgid "County Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:59
+msgid "County Londonderry"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:60
+msgid "County Tyrone"
+msgstr ""
+
+#: conf/global_settings.py:66
+msgid "Croatian"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:20
+msgid "Cuenca"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:16
+msgid "Cumbria"
+msgstr ""
+
+#: contrib/admin/widgets.py:96
+msgid "Currently:"
+msgstr ""
+
+#: conf/global_settings.py:48
+msgid "Czech"
+msgstr ""
+
+#: utils/translation/trans_real.py:531
+msgid "DATETIME_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:530
+msgid "DATE_FORMAT"
+msgstr "N j, Y"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr ""
+
+#: conf/global_settings.py:50
+msgid "Danish"
+msgstr ""
+
+#: contrib/admin/options.py:970
+msgid "Database error"
+msgstr ""
+
+#: db/models/fields/__init__.py:684
+msgid "Date (with time)"
+msgstr ""
+
+#: db/models/fields/__init__.py:596
+msgid "Date (without time)"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:22
+msgid "Date/time"
+msgstr ""
+
+#: contrib/admin/widgets.py:72
+msgid "Date:"
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Dec."
+msgstr ""
+
+#: utils/dates.py:20
+msgid "December"
+msgstr ""
+
+#: db/models/fields/__init__.py:752
+msgid "Decimal number"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:10
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:291
+msgid "Delete"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+msgid "Delete multiple objects"
+msgstr ""
+
+#: contrib/admin/actions.py:85
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/tabular.html:15
+msgid "Delete?"
+msgstr ""
+
+#: contrib/admin/options.py:570
+#, python-format
+msgid "Deleted %(name)s \"%(object)s\"."
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:16
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:17
+msgid "Derbyshire"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: contrib/auth/models.py:144
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+
+#: contrib/auth/models.py:142
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+
+#: contrib/auth/models.py:143
+msgid ""
+"Designates whether this user should be treated as active. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:20
+msgid "Detva"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:18
+msgid "Devon"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:20
+msgid "Distrito Federal"
+msgstr ""
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr ""
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
+msgid "Documentation bookmarklets"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
+msgid "Documentation for this page"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:21
+msgid "Dolny Kubin"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:19
+msgid "Dorset"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:4
+msgid "Drenthe"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:77
+msgid "Dumfries and Galloway"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:22
+msgid "Dunajska Streda"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:21
+msgid "Durango"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:20
+msgid "Durham"
+msgstr ""
+
+#: conf/global_settings.py:77
+msgid "Dutch"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:65
+msgid "Dyfed"
+msgstr ""
+
+#: contrib/auth/forms.py:101
+msgid "E-mail"
+msgstr ""
+
+#: db/models/fields/__init__.py:807
+msgid "E-mail address"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:21
+msgid "East Sussex"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:4
+msgid "Eastern Cape"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
+msgid "Edit this object (current window)"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
+msgid "Edit this object (new window)"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:41
+msgid "Ehime"
+msgstr ""
+
+#: contrib/comments/forms.py:94
+msgid "Email address"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:90
+msgid "England"
+msgstr ""
+
+#: conf/global_settings.py:53
+msgid "English"
+msgstr ""
+
+#: forms/fields.py:251
+#, python-format
+msgid "Ensure that there are no more than %s decimal places."
+msgstr "Wês wis dat der net mear as %s desimale plakken binne."
+
+#: forms/fields.py:252
+#, python-format
+msgid "Ensure that there are no more than %s digits before the decimal point."
+msgstr "Wês wis dat der net mear as %s sifers foar it desimale punt."
+
+#: forms/fields.py:250
+#, python-format
+msgid "Ensure that there are no more than %s digits in total."
+msgstr "Wês wis dat der yn totaal net mear as %s sifers binne."
+
+#: forms/fields.py:424
+#, python-format
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+
+#: core/validators.py:129
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+
+#: core/validators.py:135
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+
+#: core/validators.py:100
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+
+#: core/validators.py:123 forms/fields.py:197 forms/fields.py:249
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr ""
+
+#: core/validators.py:118 forms/fields.py:196 forms/fields.py:248
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr ""
+
+#: contrib/localflavor/au/forms.py:17
+msgid "Enter a 4 digit post code."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:48
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr ""
+
+#: forms/fields.py:653 forms/fields.py:715 forms/models.py:961
+msgid "Enter a list of values."
+msgstr "Jou in list mei weardes."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr ""
+
+#: forms/fields.py:225 forms/fields.py:247
+msgid "Enter a number."
+msgstr "Jou in nûmer."
+
+#: contrib/localflavor/ar/forms.py:28
+msgid "Enter a postal code in the format NNNN or ANNNNAAA."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:148
+msgid "Enter a postal code in the format XX-XXX."
+msgstr ""
+
+#: contrib/localflavor/ca/forms.py:25
+msgid "Enter a postal code in the format XXX XXX."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
+msgid "Enter a postal code in the format XXXXX or XXX XX."
+msgstr ""
+
+#: contrib/localflavor/jp/forms.py:16
+msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:71
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr ""
+
+#: core/validators.py:88 forms/fields.py:854
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Jou in falida 'slug' gearsteld mei letters, nûmers, ûnderstreekjes of "
+"koppelteken."
+
+#: contrib/localflavor/at/forms.py:48
+msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:19
+msgid "Enter a valid CIF."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:56
+msgid "Enter a valid CNP."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:80
+msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/ca/forms.py:96
+msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:30
+msgid "Enter a valid Chilean RUT."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr ""
+
+#: contrib/localflavor/fi/forms.py:29
+msgid "Enter a valid Finnish social security number."
+msgstr ""
+
+#: contrib/localflavor/de/forms.py:42
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:141
+msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:107
+msgid "Enter a valid IC number."
+msgstr ""
+
+#: core/validators.py:91 forms/fields.py:847
+msgid "Enter a valid IPv4 address."
+msgstr "Jou in falide IPv4-adres."
+
+#: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr ""
+
+#: contrib/localflavor/no/forms.py:34
+msgid "Enter a valid Norwegian social security number."
+msgstr ""
+
+#: contrib/localflavor/nl/forms.py:79
+msgid "Enter a valid SoFi number"
+msgstr ""
+
+#: contrib/localflavor/it/forms.py:44
+msgid "Enter a valid Social Security number."
+msgstr ""
+
+#: contrib/localflavor/za/forms.py:21
+msgid "Enter a valid South African ID number"
+msgstr ""
+
+#: contrib/localflavor/za/forms.py:55
+msgid "Enter a valid South African postal code"
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr ""
+
+#: contrib/localflavor/ch/forms.py:65
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:55
+msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+msgstr ""
+
+#: core/validators.py:69 forms/fields.py:510
+msgid "Enter a valid URL."
+msgstr "Jou in falide URL."
+
+#: contrib/localflavor/it/forms.py:69
+msgid "Enter a valid VAT number."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:50
+msgid "Enter a valid birth number."
+msgstr ""
+
+#: db/models/fields/__init__.py:600
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Jou in falide daum yn JJJJ-MM-DD-formaat."
+
+#: forms/fields.py:309 forms/fields.py:819
+msgid "Enter a valid date."
+msgstr "Jou in falide datum."
+
+#: db/models/fields/__init__.py:682
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
+msgstr "Jou in falide datum/tiid yn JJJ-MM-DD OO:MM[:ss[.uuuuuu]]-formaat."
+
+#: forms/fields.py:363
+msgid "Enter a valid date/time."
+msgstr "Jou in falide datum.tiid."
+
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:85 forms/fields.py:414
+msgid "Enter a valid e-mail address."
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:40
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr ""
+
+#: contrib/localflavor/nl/forms.py:22
+msgid "Enter a valid postal code"
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:194
+msgid "Enter a valid postal code in the format XXXXXX"
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:20
+msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
+msgstr ""
+
+#: contrib/localflavor/uk/forms.py:21
+msgid "Enter a valid postcode."
+msgstr ""
+
+#: db/models/fields/__init__.py:1027
+msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
+msgstr "Jou in falide tiid yn OO:MM[:ss[.uuuuuu]]-formaat."
+
+#: forms/fields.py:337 forms/fields.py:820
+msgid "Enter a valid time."
+msgstr "Jou in falide tiid."
+
+#: core/validators.py:19 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Jou in falide wearde."
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr ""
+
+#: contrib/localflavor/it/forms.py:15
+msgid "Enter a valid zip code."
+msgstr ""
+
+#: forms/fields.py:195
+msgid "Enter a whole number."
+msgstr "Jou in folslein nûmer."
+
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
+msgid "Enter a zip code in the format XXXX."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:22
+msgid "Enter a zip code in the format XXXXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
+msgid "Enter a zip code in the format XXXXX."
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
+msgid "Enter a zip code in the format XXXXXXX."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:12
+msgid "Enter new password"
+msgstr ""
+
+#: core/validators.py:94 db/models/fields/__init__.py:587
+msgid "Enter only digits separated by commas."
+msgstr "Jou allinnich sifers, skieden troch komma's."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:22
+msgid "Essex"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:26
+msgid "Estado de México"
+msgstr ""
+
+#: conf/global_settings.py:55
+msgid "Estonian"
+msgstr ""
+
+#: contrib/flatpages/admin.py:9
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+
+#: contrib/flatpages/models.py:12
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:15
+msgid "Extremadura"
+msgstr ""
+
+#: utils/dates.py:31
+msgid "Feb."
+msgstr ""
+
+#: utils/dates.py:18
+msgid "February"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr ""
+
+#: db/models/fields/__init__.py:72
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr ""
+
+#: contrib/admindocs/views.py:271
+#, python-format
+msgid "Fields on %s objects"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:78
+msgid "Fife"
+msgstr ""
+
+#: db/models/fields/__init__.py:814 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_list.html:76
+msgid "Filter"
+msgstr ""
+
+#: conf/global_settings.py:59
+msgid "Finnish"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:12
+msgid "Flag"
+msgstr ""
+
+#: contrib/comments/admin.py:40
+msgid "Flag selected comments"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:4
+msgid "Flag this comment"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:5
+msgid "Flevoland"
+msgstr ""
+
+#: db/models/fields/__init__.py:839
+msgid "Floating point number"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:20
+msgid "Foral Community of Navarre"
+msgstr ""
+
+#: db/models/fields/related.py:757
+msgid "Foreign Key (type determined by related field)"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:5
+msgid "Free State"
+msgstr ""
+
+#: conf/global_settings.py:60
+msgid "French"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Fri"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:11
+msgid "Fribourg"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:6
+msgid "Friesland"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:23
+msgid "Fukui"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:43
+msgid "Fukuoka"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:10
+msgid "Fukushima"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:23
+msgid "Galanta"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:16
+msgid "Galicia"
+msgstr ""
+
+#: conf/global_settings.py:62
+msgid "Galician"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:6
+msgid "Gauteng"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:7
+msgid "Gelderland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:24
+msgid "Gelnica"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:12
+msgid "Geneva"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:293
+msgid "Geometry collection"
+msgstr ""
+
+#: conf/global_settings.py:70
+msgid "Georgian"
+msgstr ""
+
+#: conf/global_settings.py:51
+msgid "German"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:24
+msgid "Gifu"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:21
+msgid "Girona"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:13
+msgid "Glarus"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:23
+msgid "Gloucestershire"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:79
+msgid "Grampian"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:22
+msgid "Granada"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:14
+msgid "Graubuenden"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:24
+msgid "Greater London"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:25
+msgid "Greater Manchester"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:22
+msgid "Greater Poland"
+msgstr ""
+
+#: conf/global_settings.py:52
+msgid "Greek"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:8
+msgid "Groningen"
+msgstr ""
+
+#: contrib/auth/admin.py:29
+msgid "Groups"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:23
+msgid "Guadalajara"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:23
+msgid "Guanajuato"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:22
+msgid "Guerrero"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:24
+msgid "Guipuzkoa"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:13
+msgid "Gunma"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:66
+msgid "Gwent"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:67
+msgid "Gwynedd"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:10
+msgid "Hamburg"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:26
+msgid "Hampshire"
+msgstr ""
+
+#: conf/global_settings.py:64
+msgid "Hebrew"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:27
+msgid "Hertfordshire"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:11
+msgid "Hessen"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:24
+msgid "Hidalgo"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:80
+msgid "Highland"
+msgstr ""
+
+#: conf/global_settings.py:65
+msgid "Hindi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:37
+msgid "Hiroshima"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:28
+#: contrib/admin/templates/admin/object_history.html:10
+msgid "History"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:25
+msgid "Hlohovec"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:4
+msgid "Hokkaido"
+msgstr ""
+
+#: db/models/fields/related.py:959
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"Hâld \"Control\", of \"Command\" op in Mac del, om mear as ien te "
+"selektearjen."
+
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/app_index.html:8
+#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:36
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/object_history.html:6
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Home"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:15
+msgid "Hradec Region"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:25
+msgid "Huelva"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:26
+msgid "Huesca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:26
+msgid "Humenne"
+msgstr ""
+
+#: conf/global_settings.py:63
+msgid "Hungarian"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:31
+msgid "Hyogo"
+msgstr ""
+
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:905
+msgid "IP address"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:11
+msgid "Ibaraki"
+msgstr ""
+
+#: conf/global_settings.py:67
+msgid "Icelandic"
+msgstr ""
+
+#: contrib/flatpages/models.py:13
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+
+#: contrib/comments/forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:27
+msgid "Ilava"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:11
+msgid "Illes Balears"
+msgstr ""
+
+#: contrib/auth/admin.py:28
+msgid "Important dates"
+msgstr ""
+
+#: contrib/auth/models.py:148
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+
+#: db/models/fields/__init__.py:471 db/models/fields/__init__.py:867
+#: db/models/fields/__init__.py:963 db/models/fields/__init__.py:974
+#: db/models/fields/__init__.py:1001
+msgid "Integer"
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:135
+msgid "Invalid CNPJ number."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:95
+msgid "Invalid CPF number."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:81
+msgid "Invalid CUIT."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:71
+msgid "Invalid checksum for CIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:69
+msgid "Invalid checksum for NIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:144
+msgid "Invalid checksum for bank account number."
+msgstr ""
+
+#: db/models/fields/__init__.py:601
+#, python-format
+msgid "Invalid date: %s"
+msgstr "Foute datum: %s"
+
+#: contrib/gis/forms/fields.py:19
+msgid "Invalid geometry type."
+msgstr ""
+
+#: contrib/gis/forms/fields.py:18
+msgid "Invalid geometry value."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+
+#: conf/global_settings.py:61
+msgid "Irish"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:22
+msgid "Ishikawa"
+msgstr ""
+
+#: conf/global_settings.py:68
+msgid "Italian"
+msgstr ""
+
+#: contrib/admin/options.py:736
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:6
+msgid "Iwate"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:27
+msgid "Jaen"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:25
+msgid "Jalisco"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: utils/dates.py:31
+msgid "Jan."
+msgstr ""
+
+#: utils/dates.py:18
+msgid "January"
+msgstr ""
+
+#: conf/global_settings.py:69
+msgid "Japanese"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: utils/dates.py:19 utils/dates.py:31
+msgid "July"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "June"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:15
+msgid "Jura"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:40
+msgid "Kagawa"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:49
+msgid "Kagoshima"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:17
+msgid "Kanagawa"
+msgstr ""
+
+#: conf/global_settings.py:73
+msgid "Kannada"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:28
+msgid "Kent"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:28
+msgid "Kezmarok"
+msgstr ""
+
+#: conf/global_settings.py:72
+msgid "Khmer"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:42
+msgid "Kochi"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:29
+msgid "Komarno"
+msgstr ""
+
+#: conf/global_settings.py:71
+msgid "Korean"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:34
+msgid "Kosice - okolie"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:30
+msgid "Kosice I"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:31
+msgid "Kosice II"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:32
+msgid "Kosice III"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:33
+msgid "Kosice IV"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:10
+msgid "Kosice region"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:35
+msgid "Krupina"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:46
+msgid "Kumamoto"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:9
+msgid "Kuyavia-Pomerania"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:7
+msgid "KwaZulu-Natal"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:29
+msgid "Kyoto"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:36
+msgid "Kysucke Nove Mesto"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:30
+#: contrib/localflavor/es/es_regions.py:17
+msgid "La Rioja"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:29
+msgid "Lancashire"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:39
+msgid "Las Palmas"
+msgstr ""
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr ""
+
+#: conf/global_settings.py:74
+msgid "Latvian"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:30
+msgid "Leicestershire"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:28
+msgid "Leon"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:13
+msgid "Lesser Poland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:37
+msgid "Levice"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:38
+msgid "Levoca"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:14
+msgid "Liberec Region"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:9
+msgid "Limburg"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:8
+msgid "Limpopo"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:31
+msgid "Lincolnshire"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:273
+msgid "Line string"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:39
+msgid "Liptovsky Mikulas"
+msgstr ""
+
+#: conf/global_settings.py:75
+msgid "Lithuanian"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:29
+msgid "Lleida"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:12
+msgid "Lodz"
+msgstr ""
+
+#: contrib/admin/sites.py:402 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/templates/registration/password_reset_complete.html:14
+#: contrib/admin/views/decorators.py:20
+msgid "Log in"
+msgstr ""
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Log out"
+msgstr ""
+
+#: contrib/auth/views.py:60
+msgid "Logged out"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/admin/sites.py:313 contrib/admin/views/decorators.py:47
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+
+#: contrib/admin/widgets.py:126
+msgid "Lookup"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:81
+msgid "Lothian"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:7
+msgid "Lower Austria"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:13
+msgid "Lower Saxony"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:8
+msgid "Lower Silesia"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:10
+msgid "Lublin"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:11
+msgid "Lubusz"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:40
+msgid "Lucenec"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:16
+msgid "Lucerne"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:31
+msgid "Lugo"
+msgstr ""
+
+#: utils/translation/trans_real.py:554
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
+
+#: conf/global_settings.py:76
+msgid "Macedonian"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:32
+#: contrib/localflavor/es/es_regions.py:18
+msgid "Madrid"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:41
+msgid "Malacky"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:33
+msgid "Malaga"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: db/models/fields/related.py:939
+msgid "Many-to-many relationship"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "March"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:42
+msgid "Martin"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:14
+msgid "Masovia"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "May"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:12
+msgid "Mecklenburg-Western Pomerania"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:43
+msgid "Medzilaborce"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:56
+msgid "Melilla"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:32
+msgid "Merseyside"
+msgstr ""
+
+#: contrib/comments/admin.py:15
+msgid "Metadata"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:44
+msgid "Michalovce"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:27
+msgid "Michoacán"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:68
+msgid "Mid Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:27
+msgid "Mie"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:7
+msgid "Miyagi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:48
+msgid "Miyazaki"
+msgstr ""
+
+#: db/models/fields/related.py:755
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr ""
+
+#: contrib/admindocs/views.py:197
+#, python-format
+msgid "Model %(model_name)r not found in app %(app_label)r"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Mon"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:21
+msgid "Moravian-Silesian Region"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:28
+msgid "Morelos"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:9
+msgid "Mpumalanga"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:289
+msgid "Multi polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:285
+msgid "Multi-line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:281
+msgid "Multi-point"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:34
+msgid "Murcia"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:54
+msgid "My Actions"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:45
+msgid "Myjava"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:19
+msgid "Nagano"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:45
+msgid "Nagasaki"
+msgstr ""
+
+#: contrib/comments/forms.py:93
+msgid "Name"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:46
+msgid "Namestovo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:32
+msgid "Nara"
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:38
+msgid "National Identification Number consists of 11 digits."
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:35
+msgid "Navarre"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:29
+msgid "Nayarit"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:17
+msgid "Neuchatel"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr ""
+
+#: contrib/auth/forms.py:145
+msgid "New password confirmation"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:18
+msgid "Nidwalden"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:20
+msgid "Niigata"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:47
+msgid "Nitra"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:11
+msgid "Nitra region"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
+msgid "No"
+msgstr ""
+
+#: contrib/admin/options.py:754
+msgid "No action selected."
+msgstr ""
+
+#: contrib/admin/options.py:574
+msgid "No fields changed."
+msgstr ""
+
+#: forms/fields.py:422
+msgid "No file was submitted."
+msgstr "Der is gjin bestân yntsjinne."
+
+#: forms/fields.py:421
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+"Der is gjin bestân yntsjinne. Kontrolearje it kodearringstype op it "
+"formulier."
+
+#: contrib/gis/forms/fields.py:17
+msgid "No geometry value provided."
+msgstr ""
+
+#: contrib/admin/options.py:137 contrib/admin/options.py:152
+msgid "None"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:58
+msgid "None available"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:10
+msgid "Noord-Brabant"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:11
+msgid "Noord-Holland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:33
+msgid "Norfolk"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:14
+msgid "North Rhine-Westphalia"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:11
+msgid "North West"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:34
+msgid "North Yorkshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:35
+msgid "Northamptonshire"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:10
+msgid "Northern Cape"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:91
+msgid "Northern Ireland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:36
+msgid "Northumberland"
+msgstr ""
+
+#: conf/global_settings.py:78
+msgid "Norwegian"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:37
+msgid "Nottinghamshire"
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Nov."
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:48
+msgid "Nove Mesto nad Vahom"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:49
+msgid "Nove Zamky"
+msgstr ""
+
+#: utils/dates.py:19
+msgid "November"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:30
+msgid "Nuevo León"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:31
+msgid "Oaxaca"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:19
+msgid "Obwalden"
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Oct."
+msgstr ""
+
+#: utils/dates.py:19
+msgid "October"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:47
+msgid "Oita"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:36
+msgid "Okayama"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:50
+msgid "Okinawa"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:19
+msgid "Olomouc Region"
+msgstr ""
+
+#: contrib/admin/util.py:175
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr ""
+
+#: contrib/admin/util.py:170
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr ""
+
+#: db/models/fields/related.py:879
+msgid "One-to-one relationship"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:15
+msgid "Opole"
+msgstr ""
+
+#: forms/formsets.py:287 forms/formsets.py:289
+msgid "Order"
+msgstr "Oarder"
+
+#: contrib/localflavor/uk/uk_regions.py:82
+msgid "Orkney Islands"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:30
+msgid "Osaka"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:36
+msgid "Ourense"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:12
+msgid "Overijssel"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:38
+msgid "Oxfordshire"
+msgstr ""
+
+#: utils/dateformat.py:48
+msgid "PM"
+msgstr ""
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:38
+msgid "Palencia"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:16
+msgid "Pardubice Region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:50
+msgid "Partizanske"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "Password change"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr ""
+
+#: contrib/auth/admin.py:111
+msgid "Password changed successfully."
+msgstr ""
+
+#: contrib/auth/forms.py:18
+msgid "Password confirmation"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_form.html:10
+msgid "Password reset"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_complete.html:6
+#: contrib/admin/templates/registration/password_reset_complete.html:10
+msgid "Password reset complete"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+msgid "Password reset confirmation"
+msgstr ""
+
+#: contrib/auth/forms.py:136
+#, python-format
+msgid "Password reset on %s"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:26
+msgid "Password reset unsuccessful"
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Password:"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:117
+msgid "Past 7 days"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/auth/admin.py:27
+msgid "Permissions"
+msgstr ""
+
+#: conf/global_settings.py:58
+msgid "Persian"
+msgstr ""
+
+#: contrib/auth/admin.py:26
+msgid "Personal info"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:51
+msgid "Pezinok"
+msgstr ""
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr ""
+
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:31
+msgid "Phone numbers must be in XX-XXXX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:171
+msgid "Phone numbers must be in XXXX-XXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:52
+msgid "Piestany"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:11
+msgid "Pilsen Region"
+msgstr ""
+
+#: forms/models.py:542
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+
+#: forms/models.py:538
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr ""
+
+#: forms/models.py:548
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+
+#: forms/models.py:556
+msgid "Please correct the duplicate values below."
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:11
+msgid "Please correct the error below"
+msgid_plural "Please correct the errors below"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:68
+msgid "Please enter a valid NIF or NIE."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:67
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr ""
+
+#: db/models/fields/related.py:1020
+#, python-format
+msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] ""
+"Jou asjobleaft falide %(self)s IDs. De wearde %(value)r is net goed."
+msgstr[1] ""
+"Jou asjobleaft falide %(self)s IDs. De wearden %(value)r binne net goed."
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:14
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+msgid "Please go to the following page and choose a new password:"
+msgstr ""
+
+#: contrib/admin/sites.py:306 contrib/admin/views/decorators.py:40
+msgid "Please log in again, because your session has expired."
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:17
+msgid "Podlasie"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:269
+msgid "Point"
+msgstr ""
+
+#: conf/global_settings.py:79
+msgid "Polish"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:53
+msgid "Poltar"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:277
+msgid "Polygon"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:18
+msgid "Pomerania"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:40
+msgid "Pontevedra"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:54
+msgid "Poprad"
+msgstr ""
+
+#: conf/global_settings.py:80
+msgid "Portuguese"
+msgstr ""
+
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
+msgid "Post"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "Post your comment"
+msgstr ""
+
+#: contrib/comments/models.py:153
+#, python-format
+msgid ""
+"Posted by %(user)s at %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:55
+msgid "Povazska Bystrica"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:69
+msgid "Powys"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:8
+msgid "Prague"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:56
+msgid "Presov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:12
+msgid "Presov region"
+msgstr ""
+
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
+msgid "Preview"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:4
+#: contrib/comments/templates/comments/preview.html:13
+msgid "Preview your comment"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:57
+msgid "Prievidza"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:7
+msgid "Principality of Asturias"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:58
+msgid "Puchov"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:32
+msgid "Puebla"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:33
+msgid "Querétaro"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:34
+msgid "Quintana Roo"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:7
+msgid "Really flag this comment?"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:7
+msgid "Really make this comment public?"
+msgstr ""
+
+#: contrib/comments/templates/comments/delete.html:7
+msgid "Really remove this comment?"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "Recent Actions"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:19
+msgid "Region of Murcia"
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:36
+#: contrib/admin/templates/admin/edit_inline/tabular.html:81
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr ""
+
+#: contrib/comments/templates/comments/delete.html:4
+msgid "Remove a comment"
+msgstr ""
+
+#: contrib/comments/admin.py:48
+msgid "Remove selected comments"
+msgstr ""
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+#: contrib/auth/models.py:137
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:59
+msgid "Revuca"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:15
+msgid "Rhineland-Palatinate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:60
+msgid "Rimavska Sobota"
+msgstr ""
+
+#: conf/global_settings.py:82
+msgid "Romanian"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:61
+msgid "Roznava"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr ""
+
+#: conf/global_settings.py:83
+msgid "Russian"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:62
+msgid "Ruzomberok"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:16
+msgid "Saarland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:63
+msgid "Sabinov"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:44
+msgid "Saga"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:14
+msgid "Saitama"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:73
+msgid "Sala"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:41
+msgid "Salamanca"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:9
+msgid "Salzburg"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:36
+msgid "San Luis Potosí"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:42
+msgid "Santa Cruz de Tenerife"
+msgstr ""
+
+#: utils/dates.py:11
+msgid "Sat"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr ""
+
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr ""
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and add another"
+msgstr ""
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save and continue editing"
+msgstr ""
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save as new"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:17
+msgid "Saxony"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:18
+msgid "Saxony-Anhalt"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:20
+msgid "Schaffhausen"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:19
+msgid "Schleswig-Holstein"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:21
+msgid "Schwyz"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:92
+msgid "Scotland"
+msgstr ""
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Search"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:44
+msgid "Segovia"
+msgstr ""
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s"
+msgstr ""
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s to change"
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:59
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
+msgstr ""
+
+#: forms/fields.py:577 forms/fields.py:652
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr ""
+"Selektearje in falide kar. %(value)s is net ien fan de beskikbere karren."
+
+#: forms/models.py:962
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Selektearje in falide kar. %s is net ien fan de beskikbere karren."
+
+#: forms/models.py:886
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+"Selektearje in falide kar. Dizze kar is net ien fan de beskikbere karren."
+
+#: contrib/admin/templates/admin/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:64
+msgid "Senec"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:65
+msgid "Senica"
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Sept."
+msgstr ""
+
+#: utils/dates.py:19
+msgid "September"
+msgstr ""
+
+#: conf/global_settings.py:86
+msgid "Serbian"
+msgstr ""
+
+#: conf/global_settings.py:87
+msgid "Serbian Latin"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:45
+msgid "Seville"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:83
+msgid "Shetland Islands"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:28
+msgid "Shiga"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:35
+msgid "Shimane"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:25
+msgid "Shizuoka"
+msgstr ""
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
+msgid "Show object ID"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:39
+msgid "Shropshire"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:19
+msgid "Silesia"
+msgstr ""
+
+#: conf/global_settings.py:94
+msgid "Simplified Chinese"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:35
+msgid "Sinaloa"
+msgstr ""
+
+#: contrib/admin/sites.py:388
+msgid "Site administration"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:66
+msgid "Skalica"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: conf/global_settings.py:84
+msgid "Slovak"
+msgstr ""
+
+#: conf/global_settings.py:85
+msgid "Slovenian"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:67
+msgid "Snina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:68
+msgid "Sobrance"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:22
+msgid "Solothurn"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:40
+msgid "Somerset"
+msgstr ""
+
+#: contrib/admin/templates/admin/invalid_setup.html:7
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:37
+msgid "Sonora"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:46
+msgid "Soria"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:10
+msgid "South Bohemian Region"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:70
+msgid "South Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:18
+msgid "South Moravian Region"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:41
+msgid "South Yorkshire"
+msgstr ""
+
+#: conf/global_settings.py:54
+msgid "Spanish"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:69
+msgid "Spisska Nova Ves"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:23
+msgid "St. Gallen"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:42
+msgid "Staffordshire"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:70
+msgid "Stara Lubovna"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:84
+msgid "Strathclyde"
+msgstr ""
+
+#: db/models/fields/__init__.py:554 db/models/fields/__init__.py:984
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:71
+msgid "Stropkov"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:10
+msgid "Styria"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:16
+msgid "Subcarpatia"
+msgstr ""
+
+#: contrib/admin/actions.py:60
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:43
+msgid "Suffolk"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: utils/dates.py:11
+msgid "Sun"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:44
+msgid "Surrey"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:72
+msgid "Svidnik"
+msgstr ""
+
+#: conf/global_settings.py:88
+msgid "Swedish"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:20
+msgid "Swietokrzyskie"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr ""
+
+#: utils/translation/trans_real.py:532
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: contrib/localflavor/mx/mx_states.py:38
+msgid "Tabasco"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:39
+msgid "Tamaulipas"
+msgstr ""
+
+#: conf/global_settings.py:89
+msgid "Tamil"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:47
+msgid "Tarragona"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:85
+msgid "Tayside"
+msgstr ""
+
+#: conf/global_settings.py:90
+msgid "Telugu"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:48
+msgid "Teruel"
+msgstr ""
+
+#: db/models/fields/__init__.py:1007
+msgid "Text"
+msgstr ""
+
+#: conf/global_settings.py:91
+msgid "Thai"
+msgstr ""
+
+#: contrib/comments/templates/comments/posted.html:7
+msgid "Thank you for your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/approved.html:4
+msgid "Thanks for approving"
+msgstr ""
+
+#: contrib/comments/templates/comments/posted.html:4
+msgid "Thanks for commenting"
+msgstr ""
+
+#: contrib/comments/templates/comments/flagged.html:4
+msgid "Thanks for flagging"
+msgstr ""
+
+#: contrib/comments/templates/comments/deleted.html:4
+msgid "Thanks for removing"
+msgstr ""
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr ""
+
+#: contrib/comments/templates/comments/approved.html:7
+#: contrib/comments/templates/comments/deleted.html:7
+#: contrib/comments/templates/comments/flagged.html:7
+msgid ""
+"Thanks for taking the time to improve the quality of discussion on our site"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Thanks for using our site!"
+msgstr ""
+
+#: contrib/auth/forms.py:110
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+
+#: contrib/admin/options.py:640
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr ""
+
+#: contrib/admin/options.py:683
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+
+#: contrib/admin/options.py:675
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr ""
+
+#: contrib/admin/options.py:1087
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+#, python-format
+msgid "The %(site_name)s team"
+msgstr ""
+
+#: views/generic/create_update.py:115
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "De %(verbose_name)s is súksesfol oanmakke."
+
+#: views/generic/create_update.py:201
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "De %(verbose_name)s is fuortsmiten."
+
+#: views/generic/create_update.py:158
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "De %(verbose_name)s is súksesfol fernijd."
+
+#: contrib/localflavor/cl/forms.py:32
+msgid "The Chilean RUT is not valid."
+msgstr ""
+
+#: contrib/localflavor/is_/forms.py:19
+msgid "The Icelandic identification number is not valid."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: forms/models.py:820
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:28
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used.  Please request a new password reset."
+msgstr ""
+
+#: forms/fields.py:423
+msgid "The submitted file is empty."
+msgstr "It yntsjinne bestân is leech."
+
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
+msgid "The two password fields didn't match."
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+
+#: core/validators.py:71 forms/fields.py:511
+msgid "This URL appears to be a broken link."
+msgstr "Dit URL liket in ferbrutsen keppeling."
+
+#: contrib/auth/forms.py:83
+msgid "This account is inactive."
+msgstr ""
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+
+#: contrib/comments/models.py:128
+msgid ""
+"This comment was posted by an authenticated user and thus the email is read-"
+"only."
+msgstr ""
+
+#: contrib/comments/models.py:119
+msgid ""
+"This comment was posted by an authenticated user and thus the name is read-"
+"only."
+msgstr ""
+
+#: db/models/fields/__init__.py:67
+msgid "This field cannot be blank."
+msgstr ""
+
+#: db/models/fields/__init__.py:66
+msgid "This field cannot be null."
+msgstr "Dit fjild kin net leech wêze."
+
+#: forms/fields.py:65
+msgid "This field is required."
+msgstr "Dit fjild is fereaske."
+
+#: contrib/localflavor/pe/forms.py:53
+msgid "This field requires 11 digits."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:51
+msgid "This field requires 7 or 8 digits."
+msgstr ""
+
+#: contrib/localflavor/pe/forms.py:25
+msgid "This field requires 8 digits."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:137
+msgid "This field requires at least 14 digits"
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:96
+msgid "This field requires at most 11 digits or 14 characters."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
+msgid "This field requires only numbers."
+msgstr ""
+
+#: contrib/admin/filterspecs.py:119
+msgid "This month"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:38
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+
+#: db/models/fields/__init__.py:750
+msgid "This value must be a decimal number."
+msgstr "Dizze wearde moat in desimaal nûmer wêze."
+
+#: db/models/fields/__init__.py:837 db/models/fields/__init__.py:865
+msgid "This value must be a float."
+msgstr ""
+
+#: db/models/fields/__init__.py:475
+msgid "This value must be an integer."
+msgstr "Dizze wearde moat in integer wêze."
+
+#: db/models/fields/__init__.py:921
+msgid "This value must be either None, True or False."
+msgstr "Dizze wearde moat of Gjin, of Wier of Net wier wêze."
+
+#: db/models/fields/__init__.py:510
+msgid "This value must be either True or False."
+msgstr "Dizze wearde moat of Wier of Net wier wêze."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value must contain only letters, numbers and underscores."
+msgstr ""
+
+#: contrib/flatpages/admin.py:11
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+
+#: contrib/admin/filterspecs.py:121
+msgid "This year"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Thu"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:24
+msgid "Thurgau"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:20
+msgid "Thuringia"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:25
+msgid "Ticino"
+msgstr ""
+
+#: db/models/fields/__init__.py:1023
+msgid "Time"
+msgstr ""
+
+#: contrib/admin/widgets.py:72
+msgid "Time:"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:40
+msgid "Tlaxcala"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:12
+msgid "Tochigi"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:114
+msgid "Today"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:39
+msgid "Tokushima"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:16
+msgid "Tokyo"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:49
+msgid "Toledo"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:74
+msgid "Topolcany"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:34
+msgid "Tottori"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:21
+msgid "Toyama"
+msgstr ""
+
+#: conf/global_settings.py:95
+msgid "Traditional Chinese"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:75
+msgid "Trebisov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:76
+msgid "Trencin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:13
+msgid "Trencin region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:77
+msgid "Trnava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:14
+msgid "Trnava region"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Tue"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:78
+msgid "Turcianske Teplice"
+msgstr ""
+
+#: conf/global_settings.py:92
+msgid "Turkish"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:79
+msgid "Tvrdosin"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:45
+msgid "Tyne and Wear"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:11
+msgid "Tyrol"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr ""
+
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1103
+msgid "URL"
+msgstr ""
+
+#: conf/global_settings.py:93
+msgid "Ukrainian"
+msgstr ""
+
+#: contrib/comments/models.py:62
+msgid ""
+"Uncheck this box to make the comment effectively disappear from the site."
+msgstr ""
+
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
+msgid "Unknown"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr ""
+
+#: forms/fields.py:459
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Laad in falide ôfbylding op. It bestân dy't jo opladen hawwe wie net in "
+"ôfbylding of in skansearre ôfbylding."
+
+#: contrib/localflavor/at/at_states.py:8
+msgid "Upper Austria"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:26
+msgid "Uri"
+msgstr ""
+
+#: contrib/auth/models.py:141
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:23
+msgid "User"
+msgstr ""
+
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:19
+msgid "Username:"
+msgstr ""
+
+#: contrib/admin/sites.py:329 contrib/admin/sites.py:335
+#: contrib/admin/views/decorators.py:66
+msgid "Usernames cannot contain the '@' character."
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:13
+msgid "Usti Region"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:13
+msgid "Utrecht"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:27
+msgid "Valais"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:50
+msgid "Valencia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:21
+msgid "Valencian Community"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:51
+msgid "Valladolid"
+msgstr ""
+
+#: db/models/fields/__init__.py:65
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:28
+msgid "Vaud"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:80
+msgid "Velky Krtis"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:41
+msgid "Veracruz"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:13
+msgid "Vienna"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
+msgid "View on site"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:12
+msgid "Vorarlberg"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:81
+msgid "Vranov nad Toplou"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:17
+msgid "Vysocina Region"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:33
+msgid "Wakayama"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:93
+msgid "Wales"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:21
+msgid "Warmia-Masuria"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:46
+msgid "Warwickshire"
+msgstr ""
+
+#: contrib/comments/forms.py:175
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/formtools/wizard.py:132
+msgid ""
+"We apologize, but your form has expired. Please continue filling out the "
+"form from this page."
+msgstr ""
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Wed"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:27
+msgid "Welcome,"
+msgstr ""
+
+#: conf/global_settings.py:49
+msgid "Welsh"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:71
+msgid "West Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:47
+msgid "West Midlands"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:23
+msgid "West Pomerania"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:48
+msgid "West Sussex"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:49
+msgid "West Yorkshire"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:12
+msgid "Western Cape"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:86
+msgid "Western Isles"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:50
+msgid "Wiltshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:51
+msgid "Worcestershire"
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:110
+msgid "Wrong checksum for the National Business Register Number (REGON)."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:39
+msgid "Wrong checksum for the National Identification Number."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:72
+msgid "Wrong checksum for the Tax Number (NIP)."
+msgstr ""
+
+#: db/models/fields/__init__.py:1111
+msgid "XML text"
+msgstr ""
+
+#: utils/translation/trans_real.py:553
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: contrib/localflavor/jp/jp_prefectures.py:9
+msgid "Yamagata"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:38
+msgid "Yamaguchi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:18
+msgid "Yamanashi"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
+msgid "Yes"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:45
+msgid "You don't have permission to edit anything."
+msgstr ""
+
+#: contrib/admin/options.py:654 contrib/admin/options.py:687
+#, python-format
+msgid "You may add another %s below."
+msgstr ""
+
+#: contrib/admin/options.py:644 contrib/admin/options.py:677
+msgid "You may edit it again below."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr ""
+
+#: contrib/auth/forms.py:88
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+
+#: contrib/admin/sites.py:332 contrib/admin/views/decorators.py:62
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr ""
+
+#: contrib/auth/forms.py:178
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_complete.html:12
+msgid "Your password has been set.  You may go ahead and log in now."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:9
+msgid "Your username, in case you've forgotten:"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:42
+msgid "Yucatán"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:43
+msgid "Zacatecas"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:53
+msgid "Zamora"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:54
+msgid "Zaragoza"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:84
+msgid "Zarnovica"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:14
+msgid "Zeeland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:85
+msgid "Ziar nad Hronom"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:86
+msgid "Zilina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:15
+msgid "Zilina region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:82
+msgid "Zlate Moravce"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:20
+msgid "Zlin Region"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:29
+msgid "Zug"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:15
+msgid "Zuid-Holland"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:30
+msgid "Zurich"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:83
+msgid "Zvolen"
+msgstr ""
+
+#: utils/dateformat.py:43
+msgid "a.m."
+msgstr ""
+
+#: contrib/admin/models.py:24
+msgid "action flag"
+msgstr ""
+
+#: contrib/admin/models.py:19
+msgid "action time"
+msgstr ""
+
+#: contrib/auth/models.py:143
+msgid "active"
+msgstr ""
+
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
+#, python-format
+msgid "all %s"
+msgstr ""
+
+#: contrib/admin/options.py:556 contrib/admin/options.py:566
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:797
+#: forms/models.py:544
+msgid "and"
+msgstr ""
+
+#: contrib/comments/admin.py:43
+msgid "approved"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "apr"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "aug"
+msgstr ""
+
+#: contrib/admin/models.py:25
+msgid "change message"
+msgstr ""
+
+#: contrib/auth/models.py:68
+msgid "codename"
+msgstr ""
+
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
+msgid "comment"
+msgstr ""
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr ""
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr ""
+
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr ""
+
+#: contrib/flatpages/models.py:9
+msgid "content"
+msgstr ""
+
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
+msgid "content type"
+msgstr ""
+
+#: contrib/contenttypes/models.py:82
+msgid "content types"
+msgstr ""
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr ""
+
+#: contrib/auth/models.py:146
+msgid "date joined"
+msgstr ""
+
+#: contrib/comments/models.py:59
+msgid "date/time submitted"
+msgstr ""
+
+#: utils/timesince.py:24
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/dates.py:24
+msgid "dec"
+msgstr ""
+
+#: contrib/sites/models.py:33
+msgid "display name"
+msgstr ""
+
+#: contrib/sites/models.py:32
+msgid "domain name"
+msgstr ""
+
+#: contrib/auth/models.py:140
+msgid "e-mail address"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "eight"
+msgstr ""
+
+#: contrib/flatpages/models.py:10
+msgid "enable comments"
+msgstr ""
+
+#: contrib/sessions/models.py:48
+msgid "expire date"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "feb"
+msgstr ""
+
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
+msgid "filter:"
+msgstr ""
+
+#: contrib/auth/models.py:138
+msgid "first name"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "five"
+msgstr ""
+
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr ""
+
+#: contrib/comments/admin.py:39
+msgid "flagged"
+msgstr ""
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr ""
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "four"
+msgstr ""
+
+#: contrib/auth/models.py:98
+msgid "group"
+msgstr ""
+
+#: contrib/auth/models.py:99 contrib/auth/models.py:147
+msgid "groups"
+msgstr ""
+
+#: utils/timesince.py:25
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/models.py:61
+msgid "is public"
+msgstr ""
+
+#: contrib/comments/models.py:64
+msgid "is removed"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "jan"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "jul"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "jun"
+msgstr ""
+
+#: contrib/auth/models.py:145
+msgid "last login"
+msgstr ""
+
+#: contrib/auth/models.py:139
+msgid "last name"
+msgstr ""
+
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr ""
+
+#: contrib/admin/models.py:29
+msgid "log entries"
+msgstr ""
+
+#: contrib/admin/models.py:28
+msgid "log entry"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "mar"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "may"
+msgstr ""
+
+#: contrib/auth/models.py:347
+msgid "message"
+msgstr ""
+
+#: utils/dateformat.py:98
+msgid "midnight"
+msgstr ""
+
+#: utils/timesince.py:26
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:45
+msgid "minutes"
+msgstr ""
+
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
+msgid "model:"
+msgstr ""
+
+#: utils/timesince.py:22
+msgid "month"
+msgid_plural "months"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
+msgid "name"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "nd"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "nine"
+msgstr ""
+
+#: utils/dateformat.py:100
+msgid "noon"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "nov"
+msgstr ""
+
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
+#, python-format
+msgid "number of %s"
+msgstr ""
+
+#: contrib/comments/models.py:24
+msgid "object ID"
+msgstr ""
+
+#: contrib/admin/models.py:22
+msgid "object id"
+msgstr ""
+
+#: contrib/admin/models.py:23
+msgid "object repr"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "oct"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "one"
+msgstr ""
+
+#: utils/text.py:128
+msgid "or"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "or make changes"
+msgstr ""
+
+#: utils/dateformat.py:42
+msgid "p.m."
+msgstr ""
+
+#: contrib/auth/models.py:141
+msgid "password"
+msgstr ""
+
+#: contrib/auth/models.py:72
+msgid "permission"
+msgstr ""
+
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
+msgid "permissions"
+msgstr ""
+
+#: contrib/contenttypes/models.py:77
+msgid "python model class name"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "rd"
+msgstr ""
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr ""
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr ""
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr ""
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr ""
+
+#: contrib/flatpages/models.py:13
+msgid "registration required"
+msgstr ""
+
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
+#, python-format
+msgid "related `%(app_label)s.%(object_name)s` objects"
+msgstr ""
+
+#: contrib/comments/admin.py:47
+msgid "removed"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "sep"
+msgstr ""
+
+#: contrib/sessions/models.py:53
+msgid "session"
+msgstr ""
+
+#: contrib/sessions/models.py:47
+msgid "session data"
+msgstr ""
+
+#: contrib/sessions/models.py:45
+msgid "session key"
+msgstr ""
+
+#: contrib/sessions/models.py:54
+msgid "sessions"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "seven"
+msgstr ""
+
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
+msgid "site"
+msgstr ""
+
+#: contrib/sites/models.py:39
+msgid "sites"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "six"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "st"
+msgstr ""
+
+#: contrib/auth/models.py:142
+msgid "staff status"
+msgstr ""
+
+#: contrib/auth/models.py:144
+msgid "superuser status"
+msgstr ""
+
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
+msgid "tag:"
+msgstr ""
+
+#: contrib/admin/views/template.py:40
+msgid "template"
+msgstr ""
+
+#: contrib/flatpages/models.py:11
+msgid "template name"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "th"
+msgstr ""
+
+#: contrib/admindocs/views.py:209
+#, python-format
+msgid "the related `%(app_label)s.%(data_type)s` object"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "three"
+msgstr ""
+
+#: contrib/flatpages/models.py:8
+msgid "title"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:93
+msgid "today"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:95
+msgid "tomorrow"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "two"
+msgstr ""
+
+#: contrib/auth/models.py:153 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
+msgid "user"
+msgstr ""
+
+#: contrib/auth/models.py:149
+msgid "user permissions"
+msgstr ""
+
+#: contrib/comments/models.py:54
+msgid "user's URL"
+msgstr ""
+
+#: contrib/comments/models.py:53
+msgid "user's email address"
+msgstr ""
+
+#: contrib/comments/models.py:52
+msgid "user's name"
+msgstr ""
+
+#: contrib/auth/models.py:137
+msgid "username"
+msgstr ""
+
+#: contrib/auth/models.py:154
+msgid "users"
+msgstr ""
+
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
+msgid "view:"
+msgstr ""
+
+#: utils/timesince.py:23
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:21
+msgid "year"
+msgid_plural "years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/defaultfilters.py:775
+msgid "yes,no,maybe"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:97
+msgid "yesterday"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#~ msgid ""
+#~ "Ensure this value has at least %(min)d characters (it has %(length)d)."
+#~ msgstr ""
+#~ "Wês wis dat dizze wearde minstens %(min)d karakters hat (it hat %(length)"
+#~ "d)."
+
+#~ msgid ""
+#~ "Ensure this value has at most %(max)d characters (it has %(length)d)."
+#~ msgstr ""
+#~ "Wês wis dat dizze wearde maksimaal %(max)d karakters hat (it hat %(length)"
+#~ "d)."
+
+#~ msgid "Ensure this value is greater than or equal to %s."
+#~ msgstr "Wês wis dat dizze wearde grutter of lyk is oan %s."
+
+#~ msgid "Ensure this value is less than or equal to %s."
+#~ msgstr "Wês wis dat dizze wearde minder of lyk is oan %s."
Binary file web/lib/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/fy_NL/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,119 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-01-27 09:59-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:24
+#: contrib/admin/media/js/dateparse.js:32
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr ""
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Now"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+msgid "Clock"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Midnight"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "6 a.m."
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
+msgid "Noon"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:89
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
+msgid "Cancel"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:129
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:178
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+msgid "Calendar"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:176
+msgid "Yesterday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
+msgid "Tomorrow"
+msgstr ""
Binary file web/lib/django/conf/locale/ga/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/ga/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/ga/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -1,213 +1,257 @@
-# 
+# This file is distributed under the same license as the Django package.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-14 10:20+0100\n"
-"PO-Revision-Date: 2008-08-14 14:46+0100\n"
+"POT-Creation-Date: 2010-03-01 11:28+0000\n"
+"PO-Revision-Date: 2010-03-01 11:30+0100\n"
 "Last-Translator: Michael Thornhill <michael@maithu.com>\n"
-"Language-Team: Gaeilge <ga@li.org>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1;"
+"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n < 11 ? 3 : 4\n"
 
 #: conf/global_settings.py:44
 msgid "Arabic"
 msgstr "Arabach"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "Bulgárach"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "Beangáilis"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Bulgárach"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "Catalóinis"
+msgid "Bosnian"
+msgstr "Bosnian"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "Catalóinis"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "Seiceach"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "Breatnach"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "Dainmhairgis"
+msgid "Welsh"
+msgstr "Breatnach"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "Dainmhairgis"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "Gearmánach"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "Gréigis"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "Béarla"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "Spáinneach"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Eastóinis"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "Spáinnis Airgintín"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "Eastóinis"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "Bascais"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
 msgid "Persian"
 msgstr "Peirsis"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
 msgid "Finnish"
 msgstr "Fionlainnis"
 
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "Francach"
-
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Gaeilge"
+msgid "French"
+msgstr "Francach"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Gailísis"
+msgid "Frisian"
+msgstr "Frisian"
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Ungáiris"
+msgid "Irish"
+msgstr "Gaeilge"
 
 #: conf/global_settings.py:64
+msgid "Galician"
+msgstr "Gailísis"
+
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "Eabhrach"
 
-#: conf/global_settings.py:65
+#: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "Hiondúis"
+
+#: conf/global_settings.py:67
 msgid "Croatian"
 msgstr "Cróitis"
 
-#: conf/global_settings.py:66
+#: conf/global_settings.py:68
+msgid "Hungarian"
+msgstr "Ungáiris"
+
+#: conf/global_settings.py:69
 msgid "Icelandic"
 msgstr "Mórlainnis"
 
-#: conf/global_settings.py:67
-msgid "Italian"
-msgstr "Iodáilis"
-
-#: conf/global_settings.py:68
-msgid "Japanese"
-msgstr "Seapáinis"
-
-#: conf/global_settings.py:69
-msgid "Georgian"
-msgstr "Seoirseach"
-
 #: conf/global_settings.py:70
-msgid "Korean"
-msgstr "Cóiréis"
+msgid "Italian"
+msgstr "Iodáilis"
 
 #: conf/global_settings.py:71
-msgid "Khmer"
-msgstr "Ciméiris"
+msgid "Japanese"
+msgstr "Seapáinis"
 
 #: conf/global_settings.py:72
-msgid "Kannada"
-msgstr "Cannadais"
+msgid "Georgian"
+msgstr "Seoirseach"
 
 #: conf/global_settings.py:73
-msgid "Latvian"
-msgstr "Laitvis"
+msgid "Khmer"
+msgstr "Ciméiris"
 
 #: conf/global_settings.py:74
+msgid "Kannada"
+msgstr "Cannadais"
+
+#: conf/global_settings.py:75
+msgid "Korean"
+msgstr "Cóiréis"
+
+#: conf/global_settings.py:76
 msgid "Lithuanian"
 msgstr "Liotuáinis"
 
-#: conf/global_settings.py:75
+#: conf/global_settings.py:77
+msgid "Latvian"
+msgstr "Laitvis"
+
+#: conf/global_settings.py:78
 msgid "Macedonian"
 msgstr "Macadóinis"
 
-#: conf/global_settings.py:76
-msgid "Dutch"
-msgstr "Ollannach"
-
-#: conf/global_settings.py:77
-msgid "Norwegian"
-msgstr "Ioruais"
-
-#: conf/global_settings.py:78
-msgid "Polish"
-msgstr "snas"
-
 #: conf/global_settings.py:79
-msgid "Portugese"
-msgstr "Portaingéileach"
+msgid "Dutch"
+msgstr "Ollannach"
 
 #: conf/global_settings.py:80
-msgid "Brazilian Portuguese"
-msgstr "Brasaíleach"
+msgid "Norwegian"
+msgstr "Ioruais"
 
 #: conf/global_settings.py:81
-msgid "Romanian"
-msgstr "Rómáinis"
+msgid "Polish"
+msgstr "Polainnis"
 
 #: conf/global_settings.py:82
+msgid "Portuguese"
+msgstr "Portaingéilis"
+
+#: conf/global_settings.py:83
+msgid "Brazilian Portuguese"
+msgstr "Portaingéilis Bhrasaíleach"
+
+#: conf/global_settings.py:84
+msgid "Romanian"
+msgstr "Rómáinis"
+
+#: conf/global_settings.py:85
 msgid "Russian"
 msgstr "Rúiseach"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:86
 msgid "Slovak"
 msgstr "Slóvaicis"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:87
 msgid "Slovenian"
 msgstr "Slóivéinis"
 
-#: conf/global_settings.py:85
-msgid "Serbian"
-msgstr "Seirbiach"
-
-#: conf/global_settings.py:86
-msgid "Swedish"
-msgstr "Sualainnis"
-
-#: conf/global_settings.py:87
-msgid "Tamil"
-msgstr "Tamailis"
-
 #: conf/global_settings.py:88
-msgid "Telugu"
-msgstr "Teileagúis"
+msgid "Albanian"
+msgstr "Albanian"
 
 #: conf/global_settings.py:89
-msgid "Turkish"
-msgstr "Tuircis"
+msgid "Serbian"
+msgstr "Seirbiach"
 
 #: conf/global_settings.py:90
-msgid "Ukrainian"
-msgstr "Úcráinis"
+msgid "Serbian Latin"
+msgstr "Laidin Seirbiach"
 
 #: conf/global_settings.py:91
+msgid "Swedish"
+msgstr "Sualainnis"
+
+#: conf/global_settings.py:92
+msgid "Tamil"
+msgstr "Tamailis"
+
+#: conf/global_settings.py:93
+msgid "Telugu"
+msgstr "Teileagúis"
+
+#: conf/global_settings.py:94
+msgid "Thai"
+msgstr "Tamailis"
+
+#: conf/global_settings.py:95
+msgid "Turkish"
+msgstr "Tuircis"
+
+#: conf/global_settings.py:96
+msgid "Ukrainian"
+msgstr "Úcráinis"
+
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "Vitneaimis"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
 msgstr "Sínis"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "Sínis Tradisúinta"
 
+#: contrib/admin/actions.py:52
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr "D'éirigh le scriosadh %(count)d %(items)s."
+
+#: contrib/admin/actions.py:59
+#: contrib/admin/options.py:1099
+msgid "Are you sure?"
+msgstr "An bhfuil tú cinnte?"
+
+#: contrib/admin/actions.py:77
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr "Scrios %(verbose_name_plural) roghnaithe"
+
 #: contrib/admin/filterspecs.py:44
 #, python-format
 msgid ""
@@ -217,8 +261,10 @@
 "<h3>Trí %s:</h3>\n"
 "<ul>\n"
 
-#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
+#: contrib/admin/filterspecs.py:75
+#: contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147
+#: contrib/admin/filterspecs.py:173
 msgid "All"
 msgstr "Gach"
 
@@ -242,21 +288,25 @@
 msgid "This year"
 msgstr "An blian seo"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:379
-#: oldforms/__init__.py:588
+#: contrib/admin/filterspecs.py:147
+#: forms/widgets.py:440
 msgid "Yes"
 msgstr "Tá"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:379
-#: oldforms/__init__.py:588
+#: contrib/admin/filterspecs.py:147
+#: forms/widgets.py:440
 msgid "No"
 msgstr "Níl"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:379
-#: oldforms/__init__.py:588
+#: contrib/admin/filterspecs.py:154
+#: forms/widgets.py:440
 msgid "Unknown"
 msgstr "Gan aithne"
 
+#: contrib/admin/helpers.py:19
+msgid "Action:"
+msgstr "Aicsean:"
+
 #: contrib/admin/models.py:19
 msgid "action time"
 msgstr "am aicsean"
@@ -285,166 +335,185 @@
 msgid "log entries"
 msgstr "loga iontrálacha"
 
-#: contrib/admin/options.py:143 contrib/admin/options.py:202
+#: contrib/admin/options.py:139
+#: contrib/admin/options.py:154
 msgid "None"
 msgstr "Dada"
 
-#: contrib/admin/options.py:407
+#: contrib/admin/options.py:558
 #, python-format
 msgid "Changed %s."
 msgstr "Athraithe %s"
 
-#: contrib/admin/options.py:407 contrib/admin/options.py:417
-#: core/validators.py:279 db/models/manipulators.py:305
+#: contrib/admin/options.py:558
+#: contrib/admin/options.py:568
+#: contrib/comments/templates/comments/preview.html:16
+#: db/models/base.py:802
+#: forms/models.py:552
 msgid "and"
 msgstr "agus"
 
-#: contrib/admin/options.py:412
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Suimithe %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:416
+#: contrib/admin/options.py:567
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Athraithe %(list)s le %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:421
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Scriosaithe %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:425
+#: contrib/admin/options.py:576
 msgid "No fields changed."
 msgstr "Dada réimse aithraithe"
 
-#: contrib/admin/options.py:486 contrib/auth/admin.py:50
+#: contrib/admin/options.py:642
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "Bhí  %(name)s \"%(obj)s\" breisithe go rathúil"
 
-#: contrib/admin/options.py:490 contrib/admin/options.py:523
-#: contrib/auth/admin.py:55
+#: contrib/admin/options.py:646
+#: contrib/admin/options.py:679
 msgid "You may edit it again below."
 msgstr "Is féidir leat é a cuir in eagar thíos."
 
-#: contrib/admin/options.py:500 contrib/admin/options.py:533
+#: contrib/admin/options.py:656
+#: contrib/admin/options.py:689
 #, python-format
 msgid "You may add another %s below."
 msgstr "Is féidir le ceann eile %s a cuir le thíos."
 
-#: contrib/admin/options.py:521
+#: contrib/admin/options.py:677
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "Bhí an %(name)s \"%(obj)s\" aithraithe to rathúil"
 
-#: contrib/admin/options.py:529
+#: contrib/admin/options.py:685
 #, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Chuir an %(name)s·\"%(obj)s\"·go rathúil.·Is féidir leat é a cuir in eagar "
-"thíos."
-
-#: contrib/admin/options.py:596
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "Chuir an %(name)s·\"%(obj)s\"·go rathúil.·Is féidir leat é a cuir in eagar thíos."
+
+#: contrib/admin/options.py:743
+msgid "Items must be selected in order to perform actions on them. No items have been changed."
+msgstr "Ní mór Míreanna a roghnú chun caingne a dhéanamh orthu. Níl aon mhíreanna a athrú."
+
+#: contrib/admin/options.py:761
+msgid "No action selected."
+msgstr "Uimh gníomh roghnaithe."
+
+#: contrib/admin/options.py:841
 #, python-format
 msgid "Add %s"
 msgstr "Cuir %s le"
 
-#: contrib/admin/options.py:673
+#: contrib/admin/options.py:867
+#: contrib/admin/options.py:1079
+#, python-format
+msgid "%(name)s object with primary key %(key)r does not exist."
+msgstr "Níl réad le hainm %(name)s agus eochair %(key)r ann."
+
+#: contrib/admin/options.py:932
 #, python-format
 msgid "Change %s"
 msgstr "Aithrigh %s"
 
-#: contrib/admin/options.py:704
+#: contrib/admin/options.py:977
 msgid "Database error"
 msgstr "Botún bunachar sonraí"
 
-#: contrib/admin/options.py:753
+#: contrib/admin/options.py:1013
+#, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] "Bhí  %(count)s %(name)s aithraithe go rathúil"
+msgstr[1] "Bhí  %(count)s %(name)s aithraithe to rathúil"
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#: contrib/admin/options.py:1092
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "Bhí %(name)s \"%(obj)s\" scrioste go rathúil."
 
-#: contrib/admin/options.py:760
-msgid "Are you sure?"
-msgstr "An bhfuil tú cinnte?"
-
-#: contrib/admin/options.py:787
+#: contrib/admin/options.py:1129
 #, python-format
 msgid "Change history: %s"
 msgstr "Athraigh stáir %s"
 
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:16
-#: contrib/auth/forms.py:72 contrib/comments/views/comments.py:56
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Le do thoil, iontráil aihm úsaideora agus focal faire ceart. Bí cúramach go "
-"bhfuil an beirt acu cásíogair."
-
-#: contrib/admin/sites.py:238 contrib/admin/views/decorators.py:68
-msgid ""
-"Please log in again, because your session has expired. Don't worry: Your "
-"submission has been saved."
-msgstr ""
-"Le do thoil, logáil isteach arís cé go bhfuil to seisúin críochnaithe.  Ná "
-"bí imní ort, tá do iarratas sabháilte."
-
-#: contrib/admin/sites.py:245 contrib/admin/views/decorators.py:75
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Feictear nach bhfuil do brabhsálaí réidh le cuaiche a glacadh. Le do thoil, "
-"cumasaigh cuaiche, athlódáil an leathanach seo, agus déan iarracht arís."
-
-#: contrib/admin/sites.py:259 contrib/admin/sites.py:265
-#: contrib/admin/views/decorators.py:92
+#: contrib/admin/sites.py:22
+#: contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
+msgstr "Le do thoil, iontráil aihm úsaideora agus focal faire ceart. Bí cúramach go bhfuil an beirt acu cásíogair."
+
+#: contrib/admin/sites.py:311
+#: contrib/admin/views/decorators.py:40
+msgid "Please log in again, because your session has expired."
+msgstr "Le do thoil, logáil isteach arís cé go bhfuil to seisúin críochnaithe."
+
+#: contrib/admin/sites.py:318
+#: contrib/admin/views/decorators.py:47
+msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
+msgstr "Feictear nach bhfuil do brabhsálaí réidh le cuaiche a glacadh. Le do thoil, cumasaigh cuaiche, athlódáil an leathanach seo, agus déan iarracht arís."
+
+#: contrib/admin/sites.py:334
+#: contrib/admin/sites.py:340
+#: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Níl an carachtar '@' ceadaithe in ainmeacha úsaideora."
 
-#: contrib/admin/sites.py:262 contrib/admin/views/decorators.py:88
+#: contrib/admin/sites.py:337
+#: contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Níl do ríomhseoladh do ainm úsaideora. Bain trial as '%s'."
 
-#: contrib/admin/sites.py:330
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Riaracháin an suíomh"
 
-#: contrib/admin/sites.py:352 contrib/admin/templates/admin/login.html:27
+#: contrib/admin/sites.py:407
+#: contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
-#: contrib/admin/views/decorators.py:30
+#: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Logáil isteach"
 
-#: contrib/admin/util.py:126
+#: contrib/admin/sites.py:452
 #, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Ceann amhain nó níos mó  %(fieldname)s in %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:131
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Ceann amhain nó níos mó  %(fieldname)s in %(name)s:"
-
-#: contrib/admin/widgets.py:65
+msgid "%s administration"
+msgstr "%s riaracháin"
+
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Dáta:"
 
-#: contrib/admin/widgets.py:65
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Am:"
 
-#: contrib/admin/widgets.py:89
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Ag an am seo."
 
-#: contrib/admin/widgets.py:89
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Athraigh:"
 
+#: contrib/admin/widgets.py:129
+msgid "Lookup"
+msgstr "Cuardach"
+
+#: contrib/admin/widgets.py:241
+msgid "Add Another"
+msgstr "Cuir le"
+
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
 msgid "Page not found"
@@ -455,16 +524,18 @@
 msgstr "Tá brón orainn, ach ní bhfuarthas an leathanach iarraite."
 
 #: contrib/admin/templates/admin/500.html:4
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
+#: contrib/admin/templates/admin/app_index.html:8
+#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:39
 #: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
-#: contrib/admin/templates/admin/object_history.html:5
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/object_history.html:6
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -486,36 +557,68 @@
 msgstr "Botún Freastalaí <em>(500)</em>"
 
 #: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Bhí botún. Seolah é go dtí riarthóirí an suíomh agus beidh sé ceartaithe i "
-"gceann tamallín. Go raibh maith agat le hadhaigh do foighne."
-
-#: contrib/admin/templates/admin/base.html:25
+msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
+msgstr "Bhí botún. Seolah é go dtí riarthóirí an suíomh agus beidh sé ceartaithe i gceann tamallín. Go raibh maith agat le hadhaigh do foighne."
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr "Rith an gníomh roghnaithe"
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr "Té"
+
+#: contrib/admin/templates/admin/actions.html:7
+#, python-format
+msgid "<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
+msgstr "<span class=\"_acnt\">0</span> de%(total_count)s %(module_name)s roghnaithe"
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "All %(total_count)s %(module_name)s selected"
+msgstr "Gach %(total_count)s %(module_name)s roghnaithe"
+
+#: contrib/admin/templates/admin/actions.html:14
+msgid "Click here to select all objects across all pages"
+msgstr "Cliceáil anseo chun an roghnú ábhair go léir ar fud gach leathanach"
+
+#: contrib/admin/templates/admin/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Roghnaigh gach %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:16
+msgid "Clear selection"
+msgstr "Scroiseadh modhnóir"
+
+#: contrib/admin/templates/admin/app_index.html:10
+#: contrib/admin/templates/admin/index.html:19
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
+#: contrib/admin/templates/admin/base.html:27
 msgid "Welcome,"
 msgstr "Fáilte"
 
-#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Doiciméadúchán"
 
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Athraigh focal faire"
 
-#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
-#: contrib/comments/templates/comments/form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Logáil amach"
 
@@ -527,65 +630,75 @@
 msgid "Django administration"
 msgstr "Riarachán Django"
 
-#: contrib/admin/templates/admin/change_form.html:19
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Cuir le"
 
-#: contrib/admin/templates/admin/change_form.html:26
-#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/change_form.html:28
+#: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Stair"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Breath ar suíomh"
 
-#: contrib/admin/templates/admin/change_form.html:37
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:68
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Le do thoil ceartaigh an botún thíos."
 msgstr[1] "Le do thoil ceartaigh na botúin thíos."
 
-#: contrib/admin/templates/admin/change_list.html:16
+#: contrib/admin/templates/admin/change_list.html:60
 #, python-format
 msgid "Add %(name)s"
 msgstr "Cuir %(name)s le"
 
-#: contrib/admin/templates/admin/change_list.html:26
+#: contrib/admin/templates/admin/change_list.html:79
 msgid "Filter"
 msgstr "Scagaire"
 
-#: contrib/admin/templates/admin/delete_confirmation.html:9
-#: contrib/admin/templates/admin/submit_line.html:3
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
+#: contrib/admin/templates/admin/delete_confirmation.html:10
+#: contrib/admin/templates/admin/submit_line.html:4
+#: forms/formsets.py:294
 msgid "Delete"
 msgstr "Cealaigh"
 
-#: contrib/admin/templates/admin/delete_confirmation.html:15
+#: contrib/admin/templates/admin/delete_confirmation.html:16
 #, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Má scriossan tú  %(object_name)s '%(escaped_object)s' scriosfaidh oibiachtí "
-"gaolta. Ach níl cead ag do cuntas na oibiacht a leanúint a scriosadh:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:22
+msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
+msgstr "Má scriossan tú  %(object_name)s '%(escaped_object)s' scriosfaidh oibiachtí gaolta. Ach níl cead ag do cuntas na oibiacht a leanúint a scriosadh:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:23
 #, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"An bhfuil tú cinnte na  %(object_name)s \"%(escaped_object)s\" a scroiseadh?"
-"Beidh gach oibiacht a leanúint scroiste freisin:"
-
-#: contrib/admin/templates/admin/delete_confirmation.html:27
+msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
+msgstr "An bhfuil tú cinnte na  %(object_name)s \"%(escaped_object)s\" a scroiseadh?Beidh gach oibiacht a leanúint scroiste freisin:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
 msgid "Yes, I'm sure"
 msgstr "Táim cinnte"
 
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+msgid "Delete multiple objects"
+msgstr "Scrios na réadanna"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
+msgid "Deleting the %(object_name)s would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
+msgstr "Má scriossan tú  %(object_name)s scriosfaidh oibiachtí gaolta. Ach níl cead ag do cuntas na oibiacht a leanúint a scriosadh:"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, python-format
+msgid "Are you sure you want to delete the selected %(object_name)s objects? All of the following objects and their related items will be deleted:"
+msgstr "An bhfuil tú cinnte na  %(object_name)s a scroiseadh? Beidh gach oibiacht a leanúint agus na oibiachta gaolta scroiste freisin:"
+
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
 msgid " By %(filter_title)s "
@@ -596,11 +709,6 @@
 msgid "Models available in the %(name)s application."
 msgstr "Samhla ar fáil ins an feidhmchlár %(name)s."
 
-#: contrib/admin/templates/admin/index.html:19
-#, python-format
-msgid "%(name)s"
-msgstr "%(name)s"
-
 #: contrib/admin/templates/admin/index.html:35
 msgid "Change"
 msgstr "Athraigh"
@@ -621,123 +729,117 @@
 msgid "None available"
 msgstr "Dada ar fáil"
 
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr "Inneachair anaithnid"
+
 #: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Tá rud éigin mícheart le suitéail do bunachar sonraí.  Déan cinnte go bhfuil "
-"boird an bunachar sonraI cruthaithe cheana, agus déan cinnte go bhfuil do "
-"úsaideoir in ann an bunacchar sonraí a léamh."
+msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
+msgstr "Tá rud éigin mícheart le suitéail do bunachar sonraí.  Déan cinnte go bhfuil boird an bunachar sonraI cruthaithe cheana, agus déan cinnte go bhfuil do úsaideoir in ann an bunacchar sonraí a léamh."
 
 #: contrib/admin/templates/admin/login.html:19
-#: contrib/comments/templates/comments/form.html:6
-#: contrib/comments/templates/comments/form.html:8
 msgid "Username:"
 msgstr "Ainm úsaideor:"
 
 #: contrib/admin/templates/admin/login.html:22
-#: contrib/comments/templates/comments/form.html:8
 msgid "Password:"
 msgstr "Focal faire:"
 
-#: contrib/admin/templates/admin/object_history.html:16
+#: contrib/admin/templates/admin/object_history.html:22
 msgid "Date/time"
 msgstr "Dáta/am"
 
-#: contrib/admin/templates/admin/object_history.html:17
+#: contrib/admin/templates/admin/object_history.html:23
 msgid "User"
 msgstr "Úsaideoir"
 
-#: contrib/admin/templates/admin/object_history.html:18
+#: contrib/admin/templates/admin/object_history.html:24
 msgid "Action"
 msgstr "Aicsean"
 
-#: contrib/admin/templates/admin/object_history.html:24
-msgid "DATE_WITH_TIME_FULL"
-msgstr "DATE_WITH_TIME_FULL"
-
-#: contrib/admin/templates/admin/object_history.html:32
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Níl stáir aitraithe ag an oibiacht seo agús is dócha ná cuir le tríd an an "
-"suíomh riarachán."
+#: contrib/admin/templates/admin/object_history.html:38
+msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
+msgstr "Níl stáir aitraithe ag an oibiacht seo agús is dócha ná cuir le tríd an an suíomh riarachán."
 
 #: contrib/admin/templates/admin/pagination.html:10
 msgid "Show all"
 msgstr "Taispéan gach rud"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Sábháil"
+
 #: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Té"
+msgid "Search"
+msgstr "Cuardach"
 
 #: contrib/admin/templates/admin/search_form.html:10
 #, python-format
 msgid "1 result"
 msgid_plural "%(counter)s results"
 msgstr[0] "toradh 1"
-msgstr[1] "1 toradh"
+msgstr[1] "%(counter)s torthaí"
 
 #: contrib/admin/templates/admin/search_form.html:10
 #, python-format
 msgid "%(full_result_count)s total"
 msgstr "%(full_result_count)s iomlán"
 
-#: contrib/admin/templates/admin/submit_line.html:4
+#: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
 msgstr "Sabháil mar nua"
 
-#: contrib/admin/templates/admin/submit_line.html:5
+#: contrib/admin/templates/admin/submit_line.html:6
 msgid "Save and add another"
 msgstr "Sabháil agus cuir le ceann eile"
 
-#: contrib/admin/templates/admin/submit_line.html:6
-msgid "Save and continue editing"
-msgstr "Sábhail agus lean ag cuir in eagar"
-
 #: contrib/admin/templates/admin/submit_line.html:7
-msgid "Save"
-msgstr "Sábháil"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Ar dtús, iontráil ainm úsaideoir agus focal faire.  Ansin, beidh tú in ann "
-"cuir in eagar níos mó roghaí úsaideoira."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:51
-msgid "Username"
-msgstr "Ainm úsaideoir"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:52 contrib/auth/forms.py:176
+msgid "Save and continue editing"
+msgstr "Sábhail agus lean ag cuir in eagar"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid "First, enter a username and password. Then, you'll be able to edit more user options."
+msgstr "Ar dtús, iontráil ainm úsaideoir agus focal faire.  Ansin, beidh tú in ann cuir in eagar níos mó roghaí úsaideoira."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr "Iontráil focal faire nua le hadhaigh an úsaideor <strong>%(username)s</strong>."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17
+#: contrib/auth/forms.py:61
+#: contrib/auth/forms.py:186
 msgid "Password"
 msgstr "Focal faire"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:177
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
 msgid "Password (again)"
 msgstr "Focal faire (arís)"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
 msgid "Enter the same password as above, for verification."
 msgstr "Iontráíl an focal faire céanna mar thuas, le fíorúchán."
 
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
+#: contrib/admin/templates/admin/edit_inline/stacked.html:53
+#: contrib/admin/templates/admin/edit_inline/tabular.html:99
 #, python-format
-msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr ""
-"Iontráil focal faire nua le hadhaigh an úsaideor <strong>%(username)s</"
-"strong>."
+msgid "Add another %(verbose_name)s"
+msgstr "Cuir eile %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:56
+#: contrib/admin/templates/admin/edit_inline/tabular.html:102
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Tóg amach"
+
+#: contrib/admin/templates/admin/edit_inline/tabular.html:15
+msgid "Delete?"
+msgstr "Cealaigh?"
 
 #: contrib/admin/templates/registration/logged_out.html:8
 msgid "Thanks for spending some quality time with the Web site today."
@@ -748,9 +850,9 @@
 msgstr "Logáil isteacj arís"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Athrú focal faire"
 
@@ -763,30 +865,21 @@
 msgid "Your password was changed."
 msgstr "Bhí do focal faire aithraithe."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Le do thoil, iontráil do sean-focal faire, ar son slándáil, agus ansin "
-"iontráil do focal faire dhá uaire cé go mbeimid in ann a seiceal go bhfuil "
-"sé scríobhte isteach i gceart."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Sean-focal faire"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Focal faire nua:"
-
 #: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Deimhnigh focal faire:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
+msgstr "Le do thoil, iontráil do sean-focal faire, ar son slándáil, agus ansin iontráil do focal faire dhá uaire cé go mbeimid in ann a seiceal go bhfuil sé scríobhte isteach i gceart."
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Sean-focal faire "
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Focal faire nua"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Athraigh mo focal faire"
@@ -818,24 +911,24 @@
 msgstr "Cuir isteach focal faire nua"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Le do thoil, iontráil do focal faire dhá uaire cé go mbeimid in ann a "
-"seiceal go bhfuil sé scríobhte isteach i gceart."
+msgid "Please enter your new password twice so we can verify you typed it in correctly."
+msgstr "Le do thoil, iontráil do focal faire dhá uaire cé go mbeimid in ann a seiceal go bhfuil sé scríobhte isteach i gceart."
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Focal faire nua:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Deimhnigh focal faire:"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Athshocraigh focal faire mí-rathúil"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used.  Please request a new password reset."
-msgstr ""
-"Bhí nasc athshocraigh an focal faire mícheart, b'fheidir mar go raibh sé "
-"úsaidte cheana.  Le do thoil, iarr ar athsocraigh focal faire nua."
+msgid "The password reset link was invalid, possibly because it has already been used.  Please request a new password reset."
+msgstr "Bhí nasc athshocraigh an focal faire mícheart, b'fheidir mar go raibh sé úsaidte cheana.  Le do thoil, iarr ar athsocraigh focal faire nua."
 
 #: contrib/admin/templates/registration/password_reset_done.html:6
 #: contrib/admin/templates/registration/password_reset_done.html:10
@@ -843,17 +936,12 @@
 msgstr "Athshocraigh focal faire mí-rathúil"
 
 #: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Seolamar teagasca chugat le hadhaigh do r-phost a úsaid mar to focal faire.  "
-"Gheobaidh tú an r-phost i gceann tamallín."
+msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
+msgstr "Seolamar teagasca chugat le hadhaigh do r-phost a úsaid mar to focal faire.  Gheobaidh tú an r-phost i gceann tamallín."
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Tá tú ag fáil an r-phost seo mar iarr tú ar athshocraigh an focal faire."
+msgstr "Tá tú ag fáil an r-phost seo mar iarr tú ar athshocraigh an focal faire."
 
 #: contrib/admin/templates/registration/password_reset_email.html:3
 #, python-format
@@ -862,9 +950,7 @@
 
 #: contrib/admin/templates/registration/password_reset_email.html:5
 msgid "Please go to the following page and choose a new password:"
-msgstr ""
-"Le do thoil té go dtí an leathanach a leanúint agus roghmaigh focal faire "
-"nua:"
+msgstr "Le do thoil té go dtí an leathanach a leanúint agus roghmaigh focal faire nua:"
 
 #: contrib/admin/templates/registration/password_reset_email.html:9
 msgid "Your username, in case you've forgotten:"
@@ -880,12 +966,8 @@
 msgstr "Foireann an %(site_name)s"
 
 #: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Dearmad déanta ar do focal faire? Iontráil do r-phost thíos agus seolfaimid "
-"teagasca chun ceann nua a fháil."
+msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
+msgstr "Dearmad déanta ar do focal faire? Iontráil do r-phost thíos agus seolfaimid teagasca chun ceann nua a fháil."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
@@ -895,165 +977,95 @@
 msgid "Reset my password"
 msgstr "Athsocraigh mo focal faire"
 
-#: contrib/admin/templatetags/admin_list.py:257
+#: contrib/admin/templatetags/admin_list.py:240
 msgid "All dates"
 msgstr "Gach dáta"
 
-#: contrib/admin/views/main.py:65
+#: contrib/admin/views/main.py:70
 #, python-format
 msgid "Select %s"
 msgstr "Roghnaigh %s"
 
-#: contrib/admin/views/main.py:65
+#: contrib/admin/views/main.py:70
 #, python-format
 msgid "Select %s to change"
 msgstr "Roghnaigh %s a athrú"
 
-#: contrib/admin/views/template.py:36 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38
+#: contrib/sites/models.py:38
 msgid "site"
 msgstr "suíomh"
 
-#: contrib/admin/views/template.py:38
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "teimpléad"
 
-#: contrib/admindocs/views.py:53 contrib/admindocs/views.py:55
-#: contrib/admindocs/views.py:57
+#: contrib/admindocs/views.py:61
+#: contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "clib:"
 
-#: contrib/admindocs/views.py:87 contrib/admindocs/views.py:89
-#: contrib/admindocs/views.py:91
+#: contrib/admindocs/views.py:94
+#: contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "scag:"
 
-#: contrib/admindocs/views.py:153 contrib/admindocs/views.py:155
-#: contrib/admindocs/views.py:157
+#: contrib/admindocs/views.py:158
+#: contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "radharc:"
 
-#: contrib/admindocs/views.py:187
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "Ní bhfuarthas feidhmchlár %r "
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "Ní bhfuarthas samhail %(model_name)r  i bhfeidhmclár %(app_label)r"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "An oibiacht gaolmhara `%(app_label)s.%(data_type)s`"
 
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:209
+#: contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233
+#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261
+#: contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "samhail:"
 
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:224
+#: contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "Oibiachtí gaolmhara `%(app_label)s.%(object_name)s`"
 
-#: contrib/admindocs/views.py:242
+#: contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "gach %s"
 
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:233
+#: contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "líon %s"
 
-#: contrib/admindocs/views.py:253
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "Réimse ar oibiachtí %s"
 
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:328
-#: contrib/admindocs/views.py:330 contrib/admindocs/views.py:336
-#: contrib/admindocs/views.py:337 contrib/admindocs/views.py:339
-msgid "Integer"
-msgstr "Slánuimhir"
-
-#: contrib/admindocs/views.py:318
-msgid "Boolean (Either True or False)"
-msgstr "Boole"
-
-#: contrib/admindocs/views.py:319 contrib/admindocs/views.py:338
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Teaghrán (suas go %(max_length)s)"
-
-#: contrib/admindocs/views.py:320
-msgid "Comma-separated integers"
-msgstr "Slánuimhireacha camóg-scartha"
-
-#: contrib/admindocs/views.py:321
-msgid "Date (without time)"
-msgstr "Dáta (gan am)"
-
-#: contrib/admindocs/views.py:322
-msgid "Date (with time)"
-msgstr "Dáta (le am)"
-
-#: contrib/admindocs/views.py:323
-msgid "Decimal number"
-msgstr "Uimhir deachúlach"
-
-#: contrib/admindocs/views.py:324
-msgid "E-mail address"
-msgstr "R-phost"
-
-#: contrib/admindocs/views.py:325 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:329
-msgid "File path"
-msgstr "Conair comhaid"
-
-#: contrib/admindocs/views.py:327
-msgid "Floating point number"
-msgstr "Snámhphointe"
-
-#: contrib/admindocs/views.py:331 contrib/comments/models.py:89
-msgid "IP address"
-msgstr "Seol IP"
-
-#: contrib/admindocs/views.py:333
-msgid "Boolean (Either True, False or None)"
-msgstr "Boole (Fíor, Bréagach nó Dada)"
-
-#: contrib/admindocs/views.py:334
-msgid "Relation to parent model"
-msgstr "Cine do samhail máthair"
-
-#: contrib/admindocs/views.py:335
-msgid "Phone number"
-msgstr "Uimhir telefón"
-
-#: contrib/admindocs/views.py:340
-msgid "Text"
-msgstr "téacs"
-
-#: contrib/admindocs/views.py:341
-msgid "Time"
-msgstr "am"
-
-#: contrib/admindocs/views.py:342 contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:8
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:343
-msgid "U.S. state (two uppercase letters)"
-msgstr "U.S. stát (dhá litreacha móra)"
-
-#: contrib/admindocs/views.py:344
-msgid "XML text"
-msgstr "Téacs XML"
-
-#: contrib/admindocs/views.py:370
+#: contrib/admindocs/views.py:361
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "Feiceann sé nach bhfuil %s oibiacht urlpattern"
@@ -1077,32 +1089,26 @@
 "your computer is \"internal\").</p>\n"
 msgstr ""
 "\n"
-"<p class=\"help\">Chun leabharmarcín a suitéal, Tarraing an nasc go dtí do barra uirlisí leabhairmairc\n, nó deaschliceáil and nasc agus cuir leis do leabharmairc.  Anois is féidir\n"
-"leat an leabharmarcín a roghnaigh ón aon leathanach ar an suíomh.  Bí cúramach go dteastaíonn cuid de na leabharmarcín go bhfuil tú ag féachaint ar an suíomh ó ríomhaire inmheánach\n(leabhar le do riarthóir córais muna bhfuil tú cinnte).</p>\n"
+"<p class=\"help\">Chun leabharmarcín a suitéal, Tarraing an nasc go dtí do barra uirlisí leabhairmairc\n"
+", nó deaschliceáil and nasc agus cuir leis do leabharmairc.  Anois is féidir\n"
+"leat an leabharmarcín a roghnaigh ón aon leathanach ar an suíomh.  Bí cúramach go dteastaíonn cuid de na leabharmarcín go bhfuil tú ag féachaint ar an suíomh ó ríomhaire inmheánach\n"
+"(leabhar le do riarthóir córais muna bhfuil tú cinnte).</p>\n"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
 msgid "Documentation for this page"
 msgstr "Doiciméadúchán le hadhaigh an leathanach seo"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Tógann se tusa ón aon leathanach go dtí an doiciméadúchán le hadhaigh an "
-"radharc a rinne an leathanach."
+msgid "Jumps you from any page to the documentation for the view that generates that page."
+msgstr "Tógann se tusa ón aon leathanach go dtí an doiciméadúchán le hadhaigh an radharc a rinne an leathanach."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
 msgid "Show object ID"
 msgstr "Taispéain oibiacht ID"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Taispéain an content-type agus ID uathúil le leathanaigh le hadhaigh "
-"oibiacht amháin."
+msgid "Shows the content-type and unique ID for pages that represent a single object."
+msgstr "Taispéain an content-type agus ID uathúil le leathanaigh le hadhaigh oibiacht amháin."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
 msgid "Edit this object (current window)"
@@ -1110,9 +1116,7 @@
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
 msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Léimeann go dtí an leathanach riaracháin le leathainaigh le hadhaigh "
-"oibiacht amháin."
+msgstr "Léimeann go dtí an leathanach riaracháin le leathainaigh le hadhaigh oibiacht amháin."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
 msgid "Edit this object (new window)"
@@ -1122,42 +1126,45 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Mar thuas, ach osclaíonn sé an leathanach riarachán if fuinneog nua"
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Eolas pearsantach"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Ceada"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Dáta tábhactach"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Grúpa"
 
-#: contrib/auth/admin.py:60
-msgid "Add user"
-msgstr "Cuir úsaideoir le"
-
-#: contrib/auth/admin.py:85
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Focal faire aithraithe rathúil"
 
-#: contrib/auth/admin.py:91
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Athraigh focal faire: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/models.py:137
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/auth/forms.py:14
+#: contrib/auth/forms.py:48
+#: contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Ainm úsaideoir"
+
+#: contrib/auth/forms.py:15
+#: contrib/auth/forms.py:49
+#: contrib/auth/models.py:180
+msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
 msgstr "Riachtanach. 30 carachtair nó níos lú. Alfa-uimhriúil amhain (litreacha, digite agus fostríce)."
 
-#: contrib/auth/forms.py:16 core/validators.py:72
+#: contrib/auth/forms.py:16
+#: contrib/auth/forms.py:50
 msgid "This value must contain only letters, numbers and underscores."
 msgstr "Cathaigh litreacha, digite agus fostríce amhain le hadhaigh an méid seo."
 
@@ -1165,249 +1172,307 @@
 msgid "Password confirmation"
 msgstr "Focal faire deimhniú"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "In ann do úsáideoir leis an ainm úsáideora."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:146
-#: contrib/auth/forms.py:188
+#: contrib/auth/forms.py:37
+#: contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Níl an dá focla faire comhoiriúnigh"
 
-#: contrib/auth/forms.py:74 contrib/comments/views/comments.py:58
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Tá an cuntas seo neamhghníomhach."
 
-#: contrib/auth/forms.py:79 contrib/comments/views/comments.py:49
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-""
-"Feictear nach bhfuil do brabhsálaí réidh le cuaiche a glacadh. Tá cuaiche ag teastail le logáil isteach."
-
-#: contrib/auth/forms.py:92
+#: contrib/auth/forms.py:88
+msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
+msgstr "Feictear nach bhfuil do brabhsálaí réidh le cuaiche a glacadh. Tá cuaiche ag teastail le logáil isteach."
+
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "R-phost"
 
-#: contrib/auth/forms.py:101
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Níl cuntas in éineacht leis an r-phost sin. An bhfuil tú cinnte go bhfuil tú cláraithe?"
-
-#: contrib/auth/forms.py:126
+#: contrib/auth/forms.py:110
+msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
+msgstr "Níl cuntas in éineacht leis an r-phost sin. An bhfuil tú cinnte go bhfuil tú cláraithe?"
+
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Athsocraigh focal faire ar %s"
 
-#: contrib/auth/forms.py:134
-msgid "New password"
-msgstr "Focal faire nua"
-
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Deimnhiú focal faire nua"
 
-#: contrib/auth/forms.py:160
-msgid "Old password"
-msgstr "Sean-focal faire "
-
-#: contrib/auth/forms.py:168
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr "Cuireadh do sean-focal faire isteach go mícheart. Iontráil isteach é arís."
 
-#: contrib/auth/models.py:73 contrib/auth/models.py:96
+#: contrib/auth/models.py:66
+#: contrib/auth/models.py:94
 msgid "name"
 msgstr "ainm"
 
-#: contrib/auth/models.py:75
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "Ainm cód"
 
-#: contrib/auth/models.py:78
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "cead"
 
-#: contrib/auth/models.py:79 contrib/auth/models.py:97
+#: contrib/auth/models.py:73
+#: contrib/auth/models.py:95
 msgid "permissions"
 msgstr "ceada"
 
-#: contrib/auth/models.py:100
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "grúpa"
 
-#: contrib/auth/models.py:101 contrib/auth/models.py:147
+#: contrib/auth/models.py:99
+#: contrib/auth/models.py:190
 msgid "groups"
 msgstr "grúpa"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:180
 msgid "username"
 msgstr "Ainm úsáideoir"
 
-#: contrib/auth/models.py:138
+#: contrib/auth/models.py:181
 msgid "first name"
 msgstr "ainm baiste"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:182
 msgid "last name"
 msgstr "sloinne"
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:183
 msgid "e-mail address"
 msgstr "seoladh r-phost"
 
-#: contrib/auth/models.py:141
+#: contrib/auth/models.py:184
 msgid "password"
 msgstr "focal faire"
 
-#: contrib/auth/models.py:141
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Úsáid '[algo]$[salt]$[hexdigest]' nó <a href=\"password/\">athraigh focal faire foirm</a>."
-
-#: contrib/auth/models.py:142
+#: contrib/auth/models.py:184
+msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
+msgstr "Úsáid '[algo]$[salt]$[hexdigest]' nó <a href=\"password/\">athraigh focal faire foirm</a>."
+
+#: contrib/auth/models.py:185
 msgid "staff status"
 msgstr "stádas foirne"
 
-#: contrib/auth/models.py:142
+#: contrib/auth/models.py:185
 msgid "Designates whether the user can log into this admin site."
 msgstr "Sainigh an bhfuil cead ag an úsáideoir logáil isteach go dtí an suíomh riaracháin seo."
 
-#: contrib/auth/models.py:143
+#: contrib/auth/models.py:186
 msgid "active"
 msgstr "gníomhach"
 
-#: contrib/auth/models.py:143
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
+#: contrib/auth/models.py:186
+msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
 msgstr "Sainíonn an bhfuil an úsáideoir gníomhach. Míroghnaigh seo in aineonn de scriseadh cuntasí."
 
-#: contrib/auth/models.py:144
+#: contrib/auth/models.py:187
 msgid "superuser status"
 msgstr "stádas forúsáideoir"
 
-#: contrib/auth/models.py:144
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
+#: contrib/auth/models.py:187
+msgid "Designates that this user has all permissions without explicitly assigning them."
 msgstr "Sainíonn go bhfuil gach ceada ag an úsáideoir seo gan iad a cur le go díreach."
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:188
 msgid "last login"
 msgstr "logáil deirneach"
 
-#: contrib/auth/models.py:146
+#: contrib/auth/models.py:189
 msgid "date joined"
 msgstr "Dáta teacht isteach"
 
-#: contrib/auth/models.py:148
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
+#: contrib/auth/models.py:191
+msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
 msgstr "Breis leis na ceada sannta láimhe, faigheann an úsáideoir seo gach ceada sannta do na grúpaí a bhfuil sé/sí isteach in."
 
-#: contrib/auth/models.py:149
+#: contrib/auth/models.py:192
 msgid "user permissions"
 msgstr "ceada úsáideoira"
 
-#: contrib/auth/models.py:153
+#: contrib/auth/models.py:196
+#: contrib/comments/models.py:50
+#: contrib/comments/models.py:168
 msgid "user"
 msgstr "úsáideoir"
 
-#: contrib/auth/models.py:154
+#: contrib/auth/models.py:197
 msgid "users"
 msgstr "úsáideora"
 
-#: contrib/auth/models.py:309
+#: contrib/auth/models.py:378
 msgid "message"
 msgstr "teachtaireacht"
 
-#: contrib/auth/views.py:52
+#: contrib/auth/views.py:60
 msgid "Logged out"
 msgstr "Logáilte amach"
 
-#: contrib/comments/models.py:71 contrib/comments/models.py:164
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120
+#: forms/fields.py:416
+msgid "Enter a valid e-mail address."
+msgstr "Cuir isteach seoladh ríomhphoist bhailí."
+
+#: contrib/comments/admin.py:12
+msgid "Content"
+msgstr "Inneachar"
+
+#: contrib/comments/admin.py:15
+msgid "Metadata"
+msgstr "Meiteashonraí"
+
+#: contrib/comments/admin.py:39
+msgid "flagged"
+msgstr "bratach curtha leis"
+
+#: contrib/comments/admin.py:40
+msgid "Flag selected comments"
+msgstr "Bratach nótaí tráchta roghnaithe"
+
+#: contrib/comments/admin.py:43
+msgid "approved"
+msgstr "ceadaithe"
+
+#: contrib/comments/admin.py:44
+msgid "Approve selected comments"
+msgstr "Cheadú nótaí tráchta roghnaithe"
+
+#: contrib/comments/admin.py:47
+msgid "removed"
+msgstr "baineadh"
+
+#: contrib/comments/admin.py:48
+msgid "Remove selected comments"
+msgstr "Bain nótaí tráchta roghnaithe"
+
+#: contrib/comments/admin.py:60
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 nóta tráchta bhí rathúil %(action)s."
+msgstr[1] "nótaí tráchta %(count)s a bhí sásúil %(action)s."
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr "%(site_name)s nótaí"
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr "Nótaí tráchtaí is déanaí ar %(site_name)s"
+
+#: contrib/comments/forms.py:93
+msgid "Name"
+msgstr "Ainm"
+
+#: contrib/comments/forms.py:94
+msgid "Email address"
+msgstr "R-phost"
+
+#: contrib/comments/forms.py:95
+#: contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7
+#: db/models/fields/__init__.py:1118
+msgid "URL"
+msgstr "URL"
+
+#: contrib/comments/forms.py:96
+msgid "Comment"
+msgstr "Nóta tráchta"
+
+#: contrib/comments/forms.py:175
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Féach ar do bhéal! Níl an focal %s ceadaithe anseo."
+msgstr[1] "Féach ar do bhéal! Níl na focail %s ceadaithe anseo."
+
+#: contrib/comments/forms.py:182
+msgid "If you enter anything in this field your comment will be treated as spam"
+msgstr "Má cuireann tú aon rud sa réimse seo, beidh do nóta déileálfar mar spam"
+
+#: contrib/comments/models.py:22
+#: contrib/contenttypes/models.py:81
+msgid "content type"
+msgstr "tíopa inneachar "
+
+#: contrib/comments/models.py:24
 msgid "object ID"
 msgstr "oibiacht ID"
 
-#: contrib/comments/models.py:72
-msgid "headline"
-msgstr "ceannlíne"
-
-#: contrib/comments/models.py:73 contrib/comments/models.py:95
-#: contrib/comments/models.py:165
+#: contrib/comments/models.py:52
+msgid "user's name"
+msgstr "Ainm úsáideoir"
+
+#: contrib/comments/models.py:53
+msgid "user's email address"
+msgstr "seoladh r-phost an t-úsáideoir"
+
+#: contrib/comments/models.py:54
+msgid "user's URL"
+msgstr "URL an t-úsáideora"
+
+#: contrib/comments/models.py:56
+#: contrib/comments/models.py:76
+#: contrib/comments/models.py:169
 msgid "comment"
 msgstr "trácht"
 
-#: contrib/comments/models.py:74
-msgid "rating #1"
-msgstr "rátáil #1"
-
-#: contrib/comments/models.py:75
-msgid "rating #2"
-msgstr "rátáil #2"
-
-#: contrib/comments/models.py:76
-msgid "rating #3"
-msgstr "rátáil #3"
+#: contrib/comments/models.py:59
+msgid "date/time submitted"
+msgstr "Dáta/am curtha isteach"
+
+#: contrib/comments/models.py:60
+#: db/models/fields/__init__.py:914
+msgid "IP address"
+msgstr "Seol IP"
+
+#: contrib/comments/models.py:61
+msgid "is public"
+msgstr "poiblí"
+
+#: contrib/comments/models.py:62
+msgid "Uncheck this box to make the comment effectively disappear from the site."
+msgstr "Díthiceáil an bosca seo chun an nóta a thógáil as an suíomh."
+
+#: contrib/comments/models.py:64
+msgid "is removed"
+msgstr "Scrioste"
+
+#: contrib/comments/models.py:65
+msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
+msgstr "Seic an bosca seo dá bbéadh an nóta tráchta seo míchuí. Taispeantar \"Bhí an nóta tráchta scrioste\" in áit an nóta tráchta seo."
 
 #: contrib/comments/models.py:77
-msgid "rating #4"
-msgstr "rátáil #4"
-
-#: contrib/comments/models.py:78
-msgid "rating #5"
-msgstr "rátáil #5"
-
-#: contrib/comments/models.py:79
-msgid "rating #6"
-msgstr "rátáil #6"
-
-#: contrib/comments/models.py:80
-msgid "rating #7"
-msgstr "rátáil #7"
-
-#: contrib/comments/models.py:81
-msgid "rating #8"
-msgstr "rátáil #8"
-
-#: contrib/comments/models.py:86
-msgid "is valid rating"
-msgstr "is rátáil bailí"
-
-#: contrib/comments/models.py:87 contrib/comments/models.py:167
-msgid "date/time submitted"
-msgstr "Dáta/am curtha isteach"
-
-#: contrib/comments/models.py:88 contrib/comments/models.py:168
-msgid "is public"
-msgstr "poiblí"
-
-#: contrib/comments/models.py:90
-msgid "is removed"
-msgstr "Scrioste"
-
-#: contrib/comments/models.py:90
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Seic an bosca seo dá bbéadh an nóta tráchta seo míchuí. Taispeantar \"Bhí an nóta tráchta scrioste\" in áit an nóta tráchta seo."
-
-#: contrib/comments/models.py:96
 msgid "comments"
 msgstr "nótaí tráchta"
 
-#: contrib/comments/models.py:128 contrib/comments/models.py:199
-msgid "Content object"
-msgstr "Oibiacht inneachar"
-
-#: contrib/comments/models.py:156
+#: contrib/comments/models.py:119
+msgid "This comment was posted by an authenticated user and thus the name is read-only."
+msgstr "Bhí an nóta tráchta póstailte trí uaire trí úsáideoir fíordheimhnithe mar sin tá an ainm léamh-amhain."
+
+#: contrib/comments/models.py:128
+msgid "This comment was posted by an authenticated user and thus the email is read-only."
+msgstr "Bhí an nóta tráchta póstailte trí úsáideoir fíordeimhnite mar sin tá an r-phost léamh amháin."
+
+#: contrib/comments/models.py:153
 #, python-format
 msgid ""
 "Posted by %(user)s at %(date)s\n"
@@ -1422,280 +1487,217 @@
 "\n"
 "http://%(domain)s%(url)s"
 
-#: contrib/comments/models.py:166
-msgid "person's name"
-msgstr "Ainm"
-
-#: contrib/comments/models.py:169
-msgid "ip address"
-msgstr "seoladh ip"
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr "brat"
 
 #: contrib/comments/models.py:171
-msgid "approved by staff"
-msgstr "ceadaithe tríd an foireann"
-
-#: contrib/comments/models.py:175
-msgid "free comment"
-msgstr "Nóta tráchta saor"
-
-#: contrib/comments/models.py:176
-msgid "free comments"
-msgstr "Nótaí tráchtaí saoire"
-
-#: contrib/comments/models.py:227
-msgid "score"
-msgstr "scór"
-
-#: contrib/comments/models.py:228
-msgid "score date"
-msgstr "Dáta scór"
-
-#: contrib/comments/models.py:232
-msgid "karma score"
-msgstr "Scór karma"
-
-#: contrib/comments/models.py:233
-msgid "karma scores"
-msgstr "Scóra karma"
-
-#: contrib/comments/models.py:237
-#, python-format
-msgid "%(score)d rating by %(user)s"
-msgstr "%(score)d rátailte trí  %(user)s"
-
-#: contrib/comments/models.py:254
-#, python-format
-msgid ""
-"This comment was flagged by %(user)s:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Bhí bratach curtha leis an nóta tráchta seo trí %(user)s:\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/models.py:262
-msgid "flag date"
-msgstr "Dáta brait"
-
-#: contrib/comments/models.py:266
-msgid "user flag"
-msgstr "Brat úsáideoir"
-
-#: contrib/comments/models.py:267
-msgid "user flags"
-msgstr "Brait úsáideoira"
-
-#: contrib/comments/models.py:271
-#, python-format
-msgid "Flag by %r"
-msgstr "Cuir brat leis roimh %r"
-
-#: contrib/comments/models.py:277
-msgid "deletion date"
-msgstr "Dáta scrioseadh"
-
-#: contrib/comments/models.py:280
-msgid "moderator deletion"
-msgstr "Scroiseadh modhnóir"
-
-#: contrib/comments/models.py:281
-msgid "moderator deletions"
-msgstr "Scrios modhnóra"
-
-#: contrib/comments/models.py:285
-#, python-format
-msgid "Moderator deletion by %r"
-msgstr "Scrios modhnóir trí %r"
-
-#: contrib/comments/templates/comments/form.html:8
-msgid "Forgotten your password?"
-msgstr "Dearmad déanta ar do focal faire?"
-
-#: contrib/comments/templates/comments/form.html:12
-msgid "Ratings"
-msgstr "Rátála"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Required"
-msgstr "Riachtanach"
-
-#: contrib/comments/templates/comments/form.html:12
-#: contrib/comments/templates/comments/form.html:23
-msgid "Optional"
-msgstr "Roghnach"
-
-#: contrib/comments/templates/comments/form.html:23
-msgid "Post a photo"
-msgstr "Post griangraf"
-
-#: contrib/comments/templates/comments/form.html:28
-#: contrib/comments/templates/comments/freeform.html:5
-msgid "Comment:"
-msgstr "Nóta tráchta"
-
-#: contrib/comments/templates/comments/form.html:35
-#: contrib/comments/templates/comments/freeform.html:10
-msgid "Preview comment"
+msgid "date"
+msgstr "dáta"
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr "brat nóta tráchta"
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr "bratacha nótaí tráchta"
+
+#: contrib/comments/templates/comments/approve.html:4
+msgid "Approve a comment"
+msgstr "Ceadaigh nóta tráchta"
+
+#: contrib/comments/templates/comments/approve.html:7
+msgid "Really make this comment public?"
+msgstr "Cuir an nóta seo poiblí?"
+
+#: contrib/comments/templates/comments/approve.html:12
+msgid "Approve"
+msgstr "Fhormheas"
+
+#: contrib/comments/templates/comments/approved.html:4
+msgid "Thanks for approving"
+msgstr "Go raibh maith agait le hadhaigh to formheas"
+
+#: contrib/comments/templates/comments/approved.html:7
+#: contrib/comments/templates/comments/deleted.html:7
+#: contrib/comments/templates/comments/flagged.html:7
+msgid "Thanks for taking the time to improve the quality of discussion on our site"
+msgstr "Go raibh maith agat as an am chun feabhas a chur ar chaighdeán na díospóireachta ar ár suíomh"
+
+#: contrib/comments/templates/comments/delete.html:4
+msgid "Remove a comment"
+msgstr "Tóg amach nóta tráchta"
+
+#: contrib/comments/templates/comments/delete.html:7
+msgid "Really remove this comment?"
+msgstr "Dáiríre, cuir amach an nóta seo?"
+
+#: contrib/comments/templates/comments/deleted.html:4
+msgid "Thanks for removing"
+msgstr "Go raibh maith agat le hadhaigh do thógail amach"
+
+#: contrib/comments/templates/comments/flag.html:4
+msgid "Flag this comment"
+msgstr "Cuir brat ar an nóta tráchta seo"
+
+#: contrib/comments/templates/comments/flag.html:7
+msgid "Really flag this comment?"
+msgstr "Go deimhin cuir brat ar an nóta tráchta seo?"
+
+#: contrib/comments/templates/comments/flag.html:12
+msgid "Flag"
+msgstr "Brat"
+
+#: contrib/comments/templates/comments/flagged.html:4
+msgid "Thanks for flagging"
+msgstr "Go raibh maith agat le hadhaigh do brat"
+
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
+msgid "Post"
+msgstr "Post"
+
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
+msgid "Preview"
+msgstr "Réamhamharc"
+
+#: contrib/comments/templates/comments/posted.html:4
+msgid "Thanks for commenting"
+msgstr "Go raibh maith agat le hadhaign do nóta tráchta"
+
+#: contrib/comments/templates/comments/posted.html:7
+msgid "Thank you for your comment"
+msgstr "Go raibh maith agat le hadhaigh do nóta tráchta"
+
+#: contrib/comments/templates/comments/preview.html:4
+#: contrib/comments/templates/comments/preview.html:13
+msgid "Preview your comment"
 msgstr "Nóta tráchta réamhamharc"
 
-#: contrib/comments/templates/comments/freeform.html:4
-msgid "Your name:"
-msgstr "Do chuid ainm:"
-
-#: contrib/comments/views/comments.py:76
-msgid ""
-"This rating is required because you've entered at least one other rating."
-msgstr "Tá an rátáil seo ag teastail mar cuir tú rátáil amhain eile isteach ar a laghad."
-
-#: contrib/comments/views/comments.py:160
-#, python-format
-msgid ""
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comment:\n"
-"\n"
-"%(text)s"
-"This comment was posted by a user who has posted fewer than %(count)s "
-"comments:\n"
-"\n"
-"%(text)s"
-msgstr ""
-"Bhí an nóta tráchta póstailte trí úsáideoir a cuir níos lú ná %(count)s nótaí tráchtaí\n"
-"\n"
-"%(text)s"
-"Bhí an nóta tráchta póstailte trí úsáideoir a cuir níos lú ná %(count)s nótaí tráchtaí\n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:165
-#, python-format
-msgid ""
-"This comment was posted by a sketchy user:\n"
-"\n"
-"%(text)s"
-msgstr "Bhí an nóta tráchta póstailte trí úsáideoir ait \n"
-"\n"
-"%(text)s"
-
-#: contrib/comments/views/comments.py:238
-#: contrib/comments/views/comments.py:331
-msgid "Only POSTs are allowed"
-msgstr "POSTs amhain ceadaithe"
-
-#: contrib/comments/views/comments.py:242
-#: contrib/comments/views/comments.py:335
-msgid "One or more of the required fields wasn't submitted"
-msgstr "Níor curtha isteach ceann amhain nó níos mó de na réimse riachtanach"
-
-#: contrib/comments/views/comments.py:246
-#: contrib/comments/views/comments.py:337
-msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Cuir duine éigin isteach leis an foirm nóta tráchta (fadbh slándála)"
-
-#: contrib/comments/views/comments.py:256
-#: contrib/comments/views/comments.py:343
-msgid ""
-"The comment form had an invalid 'target' parameter -- the object ID was "
-"invalid"
-msgstr ""
-"Bhí paraiméadar targaid mícheart ag an foirm nóta tráchta -- bhí ID an oibiacht neamhbhailí"
-
-#: contrib/comments/views/comments.py:307
-#: contrib/comments/views/comments.py:372
-msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Níor sholáthair an foirm nóta tráchta 'réamhamharc' nó 'post'"
-
-#: contrib/comments/views/karma.py:21
-msgid "Anonymous users cannot vote"
-msgstr "Níl cead ag úsáideoira anaithnid vótáil"
-
-#: contrib/comments/views/karma.py:25
-msgid "Invalid comment ID"
-msgstr "Nóta tráchta ID neamhbhailí"
-
-#: contrib/comments/views/karma.py:27
-msgid "No voting for yourself"
-msgstr "Vótáil leat féin coiscthe"
-
-#: contrib/contenttypes/models.py:67
+#: contrib/comments/templates/comments/preview.html:11
+msgid "Please correct the error below"
+msgid_plural "Please correct the errors below"
+msgstr[0] "Le do thoil ceartaigh an botún thíos."
+msgstr[1] "Le do thoil ceartaigh na botúin thíos."
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "Post your comment"
+msgstr "Seol do Nóta tráchta"
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "or make changes"
+msgstr "nó déan aithraithe"
+
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "píotón samhail aicme ainm"
 
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "tíopa inneachar "
-
-#: contrib/contenttypes/models.py:72
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "tíopaI inneachair"
 
 #: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
 msgstr "Sampla '/about/contact/' Déan cinnte go bhfuil príomhslaid agus cúlslais agat."
 
-#: contrib/flatpages/admin.py:11 core/validators.py:76
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
+#: contrib/flatpages/admin.py:11
+msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
 msgstr "Níl ach litreacha, uimhreacha, slaiseacha, fólíniú agus daiseanna ceadaithe."
 
 #: contrib/flatpages/admin.py:22
 msgid "Advanced options"
 msgstr "Ard-rogha"
 
-#: contrib/flatpages/models.py:9
+#: contrib/flatpages/models.py:8
 msgid "title"
 msgstr "teideal"
 
+#: contrib/flatpages/models.py:9
+msgid "content"
+msgstr "inneachar"
+
 #: contrib/flatpages/models.py:10
-msgid "content"
-msgstr "suaimhneach"
+msgid "enable comments"
+msgstr "Cuir nótaí tráchta ar chumas"
 
 #: contrib/flatpages/models.py:11
-msgid "enable comments"
-msgstr "Cuir nótaí tráchta ar chumas"
+msgid "template name"
+msgstr "ainm an teimpléid"
 
 #: contrib/flatpages/models.py:12
-msgid "template name"
-msgstr "ainm an teimpléid"
+msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
+msgstr "Sampla: 'flatpages/contact_page.html'. Muna bhfuil sé ar soláthair, bainfidh an córás úsáid as 'flatpages/default.html'."
+
+#: contrib/flatpages/models.py:13
+msgid "registration required"
+msgstr "clárúchán riachtanach"
 
 #: contrib/flatpages/models.py:13
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Sampla: 'flatpages/contact_page.html'. Muna bhfuil sé ar soláthair, bainfidh an córás úsáid as 'flatpages/default.html'."
-
-#: contrib/flatpages/models.py:14
-msgid "registration required"
-msgstr "clárúchán riachtanach"
-
-#: contrib/flatpages/models.py:14
 msgid "If this is checked, only logged-in users will be able to view the page."
 msgstr "Dá mbéadh é seo seicailte, ní beidh ach úsáideora logáilte isteach in ann an leathanach seo a fheiceail"
 
-#: contrib/flatpages/models.py:19
+#: contrib/flatpages/models.py:18
 msgid "flat page"
 msgstr "leacleathanach"
 
-#: contrib/flatpages/models.py:20
+#: contrib/flatpages/models.py:19
 msgid "flat pages"
 msgstr "leacleathanaigh"
 
-#: contrib/gis/forms/fields.py:10
+#: contrib/formtools/wizard.py:134
+msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
+msgstr "Gabh ár leithscéal, ach tá do fhoirm in éag. Lean ar aghaidh le do thoil líonadh amach an fhoirm ón leathanach seo."
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr "GIS an bonn réimse - léarscáileanna chun an Sonraíocht OpenGIS cineál Céimseata."
+
+#: contrib/gis/db/models/fields.py:269
+msgid "Point"
+msgstr "Pointe"
+
+#: contrib/gis/db/models/fields.py:273
+msgid "Line string"
+msgstr "Líne teaghrán"
+
+#: contrib/gis/db/models/fields.py:277
+msgid "Polygon"
+msgstr "Polagán"
+
+#: contrib/gis/db/models/fields.py:281
+msgid "Multi-point"
+msgstr "Il-phointe"
+
+#: contrib/gis/db/models/fields.py:285
+msgid "Multi-line string"
+msgstr "Il-líne teaghrán"
+
+#: contrib/gis/db/models/fields.py:289
+msgid "Multi polygon"
+msgstr "Il polagán"
+
+#: contrib/gis/db/models/fields.py:293
+msgid "Geometry collection"
+msgstr "Céimseata bhailiú"
+
+#: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Ní soláthair méid geoiméadracht"
 
-#: contrib/gis/forms/fields.py:11
-msgid "Invalid Geometry value."
+#: contrib/gis/forms/fields.py:18
+msgid "Invalid geometry value."
 msgstr "Méid geoiméadracht neamhbhailí"
 
-#: contrib/gis/forms/fields.py:12
-msgid "Invalid Geometry type."
+#: contrib/gis/forms/fields.py:19
+msgid "Invalid geometry type."
 msgstr "Tíopa geoiméadracht neamhbhailí"
 
+#: contrib/gis/forms/fields.py:20
+msgid "An error occurred when transforming the geometry to the SRID of the geometry form field."
+msgstr "Tharla earráid ag claochlú an geoiméadracht go dtí SRID an réimse fhoirm geoiméadracht."
+
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
 msgstr "ú"
@@ -1715,17 +1717,23 @@
 #: contrib/humanize/templatetags/humanize.py:51
 #, python-format
 msgid "%(value).1f million"
-msgstr "%(value).1f milliún"
+msgid_plural "%(value).1f million"
+msgstr[0] "%(value).1f milliún"
+msgstr[1] "%(value).1f milliún"
 
 #: contrib/humanize/templatetags/humanize.py:54
 #, python-format
 msgid "%(value).1f billion"
-msgstr "%(value).1f billiún"
+msgid_plural "%(value).1f billion"
+msgstr[0] "%(value).1f billiún"
+msgstr[1] "%(value).1f billiún"
 
 #: contrib/humanize/templatetags/humanize.py:57
 #, python-format
 msgid "%(value).1f trillion"
-msgstr "%(value).1f trilliún"
+msgid_plural "%(value).1f trillion"
+msgstr[0] "%(value).1f trilliún"
+msgstr[1] "%(value).1f trilliún"
 
 #: contrib/humanize/templatetags/humanize.py:73
 msgid "one"
@@ -1775,25 +1783,27 @@
 msgid "yesterday"
 msgstr "inné"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Cuir isteach cód póstal ins an formáid NNNN nó ANNNNAAA"
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Teastaíonn an réimse seo uimhreacha amháin."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Teastaíonn an réimse seo 7 nó 8 digite."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Cuir isteach CUIT bailí i formáid XX-XXXXXXXX-X nó XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "CUIT neamhbailí"
 
@@ -1833,84 +1843,83 @@
 msgid "Vienna"
 msgstr "Vín"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20
+#: contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Cuir isteach cód zip ins an formáid XXXX."
 
 #: contrib/localflavor/at/forms.py:48
 msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-
-#: contrib/localflavor/au/forms.py:16
+msgstr "Iontráil uimhir Ostaire Slándáil Shóisialta bailí i bhformáid XXXX XXXXXX."
+
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:21
+msgstr "Iontráil cód poist 4 dhigit."
+
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:30
+msgstr "Iontráil zip-cód i bhformáid XXXXX-XXX."
+
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:94
-msgid "Invalid CPF number."
-msgstr ""
+msgstr "Ní mór Uimhreacha teileafóin a chur i XX-XXXX-XXXX format."
+
+#: contrib/localflavor/br/forms.py:59
+msgid "Select a valid brazilian state. That state is not one of the available states."
+msgstr "Roghnaigh stát na Brasaíle bailí. Ní thugann an Stát sin ar cheann de na stáit atá ar fáil."
 
 #: contrib/localflavor/br/forms.py:95
+msgid "Invalid CPF number."
+msgstr "Uimhir CPF neamhbhailí."
+
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:134
+msgstr "Éilíonn an réimse seo ag an chuid is mó dhigit 11 nó 14 de charachtair."
+
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
-msgstr ""
-
-#: contrib/localflavor/br/forms.py:136
+msgstr "Neamhbhailí CNPJ uimhir."
+
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:17
+msgstr "Éilíonn an réimse seo ar a laghad 14 digití"
+
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
-msgstr ""
-
-#: contrib/localflavor/ca/forms.py:88
+msgstr "Iontráil cód poist i bhformáid XXX XXX."
+
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
+msgstr "Iontráil uimhir Cheanada Árachais Shóisialaigh bailí i bhformáid XXX-XXX-XXX."
 
 #: contrib/localflavor/ch/ch_states.py:5
 msgid "Aargau"
-msgstr ""
+msgstr "Aargau"
 
 #: contrib/localflavor/ch/ch_states.py:6
 msgid "Appenzell Innerrhoden"
-msgstr ""
+msgstr "Appenzell Innerrhoden"
 
 #: contrib/localflavor/ch/ch_states.py:7
 msgid "Appenzell Ausserrhoden"
-msgstr ""
+msgstr "Appenzell Ausserrhoden"
 
 #: contrib/localflavor/ch/ch_states.py:8
 msgid "Basel-Stadt"
-msgstr ""
+msgstr "Basel-Stadt"
 
 #: contrib/localflavor/ch/ch_states.py:9
 msgid "Basel-Land"
-msgstr ""
+msgstr "Basel-Talún"
 
 #: contrib/localflavor/ch/ch_states.py:10
 msgid "Berne"
-msgstr ""
+msgstr "Berne"
 
 #: contrib/localflavor/ch/ch_states.py:11
 msgid "Fribourg"
-msgstr ""
+msgstr "Fribourg"
 
 #: contrib/localflavor/ch/ch_states.py:12
 msgid "Geneva"
@@ -1918,101 +1927,176 @@
 
 #: contrib/localflavor/ch/ch_states.py:13
 msgid "Glarus"
-msgstr ""
+msgstr "Glarus"
 
 #: contrib/localflavor/ch/ch_states.py:14
 msgid "Graubuenden"
-msgstr ""
+msgstr "Graubuenden"
 
 #: contrib/localflavor/ch/ch_states.py:15
 msgid "Jura"
-msgstr ""
+msgstr "Jura"
 
 #: contrib/localflavor/ch/ch_states.py:16
 msgid "Lucerne"
-msgstr ""
+msgstr "Lucerne"
 
 #: contrib/localflavor/ch/ch_states.py:17
 msgid "Neuchatel"
-msgstr ""
+msgstr "Neuchatel"
 
 #: contrib/localflavor/ch/ch_states.py:18
 msgid "Nidwalden"
-msgstr ""
+msgstr "Nidwalden"
 
 #: contrib/localflavor/ch/ch_states.py:19
 msgid "Obwalden"
-msgstr ""
+msgstr "Obwalden"
 
 #: contrib/localflavor/ch/ch_states.py:20
 msgid "Schaffhausen"
-msgstr ""
+msgstr "Schaffhausen"
 
 #: contrib/localflavor/ch/ch_states.py:21
 msgid "Schwyz"
-msgstr ""
+msgstr "Schwyz"
 
 #: contrib/localflavor/ch/ch_states.py:22
 msgid "Solothurn"
-msgstr ""
+msgstr "Solothurn"
 
 #: contrib/localflavor/ch/ch_states.py:23
 msgid "St. Gallen"
-msgstr ""
+msgstr "St Gallen"
 
 #: contrib/localflavor/ch/ch_states.py:24
 msgid "Thurgau"
-msgstr ""
+msgstr "Thurgau"
 
 #: contrib/localflavor/ch/ch_states.py:25
 msgid "Ticino"
-msgstr ""
+msgstr "Ticino"
 
 #: contrib/localflavor/ch/ch_states.py:26
 msgid "Uri"
-msgstr ""
+msgstr "Uri"
 
 #: contrib/localflavor/ch/ch_states.py:27
 msgid "Valais"
-msgstr ""
+msgstr "Valais"
 
 #: contrib/localflavor/ch/ch_states.py:28
 msgid "Vaud"
-msgstr ""
+msgstr "Vaud"
 
 #: contrib/localflavor/ch/ch_states.py:29
 msgid "Zug"
-msgstr ""
+msgstr "Zug"
 
 #: contrib/localflavor/ch/ch_states.py:30
 msgid "Zurich"
-msgstr ""
-
-#: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-
-#: contrib/localflavor/cl/forms.py:29
-msgid "Enter a valid Chilean RUT."
-msgstr ""
+msgstr "Zürich"
+
+#: contrib/localflavor/ch/forms.py:65
+msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
+msgstr "Iontráil aitheantais hEilvéise bailí nó uimhir pas cárta i bhformáid X1234567<0 nó 1234567890."
 
 #: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
+msgid "Enter a valid Chilean RUT."
+msgstr "Iontráil RUT Chilean bailí."
 
 #: contrib/localflavor/cl/forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr "Iontráil RUT bailí Chilean. Is é an fhormáid XX.XXX.XXX-X."
+
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
-msgstr ""
+msgstr "Níl an RUT Chilean bailí."
+
+#: contrib/localflavor/cz/cz_regions.py:8
+msgid "Prague"
+msgstr "Prague"
+
+#: contrib/localflavor/cz/cz_regions.py:9
+msgid "Central Bohemian Region"
+msgstr "Réigiún Central Bohemian"
+
+#: contrib/localflavor/cz/cz_regions.py:10
+msgid "South Bohemian Region"
+msgstr "Réigiún Bohemian Theas"
+
+#: contrib/localflavor/cz/cz_regions.py:11
+msgid "Pilsen Region"
+msgstr "Pilsen Réigiún"
+
+#: contrib/localflavor/cz/cz_regions.py:12
+msgid "Carlsbad Region"
+msgstr "Carlsbad Réigiún"
+
+#: contrib/localflavor/cz/cz_regions.py:13
+msgid "Usti Region"
+msgstr "Usti Réigiún"
+
+#: contrib/localflavor/cz/cz_regions.py:14
+msgid "Liberec Region"
+msgstr "Liberec Réigiún"
+
+#: contrib/localflavor/cz/cz_regions.py:15
+msgid "Hradec Region"
+msgstr "Hradec Réigiún"
+
+#: contrib/localflavor/cz/cz_regions.py:16
+msgid "Pardubice Region"
+msgstr "Pardubice Réigiún"
+
+#: contrib/localflavor/cz/cz_regions.py:17
+msgid "Vysocina Region"
+msgstr "Vysocina Réigiún"
+
+#: contrib/localflavor/cz/cz_regions.py:18
+msgid "South Moravian Region"
+msgstr "Réigiún Moravian Theas"
+
+#: contrib/localflavor/cz/cz_regions.py:19
+msgid "Olomouc Region"
+msgstr "Réigiún Olomouc"
+
+#: contrib/localflavor/cz/cz_regions.py:20
+msgid "Zlin Region"
+msgstr "Réigiún Zlin"
+
+#: contrib/localflavor/cz/cz_regions.py:21
+msgid "Moravian-Silesian Region"
+msgstr "Réigiún Moravian-Silesian"
+
+#: contrib/localflavor/cz/forms.py:28
+#: contrib/localflavor/sk/forms.py:30
+msgid "Enter a postal code in the format XXXXX or XXX XX."
+msgstr "Iontráil cód poist i bhformáid XXXXX nó XXX XX."
+
+#: contrib/localflavor/cz/forms.py:48
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Iontráil uimhir breithe i bhformáid XXXXXX/XXXX nó XXXXXXXXXX."
+
+#: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr "Paraiméadar inscne roghnach neamhbhailí, is iad 'f' agus 'm' na luachanna bailí"
+
+#: contrib/localflavor/cz/forms.py:50
+msgid "Enter a valid birth number."
+msgstr "Cuir isteach uimhir breithe bailí."
+
+#: contrib/localflavor/cz/forms.py:107
+msgid "Enter a valid IC number."
+msgstr "Cuir isteach uimhir IC bailí."
 
 #: contrib/localflavor/de/de_states.py:5
 msgid "Baden-Wuerttemberg"
-msgstr ""
+msgstr "Baden-Wuerttemberg"
 
 #: contrib/localflavor/de/de_states.py:6
 msgid "Bavaria"
-msgstr ""
+msgstr "An Bhaváir"
 
 #: contrib/localflavor/de/de_states.py:7
 msgid "Berlin"
@@ -2020,1526 +2104,2057 @@
 
 #: contrib/localflavor/de/de_states.py:8
 msgid "Brandenburg"
-msgstr ""
+msgstr "Brandenburg"
 
 #: contrib/localflavor/de/de_states.py:9
 msgid "Bremen"
-msgstr ""
+msgstr "Bremen"
 
 #: contrib/localflavor/de/de_states.py:10
 msgid "Hamburg"
-msgstr ""
+msgstr "Hamburg"
 
 #: contrib/localflavor/de/de_states.py:11
 msgid "Hessen"
-msgstr ""
+msgstr "Hessen"
 
 #: contrib/localflavor/de/de_states.py:12
 msgid "Mecklenburg-Western Pomerania"
-msgstr ""
+msgstr "Mecklenburg-Pomerania Thiar"
 
 #: contrib/localflavor/de/de_states.py:13
 msgid "Lower Saxony"
-msgstr ""
+msgstr "An tSacsain Íochtair"
 
 #: contrib/localflavor/de/de_states.py:14
 msgid "North Rhine-Westphalia"
-msgstr ""
+msgstr "Réin Thuaidh-Westphalia"
 
 #: contrib/localflavor/de/de_states.py:15
 msgid "Rhineland-Palatinate"
-msgstr ""
+msgstr "Dúiche na Réine-Palatinate"
 
 #: contrib/localflavor/de/de_states.py:16
 msgid "Saarland"
-msgstr ""
+msgstr "Saarland"
 
 #: contrib/localflavor/de/de_states.py:17
 msgid "Saxony"
-msgstr ""
+msgstr "An tSacsain"
 
 #: contrib/localflavor/de/de_states.py:18
 msgid "Saxony-Anhalt"
-msgstr ""
+msgstr "An tSacsain-Anhalt"
 
 #: contrib/localflavor/de/de_states.py:19
 msgid "Schleswig-Holstein"
-msgstr ""
+msgstr "Schleswig-Holstein"
 
 #: contrib/localflavor/de/de_states.py:20
 msgid "Thuringia"
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+msgstr "Thuringia"
+
+#: contrib/localflavor/de/forms.py:15
+#: contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
-msgstr ""
-
-#: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
+msgstr "Iontráil zip-cód i bhformáid XXXXX."
+
+#: contrib/localflavor/de/forms.py:42
+msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
+msgstr "Iontráil uimhir cárta aitheantais na Gearmáine bailí i bhformáid XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
 
 #: contrib/localflavor/es/es_provinces.py:5
 msgid "Arava"
-msgstr ""
+msgstr "Arava"
 
 #: contrib/localflavor/es/es_provinces.py:6
 msgid "Albacete"
-msgstr ""
+msgstr "Albacete"
 
 #: contrib/localflavor/es/es_provinces.py:7
 msgid "Alacant"
-msgstr ""
+msgstr "Alacant"
 
 #: contrib/localflavor/es/es_provinces.py:8
 msgid "Almeria"
-msgstr ""
+msgstr "Almeria"
 
 #: contrib/localflavor/es/es_provinces.py:9
 msgid "Avila"
-msgstr ""
+msgstr "Ávila"
 
 #: contrib/localflavor/es/es_provinces.py:10
 msgid "Badajoz"
-msgstr ""
+msgstr "Badajoz"
 
 #: contrib/localflavor/es/es_provinces.py:11
 msgid "Illes Balears"
-msgstr ""
+msgstr "Illes Balears"
 
 #: contrib/localflavor/es/es_provinces.py:12
 msgid "Barcelona"
-msgstr ""
+msgstr "Barcelona"
 
 #: contrib/localflavor/es/es_provinces.py:13
 msgid "Burgos"
-msgstr ""
+msgstr "Burgos"
 
 #: contrib/localflavor/es/es_provinces.py:14
 msgid "Caceres"
-msgstr ""
+msgstr "Cáceres"
 
 #: contrib/localflavor/es/es_provinces.py:15
 msgid "Cadiz"
-msgstr ""
+msgstr "Cádiz"
 
 #: contrib/localflavor/es/es_provinces.py:16
 msgid "Castello"
-msgstr ""
+msgstr "Castello"
 
 #: contrib/localflavor/es/es_provinces.py:17
 msgid "Ciudad Real"
-msgstr ""
+msgstr "Ciudad Real"
 
 #: contrib/localflavor/es/es_provinces.py:18
 msgid "Cordoba"
-msgstr ""
+msgstr "Cordoba"
 
 #: contrib/localflavor/es/es_provinces.py:19
 msgid "A Coruna"
-msgstr ""
+msgstr "A Coruña"
 
 #: contrib/localflavor/es/es_provinces.py:20
 msgid "Cuenca"
-msgstr ""
+msgstr "Cuenca"
 
 #: contrib/localflavor/es/es_provinces.py:21
 msgid "Girona"
-msgstr ""
+msgstr "Girona"
 
 #: contrib/localflavor/es/es_provinces.py:22
 msgid "Granada"
-msgstr ""
+msgstr "Granada"
 
 #: contrib/localflavor/es/es_provinces.py:23
 msgid "Guadalajara"
-msgstr ""
+msgstr "Guadalajara"
 
 #: contrib/localflavor/es/es_provinces.py:24
 msgid "Guipuzkoa"
-msgstr ""
+msgstr "Guipuzkoa"
 
 #: contrib/localflavor/es/es_provinces.py:25
 msgid "Huelva"
-msgstr ""
+msgstr "Huelva"
 
 #: contrib/localflavor/es/es_provinces.py:26
 msgid "Huesca"
-msgstr ""
+msgstr "Huesca"
 
 #: contrib/localflavor/es/es_provinces.py:27
 msgid "Jaen"
-msgstr ""
+msgstr "Jaen"
 
 #: contrib/localflavor/es/es_provinces.py:28
 msgid "Leon"
-msgstr ""
+msgstr "Leon"
 
 #: contrib/localflavor/es/es_provinces.py:29
 msgid "Lleida"
-msgstr ""
+msgstr "Lleida"
 
 #: contrib/localflavor/es/es_provinces.py:30
 #: contrib/localflavor/es/es_regions.py:17
 msgid "La Rioja"
-msgstr ""
+msgstr "La Rioja"
 
 #: contrib/localflavor/es/es_provinces.py:31
 msgid "Lugo"
-msgstr ""
+msgstr "Lugo"
 
 #: contrib/localflavor/es/es_provinces.py:32
 #: contrib/localflavor/es/es_regions.py:18
 msgid "Madrid"
-msgstr ""
+msgstr "Maidrid"
 
 #: contrib/localflavor/es/es_provinces.py:33
 msgid "Malaga"
-msgstr ""
+msgstr "Málaga"
 
 #: contrib/localflavor/es/es_provinces.py:34
 msgid "Murcia"
-msgstr ""
+msgstr "Murcia"
 
 #: contrib/localflavor/es/es_provinces.py:35
 msgid "Navarre"
-msgstr ""
+msgstr "Navarre"
 
 #: contrib/localflavor/es/es_provinces.py:36
 msgid "Ourense"
-msgstr ""
+msgstr "Ourense"
 
 #: contrib/localflavor/es/es_provinces.py:37
 msgid "Asturias"
-msgstr ""
+msgstr "Asturias"
 
 #: contrib/localflavor/es/es_provinces.py:38
 msgid "Palencia"
-msgstr ""
+msgstr "Palencia"
 
 #: contrib/localflavor/es/es_provinces.py:39
 msgid "Las Palmas"
-msgstr ""
+msgstr "Las Palmas"
 
 #: contrib/localflavor/es/es_provinces.py:40
 msgid "Pontevedra"
-msgstr ""
+msgstr "Pontevedra"
 
 #: contrib/localflavor/es/es_provinces.py:41
 msgid "Salamanca"
-msgstr ""
+msgstr "Salamanca"
 
 #: contrib/localflavor/es/es_provinces.py:42
 msgid "Santa Cruz de Tenerife"
-msgstr ""
+msgstr "Santa Cruz de Tenerife"
 
 #: contrib/localflavor/es/es_provinces.py:43
 #: contrib/localflavor/es/es_regions.py:11
 msgid "Cantabria"
-msgstr ""
+msgstr "Cantabria"
 
 #: contrib/localflavor/es/es_provinces.py:44
 msgid "Segovia"
-msgstr ""
+msgstr "Segovia"
 
 #: contrib/localflavor/es/es_provinces.py:45
 msgid "Seville"
-msgstr ""
+msgstr "Sevilla"
 
 #: contrib/localflavor/es/es_provinces.py:46
 msgid "Soria"
-msgstr ""
+msgstr "Soria"
 
 #: contrib/localflavor/es/es_provinces.py:47
 msgid "Tarragona"
-msgstr ""
+msgstr "Tarragona"
 
 #: contrib/localflavor/es/es_provinces.py:48
 msgid "Teruel"
-msgstr ""
+msgstr "Teruel"
 
 #: contrib/localflavor/es/es_provinces.py:49
 msgid "Toledo"
-msgstr ""
+msgstr "Toledo"
 
 #: contrib/localflavor/es/es_provinces.py:50
 msgid "Valencia"
-msgstr ""
+msgstr "Valencia"
 
 #: contrib/localflavor/es/es_provinces.py:51
 msgid "Valladolid"
-msgstr ""
+msgstr "Valladolid"
 
 #: contrib/localflavor/es/es_provinces.py:52
 msgid "Bizkaia"
-msgstr ""
+msgstr "Bizkaia"
 
 #: contrib/localflavor/es/es_provinces.py:53
 msgid "Zamora"
-msgstr ""
+msgstr "Zamora"
 
 #: contrib/localflavor/es/es_provinces.py:54
 msgid "Zaragoza"
-msgstr ""
+msgstr "Zaragoza"
 
 #: contrib/localflavor/es/es_provinces.py:55
 msgid "Ceuta"
-msgstr ""
+msgstr "Ceuta"
 
 #: contrib/localflavor/es/es_provinces.py:56
 msgid "Melilla"
-msgstr ""
+msgstr "Melilla"
 
 #: contrib/localflavor/es/es_regions.py:5
 msgid "Andalusia"
-msgstr ""
+msgstr "Andalusia"
 
 #: contrib/localflavor/es/es_regions.py:6
 msgid "Aragon"
-msgstr ""
+msgstr "Aragon"
 
 #: contrib/localflavor/es/es_regions.py:7
 msgid "Principality of Asturias"
-msgstr ""
+msgstr "Phrionsacht Asturias"
 
 #: contrib/localflavor/es/es_regions.py:8
 msgid "Balearic Islands"
-msgstr ""
+msgstr "Na hOileáin Bhailéaracha"
 
 #: contrib/localflavor/es/es_regions.py:9
 msgid "Basque Country"
-msgstr ""
+msgstr "Tír na mBascach"
 
 #: contrib/localflavor/es/es_regions.py:10
 msgid "Canary Islands"
-msgstr ""
+msgstr "Na hOileáin Chanáracha"
 
 #: contrib/localflavor/es/es_regions.py:12
 msgid "Castile-La Mancha"
-msgstr ""
+msgstr "Castilla-La Mancha"
 
 #: contrib/localflavor/es/es_regions.py:13
 msgid "Castile and Leon"
-msgstr ""
+msgstr "Castilla agus Leon"
 
 #: contrib/localflavor/es/es_regions.py:14
 msgid "Catalonia"
-msgstr ""
+msgstr "An Chatalóin"
 
 #: contrib/localflavor/es/es_regions.py:15
 msgid "Extremadura"
-msgstr ""
+msgstr "Extremadura"
 
 #: contrib/localflavor/es/es_regions.py:16
 msgid "Galicia"
-msgstr ""
+msgstr "Galicia"
 
 #: contrib/localflavor/es/es_regions.py:19
 msgid "Region of Murcia"
-msgstr ""
+msgstr "Réigiún de Murcia"
 
 #: contrib/localflavor/es/es_regions.py:20
 msgid "Foral Community of Navarre"
-msgstr ""
+msgstr "Chomhphobail Foral de Navarre"
 
 #: contrib/localflavor/es/es_regions.py:21
 msgid "Valencian Community"
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:19
+msgstr "Valencian Community"
+
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr ""
+msgstr "Iontráil cód poist bailí i raon agus formáid 01XXX - 52XXX."
+
+#: contrib/localflavor/es/forms.py:40
+msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
+msgstr "Iontráil uimhir theileafóin bailí i gceann de na formáidí 6XXXXXXXX, 8XXXXXXXX nó 9XXXXXXXX."
 
 #: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr "Cuir isteach NIF bailí, NIE, nó CIF."
 
 #: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
-msgstr ""
+msgid "Please enter a valid NIF or NIE."
+msgstr "Cuir isteach NIF bailí nó NIE."
 
 #: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
-msgstr ""
+msgid "Invalid checksum for NIF."
+msgstr "Sheiceála neamhbhailí do NIF."
 
 #: contrib/localflavor/es/forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr "Sheiceála neamhbhailí do NIE."
+
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
-msgstr ""
-
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
+msgstr "Sheiceála neamhbhailí do CIF."
 
 #: contrib/localflavor/es/forms.py:143
+msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr "Cuir isteach uimhir chuntais bainc bailí i bhformáid XXXX-XXXX-XX-XXXXXXXXXX."
+
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
-msgstr ""
-
-#: contrib/localflavor/fi/forms.py:28
+msgstr "Sheiceála neamhbhailí do uimhir cuntas bainc."
+
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
-msgstr ""
-
-#: contrib/localflavor/in_/forms.py:14
+msgstr "Cuir isteach uimhir Fionlainne slándála sóisialta bailí."
+
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Ní mór Uimhreacha teileafóin a chur i bhformáid 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Iontráil cód poist bailí"
+
+#: contrib/localflavor/id/forms.py:68
+#: contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Iontráil uimhir theileafóin bailí"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Cuir isteach uimhir feithicle bailí pláta cheadúnas"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Cuir isteach uimhir NIK/KTP bailí"
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Bali"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Banten"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Bengkulu"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Yogyakarta"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Jakarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Gorontalo"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Jambi"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Jawa Barat"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Jawa Tengah"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Jawa Timur"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Kalimantan Barat"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Kalimantan Selatan"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Kalimantan Tengah"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Kalimantan Timur"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Kepulauan Bangka-Belitung"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Kepulauan Riau"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Lampung"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Maluku"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Maluku Utara"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Nanggroe Aceh Darussalam"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Nusa Tenggara Barat"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Nusa Tenggara Timur"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Papua"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Riau"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "Sulawesi Barat"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "Sulawesi Selatan"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "Sulawesi Tengah"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "Sulawesi Tenggara"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "Sulawesi Utara"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "Sumatera Barat"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "Sumatera Selatan"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "Sumatera Utara"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "Magelang"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "Surakarta - Solo"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "Madiun"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "Kediri"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "Tapanuli"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "Kepulauan Bangka Belitung"
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr "Cór gconsalacht"
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr "Cór Taidhleoireachta"
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "Bandung"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr "Sulawesi Utara Daratan"
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - Timor"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr "Sulawesi Utara Kepulauan"
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - Lombok"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "Papua dan Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "Cirebon"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - Sumbawa"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - Flores"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - Sumba"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "Bogor"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "Pekalongan"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "Semarang"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "Pati"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "Surabaya"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "Madura"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "Malang"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "Jember"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "Banyumas"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "Rialtas Feidearálach"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "Bojonegoro"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "Purwakarta"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "Sidoarjo"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "Garut"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "Aontroim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "Ard Mhacha"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "Ceatharlach"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "An Cabhan"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "An Clar"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "Corcaigh"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "Doire"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "Dún na nGall"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "an Dún"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Baile Atha Cliath"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "Fear Manach"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "Gaillimh"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "Chiarrai"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "Cill Dara"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "Cill Chainnigh"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "Laoise"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "Liatroim"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "Luimneach"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "An Longfort"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "Lú"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Mhaigh Eo"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "an Mhí"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "Muineachán"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "Uíbh Fhailí"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "Ros Comain"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "Sligeach"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "Tiobraid Arann"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "Tír Eoghain"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "Port Láirge"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "Na hIarmhí"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "Loch Garman"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "Cill Mhantáin"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
-msgstr ""
-
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
+msgstr "Iontráil zip-cód i bhformáid XXXXXXX."
 
 #: contrib/localflavor/is_/forms.py:18
+msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr "Cuir isteach uimhir aitheantais bailí hÍoslainne. Is é an fhormáid XXXXXX-XXXX."
+
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:14
+msgstr "Níl an uimhir aitheantais hÍoslainne bailí."
+
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:43
+msgstr "Iontráil zip-cód bailí."
+
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
-msgstr ""
-
-#: contrib/localflavor/it/forms.py:68
+msgstr "Iontráil uimhir Slándáil Shóisialta bailí."
+
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
-msgstr ""
-
-#: contrib/localflavor/jp/forms.py:17
+msgstr "Iontráil uimhir CBL bailí."
+
+#: contrib/localflavor/jp/forms.py:16
 msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr ""
+msgstr "Iontráil cód poist i bhformáid XXXXXXX nó XXX-XXXX."
 
 #: contrib/localflavor/jp/jp_prefectures.py:4
 msgid "Hokkaido"
-msgstr ""
+msgstr "Hokkaido"
 
 #: contrib/localflavor/jp/jp_prefectures.py:5
 msgid "Aomori"
-msgstr ""
+msgstr "Aomori"
 
 #: contrib/localflavor/jp/jp_prefectures.py:6
 msgid "Iwate"
-msgstr ""
+msgstr "Iwate"
 
 #: contrib/localflavor/jp/jp_prefectures.py:7
 msgid "Miyagi"
-msgstr ""
+msgstr "Miyagi"
 
 #: contrib/localflavor/jp/jp_prefectures.py:8
 msgid "Akita"
-msgstr ""
+msgstr "Akita"
 
 #: contrib/localflavor/jp/jp_prefectures.py:9
 msgid "Yamagata"
-msgstr ""
+msgstr "Yamagata"
 
 #: contrib/localflavor/jp/jp_prefectures.py:10
 msgid "Fukushima"
-msgstr ""
+msgstr "Fukushima"
 
 #: contrib/localflavor/jp/jp_prefectures.py:11
 msgid "Ibaraki"
-msgstr ""
+msgstr "Ibaraki"
 
 #: contrib/localflavor/jp/jp_prefectures.py:12
 msgid "Tochigi"
-msgstr ""
+msgstr "Tochigi"
 
 #: contrib/localflavor/jp/jp_prefectures.py:13
 msgid "Gunma"
-msgstr ""
+msgstr "Gunma"
 
 #: contrib/localflavor/jp/jp_prefectures.py:14
 msgid "Saitama"
-msgstr ""
+msgstr "Saitama"
 
 #: contrib/localflavor/jp/jp_prefectures.py:15
 msgid "Chiba"
-msgstr ""
+msgstr "Chiba"
 
 #: contrib/localflavor/jp/jp_prefectures.py:16
 msgid "Tokyo"
-msgstr ""
+msgstr "Tóiceo"
 
 #: contrib/localflavor/jp/jp_prefectures.py:17
 msgid "Kanagawa"
-msgstr ""
+msgstr "Kanagawa"
 
 #: contrib/localflavor/jp/jp_prefectures.py:18
 msgid "Yamanashi"
-msgstr ""
+msgstr "Yamanashi"
 
 #: contrib/localflavor/jp/jp_prefectures.py:19
 msgid "Nagano"
-msgstr ""
+msgstr "Nagano"
 
 #: contrib/localflavor/jp/jp_prefectures.py:20
 msgid "Niigata"
-msgstr ""
+msgstr "Niigata"
 
 #: contrib/localflavor/jp/jp_prefectures.py:21
 msgid "Toyama"
-msgstr ""
+msgstr "Toyama"
 
 #: contrib/localflavor/jp/jp_prefectures.py:22
 msgid "Ishikawa"
-msgstr ""
+msgstr "Ishikawa"
 
 #: contrib/localflavor/jp/jp_prefectures.py:23
 msgid "Fukui"
-msgstr ""
+msgstr "Fukui"
 
 #: contrib/localflavor/jp/jp_prefectures.py:24
 msgid "Gifu"
-msgstr ""
+msgstr "Gifu"
 
 #: contrib/localflavor/jp/jp_prefectures.py:25
 msgid "Shizuoka"
-msgstr ""
+msgstr "Shizuoka"
 
 #: contrib/localflavor/jp/jp_prefectures.py:26
 msgid "Aichi"
-msgstr ""
+msgstr "Aichi"
 
 #: contrib/localflavor/jp/jp_prefectures.py:27
 msgid "Mie"
-msgstr ""
+msgstr "Mie"
 
 #: contrib/localflavor/jp/jp_prefectures.py:28
 msgid "Shiga"
-msgstr ""
+msgstr "Shiga"
 
 #: contrib/localflavor/jp/jp_prefectures.py:29
 msgid "Kyoto"
-msgstr ""
+msgstr "Kyoto"
 
 #: contrib/localflavor/jp/jp_prefectures.py:30
 msgid "Osaka"
-msgstr ""
+msgstr "Osaka"
 
 #: contrib/localflavor/jp/jp_prefectures.py:31
 msgid "Hyogo"
-msgstr ""
+msgstr "Hyogo"
 
 #: contrib/localflavor/jp/jp_prefectures.py:32
 msgid "Nara"
-msgstr ""
+msgstr "Nara"
 
 #: contrib/localflavor/jp/jp_prefectures.py:33
 msgid "Wakayama"
-msgstr ""
+msgstr "Wakayama"
 
 #: contrib/localflavor/jp/jp_prefectures.py:34
 msgid "Tottori"
-msgstr ""
+msgstr "Tottori"
 
 #: contrib/localflavor/jp/jp_prefectures.py:35
 msgid "Shimane"
-msgstr ""
+msgstr "Shimane"
 
 #: contrib/localflavor/jp/jp_prefectures.py:36
 msgid "Okayama"
-msgstr ""
+msgstr "Okayama"
 
 #: contrib/localflavor/jp/jp_prefectures.py:37
 msgid "Hiroshima"
-msgstr ""
+msgstr "Hiroshima"
 
 #: contrib/localflavor/jp/jp_prefectures.py:38
 msgid "Yamaguchi"
-msgstr ""
+msgstr "Yamaguchi"
 
 #: contrib/localflavor/jp/jp_prefectures.py:39
 msgid "Tokushima"
-msgstr ""
+msgstr "Tokushima"
 
 #: contrib/localflavor/jp/jp_prefectures.py:40
 msgid "Kagawa"
-msgstr ""
+msgstr "Kagawa"
 
 #: contrib/localflavor/jp/jp_prefectures.py:41
 msgid "Ehime"
-msgstr ""
+msgstr "Ehime"
 
 #: contrib/localflavor/jp/jp_prefectures.py:42
 msgid "Kochi"
-msgstr ""
+msgstr "Kochi"
 
 #: contrib/localflavor/jp/jp_prefectures.py:43
 msgid "Fukuoka"
-msgstr ""
+msgstr "Fukuoka"
 
 #: contrib/localflavor/jp/jp_prefectures.py:44
 msgid "Saga"
-msgstr ""
+msgstr "Saga"
 
 #: contrib/localflavor/jp/jp_prefectures.py:45
 msgid "Nagasaki"
-msgstr ""
+msgstr "Nagasaki"
 
 #: contrib/localflavor/jp/jp_prefectures.py:46
 msgid "Kumamoto"
-msgstr ""
+msgstr "Kumamoto"
 
 #: contrib/localflavor/jp/jp_prefectures.py:47
 msgid "Oita"
-msgstr ""
+msgstr "Oita"
 
 #: contrib/localflavor/jp/jp_prefectures.py:48
 msgid "Miyazaki"
-msgstr ""
+msgstr "Miyazaki"
 
 #: contrib/localflavor/jp/jp_prefectures.py:49
 msgid "Kagoshima"
-msgstr ""
+msgstr "Kagoshima"
 
 #: contrib/localflavor/jp/jp_prefectures.py:50
 msgid "Okinawa"
-msgstr ""
+msgstr "Okinawa"
+
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Iontráil uimhir ID Sibhialta Kuwati bailí"
 
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
-msgstr ""
+msgstr "Aguascalientes"
 
 #: contrib/localflavor/mx/mx_states.py:13
 msgid "Baja California"
-msgstr ""
+msgstr "Baja California"
 
 #: contrib/localflavor/mx/mx_states.py:14
 msgid "Baja California Sur"
-msgstr ""
+msgstr "Baja California an Ridire"
 
 #: contrib/localflavor/mx/mx_states.py:15
 msgid "Campeche"
-msgstr ""
+msgstr "Campeche"
 
 #: contrib/localflavor/mx/mx_states.py:16
 msgid "Chihuahua"
-msgstr ""
+msgstr "Chihuahua"
 
 #: contrib/localflavor/mx/mx_states.py:17
 msgid "Chiapas"
-msgstr ""
+msgstr "Chiapas"
 
 #: contrib/localflavor/mx/mx_states.py:18
 msgid "Coahuila"
-msgstr ""
+msgstr "Coahuila"
 
 #: contrib/localflavor/mx/mx_states.py:19
 msgid "Colima"
-msgstr ""
+msgstr "Colima"
 
 #: contrib/localflavor/mx/mx_states.py:20
 msgid "Distrito Federal"
-msgstr ""
+msgstr "Distrito Feidearálach"
 
 #: contrib/localflavor/mx/mx_states.py:21
 msgid "Durango"
-msgstr ""
+msgstr "Durango"
 
 #: contrib/localflavor/mx/mx_states.py:22
 msgid "Guerrero"
-msgstr ""
+msgstr "Guerrero"
 
 #: contrib/localflavor/mx/mx_states.py:23
 msgid "Guanajuato"
-msgstr ""
+msgstr "Guanajuato"
 
 #: contrib/localflavor/mx/mx_states.py:24
 msgid "Hidalgo"
-msgstr ""
+msgstr "Hidalgo"
 
 #: contrib/localflavor/mx/mx_states.py:25
 msgid "Jalisco"
-msgstr ""
+msgstr "Jalisco"
 
 #: contrib/localflavor/mx/mx_states.py:26
 msgid "Estado de México"
-msgstr ""
+msgstr "Estado de México"
 
 #: contrib/localflavor/mx/mx_states.py:27
 msgid "Michoacán"
-msgstr ""
+msgstr "Michoacán"
 
 #: contrib/localflavor/mx/mx_states.py:28
 msgid "Morelos"
-msgstr ""
+msgstr "Morelos"
 
 #: contrib/localflavor/mx/mx_states.py:29
 msgid "Nayarit"
-msgstr ""
+msgstr "Nayarit"
 
 #: contrib/localflavor/mx/mx_states.py:30
 msgid "Nuevo León"
-msgstr ""
+msgstr "Nuevo León"
 
 #: contrib/localflavor/mx/mx_states.py:31
 msgid "Oaxaca"
-msgstr ""
+msgstr "Oaxaca"
 
 #: contrib/localflavor/mx/mx_states.py:32
 msgid "Puebla"
-msgstr ""
+msgstr "Puebla"
 
 #: contrib/localflavor/mx/mx_states.py:33
 msgid "Querétaro"
-msgstr ""
+msgstr "Querétaro"
 
 #: contrib/localflavor/mx/mx_states.py:34
 msgid "Quintana Roo"
-msgstr ""
+msgstr "Quintana Rubha"
 
 #: contrib/localflavor/mx/mx_states.py:35
 msgid "Sinaloa"
-msgstr ""
+msgstr "Sinaloa"
 
 #: contrib/localflavor/mx/mx_states.py:36
 msgid "San Luis Potosí"
-msgstr ""
+msgstr "San Luis Potosí"
 
 #: contrib/localflavor/mx/mx_states.py:37
 msgid "Sonora"
-msgstr ""
+msgstr "Sonora"
 
 #: contrib/localflavor/mx/mx_states.py:38
 msgid "Tabasco"
-msgstr ""
+msgstr "Tabasco"
 
 #: contrib/localflavor/mx/mx_states.py:39
 msgid "Tamaulipas"
-msgstr ""
+msgstr "Tamaulipas"
 
 #: contrib/localflavor/mx/mx_states.py:40
 msgid "Tlaxcala"
-msgstr ""
+msgstr "Tlaxcala"
 
 #: contrib/localflavor/mx/mx_states.py:41
 msgid "Veracruz"
-msgstr ""
+msgstr "Veracruz"
 
 #: contrib/localflavor/mx/mx_states.py:42
 msgid "Yucatán"
-msgstr ""
+msgstr "Yucatán"
 
 #: contrib/localflavor/mx/mx_states.py:43
 msgid "Zacatecas"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:21
+msgstr "Zacatecas"
+
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:78
+msgstr "Iontráil cód poist bailí"
+
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
-msgstr ""
+msgstr "Iontráil uimhir SoFi bailí"
 
 #: contrib/localflavor/nl/nl_provinces.py:4
-msgid "Drente"
-msgstr ""
+msgid "Drenthe"
+msgstr "Drenthe"
 
 #: contrib/localflavor/nl/nl_provinces.py:5
 msgid "Flevoland"
-msgstr ""
+msgstr "Flevoland"
 
 #: contrib/localflavor/nl/nl_provinces.py:6
 msgid "Friesland"
-msgstr ""
+msgstr "Friesland"
 
 #: contrib/localflavor/nl/nl_provinces.py:7
 msgid "Gelderland"
-msgstr ""
+msgstr "Gelderland"
 
 #: contrib/localflavor/nl/nl_provinces.py:8
 msgid "Groningen"
-msgstr ""
+msgstr "Groningen"
 
 #: contrib/localflavor/nl/nl_provinces.py:9
 msgid "Limburg"
-msgstr ""
+msgstr "Limburg"
 
 #: contrib/localflavor/nl/nl_provinces.py:10
 msgid "Noord-Brabant"
-msgstr ""
+msgstr "Noord-Brabant"
 
 #: contrib/localflavor/nl/nl_provinces.py:11
 msgid "Noord-Holland"
-msgstr ""
+msgstr "Noord-Holland"
 
 #: contrib/localflavor/nl/nl_provinces.py:12
 msgid "Overijssel"
-msgstr ""
+msgstr "Overijssel"
 
 #: contrib/localflavor/nl/nl_provinces.py:13
 msgid "Utrecht"
-msgstr ""
+msgstr "Utrecht"
 
 #: contrib/localflavor/nl/nl_provinces.py:14
 msgid "Zeeland"
-msgstr ""
+msgstr "Zeeland"
 
 #: contrib/localflavor/nl/nl_provinces.py:15
 msgid "Zuid-Holland"
-msgstr ""
-
-#: contrib/localflavor/no/forms.py:33
+msgstr "Zuid-Holland"
+
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:24
+msgstr "Cuir isteach uimhir leasa na hIorua sóisialta bailí."
+
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
-msgstr ""
-
-#: contrib/localflavor/pe/forms.py:52
+msgstr "Éilíonn an réimse 8 digití."
+
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
-msgstr ""
+msgstr "Éilíonn an réimse seo 11 digití."
 
 #: contrib/localflavor/pl/forms.py:38
 msgid "National Identification Number consists of 11 digits."
-msgstr ""
+msgstr "Náisiúnta Uimhir Aitheantais comhdhéanta de 11 digití."
 
 #: contrib/localflavor/pl/forms.py:39
 msgid "Wrong checksum for the National Identification Number."
-msgstr ""
+msgstr "Sheiceála mícheart ar an Uimhir Aitheantais Náisiúnta."
 
 #: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
+msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr "Iontráil réimse uimhir chánach (NIP) i bhformáid XXX-XXX-XX XX-nó-XX XX-XXX-XXX."
 
 #: contrib/localflavor/pl/forms.py:72
 msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:112
+msgstr "Sheiceála mícheart ar an Uimhir Cánach (NIP)."
+
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr "Uimhir Náisiúnta Clár Gnó (REGON) comhdhéanta de 9 nó 14 digití."
+
+#: contrib/localflavor/pl/forms.py:110
 msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-
-#: contrib/localflavor/pl/forms.py:155
+msgstr "Sheiceála Mícheart do Uimhir Ghnó Clár Náisiúnta (REGON)."
+
+#: contrib/localflavor/pl/forms.py:148
 msgid "Enter a postal code in the format XX-XXX."
-msgstr ""
+msgstr "Iontráil cód poist i bhformáid XX-XXX."
 
 #: contrib/localflavor/pl/pl_voivodeships.py:8
 msgid "Lower Silesia"
-msgstr ""
+msgstr "Silesia Íochtarach"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:9
 msgid "Kuyavia-Pomerania"
-msgstr ""
+msgstr "Kuyavia-Pomerania"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:10
 msgid "Lublin"
-msgstr ""
+msgstr "Lublin"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:11
 msgid "Lubusz"
-msgstr ""
+msgstr "Lubusz"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:12
 msgid "Lodz"
-msgstr ""
+msgstr "Lodz"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:13
 msgid "Lesser Poland"
-msgstr ""
+msgstr "An Pholainn lú "
 
 #: contrib/localflavor/pl/pl_voivodeships.py:14
 msgid "Masovia"
-msgstr ""
+msgstr "Masovia"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:15
 msgid "Opole"
-msgstr ""
+msgstr "Opole"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:16
 msgid "Subcarpatia"
-msgstr ""
+msgstr "Subcarpatia"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:17
 msgid "Podlasie"
-msgstr ""
+msgstr "Podlasie"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:18
 msgid "Pomerania"
-msgstr ""
+msgstr "Pomerania"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:19
 msgid "Silesia"
-msgstr ""
+msgstr "Silesia"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:20
 msgid "Swietokrzyskie"
-msgstr ""
+msgstr "Swietokrzyskie"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:21
 msgid "Warmia-Masuria"
-msgstr ""
+msgstr "Warmia-Masuria"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:22
 msgid "Greater Poland"
-msgstr ""
+msgstr "An Pholainn Mór"
 
 #: contrib/localflavor/pl/pl_voivodeships.py:23
 msgid "West Pomerania"
-msgstr ""
+msgstr "Pomerania Thiar"
+
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Iontráil zip-cód i bhformáid XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "Ní mór líon Fón tá 9 dhigit, nó tús le + nó 00."
 
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
-msgstr ""
+msgstr "Iontráil CIF bailí."
 
 #: contrib/localflavor/ro/forms.py:56
 msgid "Enter a valid CNP."
-msgstr ""
+msgstr "Iontráil CNP bailí."
 
 #: contrib/localflavor/ro/forms.py:141
 msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr ""
+msgstr "Iontráil IBAN bailí i bhformáid ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
 
 #: contrib/localflavor/ro/forms.py:171
 msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr ""
+msgstr "Ní mór uimhreacha teileafóin a chur i bhformáid XXXX-XXXXXX."
 
 #: contrib/localflavor/ro/forms.py:194
 msgid "Enter a valid postal code in the format XXXXXX"
-msgstr ""
-
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr ""
+msgstr "Iontráil cód poist bailí i bhformáid XXXXXX"
+
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Cuir isteach uimhir eagraíochta bailí Sualainnis."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Iontráil uimhir aitheantais bailí Sualainnis pearsanta."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Ní líon Comhordaithe Co-cheadaítear."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Iontráil cód poist na Sualainne i bhformáid XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Stócólm"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
 
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
-msgstr ""
+msgstr "Banska Bystrica"
 
 #: contrib/localflavor/sk/sk_districts.py:9
 msgid "Banska Stiavnica"
-msgstr ""
+msgstr "Banska Stiavnica"
 
 #: contrib/localflavor/sk/sk_districts.py:10
 msgid "Bardejov"
-msgstr ""
+msgstr "Bardejov"
 
 #: contrib/localflavor/sk/sk_districts.py:11
 msgid "Banovce nad Bebravou"
-msgstr ""
+msgstr "Banovce nad Bebravou"
 
 #: contrib/localflavor/sk/sk_districts.py:12
 msgid "Brezno"
-msgstr ""
+msgstr "Brezno"
 
 #: contrib/localflavor/sk/sk_districts.py:13
 msgid "Bratislava I"
-msgstr ""
+msgstr "An Bhratasláiv I"
 
 #: contrib/localflavor/sk/sk_districts.py:14
 msgid "Bratislava II"
-msgstr ""
+msgstr "An Bhratasláiv II"
 
 #: contrib/localflavor/sk/sk_districts.py:15
 msgid "Bratislava III"
-msgstr ""
+msgstr "An Bhratasláiv III"
 
 #: contrib/localflavor/sk/sk_districts.py:16
 msgid "Bratislava IV"
-msgstr ""
+msgstr "An Bhratasláiv IV"
 
 #: contrib/localflavor/sk/sk_districts.py:17
 msgid "Bratislava V"
-msgstr ""
+msgstr "An Bhratasláiv V"
 
 #: contrib/localflavor/sk/sk_districts.py:18
 msgid "Bytca"
-msgstr ""
+msgstr "Bytca"
 
 #: contrib/localflavor/sk/sk_districts.py:19
 msgid "Cadca"
-msgstr ""
+msgstr "Cadca"
 
 #: contrib/localflavor/sk/sk_districts.py:20
 msgid "Detva"
-msgstr ""
+msgstr "Detva"
 
 #: contrib/localflavor/sk/sk_districts.py:21
 msgid "Dolny Kubin"
-msgstr ""
+msgstr "Dolny Kubin"
 
 #: contrib/localflavor/sk/sk_districts.py:22
 msgid "Dunajska Streda"
-msgstr ""
+msgstr "Dunajska Streda"
 
 #: contrib/localflavor/sk/sk_districts.py:23
 msgid "Galanta"
-msgstr ""
+msgstr "Galanta"
 
 #: contrib/localflavor/sk/sk_districts.py:24
 msgid "Gelnica"
-msgstr ""
+msgstr "Gelnica"
 
 #: contrib/localflavor/sk/sk_districts.py:25
 msgid "Hlohovec"
-msgstr ""
+msgstr "Hlohovec"
 
 #: contrib/localflavor/sk/sk_districts.py:26
 msgid "Humenne"
-msgstr ""
+msgstr "Humenne"
 
 #: contrib/localflavor/sk/sk_districts.py:27
 msgid "Ilava"
-msgstr ""
+msgstr "Ilava"
 
 #: contrib/localflavor/sk/sk_districts.py:28
 msgid "Kezmarok"
-msgstr ""
+msgstr "Kezmarok"
 
 #: contrib/localflavor/sk/sk_districts.py:29
 msgid "Komarno"
-msgstr ""
+msgstr "Komarno"
 
 #: contrib/localflavor/sk/sk_districts.py:30
 msgid "Kosice I"
-msgstr ""
+msgstr "Kosice I"
 
 #: contrib/localflavor/sk/sk_districts.py:31
 msgid "Kosice II"
-msgstr ""
+msgstr "Kosice II"
 
 #: contrib/localflavor/sk/sk_districts.py:32
 msgid "Kosice III"
-msgstr ""
+msgstr "Kosice III"
 
 #: contrib/localflavor/sk/sk_districts.py:33
 msgid "Kosice IV"
-msgstr ""
+msgstr "Kosice IV"
 
 #: contrib/localflavor/sk/sk_districts.py:34
 msgid "Kosice - okolie"
-msgstr ""
+msgstr "Kosice - okolie"
 
 #: contrib/localflavor/sk/sk_districts.py:35
 msgid "Krupina"
-msgstr ""
+msgstr "Krupina"
 
 #: contrib/localflavor/sk/sk_districts.py:36
 msgid "Kysucke Nove Mesto"
-msgstr ""
+msgstr "Kysucke Nove mesto"
 
 #: contrib/localflavor/sk/sk_districts.py:37
 msgid "Levice"
-msgstr ""
+msgstr "Levice"
 
 #: contrib/localflavor/sk/sk_districts.py:38
 msgid "Levoca"
-msgstr ""
+msgstr "Levoca"
 
 #: contrib/localflavor/sk/sk_districts.py:39
 msgid "Liptovsky Mikulas"
-msgstr ""
+msgstr "Liptovsky Mikulas"
 
 #: contrib/localflavor/sk/sk_districts.py:40
 msgid "Lucenec"
-msgstr ""
+msgstr "Lucenec"
 
 #: contrib/localflavor/sk/sk_districts.py:41
 msgid "Malacky"
-msgstr ""
+msgstr "Malacky"
 
 #: contrib/localflavor/sk/sk_districts.py:42
 msgid "Martin"
-msgstr ""
+msgstr "Martin"
 
 #: contrib/localflavor/sk/sk_districts.py:43
 msgid "Medzilaborce"
-msgstr ""
+msgstr "Medzilaborce"
 
 #: contrib/localflavor/sk/sk_districts.py:44
 msgid "Michalovce"
-msgstr ""
+msgstr "Michalovce"
 
 #: contrib/localflavor/sk/sk_districts.py:45
 msgid "Myjava"
-msgstr ""
+msgstr "Myjava"
 
 #: contrib/localflavor/sk/sk_districts.py:46
 msgid "Namestovo"
-msgstr ""
+msgstr "Namestovo"
 
 #: contrib/localflavor/sk/sk_districts.py:47
 msgid "Nitra"
-msgstr ""
+msgstr "Nitra"
 
 #: contrib/localflavor/sk/sk_districts.py:48
 msgid "Nove Mesto nad Vahom"
-msgstr ""
+msgstr "Nove mesto nad Vahom"
 
 #: contrib/localflavor/sk/sk_districts.py:49
 msgid "Nove Zamky"
-msgstr ""
+msgstr "Nove Zamky"
 
 #: contrib/localflavor/sk/sk_districts.py:50
 msgid "Partizanske"
-msgstr ""
+msgstr "Partizanske"
 
 #: contrib/localflavor/sk/sk_districts.py:51
 msgid "Pezinok"
-msgstr ""
+msgstr "Pezinok"
 
 #: contrib/localflavor/sk/sk_districts.py:52
 msgid "Piestany"
-msgstr ""
+msgstr "Piestany"
 
 #: contrib/localflavor/sk/sk_districts.py:53
 msgid "Poltar"
-msgstr ""
+msgstr "Poltar"
 
 #: contrib/localflavor/sk/sk_districts.py:54
 msgid "Poprad"
-msgstr ""
+msgstr "Poprad"
 
 #: contrib/localflavor/sk/sk_districts.py:55
 msgid "Povazska Bystrica"
-msgstr ""
+msgstr "Povazska Bystrica"
 
 #: contrib/localflavor/sk/sk_districts.py:56
 msgid "Presov"
-msgstr ""
+msgstr "Presov"
 
 #: contrib/localflavor/sk/sk_districts.py:57
 msgid "Prievidza"
-msgstr ""
+msgstr "Prievidza"
 
 #: contrib/localflavor/sk/sk_districts.py:58
 msgid "Puchov"
-msgstr ""
+msgstr "Puchov"
 
 #: contrib/localflavor/sk/sk_districts.py:59
 msgid "Revuca"
-msgstr ""
+msgstr "Revuca"
 
 #: contrib/localflavor/sk/sk_districts.py:60
 msgid "Rimavska Sobota"
-msgstr ""
+msgstr "Rimavska Sobota"
 
 #: contrib/localflavor/sk/sk_districts.py:61
 msgid "Roznava"
-msgstr ""
+msgstr "Roznava"
 
 #: contrib/localflavor/sk/sk_districts.py:62
 msgid "Ruzomberok"
-msgstr ""
+msgstr "Ruzomberok"
 
 #: contrib/localflavor/sk/sk_districts.py:63
 msgid "Sabinov"
-msgstr ""
+msgstr "Sabinov"
 
 #: contrib/localflavor/sk/sk_districts.py:64
 msgid "Senec"
-msgstr ""
+msgstr "Senec"
 
 #: contrib/localflavor/sk/sk_districts.py:65
 msgid "Senica"
-msgstr ""
+msgstr "Senica"
 
 #: contrib/localflavor/sk/sk_districts.py:66
 msgid "Skalica"
-msgstr ""
+msgstr "Skalica"
 
 #: contrib/localflavor/sk/sk_districts.py:67
 msgid "Snina"
-msgstr ""
+msgstr "Snina"
 
 #: contrib/localflavor/sk/sk_districts.py:68
 msgid "Sobrance"
-msgstr ""
+msgstr "Sobrance"
 
 #: contrib/localflavor/sk/sk_districts.py:69
 msgid "Spisska Nova Ves"
-msgstr ""
+msgstr "Spisska Nova Ves"
 
 #: contrib/localflavor/sk/sk_districts.py:70
 msgid "Stara Lubovna"
-msgstr ""
+msgstr "Stara Lubovna"
 
 #: contrib/localflavor/sk/sk_districts.py:71
 msgid "Stropkov"
-msgstr ""
+msgstr "Stropkov"
 
 #: contrib/localflavor/sk/sk_districts.py:72
 msgid "Svidnik"
-msgstr ""
+msgstr "Svidnik"
 
 #: contrib/localflavor/sk/sk_districts.py:73
 msgid "Sala"
-msgstr ""
+msgstr "Sala"
 
 #: contrib/localflavor/sk/sk_districts.py:74
 msgid "Topolcany"
-msgstr ""
+msgstr "Topolcany"
 
 #: contrib/localflavor/sk/sk_districts.py:75
 msgid "Trebisov"
-msgstr ""
+msgstr "Trebisov"
 
 #: contrib/localflavor/sk/sk_districts.py:76
 msgid "Trencin"
-msgstr ""
+msgstr "Trencin"
 
 #: contrib/localflavor/sk/sk_districts.py:77
 msgid "Trnava"
-msgstr ""
+msgstr "Trnava"
 
 #: contrib/localflavor/sk/sk_districts.py:78
 msgid "Turcianske Teplice"
-msgstr ""
+msgstr "Turcianske Teplice"
 
 #: contrib/localflavor/sk/sk_districts.py:79
 msgid "Tvrdosin"
-msgstr ""
+msgstr "Tvrdosin"
 
 #: contrib/localflavor/sk/sk_districts.py:80
 msgid "Velky Krtis"
-msgstr ""
+msgstr "Velky Krtis"
 
 #: contrib/localflavor/sk/sk_districts.py:81
 msgid "Vranov nad Toplou"
-msgstr ""
+msgstr "Vranov nad Toplou"
 
 #: contrib/localflavor/sk/sk_districts.py:82
 msgid "Zlate Moravce"
-msgstr ""
+msgstr "Zlate Moravce"
 
 #: contrib/localflavor/sk/sk_districts.py:83
 msgid "Zvolen"
-msgstr ""
+msgstr "Zvolen"
 
 #: contrib/localflavor/sk/sk_districts.py:84
 msgid "Zarnovica"
-msgstr ""
+msgstr "Zarnovica"
 
 #: contrib/localflavor/sk/sk_districts.py:85
 msgid "Ziar nad Hronom"
-msgstr ""
+msgstr "Ziar nad Hronom"
 
 #: contrib/localflavor/sk/sk_districts.py:86
 msgid "Zilina"
-msgstr ""
+msgstr "Zilina"
 
 #: contrib/localflavor/sk/sk_regions.py:8
 msgid "Banska Bystrica region"
-msgstr ""
+msgstr "Banska Bystrica réigiún"
 
 #: contrib/localflavor/sk/sk_regions.py:9
 msgid "Bratislava region"
-msgstr ""
+msgstr "An Bhratasláiv réigiún"
 
 #: contrib/localflavor/sk/sk_regions.py:10
 msgid "Kosice region"
-msgstr ""
+msgstr "Kosice réigiún"
 
 #: contrib/localflavor/sk/sk_regions.py:11
 msgid "Nitra region"
-msgstr ""
+msgstr "Nitra réigiún"
 
 #: contrib/localflavor/sk/sk_regions.py:12
 msgid "Presov region"
-msgstr ""
+msgstr "Presov réigiún"
 
 #: contrib/localflavor/sk/sk_regions.py:13
 msgid "Trencin region"
-msgstr ""
+msgstr "Trencin réigiún"
 
 #: contrib/localflavor/sk/sk_regions.py:14
 msgid "Trnava region"
-msgstr ""
+msgstr "Trnava réigiún"
 
 #: contrib/localflavor/sk/sk_regions.py:15
 msgid "Zilina region"
-msgstr ""
+msgstr "Zilina réigiún"
 
 #: contrib/localflavor/uk/forms.py:21
 msgid "Enter a valid postcode."
-msgstr ""
+msgstr "Iontráil postchód bailí."
 
 #: contrib/localflavor/uk/uk_regions.py:11
 msgid "Bedfordshire"
-msgstr ""
+msgstr "Bedfordshire"
 
 #: contrib/localflavor/uk/uk_regions.py:12
 msgid "Buckinghamshire"
-msgstr ""
+msgstr "Buckinghamshire"
 
 #: contrib/localflavor/uk/uk_regions.py:14
 msgid "Cheshire"
-msgstr ""
+msgstr "Cheshire"
 
 #: contrib/localflavor/uk/uk_regions.py:15
 msgid "Cornwall and Isles of Scilly"
-msgstr ""
+msgstr "Corn na Breataine agus na Oileáin Scilly"
 
 #: contrib/localflavor/uk/uk_regions.py:16
 msgid "Cumbria"
-msgstr ""
+msgstr "Cumbria"
 
 #: contrib/localflavor/uk/uk_regions.py:17
 msgid "Derbyshire"
-msgstr ""
+msgstr "Derbyshire"
 
 #: contrib/localflavor/uk/uk_regions.py:18
 msgid "Devon"
-msgstr ""
+msgstr "Devon"
 
 #: contrib/localflavor/uk/uk_regions.py:19
 msgid "Dorset"
-msgstr ""
+msgstr "Dorset"
 
 #: contrib/localflavor/uk/uk_regions.py:20
 msgid "Durham"
-msgstr ""
+msgstr "Durham"
 
 #: contrib/localflavor/uk/uk_regions.py:21
 msgid "East Sussex"
-msgstr ""
+msgstr "East Sussex"
 
 #: contrib/localflavor/uk/uk_regions.py:22
 msgid "Essex"
-msgstr ""
+msgstr "Essex"
 
 #: contrib/localflavor/uk/uk_regions.py:23
 msgid "Gloucestershire"
-msgstr ""
+msgstr "Gloucestershire"
 
 #: contrib/localflavor/uk/uk_regions.py:24
 msgid "Greater London"
-msgstr ""
+msgstr "Greater London"
 
 #: contrib/localflavor/uk/uk_regions.py:25
 msgid "Greater Manchester"
-msgstr ""
+msgstr "Greater Manchester"
 
 #: contrib/localflavor/uk/uk_regions.py:26
 msgid "Hampshire"
-msgstr ""
+msgstr "Hampshire"
 
 #: contrib/localflavor/uk/uk_regions.py:27
 msgid "Hertfordshire"
-msgstr ""
+msgstr "Hertfordshire"
 
 #: contrib/localflavor/uk/uk_regions.py:28
 msgid "Kent"
-msgstr ""
+msgstr "Kent"
 
 #: contrib/localflavor/uk/uk_regions.py:29
 msgid "Lancashire"
-msgstr ""
+msgstr "Lancashire"
 
 #: contrib/localflavor/uk/uk_regions.py:30
 msgid "Leicestershire"
-msgstr ""
+msgstr "Leicestershire"
 
 #: contrib/localflavor/uk/uk_regions.py:31
 msgid "Lincolnshire"
-msgstr ""
+msgstr "Lincolnshire"
 
 #: contrib/localflavor/uk/uk_regions.py:32
 msgid "Merseyside"
-msgstr ""
+msgstr "Merseyside"
 
 #: contrib/localflavor/uk/uk_regions.py:33
 msgid "Norfolk"
-msgstr ""
+msgstr "Norfolk"
 
 #: contrib/localflavor/uk/uk_regions.py:34
 msgid "North Yorkshire"
-msgstr ""
+msgstr "North Yorkshire"
 
 #: contrib/localflavor/uk/uk_regions.py:35
 msgid "Northamptonshire"
-msgstr ""
+msgstr "Northamptonshire"
 
 #: contrib/localflavor/uk/uk_regions.py:36
 msgid "Northumberland"
-msgstr ""
+msgstr "Northumberland"
 
 #: contrib/localflavor/uk/uk_regions.py:37
 msgid "Nottinghamshire"
-msgstr ""
+msgstr "Nottinghamshire"
 
 #: contrib/localflavor/uk/uk_regions.py:38
 msgid "Oxfordshire"
-msgstr ""
+msgstr "Oxfordshire"
 
 #: contrib/localflavor/uk/uk_regions.py:39
 msgid "Shropshire"
-msgstr ""
+msgstr "Shropshire"
 
 #: contrib/localflavor/uk/uk_regions.py:40
 msgid "Somerset"
-msgstr ""
+msgstr "Somerset"
 
 #: contrib/localflavor/uk/uk_regions.py:41
 msgid "South Yorkshire"
-msgstr ""
+msgstr "South Yorkshire"
 
 #: contrib/localflavor/uk/uk_regions.py:42
 msgid "Staffordshire"
-msgstr ""
+msgstr "Staffordshire"
 
 #: contrib/localflavor/uk/uk_regions.py:43
 msgid "Suffolk"
-msgstr ""
+msgstr "Suffolk"
 
 #: contrib/localflavor/uk/uk_regions.py:44
 msgid "Surrey"
-msgstr ""
+msgstr "Surrey"
 
 #: contrib/localflavor/uk/uk_regions.py:45
 msgid "Tyne and Wear"
-msgstr ""
+msgstr "Tyne and Wear"
 
 #: contrib/localflavor/uk/uk_regions.py:46
 msgid "Warwickshire"
-msgstr ""
+msgstr "Warwickshire"
 
 #: contrib/localflavor/uk/uk_regions.py:47
 msgid "West Midlands"
-msgstr ""
+msgstr "West Midlands"
 
 #: contrib/localflavor/uk/uk_regions.py:48
 msgid "West Sussex"
-msgstr ""
+msgstr "West Sussex"
 
 #: contrib/localflavor/uk/uk_regions.py:49
 msgid "West Yorkshire"
-msgstr ""
+msgstr "West Yorkshire"
 
 #: contrib/localflavor/uk/uk_regions.py:50
 msgid "Wiltshire"
-msgstr ""
+msgstr "Wiltshire"
 
 #: contrib/localflavor/uk/uk_regions.py:51
 msgid "Worcestershire"
-msgstr ""
+msgstr "Worcestershire"
 
 #: contrib/localflavor/uk/uk_regions.py:55
 msgid "County Antrim"
-msgstr ""
+msgstr "Contae Aontroma"
 
 #: contrib/localflavor/uk/uk_regions.py:56
 msgid "County Armagh"
-msgstr ""
+msgstr "Contae Ard Mhacha"
 
 #: contrib/localflavor/uk/uk_regions.py:57
 msgid "County Down"
-msgstr ""
+msgstr "Contae an Dúin"
 
 #: contrib/localflavor/uk/uk_regions.py:58
 msgid "County Fermanagh"
-msgstr ""
+msgstr "Contae Fhear Manach"
 
 #: contrib/localflavor/uk/uk_regions.py:59
 msgid "County Londonderry"
-msgstr ""
+msgstr "Contae Dhoire"
 
 #: contrib/localflavor/uk/uk_regions.py:60
 msgid "County Tyrone"
-msgstr ""
+msgstr "Contae Thír Eoghain"
 
 #: contrib/localflavor/uk/uk_regions.py:64
 msgid "Clwyd"
-msgstr ""
+msgstr "Clwyd"
 
 #: contrib/localflavor/uk/uk_regions.py:65
 msgid "Dyfed"
-msgstr ""
+msgstr "Dyfed"
 
 #: contrib/localflavor/uk/uk_regions.py:66
 msgid "Gwent"
-msgstr ""
+msgstr "Gwent"
 
 #: contrib/localflavor/uk/uk_regions.py:67
 msgid "Gwynedd"
-msgstr ""
+msgstr "Gwynedd"
 
 #: contrib/localflavor/uk/uk_regions.py:68
 msgid "Mid Glamorgan"
-msgstr ""
+msgstr "Mid Glamorgan"
 
 #: contrib/localflavor/uk/uk_regions.py:69
 msgid "Powys"
-msgstr ""
+msgstr "Powys"
 
 #: contrib/localflavor/uk/uk_regions.py:70
 msgid "South Glamorgan"
-msgstr ""
+msgstr "South Glamorgan"
 
 #: contrib/localflavor/uk/uk_regions.py:71
 msgid "West Glamorgan"
-msgstr ""
+msgstr "West Glamorgan"
 
 #: contrib/localflavor/uk/uk_regions.py:75
 msgid "Borders"
-msgstr ""
+msgstr "Borders"
 
 #: contrib/localflavor/uk/uk_regions.py:76
 msgid "Central Scotland"
-msgstr ""
+msgstr "Central Albain"
 
 #: contrib/localflavor/uk/uk_regions.py:77
 msgid "Dumfries and Galloway"
-msgstr ""
+msgstr "Dumfries agus Galloway"
 
 #: contrib/localflavor/uk/uk_regions.py:78
 msgid "Fife"
-msgstr ""
+msgstr "Fife"
 
 #: contrib/localflavor/uk/uk_regions.py:79
 msgid "Grampian"
-msgstr ""
+msgstr "Grampian"
 
 #: contrib/localflavor/uk/uk_regions.py:80
 msgid "Highland"
-msgstr ""
+msgstr "Highland"
 
 #: contrib/localflavor/uk/uk_regions.py:81
 msgid "Lothian"
-msgstr ""
+msgstr "Lothian"
 
 #: contrib/localflavor/uk/uk_regions.py:82
 msgid "Orkney Islands"
-msgstr ""
+msgstr "na hOiléain Orkney"
 
 #: contrib/localflavor/uk/uk_regions.py:83
 msgid "Shetland Islands"
-msgstr ""
+msgstr "na hOiléain Shetland"
 
 #: contrib/localflavor/uk/uk_regions.py:84
 msgid "Strathclyde"
-msgstr ""
+msgstr "Strathclyde"
 
 #: contrib/localflavor/uk/uk_regions.py:85
 msgid "Tayside"
-msgstr ""
+msgstr "Tayside"
 
 #: contrib/localflavor/uk/uk_regions.py:86
 msgid "Western Isles"
-msgstr ""
+msgstr "Oileáin Iarthair"
 
 #: contrib/localflavor/uk/uk_regions.py:90
 msgid "England"
@@ -3557,25 +4172,49 @@
 msgid "Wales"
 msgstr "An Bhreatain Bheag"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr ""
-
-#: contrib/localflavor/us/forms.py:54
+msgstr "Iontráil zip-cód i bhformáid XXXXX nó XXXXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Ní mór uimhreacha teileafóin a chur i format XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:20
+msgstr "Iontráil uimhir Slándáil Shóisialta US bailí i bhformáid XXX-XX-XXXX."
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Iontráil US stát nó i gcríoch."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "U.S. stát (dhá litreacha móra)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Uimhir telefón"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "Iontráil CI bailí a roinnt i X.XXX.XXX-X, XXXXXXX-X nó XXXXXXXX formáid."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Cuir isteach uimhir IC bailí."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
-msgstr ""
-
-#: contrib/localflavor/za/forms.py:54
+msgstr "Iontráil uimhir ID hAfraice Theas bailí"
+
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
-msgstr ""
+msgstr "Iontráil cód poist na hAfraice Theas bailí"
 
 #: contrib/localflavor/za/za_provinces.py:4
 msgid "Eastern Cape"
-msgstr ""
+msgstr "Eastern Cape"
 
 #: contrib/localflavor/za/za_provinces.py:5
 msgid "Free State"
@@ -3583,23 +4222,23 @@
 
 #: contrib/localflavor/za/za_provinces.py:6
 msgid "Gauteng"
-msgstr ""
+msgstr "Gauteng"
 
 #: contrib/localflavor/za/za_provinces.py:7
 msgid "KwaZulu-Natal"
-msgstr ""
+msgstr "KwaZulu-Natal"
 
 #: contrib/localflavor/za/za_provinces.py:8
 msgid "Limpopo"
-msgstr ""
+msgstr "Limpopo"
 
 #: contrib/localflavor/za/za_provinces.py:9
 msgid "Mpumalanga"
-msgstr ""
+msgstr "Mpumalanga"
 
 #: contrib/localflavor/za/za_provinces.py:10
 msgid "Northern Cape"
-msgstr ""
+msgstr "Northern Cape"
 
 #: contrib/localflavor/za/za_provinces.py:11
 msgid "North West"
@@ -3607,27 +4246,26 @@
 
 #: contrib/localflavor/za/za_provinces.py:12
 msgid "Western Cape"
-msgstr ""
+msgstr "Western Cape"
+
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "teachtaireacht leisciúil"
 
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "atreoraigh ó"
 
 #: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Teastaíonn dearbhchosán gan ainm fearainn. Sampla '/events/search/'."
+msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
+msgstr "Teastaíonn dearbhchosán gan ainm fearainn. Sampla '/events/search/'."
 
 #: contrib/redirects/models.py:9
 msgid "redirect to"
 msgstr "atreoraigh go dtí"
 
 #: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
+msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
 msgstr "Is féidir dearbhchosán nó URL lán ag tosnú le 'http://'."
 
 #: contrib/redirects/models.py:13
@@ -3670,504 +4308,395 @@
 msgid "sites"
 msgstr "suíomhanna"
 
-#: core/validators.py:80
-msgid "This value must contain only letters, numbers, underscores or hyphens."
-msgstr "Níl ach litreacha, uimhreacha, fílínta agus daiseanna ceadaithe."
-
-#: core/validators.py:84
-msgid "Uppercase letters are not allowed here."
-msgstr "Níl cás uachtair ceadaithe anseo."
-
-#: core/validators.py:88
-msgid "Lowercase letters are not allowed here."
-msgstr "Nil cás íochtair ceadaithe anseo."
-
-#: core/validators.py:95
-msgid "Enter only digits separated by commas."
-msgstr "Cuir isteach digite amháin anseo scartha le camóg."
-
-#: core/validators.py:107
-msgid "Enter valid e-mail addresses separated by commas."
-msgstr "Cuir isteach r-phostanna bailí scartha le camóige."
-
-#: core/validators.py:111
-msgid "Please enter a valid IP address."
-msgstr "Le do thoil cuir isteach seoladh IP bailí."
-
-#: core/validators.py:115
-msgid "Empty values are not allowed here."
-msgstr "Níl méideanna folmh ceadaithe anseo."
-
-#: core/validators.py:119
-msgid "Non-numeric characters aren't allowed here."
-msgstr "Níl ach uimhreacha ceadaithe anseo."
+#: core/validators.py:20
+#: forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Cuir luach bailí isteach."
+
+#: core/validators.py:87
+#: forms/fields.py:517
+msgid "Enter a valid URL."
+msgstr "Cuir URL bailí isteach."
+
+#: core/validators.py:89
+#: forms/fields.py:518
+msgid "This URL appears to be a broken link."
+msgstr "Dealraíonn sé gur nasc briste é an URL seo."
 
 #: core/validators.py:123
-msgid "This value can't be comprised solely of digits."
-msgstr "Cathaigh níos mó ná digite amháin sa méid seo."
-
-#: core/validators.py:128 forms/fields.py:161
-msgid "Enter a whole number."
-msgstr "Cuir isteach uimhir lán."
-
-#: core/validators.py:132
-msgid "Only alphabetical characters are allowed here."
-msgstr ""
-
-#: core/validators.py:147
+#: forms/fields.py:861
+msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr "Cuir 'slug' bailí isteach atá déanta as litreacha, uimhreacha, fostríoca nó fleiscíní."
+
+#: core/validators.py:126
+#: forms/fields.py:854
+msgid "Enter a valid IPv4 address."
+msgstr "Cuir seoladh bailí IPv4 isteach."
+
+#: core/validators.py:129
+#: db/models/fields/__init__.py:596
+msgid "Enter only digits separated by commas."
+msgstr "Ná cuir isteach ach digití scartha ag camóga."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Bí cinnte nach bhfuil níos lú ná %(limit_value)s (it is %(show_value)s)."
+
+#: core/validators.py:153
+#: forms/fields.py:196
+#: forms/fields.py:246
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Bí cinnte go bhfuil an luach seo cothrom le nó níos lú ná %(limit_value)s."
+
+#: core/validators.py:158
+#: forms/fields.py:197
+#: forms/fields.py:247
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Bí cinnte go bhfuil an luach seo cothrom le nó níos mó ná %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid "Ensure this value has at least %(limit_value)d characters (it has %(show_value)d)."
+msgstr "Bí cinnte nach bhfuil níos lú ná %(limit_value)d carachtar sa luach seo (it has %(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid "Ensure this value has at most %(limit_value)d characters (it has %(show_value)d)."
+msgstr "Bí cinnte nach bhfuil níos mó ná %(limit_value)d carachtar sa luach seo %(show_value)d)."
+
+#: db/models/base.py:780
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "Ní mór a bheith %(field_name)s uathúil don %(date_field)s %(lookup)s."
+
+#: db/models/base.py:795
+#: db/models/base.py:803
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "Tá %(model_name)s leis an %(field_label)s seo ann cheana."
+
+#: db/models/fields/__init__.py:62
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Níl %r luach rogha bailí."
+
+#: db/models/fields/__init__.py:63
+msgid "This field cannot be null."
+msgstr "Ní cheadaítear luach nialasach sa réimse seo."
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be blank."
+msgstr "Ní cheadaítear luach nialasach sa réimse seo."
+
+#: db/models/fields/__init__.py:69
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Réimse de Cineál: %(field_type)s"
+
+#: db/models/fields/__init__.py:475
+#: db/models/fields/__init__.py:876
+#: db/models/fields/__init__.py:978
+#: db/models/fields/__init__.py:989
+#: db/models/fields/__init__.py:1016
+msgid "Integer"
+msgstr "Slánuimhir"
+
+#: db/models/fields/__init__.py:479
+msgid "This value must be an integer."
+msgstr "Ní mór don luach seo a bheith ina shlánuimhir."
+
+#: db/models/fields/__init__.py:514
+msgid "This value must be either True or False."
+msgstr "Ní mór don luach seo a bheith Fíor nó Bréagach."
+
+#: db/models/fields/__init__.py:516
+msgid "Boolean (Either True or False)"
+msgstr "Boole"
+
+#: db/models/fields/__init__.py:563
+#: db/models/fields/__init__.py:999
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Teaghrán (suas go %(max_length)s)"
+
+#: db/models/fields/__init__.py:591
+msgid "Comma-separated integers"
+msgstr "Slánuimhireacha camóg-scartha"
+
+#: db/models/fields/__init__.py:605
+msgid "Date (without time)"
+msgstr "Dáta (gan am)"
+
+#: db/models/fields/__init__.py:609
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Cuir dáta bailí isteach, san fhormáid BBBB-MM-LL."
+
+#: db/models/fields/__init__.py:610
 #, python-format
 msgid "Invalid date: %s"
-msgstr ""
-
-#: core/validators.py:152 db/models/fields/__init__.py:569
-msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr ""
-
-#: core/validators.py:157
-msgid "Enter a valid time in HH:MM format."
-msgstr ""
-
-#: core/validators.py:161
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
-msgstr ""
-
-#: core/validators.py:166 forms/fields.py:412
-msgid "Enter a valid e-mail address."
-msgstr ""
-
-#: core/validators.py:178 core/validators.py:470 forms/fields.py:430
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr ""
-
-#: core/validators.py:189 forms/fields.py:461
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-
-#: core/validators.py:196
-#, python-format
-msgid "The URL %s does not point to a valid image."
-msgstr ""
-
-#: core/validators.py:200
-#, python-format
-msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr ""
-
-#: core/validators.py:208
-#, python-format
-msgid "The URL %s does not point to a valid QuickTime video."
-msgstr ""
-
-#: core/validators.py:212
-msgid "A valid URL is required."
-msgstr ""
-
-#: core/validators.py:226
-#, python-format
-msgid ""
-"Valid HTML is required. Specific errors are:\n"
-"%s"
-msgstr ""
-
-#: core/validators.py:233
-#, python-format
-msgid "Badly formed XML: %s"
-msgstr ""
-
-#: core/validators.py:250
-#, python-format
-msgid "Invalid URL: %s"
-msgstr ""
-
-#: core/validators.py:255 core/validators.py:257
-#, python-format
-msgid "The URL %s is a broken link."
-msgstr ""
-
-#: core/validators.py:263
-msgid "Enter a valid U.S. state abbreviation."
-msgstr ""
-
-#: core/validators.py:277
-#, python-format
-msgid "Watch your mouth! The word %s is not allowed here."
-msgstr ""
-
-#: core/validators.py:284
-#, python-format
-msgid "This field must match the '%s' field."
-msgstr ""
-
-#: core/validators.py:303
-msgid "Please enter something for at least one field."
-msgstr ""
-
-#: core/validators.py:312 core/validators.py:323
-msgid "Please enter both fields or leave them both empty."
-msgstr ""
-
-#: core/validators.py:331
-#, python-format
-msgid "This field must be given if %(field)s is %(value)s"
-msgstr ""
-
-#: core/validators.py:344
-#, python-format
-msgid "This field must be given if %(field)s is not %(value)s"
-msgstr ""
-
-#: core/validators.py:363
-msgid "Duplicate values are not allowed."
-msgstr ""
-
-#: core/validators.py:378
-#, python-format
-msgid "This value must be between %(lower)s and %(upper)s."
-msgstr ""
-
-#: core/validators.py:380
-#, python-format
-msgid "This value must be at least %s."
-msgstr ""
-
-#: core/validators.py:382
-#, python-format
-msgid "This value must be no more than %s."
-msgstr ""
-
-#: core/validators.py:423
-#, python-format
-msgid "This value must be a power of %s."
-msgstr ""
-
-#: core/validators.py:433
-msgid "Please enter a valid decimal number."
-msgstr ""
-
-#: core/validators.py:440
-#, python-format
-msgid "Please enter a valid decimal number with at most %s total digit."
-"Please enter a valid decimal number with at most %s total digits."
-msgstr ""
-
-#: core/validators.py:443
+msgstr "Dáta neamhbhailí: %s"
+
+#: db/models/fields/__init__.py:691
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
+msgstr "Cuir dáta/am bailí isteach, san fhormáid BBBB-MM-LL UU:NN[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:693
+msgid "Date (with time)"
+msgstr "Dáta (le am)"
+
+#: db/models/fields/__init__.py:759
+msgid "This value must be a decimal number."
+msgstr "Ní mór don luach seo a bheith ina uimhir dheachúlach."
+
+#: db/models/fields/__init__.py:761
+msgid "Decimal number"
+msgstr "Uimhir deachúlach"
+
+#: db/models/fields/__init__.py:816
+msgid "E-mail address"
+msgstr "R-phost"
+
+#: db/models/fields/__init__.py:823
+#: db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Conair comhaid"
+
+#: db/models/fields/__init__.py:846
+#: db/models/fields/__init__.py:874
+msgid "This value must be a float."
+msgstr "Ní mór go mbeadh an luach snámhpointe."
+
+#: db/models/fields/__init__.py:848
+msgid "Floating point number"
+msgstr "Snámhphointe"
+
+#: db/models/fields/__init__.py:901
+msgid "Big (8 byte) integer"
+msgstr "Mór (8 byte) slánuimhi"
+
+#: db/models/fields/__init__.py:930
+msgid "This value must be either None, True or False."
+msgstr "Ní mór don luach seo a bheith Faic, Fíor nó Bréagach."
+
+#: db/models/fields/__init__.py:932
+msgid "Boolean (Either True, False or None)"
+msgstr "Boole (Fíor, Bréagach nó Dada)"
+
+#: db/models/fields/__init__.py:1022
+msgid "Text"
+msgstr "téacs"
+
+#: db/models/fields/__init__.py:1038
+msgid "Time"
+msgstr "am"
+
+#: db/models/fields/__init__.py:1042
+msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
+msgstr "Cuir am bailí isteach san fhormáid UU:NN[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:1126
+msgid "XML text"
+msgstr "Téacs XML"
+
+#: db/models/fields/related.py:755
 #, python-format
-msgid ""
-"Please enter a valid decimal number with a whole part of at most %s digit."
-"Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr ""
-
-#: core/validators.py:446
-#, python-format
-msgid "Please enter a valid decimal number with at most %s decimal place."
-"Please enter a valid decimal number with at most %s decimal places."
-msgstr ""
-
-#: core/validators.py:454
-msgid "Please enter a valid floating point number."
-msgstr ""
-
-#: core/validators.py:463
-#, python-format
-msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr ""
-
-#: core/validators.py:464
-#, python-format
-msgid "Make sure your uploaded file is at most %s bytes big."
-msgstr ""
-
-#: core/validators.py:481
-msgid "The format for this field is wrong."
-msgstr ""
-
-#: core/validators.py:496
-msgid "This field is invalid."
-msgstr ""
-
-#: core/validators.py:532
-#, python-format
-msgid "Could not retrieve anything from %s."
-msgstr ""
-
-#: core/validators.py:535
-#, python-format
-msgid ""
-"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
-msgstr ""
-
-#: core/validators.py:568
-#, python-format
-msgid ""
-"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
-"\"%(start)s\".)"
-msgstr ""
-
-#: core/validators.py:572
-#, python-format
-msgid ""
-"Some text starting on line %(line)s is not allowed in that context. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-
-#: core/validators.py:577
-#, python-format
-msgid ""
-"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-
-#: core/validators.py:582
-#, python-format
-msgid ""
-"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-"(start)s\".)"
-msgstr ""
-
-#: core/validators.py:586
-#, python-format
-msgid ""
-"A tag on line %(line)s is missing one or more required attributes. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-
-#: core/validators.py:591
-#, python-format
-msgid ""
-"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-"starts with \"%(start)s\".)"
-msgstr ""
-
-#: db/models/manipulators.py:304
-#, python-format
-msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr ""
-
-#: db/models/fields/__init__.py:46
-#, python-format
-msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr ""
-
-#: db/models/fields/__init__.py:170 db/models/fields/__init__.py:343
-#: db/models/fields/files.py:168 db/models/fields/files.py:179
-#: forms/fields.py:52 oldforms/__init__.py:370
-msgid "This field is required."
-msgstr ""
-
-#: db/models/fields/__init__.py:457
-msgid "This value must be an integer."
-msgstr ""
-
-#: db/models/fields/__init__.py:503
-msgid "This value must be either True or False."
-msgstr ""
-
-#: db/models/fields/__init__.py:532
-msgid "This field cannot be null."
-msgstr ""
-
-#: db/models/fields/__init__.py:634 db/models/fields/__init__.py:651
-msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-
-#: db/models/fields/__init__.py:707
-msgid "This value must be a decimal number."
-msgstr ""
-
-#: db/models/fields/__init__.py:854
-msgid "This value must be either None, True or False."
-msgstr ""
-
-#: db/models/fields/__init__.py:969 db/models/fields/__init__.py:982
-msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr ""
-
-#: db/models/fields/files.py:188
-msgid "Enter a valid filename."
-msgstr ""
-
-#: db/models/fields/related.py:92
-#, python-format
-msgid "Please enter a valid %s."
-msgstr ""
-
-#: db/models/fields/related.py:759
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-
-#: db/models/fields/related.py:839
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Níl %(model)s le eochair %(pk)r ann."
+
+#: db/models/fields/related.py:757
+msgid "Foreign Key (type determined by related field)"
+msgstr "Eochair Eachtracha (cineál a chinnfear de réir réimse a bhaineann)"
+
+#: db/models/fields/related.py:879
+msgid "One-to-one relationship"
+msgstr "Duine-le-duine caidreamh"
+
+#: db/models/fields/related.py:939
+msgid "Many-to-many relationship"
+msgstr "Go leor le go leor caidreamh"
+
+#: db/models/fields/related.py:959
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Ar ríomhaire Mac, coinnigh an eochair \"Control\" nó \"Command\" síos chun níos mó ná rud amháin a roghnú."
+
+#: db/models/fields/related.py:1020
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr ""
-
-#: forms/fields.py:53
-msgid "Enter a valid value."
-msgstr ""
-
-#: forms/fields.py:133
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-
-#: forms/fields.py:134
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-
-#: forms/fields.py:162 forms/fields.py:191 forms/fields.py:220
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr ""
-
-#: forms/fields.py:163 forms/fields.py:192 forms/fields.py:221
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr ""
-
-#: forms/fields.py:190 forms/fields.py:219
+msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "Cuir aitheantas bailí %(self)s isteach. Tá an luach %(value)r neamhbhailí."
+msgstr[1] "Cuir aitheantas bailí %(self)s isteach. Tá na luachanna %(value)r neamhbhailí."
+msgstr[2] "Cuir aitheantas bailí %(self)s isteach. Tá na luachanna %(value)r neamhbhailí."
+msgstr[3] "Cuir aitheantas bailí %(self)s isteach. Tá na luachanna %(value)r neamhbhailí."
+msgstr[4] "Cuir aitheantas bailí %(self)s isteach. Tá na luachanna %(value)r neamhbhailí."
+
+#: forms/fields.py:65
+msgid "This field is required."
+msgstr "Tá an réimse seo riachtanach."
+
+#: forms/fields.py:195
+msgid "Enter a whole number."
+msgstr "Cuir slánuimhir isteach."
+
+#: forms/fields.py:225
+#: forms/fields.py:245
 msgid "Enter a number."
-msgstr ""
-
-#: forms/fields.py:222
+msgstr "Cuir uimhir isteach."
+
+#: forms/fields.py:248
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
-msgstr ""
-
-#: forms/fields.py:223
+msgstr "Bí cinnte nach bhfuil níos mó ná %s digit ann."
+
+#: forms/fields.py:249
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
-msgstr ""
-
-#: forms/fields.py:224
+msgstr "Bí cinnte nach bhfuil níos mó ná %s ionad deachúlach ann."
+
+#: forms/fields.py:250
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-
-#: forms/fields.py:272 forms/fields.py:793
+msgstr "Bí cinnte nach bhfuil níos mó ná %s digit roimh an bpointe deachúlach."
+
+#: forms/fields.py:311
+#: forms/fields.py:826
 msgid "Enter a valid date."
-msgstr ""
-
-#: forms/fields.py:305 forms/fields.py:794
+msgstr "Cuir dáta bailí isteach."
+
+#: forms/fields.py:339
+#: forms/fields.py:827
 msgid "Enter a valid time."
-msgstr ""
-
-#: forms/fields.py:344
+msgstr "Cuir am bailí isteach."
+
+#: forms/fields.py:365
 msgid "Enter a valid date/time."
-msgstr ""
-
-#: forms/fields.py:431
+msgstr "Cuir dáta/am bailí isteach."
+
+#: forms/fields.py:423
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Níor seoladh comhad. Deimhnigh cineál an ionchódaithe ar an bhfoirm."
+
+#: forms/fields.py:424
 msgid "No file was submitted."
-msgstr ""
-
-#: forms/fields.py:432 oldforms/__init__.py:689
+msgstr "Níor seoladh aon chomhad."
+
+#: forms/fields.py:425
 msgid "The submitted file is empty."
-msgstr ""
-
-#: forms/fields.py:522
-msgid "Enter a valid URL."
-msgstr ""
-
-#: forms/fields.py:523
-msgid "This URL appears to be a broken link."
-msgstr ""
-
-#: forms/fields.py:591 forms/fields.py:642
+msgstr "Tá an comhad a seoladh folamh."
+
+#: forms/fields.py:426
+#, python-format
+msgid "Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr "Cinntiú go bhfuil níos lú ná %(max)d carachtair (tá sé %(length)d) ag ainm an chomhaid seo."
+
+#: forms/fields.py:461
+msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
+msgstr "Uasluchtaigh íomhá bhailí. Níorbh íomhá é an comhad a d'uasluchtaigh tú, nó b'íomhá thruaillithe é."
+
+#: forms/fields.py:584
+#: forms/fields.py:659
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr ""
-
-#: forms/fields.py:643 forms/fields.py:704 forms/models.py:528
+msgstr "Déan rogha bhailí. Ní ceann de na roghanna é %(value)s."
+
+#: forms/fields.py:660
+#: forms/fields.py:722
+#: forms/models.py:979
 msgid "Enter a list of values."
-msgstr ""
-
-#: forms/fields.py:822
-msgid "Enter a valid IPv4 address."
-msgstr ""
-
-#: forms/models.py:461
+msgstr "Cuir liosta de luachanna isteach."
+
+#: forms/formsets.py:290
+#: forms/formsets.py:292
+msgid "Order"
+msgstr "Ord"
+
+#: forms/models.py:546
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Le do thoil ceartaigh an sonra dúbail le %(field)s."
+
+#: forms/models.py:550
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr "Ceart le do thoil na sonraí a dhúbailt le haghaidh %(field)s, chaithfidh a bheith uathúil."
+
+#: forms/models.py:556
+#, python-format
+msgid "Please correct the duplicate data for %(field_name)s which must be unique for the %(lookup)s in %(date_field)s."
+msgstr "Ceart le do thoil na sonraí a dhúbailt le haghaidh %(field_name)s ní mór a bheith uaithúil le haghaidh an %(lookup)s i %(date_field)s."
+
+#: forms/models.py:564
+msgid "Please correct the duplicate values below."
+msgstr "Le do thoil ceartaigh na luachanna dúbail thíos."
+
+#: forms/models.py:838
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr "Ní raibh an eochair eachtrach comhoiriúnach leis an tuismitheoir ásc príomh-eochair."
+
+#: forms/models.py:904
 msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-
-#: forms/models.py:529
+msgstr "Déan rogha bhailí. Ní ceann de na roghanna é do roghasa."
+
+#: forms/models.py:980
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
-msgstr ""
-
-#: oldforms/__init__.py:405
-#, python-format
-msgid "Ensure your text is less than %s character."
-msgstr ""
-
-#: oldforms/__init__.py:410
-msgid "Line breaks are not allowed here."
-msgstr ""
-
-#: oldforms/__init__.py:508 oldforms/__init__.py:582 oldforms/__init__.py:621
+msgstr "Déan rogha bhailí. Ní ceann de na roghanna é %s."
+
+#: forms/models.py:982
 #, python-format
-msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr ""
-
-#: oldforms/__init__.py:750
-msgid "Enter a whole number between -32,768 and 32,767."
-msgstr ""
-
-#: oldforms/__init__.py:760
-msgid "Enter a positive number."
-msgstr ""
-
-#: oldforms/__init__.py:770
-msgid "Enter a whole number between 0 and 32,767."
-msgstr ""
-
-#: template/defaultfilters.py:698
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr "Níl \"%s\" luach bailí le príomh-eochair."
+
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "tá, níl, b'fhéidir"
 
-#: template/defaultfilters.py:729
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
-msgstr ""
-
-#: template/defaultfilters.py:731
+msgid_plural "%(size)d bytes"
+msgstr[0] "%(size)d beart"
+msgstr[1] "%(size)d bearta"
+
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:733
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:734
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
 
-#: utils/dateformat.py:41
+#: utils/dateformat.py:42
 msgid "p.m."
 msgstr "p.m."
 
-#: utils/dateformat.py:42
+#: utils/dateformat.py:43
 msgid "a.m."
 msgstr "a.m."
 
-#: utils/dateformat.py:47
+#: utils/dateformat.py:48
 msgid "PM"
 msgstr "PM"
 
-#: utils/dateformat.py:48
+#: utils/dateformat.py:49
 msgid "AM"
 msgstr "AM"
 
-#: utils/dateformat.py:97
+#: utils/dateformat.py:98
 msgid "midnight"
 msgstr "meán oíche"
 
-#: utils/dateformat.py:99
+#: utils/dateformat.py:100
 msgid "noon"
 msgstr "nóin"
 
@@ -4235,23 +4764,28 @@
 msgid "February"
 msgstr "Mí Feabhra"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "March"
 msgstr "Mí Márta"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "April"
 msgstr "Aibreán"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "May"
 msgstr "Bealtaine"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "June"
 msgstr "Mí an Mheithimh"
 
-#: utils/dates.py:19 utils/dates.py:31
+#: utils/dates.py:19
+#: utils/dates.py:31
 msgid "July"
 msgstr "Mí Iúil"
 
@@ -4351,7 +4885,7 @@
 msgid "Dec."
 msgstr "Nol"
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "nó"
 
@@ -4391,54 +4925,212 @@
 msgstr[0] "nóiméad"
 msgstr[1] "nóiméad"
 
-#: utils/timesince.py:46
+#: utils/timesince.py:45
 msgid "minutes"
 msgstr "nóiméad"
 
-#: utils/timesince.py:51
+#: utils/timesince.py:50
 #, python-format
 msgid "%(number)d %(type)s"
-msgstr ""
-
-#: utils/timesince.py:57
+msgstr "%(number)d %(type)s"
+
+#: utils/timesince.py:56
 #, python-format
 msgid ", %(number)d %(type)s"
-msgstr ""
-
-#: utils/translation/trans_real.py:401
+msgstr ", %(number)d %(type)s"
+
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
-msgstr "DATE_FORMAT"
-
-#: utils/translation/trans_real.py:402
+msgstr "N j, Y"
+
+#: utils/translation/trans_real.py:513
 msgid "DATETIME_FORMAT"
 msgstr "DATETIME_FORMAT"
 
-#: utils/translation/trans_real.py:403
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
-msgstr "TIME_FORMAT"
-
-#: utils/translation/trans_real.py:419
+msgstr "P"
+
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
-msgstr "YEAR_MONTH_FORMAT"
-
-#: utils/translation/trans_real.py:420
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
-msgstr "MONTH_DAY_FORMAT"
-
-#: views/generic/create_update.py:114
+msgstr "F j"
+
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
-msgstr ""
-
-#: views/generic/create_update.py:156
+msgstr "D'éirigh le cruthú %(verbose_name)s."
+
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
-msgstr ""
-
-#: views/generic/create_update.py:198
+msgstr "D'éirigh le nuashonrú %(verbose_name)s."
+
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
-msgstr ""
-
+msgstr "Scriosadh %(verbose_name)s."
+
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "Ceann amhain nó níos mó  %(fieldname)s in %(name)s: %(obj)s"
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "Ceann amhain nó níos mó  %(fieldname)s in %(name)s:"
+#~ msgid "Old password:"
+#~ msgstr "Sean-focal faire"
+#~ msgid "Add user"
+#~ msgstr "Cuir úsaideoir le"
+#~ msgid "Relation to parent model"
+#~ msgstr "Cine do samhail máthair"
+#~ msgid "Comment moderation queue"
+#~ msgstr "Ciú modhnóireacht nótaí tráchta"
+#~ msgid "No comments to moderate"
+#~ msgstr "Dada nótaí tráchta le modhnóireacht"
+#~ msgid "Email"
+#~ msgstr "R-phost"
+#~ msgid "Authenticated?"
+#~ msgstr "Fhíordheimhniú?"
+#~ msgid "IP Address"
+#~ msgstr "Seol IP"
+#~ msgid "Date posted"
+#~ msgstr "Dáta teacht isteach"
+#~ msgid "yes"
+#~ msgstr "tá"
+#~ msgid "no"
+#~ msgstr "níl"
+#~ msgid "DATE_WITH_TIME_FULL"
+#~ msgstr "DATE_WITH_TIME_FULL"
+#~ msgid "headline"
+#~ msgstr "ceannlíne"
+#~ msgid "rating #1"
+#~ msgstr "rátáil #1"
+#~ msgid "rating #2"
+#~ msgstr "rátáil #2"
+#~ msgid "rating #3"
+#~ msgstr "rátáil #3"
+#~ msgid "rating #4"
+#~ msgstr "rátáil #4"
+#~ msgid "rating #5"
+#~ msgstr "rátáil #5"
+#~ msgid "rating #6"
+#~ msgstr "rátáil #6"
+#~ msgid "rating #7"
+#~ msgstr "rátáil #7"
+#~ msgid "rating #8"
+#~ msgstr "rátáil #8"
+#~ msgid "is valid rating"
+#~ msgstr "is rátáil bailí"
+#~ msgid "Content object"
+#~ msgstr "Oibiacht inneachar"
+#~ msgid "person's name"
+#~ msgstr "Ainm"
+#~ msgid "ip address"
+#~ msgstr "seoladh ip"
+#~ msgid "approved by staff"
+#~ msgstr "ceadaithe tríd an foireann"
+#~ msgid "free comments"
+#~ msgstr "Nótaí tráchtaí saoire"
+#~ msgid "score"
+#~ msgstr "scór"
+#~ msgid "score date"
+#~ msgstr "Dáta scór"
+#~ msgid "karma score"
+#~ msgstr "Scór karma"
+#~ msgid "karma scores"
+#~ msgstr "Scóra karma"
+#~ msgid "%(score)d rating by %(user)s"
+#~ msgstr "%(score)d rátailte trí  %(user)s"
+#~ msgid ""
+#~ "This comment was flagged by %(user)s:\n"
+#~ "\n"
+#~ "%(text)s"
+#~ msgstr ""
+#~ "Bhí bratach curtha leis an nóta tráchta seo trí %(user)s:\n"
+#~ "\n"
+#~ "%(text)s"
+#~ msgid "flag date"
+#~ msgstr "Dáta brait"
+#~ msgid "user flag"
+#~ msgstr "Brat úsáideoir"
+#~ msgid "user flags"
+#~ msgstr "Brait úsáideoira"
+#~ msgid "Flag by %r"
+#~ msgstr "Cuir brat leis roimh %r"
+#~ msgid "deletion date"
+#~ msgstr "Dáta scrioseadh"
+#~ msgid "moderator deletions"
+#~ msgstr "Scrios modhnóra"
+#~ msgid "Moderator deletion by %r"
+#~ msgstr "Scrios modhnóir trí %r"
+#~ msgid "Forgotten your password?"
+#~ msgstr "Dearmad déanta ar do focal faire?"
+#~ msgid "Ratings"
+#~ msgstr "Rátála"
+#~ msgid "Required"
+#~ msgstr "Riachtanach"
+#~ msgid "Optional"
+#~ msgstr "Roghnach"
+#~ msgid "Post a photo"
+#~ msgstr "Post griangraf"
+#~ msgid "Your name:"
+#~ msgstr "Do chuid ainm:"
+#~ msgid ""
+#~ "This rating is required because you've entered at least one other rating."
+#~ msgstr ""
+#~ "Tá an rátáil seo ag teastail mar cuir tú rátáil amhain eile isteach ar a "
+#~ "laghad."
+#~ msgid ""
+#~ "This comment was posted by a user who has posted fewer than %(count)s "
+#~ "comment:\n"
+#~ "\n"
+#~ "%(text)sThis comment was posted by a user who has posted fewer than %"
+#~ "(count)s comments:\n"
+#~ "\n"
+#~ "%(text)s"
+#~ msgstr ""
+#~ "Bhí an nóta tráchta póstailte trí úsáideoir a cuir níos lú ná %(count)s "
+#~ "nótaí tráchtaí\n"
+#~ "\n"
+#~ "%(text)sBhí an nóta tráchta póstailte trí úsáideoir a cuir níos lú ná %"
+#~ "(count)s nótaí tráchtaí\n"
+#~ "\n"
+#~ "%(text)s"
+#~ msgid "Only POSTs are allowed"
+#~ msgstr "POSTs amhain ceadaithe"
+#~ msgid "One or more of the required fields wasn't submitted"
+#~ msgstr ""
+#~ "Níor curtha isteach ceann amhain nó níos mó de na réimse riachtanach"
+#~ msgid "Somebody tampered with the comment form (security violation)"
+#~ msgstr ""
+#~ "Cuir duine éigin isteach leis an foirm nóta tráchta (fadbh slándála)"
+#~ msgid ""
+#~ "The comment form had an invalid 'target' parameter -- the object ID was "
+#~ "invalid"
+#~ msgstr ""
+#~ "Bhí paraiméadar targaid mícheart ag an foirm nóta tráchta -- bhí ID an "
+#~ "oibiacht neamhbhailí"
+#~ msgid "The comment form didn't provide either 'preview' or 'post'"
+#~ msgstr "Níor sholáthair an foirm nóta tráchta 'réamhamharc' nó 'post'"
+#~ msgid "Anonymous users cannot vote"
+#~ msgstr "Níl cead ag úsáideoira anaithnid vótáil"
+#~ msgid "Invalid comment ID"
+#~ msgstr "Nóta tráchta ID neamhbhailí"
+#~ msgid "No voting for yourself"
+#~ msgstr "Vótáil leat féin coiscthe"
+#~ msgid "Uppercase letters are not allowed here."
+#~ msgstr "Níl cás uachtair ceadaithe anseo."
+#~ msgid "Enter valid e-mail addresses separated by commas."
+#~ msgstr "Cuir isteach r-phostanna bailí scartha le camóige."
+#~ msgid "Please enter a valid IP address."
+#~ msgstr "Le do thoil cuir isteach seoladh IP bailí."
+#~ msgid "Empty values are not allowed here."
+#~ msgstr "Níl méideanna folmh ceadaithe anseo."
+#~ msgid "Non-numeric characters aren't allowed here."
+#~ msgstr "Níl ach uimhreacha ceadaithe anseo."
+#~ msgid "This value can't be comprised solely of digits."
+#~ msgstr "Cathaigh níos mó ná digite amháin sa méid seo."
 #~ msgid "Gaeilge"
 #~ msgstr "Gaeilge"
+
Binary file web/lib/django/conf/locale/ga/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/ga/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/ga/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-09-14 12:33+0100\n"
+"POT-Creation-Date: 2009-12-22 20:42+0100\n"
 "PO-Revision-Date: 2008-01-23 11:04+0100\n"
 "Last-Translator: Michael Thornhill <michael@maithu.com>\n"
 "Language-Team: Gaeilge <ga@li.org>\n"
@@ -15,19 +15,6 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: contrib/admin/media/js/calendar.js:24
-#: contrib/admin/media/js/dateparse.js:32
-msgid "January February March April May June July August September October November December"
-msgstr "Eanair Feabhra Márta Aibreán Bealtaine Meitheamh Iúil Lúnasa Mean Fómhair Deireadh Fómhair Nollaig"
-
-#: contrib/admin/media/js/calendar.js:25
-msgid "S M T W T F S"
-msgstr "D L M C D A S"
-
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Domhnaigh Luain Máirt Céadaoin Déardaoin Aoine Sathairn"
-
 #: contrib/admin/media/js/SelectFilter2.js:33
 #, perl-format
 msgid "Available %s"
@@ -58,6 +45,36 @@
 msgid "Clear all"
 msgstr "Glan iomlán"
 
+#: contrib/admin/media/js/calendar.js:24
+#: contrib/admin/media/js/dateparse.js:32
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+"Eanair Feabhra Márta Aibreán Bealtaine Meitheamh Iúil Lúnasa Mean Fómhair "
+"Deireadh Fómhair Nollaig"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "D L M C D A S"
+
+#: contrib/admin/media/js/calendar.js:26
+msgid "FIRST_DAY_OF_WEEK"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Domhnaigh Luain Máirt Céadaoin Déardaoin Aoine Sathairn"
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr "Taispeán"
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr "Folaigh"
+
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
 msgid "Now"
@@ -104,13 +121,3 @@
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
 msgid "Tomorrow"
 msgstr "Amárach"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Taispeán"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Folaigh"
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/ga/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j M Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/gl/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'd F Y'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j M, Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/he/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/he/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/he/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -1,12 +1,13 @@
 # translation of Django.
 # Copyright (C) 2008 The Django Project
 # This file is distributed under the same license as the Django package.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-08 08:21-0500\n"
-"PO-Revision-Date: 2009-05-08 15:31+0100\n"
+"POT-Creation-Date: 2010-05-01 20:11+0200\n"
+"PO-Revision-Date: 2010-05-01 12:27-0500\n"
 "Last-Translator: Alex <alex.gaynor@gmail.com>\n"
 "Language-Team: Django-i18n <django-i18n@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
@@ -14,225 +15,260 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Poedit-Bookmarks: -1,988,-1,-1,-1,-1,-1,-1,-1,-1\n"
+"X-Generator: Lokalize 1.0\n"
 
 #: conf/global_settings.py:44
 msgid "Arabic"
 msgstr "ערבית"
 
 #: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "בנגאלית"
+msgid "Bulgarian"
+msgstr "בולגרית"
 
 #: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "בולגרית"
+msgid "Bengali"
+msgstr "בנגאלית"
 
 #: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr "בוסנית"
+
+#: conf/global_settings.py:48
 msgid "Catalan"
 msgstr "קאטלונית"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "צ'כית"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:50
 msgid "Welsh"
 msgstr "וולשית"
 
-#: conf/global_settings.py:50
-msgid "Danish"
-msgstr "דנית"
-
 #: conf/global_settings.py:51
-msgid "German"
-msgstr "גרמנית"
+msgid "Danish"
+msgstr "דנית"
 
 #: conf/global_settings.py:52
+msgid "German"
+msgstr "גרמנית"
+
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "יוונית"
 
-#: conf/global_settings.py:53
-msgid "English"
-msgstr "אנגלית"
-
 #: conf/global_settings.py:54
-msgid "Spanish"
-msgstr "ספרדית"
+msgid "English"
+msgstr "אנגלית"
 
 #: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "אסטונית"
+msgid "British English"
+msgstr "אנגלית בריטית"
 
 #: conf/global_settings.py:56
+msgid "Spanish"
+msgstr "ספרדית"
+
+#: conf/global_settings.py:57
 msgid "Argentinean Spanish"
 msgstr "ספרדית ארגנטינאית"
 
-#: conf/global_settings.py:57
-msgid "Basque"
-msgstr "בסקית"
-
 #: conf/global_settings.py:58
-msgid "Persian"
-msgstr "פרסית"
+msgid "Estonian"
+msgstr "אסטונית"
 
 #: conf/global_settings.py:59
-msgid "Finnish"
-msgstr "פינית"
+msgid "Basque"
+msgstr "בסקית"
 
 #: conf/global_settings.py:60
-msgid "French"
-msgstr "צרפתית"
+msgid "Persian"
+msgstr "פרסית"
 
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "אירית"
+msgid "Finnish"
+msgstr "פינית"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "גאליצית"
+msgid "French"
+msgstr "צרפתית"
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "הונגרית"
+msgid "Frisian"
+msgstr "פריזית"
 
 #: conf/global_settings.py:64
+msgid "Irish"
+msgstr "אירית"
+
+#: conf/global_settings.py:65
+msgid "Galician"
+msgstr "גאליציאנית"
+
+#: conf/global_settings.py:66
 msgid "Hebrew"
 msgstr "עברית"
 
-#: conf/global_settings.py:65
+#: conf/global_settings.py:67
 msgid "Hindi"
 msgstr "הינדי"
 
-#: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "קרואטית"
-
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "איסלנדית"
-
 #: conf/global_settings.py:68
+msgid "Croatian"
+msgstr "קרואטית"
+
+#: conf/global_settings.py:69
+msgid "Hungarian"
+msgstr "הונגרית"
+
+#: conf/global_settings.py:70
+msgid "Icelandic"
+msgstr "איסלנדית"
+
+#: conf/global_settings.py:71
 msgid "Italian"
 msgstr "איטלקית"
 
-#: conf/global_settings.py:69
+#: conf/global_settings.py:72
 msgid "Japanese"
 msgstr "יפנית"
 
-#: conf/global_settings.py:70
+#: conf/global_settings.py:73
 msgid "Georgian"
 msgstr "גיאורגית"
 
-#: conf/global_settings.py:71
+#: conf/global_settings.py:74
+msgid "Khmer"
+msgstr "חמר"
+
+# זו שפה הודית, אין קשר לקנדה המדינה
+#: conf/global_settings.py:75
+msgid "Kannada"
+msgstr "קאנאדה"
+
+#: conf/global_settings.py:76
 msgid "Korean"
 msgstr "קוריאנית"
 
-#: conf/global_settings.py:72
-msgid "Khmer"
-msgstr "חמר"
-
-#: conf/global_settings.py:73
-msgid "Kannada"
-msgstr "קנדית"
-
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "לטבית"
-
-#: conf/global_settings.py:75
+#: conf/global_settings.py:77
 msgid "Lithuanian"
 msgstr "ליטאית"
 
-#: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "מקדונית"
-
-#: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "הולנדית"
-
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "נורווגית"
+msgid "Latvian"
+msgstr "לטבית"
 
 #: conf/global_settings.py:79
-msgid "Polish"
-msgstr "פולנית"
+msgid "Macedonian"
+msgstr "מקדונית"
 
 #: conf/global_settings.py:80
-msgid "Portuguese"
-msgstr "פורטוגזית"
+msgid "Dutch"
+msgstr "הולנדית"
 
 #: conf/global_settings.py:81
-msgid "Brazilian Portuguese"
-msgstr "פורטוגזית ברזילאית"
+msgid "Norwegian"
+msgstr "נורווגית"
 
 #: conf/global_settings.py:82
-msgid "Romanian"
-msgstr "רומנית"
+#, fuzzy
+msgid "Norwegian Bokmal"
+msgstr "נורווגית"
 
 #: conf/global_settings.py:83
-msgid "Russian"
-msgstr "רוסית"
+#, fuzzy
+msgid "Norwegian Nynorsk"
+msgstr "נורווגית"
 
 #: conf/global_settings.py:84
-msgid "Slovak"
-msgstr "סלובקית"
+msgid "Polish"
+msgstr "פולנית"
 
 #: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr "סלובנית"
+msgid "Portuguese"
+msgstr "פורטוגזית"
 
 #: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "סרבית"
+msgid "Brazilian Portuguese"
+msgstr "פורטוגזית ברזילאית"
 
 #: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "שוודית"
+msgid "Romanian"
+msgstr "רומנית"
 
 #: conf/global_settings.py:88
+msgid "Russian"
+msgstr "רוסית"
+
+#: conf/global_settings.py:89
+msgid "Slovak"
+msgstr "סלובקית"
+
+#: conf/global_settings.py:90
+msgid "Slovenian"
+msgstr "סלובנית"
+
+#: conf/global_settings.py:91
+msgid "Albanian"
+msgstr "אלבנית"
+
+#: conf/global_settings.py:92
+msgid "Serbian"
+msgstr "סרבית"
+
+#: conf/global_settings.py:93
+msgid "Serbian Latin"
+msgstr "סרבית לטינית"
+
+#: conf/global_settings.py:94
+msgid "Swedish"
+msgstr "שוודית"
+
+#: conf/global_settings.py:95
 msgid "Tamil"
 msgstr "טמילית"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:96
 msgid "Telugu"
 msgstr "טלגו"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:97
 msgid "Thai"
 msgstr "תאילנדית"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:98
 msgid "Turkish"
 msgstr "טורקית"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:99
 msgid "Ukrainian"
 msgstr "אוקראינית"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:100
+msgid "Vietnamese"
+msgstr "וייטנאמית"
+
+#: conf/global_settings.py:101
 msgid "Simplified Chinese"
 msgstr "סינית פשוטה"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:102
 msgid "Traditional Chinese"
 msgstr "סינית מסורתית"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
-msgstr "%(count)d %(items)s  היו נמחקו בהצלחה."
-
-#: contrib/admin/actions.py:67
-#: contrib/admin/options.py:1025
+msgstr "%(count)d %(items)s  נמחקו בהצלחה."
+
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
 msgid "Are you sure?"
 msgstr "האם את/ה בטוח/ה ?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
-msgstr "מחק את %(verbose_name_plural)s שבחרת בו"
+msgstr "מחק %(verbose_name_plural)s שנבחרו"
 
 #: contrib/admin/filterspecs.py:44
 #, python-format
@@ -243,10 +279,8 @@
 "<h3>ע\"י %s:</h3>\n"
 "<ul>\n"
 
-#: contrib/admin/filterspecs.py:75
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
+#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
 msgid "All"
 msgstr "הכל"
 
@@ -270,22 +304,19 @@
 msgid "This year"
 msgstr "השנה"
 
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "כן"
 
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "לא"
 
-#: contrib/admin/filterspecs.py:154
-#: forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "לא ידוע"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "פעולה"
 
@@ -317,183 +348,189 @@
 msgid "log entries"
 msgstr "רישומי יומן"
 
-#: contrib/admin/options.py:133
-#: contrib/admin/options.py:147
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
 msgid "None"
 msgstr "ללא"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Changed %s."
 msgstr "%s שונה."
 
-#: contrib/admin/options.py:519
-#: contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16
-#: forms/models.py:388
-#: forms/models.py:587
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:573
 msgid "and"
 msgstr "ו"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "התווסף %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "שונה %(list)s עבור %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:577
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "נמחק %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:581
 msgid "No fields changed."
 msgstr "אף שדה לא השתנה."
 
-#: contrib/admin/options.py:598
-#: contrib/auth/admin.py:67
+#: contrib/admin/options.py:647
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "הוספת %(name)s \"%(obj)s\" בוצעה בהצלחה."
 
-#: contrib/admin/options.py:602
-#: contrib/admin/options.py:635
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
 msgid "You may edit it again below."
 msgstr "ניתן לערוך שוב מתחת"
 
-#: contrib/admin/options.py:612
-#: contrib/admin/options.py:645
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
 #, python-format
 msgid "You may add another %s below."
 msgstr "ניתן להוסיף %s נוסף מתחת."
 
-#: contrib/admin/options.py:633
+#: contrib/admin/options.py:682
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "שינוי %(name)s \"%(obj)s\" בוצע בהצלחה."
 
-#: contrib/admin/options.py:641
+#: contrib/admin/options.py:690
 #, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr "הוספת %(name)s \"%(obj)s\" בוצעה בהצלחה. ניתן לערוך אותו שוב מתחת."
 
-#: contrib/admin/options.py:772
+#: contrib/admin/options.py:744
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr "יש לסמן פריטים כדי לבצע עליהם פעולות. לא שונו פריטים."
+
+#: contrib/admin/options.py:762
+msgid "No action selected."
+msgstr "לא נבחרה פעולה."
+
+#: contrib/admin/options.py:842
 #, python-format
 msgid "Add %s"
 msgstr "הוספת %s"
 
-#: contrib/admin/options.py:803
-#: contrib/admin/options.py:1003
+#: contrib/admin/options.py:868 contrib/admin/options.py:1080
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "הפריט %(name)s עם המפתח הראשי %(key)r אינו קיים."
 
-#: contrib/admin/options.py:860
+#: contrib/admin/options.py:933
 #, python-format
 msgid "Change %s"
 msgstr "שינוי %s"
 
-#: contrib/admin/options.py:904
+#: contrib/admin/options.py:978
 msgid "Database error"
 msgstr "שגיאת בסיס נתונים"
 
-#: contrib/admin/options.py:940
+#: contrib/admin/options.py:1014
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "שינוי %(count)s %(name)s בהצלחה."
 msgstr[1] "שינוי %(count)s %(name)s בהצלחה."
 
-#: contrib/admin/options.py:1018
+#: contrib/admin/options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s נבחר"
+msgstr[1] "כל ה־%(total_count)s נבחרו"
+
+#: contrib/admin/options.py:1046
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 מ %(cnt)s נבחרות"
+
+#: contrib/admin/options.py:1093
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "מחיקת %(name)s \"%(obj)s\" בוצעה בהצלחה."
 
-#: contrib/admin/options.py:1054
+#: contrib/admin/options.py:1130
 #, python-format
 msgid "Change history: %s"
 msgstr "היסטוריית שינוי: %s"
 
-#: contrib/admin/sites.py:20
-#: contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "נא להזין שם משתמש וסיסמה נכונים. בשני השדות גודל האותיות האנגליות משנה."
-
-#: contrib/admin/sites.py:278
-#: contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+"נא להזין שם משתמש וסיסמה נכונים. בשני השדות גודל האותיות האנגליות משנה."
+
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "עליך להתחבר שנית כי פג הזמן המוקצב לך."
 
-#: contrib/admin/sites.py:285
-#: contrib/admin/views/decorators.py:47
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "נראה שהדפדפן שלך אינו מוגדר לקבל עוגיות. נא לאפשר עוגיות, לטעון מחדש את הדף ולנסות שוב."
-
-#: contrib/admin/sites.py:301
-#: contrib/admin/sites.py:307
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+"נראה שהדפדפן שלך אינו מוגדר לקבל עוגיות. נא לאפשר עוגיות, לטעון מחדש את הדף "
+"ולנסות שוב."
+
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "שם משתמש אינו יכול להכיל את התו '@'."
 
-#: contrib/admin/sites.py:304
-#: contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "כתובת הדוא\"ל שלך אינה שם המשתמש שלך. נסה/י '%s' במקום."
 
-#: contrib/admin/sites.py:360
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "ניהול אתר"
 
-#: contrib/admin/sites.py:373
-#: contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "כניסה"
 
-#: contrib/admin/sites.py:417
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "ניהול %s"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "אחד או יותר %(fieldname)s ב%(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "אחד או יותר %(fieldname)s ב%(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "תאריך:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "שעה:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "הנוכחי:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "שינוי:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "חפש"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "הוסף עוד אחת"
 
@@ -508,17 +545,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -540,8 +577,11 @@
 msgstr "שגיאת שרת <em>(500)</em>"
 
 #: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "התרחשה שגיאה. היא דווחה למנהלי האתר בדוא\"ל ותתוקן בקרוב. תודה על סבלנותך."
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"התרחשה שגיאה. היא דווחה למנהלי האתר בדוא\"ל ותתוקן בקרוב. תודה על סבלנותך."
 
 #: contrib/admin/templates/admin/actions.html:4
 msgid "Run the selected action"
@@ -551,34 +591,47 @@
 msgid "Go"
 msgstr "בצע"
 
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr "לחיצה כאן תבחר את האובייקטים בכל העמודים"
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "בחירת כל %(total_count)s ה־%(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "איפוס בחירה"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:28
 msgid "Welcome,"
 msgstr "שלום,"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "תיעוד"
 
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "שינוי סיסמה"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "יציאה"
 
@@ -590,54 +643,63 @@
 msgid "Django administration"
 msgstr "ניהול Django"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "הוספה"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "היסטוריה"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "צפיה באתר"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "נא לתקן את השגיאה המופיעה מתחת."
 msgstr[1] "נא לתקן את השגיאות המופיעות מתחת."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "הוספת %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "סינון"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4
-#: forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "מחיקה"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:16
 #, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "מחיקת %(object_name)s '%(escaped_object)s' מצריכה מחיקת אובייקטים מקושרים, אך לחשבון שלך אין הרשאות למחיקת סוגי האובייקטים הבאים:"
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+"מחיקת %(object_name)s '%(escaped_object)s' מצריכה מחיקת אובייקטים מקושרים, "
+"אך לחשבון שלך אין הרשאות למחיקת סוגי האובייקטים הבאים:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:23
 #, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "האם ברצונך למחוק את %(object_name)s \"%(escaped_object)s\"? כל הפריטים הקשורים הבאים יימחקו:"
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+"האם ברצונך למחוק את %(object_name)s \"%(escaped_object)s\"? כל הפריטים "
+"הקשורים הבאים יימחקו:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:28
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:33
@@ -650,13 +712,22 @@
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:15
 #, python-format
-msgid "Deleting the %(object_name)s would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "מחיקת %(object_name)s מצריכה מחיקת אובייקטים מקושרים, אך לחשבון שלך אין הרשאות למחיקת סוגי האובייקטים הבאים:"
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+"מחיקת %(object_name)s מצריכה מחיקת אובייקטים מקושרים, אך לחשבון שלך אין "
+"הרשאות למחיקת סוגי האובייקטים הבאים:"
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:22
 #, python-format
-msgid "Are you sure you want to delete the selected %(object_name)s objects? All of the following objects and it's related items will be deleted:"
-msgstr "האם אתה בטוח שאתה רוצה למחוק את פריטי ה %(object_name)s שנבחרו.  כל הפריטים הבאים והחומר הנלווה אליהם יימחקו."
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"האם אתה בטוח שאתה רוצה למחוק את פריטי ה %(object_name)s שנבחרו.  כל הפריטים "
+"הבאים והחומר הנלווה אליהם יימחקו."
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -693,8 +764,13 @@
 msgstr "תוכן לא ידוע"
 
 #: contrib/admin/templates/admin/invalid_setup.html:7
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "משהו שגוי בהתקנת בסיס הנתונים שלך. נא לוודא שנוצרו טבלאות בסיס הנתונים המתאימות, ובסיס הנתונים ניתן לקריאה על ידי המשתמש המתאים."
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+"משהו שגוי בהתקנת בסיס הנתונים שלך. נא לוודא שנוצרו טבלאות בסיס הנתונים "
+"המתאימות, ובסיס הנתונים ניתן לקריאה על ידי המשתמש המתאים."
 
 #: contrib/admin/templates/admin/login.html:19
 msgid "Username:"
@@ -713,23 +789,25 @@
 msgstr "משתמש"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "פעולה"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "d.m.‏Y H:i:s"
-
 #: contrib/admin/templates/admin/object_history.html:38
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "לאובייקט זה אין היסטוריית שינוי. כנראה לא השתמשו בממשק הניהול הזה להוספתו."
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"לאובייקט זה אין היסטוריית שינוי. כנראה לא השתמשו בממשק הניהול הזה להוספתו."
 
 #: contrib/admin/templates/admin/pagination.html:10
 msgid "Show all"
 msgstr "הצג הכל"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "שמירה"
+
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Search"
 msgstr "חיפוש"
@@ -746,10 +824,6 @@
 msgid "%(full_result_count)s total"
 msgstr "%(full_result_count)s סה\"כ"
 
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "שמירה"
-
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
 msgstr "שמירה כחדש"
@@ -762,41 +836,47 @@
 msgid "Save and continue editing"
 msgstr "שמירה והמשך עריכה"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "ראשית יש להזין שם משתמש וסיסמה. לאחר מכן יהיה ביכולתך לערוך אפשרויות נוספות עבור המשתמש."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14
-#: contrib/auth/forms.py:47
-#: contrib/auth/forms.py:59
-msgid "Username"
-msgstr "שם משתמש"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:60
-#: contrib/auth/forms.py:185
-msgid "Password"
-msgstr "סיסמה"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "סיסמה (שוב)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "יש להזין את אותה סיסמה שוב,לאימות."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+"ראשית יש להזין שם משתמש וסיסמה. לאחר מכן יהיה ביכולתך לערוך אפשרויות נוספות "
+"עבור המשתמש."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "יש להזין סיסמה חדשה עבור המשתמש <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "סיסמה"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "סיסמה (שוב)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "יש להזין את אותה סיסמה שוב,לאימות."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "הוספת %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "להסיר"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "מחיקה ?"
@@ -810,9 +890,9 @@
 msgstr "התחבר/י שוב"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "שינוי סיסמה"
 
@@ -825,25 +905,25 @@
 msgid "Your password was changed."
 msgstr "סיסמתך שונתה."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "נא להזין את סיסמתך הישנה, למען האבטחה, ולאחר מכן את סיסמתך החדשה פעמיים כדי שנוכל לוודא שהקלדת אותה כראוי."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "סיסמה ישנה:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "סיסמה חדשה:"
-
 #: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "אימות סיסמה:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"נא להזין את סיסמתך הישנה, לצרכי אבטחה, ולאחר מכן את סיסמתך החדשה פעמיים כדי "
+"שנוכל לוודא שהקלדת אותה כראוי."
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "סיסמה ישנה"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "סיסמה חדשה"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "שנה את סיסמתי"
@@ -875,16 +955,30 @@
 msgstr "הזנת סיסמה חדשה"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid "Please enter your new password twice so we can verify you typed it in correctly."
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
 msgstr "נא להזין את סיסמתך החדשה פעמיים כדי שנוכל לוודא שהקלדת אותה כראוי."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "סיסמה חדשה:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "אימות סיסמה:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "איפוס הסיסמה נכשל"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid "The password reset link was invalid, possibly because it has already been used.  Please request a new password reset."
-msgstr "הקישור לאיפוס הסיסמה אינו חוקי. ייתכן והשתמשו בו כבר. נא לבקש איפוס סיסמה חדש."
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used.  Please request a new password reset."
+msgstr ""
+"הקישור לאיפוס הסיסמה אינו חוקי. ייתכן והשתמשו בו כבר. נא לבקש איפוס סיסמה "
+"חדש."
 
 #: contrib/admin/templates/registration/password_reset_done.html:6
 #: contrib/admin/templates/registration/password_reset_done.html:10
@@ -892,8 +986,11 @@
 msgstr "הסיסמה אופסה בהצלחה"
 
 #: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "שלחנו הוראות לקביעת הסיסמה אל כתובת הדוא\"ל שהזנת. ההודעה אמורה להתקבל בקרוב."
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"שלחנו הוראות לקביעת הסיסמה אל כתובת הדוא\"ל שהזנת. ההודעה אמורה להתקבל בקרוב."
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
@@ -922,8 +1019,12 @@
 msgstr "צוות %(site_name)s"
 
 #: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
-msgstr "שכחת את סיסמתך ? נא להזין את כתובת הדוא\"ל מתחת, ואנו נשלח הוראות לקביעת סיסמה חדשה."
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+"שכחת את סיסמתך ? נא להזין את כתובת הדוא\"ל מתחת, ואנו נשלח הוראות לקביעת "
+"סיסמה חדשה."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
@@ -933,7 +1034,7 @@
 msgid "Reset my password"
 msgstr "אפס את סיסמתי"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "כל התאריכים"
 
@@ -947,166 +1048,71 @@
 msgid "Select %s to change"
 msgstr "בחירת %s לשינוי"
 
-#: contrib/admin/views/template.py:37
-#: contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "אתר"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "תבנית"
 
-#: contrib/admindocs/views.py:58
-#: contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "תג:"
 
-#: contrib/admindocs/views.py:91
-#: contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "סינון:"
 
-#: contrib/admindocs/views.py:155
-#: contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
-msgstr "ה-view:"
-
-#: contrib/admindocs/views.py:187
+msgstr "ה־view:"
+
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "יישום %r לא נמצא"
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "מודל %(model_name)r לא נמצא ביישום %(app_label)r"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "אוביקטי `%(app_label)s.%(data_type)s` קשורים"
 
-#: contrib/admindocs/views.py:206
-#: contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "מודל:"
 
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "אובייקטי `%(app_label)s.%(object_name)s` קשורים"
 
-#: contrib/admindocs/views.py:242
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "כל %s"
 
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "מספר %s"
 
-#: contrib/admindocs/views.py:252
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
-msgstr "Fields on %s objects"
-
-#: contrib/admindocs/views.py:315
-#: contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328
-#: contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335
-#: contrib/admindocs/views.py:337
-msgid "Integer"
-msgstr "מספר שלם"
-
-#: contrib/admindocs/views.py:316
-msgid "Boolean (Either True or False)"
-msgstr "בוליאני (אמת או שקר)"
-
-#: contrib/admindocs/views.py:317
-#: contrib/admindocs/views.py:336
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "מחרוזת (עד %(max_length)s תווים)"
-
-#: contrib/admindocs/views.py:318
-msgid "Comma-separated integers"
-msgstr "מספרים שלמים מופרדים בפסיקים"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (without time)"
-msgstr "תאריך (ללא שעה)"
-
-#: contrib/admindocs/views.py:320
-msgid "Date (with time)"
-msgstr "תאריך (כולל שעה)"
-
-#: contrib/admindocs/views.py:321
-msgid "Decimal number"
-msgstr "מספר עשרוני"
-
-#: contrib/admindocs/views.py:322
-msgid "E-mail address"
-msgstr "כתובת דוא\"ל"
-
-#: contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
-msgid "File path"
-msgstr "נתיב קובץ"
-
-#: contrib/admindocs/views.py:325
-msgid "Floating point number"
-msgstr "מספר עשרוני"
-
-#: contrib/admindocs/views.py:329
-#: contrib/comments/models.py:60
-msgid "IP address"
-msgstr "כתובת IP"
-
-#: contrib/admindocs/views.py:331
-msgid "Boolean (Either True, False or None)"
-msgstr "בוליאני (אמת, שקר או כלום)"
-
-#: contrib/admindocs/views.py:332
-msgid "Relation to parent model"
-msgstr "יחס למודל אב"
-
-#: contrib/admindocs/views.py:333
-msgid "Phone number"
-msgstr "מספר טלפון"
-
-#: contrib/admindocs/views.py:338
-msgid "Text"
-msgstr "טקסט"
-
-#: contrib/admindocs/views.py:339
-msgid "Time"
-msgstr "זמן"
-
-#: contrib/admindocs/views.py:340
-#: contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:341
-msgid "U.S. state (two uppercase letters)"
-msgstr "מדינה בארה\"ב (שתי אותיות גדולות)"
-
-#: contrib/admindocs/views.py:342
-msgid "XML text"
-msgstr "טקסט XML"
-
-#: contrib/admindocs/views.py:368
+msgstr "שדות באובייקטי %s"
+
+#: contrib/admindocs/views.py:361
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "לא נראה ש-%s הוא אובייקט urlpattern"
@@ -1142,7 +1148,9 @@
 msgstr "תיעוד לדף זה"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
 msgstr "מקפיץ אותך מכל עמוד לתיעוד התצוגה שייצרה אותו."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
@@ -1150,7 +1158,9 @@
 msgstr "הצג מזהה אובייקט"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
 msgstr "מציג את סוג התוכן והמזהה הייחודי לעמודים המייצגים אובייקט בודד."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
@@ -1169,231 +1179,274 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "כנ\"ל, אך דף הניהול ייפתח בחלון חדש."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "מידע אישי"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "הרשאות"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "תאריכים חשובים"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "קבוצות"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "הוספת משתמש"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "הסיסמה שונתה בהצלחה."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "שינוי סיסמה: %s"
 
-#: contrib/auth/forms.py:15
-#: contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr "דורש 30 תווים או פחות. תווים אלפאנומריים בלבד (אותיות, ספרות וקווים תחתונים)."
-
-#: contrib/auth/forms.py:16
-#: contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "ערך זה חייב להכיל אותיות, ספרות וקווים תחתונים בלבד."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "שם משתמש"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr "שדה חובה. 30 תווים או פחות. אותיות, ספרות ו-@/./+/-/_ בלבד."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "ערך זה יכול להכיל אותיות, ספרות והתווים @/./+/-/_ בלבד."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "אימות סיסמה"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "משתמש עם שם משתמש זה קיים כבר"
 
-#: contrib/auth/forms.py:36
-#: contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "שני שדות הסיסמה אינם זהים."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "חשבון זה אינו פעיל."
 
-#: contrib/auth/forms.py:87
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
+#: contrib/auth/forms.py:88
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
 msgstr "נראה שעוגיות לא מאופשרות בדפדפן שלך. הן נדרשות כדי להתחבר."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "כתובת דוא\"ל"
 
-#: contrib/auth/forms.py:109
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
+#: contrib/auth/forms.py:110
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
 msgstr "כתובת דואר אלקטרוני זו אינה משוייכת למשתמש. בטוח שנרשמת ?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "איפוס סיסמה על %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "סיסמה חדשה"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "אימות סיסמה חדשה"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "סיסמה ישנה"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr "סיסמתך הישנה הוזנה בצורה שגויה. נא להזינה שוב."
 
-#: contrib/auth/models.py:63
-#: contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "שם"
 
-#: contrib/auth/models.py:65
-msgid "codename"
-msgstr "שם קוד"
-
 #: contrib/auth/models.py:68
+msgid "codename"
+msgstr "שם קוד"
+
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "הרשאה"
 
-#: contrib/auth/models.py:69
-#: contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "הרשאות"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "קבוצה"
 
-#: contrib/auth/models.py:91
-#: contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "קבוצות"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "שם משתמש"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr "שדה חובה. 30 תווים או פחות. אותיות, ספרות והתווים @/./+/-/_ בלבד."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "שם פרטי"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "שם משפחה"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "כתובת דוא\"ל"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "סיסמה"
 
-#: contrib/auth/models.py:132
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr "יש להזין '[algo]$[salt]$[hexdigest]' או להשתמש ב<a href=\"password/\">טופס שינוי הסיסמה</a>."
-
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:200
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+"יש להזין '[algo]$[salt]$[hexdigest]' או להשתמש ב<a href=\"password/\">טופס "
+"שינוי הסיסמה</a>."
+
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "סטטוס איש צוות"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "מציין האם המשתמש יכול להתחבר לאתר הניהול."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "פעיל"
 
-#: contrib/auth/models.py:134
-msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
-msgstr "מציין האם יש להתייחס למשתמש כפעיל. יש לבטל בחירה זו במקום למחוק חשבונות משתמשים."
-
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:202
+msgid ""
+"Designates whether this user should be treated as active. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"מציין האם יש להתייחס למשתמש כפעיל. יש לבטל בחירה זו במקום למחוק חשבונות "
+"משתמשים."
+
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "סטטוס משתמש על"
 
-#: contrib/auth/models.py:135
-msgid "Designates that this user has all permissions without explicitly assigning them."
+#: contrib/auth/models.py:203
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
 msgstr "מציין שלמשתמש זה יש את כל ההרשאות ללא הצורך המפורש בהענקתן."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "כניסה אחרונה"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "תאריך הצטרפות"
 
-#: contrib/auth/models.py:139
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "בנוסף לכל ההרשאות שהוקצו ידנית, יוענקו למשתמש גם כל ההרשאות של כל קבוצה המשוייכת אליו."
-
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:207
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"בנוסף לכל ההרשאות שהוקצו ידנית, יוענקו למשתמש גם כל ההרשאות של כל קבוצה "
+"המשוייכת אליו."
+
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "הרשאות משתמש"
 
-#: contrib/auth/models.py:144
-#: contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "משתמש"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "משתמשים"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "הודעה"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "יצאת מהמערכת"
 
 #: contrib/auth/management/commands/createsuperuser.py:23
-#: forms/fields.py:429
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "יש להזין כתובת דוא\"ל חוקית."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "תוכן"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
-msgstr "מטא-נתונים"
+msgstr "מטא־נתונים"
+
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "סומנה"
+msgstr[1] "סומנו"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "סמן תגובות שנבחרו"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "אושרה"
+msgstr[1] "אושרו"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "אשר תגובות שנבחרו"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "הוסרה"
+msgstr[1] "הוסרו"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "הסר תגובות שנבחרו"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "תגובה אחת %(action)s בהצלחה"
+msgstr[1] "%(count)s תגובות %(action)s בהצלחה"
 
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
-msgstr "הערות ל %(site_name)s"
+msgstr "תגובות עבור %(site_name)s"
 
 #: contrib/comments/feeds.py:23
 #, python-format
 msgid "Latest comments on %(site_name)s"
-msgstr "ההערות האחרונות על %(site_name)s"
+msgstr "התגובות האחרונות על %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "שם"
 
@@ -1401,24 +1454,28 @@
 msgid "Email address"
 msgstr "כתובת דוא\"ל"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "תגובה"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "שמור על לשונך! המילה %s אסורה לשימוש כאן."
 msgstr[1] "שמור על לשונך! המילים %s אסורות לשימוש כאן."
 
-#: contrib/comments/forms.py:180
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr "אם יוזן משהו בשדה היחס לתגובתך יהיה כמו לספאם"
-
-#: contrib/comments/models.py:22
-#: contrib/contenttypes/models.py:74
+#: contrib/comments/forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr "אם יוזן משהו בשדה זה תגובתך תטופל כספאם"
+
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "סוג תוכן"
 
@@ -1438,8 +1495,7 @@
 msgid "user's URL"
 msgstr "אתר המשתמש"
 
-#: contrib/comments/models.py:56
-#: contrib/comments/models.py:76
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
 #: contrib/comments/models.py:169
 msgid "comment"
 msgstr "תגובה"
@@ -1448,33 +1504,46 @@
 msgid "date/time submitted"
 msgstr "תאריך/שעת הגשה"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "כתובת IP"
+
 #: contrib/comments/models.py:61
 msgid "is public"
-msgstr "ציבורי"
+msgstr "פומבי "
 
 #: contrib/comments/models.py:62
-msgid "Uncheck this box to make the comment effectively disappear from the site."
-msgstr "ביטול סימון תיבה תעלים בפועל את התגובה מהאתר"
+msgid ""
+"Uncheck this box to make the comment effectively disappear from the site."
+msgstr "ביטול סימון התיבה יעלים בפועל את התגובה מהאתר"
 
 #: contrib/comments/models.py:64
 msgid "is removed"
 msgstr "האם הוסר"
 
 #: contrib/comments/models.py:65
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "יש לסמן תיבה זו עבור תגובה לא נאותה. הודעת \"תגובה זו נמחקה\" תוצג במקום."
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+"יש לסמן תיבה זו עבור תגובה לא נאותה. הודעת \"תגובה זו נמחקה\" תוצג במקום "
+"התגובה."
 
 #: contrib/comments/models.py:77
 msgid "comments"
 msgstr "תגובות"
 
 #: contrib/comments/models.py:119
-msgid "This comment was posted by an authenticated user and thus the name is read-only."
-msgstr "הודעה זו נשלחה ע\"י משתמש מחובר לכן השם הוא לקריאה בלבד."
+msgid ""
+"This comment was posted by an authenticated user and thus the name is read-"
+"only."
+msgstr "הודעה זו נשלחה ע\"י משתמש מחובר לכן השם אינו ניתן לשינוי."
 
 #: contrib/comments/models.py:128
-msgid "This comment was posted by an authenticated user and thus the email is read-only."
-msgstr "הודעה זו נשלחה ע\"י משתמש מחובר לכן כתובת הדוא\"ל לקריאה בלבד."
+msgid ""
+"This comment was posted by an authenticated user and thus the email is read-"
+"only."
+msgstr "הודעה זו נשלחה ע\"י משתמש מחובר לכן כתובת הדוא\"ל אינה ניתנת לשינוי."
 
 #: contrib/comments/models.py:153
 #, python-format
@@ -1513,47 +1582,42 @@
 
 #: contrib/comments/templates/comments/approve.html:7
 msgid "Really make this comment public?"
-msgstr "באמת הופכים את התגובה הציבורית?"
+msgstr "באמת להפוך את התגובה לפומבית?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "אשר"
 
 #: contrib/comments/templates/comments/approved.html:4
 msgid "Thanks for approving"
-msgstr "תודה על השימוש באתר שלנו!"
+msgstr "תודה על אישור התגובה"
 
 #: contrib/comments/templates/comments/approved.html:7
 #: contrib/comments/templates/comments/deleted.html:7
 #: contrib/comments/templates/comments/flagged.html:7
-msgid "Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "תודה שהקדשת מזמנך כדי לשפר את האתר שלנו"
+msgid ""
+"Thanks for taking the time to improve the quality of discussion on our site"
+msgstr "תודה על שהקדשת מזמנך כדי לשפר את איכות הדיון באתר שלנו"
 
 #: contrib/comments/templates/comments/delete.html:4
 msgid "Remove a comment"
-msgstr "הסר הערה"
+msgstr "הסר תגובה"
 
 #: contrib/comments/templates/comments/delete.html:7
 msgid "Really remove this comment?"
-msgstr "באמת להסיר את הערה זו?"
-
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "להסיר"
+msgstr "באמת להסיר תגובה זו?"
 
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
-msgstr "תודה על הסרת"
+msgstr "תודה על ההסרה"
 
 #: contrib/comments/templates/comments/flag.html:4
 msgid "Flag this comment"
-msgstr "סמן את הערה זו"
+msgstr "סמן תגובה זו"
 
 #: contrib/comments/templates/comments/flag.html:7
 msgid "Really flag this comment?"
-msgstr "באמת, סמן את הערה זו?"
+msgstr "באמת לסמן תגובה זו?"
 
 #: contrib/comments/templates/comments/flag.html:12
 msgid "Flag"
@@ -1561,7 +1625,7 @@
 
 #: contrib/comments/templates/comments/flagged.html:4
 msgid "Thanks for flagging"
-msgstr "תודה לציון"
+msgstr "תודה על הסימון"
 
 #: contrib/comments/templates/comments/form.html:17
 #: contrib/comments/templates/comments/preview.html:32
@@ -1573,39 +1637,6 @@
 msgid "Preview"
 msgstr "תצוגה מקדימה"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "תור תגובה עבור מתון של תגובות"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "אין תגובות עד בינוני"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "כתובת דוא\"ל"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "מאומתים?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "כתובת IP"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "תאריך הצטרפות"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "כן"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "לא"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "תודה על התגובה"
@@ -1633,20 +1664,24 @@
 msgid "or make changes"
 msgstr "או לבצע שינויים"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
-msgstr "שם ה-class של מודל פייתון"
-
-#: contrib/contenttypes/models.py:75
+msgstr "שם ה־class של מודל פייתון"
+
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "סוגי תוכן"
 
 #: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "לדוגמא: '/about/contact/'. יש לוודא הימצאות הקווים הנטויים בהתחלה ובסוף."
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"לדוגמא: '/about/contact/'. יש לוודא הימצאות הקווים הנטויים בהתחלה ובסוף."
 
 #: contrib/flatpages/admin.py:11
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
 msgstr "ערך זה חייב להכיל אותיות, ספרות, מקפים, קווים תחתונים ונטויים בלבד."
 
 #: contrib/flatpages/admin.py:22
@@ -1670,8 +1705,12 @@
 msgstr "שם תבנית"
 
 #: contrib/flatpages/models.py:12
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "דוגמא: 'flatpages/contact_page.html'. אם זה לא צויין, המערכת תשתמש ב-'flatpages/default.html'."
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"דוגמא: 'flatpages/contact_page.html'. אם לא צויין, המערכת תשתמש ב-'flatpages/"
+"default.html'."
 
 #: contrib/flatpages/models.py:13
 msgid "registration required"
@@ -1689,9 +1728,44 @@
 msgid "flat pages"
 msgstr "דפים פשוטים"
 
-#: contrib/formtools/wizard.py:130
-msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
-msgstr "לצערנו פג תוקף הטופס שלך.  עליך להמשיך למלא את הטופס מן העמוד הזה ואילך."
+#: contrib/formtools/wizard.py:140
+msgid ""
+"We apologize, but your form has expired. Please continue filling out the "
+"form from this page."
+msgstr ""
+"לצערנו פג תוקף הטופס שלך.  עליך להמשיך למלא את הטופס מן העמוד הזה ואילך."
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr "שדה ה־GIS הבסיסי -- ממופה לטיפוס OpenGIS Specification Geometry."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "נקודה"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "מחרוזת קו"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "פוליגון"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "מרובה־נקודות"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "מחרוזת קו מרובת שורות"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "פוליגון מרובה"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "אוסף גיאומטרי"
 
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
@@ -1706,7 +1780,9 @@
 msgstr "סוג גיאומטרי שגוי."
 
 #: contrib/gis/forms/fields.py:20
-msgid "An error occurred when transforming the geometry to the SRID of the geometry form field."
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
 msgstr "הייתה בעיה עם השינוי של הצורה לסוג של השדה."
 
 #: contrib/humanize/templatetags/humanize.py:19
@@ -1794,27 +1870,25 @@
 msgid "yesterday"
 msgstr "אתמול"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "יש להזין קוד דואר בתחביר NNNN או ANNNNAAA."
-
-#: contrib/localflavor/ar/forms.py:49
-#: contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135
-#: contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+msgstr "יש להזין קוד דואר בתבנית NNNN או ANNNNAAA."
+
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "יש להזין רק ספרות בשדה זה."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "שדה זה דורש 7 או 8 ספרות."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "יש להזין מספר CUIT חוקי בתחביר XX-XXXXXXXX-X או XXXXXXXXXXXX."
-
-#: contrib/localflavor/ar/forms.py:80
+msgstr "יש להזין מספר CUIT חוקי בתבנית XX-XXXXXXXX-X או XXXXXXXXXXXX."
+
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "CUIT שגוי"
 
@@ -1854,55 +1928,56 @@
 msgid "Vienna"
 msgstr "וינה"
 
-#: contrib/localflavor/at/forms.py:20
-#: contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
-msgstr "יש להזין מיקוד בתחביר XXXX."
+msgstr "יש להזין מיקוד בתבנית XXXX."
 
 #: contrib/localflavor/at/forms.py:48
 msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "יש להזין מספר ביטוח לאומי אוסטרלי חוקי בתחביר XXXX XXXXXX."
-
-#: contrib/localflavor/au/forms.py:16
+msgstr "יש להזין מספר ביטוח לאומי אוסטרלי חוקי בתבנית XXXX XXXXXX."
+
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "יש להזין קוד דואר בן 4 ספרות."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "יש להזין מיקוד בתחביר XXXXX-XXX."
-
-#: contrib/localflavor/br/forms.py:30
+msgstr "יש להזין מיקוד בתבנית XXXXX-XXX."
+
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "מספרי טלפון חייבים להיות בתחביר XX-XXXX-XXXX."
-
-#: contrib/localflavor/br/forms.py:58
-msgid "Select a valid brazilian state. That state is not one of the available states."
+msgstr "מספרי טלפון חייבים להיות בתבנית XX-XXXX-XXXX."
+
+#: contrib/localflavor/br/forms.py:59
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
 msgstr "נא לבחור מדינה ברזילאית חוקית. מדינה זו אינה אחת מהמדינות האפשריות."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "מספר CPF לא חוקי"
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "שדה זה דורש 11 או 14 ספרות לכל היותר."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "מספר CNPJ לא חוקי"
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "שדה זה דורש לפחות 14 ספרות."
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
-msgstr "יש להזין מיקוד בתחביר XXX XXX."
-
-#: contrib/localflavor/ca/forms.py:88
+msgstr "יש להזין מיקוד בתבנית XXX XXX."
+
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "יש להזין מספר ביטוח לאומי קנדי חוקי בתחביר XXX-XXX-XXXX."
+msgstr "יש להזין מספר ביטוח לאומי קנדי חוקי בתבנית XXX-XXX-XXXX."
 
 #: contrib/localflavor/ch/ch_states.py:5
 msgid "Aargau"
@@ -1910,19 +1985,19 @@
 
 #: contrib/localflavor/ch/ch_states.py:6
 msgid "Appenzell Innerrhoden"
-msgstr "אפנצל אינר-רודן"
+msgstr "אפנצל אינר־רודן"
 
 #: contrib/localflavor/ch/ch_states.py:7
 msgid "Appenzell Ausserrhoden"
-msgstr "אפנצל אוסר-רודן"
+msgstr "אפנצל אוסר־רודן"
 
 #: contrib/localflavor/ch/ch_states.py:8
 msgid "Basel-Stadt"
-msgstr "באזל-שטאדט"
+msgstr "באזל־שטאדט"
 
 #: contrib/localflavor/ch/ch_states.py:9
 msgid "Basel-Land"
-msgstr "באזל-לנדשאפט"
+msgstr "באזל־לנדשאפט"
 
 #: contrib/localflavor/ch/ch_states.py:10
 msgid "Berne"
@@ -2008,19 +2083,21 @@
 msgid "Zurich"
 msgstr "ציריך"
 
-#: contrib/localflavor/ch/forms.py:64
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr "יש להזין מספר זיהוי או דרכון שוויצרי בתחביר X1234567<0 או 1234567890."
-
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/ch/forms.py:65
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr "יש להזין מספר זיהוי או דרכון שוויצרי בתבנית X1234567<0 או 1234567890."
+
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "יש להזין RUT צ'יליאני חוקי."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "יש להזין RUT צ'יליאני חוקי. התחביר הוא XX.XXX.XXX-X."
-
-#: contrib/localflavor/cl/forms.py:31
+msgstr "יש להזין RUT צ'יליאני חוקי. התבנית היא XX.XXX.XXX-X."
+
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "שדה RUT צ'יליאני אינו חוקי."
 
@@ -2080,30 +2157,29 @@
 msgid "Moravian-Silesian Region"
 msgstr "איזור מורביה – שלזיה"
 
-#: contrib/localflavor/cz/forms.py:27
-#: contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "יש להזין קוד דואר בתחביר XXXXX או XXX XX."
-
-#: contrib/localflavor/cz/forms.py:47
+msgstr "יש להזין קוד דואר בתבנית XXXXX או XXX XX."
+
+#: contrib/localflavor/cz/forms.py:48
 msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
 msgstr "הזן מספר לידה בתבנית XXXXXX/XXXX או XXXXXXXXXX."
 
-#: contrib/localflavor/cz/forms.py:48
+#: contrib/localflavor/cz/forms.py:49
 msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "המשתנה שהזנת בשדה מין שגוי. הערכים החוקיים הם 'f' ו-'m'."
-
-#: contrib/localflavor/cz/forms.py:49
+msgstr "המשתנה שהזנת בשדה מין שגוי. הערכים החוקיים הם 'f' ו־'m'."
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "הזן מספר לידה חוקי."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "הזן מספר IC חוקי."
 
 #: contrib/localflavor/de/de_states.py:5
 msgid "Baden-Wuerttemberg"
-msgstr "באדן-וירטמברג"
+msgstr "באדן־וירטמברג"
 
 #: contrib/localflavor/de/de_states.py:6
 msgid "Bavaria"
@@ -2139,11 +2215,11 @@
 
 #: contrib/localflavor/de/de_states.py:14
 msgid "North Rhine-Westphalia"
-msgstr "נורדריין-וסטפאליה"
+msgstr "נורדריין־וסטפאליה"
 
 #: contrib/localflavor/de/de_states.py:15
 msgid "Rhineland-Palatinate"
-msgstr "ריינלנד-פאלץ"
+msgstr "ריינלנד־פאלץ"
 
 #: contrib/localflavor/de/de_states.py:16
 msgid "Saarland"
@@ -2155,25 +2231,26 @@
 
 #: contrib/localflavor/de/de_states.py:18
 msgid "Saxony-Anhalt"
-msgstr "סקסוניה-אנהלט"
+msgstr "סקסוניה־אנהלט"
 
 #: contrib/localflavor/de/de_states.py:19
 msgid "Schleswig-Holstein"
-msgstr "שלזוויג-הולשטיין"
+msgstr "שלזוויג־הולשטיין"
 
 #: contrib/localflavor/de/de_states.py:20
 msgid "Thuringia"
 msgstr "תורינגיה"
 
-#: contrib/localflavor/de/forms.py:14
-#: contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
-msgstr "יש להזין מיקוד בתחביר XXXXX."
-
-#: contrib/localflavor/de/forms.py:41
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "יש להזין מספר זיהוי גרמני חוקי בתחביר XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
+msgstr "יש להזין מיקוד בתבנית XXXXX."
+
+#: contrib/localflavor/de/forms.py:42
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr "יש להזין מספר זיהוי גרמני חוקי בתבנית XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
 
 #: contrib/localflavor/es/es_provinces.py:5
 msgid "Arava"
@@ -2442,73 +2519,510 @@
 msgid "Valencian Community"
 msgstr "קהילת ולנסיה"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "נא להזיו מיקוד חוקי בתחום ובתחביר 01XXX - 52XXX."
-
-#: contrib/localflavor/es/forms.py:39
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr "נא להזין מספר טלפון חוקי באחד מהתחבירים 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "נא להזין NIF, NIE, או CIF חוקי."
+msgstr "נא להזין מיקוד חוקי בתחום ובתבנית 01XXX - 52XXX."
+
+#: contrib/localflavor/es/forms.py:40
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+"נא להזין מספר טלפון חוקי באחת מהתבניות 6XXXXXXXX, 8XXXXXXXX  או 9XXXXXXXX."
 
 #: contrib/localflavor/es/forms.py:67
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr "נא להזין NIF, NIE, או CIF חוקי."
+
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "נא להזין NIF או NIE חוקי."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "סיכום ביקורת שגוי עבור NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "סיכום ביקורת שגוי עבור NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "סיכום ביקורת שגוי עבור CIF."
 
-#: contrib/localflavor/es/forms.py:142
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "נא להזין חשבון בנק חוקי בתחביר XXXX-XXXX-XX-XXXXXXXXXX."
-
 #: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr "נא להזין מספר חשבון בנק חוקי בתבנית XXXX-XXXX-XX-XXXXXXXXXX."
+
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "סיכום ביקורת שגוי עבור מספר חשבון בנק."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "יש להזין מספר ביטוח לאומי פיני חוקי."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "מספרי טלפון חייבים  להיות בתבנית 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "יש להזין מיקוד חוקי."
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "יש להזין מספר טלפון חוקי"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "יש להזין מספר רישוי רכב חוקי"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "הזן מספר NIK/KTP חוקי."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "באלי"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "בנטן"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "בנגולו"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "ג'וקיירטה"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "ג'קרטה"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "גורנטלו"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "ג'מבי"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "ג'אווה מערב"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "ג'אווה מרכז"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "ג'אווה מזרח"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "בורנאו מערב"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "בורנאו דרום"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "בורנאו מרכז"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "בורנאו מזרח"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "איי בנגקה בליטונג"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "איי ריאאו"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "למפונג"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "מאלוקו"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "מאלוקו צפון"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "נגרוא אסה דרוסלם"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "איי סונדה הקטנים - מערב"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "איי סונדה הקטנים - מזרח"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "פפוא"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "פפוא מערב"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "ריאאו"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "סולבסי מערב"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "סולבסי דרום"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "סולבסי מרכז"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "סולבסי דרום־מזרח"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "סולבסי צפון"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "סומטרה מערב"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "סומטרה דרום"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "סומטרה צפון"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "מאגלנג"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "סורקרטה - סולו"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "מדיון"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "קדירי"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "טפנולי"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "בנגה-מליטנג"
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr "קונסוליות"
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr "שגרירויות"
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "בנדונג"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr "סולאוסי צפון"
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - טימור"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr "איי סולבסי צפון"
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - לומבוק"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "פאפו ופאפו מערב"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "סיירבון"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - סומבאווה"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - פלורס"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - סומבה"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "בוגור"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "פקלונגאן"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "סמרנג"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "פאטי"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "סורביה"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "מדורה"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "מאלאנג"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "ג'מבר"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "בניומס"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "ממשל פדרלי"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "בוג'ונגורו"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "פורקוורטה"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "סידוארג'ו"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "גארוט"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "אנטרים"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "ארמאה"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "קארלאו"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "קאוובן"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "קלייר"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "קורק"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "דרי"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "דונגאל"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "דאון"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "דבלין"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "פרמנה"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "גולוויי"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "קרי"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "קילדאר"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "קילקני"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "ליש"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "לייטרים"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "לימריק"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "לונגפורד"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "לאות'"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "מאיו"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "מית'"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "מונהאן"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "אופלי"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "רוסקומון"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "סלייגו"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "טיפררי"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "טיירון"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "ווטפורד"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "וסטמית'"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "וקספורד"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "ויקלו"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
-msgstr "יש להזין מיקוד בתחביר XXXXXXX."
-
-#: contrib/localflavor/is_/forms.py:17
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "יש להזין מספר זיהוי איסלנדי חוקי. התחביר הוא XXXXXX-XXXX."
+msgstr "יש להזין מיקוד בתבנית XXXXXXX."
 
 #: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr "יש להזין מספר זיהוי איסלנדי חוקי. התבנית היא XXXXXX-XXXX."
+
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "מספר הזיהוי האיסלנדי אינו חוקי"
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "יש להזין מיקוד חוקי."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "יש להזין מספר ביטוח לאומי חוקי."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
-msgstr "יש להזין מספר מעמ חוקי"
+msgstr "יש להזין מספר מע\"מ חוקי"
 
 #: contrib/localflavor/jp/forms.py:16
 msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "יש להזין קוד דואר בתחביר XXXXXXX או XXX-XXXX."
+msgstr "יש להזין קוד דואר בתבנית XXXXXXX או XXX-XXXX."
 
 #: contrib/localflavor/jp/jp_prefectures.py:4
 msgid "Hokkaido"
@@ -2698,6 +3212,10 @@
 msgid "Okinawa"
 msgstr "אוקינאווה"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "נא להזין מספר זיהוי כוויתי חוקי"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "אגואסקליינטס"
@@ -2736,7 +3254,7 @@
 
 #: contrib/localflavor/mx/mx_states.py:21
 msgid "Durango"
-msgstr "צ'יוואוה"
+msgstr "דוראנגו"
 
 #: contrib/localflavor/mx/mx_states.py:22
 msgid "Guerrero"
@@ -2826,15 +3344,11 @@
 msgid "Zacatecas"
 msgstr "זאקאטקס"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "יש להזין מיקוד חוקי."
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "יש להזין מספר טלפון חוקי"
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "יש להזין מספר SoFi חוקי"
 
@@ -2886,15 +3400,15 @@
 msgid "Zuid-Holland"
 msgstr "דרום הולנד"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "יש להזין מספר ביטוח לאומי נורבגי חוקי."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "שדה זה דורש 8 ספרות."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "שדה זה דורש 11 ספרות."
 
@@ -2904,11 +3418,12 @@
 
 #: contrib/localflavor/pl/forms.py:39
 msgid "Wrong checksum for the National Identification Number."
-msgstr "סכום ביקורת שגוי עבודי מספר הזיהוי הלאומי"
+msgstr "סכום ביקורת שגוי עבור מספר הזיהוי הלאומי"
 
 #: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "נא להזין שדה מספר מס (NIP) בתחביר XXX-XXX-XX-XX או XX-XX-XXX-XXX."
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr "נא להזין שדה מספר מס (NIP) בתבנית XXX-XXX-XX-XX או XX-XX-XXX-XXX."
 
 #: contrib/localflavor/pl/forms.py:72
 msgid "Wrong checksum for the Tax Number (NIP)."
@@ -2916,7 +3431,7 @@
 
 #: contrib/localflavor/pl/forms.py:109
 msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "סמפר רשומת בית עסק ארצי(REGON) מכיל או תשע או ארבע עשרה ספרות."
+msgstr "מספר רשומת בית עסק ארצי(REGON) מכיל או תשע או ארבע עשרה ספרות."
 
 #: contrib/localflavor/pl/forms.py:110
 msgid "Wrong checksum for the National Business Register Number (REGON)."
@@ -2924,7 +3439,7 @@
 
 #: contrib/localflavor/pl/forms.py:148
 msgid "Enter a postal code in the format XX-XXX."
-msgstr "נא להזין מיקוד בתחביר XX-XXX."
+msgstr "נא להזין מיקוד בתבנית XX-XXX."
 
 #: contrib/localflavor/pl/pl_voivodeships.py:8
 msgid "Lower Silesia"
@@ -2990,6 +3505,14 @@
 msgid "West Pomerania"
 msgstr "מערב פומרניה"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "יש להזין מיקוד בתבנית XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "מספרי טלפון חייבים להכיל 9 ספרות, או להתחיל ב + או 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "יש להזין CIF חוקי."
@@ -3000,15 +3523,115 @@
 
 #: contrib/localflavor/ro/forms.py:141
 msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
-msgstr "יש להזין מספר IBAN חוקי בתחביר ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
+msgstr "יש להזין מספר IBAN חוקי בתבנית ROXX-XXXX-XXXX-XXXX-XXXX-XXXX"
 
 #: contrib/localflavor/ro/forms.py:171
 msgid "Phone numbers must be in XXXX-XXXXXX format."
-msgstr "תחביר מספרי טלפון חייב להיות XXXX-XXXXXX."
+msgstr "מספרי טלפון חייבים להיות בתבנית XXXX-XXXXXX."
 
 #: contrib/localflavor/ro/forms.py:194
 msgid "Enter a valid postal code in the format XXXXXX"
-msgstr "נא להזין מיקוד חוקי בתחביר XXXXXX"
+msgstr "נא להזין מיקוד חוקי בתבנית XXXXXX"
+
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "הזן מספר ארגון שוודי חוקי."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "יש להזין מספר זיהוי אישי שוודי חוקי."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "מספרי שיתוף פעולה אינם מותרים בשימוש"
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "נא להזין מיקוד שוודי בתבנית XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "סטוקהולם"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "וסטרבוטן"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "נורבוטן"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "אופסלה"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "סדרמאנלנד"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "אסטריֶטלנד"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "ינשפין"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "קרונוברג"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "קאלמאר"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "גוטלנד"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "בלשיניה"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "סקונה"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "הלנד"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "יטאלנד המערבית"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "ורמלנד"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "ארברו"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "וסטמנלנד"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "דלארנה"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "יבלבורג"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "וסטרנורלנד"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "ימטלנד"
 
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
@@ -3176,7 +3799,7 @@
 
 #: contrib/localflavor/sk/sk_districts.py:49
 msgid "Nove Zamky"
-msgstr "נווי-זאמקי"
+msgstr "נווי־זאמקי"
 
 #: contrib/localflavor/sk/sk_districts.py:50
 msgid "Partizanske"
@@ -3496,7 +4119,7 @@
 
 #: contrib/localflavor/uk/uk_regions.py:45
 msgid "Tyne and Wear"
-msgstr "טיין ו-וויר"
+msgstr "טיין ו־וויר"
 
 #: contrib/localflavor/uk/uk_regions.py:46
 msgid "Warwickshire"
@@ -3642,19 +4265,43 @@
 msgid "Wales"
 msgstr "וויילס"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "יש להזין מיקוד חוקי בתחביר XXXXX או XXXXX-XXXX."
-
-#: contrib/localflavor/us/forms.py:54
+msgstr "יש להזין מיקוד חוקי בתבנית XXXXX או XXXXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "מספרי טלפון חייבים להיות בתבנית XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "יש להזין מספר ביטוח לאומי אמריקאי בתחביר XXX-XX-XXXX."
-
-#: contrib/localflavor/za/forms.py:20
+msgstr "יש להזין מספר ביטוח לאומי אמריקאי בתבנית XXX-XX-XXXX."
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "יש להזין מדינה או טריטרויה בארה\"ב"
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "מדינה בארה\"ב (שתי אותיות גדולות)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "מספר טלפון"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "יש להזין מספר CI חוקי בתבנית X.XXX.XXX-X,XXXXXXX-X או XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "יש להזין מספר CI חוקי."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "נא להזין מספר זיהוי דרום אפריקאי חוקי"
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "נא להזין מיקוד דרום אפריקאי חוקי"
 
@@ -3672,7 +4319,7 @@
 
 #: contrib/localflavor/za/za_provinces.py:7
 msgid "KwaZulu-Natal"
-msgstr "קווזולו-נטל"
+msgstr "קווזולו־נאטאל"
 
 #: contrib/localflavor/za/za_provinces.py:8
 msgid "Limpopo"
@@ -3694,12 +4341,18 @@
 msgid "Western Cape"
 msgstr "כף מערבי"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "הודעה 'עצלה'"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "הפניה מ"
 
 #: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
 msgstr "זה אמור להיות נתיב מלא, ללא שם המתחם. לדוגמא: '/‎/events/search'."
 
 #: contrib/redirects/models.py:9
@@ -3707,7 +4360,9 @@
 msgstr "הפניה אל"
 
 #: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
 msgstr "יכול להיות נתיב מלא (כנ\"ל) או URL מלא המתחיל ב'http://'."
 
 #: contrib/redirects/models.py:13
@@ -3750,286 +4405,388 @@
 msgid "sites"
 msgstr "אתרים"
 
-#: db/models/fields/__init__.py:356
-#: db/models/fields/__init__.py:710
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "יש להזין ערך חוקי."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "יש להזין URL חוקי."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "ה־URL הזה נראה כקישור שבור."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr "יש להזין ערך המכיל אותיות, ספרות, קווים תחתונים ומקפים בלבד."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "יש להזין כתובת IPv4 חוקית."
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "יש להזין רק ספרות מופרדות בפסיקים."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "יש לוודא שערך זה הינו %(limit_value)s (כרגע %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "יש לוודא שערך זה פחות מ או שווה ל־%(limit_value)s ."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "יש לוודא שהערך גדול מ או שווה ל־%(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"יש לוודא שערך זה מכיל לפחות %(limit_value)d תווים (מכיל %(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"יש לוודא שערך זה מכיל %(limit_value)d תווים לכל היותר (מכיל %(show_value)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s חייב להיות ייחודי ל%(lookup)s של ה־%(date_field)s"
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s·עם·%(field_label)s·זה קיימת כבר."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "ערך %r אינו אפשרות חוקית."
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be null."
+msgstr "שדה זה אינו יכול להיות ריק."
+
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "שדה זה אינו יכול להיות ריק."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "שדה מסוג: %(field_type)s"
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "מספר שלם"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
 msgid "This value must be an integer."
 msgstr "ערך זה חייב להיות מספר שלם."
 
-#: db/models/fields/__init__.py:388
+#: db/models/fields/__init__.py:490
 msgid "This value must be either True or False."
 msgstr "ערך זה חייב להיות אמת או שקר."
 
-#: db/models/fields/__init__.py:427
-msgid "This field cannot be null."
-msgstr "שדה זה אינו יכול להכיל null."
-
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "יש להזין רק ספרות מופרדות בפסיקים."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "בוליאני (אמת או שקר)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "מחרוזת (עד %(max_length)s תווים)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "מספרים שלמים מופרדים בפסיקים"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "תאריך (ללא שעה)"
+
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "יש להזין תאריך במבנה YYYY-MM-DD."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "תאריך שגוי: %s"
 
-#: db/models/fields/__init__.py:547
-#: db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "נא להזין תאריך/שעה חוקיים בתחביר YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/__init__.py:601
+msgstr "נא להזין תאריך\\שעה חוקיים בתבנית YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "תאריך (כולל שעה)"
+
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "ערך זה חייב להיות מספר עשרוני."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "מספר עשרוני"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "כתובת דוא\"ל"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "נתיב קובץ"
+
+#: db/models/fields/__init__.py:822
 msgid "This value must be a float."
 msgstr "על הערך הזה להיות ערך מספר עשרוני."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "מספר עשרוני"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "מספר שלם גדול (8 בתים)"
+
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr "ערך זה חייב להיות כלום, אמת או שקר."
 
-#: db/models/fields/__init__.py:849
-#: db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "בוליאני (אמת, שקר או כלום)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "טקסט"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "זמן"
+
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
-msgstr "נא להזין זמן חוקי בתחביר HH:MM[:ss[.uuuuuu]]."
-
-#: db/models/fields/related.py:792
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "יש להחזיק את \"Control\", או \"Command\" על מק, לחוץ כדי לבחור יותר מאחד."
-
-#: db/models/fields/related.py:870
+msgstr "נא להזין זמן חוקי בתבנית HH:MM[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "טקסט XML"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "מודל %(model)s עם מפתח ראשי %(pk)r אינו קיים."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Foreign Key (הסוג נקבע לפי השדה המקושר)"
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr "יחס של אחד לאחד"
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr "יחס של רבים לרבים"
+
+#: db/models/fields/related.py:1000
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"יש להחזיק את \"Control\", או \"Command\" על מק, לחוץ כדי לבחור יותר מאחד."
+
+#: db/models/fields/related.py:1061
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
 msgstr[0] "נא להזין מזהה %(self)s חוקי. הערך %(value)r אינו חוקי."
 msgstr[1] "נא להזין מזהי %(self)s חוקיים. הערכים %(value)r אינם חוקיים."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "יש להזין תוכן בשדה זה."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "יש להזין ערך חוקי."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "נא לוודא שערך זה מכיל  %(max)d תווים לכל היותר (מכיל %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "נא לוודא שערך זה מכיל לפחות %(min)d תווים (מכיל %(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "נא להזין מספר שלם."
 
-#: forms/fields.py:167
-#: forms/fields.py:196
-#: forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "יש לוודא שערך זה פחות מ או שווה ל %s."
-
-#: forms/fields.py:168
-#: forms/fields.py:197
-#: forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "יש לוודא שהערך גדול מ או שווה ל %s."
-
-#: forms/fields.py:195
-#: forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "נא להזין מספר."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
-msgstr "נא לוודא שאין יותר מ-%s ספרות סה\"כ"
-
-#: forms/fields.py:228
+msgstr "נא לוודא שאין יותר מ־%s ספרות סה\"כ"
+
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
-msgstr "נא לוודא שאין יותר מ-%s ספרות אחרי הנקודה"
-
-#: forms/fields.py:229
+msgstr "נא לוודא שאין יותר מ־%s ספרות אחרי הנקודה"
+
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "נא לוודא שאין יותר מ-%s ספרות לפני הנקודה העשרונית"
-
-#: forms/fields.py:288
-#: forms/fields.py:863
+msgstr "נא לוודא שאין יותר מ־%s ספרות לפני הנקודה העשרונית"
+
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "יש להזין תאריך חוקי."
 
-#: forms/fields.py:322
-#: forms/fields.py:864
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "יש להזין שעה חוקית."
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "יש להזין תאריך ושעה חוקיים."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "לא נשלח שום קובץ. נא לבדוק את סוג הקידוד של הטופס."
 
-#: forms/fields.py:448
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "לא נשלח שום קובץ"
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "הקובץ שנשלח ריק."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
-msgid "Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "על שם הקובץ להיות לא יותר מ %(max)d תווים (יש לו%(length)d)."
-
-#: forms/fields.py:483
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr "על שם הקובץ להיות לא יותר מ־%(max)d תווים (יש לו%(length)d)."
+
+#: forms/fields.py:473
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
 msgstr "נא להעלות תמונה חוקית. הקובץ שהעלת אינו תמונה או מכיל תמונה מקולקלת."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "יש להזין URL חוקי."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "ה-URL הזה נראה כקישור שבור."
-
-#: forms/fields.py:625
-#: forms/fields.py:703
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "יש לבחור אפשרות חוקית. %(value)s אינו בין האפשרויות הזמינות."
 
-#: forms/fields.py:704
-#: forms/fields.py:765
-#: forms/models.py:962
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
 msgid "Enter a list of values."
 msgstr "יש להזין רשימת ערכים"
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "יש להזין כתובת IPv4 חוקית."
-
-#: forms/fields.py:902
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "יש להזין ערך המכיל אותיות, ספרות, קווים תחתונים ומקפים בלבד."
-
-#: forms/formsets.py:271
-#: forms/formsets.py:273
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "מיון"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s חייב להיות ייחודי ל%(lookup)s של ה%(date_field)s"
-
-#: forms/models.py:381
-#: forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s·עם·%(field_label)s·זה קיימת כבר."
-
-#: forms/models.py:581
+#: forms/models.py:567
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
-msgstr "נא לתקן את הערכים כפולים ל%(field)s."
-
-#: forms/models.py:585
+msgstr "נא לתקן את הערכים הכפולים ל%(field)s."
+
+#: forms/models.py:571
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "נא לתקן את הערכים כפולים ל%(field)s, זה חייב להיות ייחודי."
-
-#: forms/models.py:591
+msgstr "נא לתקן את הערכים הכפולים ל%(field)s, שערכים בו חייבים להיות ייחודיים."
+
+#: forms/models.py:577
 #, python-format
-msgid "Please correct the duplicate data for %(field_name)s which must be unique for the %(lookup)s in %(date_field)s."
-msgstr "נא לתקן את הערכים כפולים %(field_name)s, זה חייב להיות ייחודי ל%(lookup)s של %(date_field)s."
-
-#: forms/models.py:599
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+"נא לתקן את הערכים הכפולים %(field_name)s, שחייבים להיות ייחודיים ל%(lookup)s "
+"של %(date_field)s."
+
+#: forms/models.py:585
 msgid "Please correct the duplicate values below."
-msgstr "נא לתקן את הערכים כפולים מתחת."
-
-#: forms/models.py:837
+msgstr "נא לתקן את הערכים הכפולים למטה."
+
+#: forms/models.py:860
 msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "הרצופות מפתח זר לא תאם את האב מופע המפתח העיקרי."
-
-#: forms/models.py:892
+msgstr "המפתח הזר ה־inline לא התאים למפתח הראשי של האב."
+
+#: forms/models.py:926
 msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "יש לבחור אפשרות חוקית; '%(data)s' אינו בין %(choices)s."
-
-#: forms/models.py:963
+msgstr "יש לבחור אפשרות חוקית; אפשרות זו אינה אחת מהזמינות."
+
+#: forms/models.py:1008
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "יש לבחור אפשרות חוקית. %s אינו בין האפשרויות הזמינות."
 
-#: forms/models.py:965
+#: forms/models.py:1010
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
-msgstr "\"%s\" איננו חוקי כמקש עיקרי."
-
-#: template/defaultfilters.py:767
+msgstr "\"%s\" איננו חוקי כמפתח ראשי."
+
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "כן,לא,אולי"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
-msgstr[0] "%(size)d בית"
+msgstr[0] "בית %(size)d "
 msgstr[1] "%(size)d בתים"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
 
-#: utils/dateformat.py:41
+#: utils/dateformat.py:42
 msgid "p.m."
 msgstr "אחר הצהריים"
 
-#: utils/dateformat.py:42
+#: utils/dateformat.py:43
 msgid "a.m."
 msgstr "בבוקר"
 
-#: utils/dateformat.py:47
+#: utils/dateformat.py:48
 msgid "PM"
 msgstr "אחר הצהריים"
 
-#: utils/dateformat.py:48
+#: utils/dateformat.py:49
 msgid "AM"
 msgstr "בבוקר"
 
-#: utils/dateformat.py:97
+#: utils/dateformat.py:98
 msgid "midnight"
 msgstr "חצות"
 
-#: utils/dateformat.py:99
+#: utils/dateformat.py:100
 msgid "noon"
-msgstr "צהריים"
+msgstr "12 בצהריים"
 
 #: utils/dates.py:6
 msgid "Monday"
@@ -4095,28 +4852,23 @@
 msgid "February"
 msgstr "פברואר"
 
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
 msgid "March"
 msgstr "מרס"
 
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
 msgid "April"
 msgstr "אפריל"
 
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
 msgid "May"
 msgstr "מאי"
 
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
 msgid "June"
 msgstr "יוני"
 
-#: utils/dates.py:19
-#: utils/dates.py:31
+#: utils/dates.py:19 utils/dates.py:31
 msgid "July"
 msgstr "יולי"
 
@@ -4216,7 +4968,7 @@
 msgid "Dec."
 msgstr "דצמ'"
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "או"
 
@@ -4270,34 +5022,37 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:518
 msgid "DATE_FORMAT"
 msgstr "d.m.Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:519
+msgid "DATETIME_FORMAT"
+msgstr "d.m.‏Y H:i:s"
+
+#: utils/translation/trans_real.py:520
 msgid "TIME_FORMAT"
 msgstr "H:i:s"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:541
 msgid "YEAR_MONTH_FORMAT"
-msgstr "d.m.Y"
-
-#: utils/translation/trans_real.py:418
+msgstr "m.Y"
+
+#: utils/translation/trans_real.py:542
 msgid "MONTH_DAY_FORMAT"
-msgstr "d.m.Y"
-
-#: views/generic/create_update.py:114
+msgstr "d.m"
+
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
-msgstr "ה-%(verbose_name)s  נוצר בהצלחה."
-
-#: views/generic/create_update.py:156
+msgstr "ה־%(verbose_name)s  נוצר בהצלחה."
+
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
-msgstr "ה-%(verbose_name)s עודכן בהצלחה."
-
-#: views/generic/create_update.py:198
+msgstr "ה־%(verbose_name)s עודכן בהצלחה."
+
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
-msgstr "ה-%(verbose_name)s נמחק."
-
+msgstr "ה־%(verbose_name)s נמחק."
Binary file web/lib/django/conf/locale/he/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/he/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/he/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -1,51 +1,61 @@
 # Hebrew translation of djangojs.
 # Copyright (C) 2006 THE djangojs'S COPYRIGHT HOLDER
 # This file is distributed under the same license as the djangojs package.
+#
+#
 # Meir Kriheli <meir@mksoft.co.il>, 2006.
-# 
-# 
+# Shai Berger <shai@platonix.com>, 2010.
 msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-05-06 13:08+0300\n"
-"PO-Revision-Date: 2007-05-06 13:08+0300\n"
-"Last-Translator: Meir Kriheli <meir@mksoft.co.il>\n"
-"Language-Team: Hebrew\n"
+"POT-Creation-Date: 2010-05-01 20:22+0200\n"
+"PO-Revision-Date: 2010-05-01 14:20-0500\n"
+"Last-Translator: Alex <alex.gaynor@gmail.com>\n"
+"Language-Team: Django-i18n <django-i18n@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Lokalize 1.0\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
 msgstr "%s זמינות"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "בחירת הכל"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "הוספה"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "הסרה"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
 msgstr "%s נבחרות"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
 msgstr "יש לסמן את ההרשאות המבוקשות וללחוץ על "
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
 msgstr "איפוס הכל"
 
+#: contrib/admin/media/js/actions.js:17
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] "%(sel)s מ %(cnt)s נבחרות"
+msgstr[1] "%(sel)s מ %(cnt)s נבחרות"
+
 #: contrib/admin/media/js/calendar.js:24
 #: contrib/admin/media/js/dateparse.js:32
 msgid ""
@@ -56,65 +66,65 @@
 
 #: contrib/admin/media/js/calendar.js:25
 msgid "S M T W T F S"
-msgstr "ר ש ש ר ח ש ש"
+msgstr "א ב ג ד ה ו ש"
+
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "הצג"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "הסתר"
 
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
 msgstr "ראשון שני שלישי רביעי חמישי שישי שבת"
 
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "הצג"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "הסתר"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Now"
 msgstr "כעת"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
 msgid "Clock"
 msgstr "שעון"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
 msgid "Choose a time"
 msgstr "בחירת שעה"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Midnight"
 msgstr "חצות"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "6 a.m."
 msgstr "6 בבוקר"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "Noon"
-msgstr "צהריים"
+msgstr "12 בצהריים"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "ביטול"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "היום"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "לוח שנה"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "אתמול"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "מחר"
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/he/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j בF Y'
+TIME_FORMAT = 'H:i:s'
+DATETIME_FORMAT = 'j בF Y H:i:s'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j בF'
+SHORT_DATE_FORMAT = 'd/m/Y'
+SHORT_DATETIME_FORMAT = 'd/m/Y H:i:s'
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/hi/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'g:i:s A'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'd-m-Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/hr/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/hr/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/hr/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -1,20 +1,17 @@
-# translation of django.po to Hrvatski jezik
-# This file is distributed under the same license as the Django package.
-#
 msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-08 18:09+0200\n"
-"PO-Revision-Date: 2009-05-08 18:19+0200\n"
-"Last-Translator: Aljosa Mohorovic <aljosa.mohorovic@gmail.com>\n"
+"POT-Creation-Date: 2009-11-23 22:06+0100\n"
+"PO-Revision-Date: 2009-11-10 15:27+0100\n"
+"Last-Translator: Davor Lučić <r.dav.lc@gmail.com>\n"
 "Language-Team: Hrvatski Jezik <Django-i18n <django-i18n@googlegroups.com>>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms:  nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || "
 "n%100==4 ? 2 : 3);\n"
-"X-Generator: Vim 7.2\n"
+"X-Generator: Lokalize 1.0\n"
 
 #: conf/global_settings.py:44
 msgid "Arabic"
@@ -220,16 +217,16 @@
 msgid "Traditional Chinese"
 msgstr "Tradicionalni kineski"
 
-#: contrib/admin/actions.py:56
+#: contrib/admin/actions.py:60
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Uspješno izbrisano %(count)d %(items)s."
 
-#: contrib/admin/actions.py:63 contrib/admin/options.py:1025
+#: contrib/admin/actions.py:67 contrib/admin/options.py:1033
 msgid "Are you sure?"
 msgstr "Jeste li sigurni?"
 
-#: contrib/admin/actions.py:81
+#: contrib/admin/actions.py:85
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Izbrišite odabrane %(verbose_name_plural)s"
@@ -268,15 +265,15 @@
 msgid "This year"
 msgstr "Ova godina"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
 msgid "Yes"
 msgstr "Da"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
 msgid "No"
 msgstr "Ne"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
 msgid "Unknown"
 msgstr "Nepoznat pojam"
 
@@ -312,86 +309,86 @@
 msgid "log entries"
 msgstr "zapisi"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:134 contrib/admin/options.py:148
 msgid "None"
 msgstr "Nijedan"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:521
 #, python-format
 msgid "Changed %s."
 msgstr "Promijenjeno %s."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
+#: contrib/admin/options.py:521 contrib/admin/options.py:531
 #: contrib/comments/templates/comments/preview.html:16 forms/models.py:384
+#: forms/models.py:596
 msgid "and"
 msgstr "i"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:526
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Dodano %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:530
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Promijeni %(list)s za %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:535
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Izbrisani %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:539
 msgid "No fields changed."
 msgstr "Nije bilo promjena polja."
 
-#: contrib/admin/options.py:598 contrib/auth/admin.py:67
+#: contrib/admin/options.py:601 contrib/auth/admin.py:67
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "%(name)s \"%(obj)s\" uspješno je dodano."
 
-#: contrib/admin/options.py:602 contrib/admin/options.py:635
+#: contrib/admin/options.py:605 contrib/admin/options.py:638
 #: contrib/auth/admin.py:75
 msgid "You may edit it again below."
 msgstr "Možete ponovo urediti unos dolje."
 
-#: contrib/admin/options.py:612 contrib/admin/options.py:645
+#: contrib/admin/options.py:615 contrib/admin/options.py:648
 #, python-format
 msgid "You may add another %s below."
 msgstr "Možete dodati još jedan %s ispod."
 
-#: contrib/admin/options.py:633
+#: contrib/admin/options.py:636
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\" uspješno promijenjeno."
 
-#: contrib/admin/options.py:641
+#: contrib/admin/options.py:644
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"%(name)s \"%(obj)s\" uspješno dodan. Možete ponovo urediti unos dolje."
-
-#: contrib/admin/options.py:772
+msgstr "%(name)s \"%(obj)s\" uspješno dodan. Možete ponovo urediti unos dolje."
+
+#: contrib/admin/options.py:777
 #, python-format
 msgid "Add %s"
 msgstr "Novi unos (%s)"
 
-#: contrib/admin/options.py:803 contrib/admin/options.py:1003
+#: contrib/admin/options.py:809 contrib/admin/options.py:1011
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "Unos %(name)s sa primarnim ključem %(key)r ne postoji."
 
-#: contrib/admin/options.py:860
+#: contrib/admin/options.py:866
 #, python-format
 msgid "Change %s"
 msgstr "Promijeni %s"
 
-#: contrib/admin/options.py:904
+#: contrib/admin/options.py:910
 msgid "Database error"
 msgstr "Pogreška u bazi"
 
-#: contrib/admin/options.py:940
+#: contrib/admin/options.py:946
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
@@ -400,17 +397,17 @@
 msgstr[2] "%(count)s %(name)s uspješno promijenjeno."
 msgstr[3] "%(count)s %(name)s uspješno promijenjeno."
 
-#: contrib/admin/options.py:1018
+#: contrib/admin/options.py:1026
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)s \"%(obj)s\" uspješno izbrisan."
 
-#: contrib/admin/options.py:1054
+#: contrib/admin/options.py:1063
 #, python-format
 msgid "Change history: %s"
 msgstr "Promijeni povijest: %s"
 
-#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
 #: contrib/auth/forms.py:80
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
@@ -419,11 +416,11 @@
 "Molim unesite ispravno korisničko ime i lozinku. Uzmite u obzir da oba polja "
 "razlikuju velika/mala slova."
 
-#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Molim prijavite se ponovo jer je vaš session istekao."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:299 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -431,27 +428,27 @@
 "Izgleda da vaš browser nije podešen da prihvaća kolačiće (cookies). Molimo "
 "promijenite postavke, ponovno učitajte stranicu i pokušajte ponovo."
 
-#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
+#: contrib/admin/sites.py:315 contrib/admin/sites.py:321
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Korisnička imena ne mogu sadržavati '@' znak."
 
-#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Vaša e-mail adresa nije vaše korisničko ime. Pokušajte sa '%s'"
 
-#: contrib/admin/sites.py:360
+#: contrib/admin/sites.py:374
 msgid "Site administration"
 msgstr "Administracija stranica"
 
-#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:388 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Prijavi se"
 
-#: contrib/admin/sites.py:417
+#: contrib/admin/sites.py:433
 #, python-format
 msgid "%s administration"
 msgstr "%s administracija"
@@ -466,27 +463,27 @@
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "Jedan ili više %(fieldname)s u %(name)s:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:72
 msgid "Date:"
 msgstr "Datum:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:72
 msgid "Time:"
 msgstr "Vrijeme:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:96
 msgid "Currently:"
 msgstr "Trenutno:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:96
 msgid "Change:"
 msgstr "Promijeni:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:125
 msgid "Lookup"
 msgstr "Potraži"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:237
 msgid "Add Another"
 msgstr "Unesi još"
 
@@ -501,7 +498,7 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
+#: contrib/admin/templates/admin/base.html:54
 #: contrib/admin/templates/admin/change_form.html:17
 #: contrib/admin/templates/admin/change_list.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:6
@@ -554,18 +551,18 @@
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:27
 msgid "Welcome,"
 msgstr "Dobrodošli,"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Dokumentacija"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:40
 #: contrib/admin/templates/admin/auth/user/change_password.html:14
 #: contrib/admin/templates/admin/auth/user/change_password.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -573,7 +570,7 @@
 msgid "Change password"
 msgstr "Promijeni lozinku"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 msgid "Log out"
@@ -599,7 +596,7 @@
 
 #: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Pogledaj na stranicama"
 
@@ -669,9 +666,9 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
-"Jeste li sigurni da želite izbrisati %(object_name)s? Svi navedeni objekti i "
+"Jeste li sigurni da želite izbrisati odabrane %(object_name)s? Svi navedeni objekti i "
 "povezani unosi biti će izbrisani:"
 
 #: contrib/admin/templates/admin/filter.html:2
@@ -734,14 +731,13 @@
 msgstr "Korisnik"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Akcija"
 
 #: contrib/admin/templates/admin/object_history.html:30
 #: utils/translation/trans_real.py:400
 msgid "DATETIME_FORMAT"
-msgstr "DATETIME_FORMAT"
+msgstr "j. N Y. G:i T"
 
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
@@ -755,6 +751,11 @@
 msgid "Show all"
 msgstr "Prikaži sve"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Spremi"
+
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Search"
 msgstr "Traži"
@@ -771,10 +772,6 @@
 msgid "%(full_result_count)s total"
 msgstr "%(full_result_count)s ukupno"
 
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Spremi"
-
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
 msgstr "Spremi kao novi unos"
@@ -978,7 +975,7 @@
 msgid "Reset my password"
 msgstr "Resetiraj moju lozinku"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:304
 msgid "All dates"
 msgstr "Svi datumi"
 
@@ -1000,144 +997,144 @@
 msgid "template"
 msgstr "template"
 
-#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "tag:"
 
-#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "filter:"
 
-#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "prikaz:"
 
-#: contrib/admindocs/views.py:187
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "Aplikacija %r nije pronađena"
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "povezani `%(app_label)s.%(data_type)s` objekt"
 
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "model:"
 
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "povezani `%(app_label)s.%(object_name)s` objekti"
 
-#: contrib/admindocs/views.py:242
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "svi %s"
 
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "broj %s"
 
-#: contrib/admindocs/views.py:252
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "Polja na %s objektima"
 
-#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
+#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
+#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
+#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
 msgid "Integer"
 msgstr "Cijeli broj"
 
-#: contrib/admindocs/views.py:316
+#: contrib/admindocs/views.py:335
 msgid "Boolean (Either True or False)"
 msgstr "Boolean (True ili False)"
 
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
+#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
 #, python-format
 msgid "String (up to %(max_length)s)"
 msgstr "Slova (do %(max_length)s)"
 
-#: contrib/admindocs/views.py:318
+#: contrib/admindocs/views.py:337
 msgid "Comma-separated integers"
 msgstr "Cijeli brojevi odvojeni zarezom"
 
-#: contrib/admindocs/views.py:319
+#: contrib/admindocs/views.py:338
 msgid "Date (without time)"
 msgstr "Datum (bez vremena/sati)"
 
-#: contrib/admindocs/views.py:320
+#: contrib/admindocs/views.py:339
 msgid "Date (with time)"
 msgstr "Datum (sa vremenom/satima)"
 
-#: contrib/admindocs/views.py:321
+#: contrib/admindocs/views.py:340
 msgid "Decimal number"
 msgstr "Decimalni broj"
 
-#: contrib/admindocs/views.py:322
+#: contrib/admindocs/views.py:341
 msgid "E-mail address"
 msgstr "E-mail adresa"
 
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
+#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
+#: contrib/admindocs/views.py:346
 msgid "File path"
 msgstr "Put do datoteke"
 
-#: contrib/admindocs/views.py:325
+#: contrib/admindocs/views.py:344
 msgid "Floating point number"
 msgstr "Broj s pomičnim zarezom (floating point number)"
 
-#: contrib/admindocs/views.py:329 contrib/comments/models.py:60
+#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
 msgid "IP address"
 msgstr "IP adresa"
 
-#: contrib/admindocs/views.py:331
+#: contrib/admindocs/views.py:350
 msgid "Boolean (Either True, False or None)"
 msgstr "Boolean (True, False ili None)"
 
-#: contrib/admindocs/views.py:332
+#: contrib/admindocs/views.py:351
 msgid "Relation to parent model"
 msgstr "Relacija na roditeljski model (parent model)"
 
-#: contrib/admindocs/views.py:333
+#: contrib/admindocs/views.py:352
 msgid "Phone number"
 msgstr "Telefonski broj"
 
-#: contrib/admindocs/views.py:338
+#: contrib/admindocs/views.py:357
 msgid "Text"
 msgstr "Tekst"
 
-#: contrib/admindocs/views.py:339
+#: contrib/admindocs/views.py:358
 msgid "Time"
 msgstr "Vrijeme"
 
-#: contrib/admindocs/views.py:340 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
+#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
 #: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
-#: contrib/admindocs/views.py:341
+#: contrib/admindocs/views.py:360
 msgid "U.S. state (two uppercase letters)"
 msgstr "Država S.A.D.-a (dva velika slova)"
 
-#: contrib/admindocs/views.py:342
+#: contrib/admindocs/views.py:361
 msgid "XML text"
 msgstr "XML tekst"
 
-#: contrib/admindocs/views.py:368
+#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "izgleda da %s nije urlpattern objekt"
@@ -1429,22 +1426,55 @@
 msgid "message"
 msgstr "poruka"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:60
 msgid "Logged out"
 msgstr "Niste logirani"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Unesite ispravnu e-mail adresu."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Sadržaj"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metadata"
 
+#: contrib/comments/admin.py:39
+msgid "flagged"
+msgstr "oznaka"
+
+#: contrib/comments/admin.py:40
+msgid "Flag selected comments"
+msgstr "Označi ovaj komentar"
+
+#: contrib/comments/admin.py:43
+msgid "approved"
+msgstr "odobreno"
+
+#: contrib/comments/admin.py:44
+msgid "Approve selected comments"
+msgstr "Odobri odabrane komentare"
+
+#: contrib/comments/admin.py:47
+msgid "removed"
+msgstr "uklonjeno"
+
+#: contrib/comments/admin.py:48
+msgid "Remove selected comments"
+msgstr "Ukloni odabrane komentare"
+
+#: contrib/comments/admin.py:60
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1456,7 +1486,6 @@
 msgstr "Najnoviji komentari na %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Ime"
 
@@ -1465,7 +1494,6 @@
 msgstr "E-mail adresa"
 
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Komentar"
 
@@ -1594,7 +1622,6 @@
 msgstr "Učini komentar javno dostupnim?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Odobri"
 
@@ -1620,7 +1647,6 @@
 msgstr "Stvarno ukloni ovaj komentar?"
 
 #: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
 msgid "Remove"
 msgstr "Ukloni"
 
@@ -1654,39 +1680,6 @@
 msgid "Preview"
 msgstr "Prikaz"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Komentari koji zahtjevaju moderiranje"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Nema komentara koji zahtjevaju moderiranje"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Email"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Ovjeren (authenticated)?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP adresa"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Datum unosa"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "da"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "ne"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Hvala što ste komentirali"
@@ -1783,7 +1776,7 @@
 msgid "flat pages"
 msgstr "statične stranice"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:132
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1808,7 +1801,8 @@
 "An error occurred when transforming the geometry to the SRID of the geometry "
 "form field."
 msgstr ""
-"Došlo je do greške pri transformaciji geometrije na SRID geometrijskog polja forme."
+"Došlo je do greške pri transformaciji geometrije na SRID geometrijskog polja "
+"forme."
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
@@ -2598,6 +2592,10 @@
 msgid "Enter a valid Finnish social security number."
 msgstr "Unesite ispravan broj finskog socijalnog osiguranja."
 
+#: contrib/localflavor/fr/forms.py:30
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Telefonski brojevi moraju biti formata 0X XX XX XX XX."
+
 #: contrib/localflavor/in_/forms.py:14
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Unesi ispravan zip kod formata XXXXXXX."
@@ -3926,14 +3924,14 @@
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Unesite ispravno vrijeme formata HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:792
+#: db/models/fields/related.py:869
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Držite \"Control\", ili \"Command\" na Mac-u, da bi odabrali više od jednog "
 "objekta."
 
-#: db/models/fields/related.py:870
+#: db/models/fields/related.py:930
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3943,86 +3941,86 @@
 msgstr[1] ""
 "Molim unesite ispravan %(self)s ID-eve. Vrijednosti %(value)r su neispravne."
 
-#: forms/fields.py:54
+#: forms/fields.py:53
 msgid "This field is required."
 msgstr "Unos za ovo polje je obavezan."
 
-#: forms/fields.py:55
+#: forms/fields.py:54
 msgid "Enter a valid value."
 msgstr "Unesite ispravnu vrijednost."
 
-#: forms/fields.py:138
+#: forms/fields.py:137
 #, python-format
 msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
 msgstr ""
 "Osigurajte da ova vrijednost ima najviše %(max)d znakova (ima %(length)d)."
 
-#: forms/fields.py:139
+#: forms/fields.py:138
 #, python-format
 msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
 msgstr ""
 "Osigurajte da ova vrijednost ima najmanje %(min)d znakova (ima %(length)d)."
 
-#: forms/fields.py:166
+#: forms/fields.py:165
 msgid "Enter a whole number."
 msgstr "Unesite cijeli broj."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
+#: forms/fields.py:166 forms/fields.py:195 forms/fields.py:224
 #, python-format
 msgid "Ensure this value is less than or equal to %s."
 msgstr "Osigurajte da je ova vrijednost manja ili jednaka %s."
 
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
+#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
 #, python-format
 msgid "Ensure this value is greater than or equal to %s."
 msgstr "Osigurajte da je ova vrijednost veća ili jednaka %s."
 
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:194 forms/fields.py:223
 msgid "Enter a number."
 msgstr "Unesite broj."
 
-#: forms/fields.py:227
+#: forms/fields.py:226
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Osigurajte da ukupno nema više od %s numeričkih znakova."
 
-#: forms/fields.py:228
+#: forms/fields.py:227
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Osigurajte da ukupno nema više od %s decimalnih mjesta."
 
-#: forms/fields.py:229
+#: forms/fields.py:228
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr ""
 "Osigurajte da ukupno nema više od %s numeričkih znakova prije decimalne "
 "točke."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:287 forms/fields.py:862
 msgid "Enter a valid date."
 msgstr "Unesite ispravan datum."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:321 forms/fields.py:863
 msgid "Enter a valid time."
 msgstr "Unesite ispravno vrijeme."
 
-#: forms/fields.py:361
+#: forms/fields.py:360
 msgid "Enter a valid date/time."
 msgstr "Unesite ispravan datum/vrijeme."
 
+#: forms/fields.py:446
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Datoteka nije poslana. Provjerite 'encoding type' forme."
+
 #: forms/fields.py:447
-msgid "No file was submitted. Check the encoding type on the form."
-msgstr "Datoteka nije poslana. Provjerite 'encoding type' forme."
-
-#: forms/fields.py:448
 msgid "No file was submitted."
 msgstr "Datoteka nije poslana."
 
-#: forms/fields.py:449
+#: forms/fields.py:448
 msgid "The submitted file is empty."
 msgstr "Poslana datoteka je prazna."
 
-#: forms/fields.py:450
+#: forms/fields.py:449
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4030,7 +4028,7 @@
 "Osigurajte da ova datoteka ima najviše %(max)d znakova (trenutno ima %"
 "(length)d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:482
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4038,28 +4036,28 @@
 "Upload-ajte ispravnu sliku. Datoteka koju ste upload-ali ili nije slika ili "
 "je oštečena."
 
-#: forms/fields.py:544
+#: forms/fields.py:543
 msgid "Enter a valid URL."
 msgstr "Unesite ispravan URL."
 
-#: forms/fields.py:545
+#: forms/fields.py:544
 msgid "This URL appears to be a broken link."
 msgstr "Izgleda da je URL neispravan."
 
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:624 forms/fields.py:702
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Odaberite iz ponuđenog. %(value)s nije ponuđen kao opcija."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:863
+#: forms/fields.py:703 forms/fields.py:764 forms/models.py:999
 msgid "Enter a list of values."
 msgstr "Unesite listu vrijednosti."
 
-#: forms/fields.py:892
+#: forms/fields.py:891
 msgid "Enter a valid IPv4 address."
 msgstr "Unesite ispravnu IPv4 adresu."
 
-#: forms/fields.py:902
+#: forms/fields.py:901
 msgid ""
 "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
 msgstr ""
@@ -4073,27 +4071,49 @@
 #: forms/models.py:363
 #, python-format
 msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s mora biti jedinstven pojam za %(date_field)s %(lookup)s."
+msgstr ""
+"%(field_name)s mora biti jedinstven pojam za %(date_field)s %(lookup)s."
 
 #: forms/models.py:377 forms/models.py:385
 #, python-format
 msgid "%(model_name)s with this %(field_label)s already exists."
 msgstr "%(model_name)s sa navedenim %(field_label)s već postoji."
 
-#: forms/models.py:738
+#: forms/models.py:590
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Ispravite duplicirane podatke za %(field)s."
+
+#: forms/models.py:594
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+
+#: forms/models.py:600
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+
+#: forms/models.py:608
+msgid "Please correct the duplicate values below."
+msgstr "Molimo ispravite duplicirane vrijednosti ispod."
+
+#: forms/models.py:863
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr "The inline foreign key did not match the parent instance primary key."
 
-#: forms/models.py:793
+#: forms/models.py:926
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Izaberite ispravnu opciju. Ta opcija nije jedna od dostupnih opcija."
 
-#: forms/models.py:864
+#: forms/models.py:1000
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Odaberite iz ponuđenog. %s nije ponuđen kao opcija."
 
-#: forms/models.py:866
+#: forms/models.py:1002
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" nije ispravna vrijednost za primarni kluč."
@@ -4124,27 +4144,27 @@
 msgid "%.1f GB"
 msgstr "%.1f GB"
 
-#: utils/dateformat.py:41
+#: utils/dateformat.py:42
 msgid "p.m."
 msgstr "popodne"
 
-#: utils/dateformat.py:42
+#: utils/dateformat.py:43
 msgid "a.m."
 msgstr "ujutro"
 
-#: utils/dateformat.py:47
+#: utils/dateformat.py:48
 msgid "PM"
 msgstr "popodne"
 
-#: utils/dateformat.py:48
+#: utils/dateformat.py:49
 msgid "AM"
 msgstr "ujutro"
 
-#: utils/dateformat.py:97
+#: utils/dateformat.py:98
 msgid "midnight"
 msgstr "ponoć"
 
-#: utils/dateformat.py:99
+#: utils/dateformat.py:100
 msgid "noon"
 msgstr "podne"
 
@@ -4384,19 +4404,19 @@
 
 #: utils/translation/trans_real.py:399
 msgid "DATE_FORMAT"
-msgstr "DATE_FORMAT"
+msgstr "j. N Y."
 
 #: utils/translation/trans_real.py:401
 msgid "TIME_FORMAT"
-msgstr "TIME_FORMAT"
+msgstr "G:i"
 
 #: utils/translation/trans_real.py:417
 msgid "YEAR_MONTH_FORMAT"
-msgstr "YEAR_MONTH_FORMAT"
+msgstr "F Y."
 
 #: utils/translation/trans_real.py:418
 msgid "MONTH_DAY_FORMAT"
-msgstr "MONTH_DAY_FORMAT"
+msgstr "j. F"
 
 #: views/generic/create_update.py:114
 #, python-format
@@ -4412,406 +4432,3 @@
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s je izbrisano."
-
-#~ msgid "Gaeilge"
-#~ msgstr "Gaeilge"
-
-#~ msgid "Brazilian"
-#~ msgstr "Brazilski"
-
-#~ msgid "Ordering"
-#~ msgstr "Redoslijed"
-
-#~ msgid "DATE_WITH_TIME_FULL"
-#~ msgstr "DATE_WITH_TIME_FULL"
-
-#~ msgid "Your new password is: %(new_password)s"
-#~ msgstr "Vaša nova lozinka je: %(new_password)s"
-
-#~ msgid "Feel free to change this password by going to this page:"
-#~ msgstr "Slobodno promijenite lozinku odlaskom na ovu stranicu:"
-
-#~ msgid "Added %s."
-#~ msgstr "Dodano %s"
-
-#~ msgid "Deleted %s."
-#~ msgstr "Izbrisano %s."
-
-#~ msgid "The two 'new password' fields didn't match."
-#~ msgstr "Dva polja 'nova lozinka' nisu jednaka."
-
-#~ msgid "headline"
-#~ msgstr "naslov"
-
-#~ msgid "rating #1"
-#~ msgstr "ocjena #1"
-
-#~ msgid "rating #2"
-#~ msgstr "ocjena #2"
-
-#~ msgid "rating #3"
-#~ msgstr "ocjena #3"
-
-#~ msgid "rating #4"
-#~ msgstr "ocjena #4"
-
-#~ msgid "rating #5"
-#~ msgstr "ocjena #5"
-
-#~ msgid "rating #6"
-#~ msgstr "ocjena #6"
-
-#~ msgid "rating #7"
-#~ msgstr "ocjena #7"
-
-#~ msgid "rating #8"
-#~ msgstr "ocjena #8"
-
-#~ msgid "is valid rating"
-#~ msgstr "ocjena je ispravana"
-
-#~ msgid "Content object"
-#~ msgstr "Objekt sadržaja"
-
-#~ msgid "person's name"
-#~ msgstr "ime osobe"
-
-#~ msgid "ip address"
-#~ msgstr "ip adresa"
-
-#~ msgid "approved by staff"
-#~ msgstr "odobreno od strane osoblja"
-
-#~ msgid "free comments"
-#~ msgstr "slobodni komentari"
-
-#~ msgid "score"
-#~ msgstr "rezultat"
-
-#~ msgid "score date"
-#~ msgstr "datum rezultata"
-
-#~ msgid "karma score"
-#~ msgstr "karma rezultat"
-
-#~ msgid "karma scores"
-#~ msgstr "karma rezultati"
-
-#~ msgid "%(score)d rating by %(user)s"
-#~ msgstr "%(score)d ocjena po %(user)s"
-
-#~ msgid ""
-#~ "This comment was flagged by %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "Ovaj komentar je označio %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "flag date"
-#~ msgstr "označeno datuma"
-
-#~ msgid "user flag"
-#~ msgstr "korisnička oznaka"
-
-#~ msgid "user flags"
-#~ msgstr "korisničke oznake"
-
-#~ msgid "Flag by %r"
-#~ msgstr "Oznaka po %r"
-
-#~ msgid "deletion date"
-#~ msgstr "datum brisanja"
-
-#~ msgid "moderator deletion"
-#~ msgstr "brisanje moderatora"
-
-#~ msgid "moderator deletions"
-#~ msgstr "brisanja moderatora"
-
-#~ msgid "Moderator deletion by %r"
-#~ msgstr "Brisanje moderatora po %r"
-
-#~ msgid "Forgotten your password?"
-#~ msgstr "Zaboravili ste lozinku?"
-
-#~ msgid "Ratings"
-#~ msgstr "Ocjene"
-
-#~ msgid "Required"
-#~ msgstr "Obavezno"
-
-#~ msgid "Optional"
-#~ msgstr "Izborno, nije obavezno"
-
-#~ msgid "Post a photo"
-#~ msgstr "Pošalji sliku"
-
-#~ msgid "Your name:"
-#~ msgstr "Vaše ime:"
-
-#~ msgid ""
-#~ "This rating is required because you've entered at least one other rating."
-#~ msgstr "Ova ocjena je obavezna jer ste bar jednom već ocjenjivali"
-
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid_plural ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[0] ""
-#~ "Ovaj komentar je napisao korisnik koji je napisao manje od %(count)s "
-#~ "komentara:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[1] ""
-#~ "Ovaj komentar je napisao korisnik koji je napisao manje od %(count)s "
-#~ "komentara:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "Only POSTs are allowed"
-#~ msgstr "Samo POST dopušten."
-
-#~ msgid "One or more of the required fields wasn't submitted"
-#~ msgstr "Jedno ili više obaveznih polja nisu poslana"
-
-#~ msgid "Somebody tampered with the comment form (security violation)"
-#~ msgstr "Netko je mijenjao formu komentara (sigurnosni propust)"
-
-#~ msgid ""
-#~ "The comment form had an invalid 'target' parameter -- the object ID was "
-#~ "invalid"
-#~ msgstr ""
-#~ "Forma komentara ima nepravilni 'target' parametar -- ID objekta je bio "
-#~ "nepravilan"
-
-#~ msgid "The comment form didn't provide either 'preview' or 'post'"
-#~ msgstr "Forma komentara nije imala ni 'preview' ni 'post'"
-
-#~ msgid "Anonymous users cannot vote"
-#~ msgstr "Anonimni korisnici ne mogu glasati"
-
-#~ msgid "No voting for yourself"
-#~ msgstr "Ne možete glasati za sebe"
-
-#~ msgid "Uppercase letters are not allowed here."
-#~ msgstr "Velika slova ovdje nisu dopuštena."
-
-#~ msgid "Lowercase letters are not allowed here."
-#~ msgstr "Mala slova ovdje nisu dopuštena"
-
-#~ msgid "Enter valid e-mail addresses separated by commas."
-#~ msgstr "Unesite ispravne e-mail adrese odvojene zarezom."
-
-#~ msgid "Please enter a valid IP address."
-#~ msgstr "Unesite ispravnu IP adresu."
-
-#~ msgid "Empty values are not allowed here."
-#~ msgstr "Prazne vrijednosti nisu dopuštene ovdje."
-
-#~ msgid "Non-numeric characters aren't allowed here."
-#~ msgstr "Dozvoljeni su samo numerički znakovi."
-
-#~ msgid "This value can't be comprised solely of digits."
-#~ msgstr "Ova vrijednost ne može sadržavati samo brojeve."
-
-#~ msgid "Only alphabetical characters are allowed here."
-#~ msgstr "Dozvoljena su samo slova abecede."
-
-#~ msgid "Year must be 1900 or later."
-#~ msgstr "Godina mora biti 1900 ili poslije."
-
-#~ msgid "The URL %s does not point to a valid image."
-#~ msgstr "URL %s ne vodi na ispravnu sliku."
-
-#~ msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-#~ msgstr ""
-#~ "Telefonski brojevi moraju biti u formatu XXX-XXX-XXXX. \"%s\" nije "
-#~ "ispravan format."
-
-#~ msgid "The URL %s does not point to a valid QuickTime video."
-#~ msgstr "URL %s ne vodi na ispravan QuickTime video."
-
-#~ msgid "A valid URL is required."
-#~ msgstr "Ispravan URL je obavezan."
-
-#~ msgid ""
-#~ "Valid HTML is required. Specific errors are:\n"
-#~ "%s"
-#~ msgstr "Ispravan HTML je obavezan. Pogreške:<br> %s"
-
-#~ msgid "Badly formed XML: %s"
-#~ msgstr "Loše formatiran XML: %s"
-
-#~ msgid "Invalid URL: %s"
-#~ msgstr "Neispravan URL: %s"
-
-#~ msgid "The URL %s is a broken link."
-#~ msgstr "URL %s je neispravan (broken) link."
-
-#~ msgid "Enter a valid U.S. state abbreviation."
-#~ msgstr "Unesite ispravanu kraticu za državu S.A.D.-a."
-
-#~ msgid "This field must match the '%s' field."
-#~ msgstr "Ovo polje mora biti jednako %s polju."
-
-#~ msgid "Please enter something for at least one field."
-#~ msgstr "Molim unesite nešto bar za jedno polje."
-
-#~ msgid "Please enter both fields or leave them both empty."
-#~ msgstr ""
-#~ "Molim unesite vrijednosti za oba polja ili ostavite oba polja prazna."
-
-#~ msgid "This field must be given if %(field)s is not %(value)s"
-#~ msgstr "Ovo polje je obavezno ako je %(field)s različito od %(value)s"
-
-#~ msgid "Duplicate values are not allowed."
-#~ msgstr "Duplicirane vrijednosti nisu dopuštene."
-
-#~ msgid "This value must be between %(lower)s and %(upper)s."
-#~ msgstr "Vrijednost mora biti između %(lower)s i %(upper)s."
-
-#~ msgid "This value must be no more than %s."
-#~ msgstr "Vrijednost ne može biti veća od %s."
-
-#~ msgid "This value must be a power of %s."
-#~ msgstr "Ova vrijednost mora biti %s na kvadrat."
-
-#~ msgid "Please enter a valid decimal number."
-#~ msgstr "Molim unesite ispravan decimalni broj."
-
-#~ msgid "Please enter a valid decimal number with at most %s total digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s total digits."
-#~ msgstr[0] ""
-#~ "Molim unesite ispravan decimalni broj sa najviše %s numerička znaka."
-#~ msgstr[1] ""
-#~ "Molim unesite ispravan decimalni broj sa najviše %s numeričkih znakova."
-
-#~ msgid ""
-#~ "Please enter a valid decimal number with a whole part of at most %s digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with a whole part of at most %s "
-#~ "digits."
-#~ msgstr[0] ""
-#~ "Molim unesite ispravan decimalni broj sa najviše %s numerička znaka u "
-#~ "cijelom dijelu."
-#~ msgstr[1] ""
-#~ "Molim unesite ispravan decimalni broj sa najviše %s numeričkih znakova u "
-#~ "cijelom dijelu."
-
-#~ msgid "Please enter a valid decimal number with at most %s decimal place."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s decimal places."
-#~ msgstr[0] ""
-#~ "Molim unesite ispravan decimalni broj sa najviše %s decimalna mjesta."
-#~ msgstr[1] ""
-#~ "Molim unesite ispravan decimalni broj sa najviše %s decimalnih mjesta."
-
-#~ msgid "Please enter a valid floating point number."
-#~ msgstr ""
-#~ "Molim unesite ispravan broj sa pomičnim zarezom (floating point number)."
-
-#~ msgid "Make sure your uploaded file is at least %s bytes big."
-#~ msgstr "Provjerite je li Vaša upload-ana datoteka bar %s byte-ova velika."
-
-#~ msgid "Make sure your uploaded file is at most %s bytes big."
-#~ msgstr ""
-#~ "Provjerite je li Vaša upload-ana datoteka najviše %s byte-ova velika."
-
-#~ msgid "The format for this field is wrong."
-#~ msgstr "Format za ovo polje je pogrešno."
-
-#~ msgid "This field is invalid."
-#~ msgstr "Ovo polje je neispravno."
-
-#~ msgid "Could not retrieve anything from %s."
-#~ msgstr "Ništa nije izvučeno iz %s."
-
-#~ msgid ""
-#~ "The URL %(url)s returned the invalid Content-Type header '%(contenttype)"
-#~ "s'."
-#~ msgstr ""
-#~ "URL %(url)s je vratio neispravan Content-Type header '%(contenttype)s'."
-
-#~ msgid ""
-#~ "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts "
-#~ "with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Molim zatvorite %(tag)s na liniji %(line)s. (Linija počinje sa \"%(start)s"
-#~ "\".)"
-
-#~ msgid ""
-#~ "Some text starting on line %(line)s is not allowed in that context. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Neki tekst koji počinje na liniji %(line)s nije dopušten u tom kontekstu. "
-#~ "(Linija počinje sa \"%(start)s\".)"
-
-#~ msgid ""
-#~ "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with "
-#~ "\"%(start)s\".)"
-#~ msgstr ""
-#~ "\"%(attr)s\" na liniji %(line)s je neispravan atribut. (Linija počinje sa "
-#~ "\"%(start)s\".)"
-
-#~ msgid ""
-#~ "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-#~ "(start)s\".)"
-#~ msgstr ""
-#~ "\"<%(tag)s>\" na liniji %(line)s je neispravan tag. (Linija počinje sa \"%"
-#~ "(start)s\".)"
-
-#~ msgid ""
-#~ "A tag on line %(line)s is missing one or more required attributes. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Tagu na liniji %(line)s nedostaje jedan ili više obaveznih atributa. "
-#~ "(Linija počinje sa \"%(start)s\".)"
-
-#~ msgid ""
-#~ "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "\"%(attr)s\" atribut na liniji %(line)s ima neispravnu vrijednost. "
-#~ "(Linija počinje sa \"%(start)s\".)"
-
-#~ msgid ""
-#~ "%(object)s with this %(type)s already exists for the given %(field)s."
-#~ msgstr "%(object)s sa %(type)s već postoji za navedeno %(field)s."
-
-#~ msgid "Enter a valid filename."
-#~ msgstr "Unesite ime datoteke koja postoji."
-
-#~ msgid "Please enter a valid %s."
-#~ msgstr "Molim unesite ispravan %s."
-
-#~ msgid "Separate multiple IDs with commas."
-#~ msgstr "Odvojite više ID-a zarezom."
-
-#~ msgid "Ensure your text is less than %s character."
-#~ msgid_plural "Ensure your text is less than %s characters."
-#~ msgstr[0] "Osigurajte da tekst sadrži manje od %s znaka."
-#~ msgstr[1] "Osigurajte da tekst sadrži manje od %s znakova."
-
-#~ msgid "Line breaks are not allowed here."
-#~ msgstr "Novi redovi ovdje nisu dozvoljeni."
-
-#~ msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-#~ msgstr "Odaberite iz ponuđenog; '%(data)s' nije u %(choices)s."
-
-#~ msgid "Enter a whole number between -32,768 and 32,767."
-#~ msgstr "Unesite cijeli broj između -32,768 i 32,767."
-
-#~ msgid "Enter a positive number."
-#~ msgstr "Unesite pozitivan broj."
-
-#~ msgid "Enter a whole number between 0 and 32,767."
-#~ msgstr "Unesite cijeli broj između 0 i 32,767."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/hr/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j. F Y.'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y.'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'j.n.Y.'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/hu/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'Y. F j.'
+TIME_FORMAT = 'G:i:s'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+MONTH_DAY_FORMAT = 'F j.'
+SHORT_DATE_FORMAT = 'Y.m.d.'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/is/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j. F Y'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'j.n.Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/it/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/it/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/it/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -6,230 +6,262 @@
 msgstr ""
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-27 11:12+0200\n"
-"PO-Revision-Date: 2009-07-27 11:10+0200\n"
+"POT-Creation-Date: 2010-05-03 07:53+0200\n"
+"PO-Revision-Date: 2010-05-03 08:23+0200\n"
 "Last-Translator: Nicola Larosa <nico@tekNico.net>\n"
 "Language-Team: Italian <django-it@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 0.3\n"
+"X-Generator: KBabel 1.11.4\n"
 
 #: conf/global_settings.py:44
 msgid "Arabic"
 msgstr "arabo"
 
 #: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "bengali"
+msgid "Bulgarian"
+msgstr "bulgaro"
 
 #: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "bulgaro"
+msgid "Bengali"
+msgstr "bengali"
 
 #: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr "bosniaco"
+
+#: conf/global_settings.py:48
 msgid "Catalan"
 msgstr "catalano"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "ceco"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:50
 msgid "Welsh"
 msgstr "gallese"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:51
 msgid "Danish"
 msgstr "danese"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "tedesco"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "greco"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "inglese"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
+msgid "British English"
+msgstr "inglese britannico"
+
+#: conf/global_settings.py:56
 msgid "Spanish"
 msgstr "spagnolo"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "estone"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "spagnolo argentino"
-
 #: conf/global_settings.py:57
-msgid "Basque"
-msgstr "basco"
+msgid "Argentinean Spanish"
+msgstr "spagnolo argentino"
 
 #: conf/global_settings.py:58
+msgid "Estonian"
+msgstr "estone"
+
+#: conf/global_settings.py:59
+msgid "Basque"
+msgstr "basco"
+
+#: conf/global_settings.py:60
 msgid "Persian"
 msgstr "persiano"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:61
 msgid "Finnish"
 msgstr "finlandese"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:62
 msgid "French"
 msgstr "francese"
 
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "irlandese"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "galiziano"
-
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "ungherese"
+msgid "Frisian"
+msgstr "frisio"
 
 #: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "ebraico"
+msgid "Irish"
+msgstr "irlandese"
 
 #: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "hindi"
+msgid "Galician"
+msgstr "galiziano"
 
 #: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "croato"
+msgid "Hebrew"
+msgstr "ebraico"
 
 #: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "islandese"
+msgid "Hindi"
+msgstr "hindi"
 
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "italiano"
+msgid "Croatian"
+msgstr "croato"
 
 #: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "giapponese"
+msgid "Hungarian"
+msgstr "ungherese"
 
 #: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "georgiano"
+msgid "Icelandic"
+msgstr "islandese"
 
 #: conf/global_settings.py:71
-msgid "Korean"
-msgstr "coreano"
+msgid "Italian"
+msgstr "italiano"
 
 #: conf/global_settings.py:72
+msgid "Japanese"
+msgstr "giapponese"
+
+#: conf/global_settings.py:73
+msgid "Georgian"
+msgstr "georgiano"
+
+#: conf/global_settings.py:74
 msgid "Khmer"
 msgstr "khmer"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:75
 msgid "Kannada"
 msgstr "kannada"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "lettone"
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "lituano"
-
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "macedone"
+msgid "Korean"
+msgstr "coreano"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "olandese"
+msgid "Lithuanian"
+msgstr "lituano"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "norvegese"
+msgid "Latvian"
+msgstr "lettone"
 
 #: conf/global_settings.py:79
+msgid "Macedonian"
+msgstr "macedone"
+
+#: conf/global_settings.py:80
+msgid "Dutch"
+msgstr "olandese"
+
+#: conf/global_settings.py:81
+msgid "Norwegian"
+msgstr "norvegese"
+
+#: conf/global_settings.py:82
+msgid "Norwegian Bokmal"
+msgstr "norvegese bokmal"
+
+#: conf/global_settings.py:83
+msgid "Norwegian Nynorsk"
+msgstr "norvegese nynorsk"
+
+#: conf/global_settings.py:84
 msgid "Polish"
 msgstr "polacco"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:85
 msgid "Portuguese"
 msgstr "portoghese"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:86
 msgid "Brazilian Portuguese"
 msgstr "brasiliano portoghese"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:87
 msgid "Romanian"
 msgstr "rumeno"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:88
 msgid "Russian"
 msgstr "russo"
 
-#: conf/global_settings.py:84
-msgid "Slovak"
-msgstr "slovacco"
-
-#: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr "sloveno"
-
-#: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "serbo"
-
-#: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "svedese"
-
-#: conf/global_settings.py:88
-msgid "Tamil"
-msgstr "tamil"
-
 #: conf/global_settings.py:89
-msgid "Telugu"
-msgstr "telugu"
+msgid "Slovak"
+msgstr "slovacco"
 
 #: conf/global_settings.py:90
-msgid "Thai"
-msgstr "tailandese"
+msgid "Slovenian"
+msgstr "sloveno"
 
 #: conf/global_settings.py:91
-msgid "Turkish"
-msgstr "turco"
+msgid "Albanian"
+msgstr "albanese"
 
 #: conf/global_settings.py:92
+msgid "Serbian"
+msgstr "serbo"
+
+#: conf/global_settings.py:93
+msgid "Serbian Latin"
+msgstr "serbo latino"
+
+#: conf/global_settings.py:94
+msgid "Swedish"
+msgstr "svedese"
+
+#: conf/global_settings.py:95
+msgid "Tamil"
+msgstr "tamil"
+
+#: conf/global_settings.py:96
+msgid "Telugu"
+msgstr "telugu"
+
+#: conf/global_settings.py:97
+msgid "Thai"
+msgstr "tailandese"
+
+#: conf/global_settings.py:98
+msgid "Turkish"
+msgstr "turco"
+
+#: conf/global_settings.py:99
 msgid "Ukrainian"
 msgstr "ucraino"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:100
+msgid "Vietnamese"
+msgstr "vietnamita"
+
+#: conf/global_settings.py:101
 msgid "Simplified Chinese"
 msgstr "cinese semplificato"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:102
 msgid "Traditional Chinese"
 msgstr "cinese tradizionale"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Cancellati/e con successo %(count)d %(items)s."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1129
 msgid "Are you sure?"
 msgstr "Sei sicuro?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Cancella %(verbose_name_plural)s selezionati/e"
@@ -268,19 +300,19 @@
 msgid "This year"
 msgstr "Quest'anno"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Sì"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "No"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Sconosciuto"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "Azione:"
 
@@ -312,105 +344,128 @@
 msgid "log entries"
 msgstr "voci di log"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
 msgid "None"
 msgstr "Nessuno"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Changed %s."
 msgstr "%s modificato/a."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:573
 msgid "and"
 msgstr "e"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Aggiunto/a %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Cambiato/i %(list)s per %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:577
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Cancellato/a %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:581
 msgid "No fields changed."
 msgstr "Nessun campo modificato."
 
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
+#: contrib/admin/options.py:647
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "%(name)s \"%(obj)s\" aggiunto/a correttamente."
 
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
 msgid "You may edit it again below."
 msgstr "È possibile modificare nuovamente qui sotto."
 
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
 #, python-format
 msgid "You may add another %s below."
 msgstr "Puoi aggiungere un altro/a %s qui sotto."
 
-#: contrib/admin/options.py:634
+#: contrib/admin/options.py:682
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\" modificato/a correttamente."
 
-#: contrib/admin/options.py:642
+#: contrib/admin/options.py:690
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr ""
 "%(name)s \"%(obj)s\" aggiunto/a correttamente. Puoi modificare ancora qui "
 "sotto."
 
-#: contrib/admin/options.py:773
+#: contrib/admin/options.py:744 contrib/admin/options.py:1001
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Occorre selezionare degli oggetti per potervi eseguire azioni. Nessun "
+"oggetto è stato cambiato."
+
+#: contrib/admin/options.py:763
+msgid "No action selected."
+msgstr "Nessuna azione selezionata."
+
+#: contrib/admin/options.py:844
 #, python-format
 msgid "Add %s"
 msgstr "Aggiungi %s"
 
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
+#: contrib/admin/options.py:870 contrib/admin/options.py:1109
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "L'oggetto %(name)s con chiave primaria %(key)r non esiste."
 
-#: contrib/admin/options.py:861
+#: contrib/admin/options.py:935
 #, python-format
 msgid "Change %s"
 msgstr "Modifica %s"
 
-#: contrib/admin/options.py:905
+#: contrib/admin/options.py:981
 msgid "Database error"
 msgstr "Errore nel database"
 
-#: contrib/admin/options.py:941
+#: contrib/admin/options.py:1043
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s %(name)s modificato/a correttamente."
 msgstr[1] "%(count)s %(name)s modificati/e correttamente."
 
-#: contrib/admin/options.py:1020
+#: contrib/admin/options.py:1070
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s selezionati/e"
+msgstr[1] "Nessuna azione selezionata."
+
+#: contrib/admin/options.py:1075
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 di %(cnt)s selezionati/e"
+
+#: contrib/admin/options.py:1122
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)s \"%(obj)s\" cancellato/a correttamente."
 
-#: contrib/admin/options.py:1057
+#: contrib/admin/options.py:1159
 #, python-format
 msgid "Change history: %s"
 msgstr "Tracciato delle modifiche: %s"
 
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -418,11 +473,11 @@
 "Inserisci nome utente e password corretti. In entrambi i campi le maiuscole "
 "sono significative."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Effettua di nuovo l'accesso, perché la tua sessione è scaduta."
 
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -430,62 +485,52 @@
 "Il browser non sembra configurato per accettare i cookie. Una volta "
 "abilitati, ricarica la pagina e riprova."
 
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "I nomi utente non possono contenere il carattere '@'."
 
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Il nome utente non è costituito dall'indirizzo e-mail. Prova con '%s'."
 
-#: contrib/admin/sites.py:367
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Amministrazione sito"
 
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Accedi"
 
-#: contrib/admin/sites.py:426
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "Amministrazione %s"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Uno o più %(fieldname)s in %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Uno o più %(fieldname)s in %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Data:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Ora:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Attualmente:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Modifica:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Recupero"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Aggiungi un Altro"
 
@@ -500,17 +545,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -537,8 +582,7 @@
 "mail and should be fixed shortly. Thanks for your patience."
 msgstr ""
 "Si è verificato un errore. Gli amministratori del sito ne sono stati "
-"informati"
-"via e-mail e verrà corretto a breve. Grazie per la tua pazienza."
+"informati via e-mail e verrà corretto a breve. Grazie per la tua pazienza."
 
 #: contrib/admin/templates/admin/actions.html:4
 msgid "Run the selected action"
@@ -548,34 +592,47 @@
 msgid "Go"
 msgstr "Vai"
 
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr "Clicca qui per selezionare gli oggetti da tutte le pagine."
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Seleziona tutti/e %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "Annulla la selezione"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:27
+#: contrib/admin/templates/admin/base.html:28
 msgid "Welcome,"
 msgstr "Benvenuto/a,"
 
-#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Documentazione"
 
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Cambia la password"
 
-#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Esci"
 
@@ -587,41 +644,42 @@
 msgid "Django administration"
 msgstr "Amministrazione Django"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Aggiungi"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Storia"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Vedi sul sito"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Correggi l'errore qui sotto."
 msgstr[1] "Correggi gli errori qui sotto."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "Aggiungi %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Filtro"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Cancella"
 
@@ -669,10 +727,10 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
-"Sicuro di voler cancellare i %(object_name)s selezionati? Tutti i seguenti "
-"oggetti, e i loro oggetti collegati, saranno cancellati:"
+"Sicuro di voler cancellare gli oggetti %(object_name)s selezionati? Tutti i "
+"seguenti oggetti, e i loro oggetti collegati, saranno cancellati:"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -735,15 +793,9 @@
 msgstr "Utente"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Azione"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j F Y, H:i"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -789,7 +841,7 @@
 msgid "Save and continue editing"
 msgstr "Salva e continua le modifiche"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -797,33 +849,39 @@
 "Inserisci innanzitutto nome utente e password. Potrai poi modificare le "
 "altre impostazioni dell'utente."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Nome utente"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Password"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Password (di nuovo)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Inserisci la stessa password inserita sopra, come verifica."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Inserisci una nuova password per l'utente <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Password"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Password (di nuovo)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Inserisci la stessa password inserita sopra, come verifica."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Aggiungi un/a altro/a %(verbose_name)s."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Elimina"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Cancellare?"
@@ -837,9 +895,9 @@
 msgstr "Accedi di nuovo"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Cambio password"
 
@@ -852,7 +910,7 @@
 msgid "Your password was changed."
 msgstr "La password è stata cambiata."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -860,21 +918,17 @@
 "Inserisci la password attuale, per ragioni di sicurezza, e poi la nuova "
 "password due volte, per verificare di averla scritta correttamente."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Password attuale:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nuova password:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Conferma la password:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Password attuale"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Nuova password"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Modifica la mia password"
@@ -913,6 +967,14 @@
 "Inserisci la nuova password due volte, per verificare di averla scritta "
 "correttamente."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Nuova password:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Conferma la password:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Password non reimpostata"
@@ -980,7 +1042,7 @@
 msgid "Reset my password"
 msgstr "Reimposta la mia password"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Tutte le date"
 
@@ -994,11 +1056,11 @@
 msgid "Select %s to change"
 msgstr "Scegli %s da modificare"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "sito"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "modello"
 
@@ -1058,89 +1120,7 @@
 msgid "Fields on %s objects"
 msgstr "Campi sugli oggetti %s"
 
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Intero"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Booleano (True o False)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Stringa (fino a %(max_length)s)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Interi separati da virgola"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Data (senza ora)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Data (con ora)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Numero decimale"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "Indirizzo e-mail"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Percorso di file"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Numero decimale"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "indirizzo IP"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleano (True, False o None)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Collegamento a modello padre"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Numero di telefono"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Testo"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Ora"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stato USA (due lettere maiuscole)"
-
 #: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "Testo XML"
-
-#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s non sembra essere un oggetto urlpattern"
@@ -1164,10 +1144,10 @@
 "your computer is \"internal\").</p>\n"
 msgstr ""
 "\n"
-"<p class=\"help\">Per installare i bookmarklet, trascina il link sulla barra "
-"\n"
-"dei bookmark, o clicca il link con il tasto destro e aggiungilo ai bookmark."
-"\n"
+"<p class=\"help\">Per installare i bookmarklet, trascina il link sulla "
+"barra \n"
+"dei bookmark, o clicca il link con il tasto destro e aggiungilo ai "
+"bookmark.\n"
 "Potrai poi scegliere un bookmarklet in qualsiasi pagina del sito.\n"
 "Nota che alcuni di questi bookmarklet richiedono l'accesso al sito tramite "
 "un\n"
@@ -1216,66 +1196,61 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Come sopra, ma apre la pagina di amministrazione in una nuova finestra."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Informazioni personali"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Permessi"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Date importanti"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Gruppi"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Aggiungi utente"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "La password è stata cambiata correttamente."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Cambia la password: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Obbligatorio. 30 caratteri o meno. Solo caratteri alfanumerici (lettere, "
-"cifre e sottolineati)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Questo valore può contenere solo lettere, cifre e sottolineati."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Nome utente"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr "Obbligatorio. 30 caratteri o meno. Solo lettere, cifre e @/./+/-/_ ."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Questo valore può contenere solo lettere, cifre e @/./+/-/_ ."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Conferma password"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Un utente con questo nome è già presente."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "I due campi password non corrispondono."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Questo account non è attivo."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1283,11 +1258,11 @@
 "Il browser web sembra non avere i cookie abilitati. I cookie sono necessari "
 "per poter accedere."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "E-mail"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1295,73 +1270,68 @@
 "Questo indirizzo email non è associato ad alcun account utente. Sei sicuro "
 "di esserti registrato?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Password reimpostata su %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Nuova password"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Conferma nuova password"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Password attuale"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr ""
-"La password attuale non è stata inserita correttamente: va inserita di nuovo."
-
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+msgstr "La password attuale non è stata inserita correttamente: va inserita di nuovo."
+
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "nome"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "nome in codice"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "permesso"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "permessi"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "gruppo"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "gruppi"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "nome utente"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid "Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr "Obbligatorio. 30 caratteri o meno. Solo lettere, cifre e @/./+/-/_"
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "nome"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "cognome"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "indirizzo e-mail"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "password"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1369,19 +1339,19 @@
 "Usa '[algo]$[salt]$[hexdigest]' oppure la <a href=\"password/\">maschera di "
 "cambio password</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "privilegi di staff"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Indica se l'utente può accedere a questo sito di amministrazione."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "attivo"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1389,11 +1359,11 @@
 "Indica se l'utente debba essere considerato attivo. Deseleziona qui, "
 "piuttosto che cancellare gli account."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "privilegi di superutente"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
@@ -1401,15 +1371,15 @@
 "Indica che l'utente ha tutti i privilegi, senza che siano stati assegnati "
 "esplicitamente."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "ultimo accesso"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "iscritto in data"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1417,39 +1387,77 @@
 "In aggiunta ai privilegi assegnati manualmente, l'utente riceverà anche "
 "tutti i privilegi assegnati ad ogni gruppo cui appartiene."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "privilegi utente"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "utente"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "utenti"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "messaggio"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Accesso annullato"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Inserisci un indirizzo e-mail valido."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Contenuto"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metadati"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "segnalato"
+msgstr[1] "segnalati/e"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Segnala i commenti selezionati"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "approvato"
+msgstr[1] "approvati/e"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Approva i commenti selezionati"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "eliminato"
+msgstr[1] "eliminati/e"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Elimina i commenti selezionati"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "Ad 1 commento è stata applicata con successo l'azione %(action)s."
+msgstr[1] "A %(count)s commenti è stata applicata con successo l'azione %(action)s."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1461,7 +1469,6 @@
 msgstr "Commenti più recenti su %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Nome"
 
@@ -1469,23 +1476,27 @@
 msgid "Email address"
 msgstr "Indirizzo email"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Commento"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Modera i termini: la parola %s non è ammessa qui."
 msgstr[1] "Modera i termini: le parole %s non sono ammesse qui."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid "If you enter anything in this field your comment will be treated as spam"
 msgstr "Se inserisci qualcosa in questo campo il tuo commento verrà considerato spam"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "content type"
 
@@ -1514,6 +1525,10 @@
 msgid "date/time submitted"
 msgstr "data/ora di inserimento"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "indirizzo IP"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "è pubblico"
@@ -1594,7 +1609,6 @@
 msgstr "Sicuro di voler pubblicare questo commento?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Approva"
 
@@ -1618,11 +1632,6 @@
 msgid "Really remove this comment?"
 msgstr "Sicuro di voler eliminare questo commento?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Elimina"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Grazie per aver eliminato"
@@ -1653,39 +1662,6 @@
 msgid "Preview"
 msgstr "Anteprima"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Coda di moderazione dei commenti"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Nessun commento da moderare"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Email"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Autenticato?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "Indirizzo IP"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Pubblicato in data"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "sì"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "no"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Grazie per aver commentato"
@@ -1713,11 +1689,11 @@
 msgid "or make changes"
 msgstr "o fai dei cambiamenti"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "nome della classe del modello Python"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "content type"
 
@@ -1781,7 +1757,7 @@
 msgid "flat pages"
 msgstr "pagine statiche"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1789,6 +1765,38 @@
 "Spiacenti, ma la tua form è scaduta. Puoi continuare a compilare la form da "
 "questa pagina."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr "Il campo base GIS -- corrisponde al tipo Geometry delle specifiche OpenGIS."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Punto"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Stringa linea"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Poligono"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Multipunto"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Stringa multilinea"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Multi poligono"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Raccolta Geometry"
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Nessun valore geometrico fornito."
@@ -1894,25 +1902,25 @@
 msgid "yesterday"
 msgstr "ieri"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Inserisci un codice postale nel formato NNNN o ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Questo campo può contenere solo numeri."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Questo campo richiede 7 o 8 cifre."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Inserisci un CUIT valido nel formato XX-XXXXXXXX-X o XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "CUIT non valido."
 
@@ -1952,8 +1960,8 @@
 msgid "Vienna"
 msgstr "Vienna"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Inserisci un codice postale nel formato XXXXX ."
 
@@ -1963,19 +1971,19 @@
 "Inserisci un Numero di Assistenza Sociale Austriaco valido, nel formato XXXX "
 "XXXXXX."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Inserisci un codice postale di 4 cifre."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Inserisci un codice postale nel formato XXXXX-XXX ."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "I numeri di telefono devono essere in formato XX-XXXX-XXXX ."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
@@ -1983,27 +1991,27 @@
 "Scegliere uno stato brasiliano valido. Questo stato non è uno di quelli "
 "disponibili."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Numero CPF non valido."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Questo campo richiede non più di 11 cifre, o 14 caratteri."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Numero CNPJ non valido."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "Questo campo richiede almeno 14 cifre"
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Inserisci un codice postale nel formato XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr ""
 "Inserisci un numero di assicurazione sociale canadese valido, nel formato "
@@ -2113,7 +2121,7 @@
 msgid "Zurich"
 msgstr "Zurigo"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2121,15 +2129,15 @@
 "Inserisci un numero di carta d'identità o passaporto svizzeri validi, in "
 "formato X1234567<0 o 1234567890 ."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Inserisci un RUT cileno valido."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Inserisci un RUT cileno valido. Il formato è XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "Il RUT cileno non è valido."
 
@@ -2189,23 +2197,23 @@
 msgid "Moravian-Silesian Region"
 msgstr "Regione della Moravia-Silesia"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Inserisci un codice postale nel formato XXXXX o XXX XX ."
 
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Inserisci un numero di nascita nel formato XXXXXX/XXXX o XXXXXXXXXX."
-
 #: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Parametro opzionale 'Sesso' non valido, i valori validi sono 'f' ed 'm'"
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Inserisci un numero di nascita nel formato XXXXXX/XXXX o XXXXXXXXXX."
 
 #: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr "Parametro opzionale 'Sesso' non valido, i valori validi sono 'f' ed 'm'"
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Inserisci un numero di nascita valido."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Inserisci un numero di IC valido."
 
@@ -2273,12 +2281,12 @@
 msgid "Thuringia"
 msgstr "Turingia"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Inserisci un codice postale nel formato XXXXX ."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2553,11 +2561,11 @@
 msgid "Valencian Community"
 msgstr "Comunità di Valenza"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Inserisci un codice postale valido nell'intervallo e formato 01XXX - 52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
@@ -2565,63 +2573,495 @@
 "Inserisci un numero telefonico valido in uno dei formati 6XXXXXXXX, "
 "8XXXXXXXX o 9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Inserisci un NIF, NIE, o CIF valido."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Inserisci un NIF o NIE valido."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Checksum non valido per il NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Checksum non valido per il NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Checksum non valido per il CIF."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr ""
 "Inserisci un numero di conto corrente bancario valido nel formato XXXX-XXXX-"
 "XX-XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Checksum non valido per il numero di conto corrente bancario."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Inserisci un numero di assistenza sociale finlandese valido."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "I numeri di telefono devono essere in formato 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Inserisci un codice postale valido"
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Inserisci un numero telefonico valido"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Inserisci una targa automobilistica valida"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Inserisci un numero NIK/KTP valido"
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Bali"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Banten"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Bengkulu"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Yogyakarta"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Giacarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Gorontalo"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Jambi"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Jawa Barat"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Jawa Tengah"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Jawa Timur"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Kalimantan Barat"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Kalimantan Selatan"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Kalimantan Tengah"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Kalimantan Timur"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Kepulauan Bangka-Belitung"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Kepulauan Riau"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Lampung"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Maluku"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Maluku Utara"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Nanggroe Aceh Darussalam"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Nusa Tenggara Barat"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Nusa Tenggara Timur"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Papua"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Riau"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "Sulawesi Barat"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "Sulawesi Selatan"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "Sulawesi Tengah"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "Sulawesi Tenggara"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "Sulawesi Utara"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "Sumatera Barat"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "Sumatera Selatan"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "Sumatera Utara"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "Magelang"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "Surakarta - Solo"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "Madiun"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "Kediri"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "Tapanuli"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "Kepulauan Bangka Belitung"
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr "Corpi Consolari"
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr "Corpi Diplomatici"
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "Bandung"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr "Sulawesi Utara Daratan"
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - Timor"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr "Sulawesi Utara Kepulauan"
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - Lombok"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "Papua dan Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "Cirebon"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - Sumbawa"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - Flores"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - Sumba"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "Bogor"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "Pekalongan"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "Semarang"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "Pati"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "Surabaya"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "Madura"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "Malang"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "Jember"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "Banyumas"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "Governo Federale"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "Bojonegoro"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "Purwakarta"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "Sidoarjo"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "Garut"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "Armagh"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "Carlow"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "Cavan"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "Clare"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "Cork"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "Derry"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "Donegal"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "Down"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Dublino"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "Galway"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "Kerry"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "Kildare"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "Kilkenny"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "Laois"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "Leitrim"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "Limerick"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "Longford"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "Louth"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Mayo"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "Meath"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "Monaghan"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "Offaly"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "Roscommon"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "Sligo"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "Tipperary"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "Tyrone"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "Waterford"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "Westmeath"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "Wexford"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "Wicklow"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Inserisci un codice postale nel formato XXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr ""
 "Inserisci un numero di identificazione islandese valido. Il formato è XXXXXX-"
 "XXXX ."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "Il numero di identificazione islandese non è valido."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Inserisci un codice postale valido."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Inserisci un numero di codice fiscale valido."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Inserisci una partita IVA valida."
 
@@ -2817,6 +3257,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Inserisci un numero civile ID kuwaitiano valido"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2945,15 +3389,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Inserisci un codice postale valido"
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Inserisci un numero telefonico valido"
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Inserisci un numero SoFi valido"
 
@@ -3005,15 +3445,15 @@
 msgid "Zuid-Holland"
 msgstr "Zuid-Holland"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Inserisci un numero di assistenza sociale norvegese valido."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Questo campo richiede 8 cifre."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Questo campo richiede 11 cifre."
 
@@ -3113,6 +3553,14 @@
 msgid "West Pomerania"
 msgstr "Pomerania Ovest"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Inserisci un codice postale nel formato XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "I numeri di telefono devono avere 9 cifre, o iniziare con + o 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Inserisci un codice CIF valido."
@@ -3133,6 +3581,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Inserisci un codice postale valido nel formato XXXXXX."
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Inserisci un numero di organizzazione svedese valido."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Inserisci un numero d'identità personale svedese valido."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "I numeri di coordinamento non sono ammessi."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Inserisci un codice postale svedese nel formato XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Stoccolma"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Banska Bystrica"
@@ -3765,21 +4313,45 @@
 msgid "Wales"
 msgstr "Galles"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Inserisci un codice postale nel formato XXXXX o XXXXX-XXXX ."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "I numeri di telefono devono essere in formato XXX-XXX-XXXX ."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr ""
-"Inserisci un numero di assistenza sociale USA valido, nel formato "
-"XXX-XX-XXXX ."
-
-#: contrib/localflavor/za/forms.py:20
+"Inserisci un numero di assistenza sociale USA valido, nel formato XXX-XX-"
+"XXXX ."
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Inserisci uno stato o territorio USA."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Stato USA (due lettere maiuscole)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Numero di telefono"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "Inserisci un numero CI valido nel formato X.XXX.XXX-X, XXXXXXX-X o XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Inserisci un numero CI valido."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Inserisci un numero ID sudafricano valido"
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Inserisci un codice postale sudafricano valido"
 
@@ -3819,6 +4391,10 @@
 msgid "Western Cape"
 msgstr "Capo Ovest"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "messaggio lazy"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "redirezione da"
@@ -3883,262 +4459,360 @@
 msgid "sites"
 msgstr "siti"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Questo valore deve essere un intero."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Questo valore deve essere True o False."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Inserisci un valore valido."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Inserisci una URL valida."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Questa URL non sembra funzionare."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Inserisci uno 'slug' valido contenente lettere, cifre, sottolineati o "
+"trattini."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Inserisci un indirizzo IPv4 valido."
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Inserisci solo cifre separate da virgole."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Assicurarsi che questo valore sia %(limit_value)s (ora è %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Assicurarsi che questo valore sia minore o uguale a %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Assicurarsi che questo valore sia maggiore o uguale a %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr "Assicurarsi che questo valore contenga almeno %(limit_value)d caratteri (ne ha %(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr "Assicurarsi che questo valore non contenga più di %(limit_value)d caratteri (ne ha %(show_value)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s deve essere unico per %(lookup)s %(date_field)s."
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s con questo %(field_label)s esiste già."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Il valore %r non è una scelta valida."
+
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Questo campo non può essere nullo."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Inserisci solo cifre separate da virgole."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Questo campo non può essere vuoto."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Campo di tipo: %(field_type)s"
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Intero"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+msgid "This value must be an integer."
+msgstr "Questo valore deve essere un intero."
+
+#: db/models/fields/__init__.py:490
+msgid "This value must be either True or False."
+msgstr "Questo valore deve essere True o False."
+
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Booleano (True o False)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Stringa (fino a %(max_length)s)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Interi separati da virgola"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Data (senza ora)"
+
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Inserisci una data valida in formato AAAA-MM-GG."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Data non valida: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr "Inserisci una data/ora valida nel formato AAAA-MM-GG OO:MM[ss[.uuuuuu]]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Data (con ora)"
+
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "Questo valore deve essere un numero decimale."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Numero decimale"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "Indirizzo e-mail"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Percorso di file"
+
+#: db/models/fields/__init__.py:822
 msgid "This value must be a float."
 msgstr "Questo valore deve essere un numero a virgola mobile."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "Numero decimale"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Intero grande (8 byte)"
+
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr "Questo valore deve essere None, True o False."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Booleano (True, False o None)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Testo"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Ora"
+
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Inserisci un'ora valida nel formato OO:MM[ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "Testo XML"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Il modello %(model)s con chiave primaria %(pk)r non esiste."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Foreign Key (tipo determinato dal campo collegato)"
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr "Relazione uno a uno"
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr "Relazione molti a molti"
+
+#: db/models/fields/related.py:1000
 msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Tieni premuto \"Control\", o \"Command\" su Mac, per selezionarne più di uno."
-
-#: db/models/fields/related.py:894
+msgstr "Tieni premuto \"Control\", o \"Command\" su Mac, per selezionarne più di uno."
+
+#: db/models/fields/related.py:1061
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
 msgstr[0] "Inserisci un ID valido per %(self)s. Il valore %(value)r non è valido."
 msgstr[1] "Inserisci ID validi per %(self)s. I valori %(value)r non sono validi."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Questo campo è obbligatorio."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Inserisci un valore valido."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Assicurarsi che questo valore non contenga più di %(max)d caratteri (ne ha %"
-"(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Assicurarsi che questo valore contenga almeno %(min)d caratteri (ne ha %"
-"(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Inserisci un numero intero."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Assicurarsi che questo valore sia minore o uguale a %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Assicurarsi che questo valore sia maggiore o uguale a %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Inserisci un numero."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Assicurarsi che non vi siano più di %s cifre in totale."
 
-#: forms/fields.py:228
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Assicurarsi che non vi siano più di %s cifre decimali."
 
-#: forms/fields.py:229
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Assicurarsi che non vi siano più di %s cifre prima della virgola."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Inserisci una data valida."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Inserisci un'ora valida."
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Inserisci una coppia data/ora valida."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "Non è stato inviato alcun file. Verifica il tipo di codifica della form."
 
-#: forms/fields.py:448
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Nessun file è stato inviato."
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Il file inviato è vuoto."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
 msgid "Ensure this filename has at most %(max)d characters (it has %(length)d)."
 msgstr ""
 "Assicurarsi che questo nome di file non contenga più di %(max)d caratteri "
 "(ne ha %(length)d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
 msgstr "Carica un'immagine valida. Il file caricato non è un'immagine o è corrotto."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Inserisci una URL valida."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Questa URL non sembra funzionare."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Scegli un'opzione valida. '%(value)s non compare tra quelle disponibili."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
 msgid "Enter a list of values."
 msgstr "Inserisci una lista di valori."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Inserisci un indirizzo IPv4 valido."
-
-#: forms/fields.py:902
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Inserisci uno 'slug' valido contenente lettere, cifre, sottolineati o "
-"trattini."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Ordine"
 
-#: forms/models.py:367
+#: forms/models.py:567
 #, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s deve essere unico per %(lookup)s %(date_field)s."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s con questo %(field_label)s esiste già."
-
-#: forms/models.py:594, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Correggi i dati duplicati di %(field)s."
 
-#: forms/models.py:598
+#: forms/models.py:571
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr "Correggi i dati duplicati di %(field)s, che deve essere unico."
 
-#: forms/models.py:604
+#: forms/models.py:577
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
 "for the %(lookup)s in %(date_field)s."
 msgstr ""
-"Correggi i dati duplicati di %(field_name)s che deve essere unico/a per %(lookup)s "
-"in %(date_field)s."
-
-#: forms/models.py:612
+"Correggi i dati duplicati di %(field_name)s che deve essere unico/a per %"
+"(lookup)s in %(date_field)s."
+
+#: forms/models.py:585
 msgid "Please correct the duplicate values below."
 msgstr "Correggi i dati duplicati qui sotto."
 
-#: forms/models.py:867
+#: forms/models.py:860
 msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"La foreign key inline non concorda con la chiave primaria dell'istanza "
-"padre."
-
-#: forms/models.py:930
+msgstr "La foreign key inline non concorda con la chiave primaria dell'istanza padre."
+
+#: forms/models.py:926
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr ""
 "Scegli un'opzione valida. La scelta effettuata non compare tra quelle "
 "disponibili."
 
-#: forms/models.py:1004
+#: forms/models.py:1008
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Scegli un'opzione valida. %s non compare tra quelle disponibili."
 
-#: forms/models.py:1006
+#: forms/models.py:1010
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" non è un valore valido per una chiave primaria."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "sì,no,forse"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d byte"
 msgstr[1] "%(size)d byte"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4347,7 +5021,7 @@
 msgid "Dec."
 msgstr "dic."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "o"
 
@@ -4401,33 +5075,37 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:518
 msgid "DATE_FORMAT"
 msgstr "j F Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:519
+msgid "DATETIME_FORMAT"
+msgstr "j F Y, H:i"
+
+#: utils/translation/trans_real.py:520
 msgid "TIME_FORMAT"
 msgstr "H:i"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:541
 msgid "YEAR_MONTH_FORMAT"
 msgstr "Y F"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:542
 msgid "MONTH_DAY_FORMAT"
 msgstr "F j"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "%(verbose_name)s creato/a correttamente."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "%(verbose_name)s aggiornato/a correttamente."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s cancellato/a."
Binary file web/lib/django/conf/locale/it/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/it/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/it/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -6,15 +6,15 @@
 msgstr ""
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-10 08:26+0200\n"
-"PO-Revision-Date: 2009-07-26 17:51+0200\n"
+"POT-Creation-Date: 2009-12-26 16:15+0100\n"
+"PO-Revision-Date: 2009-12-26 16:50+0100\n"
 "Last-Translator: Nicola Larosa <nico@tekNico.net>\n"
 "Language-Team: Italian <django-it@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms:  nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 0.3\n"
+"X-Generator: KBabel 1.11.4\n"
 
 #: contrib/admin/media/js/SelectFilter2.js:33
 #, perl-format
@@ -31,7 +31,7 @@
 
 #: contrib/admin/media/js/SelectFilter2.js:48
 msgid "Remove"
-msgstr "Rimuovi"
+msgstr "Elimina"
 
 #: contrib/admin/media/js/SelectFilter2.js:53
 #, perl-format
@@ -59,6 +59,10 @@
 msgid "S M T W T F S"
 msgstr "D L M M G V S"
 
+#: contrib/admin/media/js/calendar.js:26
+msgid "FIRST_DAY_OF_WEEK"
+msgstr "1"
+
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
 msgstr "domenica lunedì martedì mercoledì giovedì venerdì sabato"
@@ -118,4 +122,3 @@
 #: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
 msgid "Tomorrow"
 msgstr "Domani"
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/it/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,41 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'd F Y' # 25 Ottobre 2006
+TIME_FORMAT = 'H:i:s' # 14:30:59
+DATETIME_FORMAT = 'l d F Y H:i:s' # Mercoledì 25 Ottobre 2006 14:30:59
+YEAR_MONTH_FORMAT = 'F Y' # Ottobre 2006
+MONTH_DAY_FORMAT = 'j/F' # 10/2006
+SHORT_DATE_FORMAT = 'd/M/Y' # 25/12/2009
+SHORT_DATETIME_FORMAT = 'd/M/Y H:i:s' # 25/10/2009 14:30:59
+FIRST_DAY_OF_WEEK = 1 # Lunedì
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%Y/%m/%d',  # '2008-10-25', '2008/10/25'
+    '%d-%m-%Y', '%d/%m/%Y',  # '25-10-2006', '25/10/2006'
+    '%d-%m-%y', '%d/%m/%y',  # '25-10-06', '25/10/06'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',        # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+    '%d-%m-%Y %H:%M:%S',     # '25-10-2006 14:30:59'
+    '%d-%m-%Y %H:%M',        # '25-10-2006 14:30'
+    '%d-%m-%Y',              # '25-10-2006'
+    '%d-%m-%y %H:%M:%S',     # '25-10-06 14:30:59'
+    '%d-%m-%y %H:%M',        # '25-10-06 14:30'
+    '%d-%m-%y',              # '25-10-06'
+    '%d/%m/%Y %H:%M:%S',     # '25/10/2006 14:30:59'
+    '%d/%m/%Y %H:%M',        # '25/10/2006 14:30'
+    '%d/%m/%Y',              # '25/10/2006'
+    '%d/%m/%y %H:%M:%S',     # '25/10/06 14:30:59'
+    '%d/%m/%y %H:%M',        # '25/10/06 14:30'
+    '%d/%m/%y',              # '25/10/06'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/ja/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/ja/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/ja/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -1282,7 +1282,7 @@
 #: contrib/auth/forms.py:135
 #, python-format
 msgid "Password reset on %s"
-msgstr "%s にパスワードをリセット"
+msgstr "%s のパスワードのリセット"
 
 #: contrib/auth/forms.py:143
 msgid "New password"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/ja/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'Y年n月j日'
+TIME_FORMAT = 'G:i:s'
+DATETIME_FORMAT = 'Y年n月j日G:i:s'
+YEAR_MONTH_FORMAT = 'Y年n月'
+MONTH_DAY_FORMAT = 'n月j日'
+SHORT_DATE_FORMAT = 'Y/m/d'
+SHORT_DATETIME_FORMAT = 'Y/m/d G:i:s'
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/ka/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,42 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'l, j F, Y'
+TIME_FORMAT = 'h:i:s a'
+DATETIME_FORMAT = 'j F, Y h:i:s a'
+YEAR_MONTH_FORMAT = 'F, Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j.M.Y'
+SHORT_DATETIME_FORMAT = 'j.M.Y H:i:s'
+FIRST_DAY_OF_WEEK = 1 # (Monday)
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y',     # '2006-10-25', '10/25/2006', '10/25/06'
+    # '%d %b %Y', '%d %b, %Y', '%d %b. %Y',   # '25 Oct 2006', '25 Oct, 2006', '25 Oct. 2006'
+    # '%d %B %Y', '%d %B, %Y',                # '25 October 2006', '25 October, 2006'
+    # '%d.%m.%Y', '%d.%m.%y',                 # '25.10.2006', '25.10.06'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',        # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
+    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
+    '%d.%m.%Y',              # '25.10.2006'
+    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
+    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
+    '%d.%m.%y',              # '25.10.06'
+    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
+    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
+    '%m/%d/%Y',              # '10/25/2006'
+    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
+    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
+    '%m/%d/%y',              # '10/25/06'
+)
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = " "
+NUMBER_GROUPING = 3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/km/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j ខែ F ឆ្នាំ Y'
+TIME_FORMAT = 'G:i:s'
+DATETIME_FORMAT = 'j ខែ F ឆ្នាំ Y, G:i:s'
+# YEAR_MONTH_FORMAT = 
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j M Y'
+SHORT_DATETIME_FORMAT = 'j M Y, G:i:s'
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/kn/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'h:i:s A'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j M Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+# DECIMAL_SEPARATOR = 
+# THOUSAND_SEPARATOR = 
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/ko/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,44 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'Y년 n월 j일'
+TIME_FORMAT = 'A g:i:s'
+DATETIME_FORMAT = 'Y년 n월 j일 g:i:s A'
+YEAR_MONTH_FORMAT = 'Y년 F월'
+MONTH_DAY_FORMAT = 'F월 j일'
+SHORT_DATE_FORMAT = 'Y-n-j.'
+SHORT_DATETIME_FORMAT = 'Y-n-j H:i'
+# FIRST_DAY_OF_WEEK =
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
+    # '%b %d %Y', '%b %d, %Y',            # 'Oct 25 2006', 'Oct 25, 2006'
+    # '%d %b %Y', '%d %b, %Y',            # '25 Oct 2006', '25 Oct, 2006'
+    # '%B %d %Y', '%B %d, %Y',            # 'October 25 2006', 'October 25, 2006'
+    # '%d %B %Y', '%d %B, %Y',            # '25 October 2006', '25 October, 2006'
+    '%Y년 %m월 %d일',                   # '2006년 10월 25일', with localized suffix.
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',        # '14:30'
+    '%H시 %M분 %S초',   # '14시 30분 59초'
+    '%H시 %M분',        # '14시 30분'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
+    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
+    '%m/%d/%Y',              # '10/25/2006'
+    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
+    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
+    '%m/%d/%y',              # '10/25/06'
+
+    '%Y년 %m월 %d일 %H시 %M분 %S초',  # '2006년 10월 25일 14시 30분 59초'
+    '%Y년 %m월 %d일 %H시 %M분',       # '2006년 10월 25일 14시 30분'
+)
+
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+NUMBER_GROUPING = 3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/lt/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = r'Y \m. F j \d.'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+# MONTH_DAY_FORMAT = 
+SHORT_DATE_FORMAT = 'Y.m.d'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/lv/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = r'Y. \g\a\d\a j. F'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = r'Y. \g. F'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = r'Y. \g\a\d\a j. M'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/mk/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/mk/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/mk/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -3,8 +3,8 @@
 msgstr ""
 "Project-Id-Version: django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-24 21:56+0200\n"
-"PO-Revision-Date: 2008-09-03 11:20+0200\n"
+"POT-Creation-Date: 2010-05-01 21:49+0200\n"
+"PO-Revision-Date: 2010-04-05 15:53+0100\n"
 "Last-Translator: Vasil Vangelovski <vvangelovski@gmail.com>\n"
 "Language-Team: Macedonian <ossm-members@hedona.on.net.mk>\n"
 "MIME-Version: 1.0\n"
@@ -18,215 +18,247 @@
 msgstr "Арапски"
 
 #: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "Бенгалски"
+msgid "Bulgarian"
+msgstr "Бугарски"
 
 #: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Бугарски"
+msgid "Bengali"
+msgstr "Бенгалски"
 
 #: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr "Босански"
+
+#: conf/global_settings.py:48
 msgid "Catalan"
 msgstr "Каталански"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "Чешки"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:50
 msgid "Welsh"
 msgstr "Велшки"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:51
 msgid "Danish"
 msgstr "Дански"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "Германски"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "Грчки"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "Англиски"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
+msgid "British English"
+msgstr "Британскиот англиски"
+
+#: conf/global_settings.py:56
 msgid "Spanish"
 msgstr "Шпански"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Естонски"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "Аргентиско шпански"
-
 #: conf/global_settings.py:57
-msgid "Basque"
-msgstr "Баскиски"
+msgid "Argentinean Spanish"
+msgstr "Аргентиско шпански"
 
 #: conf/global_settings.py:58
+msgid "Estonian"
+msgstr "Естонски"
+
+#: conf/global_settings.py:59
+msgid "Basque"
+msgstr "Баскиски"
+
+#: conf/global_settings.py:60
 msgid "Persian"
 msgstr "Персиски"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:61
 msgid "Finnish"
 msgstr "Фински"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:62
 msgid "French"
 msgstr "Француски"
 
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Ирски"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Галски"
-
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Унгарски"
+msgid "Frisian"
+msgstr "Фризиски"
 
 #: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "Еврејски"
+msgid "Irish"
+msgstr "Ирски"
 
 #: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "Хинди"
+msgid "Galician"
+msgstr "Галски"
 
 #: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "Хрватски"
+msgid "Hebrew"
+msgstr "Еврејски"
 
 #: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "Исландски"
+msgid "Hindi"
+msgstr "Хинди"
 
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "Италијански"
+msgid "Croatian"
+msgstr "Хрватски"
 
 #: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "Јапонски"
+msgid "Hungarian"
+msgstr "Унгарски"
 
 #: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "Грузиски"
+msgid "Icelandic"
+msgstr "Исландски"
 
 #: conf/global_settings.py:71
-msgid "Korean"
-msgstr "Корејски"
+msgid "Italian"
+msgstr "Италијански"
 
 #: conf/global_settings.py:72
+msgid "Japanese"
+msgstr "Јапонски"
+
+#: conf/global_settings.py:73
+msgid "Georgian"
+msgstr "Грузиски"
+
+#: conf/global_settings.py:74
 msgid "Khmer"
 msgstr "Кмер"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:75
 msgid "Kannada"
 msgstr "Канада"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "Латвиски"
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "Литвански"
-
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "Македонски"
+msgid "Korean"
+msgstr "Корејски"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "Холандски"
+msgid "Lithuanian"
+msgstr "Литвански"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "Норвешки"
+msgid "Latvian"
+msgstr "Латвиски"
 
 #: conf/global_settings.py:79
+msgid "Macedonian"
+msgstr "Македонски"
+
+#: conf/global_settings.py:80
+msgid "Dutch"
+msgstr "Холандски"
+
+#: conf/global_settings.py:81
+msgid "Norwegian"
+msgstr "Норвешки"
+
+#: conf/global_settings.py:82
+msgid "Norwegian Bokmal"
+msgstr "Норвешка bokmål"
+
+#: conf/global_settings.py:83
+msgid "Norwegian Nynorsk"
+msgstr "Норвешки Нинорск"
+
+#: conf/global_settings.py:84
 msgid "Polish"
 msgstr "Полски"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:85
 msgid "Portuguese"
 msgstr "Португалкски"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:86
 msgid "Brazilian Portuguese"
 msgstr "Бразилско португалски"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:87
 msgid "Romanian"
 msgstr "Романски"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:88
 msgid "Russian"
 msgstr "Руски"
 
-#: conf/global_settings.py:84
-msgid "Slovak"
-msgstr "Словачки"
-
-#: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr "Словенечки"
-
-#: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "Српски"
-
-#: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "Шведски"
-
-#: conf/global_settings.py:88
-msgid "Tamil"
-msgstr "Тамил"
-
 #: conf/global_settings.py:89
-msgid "Telugu"
-msgstr "Телугу"
+msgid "Slovak"
+msgstr "Словачки"
 
 #: conf/global_settings.py:90
-msgid "Thai"
-msgstr "Тајландски"
+msgid "Slovenian"
+msgstr "Словенечки"
 
 #: conf/global_settings.py:91
-msgid "Turkish"
-msgstr "Турски"
+msgid "Albanian"
+msgstr "Албански"
 
 #: conf/global_settings.py:92
+msgid "Serbian"
+msgstr "Српски"
+
+#: conf/global_settings.py:93
+msgid "Serbian Latin"
+msgstr "Српски Латиница"
+
+#: conf/global_settings.py:94
+msgid "Swedish"
+msgstr "Шведски"
+
+#: conf/global_settings.py:95
+msgid "Tamil"
+msgstr "Тамил"
+
+#: conf/global_settings.py:96
+msgid "Telugu"
+msgstr "Телугу"
+
+#: conf/global_settings.py:97
+msgid "Thai"
+msgstr "Тајландски"
+
+#: conf/global_settings.py:98
+msgid "Turkish"
+msgstr "Турски"
+
+#: conf/global_settings.py:99
 msgid "Ukrainian"
 msgstr "Украински"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:100
+msgid "Vietnamese"
+msgstr "Виетнамски"
+
+#: conf/global_settings.py:101
 msgid "Simplified Chinese"
 msgstr "Упростен кинески"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:102
 msgid "Traditional Chinese"
 msgstr "Традиционален кинески"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Успешно беа избришани %(count)d %(items)s."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
 msgid "Are you sure?"
 msgstr "Сигурни сте?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Избриши ги избраните %(verbose_name_plural)s"
@@ -265,19 +297,19 @@
 msgid "This year"
 msgstr "Оваа година"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Да"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "Не"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Непознато"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "Акција:"
 
@@ -309,61 +341,60 @@
 msgid "log entries"
 msgstr "ставки во записникот"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
 msgid "None"
 msgstr "Ништо"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Changed %s."
 msgstr "Изменета %s."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:573
 msgid "and"
 msgstr "и"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Додадено %(name)s „%(object)s“."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
-msgstr " Изменето %(list)s за %(name)s „%(object)s“."
-
-#: contrib/admin/options.py:533
+msgstr "Изменето %(list)s за %(name)s „%(object)s“."
+
+#: contrib/admin/options.py:577
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Избришан  %(name)s „%(object)s“."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:581
 msgid "No fields changed."
 msgstr "Не беше изменето ниедно поле."
 
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
+#: contrib/admin/options.py:647
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "Ставката %(name)s \"%(obj)s\" беше успешно додадена."
 
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
 msgid "You may edit it again below."
 msgstr "Подолу можете повторно да го уредите."
 
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
 #, python-format
 msgid "You may add another %s below."
 msgstr "Подолу можете да додате уште еден %s."
 
-#: contrib/admin/options.py:634
+#: contrib/admin/options.py:682
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\" беше успешно изменета."
 
-#: contrib/admin/options.py:642
+#: contrib/admin/options.py:690
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -371,44 +402,68 @@
 "Ставката %(name)s \"%(obj)s\" беше успешно додадена. Подолу можете повторно "
 "да ја уредите."
 
-#: contrib/admin/options.py:773
+#: contrib/admin/options.py:744
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Мора да се одберат предмети за да се изврши акција врз нив. Ниеден предмет "
+"не беше променет."
+
+#: contrib/admin/options.py:762
+msgid "No action selected."
+msgstr "Ниедна акција не е одбрана."
+
+#: contrib/admin/options.py:842
 #, python-format
 msgid "Add %s"
 msgstr "Додади %s"
 
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
+#: contrib/admin/options.py:868 contrib/admin/options.py:1080
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "објект %(name)s со примарен клуч %(key)r не постои."
 
-#: contrib/admin/options.py:861
+#: contrib/admin/options.py:933
 #, python-format
 msgid "Change %s"
 msgstr "Измени %s"
 
-#: contrib/admin/options.py:905
+#: contrib/admin/options.py:978
 msgid "Database error"
 msgstr "Грешка во базата на податоци"
 
-#: contrib/admin/options.py:941
+#: contrib/admin/options.py:1014
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s ставка %(name)s беше успешно изменета."
 msgstr[1] "%(count)s ставки %(name)s беа успешно изменети."
 
-#: contrib/admin/options.py:1020
+#: contrib/admin/options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s одбран"
+msgstr[1] "Сите %(total_count)s одбрани"
+
+#: contrib/admin/options.py:1046
+#, fuzzy, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "од одбраниот %(count)d"
+
+#: contrib/admin/options.py:1093
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "Ставаката %(name)s \"%(obj)s\" беше избришана успешно."
 
-#: contrib/admin/options.py:1057
+#: contrib/admin/options.py:1130
 #, python-format
 msgid "Change history: %s"
 msgstr "Историја на измени: %s"
 
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -416,11 +471,11 @@
 "Ве молам внесете точно корисничко име и лозинка. Имајте на ум дека и во "
 "двете полиња се битни големите и малите букви."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Ве молам најавете се повторно бидејќи вашата сесија е истечена."
 
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -428,62 +483,52 @@
 "Изгледа дека вашиот прелистувач не е конфигуриран да прифаќа колачиња. Ве "
 "молам овозможете ги колачињата, превчитајте ја страта и пробајте повторно."
 
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Корисничките имиња неможе да го содржат „@“ знакот."
 
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Вашата е-пошта не е вашето корисничко име. Пробајте со „%s“."
 
-#: contrib/admin/sites.py:367
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Администрација на сајт"
 
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Најава"
 
-#: contrib/admin/sites.py:426
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "%s администрација"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Еден или повеќе %(fieldname)s во %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Еден или повеќе %(fieldname)s во %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Датум:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Време:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Моментално:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Измена:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Побарај"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Додади друго"
 
@@ -498,17 +543,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -545,34 +590,47 @@
 msgid "Go"
 msgstr "Оди"
 
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr "Кликнете тука за да изберете објекти низ повеќе страници"
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Избери ги сите %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "Откажи го изборот"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:27
+#: contrib/admin/templates/admin/base.html:28
 msgid "Welcome,"
 msgstr "Добредојдовте,"
 
-#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Документација"
 
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Промени лозинка"
 
-#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Одјава"
 
@@ -584,41 +642,42 @@
 msgid "Django administration"
 msgstr "Џанго администрација"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Додади"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Историја"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Погледни на сајтот"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Ве молам поправете ја грешката подолу."
 msgstr[1] "Ве молам поправете ги грешките подолу."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "Додади %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Филтер"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Избриши"
 
@@ -652,23 +711,24 @@
 msgstr "Избриши повеќе ставки"
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
 msgid ""
 "Deleting the %(object_name)s would result in deleting related objects, but "
 "your account doesn't have permission to delete the following types of "
 "objects:"
 msgstr ""
-"Бришење на %(object_name)s би резултирало со бришење на "
-"поврзаните објекти, но вие како корисник немате доволно привилегии да ги "
-"бришете следните типови на објекти:"
+"Бришење на %(object_name)s би резултирало со бришење на поврзаните објекти, "
+"но вие како корисник немате доволно привилегии да ги бришете следните типови "
+"на објекти:"
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:22
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
 "Сигурне сте дека сакате да ги избришете избраните %(object_name)s? Сите овие "
-"ставки и ставките поврзани со нив ќе бидат избришани:"
+"објекти и објектите поврзани со нив ќе бидат избришани:"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -731,15 +791,9 @@
 msgstr "Корисник"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Акција"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j M Y, P"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -785,7 +839,7 @@
 msgid "Save and continue editing"
 msgstr "Сними и продолжи со уредување"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -793,33 +847,39 @@
 "Прво, внесете корисничко име и лозинка. Потоа ќе можете да уредувате повеќе "
 "кориснички опции."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Корисник"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Лозинка"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Лозинка (повторно)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Заради верификација внесете ја истата лозинка како и горе."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Внесете нова лозинка за корисникот <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Лозинка"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Лозинка (повторно)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Заради верификација внесете ја истата лозинка како и горе."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Додадете уште %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Отстрани"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Избриши?"
@@ -834,9 +894,9 @@
 msgstr "Најавете се повторно"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Измена на лозинка"
 
@@ -849,7 +909,7 @@
 msgid "Your password was changed."
 msgstr "Вашата лозинка беше сменета."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -857,21 +917,17 @@
 "Заради сигурност ве молам внесете ја вашата стара лозинка и потоа внесете ја "
 "новата двапати за да може да се потврди дека правилно сте ја искуцале."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Стара лозинка:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Нова лозинка:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Потврди лозинка:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Стара лозинка"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Нова лозинка"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Промени ја мојата лозинка"
@@ -910,6 +966,14 @@
 "Ве молам внесете ја вашата нова лозинка двапати за да може да бидете сигурни "
 "дека правилно сте ја внеле."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Нова лозинка:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Потврди лозинка:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Неуспеа ресетирањето на лозинката"
@@ -978,7 +1042,7 @@
 msgid "Reset my password"
 msgstr "Ресетирај ја мојата лозинка"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Сите датуми"
 
@@ -992,11 +1056,11 @@
 msgid "Select %s to change"
 msgstr "Изберете %s за измена"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "сајт"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "шаблон"
 
@@ -1056,89 +1120,7 @@
 msgid "Fields on %s objects"
 msgstr "Полиња на %s објекти"
 
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Цел број"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Логичка (или точно или неточно)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Збор (до %(max_length)s)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Целобројни вредности одделени со запирка"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Датум (без час)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Датум (со час)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Децимален број"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "Адреса на е-пошта"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Патека на датотека"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Децимален број"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "ИП адреса"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Логичка (точно,неточно или празно)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Релација со родителскиот модел"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Телефонски број"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Текст"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Час"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "Држава во САД (две големи букви)"
-
 #: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "XML текст"
-
-#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s не изгледа дека е url објект"
@@ -1213,66 +1195,62 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Како погоре, но ја отвара админ страницата во нов прозорец."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Лични информации"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Привилегии"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Важни датуми"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Групи"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Додади корисник"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Успешна промена на лозинката."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Промени лозинка: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Корисник"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
 msgstr ""
-"Дозволени се најмногу 30 знаци. Дозволени се само алфанумерички знаци "
-"(букви, цифри и долна црта)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Оваа вредност смее да има само букви, бројки или долни црти."
+"Задолжително. 30 или помалку знаци. Единствено букви, бројки и  @/./+/-/_ ."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Оваа вредност смее да содржи само букви, бројки и @/./+/-/_ знаци."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Потврда на лозинка"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Веќе постои корисник со тоа корисничко име."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Двете полиња со лозинките не се совпаѓаат."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Оваа сметка е неактивна."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1280,11 +1258,11 @@
 "Не изгледа дека вашиот прелистувач има овозможено колачиња. Колачињата се "
 "потребни за да се најавите."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "Е-пошта"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1292,73 +1270,70 @@
 "Нема регистрирано корисник со оваа адреса за е-пошта. Сигурни ли сте дека "
 "сте регистрирани?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Ресетирање на лозинка на %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Нова лозинка"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Потврда за нова лозинка"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Стара лозинка"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr ""
 "Не ја внесовте точно вашата стара лозинка. Ве молам внесете ја повторно."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "име"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "кодно име"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "привилегија"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "привилегии"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "група"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "групи"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "корисничко име"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr "Задолжително. 30 или помалку знаци. Букви, бројки и  @/./+/-/_ знаци"
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "име"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "презиме"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "е-пошта"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "лозинка"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1366,20 +1341,20 @@
 "Користете '[algo]$[salt]$[hexdigest]' или користете ја <a href=\"password/"
 "\">формата за промена на лозинката</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "статус на администраторите"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr ""
 "Означува дали корисникот може да се логира во сајтот за администрација."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "активен"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1387,11 +1362,11 @@
 "Означува дали корисникот треба да биде активен. Одштиклирајте го ова наместо "
 "да бришете корисници."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "статус на суперкорисник"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
@@ -1399,15 +1374,15 @@
 "Означува дека овој корисник ги има сите привилегии без експлицитно да се "
 "доделуваат сите."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "последна најава"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "датум на зачленување"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1415,39 +1390,77 @@
 "Како дополнување на рачно доделени привилегии, овој корисник ќе ги добие "
 "автоматски и сите привилегии за секоја група во која тој/таа членува."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "кориснички привилегии"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "корисник"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "корисници"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "порака"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Одјавен"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Внесeте правилна адреса за е-пошта."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Содржина"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Метаподатоци"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "обележан"
+msgstr[1] "обележани"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Обележи го одбраните коментари"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "одобрен"
+msgstr[1] "одобрени"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Одобри ги одбраните коментари"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "отстранет"
+msgstr[1] "отстранети"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Отстрани ги избраните коментари"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 коментар беше успешно %(action)s."
+msgstr[1] "%(count)s коментари беа успешно %(action)s."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1459,7 +1472,6 @@
 msgstr "Последни коментари за %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Име"
 
@@ -1467,25 +1479,29 @@
 msgid "Email address"
 msgstr "Е-пошта"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Коментар"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Внимавајте на јазикот. Тука не е дозволен зборот %s."
 msgstr[1] "Внимавајте на јазикот. Тука не се дозволени зборовите %s."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr ""
 "Ако внесете нешто во ова поле вашиот коментар ќе биде означен како спам"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "тип на содржина"
 
@@ -1514,6 +1530,10 @@
 msgid "date/time submitted"
 msgstr "датум/време пријавен"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "ИП адреса"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "е јавен"
@@ -1596,7 +1616,6 @@
 msgstr "Навистина ли сакате овој коментар да биде објавен?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Одобри"
 
@@ -1621,11 +1640,6 @@
 msgid "Really remove this comment?"
 msgstr "Навистина ли сакате да го отстраните овој коментар?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Отстрани"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Ви благодариме што отстранивте"
@@ -1656,39 +1670,6 @@
 msgid "Preview"
 msgstr "Преглед"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Редица за модерирање коментари"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Нема коменатари за модерирање"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Е-пошта"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Автентициран?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "ИП адреса"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Датум на објава"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "да"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "не"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Ви благодариме за коментарот"
@@ -1716,11 +1697,11 @@
 msgid "or make changes"
 msgstr "или направете измени"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "име на класата за python моделoт"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "типови содржини"
 
@@ -1784,7 +1765,7 @@
 msgid "flat pages"
 msgstr "статични страници"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1792,6 +1773,40 @@
 "Се извинуваме но вашата форма истече. Ве молам продолжете пополнувајќи ја "
 "формата од оваа страница."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+"Базичното GIS поле -- соодветствува на геометриски тип од OpenGIS "
+"спецификацијата."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Точка"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Линиска нишка"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Полигон"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Повеќе точки"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Повеќе-линиска нишка"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Повеќе полигони"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Колекција од геометриски објекти"
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Не е внесена геометриска вредност."
@@ -1897,25 +1912,25 @@
 msgid "yesterday"
 msgstr "вчера"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Внесете поштенски број во форматот NNNN или ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Во ова поле смее да бидат само бројки."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Во ова поле смее да има 7 или 8 цифри."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Внесете правилен CUIT во XX-XXXXXXXX-X or XXXXXXXXXXXX формат."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "Неправилен CUIT."
 
@@ -1955,8 +1970,8 @@
 msgid "Vienna"
 msgstr "Виена"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Внесете правилен поштенски број во форматот XXXX."
 
@@ -1966,46 +1981,46 @@
 "Внесете правилен број за социјално осигурување на Австрија во XXXX-XXXXXX "
 "формат."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Внесете 4 цифрен поштенски број."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Внесете правилен поштенски број во форматот XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Телефонските броеви мора да бидат во XX-XXXX-XXXX форматот."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
 msgstr ""
 "Изберете правилна бразилска држава. Оваа држава не е од достапните држави."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Неправилен CPF број."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Во ова поле смее да има најмногу 11 цифри или 14 знаци."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Неправилен CNPJ број."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "Во ова поле треба да има најмалку 14 цифри"
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Внесете правилен поштенски број во формат XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr "Внесте правилен канадски број за осигурување во XXX-XXX-XXX форматот."
 
@@ -2113,7 +2128,7 @@
 msgid "Zurich"
 msgstr "Цирих"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2121,15 +2136,15 @@
 "Внесете правилен швајцарски број на пасош во X1234567<0 или  1234567890 "
 "формат."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Внесете правилeн RUT за Чиле."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Внесете правилен RUT за Чиле. Форматот е Xx.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "RUT бројот за Чиле е невалиден."
 
@@ -2189,25 +2204,25 @@
 msgid "Moravian-Silesian Region"
 msgstr "Моравско-Силесански регион"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Внесете поштенски број во форматот XXXXX или XXX XX."
 
-#: contrib/localflavor/cz/forms.py:47
+#: contrib/localflavor/cz/forms.py:48
 msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
 msgstr "Внесете даночен број (NIP) во форматот XXXXXX/XXXX или XXXXXXXXXX."
 
-#: contrib/localflavor/cz/forms.py:48
+#: contrib/localflavor/cz/forms.py:49
 msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
 msgstr ""
 "Невалидна вредност за опционален параметар пол, валидни вредности се 'f' и "
 "'m'"
 
-#: contrib/localflavor/cz/forms.py:49
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Внесете правилен даночен број."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Внесете правилен даночен број."
 
@@ -2275,12 +2290,12 @@
 msgid "Thuringia"
 msgstr "Турингиа"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Внесете правилен поштенски број во формат XXXXXX."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2555,11 +2570,11 @@
 msgid "Valencian Community"
 msgstr "Valencian Community"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Внесете поштенски број во опсег и формат 01XXX - 52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
@@ -2567,62 +2582,494 @@
 "Внесете правилен телефонски број во еден од формативе 6XXXXXXXX, 8XXXXXXXX "
 "или 9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Ве молам внесете правиелн NIF, NIE или CIF."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Ве молам внесете валиден NIF или NIE."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Неправилна контролна сума за NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Неправилна контролна сума за NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Неправилна контролна сум за CIF."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr "Внесете правилна банкарска сметка во формат XXXX-XXXX-XX-XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Неправилна контролна сума за бројот на банкарската сметка."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Внесте правилен фински матичен број."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Телефонските броеви мора да бидат во 0X XX XX XX XX форматот."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Внесете правилен поштенски код"
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Внесете валиден телефонски број"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Внесете валидна регистарска табличка."
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Внесете правилен NIK/KTP број."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Бали"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Бантен"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Бенгкулу"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Јогјакарта"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Џакарта"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Горонтало"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Џамби"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Јава Барат"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Јава Тенга"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Јава Тимур"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Калинмантан Барат"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Калимантан Селатан"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Калимантан Тенга"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Калимантан Тимур"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Кепулуан Банга-Белитунг"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Кепулуан Риау"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Лампунг"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Малуку"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Малуку Утара"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Нангоре Аце Дарусалам"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Нуса Тенгара Барат"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Нуса Тенгара Тимур"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Папуа"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Папуа Барат"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Риау"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "Сулавеси Барат"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "Сулавеси Селатан"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "Сулавеси Тенга"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "Сулавеси Тенгара"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "Сулавеси Утара"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "Суматера Барат"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "Суматера Селатан"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "Суматера Утара"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "Магеланг"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "Суракарта - Соло"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "Мадиун"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "Кедири"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "Тапанули"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "Кепулуан Банга Белитунг"
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr "Corps Consulate"
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr "Corps Diplomatic"
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "Бандунг"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr "Сулавеси Утара Даратан"
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - Timor"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr "Сулавеси Утара Кепулуан"
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - Lombok"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "Папуа дан Папуа Барат"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "Циребон"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - Sumbawa"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - Flores"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - Sumba"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "Богор"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "Пекалонган"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "Семаранг"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "Пати"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "Сурабаја"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "Мадура"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "Маланг"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "Џембер"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "Банјумас"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "Федерална Влада"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "Бојонегоро"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "Пурвакарта"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "Сидоарџо"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "Гарут"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "Антрим"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "Армаг"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "Карлов"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "Каван"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "Кларе"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "Корк"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "Дери"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "Донегал"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "Даун"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Даблин"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "Ферманаг"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "Галвеј"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "Кери"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "Килдаре"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "Килкени"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "Лаоис"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "Лајтрим"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "Лимерик"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "Лонгфорд"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "Лут"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Мајо"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "Мит"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "Монаган"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "Офали"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "Росомон"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "Слиго"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "Типерари"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "Тајрон"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "Вотерфорд"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "Вестмит"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "Вексфорд"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "Виклоу"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Внесете правилен поштенски број во форматот  XXXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr ""
 "Внесете валиден идентификационен број од Исланд. Форматот е XXXXXX-XXXX."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "Исландскиот идентификационент број е невалиден."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Внесете правилен поштенски број."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Внесете правилен осигурителен број."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Внесете правилен даночен број."
 
@@ -2818,6 +3265,10 @@
 msgid "Okinawa"
 msgstr "Окинава"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Внесете правилен кувајтски број за идентификација"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2946,15 +3397,11 @@
 msgid "Zacatecas"
 msgstr "Зацатекас"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Внесете правилен поштенски код"
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Внесете валиден телефонски број"
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Внесете валиден осигурителен број"
 
@@ -3006,15 +3453,15 @@
 msgid "Zuid-Holland"
 msgstr "Zuid-Holland"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Ве молам внесете правилен норвешки матичен број."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Во ова поле мора да се внесат 8 цифри."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Во ова поле се потребни 11 цифри."
 
@@ -3114,6 +3561,15 @@
 msgid "West Pomerania"
 msgstr "Западна Померанија"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Внесете поштенски број во форматот XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+"Телефонските броеви мора да се со 9 цифри, или да почнуваат со + или 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Внесете правилен CIF."
@@ -3134,6 +3590,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Внесете правилен поштенски код во формат XXXXXX"
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Внесете број на шведска организација."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Внесте правилен шведски матичен број."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Координациски броеви не се дозволени."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Внесете правилен шведски поштенски број во формат XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Стокхолм"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Вестерботен"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Норботен"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Упсала"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Содерманланд"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Остерготланд"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Јонкопинг"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Кроненберг"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Калмар"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Готланд"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Блекинге"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Скане"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Халанд"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Вестра Готаланд"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Вермленд"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Оребро"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Вестменланд"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Даларна"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Гевлеборг"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Вестернорланд"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Јемтланд"
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Банска Бистрица"
@@ -3766,19 +4322,43 @@
 msgid "Wales"
 msgstr "Велс"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Внесете поштенски број во форматот XXXXX или XXXXX-XXXX."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Телефонските броеви мора да бидат во XXX-XXX-XXXX форматот."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr "Внесте правилен матичен број за САД во XXX-XX-XXXX форматот."
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Внесете држава или територија од САД."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Држава во САД (две големи букви)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Телефонски број"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "Внесете правилен CI во X.XXX.XXX-X,XXXXXXX-X или XXXXXXXX формат."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Внесете правилен CI број."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Внесете правилен јужно афрички број за идентификација"
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Внесете правилен јужно афрички поштенски код"
 
@@ -3818,6 +4398,10 @@
 msgid "Western Cape"
 msgstr "Western Cape"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "мрзлива порака"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "пренасочи од"
@@ -3882,59 +4466,224 @@
 msgid "sites"
 msgstr "сајтови"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Оваа вредност мора да биде цел број."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Оваа вредност мора да биде или точно или неточно."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Внесете правилна вредност."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Внесете правилна адреса."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Оваа адреса изгледа дека не е достапна."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Внесете правилно кратко име (slug) кое се соддржи од букви, цифри, долна "
+"црта или тире."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Внесeте правилна IPv4 адреса."
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Внесете само цифри одделени со запирки."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+"Осигурајте се дека оваа вредност е %(limit_value)s (моментално е %"
+"(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr ""
+"Осигурајте се дека оваа вредност е помала или еднаква со %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr ""
+"Осигурајте се дека оваа вредност е поголема или еднаква со %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Осигурајте се дека оваа вредност има најмалку %(limit_value)d знаци (има %"
+"(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Осигурајте се дека оваа вредност има најмногу %(limit_value)d знаци (има %"
+"(show_value)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s мора да биде уникатно за %(date_field)s %(lookup)s."
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s со %(field_label)s веќе постои."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Вредноста %r не е валиден избор."
+
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Оваа вредност неможе да биде null."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Внесете само цифри одделени со запирки."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Ова поле не може да биде празно"
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Поле од тип: %(field_type)s"
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Цел број"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+msgid "This value must be an integer."
+msgstr "Оваа вредност мора да биде цел број."
+
+#: db/models/fields/__init__.py:490
+msgid "This value must be either True or False."
+msgstr "Оваа вредност мора да биде или точно или неточно."
+
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Логичка (или точно или неточно)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Збор (до %(max_length)s)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Целобројни вредности одделени со запирка"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Датум (без час)"
+
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Внесете правилен датум во форматот ГГГГ-ММ-ДД."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Неправилен датум: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr "Внесете правилен датум/време во YYYY-MM-DD HH:MM[:ss[.uuuuuu]] формат."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Датум (со час)"
+
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "Оваа вредност мора да биде децимален број."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Децимален број"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "Адреса на е-пошта"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Патека на датотека"
+
+#: db/models/fields/__init__.py:822
 msgid "This value must be a float."
 msgstr "Оваа вредност мора да биде број со подвижна запирка."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "Децимален број"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Голем (8 бајти) цел број"
+
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr "Оваа вредност мора да биде празна, точно или неточно."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Логичка (точно,неточно или празно)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Текст"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Час"
+
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Внесете правилно време во HH:MM[:ss[.uuuuuu]] формат."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "XML текст"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Модел %(model)s со примарен клуч %(pk)r не постои."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Надворешен клуч (типот е одреден според сврзаното поле)"
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr "Еден-према-еден релација"
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr "Повеќе-према-повеќе релација"
+
+#: db/models/fields/related.py:1000
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Држете го „Control“, или „Command“ на Мекинтош, за да изберете повеќе од "
 "едно."
 
-#: db/models/fields/related.py:894
+#: db/models/fields/related.py:1061
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3946,84 +4695,58 @@
 "Ве молам внесете правилен %(self)s идентификацион број. Вредностите %(value)"
 "r се неправилни."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Ова поле е задолжително."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Внесете правилна вредност."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Осигурајте се дека оваа вредност има најмногу %(max)d знаци (има %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Осигурајте се дека оваа вредност има најмалку %(min)d знаци (има %(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Внеси цел број."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Осигурајте се дека оваа вредност е помала или еднаква со %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Осигурајте се дека оваа вредност е поголема или еднаква со %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Внесете број."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Осигурајте се дека вкупно нема повеќе од %s цифри."
 
-#: forms/fields.py:228
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Осигурајте се дека нема повеќе од %s децимални места."
 
-#: forms/fields.py:229
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Осигурајте се дека нема повеќе од %s цифри пред децималната запирка."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Внесете правилен датум."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Внесете правилно време."
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Внесете правилен датум со време."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "Не беше пратена датотека. Проверете го типот на енкодирање на формата."
 
-#: forms/fields.py:448
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Не беше пратена датотека."
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Пратената датотека е празна."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4031,69 +4754,40 @@
 "Осигурајте се дека ова име на датотека има најмногу %(max)d знаци (има %"
 "(length)d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
 msgstr ""
-"Качете валидна фотографија. Датотеката која ја качивте или не беше "
-"фотографија или беше расипана датотеката."
-
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Внесете правилна адреса."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Оваа адреса изгледа дека не е достапна."
-
-#: forms/fields.py:625 forms/fields.py:703
+"Качете валидна слика. Датотеката која ја качивте или не беше слика или беше "
+"расипана датотеката."
+
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Внесете валиден избор. %(value)s не е еден од можните избори."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
 msgid "Enter a list of values."
 msgstr "Внесете листа на вредности."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Внесeте правилна IPv4 адреса."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Внесете правилно кратко име (slug) кое се соддржи од букви, цифри, долна "
-"црта или тире."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Редослед"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s мора да биде уникатно за %(date_field)s %(lookup)s."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s со %(field_label)s веќе постои."
-
-#: forms/models.py:594
+#: forms/models.py:567
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Ве молам поправете ја дуплираната вредност за  %(field)s."
 
-#: forms/models.py:598
+#: forms/models.py:571
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr ""
 "Ве молам поправете ја дуплираната вредност за %(field)s, која мора да биде "
 "уникатна."
 
-#: forms/models.py:604
+#: forms/models.py:577
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
@@ -4102,52 +4796,52 @@
 "Ве молам поправете ја дуплираната вредност за %(field_name)s која мора да "
 "биде уникатна за %(lookup)s во %(date_field)s."
 
-#: forms/models.py:612
+#: forms/models.py:585
 msgid "Please correct the duplicate values below."
 msgstr "Ве молам поправете ги дуплираните вредности подолу."
 
-#: forms/models.py:867
+#: forms/models.py:860
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr ""
 "Надворешниот клуч на вгезденото поле не се совпаѓа со примарниот клуч на "
 "родителската инстанца."
 
-#: forms/models.py:930
+#: forms/models.py:926
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Изберете правилно. Тоа не е еден од можните избори."
 
-#: forms/models.py:1004
+#: forms/models.py:1008
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Внесете правилно. %s не е еден од достапните вредности."
 
-#: forms/models.py:1006
+#: forms/models.py:1010
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" не е правилна вредност за примарен клуч."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "да, не, можеби"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d бајт"
 msgstr[1] "%(size)d бајти"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f КБ"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f МБ"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f ГБ"
@@ -4356,7 +5050,7 @@
 msgid "Dec."
 msgstr "дек."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "или"
 
@@ -4410,33 +5104,37 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:518
 msgid "DATE_FORMAT"
 msgstr "j M Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:519
+msgid "DATETIME_FORMAT"
+msgstr "j M Y, P"
+
+#: utils/translation/trans_real.py:520
 msgid "TIME_FORMAT"
 msgstr "P"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:541
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:542
 msgid "MONTH_DAY_FORMAT"
 msgstr "F j"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "Ставка %(verbose_name)s беше успешно создадена."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "Ставка %(verbose_name)s беше успешно ажурирана."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "Ставка %(verbose_name)s беше избришана."
Binary file web/lib/django/conf/locale/mk/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/mk/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/mk/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -5,47 +5,54 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-15 10:53+1100\n"
-"PO-Revision-Date: 2007-02-24 13:49+0100\n"
-"Last-Translator: Georgi Stanojevski <glisha@gmail.com>\n"
+"POT-Creation-Date: 2010-05-01 21:49+0200\n"
+"PO-Revision-Date: 2010-04-05 15:44+0100\n"
+"Last-Translator: Vasil Vangelovski <vvangelovski@gmail.com>\n"
 "Language-Team: Macedonian <ossm-members@hedona.on.net.mk>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.11.4\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
 msgstr "Достапно %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "Избери ги сите"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "Додади"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "Отстрани"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
 msgstr "Избрано %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
 msgstr "Означете го вашиот избор/и и кликнете"
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
 msgstr "Исчисти ги сите"
 
+#: contrib/admin/media/js/actions.js:17
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/media/js/calendar.js:24
 #: contrib/admin/media/js/dateparse.js:32
-#: contrib/admin/media/js/calendar.js:24
 msgid ""
 "January February March April May June July August September October November "
 "December"
@@ -53,67 +60,67 @@
 "Јануари Февруари Март Април Мај Јуни Јули Август Септември Октомври Ноември "
 "Декември"
 
-#: contrib/admin/media/js/dateparse.js:33
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Недела Понеделник Вторник Среда Четврток Петок Сабота"
-
 #: contrib/admin/media/js/calendar.js:25
 msgid "S M T W T F S"
 msgstr "Н П В С Ч П С"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Прикажи"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Сокриј"
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Недела Понеделник Вторник Среда Четврток Петок Сабота"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Now"
 msgstr "Сега"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
 msgid "Clock"
 msgstr "Часовник"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
 msgid "Choose a time"
 msgstr "Избери време"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Midnight"
 msgstr "Полноќ"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "6 a.m."
 msgstr "6 наутро"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "Noon"
 msgstr "Пладне"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "Откажи"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "Денеска"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "Календар"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "Вчера"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "Утре"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Прикажи"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Скриј"
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/mk/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'd F Y'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+# MONTH_DAY_FORMAT = 
+SHORT_DATE_FORMAT = 'd.n.Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/mn/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/mn/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,5243 @@
+# This file is distributed under the same license as the Django package.
+#
+# Urangua <urangua@adsolux.com>, 2010, 2002, 2010.
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-05-04 19:00+0800\n"
+"PO-Revision-Date: 2010-03-11 17:23+0800\n"
+"Last-Translator: Urangua <urangua@adsolux.com>\n"
+"Language-Team: mn <translate@opensource.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: conf/global_settings.py:44
+msgid "Arabic"
+msgstr "Араб"
+
+#: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "Болгар"
+
+#: conf/global_settings.py:46
+msgid "Bengali"
+msgstr "Бенгал"
+
+#: conf/global_settings.py:47
+#, fuzzy
+msgid "Bosnian"
+msgstr "Эстони"
+
+#: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "Каталан"
+
+#: conf/global_settings.py:49
+msgid "Czech"
+msgstr "Чех"
+
+#: conf/global_settings.py:50
+msgid "Welsh"
+msgstr "Уэльс"
+
+#: conf/global_settings.py:51
+msgid "Danish"
+msgstr "Дани"
+
+#: conf/global_settings.py:52
+msgid "German"
+msgstr "Герман"
+
+#: conf/global_settings.py:53
+msgid "Greek"
+msgstr "Грек"
+
+#: conf/global_settings.py:54
+msgid "English"
+msgstr "Англи"
+
+#: conf/global_settings.py:55
+#, fuzzy
+msgid "British English"
+msgstr "Англи"
+
+#: conf/global_settings.py:56
+msgid "Spanish"
+msgstr "Испани"
+
+#: conf/global_settings.py:57
+msgid "Argentinean Spanish"
+msgstr "Аргентинийн Испани"
+
+#: conf/global_settings.py:58
+msgid "Estonian"
+msgstr "Эстони"
+
+#: conf/global_settings.py:59
+msgid "Basque"
+msgstr "Баск"
+
+#: conf/global_settings.py:60
+msgid "Persian"
+msgstr "Перс"
+
+#: conf/global_settings.py:61
+msgid "Finnish"
+msgstr "Финлянд"
+
+#: conf/global_settings.py:62
+msgid "French"
+msgstr "Франц"
+
+#: conf/global_settings.py:63
+#, fuzzy
+msgid "Frisian"
+msgstr "Фраисланд"
+
+#: conf/global_settings.py:64
+msgid "Irish"
+msgstr "Ирланд"
+
+#: conf/global_settings.py:65
+msgid "Galician"
+msgstr "Галици"
+
+#: conf/global_settings.py:66
+msgid "Hebrew"
+msgstr "Еврэй"
+
+#: conf/global_settings.py:67
+#, fuzzy
+msgid "Hindi"
+msgstr "Хайланд"
+
+#: conf/global_settings.py:68
+msgid "Croatian"
+msgstr "Хорват"
+
+#: conf/global_settings.py:69
+msgid "Hungarian"
+msgstr "Унгар"
+
+#: conf/global_settings.py:70
+msgid "Icelandic"
+msgstr "Исланд"
+
+#: conf/global_settings.py:71
+msgid "Italian"
+msgstr "Итали"
+
+#: conf/global_settings.py:72
+msgid "Japanese"
+msgstr "Япон"
+
+#: conf/global_settings.py:73
+msgid "Georgian"
+msgstr "Гүрж"
+
+#: conf/global_settings.py:74
+msgid "Khmer"
+msgstr "Кхмер"
+
+#: conf/global_settings.py:75
+msgid "Kannada"
+msgstr "Каннада"
+
+#: conf/global_settings.py:76
+msgid "Korean"
+msgstr "Солонгос"
+
+#: conf/global_settings.py:77
+msgid "Lithuanian"
+msgstr "Литва"
+
+#: conf/global_settings.py:78
+msgid "Latvian"
+msgstr "Латви"
+
+#: conf/global_settings.py:79
+msgid "Macedonian"
+msgstr "Македон"
+
+#: conf/global_settings.py:80
+#, fuzzy
+msgid "Mongolian"
+msgstr "Македон"
+
+#: conf/global_settings.py:81
+msgid "Dutch"
+msgstr "Голланд"
+
+#: conf/global_settings.py:82
+msgid "Norwegian"
+msgstr "Норвеги"
+
+#: conf/global_settings.py:83
+#, fuzzy
+msgid "Norwegian Bokmal"
+msgstr "Норвеги"
+
+#: conf/global_settings.py:84
+#, fuzzy
+msgid "Norwegian Nynorsk"
+msgstr "Норвеги"
+
+#: conf/global_settings.py:85
+msgid "Polish"
+msgstr "Польш"
+
+#: conf/global_settings.py:86
+#, fuzzy
+msgid "Portuguese"
+msgstr "Португали"
+
+#: conf/global_settings.py:87
+msgid "Brazilian Portuguese"
+msgstr "Бразилийн Португали"
+
+#: conf/global_settings.py:88
+msgid "Romanian"
+msgstr "Румын"
+
+#: conf/global_settings.py:89
+msgid "Russian"
+msgstr "Орос"
+
+#: conf/global_settings.py:90
+msgid "Slovak"
+msgstr "Словак"
+
+#: conf/global_settings.py:91
+msgid "Slovenian"
+msgstr "Словен"
+
+#: conf/global_settings.py:92
+#, fuzzy
+msgid "Albanian"
+msgstr "Алакант"
+
+#: conf/global_settings.py:93
+msgid "Serbian"
+msgstr "Серби"
+
+#: conf/global_settings.py:94
+#, fuzzy
+msgid "Serbian Latin"
+msgstr "Серби"
+
+#: conf/global_settings.py:95
+msgid "Swedish"
+msgstr "Щвед"
+
+#: conf/global_settings.py:96
+msgid "Tamil"
+msgstr "Тамил"
+
+#: conf/global_settings.py:97
+msgid "Telugu"
+msgstr "Тэлүгү"
+
+#: conf/global_settings.py:98
+#, fuzzy
+msgid "Thai"
+msgstr "Тамил"
+
+#: conf/global_settings.py:99
+msgid "Turkish"
+msgstr "Турк"
+
+#: conf/global_settings.py:100
+msgid "Ukrainian"
+msgstr "Украйн"
+
+#: conf/global_settings.py:101
+#, fuzzy
+msgid "Vietnamese"
+msgstr "Венн"
+
+#: conf/global_settings.py:102
+msgid "Simplified Chinese"
+msgstr "Хятад (хялбаршуулсан) "
+
+#: conf/global_settings.py:103
+msgid "Traditional Chinese"
+msgstr "Хятад (уламжлалт)"
+
+#: contrib/admin/actions.py:52
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr ""
+
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1129
+msgid "Are you sure?"
+msgstr "Итгэлтэй байна уу?"
+
+#: contrib/admin/actions.py:77
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:44
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+"<h3>-аар %s:</h3>\n"
+"<ul>\n"
+
+#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
+msgid "All"
+msgstr "Бүх "
+
+#: contrib/admin/filterspecs.py:113
+msgid "Any date"
+msgstr "Өдөр харгалзахгүй"
+
+#: contrib/admin/filterspecs.py:114
+msgid "Today"
+msgstr "Өнөөдөр"
+
+#: contrib/admin/filterspecs.py:117
+msgid "Past 7 days"
+msgstr "Өнгөрсөн долоо хоног"
+
+#: contrib/admin/filterspecs.py:119
+msgid "This month"
+msgstr "Энэ сар"
+
+#: contrib/admin/filterspecs.py:121
+msgid "This year"
+msgstr "Энэ жил"
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+msgid "Yes"
+msgstr "Тийм"
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+msgid "No"
+msgstr "Үгүй"
+
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
+msgid "Unknown"
+msgstr "Тодорхойгүй"
+
+#: contrib/admin/helpers.py:20
+#, fuzzy
+msgid "Action:"
+msgstr "Үйлдэл"
+
+#: contrib/admin/models.py:19
+msgid "action time"
+msgstr "үйлдлийн хугацаа"
+
+#: contrib/admin/models.py:22
+msgid "object id"
+msgstr ""
+
+#: contrib/admin/models.py:23
+msgid "object repr"
+msgstr ""
+
+#: contrib/admin/models.py:24
+msgid "action flag"
+msgstr ""
+
+#: contrib/admin/models.py:25
+msgid "change message"
+msgstr ""
+
+#: contrib/admin/models.py:28
+msgid "log entry"
+msgstr ""
+
+#: contrib/admin/models.py:29
+msgid "log entries"
+msgstr ""
+
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
+msgid "None"
+msgstr ""
+
+#: contrib/admin/options.py:563
+#, python-format
+msgid "Changed %s."
+msgstr "Өөрчлөгдсөн %s."
+
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:573
+msgid "and"
+msgstr "ба"
+
+#: contrib/admin/options.py:568
+#, python-format
+msgid "Added %(name)s \"%(object)s\"."
+msgstr "Нэмэгдсэн %(name)s \"%(object)s\"."
+
+#: contrib/admin/options.py:572
+#, python-format
+msgid "Changed %(list)s for %(name)s \"%(object)s\"."
+msgstr "%(name)s \"%(object)s\"-ийн өөрчлөгдсөн %(list)s"
+
+#: contrib/admin/options.py:577
+#, python-format
+msgid "Deleted %(name)s \"%(object)s\"."
+msgstr "Устгасан %(name)s \"%(object)s\"."
+
+#: contrib/admin/options.py:581
+msgid "No fields changed."
+msgstr "Өөрчилсөн зүйл байхгүй байна."
+
+#: contrib/admin/options.py:647
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr " %(name)s \"%(obj)s\" амжилттай нэмэгдлээ."
+
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
+msgid "You may edit it again below."
+msgstr "Доорх хэсэгт үүнийг ахин засварлах боломжтой."
+
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
+#, python-format
+msgid "You may add another %s below."
+msgstr "Доорх хэсэгт өөр %s нэмэх боломжтой."
+
+#: contrib/admin/options.py:682
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr " %(name)s \"%(obj)s\" амжилттай өөрчлөгдлөө. "
+
+#: contrib/admin/options.py:690
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+"%(name)s \"%(obj)s\" амжилттай нэмэгдлээ. Доорх хэсэгт үүнийг ахин засварлах "
+"боломжтой."
+
+#: contrib/admin/options.py:744 contrib/admin/options.py:1001
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: contrib/admin/options.py:763
+#, fuzzy
+msgid "No action selected."
+msgstr "үйлдлийн хугацаа"
+
+#: contrib/admin/options.py:844
+#, python-format
+msgid "Add %s"
+msgstr "%s-ийг нэмэх"
+
+#: contrib/admin/options.py:870 contrib/admin/options.py:1109
+#, python-format
+msgid "%(name)s object with primary key %(key)r does not exist."
+msgstr ""
+
+#: contrib/admin/options.py:935
+#, python-format
+msgid "Change %s"
+msgstr "%s-ийг өөрчлөх"
+
+#: contrib/admin/options.py:981
+msgid "Database error"
+msgstr "Өгөгдлийн сангийн алдаа"
+
+#: contrib/admin/options.py:1043
+#, fuzzy, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] " %(name)s \"%(obj)s\" амжилттай өөрчлөгдлөө. "
+msgstr[1] " %(name)s \"%(obj)s\" амжилттай өөрчлөгдлөө. "
+
+#: contrib/admin/options.py:1070
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/options.py:1075
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: contrib/admin/options.py:1122
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr " %(name)s \"%(obj)s\" амжилттай устгагдлаа."
+
+#: contrib/admin/options.py:1159
+#, python-format
+msgid "Change history: %s"
+msgstr "Өөрчлөлтийн түүх: %s"
+
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+"Хэрэглэгчийн нэр, нууц үгээ зөв оруулна уу. Том жижиг үсгийн ялгааг гаргах "
+"хэрэгтэй."
+
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
+msgid "Please log in again, because your session has expired."
+msgstr "Орсон хуудас тань хүчингүй болсон тул ахин нэвтрэнэ үү."
+
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+"Та хөтчөө cookies-ийг ажиллуулахаар тохируулаагүй юм шиг байна. Cookies-ийг "
+"ажиллахаар болгоод, энэ хуудсыг ахин ачааалж үзнэ үү."
+
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
+#: contrib/admin/views/decorators.py:66
+msgid "Usernames cannot contain the '@' character."
+msgstr "Хэрэглэгчийн нэрэнд '@' тэмдэгтийг оруулах боломжгүй."
+
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr ""
+"Цахим шуудангийн хаяг хэрэглэгчийн нэр биш. Оронд нь '%s' -ийг оруулна уу."
+
+#: contrib/admin/sites.py:393
+msgid "Site administration"
+msgstr "Сайтын удирдлага"
+
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/templates/registration/password_reset_complete.html:14
+#: contrib/admin/views/decorators.py:20
+msgid "Log in"
+msgstr "Нэвтрэх"
+
+#: contrib/admin/sites.py:452
+#, python-format
+msgid "%s administration"
+msgstr "%s  удирдлага"
+
+#: contrib/admin/widgets.py:75
+msgid "Date:"
+msgstr "Огноо:"
+
+#: contrib/admin/widgets.py:75
+msgid "Time:"
+msgstr "Цаг:"
+
+#: contrib/admin/widgets.py:99
+msgid "Currently:"
+msgstr "Одоогоор:"
+
+#: contrib/admin/widgets.py:99
+msgid "Change:"
+msgstr "Өөрчлөлт:"
+
+#: contrib/admin/widgets.py:129
+msgid "Lookup"
+msgstr "Хайх"
+
+#: contrib/admin/widgets.py:244
+msgid "Add Another"
+msgstr "Ахиад нэмэх:"
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Хуудас олдсонгүй."
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Уучлаарай, хандахыг хүссэн хуудас тань олдсонгүй."
+
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/app_index.html:8
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/object_history.html:6
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Home"
+msgstr "Нүүр"
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Серверийн алдаа"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Серверийн алдаа (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Серверийн алдаа <em>(500)</em>"
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"Алдаа гарсан байна. Энэ талаар цахим шуудангаар дамжуулан сайтын удирдлагад "
+"мэдэгдэж нэн даруй засах хэрэгтэй. Хүлээцтэй хандсанд баярлалаа."
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr "Очих"
+
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr ""
+
+#: contrib/admin/templates/admin/app_index.html:10
+#: contrib/admin/templates/admin/index.html:19
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
+#: contrib/admin/templates/admin/base.html:28
+msgid "Welcome,"
+msgstr "Тавтай морилно уу"
+
+#: contrib/admin/templates/admin/base.html:33
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
+msgstr "Баримтжуулалт"
+
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Change password"
+msgstr "Нууц үг өөрчлөх"
+
+#: contrib/admin/templates/admin/base.html:48
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Log out"
+msgstr "Гарах"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Жанго сайтын удирдлага"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Жанго удирдлага"
+
+#: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/index.html:29
+msgid "Add"
+msgstr "Нэмэх"
+
+#: contrib/admin/templates/admin/change_form.html:28
+#: contrib/admin/templates/admin/object_history.html:10
+msgid "History"
+msgstr "Түүх"
+
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
+msgid "View on site"
+msgstr "Сайтаас харах"
+
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Доорх алдааг засна уу."
+msgstr[1] "Доорх алдаануудыг засна уу."
+
+#: contrib/admin/templates/admin/change_list.html:63
+#, python-format
+msgid "Add %(name)s"
+msgstr "%(name)s нэмэх"
+
+#: contrib/admin/templates/admin/change_list.html:82
+msgid "Filter"
+msgstr "Шүүлтүүр"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:10
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
+msgid "Delete"
+msgstr "Устгах"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:16
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+"%(object_name)s '%(escaped_object)s'-ийг устгавал холбогдох объект нь устах "
+"ч бүртгэл тань дараах төрлийн объектуудийг устгах зөвшөөрөлгүй байна:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:23
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+"Та %(object_name)s \"%(escaped_object)s\"-ийг устгахдаа итгэлтэй байна уу? "
+"Үүнийг устгавал дараах холбогдох зүйлс нь бүгд устана:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
+msgid "Yes, I'm sure"
+msgstr "Тийм, итгэлтэй байна."
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+#, fuzzy
+msgid "Delete multiple objects"
+msgstr "Устгасан %(name)s \"%(object)s\"."
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, fuzzy, python-format
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+"%(object_name)s '%(escaped_object)s'-ийг устгавал холбогдох объект нь устах "
+"ч бүртгэл тань дараах төрлийн объектуудийг устгах зөвшөөрөлгүй байна:"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, fuzzy, python-format
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Та %(object_name)s \"%(escaped_object)s\"-ийг устгахдаа итгэлтэй байна уу? "
+"Үүнийг устгавал дараах холбогдох зүйлс нь бүгд устана:"
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr " %(filter_title)s -ээр"
+
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "%(name)s програмд загварууд байна."
+
+#: contrib/admin/templates/admin/index.html:35
+msgid "Change"
+msgstr "Өөрчлөх"
+
+#: contrib/admin/templates/admin/index.html:45
+msgid "You don't have permission to edit anything."
+msgstr "Та ямар нэг зүйл засварлах зөвшөөрөлгүй байна."
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "Recent Actions"
+msgstr "Сүүлд хийсэн үйлдлүүд"
+
+#: contrib/admin/templates/admin/index.html:54
+msgid "My Actions"
+msgstr "Миний үйлдлүүд"
+
+#: contrib/admin/templates/admin/index.html:58
+msgid "None available"
+msgstr "Болохгүй байна"
+
+#: contrib/admin/templates/admin/index.html:72
+#, fuzzy
+msgid "Unknown content"
+msgstr "Тодорхойгүй"
+
+#: contrib/admin/templates/admin/invalid_setup.html:7
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+"Өгөгдлийн сангийн ямар нэг зүйл буруу суугдсан байна. Өгөгдлийн сангийн "
+"зохих хүснэгт үүсгэгдсэн эсэх, өгөгдлийн санг зохих хэрэглэгч унших "
+"боломжтой байгаа эсэхийг шалгаарай."
+
+#: contrib/admin/templates/admin/login.html:19
+msgid "Username:"
+msgstr "Хэрэглэгчийн нэр:"
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Password:"
+msgstr "Нууц үг:"
+
+#: contrib/admin/templates/admin/object_history.html:22
+msgid "Date/time"
+msgstr "Огноо/хугацаа"
+
+#: contrib/admin/templates/admin/object_history.html:23
+msgid "User"
+msgstr "Хэрэглэгч"
+
+#: contrib/admin/templates/admin/object_history.html:24
+msgid "Action"
+msgstr "Үйлдэл"
+
+#: contrib/admin/templates/admin/object_history.html:38
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Уг объектэд өөрчлөлтийн түүх байхгүй байна. Магадгүй үүнийг уг удирдлагын "
+"сайтаар дамжуулан нэмээгүй байх."
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Бүгдийг харуулах"
+
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Хадгалах"
+
+#: contrib/admin/templates/admin/search_form.html:8
+#, fuzzy
+msgid "Search"
+msgstr "3-р сар"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "1 илэрц"
+msgstr[1] "%(counter)s илэрц"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "Нийт %(full_result_count)s"
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save as new"
+msgstr "Шинээр хадгалах"
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and add another"
+msgstr "Хадгалаад өөрийг нэмэх"
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save and continue editing"
+msgstr "Хадгалаад нэмж засах"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+"Эхлээд хэрэглэгчийн нэр нууц үгээ оруулна уу. Ингэснээр та хэрэглэгчийн "
+"сонголтыг нэмж засварлах боломжтой болно. "
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr "<strong>%(username)s</strong>.хэрэглэгчид шинэ нууц үг оруулна уу."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Нууц үг "
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Нууц үг (ахиад)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Батлахын тулд дээрх нууц үгээ ахин хийнэ үү."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, fuzzy, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "%(verbose_name)s устлаа."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+#, fuzzy
+msgid "Remove"
+msgstr "устлаа"
+
+#: contrib/admin/templates/admin/edit_inline/tabular.html:15
+msgid "Delete?"
+msgstr "Устгах уу?"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Манай вэб сайтыг ашигласанд баярлалаа."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Ахин нэвтрэх "
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "Password change"
+msgstr "Нууц үгийн өөрчлөлт"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Нууц үгийн өөрчлөлт амжилттай"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Нууц үг тань өөрчлөгдлөө."
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Аюулгүй байдлын үүднээс хуучин нууц үгээ оруулаад шинэ нууц үгээ хоёр удаа "
+"хийнэ үү. Ингэснээр нууц үгээ зөв бичиж байгаа эсэхийг тань шалгах юм."
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Хуучин нууц үг"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Шинэ нууц үг"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
+#: contrib/admin/templates/registration/password_reset_confirm.html:21
+msgid "Change my password"
+msgstr "Нууц үгээ  солих"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_form.html:10
+msgid "Password reset"
+msgstr "Нууц үг авах"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:6
+#: contrib/admin/templates/registration/password_reset_complete.html:10
+msgid "Password reset complete"
+msgstr "Нууц үг авах явц дууслаа"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:12
+msgid "Your password has been set.  You may go ahead and log in now."
+msgstr "Та нууц үгтэй боллоо. Одоо бүртгэлд нэвтрэх боломжтой."
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+msgid "Password reset confirmation"
+msgstr "Нууц үг авахаа баталгаажуулах"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:12
+msgid "Enter new password"
+msgstr "Шинэ нууц үг оруулах"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:14
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+"Шинэ нууц үгээ хоёр удаа оруулна уу. Ингэснээр нууц үгээ зөв бичиж байгаа "
+"эсэхийг тань шалгах юм. "
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Шинэ нууц үг:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Нууц үгээ батлах:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:26
+msgid "Password reset unsuccessful"
+msgstr "Нууц үг авах амжилтгүй"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:28
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used.  Please request a new password reset."
+msgstr ""
+"Нууц үг авах холбоос болохгүй байна. Үүнийг аль хэдийнэ хэрэглэснээс болсон "
+"байж болзошгүй.  Шинэ нууц үг авахаар хүсэлт гаргана уу. "
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Нууц үг авах амжилттай"
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"Таны оруулсан цахим шуудангийн хаягаар нууц үг авах зааварчилгааг илгээлээ. "
+"Энэ зааварчилгаа танд шууд очих болно. "
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Та нууц үг авахаар хүсэлт гаргасан тул уг цахим шууданг илгээлээ."
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "%(site_name)s гэсэн хэрэглэгчийн бүртгэлд "
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+msgid "Please go to the following page and choose a new password:"
+msgstr "Дараах хуудас руу орон шинэ нууц үг сонгоно уу:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:9
+msgid "Your username, in case you've forgotten:"
+msgstr "Мартсан тохиолдолд хийх хэрэглэгчийн нэр:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Thanks for using our site!"
+msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "%(site_name)s баг"
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+"Нууц үгээ мартчихсан уу? Доорх хэсэгт цахим шуудангийн хаягаа оруулвал бид "
+"хаягаар тань шинийг авах зааварчилгаа явуулах болно."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Цахим шуудангийн хаяг:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Нууц үгээ шинэчлэх"
+
+#: contrib/admin/templatetags/admin_list.py:239
+msgid "All dates"
+msgstr "Бүх огноо"
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s"
+msgstr "%s-ийг сонго"
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s to change"
+msgstr "%s-ийг өөрчлөхөөр сонго"
+
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
+msgid "site"
+msgstr "сайт"
+
+#: contrib/admin/views/template.py:40
+msgid "template"
+msgstr "загвар"
+
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
+msgid "tag:"
+msgstr "шошго:"
+
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
+msgid "filter:"
+msgstr "шүүлтүүр:"
+
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
+msgid "view:"
+msgstr "харах:"
+
+#: contrib/admindocs/views.py:190
+#, python-format
+msgid "App %r not found"
+msgstr "%r програм олдсонгүй"
+
+#: contrib/admindocs/views.py:197
+#, python-format
+msgid "Model %(model_name)r not found in app %(app_label)r"
+msgstr "  %(app_label)r програмд %(model_name)r загвар олдсонгүй"
+
+#: contrib/admindocs/views.py:209
+#, python-format
+msgid "the related `%(app_label)s.%(data_type)s` object"
+msgstr "холбогдох `%(app_label)s.%(data_type)s`объект"
+
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
+msgid "model:"
+msgstr "загвар:"
+
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
+#, python-format
+msgid "related `%(app_label)s.%(object_name)s` objects"
+msgstr "холбогдох `%(app_label)s.%(object_name)s` объектууд"
+
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
+#, python-format
+msgid "all %s"
+msgstr "бүх %s"
+
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
+#, python-format
+msgid "number of %s"
+msgstr "%s-ийн тоо"
+
+#: contrib/admindocs/views.py:271
+#, python-format
+msgid "Fields on %s objects"
+msgstr " %s объектийн нөхөх хэсгүүд"
+
+#: contrib/admindocs/views.py:361
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s нь url хэлбэрийн объект биш байна"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
+msgid "Documentation bookmarklets"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p class=\"help\">Bookmarklet суулгахын тулд холбоосыг bookmark-ийн\n"
+" хэрэгслийн мөрт аваачих буюу холбоосон дээр хулганы баруун\n"
+" товчлуураар дарж bookmark-даа нэмнэ. Ингэснээр та сайтын аль ч\n"
+" хуудаснаас bookmarklet-ээ сонгох боломжтой болно.  Зарим\n"
+" bookmarklet-ийн хувьд та \"дотоод\" гэж тодорхойлогдсон компьютерээс\n"
+" сайт руу орох шаардлагатай болдог (компьютер тань \"дотоод\" мөн\n"
+" эсэхийг мэдэхгүй байгаа бол системийн удирдлагаасаа асууна уу).</p>\n"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
+msgid "Documentation for this page"
+msgstr "Энэ хуудасны баримтжуулалт"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+"Таныг ямар ч хамаагүй хуудаснаас тухайн хуудсыг гаргаж байгаа "
+"баримтжуулалтанд аваачна."
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
+msgid "Show object ID"
+msgstr "Объектийн ID-ийг харуулах"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"Нэг объект харуулж буй хуудаснуудын агуулгын төрөл болоод давтагдахгүй ID-"
+"ийг харуулна."
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
+msgid "Edit this object (current window)"
+msgstr "Энэ объектийг засварлах (одоо хэрэглэж буй цонх)"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr "Нэг объект харуулж буй хуудаснуудын удирдлагын хуудсанд аваачна."
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
+msgid "Edit this object (new window)"
+msgstr "Энэ объектийг засварлах (шинэ цонх)"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
+msgid "As above, but opens the admin page in a new window."
+msgstr "Дээрхийн нэгэн адил ч удирдлагын хуудсыг шинэ цонхонд нээнэ."
+
+#: contrib/auth/admin.py:29
+msgid "Personal info"
+msgstr "Хувийн мэдээлэл"
+
+#: contrib/auth/admin.py:30
+msgid "Permissions"
+msgstr "Зөвшөөрөл"
+
+#: contrib/auth/admin.py:31
+msgid "Important dates"
+msgstr "Чухал огноо"
+
+#: contrib/auth/admin.py:32
+msgid "Groups"
+msgstr "Бүлгүүд"
+
+#: contrib/auth/admin.py:114
+msgid "Password changed successfully."
+msgstr "Нууц үг амжилттай өөрчлөгдлөө."
+
+#: contrib/auth/admin.py:124
+#, python-format
+msgid "Change password: %s"
+msgstr "Нууц үг өөрчлөх: %s"
+
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Хэрэглэгчийн нэр"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+#, fuzzy
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr ""
+"Зайлшгүй. 30 буюу түүнээс цөөн тэмдэгт. Зөвхөн стандарт тэмдэгт хэрэглэнэ "
+"(үсэг, тоо, нэмэлт тэмдэг)"
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+#, fuzzy
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Энэ нь зөвхөн үсэг, тоо, нэмэлт тэмдэгүүдийг л агуулсан байх хэрэгтэй."
+
+#: contrib/auth/forms.py:18
+msgid "Password confirmation"
+msgstr "Нууц үгийн баталгаа"
+
+#: contrib/auth/forms.py:31
+msgid "A user with that username already exists."
+msgstr "Ийм хэрэглэгчийн нэртэй хэрэглэгч өмнө нь бүртгүүлсэн байна."
+
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
+msgid "The two password fields didn't match."
+msgstr "Хоёр нууц үг зөрж байна."
+
+#: contrib/auth/forms.py:83
+msgid "This account is inactive."
+msgstr "Энэ бүртгэл идэвхгүй байна."
+
+#: contrib/auth/forms.py:88
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"Та вэб хөтчөө cookie ажиллахаар тохируулаагүй юм шиг байна. Нэвтрэхэд cookie "
+"шаардлагатай байдаг."
+
+#: contrib/auth/forms.py:101
+msgid "E-mail"
+msgstr "Цахим шуудан"
+
+#: contrib/auth/forms.py:110
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Цахим шуудангийн энэ хаягт хэрэглэгчийн бүртгэл байхгүй байна. Та "
+"бүртгүүлсэн гэдэгтээ итгэлтэй байна уу?"
+
+#: contrib/auth/forms.py:136
+#, python-format
+msgid "Password reset on %s"
+msgstr "Нууц үг %s дээр хийгдсэн"
+
+#: contrib/auth/forms.py:145
+msgid "New password confirmation"
+msgstr "Шинэ нууц үгийн баталгаа"
+
+#: contrib/auth/forms.py:178
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "Хуучин нууц үгээ буруу оруулсан байна. Ахин оруулна уу."
+
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
+msgid "name"
+msgstr "нэр"
+
+#: contrib/auth/models.py:68
+msgid "codename"
+msgstr "Код"
+
+#: contrib/auth/models.py:72
+msgid "permission"
+msgstr "зөвшөөрөл"
+
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
+msgid "permissions"
+msgstr "зөвшөөрлүүд"
+
+#: contrib/auth/models.py:98
+msgid "group"
+msgstr "бүлэг "
+
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
+msgid "groups"
+msgstr "бүлгүүд"
+
+#: contrib/auth/models.py:196
+msgid "username"
+msgstr "хэрэглэгчийн нэр"
+
+#: contrib/auth/models.py:196
+#, fuzzy
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Зайлшгүй. 30 буюу түүнээс цөөн тэмдэгт. Зөвхөн стандарт тэмдэгт хэрэглэнэ "
+"(үсэг, тоо, нэмэлт тэмдэг)"
+
+#: contrib/auth/models.py:197
+msgid "first name"
+msgstr "нэр"
+
+#: contrib/auth/models.py:198
+msgid "last name"
+msgstr "овог"
+
+#: contrib/auth/models.py:199
+msgid "e-mail address"
+msgstr "цахим шуудангийн хаяг"
+
+#: contrib/auth/models.py:200
+msgid "password"
+msgstr "нууц үг"
+
+#: contrib/auth/models.py:200
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+"Нууц үгийнхээ хэлбэр </a>-ийг өөрчлөхдөө '[algo]$[salt]$[hexdigest]' буюу <a "
+"href=\"password/\"> хэрэглэнэ үү."
+
+#: contrib/auth/models.py:201
+msgid "staff status"
+msgstr "Хэрэглэгчдийн төлөв"
+
+#: contrib/auth/models.py:201
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+"Уг удирдлагын сайт руу хэрэглэгч нэвтрэх боломжтой эсэхийг тодорхойлно."
+
+#: contrib/auth/models.py:202
+msgid "active"
+msgstr "идэвхтэй"
+
+#: contrib/auth/models.py:202
+msgid ""
+"Designates whether this user should be treated as active. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Энэ хэрэглэгчийг идэвхтэй болгох эсэхийг тодорхойлно. Бүртгэлийг нь устгахын "
+"оронд сонгохгүй байхад л хангалттай."
+
+#: contrib/auth/models.py:203
+msgid "superuser status"
+msgstr "Удирдлагын төлөв"
+
+#: contrib/auth/models.py:203
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr "Энэ хэрэглэгчид бүх зөвшөөрөл байгааг ил тод харуулалгүй тодорхойлно. "
+
+#: contrib/auth/models.py:204
+msgid "last login"
+msgstr "сүүлд нэвтэрсэн"
+
+#: contrib/auth/models.py:205
+msgid "date joined"
+msgstr "бүртгүүлсэн огноо"
+
+#: contrib/auth/models.py:207
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"Энэ хэрэглэгч зөвшөөрлийг гар ажиллагаагаар авахаас гадна өөрийн байгаа "
+"бүлэг бүртээ зөвшөөрөл олгуулна."
+
+#: contrib/auth/models.py:208
+msgid "user permissions"
+msgstr "хэрэглэгчийн зөвшөөрөл"
+
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
+msgid "user"
+msgstr "хэрэглэгч "
+
+#: contrib/auth/models.py:213
+msgid "users"
+msgstr "хэрэглэгчид"
+
+#: contrib/auth/models.py:394
+msgid "message"
+msgstr "мэдээлэл"
+
+#: contrib/auth/views.py:79
+msgid "Logged out"
+msgstr "Гарсан"
+
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
+msgid "Enter a valid e-mail address."
+msgstr "Хүчинтэй цахим шуудангийн хаяг оруул"
+
+#: contrib/comments/admin.py:12
+msgid "Content"
+msgstr "Агуулга"
+
+#: contrib/comments/admin.py:15
+msgid "Metadata"
+msgstr "Мета өгөгдөл"
+
+#: contrib/comments/admin.py:40
+#, fuzzy
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "өөрчлөлтгүй хуудас"
+msgstr[1] "өөрчлөлтгүй хуудас"
+
+#: contrib/comments/admin.py:41
+#, fuzzy
+msgid "Flag selected comments"
+msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/admin.py:46
+#, fuzzy
+msgid "Approve selected comments"
+msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
+
+#: contrib/comments/admin.py:50
+#, fuzzy
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "устлаа"
+msgstr[1] "устлаа"
+
+#: contrib/comments/admin.py:51
+#, fuzzy
+msgid "Remove selected comments"
+msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/feeds.py:13
+#, fuzzy, python-format
+msgid "%(site_name)s comments"
+msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
+
+#: contrib/comments/feeds.py:23
+#, fuzzy, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr "%(site_name)s гэсэн хэрэглэгчийн бүртгэлд "
+
+#: contrib/comments/forms.py:93
+msgid "Name"
+msgstr "Нэр"
+
+#: contrib/comments/forms.py:94
+msgid "Email address"
+msgstr "Цахим шуудангийн хаяг"
+
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
+#: contrib/comments/forms.py:96
+msgid "Comment"
+msgstr "Санал сэтгэгдэл"
+
+#: contrib/comments/forms.py:175
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Амаа мэдээрэй! %s гэсэн үг оруулах хориотой."
+msgstr[1] "Амаа мэдээрэй! %s гэсэн үг оруулах хориотой."
+
+#: contrib/comments/forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr ""
+"Та энэ хэсэгт ямар нэг зүйл оруулбал санал сэтгэгдэлийг тань спам гэж үзэх "
+"болно."
+
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
+msgid "content type"
+msgstr "агуулгын төрөл"
+
+#: contrib/comments/models.py:24
+msgid "object ID"
+msgstr "объектийн ID"
+
+#: contrib/comments/models.py:52
+msgid "user's name"
+msgstr "хэрэглэгчийн нэр"
+
+#: contrib/comments/models.py:53
+msgid "user's email address"
+msgstr "хэрэглэгчийн цахим шуудангийн хаяг"
+
+#: contrib/comments/models.py:54
+msgid "user's URL"
+msgstr "хэрэглэгчийн URL"
+
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
+msgid "comment"
+msgstr "санал сэтгэгдэл "
+
+#: contrib/comments/models.py:59
+msgid "date/time submitted"
+msgstr "оруулсан огноо/цаг"
+
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "IP хаяг"
+
+#: contrib/comments/models.py:61
+msgid "is public"
+msgstr "нийтийн"
+
+#: contrib/comments/models.py:62
+msgid ""
+"Uncheck this box to make the comment effectively disappear from the site."
+msgstr ""
+"Сайтаас санал сэтгэгдлийг байнга устгахын тулд энэ хайрцагны өмнөх чагтыг "
+"авна уу."
+
+#: contrib/comments/models.py:64
+msgid "is removed"
+msgstr "устлаа"
+
+#: contrib/comments/models.py:65
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+"Ирсэн санал сэтгэгдэл зүй зохисгүй бол энэ хайрцгийг чагтла. Ингэснээр "
+"тухайн санал сэтгэгдлийн оронд \"Энэ санал сэтгэгдлийг устгалаа\" гэсэн "
+"бичиг гарч ирнэ."
+
+#: contrib/comments/models.py:77
+#, fuzzy
+msgid "comments"
+msgstr "санал сэтгэгдэл "
+
+#: contrib/comments/models.py:119
+msgid ""
+"This comment was posted by an authenticated user and thus the name is read-"
+"only."
+msgstr ""
+"Энэ санал сэтгэгдлийг баталгаажсан хэрэглэгч оруулсан учир зөвхөн нэрийг нь "
+"харж болно."
+
+#: contrib/comments/models.py:128
+msgid ""
+"This comment was posted by an authenticated user and thus the email is read-"
+"only."
+msgstr ""
+"Энэ санал сэтгэгдлийг баталгаажсан хэрэглэгч оруулсан учир зөвхөн цахим "
+"шууданг нь харж болно."
+
+#: contrib/comments/models.py:153
+#, python-format
+msgid ""
+"Posted by %(user)s at %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+msgstr ""
+"%(date)s-д %(user)s дараах санал сэтгэгдлийг үлдээжээ\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+
+#: contrib/comments/models.py:170
+#, fuzzy
+msgid "flag"
+msgstr "өөрчлөлтгүй хуудас"
+
+#: contrib/comments/models.py:171
+#, fuzzy
+msgid "date"
+msgstr "Өдөр харгалзахгүй"
+
+#: contrib/comments/models.py:181
+#, fuzzy
+msgid "comment flag"
+msgstr "санал сэтгэгдэл "
+
+#: contrib/comments/models.py:182
+#, fuzzy
+msgid "comment flags"
+msgstr "санал сэтгэгдэл "
+
+#: contrib/comments/templates/comments/approve.html:4
+#, fuzzy
+msgid "Approve a comment"
+msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
+
+#: contrib/comments/templates/comments/approve.html:7
+msgid "Really make this comment public?"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:12
+msgid "Approve"
+msgstr ""
+
+#: contrib/comments/templates/comments/approved.html:4
+#, fuzzy
+msgid "Thanks for approving"
+msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!"
+
+#: contrib/comments/templates/comments/approved.html:7
+#: contrib/comments/templates/comments/deleted.html:7
+#: contrib/comments/templates/comments/flagged.html:7
+msgid ""
+"Thanks for taking the time to improve the quality of discussion on our site"
+msgstr ""
+
+#: contrib/comments/templates/comments/delete.html:4
+#, fuzzy
+msgid "Remove a comment"
+msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
+
+#: contrib/comments/templates/comments/delete.html:7
+msgid "Really remove this comment?"
+msgstr ""
+
+#: contrib/comments/templates/comments/deleted.html:4
+#, fuzzy
+msgid "Thanks for removing"
+msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!"
+
+#: contrib/comments/templates/comments/flag.html:4
+msgid "Flag this comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:7
+msgid "Really flag this comment?"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:12
+#, fuzzy
+msgid "Flag"
+msgstr "Малага"
+
+#: contrib/comments/templates/comments/flagged.html:4
+#, fuzzy
+msgid "Thanks for flagging"
+msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!"
+
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
+#, fuzzy
+msgid "Post"
+msgstr "-р"
+
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
+#, fuzzy
+msgid "Preview"
+msgstr "харах:"
+
+#: contrib/comments/templates/comments/posted.html:4
+msgid "Thanks for commenting"
+msgstr ""
+
+#: contrib/comments/templates/comments/posted.html:7
+msgid "Thank you for your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:4
+#: contrib/comments/templates/comments/preview.html:13
+msgid "Preview your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:11
+#, fuzzy
+msgid "Please correct the error below"
+msgid_plural "Please correct the errors below"
+msgstr[0] "Доорх алдааг засна уу."
+msgstr[1] "Доорх алдаануудыг засна уу."
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "Post your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:16
+#, fuzzy
+msgid "or make changes"
+msgstr "Өөрчилсөн зүйл байхгүй байна."
+
+#: contrib/contenttypes/models.py:77
+msgid "python model class name"
+msgstr "пайтоны загвар ангилалын нэр"
+
+#: contrib/contenttypes/models.py:82
+msgid "content types"
+msgstr "агуулгын төрлүүд"
+
+#: contrib/flatpages/admin.py:9
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Жишээ: '/about/contact/'. Хөтлөх буюу зам заах ташуу зураас байх хэрэгтэй."
+
+#: contrib/flatpages/admin.py:11
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Энэ нь зөвхөн үсэг, тоо, нэмэлт тэмдэг, хэвтээ зураас эсвэл ташуу зураас "
+"агуулсан байх ёстой."
+
+#: contrib/flatpages/admin.py:22
+msgid "Advanced options"
+msgstr "Дээд хэрэглээний сонголтууд"
+
+#: contrib/flatpages/models.py:8
+msgid "title"
+msgstr "гарчиг "
+
+#: contrib/flatpages/models.py:9
+msgid "content"
+msgstr "агуулга"
+
+#: contrib/flatpages/models.py:10
+msgid "enable comments"
+msgstr "санал сэтгэгдэл үлдээх боломжтой болгох"
+
+#: contrib/flatpages/models.py:11
+msgid "template name"
+msgstr "загварын нэр"
+
+#: contrib/flatpages/models.py:12
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Жишээ: 'flatpages/contact_page.html'. Хэрэв ийм зүйл гарч ирэхгүй бол систем "
+"'flatpages/default.html'-ийг хэрэглэнэ."
+
+#: contrib/flatpages/models.py:13
+msgid "registration required"
+msgstr "бүртгэл хийх хэрэгтэй"
+
+#: contrib/flatpages/models.py:13
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"Үүнийг чагтлавал зөвхөн сайтад нэвтэрсэн хэрэглэгч сайтыг харах боломжтой "
+"болно."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "өөрчлөлтгүй хуудас"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "өөрчлөлтгүй хуудаснууд"
+
+#: contrib/formtools/wizard.py:140
+msgid ""
+"We apologize, but your form has expired. Please continue filling out the "
+"form from this page."
+msgstr ""
+"Уучлаарай, таны маягт хүчингүй болсон байна. Энэ хуудаснаас маягт бөглөнө үү."
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:270
+#, fuzzy
+msgid "Point"
+msgstr "сар"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr ""
+
+#: contrib/gis/forms/fields.py:17
+msgid "No geometry value provided."
+msgstr "Дүрс оруулаагүй байна."
+
+#: contrib/gis/forms/fields.py:18
+msgid "Invalid geometry value."
+msgstr "Оруулах боломжгүй дүрс"
+
+#: contrib/gis/forms/fields.py:19
+msgid "Invalid geometry type."
+msgstr "Оруулах боломжгүй дүрсийн төрөл"
+
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "th"
+msgstr "-р"
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "st"
+msgstr "-р"
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "nd"
+msgstr "-р"
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "rd"
+msgstr "-р"
+
+#: contrib/humanize/templatetags/humanize.py:51
+#, python-format
+msgid "%(value).1f million"
+msgid_plural "%(value).1f million"
+msgstr[0] "%(value).1f сая"
+msgstr[1] "%(value).1f сая"
+
+#: contrib/humanize/templatetags/humanize.py:54
+#, python-format
+msgid "%(value).1f billion"
+msgid_plural "%(value).1f billion"
+msgstr[0] "%(value).1f тэр бум"
+msgstr[1] "%(value).1f тэр бум"
+
+#: contrib/humanize/templatetags/humanize.py:57
+#, python-format
+msgid "%(value).1f trillion"
+msgid_plural "%(value).1f trillion"
+msgstr[0] "%(value).1f их наяд"
+msgstr[1] "%(value).1f их наяд"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "one"
+msgstr "нэг "
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "two"
+msgstr "хоёр"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "three"
+msgstr "гурав"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "four"
+msgstr "дөрөв"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "five"
+msgstr "тав"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "six"
+msgstr "зургаа"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "seven"
+msgstr "долоо"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "eight"
+msgstr "найм"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "nine"
+msgstr "ес"
+
+#: contrib/humanize/templatetags/humanize.py:93
+msgid "today"
+msgstr "өнөөдөр"
+
+#: contrib/humanize/templatetags/humanize.py:95
+msgid "tomorrow"
+msgstr "маргааш"
+
+#: contrib/humanize/templatetags/humanize.py:97
+msgid "yesterday"
+msgstr "өчигдөр"
+
+#: contrib/localflavor/ar/forms.py:28
+msgid "Enter a postal code in the format NNNN or ANNNNAAA."
+msgstr "Шуудангийн дугаараа NNNN буюу ANNNNAAA хэлбэрээр оруулна уу. "
+
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
+msgid "This field requires only numbers."
+msgstr "Энэ хэсэгт зөвхөн тоо оруулна."
+
+#: contrib/localflavor/ar/forms.py:51
+msgid "This field requires 7 or 8 digits."
+msgstr "Энэ хэсэгт зөвхөн 7-8 оронтой тоо оруулна."
+
+#: contrib/localflavor/ar/forms.py:80
+msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
+msgstr "CUIT-ээ XX-XXXXXXXX-X эсвэл XXXXXXXXXXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/ar/forms.py:81
+msgid "Invalid CUIT."
+msgstr "Хүчингүй CUIT байна."
+
+#: contrib/localflavor/at/at_states.py:5
+msgid "Burgenland"
+msgstr "Бургенланд"
+
+#: contrib/localflavor/at/at_states.py:6
+msgid "Carinthia"
+msgstr "Каринтиа"
+
+#: contrib/localflavor/at/at_states.py:7
+msgid "Lower Austria"
+msgstr "Доод Австри"
+
+#: contrib/localflavor/at/at_states.py:8
+msgid "Upper Austria"
+msgstr "Дээд Австри"
+
+#: contrib/localflavor/at/at_states.py:9
+msgid "Salzburg"
+msgstr "Зальцбург"
+
+#: contrib/localflavor/at/at_states.py:10
+msgid "Styria"
+msgstr "Стириа"
+
+#: contrib/localflavor/at/at_states.py:11
+msgid "Tyrol"
+msgstr "Тирол"
+
+#: contrib/localflavor/at/at_states.py:12
+msgid "Vorarlberg"
+msgstr "Ворарлберг"
+
+#: contrib/localflavor/at/at_states.py:13
+msgid "Vienna"
+msgstr "Венн"
+
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
+msgid "Enter a zip code in the format XXXX."
+msgstr "Шуудангийн индексээ XXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/at/forms.py:48
+msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
+msgstr ""
+"Австрийн нийгмийн хамгааллын дугаараа XXXX XXXXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/au/forms.py:17
+msgid "Enter a 4 digit post code."
+msgstr "Шуудангийн 4 оронтой дугаараа оруулна уу."
+
+#: contrib/localflavor/br/forms.py:22
+msgid "Enter a zip code in the format XXXXX-XXX."
+msgstr "Шуудангийн индексээ XXXXX-XXX хэлбэрээр оруулна уу. "
+
+#: contrib/localflavor/br/forms.py:31
+msgid "Phone numbers must be in XX-XXXX-XXXX format."
+msgstr "Утасны дугаараа XX-XXXX-XXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/br/forms.py:59
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
+msgstr "Бразилийн мужаа сонгоно уу. Энэ нь байгаа муж биш байна."
+
+#: contrib/localflavor/br/forms.py:95
+msgid "Invalid CPF number."
+msgstr "CPF дугаар хүчингүй байна."
+
+#: contrib/localflavor/br/forms.py:96
+msgid "This field requires at most 11 digits or 14 characters."
+msgstr ""
+"Энэ хэсэгт 11-ээс илүүгүй оронтой тоо буюу 14-өөс илүүгүй тэмдэгт оруулна уу."
+
+#: contrib/localflavor/br/forms.py:135
+msgid "Invalid CNPJ number."
+msgstr "CNPJ дугаар хүчингүй байна."
+
+#: contrib/localflavor/br/forms.py:137
+msgid "This field requires at least 14 digits"
+msgstr "Энэ хэсэгт наад зах нь 14 оронтой тоо оруулна уу."
+
+#: contrib/localflavor/ca/forms.py:25
+msgid "Enter a postal code in the format XXX XXX."
+msgstr "Шуудангийн дугаараа XXX XXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/ca/forms.py:96
+msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
+msgstr "Канадын нийгмийн даатгалын дугаараа XXX-XXX-XXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/ch/ch_states.py:5
+msgid "Aargau"
+msgstr "Ааргау"
+
+#: contrib/localflavor/ch/ch_states.py:6
+msgid "Appenzell Innerrhoden"
+msgstr "Аппензелл Иннерходен "
+
+#: contrib/localflavor/ch/ch_states.py:7
+msgid "Appenzell Ausserrhoden"
+msgstr "Аппензелл Ауссеррходен"
+
+#: contrib/localflavor/ch/ch_states.py:8
+msgid "Basel-Stadt"
+msgstr "Басел-Стат"
+
+#: contrib/localflavor/ch/ch_states.py:9
+msgid "Basel-Land"
+msgstr "Басел-Ланд"
+
+#: contrib/localflavor/ch/ch_states.py:10
+msgid "Berne"
+msgstr "Берн"
+
+#: contrib/localflavor/ch/ch_states.py:11
+msgid "Fribourg"
+msgstr "Фрибург"
+
+#: contrib/localflavor/ch/ch_states.py:12
+msgid "Geneva"
+msgstr "Женев"
+
+#: contrib/localflavor/ch/ch_states.py:13
+msgid "Glarus"
+msgstr "Гларус"
+
+#: contrib/localflavor/ch/ch_states.py:14
+msgid "Graubuenden"
+msgstr "Граубенден"
+
+#: contrib/localflavor/ch/ch_states.py:15
+msgid "Jura"
+msgstr "Юра"
+
+#: contrib/localflavor/ch/ch_states.py:16
+msgid "Lucerne"
+msgstr "Лусерн"
+
+#: contrib/localflavor/ch/ch_states.py:17
+msgid "Neuchatel"
+msgstr "Неучател"
+
+#: contrib/localflavor/ch/ch_states.py:18
+msgid "Nidwalden"
+msgstr "Нидвалден"
+
+#: contrib/localflavor/ch/ch_states.py:19
+msgid "Obwalden"
+msgstr "Обвалден"
+
+#: contrib/localflavor/ch/ch_states.py:20
+msgid "Schaffhausen"
+msgstr "Шафхаусен"
+
+#: contrib/localflavor/ch/ch_states.py:21
+msgid "Schwyz"
+msgstr "Швиз"
+
+#: contrib/localflavor/ch/ch_states.py:22
+msgid "Solothurn"
+msgstr "Солотурн"
+
+#: contrib/localflavor/ch/ch_states.py:23
+msgid "St. Gallen"
+msgstr "Сант-Галлен"
+
+#: contrib/localflavor/ch/ch_states.py:24
+msgid "Thurgau"
+msgstr "Тургау"
+
+#: contrib/localflavor/ch/ch_states.py:25
+msgid "Ticino"
+msgstr "Тикино"
+
+#: contrib/localflavor/ch/ch_states.py:26
+msgid "Uri"
+msgstr "Ури"
+
+#: contrib/localflavor/ch/ch_states.py:27
+msgid "Valais"
+msgstr "Валаис"
+
+#: contrib/localflavor/ch/ch_states.py:28
+msgid "Vaud"
+msgstr "Вауд"
+
+#: contrib/localflavor/ch/ch_states.py:29
+msgid "Zug"
+msgstr "Зуг"
+
+#: contrib/localflavor/ch/ch_states.py:30
+msgid "Zurich"
+msgstr "Зурик"
+
+#: contrib/localflavor/ch/forms.py:65
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr ""
+"Щвейцарийн үнэмлэх юм уу пасспортныхоо дугаарыг X1234567<0 эсвэл 1234567890 "
+"хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/cl/forms.py:30
+msgid "Enter a valid Chilean RUT."
+msgstr "Чилийн RUT-ээ оруулна уу."
+
+#: contrib/localflavor/cl/forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr "Чилийн RUT-ээ XX.XXX.XXX-X хэлбэрээр оруулна уу. "
+
+#: contrib/localflavor/cl/forms.py:32
+msgid "The Chilean RUT is not valid."
+msgstr "Чилийн RUT хүчингүй байна."
+
+#: contrib/localflavor/cz/cz_regions.py:8
+msgid "Prague"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:9
+msgid "Central Bohemian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:10
+msgid "South Bohemian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:11
+#, fuzzy
+msgid "Pilsen Region"
+msgstr "Зилина муж"
+
+#: contrib/localflavor/cz/cz_regions.py:12
+msgid "Carlsbad Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:13
+#, fuzzy
+msgid "Usti Region"
+msgstr "Косиз муж"
+
+#: contrib/localflavor/cz/cz_regions.py:14
+#, fuzzy
+msgid "Liberec Region"
+msgstr "Тренкин муж"
+
+#: contrib/localflavor/cz/cz_regions.py:15
+#, fuzzy
+msgid "Hradec Region"
+msgstr "Тренкин муж"
+
+#: contrib/localflavor/cz/cz_regions.py:16
+#, fuzzy
+msgid "Pardubice Region"
+msgstr "Косиз муж"
+
+#: contrib/localflavor/cz/cz_regions.py:17
+#, fuzzy
+msgid "Vysocina Region"
+msgstr "Зилина муж"
+
+#: contrib/localflavor/cz/cz_regions.py:18
+msgid "South Moravian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:19
+msgid "Olomouc Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:20
+#, fuzzy
+msgid "Zlin Region"
+msgstr "Зилина муж"
+
+#: contrib/localflavor/cz/cz_regions.py:21
+msgid "Moravian-Silesian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
+msgid "Enter a postal code in the format XXXXX or XXX XX."
+msgstr "Шуудангийн дугаараа XXXXX буюу XXX XX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/cz/forms.py:48
+#, fuzzy
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr ""
+"Татварын дугаараа  XXX-XXX-XX-XX буюу XX-XX-XXX-XXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:50
+#, fuzzy
+msgid "Enter a valid birth number."
+msgstr "VAT дугаараа оруулна уу."
+
+#: contrib/localflavor/cz/forms.py:107
+#, fuzzy
+msgid "Enter a valid IC number."
+msgstr "VAT дугаараа оруулна уу."
+
+#: contrib/localflavor/de/de_states.py:5
+msgid "Baden-Wuerttemberg"
+msgstr "Баден-Вюртемберг"
+
+#: contrib/localflavor/de/de_states.py:6
+msgid "Bavaria"
+msgstr "Бавариа"
+
+#: contrib/localflavor/de/de_states.py:7
+msgid "Berlin"
+msgstr "Берлин"
+
+#: contrib/localflavor/de/de_states.py:8
+msgid "Brandenburg"
+msgstr "Бранденбург"
+
+#: contrib/localflavor/de/de_states.py:9
+msgid "Bremen"
+msgstr "Бремен"
+
+#: contrib/localflavor/de/de_states.py:10
+msgid "Hamburg"
+msgstr "Хамбург"
+
+#: contrib/localflavor/de/de_states.py:11
+msgid "Hessen"
+msgstr "Хессен"
+
+#: contrib/localflavor/de/de_states.py:12
+msgid "Mecklenburg-Western Pomerania"
+msgstr "Мекленбург-Баруун Помераниа"
+
+#: contrib/localflavor/de/de_states.py:13
+msgid "Lower Saxony"
+msgstr "Саксония"
+
+#: contrib/localflavor/de/de_states.py:14
+msgid "North Rhine-Westphalia"
+msgstr "Хойд Рейн-Вестфалиа"
+
+#: contrib/localflavor/de/de_states.py:15
+msgid "Rhineland-Palatinate"
+msgstr "Рейнланд-Палатинет"
+
+#: contrib/localflavor/de/de_states.py:16
+msgid "Saarland"
+msgstr "Саарланд"
+
+#: contrib/localflavor/de/de_states.py:17
+msgid "Saxony"
+msgstr "Саксония"
+
+#: contrib/localflavor/de/de_states.py:18
+msgid "Saxony-Anhalt"
+msgstr "Саксония-Анхалт"
+
+#: contrib/localflavor/de/de_states.py:19
+msgid "Schleswig-Holstein"
+msgstr "Шлесвиг-Холстейн"
+
+#: contrib/localflavor/de/de_states.py:20
+msgid "Thuringia"
+msgstr "Турингиа"
+
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
+msgid "Enter a zip code in the format XXXXX."
+msgstr "Шуудангийн индексээ XXXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/de/forms.py:42
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr ""
+"Германы үнэмлэхний дугаарыг XXXXXXXXXXX-XXXXXXX-XXXXXXX-X хэлбэрээр оруулна "
+"уу."
+
+#: contrib/localflavor/es/es_provinces.py:5
+msgid "Arava"
+msgstr "Арава"
+
+#: contrib/localflavor/es/es_provinces.py:6
+msgid "Albacete"
+msgstr "Албасет"
+
+#: contrib/localflavor/es/es_provinces.py:7
+msgid "Alacant"
+msgstr "Алакант"
+
+#: contrib/localflavor/es/es_provinces.py:8
+msgid "Almeria"
+msgstr "Алмериа"
+
+#: contrib/localflavor/es/es_provinces.py:9
+msgid "Avila"
+msgstr "Авила"
+
+#: contrib/localflavor/es/es_provinces.py:10
+msgid "Badajoz"
+msgstr "Бадажоз"
+
+#: contrib/localflavor/es/es_provinces.py:11
+msgid "Illes Balears"
+msgstr "Иллес Балеарс"
+
+#: contrib/localflavor/es/es_provinces.py:12
+msgid "Barcelona"
+msgstr "Барселон"
+
+#: contrib/localflavor/es/es_provinces.py:13
+msgid "Burgos"
+msgstr "Бургоз"
+
+#: contrib/localflavor/es/es_provinces.py:14
+msgid "Caceres"
+msgstr "Касерес"
+
+#: contrib/localflavor/es/es_provinces.py:15
+msgid "Cadiz"
+msgstr "Кадиз"
+
+#: contrib/localflavor/es/es_provinces.py:16
+msgid "Castello"
+msgstr "Кастелло"
+
+#: contrib/localflavor/es/es_provinces.py:17
+msgid "Ciudad Real"
+msgstr "Сиудад Рийл"
+
+#: contrib/localflavor/es/es_provinces.py:18
+msgid "Cordoba"
+msgstr "Кордоба"
+
+#: contrib/localflavor/es/es_provinces.py:19
+msgid "A Coruna"
+msgstr "А Коруна"
+
+#: contrib/localflavor/es/es_provinces.py:20
+msgid "Cuenca"
+msgstr "Куэнса"
+
+#: contrib/localflavor/es/es_provinces.py:21
+msgid "Girona"
+msgstr "Гирона"
+
+#: contrib/localflavor/es/es_provinces.py:22
+msgid "Granada"
+msgstr "Гранада"
+
+#: contrib/localflavor/es/es_provinces.py:23
+msgid "Guadalajara"
+msgstr "Гуадалажара"
+
+#: contrib/localflavor/es/es_provinces.py:24
+msgid "Guipuzkoa"
+msgstr "Гипузкоа"
+
+#: contrib/localflavor/es/es_provinces.py:25
+msgid "Huelva"
+msgstr "Хуелва"
+
+#: contrib/localflavor/es/es_provinces.py:26
+msgid "Huesca"
+msgstr "Хуеска"
+
+#: contrib/localflavor/es/es_provinces.py:27
+msgid "Jaen"
+msgstr "Жен"
+
+#: contrib/localflavor/es/es_provinces.py:28
+msgid "Leon"
+msgstr "Леон"
+
+#: contrib/localflavor/es/es_provinces.py:29
+msgid "Lleida"
+msgstr "Ллейда"
+
+#: contrib/localflavor/es/es_provinces.py:30
+#: contrib/localflavor/es/es_regions.py:17
+msgid "La Rioja"
+msgstr "Ла Риожа"
+
+#: contrib/localflavor/es/es_provinces.py:31
+msgid "Lugo"
+msgstr "Луго"
+
+#: contrib/localflavor/es/es_provinces.py:32
+#: contrib/localflavor/es/es_regions.py:18
+msgid "Madrid"
+msgstr "Мадрид"
+
+#: contrib/localflavor/es/es_provinces.py:33
+msgid "Malaga"
+msgstr "Малага"
+
+#: contrib/localflavor/es/es_provinces.py:34
+msgid "Murcia"
+msgstr "Мурсиа"
+
+#: contrib/localflavor/es/es_provinces.py:35
+msgid "Navarre"
+msgstr "Наварре"
+
+#: contrib/localflavor/es/es_provinces.py:36
+msgid "Ourense"
+msgstr "Оуренс"
+
+#: contrib/localflavor/es/es_provinces.py:37
+msgid "Asturias"
+msgstr "Астуриас"
+
+#: contrib/localflavor/es/es_provinces.py:38
+msgid "Palencia"
+msgstr "Паленсиа"
+
+#: contrib/localflavor/es/es_provinces.py:39
+msgid "Las Palmas"
+msgstr "Лас Палмас"
+
+#: contrib/localflavor/es/es_provinces.py:40
+msgid "Pontevedra"
+msgstr "Понтеведра"
+
+#: contrib/localflavor/es/es_provinces.py:41
+msgid "Salamanca"
+msgstr "Саламанка"
+
+#: contrib/localflavor/es/es_provinces.py:42
+msgid "Santa Cruz de Tenerife"
+msgstr "Санта Круз дэ Тенериф"
+
+#: contrib/localflavor/es/es_provinces.py:43
+#: contrib/localflavor/es/es_regions.py:11
+msgid "Cantabria"
+msgstr "Кантабриа"
+
+#: contrib/localflavor/es/es_provinces.py:44
+msgid "Segovia"
+msgstr "Сеговиа"
+
+#: contrib/localflavor/es/es_provinces.py:45
+msgid "Seville"
+msgstr "Севилль"
+
+#: contrib/localflavor/es/es_provinces.py:46
+msgid "Soria"
+msgstr "Сориа"
+
+#: contrib/localflavor/es/es_provinces.py:47
+msgid "Tarragona"
+msgstr "Таррагона"
+
+#: contrib/localflavor/es/es_provinces.py:48
+msgid "Teruel"
+msgstr "Теруел"
+
+#: contrib/localflavor/es/es_provinces.py:49
+msgid "Toledo"
+msgstr "Толедо"
+
+#: contrib/localflavor/es/es_provinces.py:50
+msgid "Valencia"
+msgstr "Валенсиа"
+
+#: contrib/localflavor/es/es_provinces.py:51
+msgid "Valladolid"
+msgstr "Валладолид"
+
+#: contrib/localflavor/es/es_provinces.py:52
+msgid "Bizkaia"
+msgstr "Бизкаиа"
+
+#: contrib/localflavor/es/es_provinces.py:53
+msgid "Zamora"
+msgstr "Замора"
+
+#: contrib/localflavor/es/es_provinces.py:54
+msgid "Zaragoza"
+msgstr "Зарагоза"
+
+#: contrib/localflavor/es/es_provinces.py:55
+msgid "Ceuta"
+msgstr "Сеута"
+
+#: contrib/localflavor/es/es_provinces.py:56
+msgid "Melilla"
+msgstr "Мелилла"
+
+#: contrib/localflavor/es/es_regions.py:5
+msgid "Andalusia"
+msgstr "Андалусиа"
+
+#: contrib/localflavor/es/es_regions.py:6
+msgid "Aragon"
+msgstr "Арагон"
+
+#: contrib/localflavor/es/es_regions.py:7
+msgid "Principality of Asturias"
+msgstr "Астуриасын вант улс"
+
+#: contrib/localflavor/es/es_regions.py:8
+msgid "Balearic Islands"
+msgstr "Балеарикийн арлууд"
+
+#: contrib/localflavor/es/es_regions.py:9
+msgid "Basque Country"
+msgstr "Баск улс"
+
+#: contrib/localflavor/es/es_regions.py:10
+msgid "Canary Islands"
+msgstr "Канарын арлууд"
+
+#: contrib/localflavor/es/es_regions.py:12
+msgid "Castile-La Mancha"
+msgstr "Кастил-Ла-Манча"
+
+#: contrib/localflavor/es/es_regions.py:13
+msgid "Castile and Leon"
+msgstr "Кастил ба Леон"
+
+#: contrib/localflavor/es/es_regions.py:14
+msgid "Catalonia"
+msgstr "Каталон"
+
+#: contrib/localflavor/es/es_regions.py:15
+msgid "Extremadura"
+msgstr "Экстремадура"
+
+#: contrib/localflavor/es/es_regions.py:16
+msgid "Galicia"
+msgstr "Галисиа"
+
+#: contrib/localflavor/es/es_regions.py:19
+msgid "Region of Murcia"
+msgstr "Мурсиа муж"
+
+#: contrib/localflavor/es/es_regions.py:20
+msgid "Foral Community of Navarre"
+msgstr "Наваррегийн Форал суурин"
+
+#: contrib/localflavor/es/es_regions.py:21
+msgid "Valencian Community"
+msgstr "Валенсиагийн суурин"
+
+#: contrib/localflavor/es/forms.py:20
+msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
+msgstr "Шуудангийн дугаараа 01XXX - 52XXX хооронд, энэ хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/es/forms.py:40
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+"Утасны дугаараа 6XXXXXXXX, 8XXXXXXXX буюу 9XXXXXXXX хэлбэрийн аль нэгээр "
+"оруулна уу."
+
+#: contrib/localflavor/es/forms.py:67
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr "NIF, NIE, CIF оруулна уу."
+
+#: contrib/localflavor/es/forms.py:68
+msgid "Please enter a valid NIF or NIE."
+msgstr "NIF, NIE оруулна уу."
+
+#: contrib/localflavor/es/forms.py:69
+msgid "Invalid checksum for NIF."
+msgstr "NIF-ийн шалгах нийлбэр буруу байна."
+
+#: contrib/localflavor/es/forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr "NIE-ийн шалгах нийлбэр буруу байна."
+
+#: contrib/localflavor/es/forms.py:71
+msgid "Invalid checksum for CIF."
+msgstr "CIF-ийн шалгах нийлбэр буруу байна."
+
+#: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr "Дансны дугаараа XXXX-XXXX-XX-XXXXXXXXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/es/forms.py:144
+msgid "Invalid checksum for bank account number."
+msgstr "Дансны дугаарын шалгах нийлбэр буруу байна."
+
+#: contrib/localflavor/fi/forms.py:29
+msgid "Enter a valid Finnish social security number."
+msgstr "Финляндийн нийгмийн хамгааллын дугаараа оруулна уу."
+
+#: contrib/localflavor/fr/forms.py:31
+#, fuzzy
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Утасны дугаар XXXX-XXXXXX хэлбэрээр байх ёстой."
+
+#: contrib/localflavor/id/forms.py:28
+#, fuzzy
+msgid "Enter a valid post code"
+msgstr "Шуудангийн дугаараа оруулна уу."
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Утасны дугаараа оруулна уу."
+
+#: contrib/localflavor/id/forms.py:107
+#, fuzzy
+msgid "Enter a valid vehicle license plate number"
+msgstr "Утасны дугаараа оруулна уу."
+
+#: contrib/localflavor/id/forms.py:170
+#, fuzzy
+msgid "Enter a valid NIK/KTP number"
+msgstr "VAT дугаараа оруулна уу."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+#, fuzzy
+msgid "Bali"
+msgstr "Бенгал"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+#, fuzzy
+msgid "Banten"
+msgstr "Агуулга"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+#, fuzzy
+msgid "Bengkulu"
+msgstr "Бенгал"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+#, fuzzy
+msgid "Gorontalo"
+msgstr "Гирона"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+#, fuzzy
+msgid "Jambi"
+msgstr "Тамил"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+#, fuzzy
+msgid "Lampung"
+msgstr "8-р сар "
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+#, fuzzy
+msgid "Maluku"
+msgstr "Малаки"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+#, fuzzy
+msgid "Magelang"
+msgstr "Малага"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+#, fuzzy
+msgid "Madiun"
+msgstr "Мадрид"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+#, fuzzy
+msgid "Tapanuli"
+msgstr "Тамаулипас"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+#, fuzzy
+msgid "Bandung"
+msgstr "Бранденбург"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+#, fuzzy
+msgid "Cirebon"
+msgstr "Гирона"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+#, fuzzy
+msgid "Bogor"
+msgstr "Нёго"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+#, fuzzy
+msgid "Semarang"
+msgstr "Серби"
+
+#: contrib/localflavor/id/id_choices.py:87
+#, fuzzy
+msgid "Pati"
+msgstr "идэвхтэй"
+
+#: contrib/localflavor/id/id_choices.py:91
+#, fuzzy
+msgid "Surabaya"
+msgstr "Бямба гариг"
+
+#: contrib/localflavor/id/id_choices.py:92
+#, fuzzy
+msgid "Madura"
+msgstr "Мадрид"
+
+#: contrib/localflavor/id/id_choices.py:93
+#, fuzzy
+msgid "Malang"
+msgstr "Малага"
+
+#: contrib/localflavor/id/id_choices.py:94
+#, fuzzy
+msgid "Jember"
+msgstr "11-р сар"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+#, fuzzy
+msgid "Garut"
+msgstr "Гларус"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+#, fuzzy
+msgid "Antrim"
+msgstr "Антрим каунти"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+#, fuzzy
+msgid "Armagh"
+msgstr "Арагон"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+#, fuzzy
+msgid "Cavan"
+msgstr "Каталан"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+#, fuzzy
+msgid "Clare"
+msgstr "Касерес"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+#, fuzzy
+msgid "Cork"
+msgstr "буюу"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+#, fuzzy
+msgid "Derry"
+msgstr "2-р сар"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+#, fuzzy
+msgid "Donegal"
+msgstr "нэг "
+
+#: contrib/localflavor/ie/ie_counties.py:16
+#, fuzzy
+msgid "Down"
+msgstr "Дэвон"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+#, fuzzy
+msgid "Dublin"
+msgstr "Лублин"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+#, fuzzy
+msgid "Fermanagh"
+msgstr "Ферманаф каунти"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+#, fuzzy
+msgid "Galway"
+msgstr "Галисиа"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+#, fuzzy
+msgid "Kerry"
+msgstr "2-р сар"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+#, fuzzy
+msgid "Louth"
+msgstr "Гарах"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+#, fuzzy
+msgid "Mayo"
+msgstr "5-р сар"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+#, fuzzy
+msgid "Meath"
+msgstr "Мета өгөгдөл"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+#, fuzzy
+msgid "Monaghan"
+msgstr "Ахин нэвтрэх "
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+#, fuzzy
+msgid "Roscommon"
+msgstr "санал сэтгэгдэл "
+
+#: contrib/localflavor/ie/ie_counties.py:33
+#, fuzzy
+msgid "Sligo"
+msgstr "Шига"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+#, fuzzy
+msgid "Tyrone"
+msgstr "Тирол"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+#, fuzzy
+msgid "Westmeath"
+msgstr "Баруун Помераниа"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+#, fuzzy
+msgid "Wexford"
+msgstr "Лха"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
+msgid "Enter a zip code in the format XXXXXXX."
+msgstr "Шуудангийн индексээ XXXXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr "Исландын үнэмлэхний дугаараа XXXXXX-XXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/is_/forms.py:19
+msgid "The Icelandic identification number is not valid."
+msgstr "Исландын үнэмлэхний дугаар хүчингүй байна."
+
+#: contrib/localflavor/it/forms.py:15
+msgid "Enter a valid zip code."
+msgstr "Шуудангийн индексээ оруулна уу."
+
+#: contrib/localflavor/it/forms.py:44
+msgid "Enter a valid Social Security number."
+msgstr "Нийгмийн хамгааллын дугаараа оруулна уу."
+
+#: contrib/localflavor/it/forms.py:69
+msgid "Enter a valid VAT number."
+msgstr "VAT дугаараа оруулна уу."
+
+#: contrib/localflavor/jp/forms.py:16
+msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
+msgstr "Шуудангийн дугаараа XXXXXXX буюу XXX-XXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/jp/jp_prefectures.py:4
+msgid "Hokkaido"
+msgstr "Хоккайдо"
+
+#: contrib/localflavor/jp/jp_prefectures.py:5
+msgid "Aomori"
+msgstr "Аомори"
+
+#: contrib/localflavor/jp/jp_prefectures.py:6
+msgid "Iwate"
+msgstr "Иватэ"
+
+#: contrib/localflavor/jp/jp_prefectures.py:7
+msgid "Miyagi"
+msgstr "Мияаги"
+
+#: contrib/localflavor/jp/jp_prefectures.py:8
+msgid "Akita"
+msgstr "Акита"
+
+#: contrib/localflavor/jp/jp_prefectures.py:9
+msgid "Yamagata"
+msgstr "Ямагата"
+
+#: contrib/localflavor/jp/jp_prefectures.py:10
+msgid "Fukushima"
+msgstr "Фукушима"
+
+#: contrib/localflavor/jp/jp_prefectures.py:11
+msgid "Ibaraki"
+msgstr "Ибараки"
+
+#: contrib/localflavor/jp/jp_prefectures.py:12
+msgid "Tochigi"
+msgstr "Точиги"
+
+#: contrib/localflavor/jp/jp_prefectures.py:13
+msgid "Gunma"
+msgstr "Гунма"
+
+#: contrib/localflavor/jp/jp_prefectures.py:14
+msgid "Saitama"
+msgstr "Саитама"
+
+#: contrib/localflavor/jp/jp_prefectures.py:15
+msgid "Chiba"
+msgstr "Чиба"
+
+#: contrib/localflavor/jp/jp_prefectures.py:16
+msgid "Tokyo"
+msgstr "Токио"
+
+#: contrib/localflavor/jp/jp_prefectures.py:17
+msgid "Kanagawa"
+msgstr "Канагва"
+
+#: contrib/localflavor/jp/jp_prefectures.py:18
+msgid "Yamanashi"
+msgstr "Яманаши"
+
+#: contrib/localflavor/jp/jp_prefectures.py:19
+msgid "Nagano"
+msgstr "Нагано"
+
+#: contrib/localflavor/jp/jp_prefectures.py:20
+msgid "Niigata"
+msgstr "Нийгата"
+
+#: contrib/localflavor/jp/jp_prefectures.py:21
+msgid "Toyama"
+msgstr "Тояма"
+
+#: contrib/localflavor/jp/jp_prefectures.py:22
+msgid "Ishikawa"
+msgstr "Ишикава"
+
+#: contrib/localflavor/jp/jp_prefectures.py:23
+msgid "Fukui"
+msgstr "Фукуи"
+
+#: contrib/localflavor/jp/jp_prefectures.py:24
+msgid "Gifu"
+msgstr "Гифу"
+
+#: contrib/localflavor/jp/jp_prefectures.py:25
+msgid "Shizuoka"
+msgstr "Шизуока"
+
+#: contrib/localflavor/jp/jp_prefectures.py:26
+msgid "Aichi"
+msgstr "Аичи"
+
+#: contrib/localflavor/jp/jp_prefectures.py:27
+msgid "Mie"
+msgstr "Мие"
+
+#: contrib/localflavor/jp/jp_prefectures.py:28
+msgid "Shiga"
+msgstr "Шига"
+
+#: contrib/localflavor/jp/jp_prefectures.py:29
+msgid "Kyoto"
+msgstr "Кёто"
+
+#: contrib/localflavor/jp/jp_prefectures.py:30
+msgid "Osaka"
+msgstr "Осака"
+
+#: contrib/localflavor/jp/jp_prefectures.py:31
+msgid "Hyogo"
+msgstr "Нёго"
+
+#: contrib/localflavor/jp/jp_prefectures.py:32
+msgid "Nara"
+msgstr "Нара"
+
+#: contrib/localflavor/jp/jp_prefectures.py:33
+msgid "Wakayama"
+msgstr "Вакаяма"
+
+#: contrib/localflavor/jp/jp_prefectures.py:34
+msgid "Tottori"
+msgstr "Тоттори"
+
+#: contrib/localflavor/jp/jp_prefectures.py:35
+msgid "Shimane"
+msgstr "Шиманэ"
+
+#: contrib/localflavor/jp/jp_prefectures.py:36
+msgid "Okayama"
+msgstr "Окаяма"
+
+#: contrib/localflavor/jp/jp_prefectures.py:37
+msgid "Hiroshima"
+msgstr "Хирошима"
+
+#: contrib/localflavor/jp/jp_prefectures.py:38
+msgid "Yamaguchi"
+msgstr "Ямагучи"
+
+#: contrib/localflavor/jp/jp_prefectures.py:39
+msgid "Tokushima"
+msgstr "Токушима"
+
+#: contrib/localflavor/jp/jp_prefectures.py:40
+msgid "Kagawa"
+msgstr "Кагава"
+
+#: contrib/localflavor/jp/jp_prefectures.py:41
+msgid "Ehime"
+msgstr "Эхимэ"
+
+#: contrib/localflavor/jp/jp_prefectures.py:42
+msgid "Kochi"
+msgstr "Кочи"
+
+#: contrib/localflavor/jp/jp_prefectures.py:43
+msgid "Fukuoka"
+msgstr "Фукуока"
+
+#: contrib/localflavor/jp/jp_prefectures.py:44
+msgid "Saga"
+msgstr "Сага"
+
+#: contrib/localflavor/jp/jp_prefectures.py:45
+msgid "Nagasaki"
+msgstr "Нагасаки"
+
+#: contrib/localflavor/jp/jp_prefectures.py:46
+msgid "Kumamoto"
+msgstr "Кумамото"
+
+#: contrib/localflavor/jp/jp_prefectures.py:47
+msgid "Oita"
+msgstr "Оита"
+
+#: contrib/localflavor/jp/jp_prefectures.py:48
+msgid "Miyazaki"
+msgstr "Миязаки"
+
+#: contrib/localflavor/jp/jp_prefectures.py:49
+msgid "Kagoshima"
+msgstr "Кагошима"
+
+#: contrib/localflavor/jp/jp_prefectures.py:50
+msgid "Okinawa"
+msgstr "Окинава"
+
+#: contrib/localflavor/kw/forms.py:25
+#, fuzzy
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Өмнөд Африкийн ID дугаараа оруулна уу."
+
+#: contrib/localflavor/mx/mx_states.py:12
+msgid "Aguascalientes"
+msgstr "Агуаскалиентэс"
+
+#: contrib/localflavor/mx/mx_states.py:13
+msgid "Baja California"
+msgstr "Бажа Калифорни"
+
+#: contrib/localflavor/mx/mx_states.py:14
+msgid "Baja California Sur"
+msgstr "Бажа Калифорни Сур"
+
+#: contrib/localflavor/mx/mx_states.py:15
+msgid "Campeche"
+msgstr "Кампече"
+
+#: contrib/localflavor/mx/mx_states.py:16
+msgid "Chihuahua"
+msgstr "Чихуахуа"
+
+#: contrib/localflavor/mx/mx_states.py:17
+msgid "Chiapas"
+msgstr "Чиапас"
+
+#: contrib/localflavor/mx/mx_states.py:18
+msgid "Coahuila"
+msgstr "Коахуила"
+
+#: contrib/localflavor/mx/mx_states.py:19
+msgid "Colima"
+msgstr "Колима"
+
+#: contrib/localflavor/mx/mx_states.py:20
+msgid "Distrito Federal"
+msgstr "Холбооны Дистрито"
+
+#: contrib/localflavor/mx/mx_states.py:21
+msgid "Durango"
+msgstr "Дуранго"
+
+#: contrib/localflavor/mx/mx_states.py:22
+msgid "Guerrero"
+msgstr "Гуерреро"
+
+#: contrib/localflavor/mx/mx_states.py:23
+msgid "Guanajuato"
+msgstr "Гуанажуато"
+
+#: contrib/localflavor/mx/mx_states.py:24
+msgid "Hidalgo"
+msgstr "Хидалго"
+
+#: contrib/localflavor/mx/mx_states.py:25
+msgid "Jalisco"
+msgstr "Жалиско"
+
+#: contrib/localflavor/mx/mx_states.py:26
+msgid "Estado de México"
+msgstr "Мехико"
+
+#: contrib/localflavor/mx/mx_states.py:27
+msgid "Michoacán"
+msgstr "Мичоакан"
+
+#: contrib/localflavor/mx/mx_states.py:28
+msgid "Morelos"
+msgstr "Морелос"
+
+#: contrib/localflavor/mx/mx_states.py:29
+msgid "Nayarit"
+msgstr "Наярит"
+
+#: contrib/localflavor/mx/mx_states.py:30
+msgid "Nuevo León"
+msgstr "Нуево Леон"
+
+#: contrib/localflavor/mx/mx_states.py:31
+msgid "Oaxaca"
+msgstr "Вахака"
+
+#: contrib/localflavor/mx/mx_states.py:32
+msgid "Puebla"
+msgstr "Пуебло"
+
+#: contrib/localflavor/mx/mx_states.py:33
+msgid "Querétaro"
+msgstr "Куеретаро"
+
+#: contrib/localflavor/mx/mx_states.py:34
+msgid "Quintana Roo"
+msgstr "Кинтана Ро"
+
+#: contrib/localflavor/mx/mx_states.py:35
+msgid "Sinaloa"
+msgstr "Синалоа"
+
+#: contrib/localflavor/mx/mx_states.py:36
+msgid "San Luis Potosí"
+msgstr "Сан Луис Потоси"
+
+#: contrib/localflavor/mx/mx_states.py:37
+msgid "Sonora"
+msgstr "Сонора"
+
+#: contrib/localflavor/mx/mx_states.py:38
+msgid "Tabasco"
+msgstr "Табаско"
+
+#: contrib/localflavor/mx/mx_states.py:39
+msgid "Tamaulipas"
+msgstr "Тамаулипас"
+
+#: contrib/localflavor/mx/mx_states.py:40
+msgid "Tlaxcala"
+msgstr "Тласкала"
+
+#: contrib/localflavor/mx/mx_states.py:41
+msgid "Veracruz"
+msgstr "Веракруз"
+
+#: contrib/localflavor/mx/mx_states.py:42
+msgid "Yucatán"
+msgstr "Юкатан"
+
+#: contrib/localflavor/mx/mx_states.py:43
+msgid "Zacatecas"
+msgstr "Закатекас"
+
+#: contrib/localflavor/nl/forms.py:22
+msgid "Enter a valid postal code"
+msgstr "Шуудангийн дугаараа оруулна уу."
+
+#: contrib/localflavor/nl/forms.py:79
+msgid "Enter a valid SoFi number"
+msgstr "SoFi дугаараа оруулна уу."
+
+#: contrib/localflavor/nl/nl_provinces.py:4
+msgid "Drenthe"
+msgstr "Дрэнтэ"
+
+#: contrib/localflavor/nl/nl_provinces.py:5
+msgid "Flevoland"
+msgstr "Флеволанд"
+
+#: contrib/localflavor/nl/nl_provinces.py:6
+msgid "Friesland"
+msgstr "Фраисланд"
+
+#: contrib/localflavor/nl/nl_provinces.py:7
+msgid "Gelderland"
+msgstr "Гелдерланд"
+
+#: contrib/localflavor/nl/nl_provinces.py:8
+msgid "Groningen"
+msgstr "Гронинген"
+
+#: contrib/localflavor/nl/nl_provinces.py:9
+msgid "Limburg"
+msgstr "Лимбург"
+
+#: contrib/localflavor/nl/nl_provinces.py:10
+msgid "Noord-Brabant"
+msgstr "Нуурд-Брабант"
+
+#: contrib/localflavor/nl/nl_provinces.py:11
+msgid "Noord-Holland"
+msgstr "Нуурд-Холланд"
+
+#: contrib/localflavor/nl/nl_provinces.py:12
+msgid "Overijssel"
+msgstr "Овераисл"
+
+#: contrib/localflavor/nl/nl_provinces.py:13
+msgid "Utrecht"
+msgstr "Утрехт"
+
+#: contrib/localflavor/nl/nl_provinces.py:14
+msgid "Zeeland"
+msgstr "Зийланд"
+
+#: contrib/localflavor/nl/nl_provinces.py:15
+msgid "Zuid-Holland"
+msgstr "Заит-Холланд"
+
+#: contrib/localflavor/no/forms.py:34
+msgid "Enter a valid Norwegian social security number."
+msgstr "Норвегийн нийгмийн хамгааллын дугаараа оруулна уу."
+
+#: contrib/localflavor/pe/forms.py:25
+msgid "This field requires 8 digits."
+msgstr "Энэ хэсэгт 8 оронтой тоо оруулна."
+
+#: contrib/localflavor/pe/forms.py:53
+msgid "This field requires 11 digits."
+msgstr "Энэ хэсэгт 11 оронтой тоо оруулна."
+
+#: contrib/localflavor/pl/forms.py:38
+msgid "National Identification Number consists of 11 digits."
+msgstr "Үндэсний таних дугаар 11 оронтой байна."
+
+#: contrib/localflavor/pl/forms.py:39
+msgid "Wrong checksum for the National Identification Number."
+msgstr "Үндэсний таних дугаарын шалгах нийлбэр буруу байна."
+
+#: contrib/localflavor/pl/forms.py:71
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr ""
+"Татварын дугаараа  XXX-XXX-XX-XX буюу XX-XX-XXX-XXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/pl/forms.py:72
+msgid "Wrong checksum for the Tax Number (NIP)."
+msgstr "Татварын дугаарын шалгах нийлбэр буруу байна."
+
+#: contrib/localflavor/pl/forms.py:109
+#, fuzzy
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr "Үндэсний бизнесийн бүртгэлийн дугаар 7-9 оронтой байна."
+
+#: contrib/localflavor/pl/forms.py:110
+msgid "Wrong checksum for the National Business Register Number (REGON)."
+msgstr "Үндэсний бизнесийн бүртгэлийн дугаарын шалгах нийлбэр буруу байна."
+
+#: contrib/localflavor/pl/forms.py:148
+msgid "Enter a postal code in the format XX-XXX."
+msgstr "Шуудангийн дугаараа XX-XXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/pl/pl_voivodeships.py:8
+msgid "Lower Silesia"
+msgstr "Доод Силесиа"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:9
+msgid "Kuyavia-Pomerania"
+msgstr "Куявиа-Помераниа"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:10
+msgid "Lublin"
+msgstr "Лублин"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:11
+msgid "Lubusz"
+msgstr "Лубуски"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:12
+msgid "Lodz"
+msgstr "Лодз"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:13
+msgid "Lesser Poland"
+msgstr "Бага Польш"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:14
+msgid "Masovia"
+msgstr "Масовиа"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:15
+msgid "Opole"
+msgstr "Ополе"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:16
+msgid "Subcarpatia"
+msgstr "Субкарпатиа"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:17
+msgid "Podlasie"
+msgstr "Подласие"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:18
+msgid "Pomerania"
+msgstr "Помераниа"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:19
+msgid "Silesia"
+msgstr "Силесиа"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:20
+msgid "Swietokrzyskie"
+msgstr "Свентокшишки"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:21
+msgid "Warmia-Masuria"
+msgstr "Вармиа-Масуриа"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:22
+msgid "Greater Poland"
+msgstr "Их Польш"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:23
+msgid "West Pomerania"
+msgstr "Баруун Помераниа"
+
+#: contrib/localflavor/pt/forms.py:17
+#, fuzzy
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Шуудангийн индексээ XXXXX-XXX хэлбэрээр оруулна уу. "
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:19
+msgid "Enter a valid CIF."
+msgstr "CIF оруулна уу."
+
+#: contrib/localflavor/ro/forms.py:56
+msgid "Enter a valid CNP."
+msgstr "CNP оруулна уу."
+
+#: contrib/localflavor/ro/forms.py:141
+msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
+msgstr "IBAN-ийг ROXX-XXXX-XXXX-XXXX-XXXX-XXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/ro/forms.py:171
+msgid "Phone numbers must be in XXXX-XXXXXX format."
+msgstr "Утасны дугаар XXXX-XXXXXX хэлбэрээр байх ёстой."
+
+#: contrib/localflavor/ro/forms.py:194
+msgid "Enter a valid postal code in the format XXXXXX"
+msgstr "Шуудангийн дугаараа XXXXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/se/forms.py:50
+#, fuzzy
+msgid "Enter a valid Swedish organisation number."
+msgstr "SoFi дугаараа оруулна уу."
+
+#: contrib/localflavor/se/forms.py:107
+#, fuzzy
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Финляндийн нийгмийн хамгааллын дугаараа оруулна уу."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+#, fuzzy
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Шуудангийн дугаараа XX-XXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+#, fuzzy
+msgid "Södermanland"
+msgstr "Гелдерланд"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+#, fuzzy
+msgid "Kalmar"
+msgstr "3-р сар"
+
+#: contrib/localflavor/se/se_counties.py:24
+#, fuzzy
+msgid "Gotland"
+msgstr "Шотланд"
+
+#: contrib/localflavor/se/se_counties.py:25
+#, fuzzy
+msgid "Blekinge"
+msgstr "Берн"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+#, fuzzy
+msgid "Halland"
+msgstr "Саарланд"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:32
+#, fuzzy
+msgid "Dalarna"
+msgstr "Галанта"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:8
+msgid "Banska Bystrica"
+msgstr "Банска Бистрика"
+
+#: contrib/localflavor/sk/sk_districts.py:9
+msgid "Banska Stiavnica"
+msgstr "Банска Стиавника"
+
+#: contrib/localflavor/sk/sk_districts.py:10
+msgid "Bardejov"
+msgstr "Бардежов"
+
+#: contrib/localflavor/sk/sk_districts.py:11
+msgid "Banovce nad Bebravou"
+msgstr "Бановц над Бебравоу"
+
+#: contrib/localflavor/sk/sk_districts.py:12
+msgid "Brezno"
+msgstr "Брезно"
+
+#: contrib/localflavor/sk/sk_districts.py:13
+msgid "Bratislava I"
+msgstr "Братислав l"
+
+#: contrib/localflavor/sk/sk_districts.py:14
+msgid "Bratislava II"
+msgstr "Братислав ll"
+
+#: contrib/localflavor/sk/sk_districts.py:15
+msgid "Bratislava III"
+msgstr "Братислав lll"
+
+#: contrib/localflavor/sk/sk_districts.py:16
+msgid "Bratislava IV"
+msgstr "Братислав lV"
+
+#: contrib/localflavor/sk/sk_districts.py:17
+msgid "Bratislava V"
+msgstr "Братислав V"
+
+#: contrib/localflavor/sk/sk_districts.py:18
+msgid "Bytca"
+msgstr "Битка"
+
+#: contrib/localflavor/sk/sk_districts.py:19
+msgid "Cadca"
+msgstr "Кадка"
+
+#: contrib/localflavor/sk/sk_districts.py:20
+msgid "Detva"
+msgstr "Детва"
+
+#: contrib/localflavor/sk/sk_districts.py:21
+msgid "Dolny Kubin"
+msgstr "Долни Кубин"
+
+#: contrib/localflavor/sk/sk_districts.py:22
+msgid "Dunajska Streda"
+msgstr "Дунайска Стреда"
+
+#: contrib/localflavor/sk/sk_districts.py:23
+msgid "Galanta"
+msgstr "Галанта"
+
+#: contrib/localflavor/sk/sk_districts.py:24
+msgid "Gelnica"
+msgstr "Гелника"
+
+#: contrib/localflavor/sk/sk_districts.py:25
+msgid "Hlohovec"
+msgstr "Хлоховек"
+
+#: contrib/localflavor/sk/sk_districts.py:26
+msgid "Humenne"
+msgstr "Хюменн"
+
+#: contrib/localflavor/sk/sk_districts.py:27
+msgid "Ilava"
+msgstr "Илава"
+
+#: contrib/localflavor/sk/sk_districts.py:28
+msgid "Kezmarok"
+msgstr "Кезмарок"
+
+#: contrib/localflavor/sk/sk_districts.py:29
+msgid "Komarno"
+msgstr "Комарно"
+
+#: contrib/localflavor/sk/sk_districts.py:30
+msgid "Kosice I"
+msgstr "Косиз I"
+
+#: contrib/localflavor/sk/sk_districts.py:31
+msgid "Kosice II"
+msgstr "Косиз II"
+
+#: contrib/localflavor/sk/sk_districts.py:32
+msgid "Kosice III"
+msgstr "Косиз III"
+
+#: contrib/localflavor/sk/sk_districts.py:33
+msgid "Kosice IV"
+msgstr "Косиз IV"
+
+#: contrib/localflavor/sk/sk_districts.py:34
+msgid "Kosice - okolie"
+msgstr "Косиз - околие"
+
+#: contrib/localflavor/sk/sk_districts.py:35
+msgid "Krupina"
+msgstr "Крупина"
+
+#: contrib/localflavor/sk/sk_districts.py:36
+msgid "Kysucke Nove Mesto"
+msgstr "Кисук Нове Место"
+
+#: contrib/localflavor/sk/sk_districts.py:37
+msgid "Levice"
+msgstr "Левис "
+
+#: contrib/localflavor/sk/sk_districts.py:38
+msgid "Levoca"
+msgstr "Левока"
+
+#: contrib/localflavor/sk/sk_districts.py:39
+msgid "Liptovsky Mikulas"
+msgstr "Липтовски Микулас"
+
+#: contrib/localflavor/sk/sk_districts.py:40
+msgid "Lucenec"
+msgstr "Лукенек"
+
+#: contrib/localflavor/sk/sk_districts.py:41
+msgid "Malacky"
+msgstr "Малаки"
+
+#: contrib/localflavor/sk/sk_districts.py:42
+msgid "Martin"
+msgstr "Мартин "
+
+#: contrib/localflavor/sk/sk_districts.py:43
+msgid "Medzilaborce"
+msgstr "Медзилаборс"
+
+#: contrib/localflavor/sk/sk_districts.py:44
+msgid "Michalovce"
+msgstr "Михаловс"
+
+#: contrib/localflavor/sk/sk_districts.py:45
+msgid "Myjava"
+msgstr "Мияава"
+
+#: contrib/localflavor/sk/sk_districts.py:46
+msgid "Namestovo"
+msgstr "Наместово"
+
+#: contrib/localflavor/sk/sk_districts.py:47
+msgid "Nitra"
+msgstr "Нитра"
+
+#: contrib/localflavor/sk/sk_districts.py:48
+msgid "Nove Mesto nad Vahom"
+msgstr "Нове Место над Вахом"
+
+#: contrib/localflavor/sk/sk_districts.py:49
+msgid "Nove Zamky"
+msgstr "Нове Замки"
+
+#: contrib/localflavor/sk/sk_districts.py:50
+msgid "Partizanske"
+msgstr "Партизанске"
+
+#: contrib/localflavor/sk/sk_districts.py:51
+msgid "Pezinok"
+msgstr "Пезинок"
+
+#: contrib/localflavor/sk/sk_districts.py:52
+msgid "Piestany"
+msgstr "Пиестани"
+
+#: contrib/localflavor/sk/sk_districts.py:53
+msgid "Poltar"
+msgstr "Полтар"
+
+#: contrib/localflavor/sk/sk_districts.py:54
+msgid "Poprad"
+msgstr "Попрад"
+
+#: contrib/localflavor/sk/sk_districts.py:55
+msgid "Povazska Bystrica"
+msgstr "Повазска Бистрика"
+
+#: contrib/localflavor/sk/sk_districts.py:56
+msgid "Presov"
+msgstr "Пресов"
+
+#: contrib/localflavor/sk/sk_districts.py:57
+msgid "Prievidza"
+msgstr "Приевидза"
+
+#: contrib/localflavor/sk/sk_districts.py:58
+msgid "Puchov"
+msgstr "Пучов"
+
+#: contrib/localflavor/sk/sk_districts.py:59
+msgid "Revuca"
+msgstr "Ревука"
+
+#: contrib/localflavor/sk/sk_districts.py:60
+msgid "Rimavska Sobota"
+msgstr "Римавска Собота"
+
+#: contrib/localflavor/sk/sk_districts.py:61
+msgid "Roznava"
+msgstr "Рознава"
+
+#: contrib/localflavor/sk/sk_districts.py:62
+msgid "Ruzomberok"
+msgstr "Рузомберок"
+
+#: contrib/localflavor/sk/sk_districts.py:63
+msgid "Sabinov"
+msgstr "Сабинов"
+
+#: contrib/localflavor/sk/sk_districts.py:64
+msgid "Senec"
+msgstr "Сенек"
+
+#: contrib/localflavor/sk/sk_districts.py:65
+msgid "Senica"
+msgstr "Сеника"
+
+#: contrib/localflavor/sk/sk_districts.py:66
+msgid "Skalica"
+msgstr "Скалиса"
+
+#: contrib/localflavor/sk/sk_districts.py:67
+msgid "Snina"
+msgstr "Снина"
+
+#: contrib/localflavor/sk/sk_districts.py:68
+msgid "Sobrance"
+msgstr "Собранс"
+
+#: contrib/localflavor/sk/sk_districts.py:69
+msgid "Spisska Nova Ves"
+msgstr "Списска Нова Вес"
+
+#: contrib/localflavor/sk/sk_districts.py:70
+msgid "Stara Lubovna"
+msgstr "Стара Любовна"
+
+#: contrib/localflavor/sk/sk_districts.py:71
+msgid "Stropkov"
+msgstr "Стропков"
+
+#: contrib/localflavor/sk/sk_districts.py:72
+msgid "Svidnik"
+msgstr "Свидник"
+
+#: contrib/localflavor/sk/sk_districts.py:73
+msgid "Sala"
+msgstr "Сала"
+
+#: contrib/localflavor/sk/sk_districts.py:74
+msgid "Topolcany"
+msgstr "Тополсани"
+
+#: contrib/localflavor/sk/sk_districts.py:75
+msgid "Trebisov"
+msgstr "Требисов"
+
+#: contrib/localflavor/sk/sk_districts.py:76
+msgid "Trencin"
+msgstr "Тренкин"
+
+#: contrib/localflavor/sk/sk_districts.py:77
+msgid "Trnava"
+msgstr "Трнава"
+
+#: contrib/localflavor/sk/sk_districts.py:78
+msgid "Turcianske Teplice"
+msgstr "Туркианск Теплис"
+
+#: contrib/localflavor/sk/sk_districts.py:79
+msgid "Tvrdosin"
+msgstr "Тврдосин"
+
+#: contrib/localflavor/sk/sk_districts.py:80
+msgid "Velky Krtis"
+msgstr "Велки Кртис"
+
+#: contrib/localflavor/sk/sk_districts.py:81
+msgid "Vranov nad Toplou"
+msgstr "Вранов над Топлоу"
+
+#: contrib/localflavor/sk/sk_districts.py:82
+msgid "Zlate Moravce"
+msgstr "Злате Моравс"
+
+#: contrib/localflavor/sk/sk_districts.py:83
+msgid "Zvolen"
+msgstr "Зволен"
+
+#: contrib/localflavor/sk/sk_districts.py:84
+msgid "Zarnovica"
+msgstr "Зарновика"
+
+#: contrib/localflavor/sk/sk_districts.py:85
+msgid "Ziar nad Hronom"
+msgstr "Зиар над Хроном"
+
+#: contrib/localflavor/sk/sk_districts.py:86
+msgid "Zilina"
+msgstr "Зилина"
+
+#: contrib/localflavor/sk/sk_regions.py:8
+msgid "Banska Bystrica region"
+msgstr "Банска Бистрика муж "
+
+#: contrib/localflavor/sk/sk_regions.py:9
+msgid "Bratislava region"
+msgstr "Братислав муж "
+
+#: contrib/localflavor/sk/sk_regions.py:10
+msgid "Kosice region"
+msgstr "Косиз муж"
+
+#: contrib/localflavor/sk/sk_regions.py:11
+msgid "Nitra region"
+msgstr "Нитра муж"
+
+#: contrib/localflavor/sk/sk_regions.py:12
+msgid "Presov region"
+msgstr "Пресов муж"
+
+#: contrib/localflavor/sk/sk_regions.py:13
+msgid "Trencin region"
+msgstr "Тренкин муж"
+
+#: contrib/localflavor/sk/sk_regions.py:14
+msgid "Trnava region"
+msgstr "Трнава муж"
+
+#: contrib/localflavor/sk/sk_regions.py:15
+msgid "Zilina region"
+msgstr "Зилина муж"
+
+#: contrib/localflavor/uk/forms.py:21
+msgid "Enter a valid postcode."
+msgstr "Шуудангийн дугаараа оруулна уу."
+
+#: contrib/localflavor/uk/uk_regions.py:11
+msgid "Bedfordshire"
+msgstr "Бэдфордшир"
+
+#: contrib/localflavor/uk/uk_regions.py:12
+msgid "Buckinghamshire"
+msgstr "Букингхэмшир"
+
+#: contrib/localflavor/uk/uk_regions.py:14
+msgid "Cheshire"
+msgstr "Чешир"
+
+#: contrib/localflavor/uk/uk_regions.py:15
+msgid "Cornwall and Isles of Scilly"
+msgstr "Корнүолл ба Скиллийн арлууд"
+
+#: contrib/localflavor/uk/uk_regions.py:16
+msgid "Cumbria"
+msgstr "Кумбриа"
+
+#: contrib/localflavor/uk/uk_regions.py:17
+msgid "Derbyshire"
+msgstr "Дэрбишир"
+
+#: contrib/localflavor/uk/uk_regions.py:18
+msgid "Devon"
+msgstr "Дэвон"
+
+#: contrib/localflavor/uk/uk_regions.py:19
+msgid "Dorset"
+msgstr "Дорсэт"
+
+#: contrib/localflavor/uk/uk_regions.py:20
+msgid "Durham"
+msgstr "Дурхам"
+
+#: contrib/localflavor/uk/uk_regions.py:21
+msgid "East Sussex"
+msgstr "Ийст Суссекс"
+
+#: contrib/localflavor/uk/uk_regions.py:22
+msgid "Essex"
+msgstr "Эссекс"
+
+#: contrib/localflavor/uk/uk_regions.py:23
+msgid "Gloucestershire"
+msgstr "Глоусестершир"
+
+#: contrib/localflavor/uk/uk_regions.py:24
+msgid "Greater London"
+msgstr "Их Лондон "
+
+#: contrib/localflavor/uk/uk_regions.py:25
+msgid "Greater Manchester"
+msgstr "Их Манчестэр"
+
+#: contrib/localflavor/uk/uk_regions.py:26
+msgid "Hampshire"
+msgstr "Хэмпшир"
+
+#: contrib/localflavor/uk/uk_regions.py:27
+msgid "Hertfordshire"
+msgstr "Хэртфордшир"
+
+#: contrib/localflavor/uk/uk_regions.py:28
+msgid "Kent"
+msgstr "Кэнт"
+
+#: contrib/localflavor/uk/uk_regions.py:29
+msgid "Lancashire"
+msgstr "Ланкашир"
+
+#: contrib/localflavor/uk/uk_regions.py:30
+msgid "Leicestershire"
+msgstr "Леисэстершир"
+
+#: contrib/localflavor/uk/uk_regions.py:31
+msgid "Lincolnshire"
+msgstr "Линколншир"
+
+#: contrib/localflavor/uk/uk_regions.py:32
+msgid "Merseyside"
+msgstr "Мэрсэисайд"
+
+#: contrib/localflavor/uk/uk_regions.py:33
+msgid "Norfolk"
+msgstr "Норфолк"
+
+#: contrib/localflavor/uk/uk_regions.py:34
+msgid "North Yorkshire"
+msgstr "Норт Йоркшир"
+
+#: contrib/localflavor/uk/uk_regions.py:35
+msgid "Northamptonshire"
+msgstr "Нортамптоншир"
+
+#: contrib/localflavor/uk/uk_regions.py:36
+msgid "Northumberland"
+msgstr "Нортамберланд"
+
+#: contrib/localflavor/uk/uk_regions.py:37
+msgid "Nottinghamshire"
+msgstr "Ноттингхэмшир"
+
+#: contrib/localflavor/uk/uk_regions.py:38
+msgid "Oxfordshire"
+msgstr "Оксфордшир"
+
+#: contrib/localflavor/uk/uk_regions.py:39
+msgid "Shropshire"
+msgstr "Шропшир"
+
+#: contrib/localflavor/uk/uk_regions.py:40
+msgid "Somerset"
+msgstr "Сомерсэт"
+
+#: contrib/localflavor/uk/uk_regions.py:41
+msgid "South Yorkshire"
+msgstr "Саут Йоркшир"
+
+#: contrib/localflavor/uk/uk_regions.py:42
+msgid "Staffordshire"
+msgstr "Стаффордшир"
+
+#: contrib/localflavor/uk/uk_regions.py:43
+msgid "Suffolk"
+msgstr "Суффолк"
+
+#: contrib/localflavor/uk/uk_regions.py:44
+msgid "Surrey"
+msgstr "Сурреи"
+
+#: contrib/localflavor/uk/uk_regions.py:45
+msgid "Tyne and Wear"
+msgstr "Тийн ба Виэр"
+
+#: contrib/localflavor/uk/uk_regions.py:46
+msgid "Warwickshire"
+msgstr "Уарвикшир"
+
+#: contrib/localflavor/uk/uk_regions.py:47
+msgid "West Midlands"
+msgstr "Вэст Мидландс"
+
+#: contrib/localflavor/uk/uk_regions.py:48
+msgid "West Sussex"
+msgstr "Вест Суссекс"
+
+#: contrib/localflavor/uk/uk_regions.py:49
+msgid "West Yorkshire"
+msgstr "Вест Йоркшир"
+
+#: contrib/localflavor/uk/uk_regions.py:50
+msgid "Wiltshire"
+msgstr "Вилтшир"
+
+#: contrib/localflavor/uk/uk_regions.py:51
+msgid "Worcestershire"
+msgstr "Ворсестершир"
+
+#: contrib/localflavor/uk/uk_regions.py:55
+msgid "County Antrim"
+msgstr "Антрим каунти"
+
+#: contrib/localflavor/uk/uk_regions.py:56
+msgid "County Armagh"
+msgstr "Армагх каунти"
+
+#: contrib/localflavor/uk/uk_regions.py:57
+msgid "County Down"
+msgstr "Даун каунти"
+
+#: contrib/localflavor/uk/uk_regions.py:58
+msgid "County Fermanagh"
+msgstr "Ферманаф каунти"
+
+#: contrib/localflavor/uk/uk_regions.py:59
+msgid "County Londonderry"
+msgstr "Лондондерри каунти"
+
+#: contrib/localflavor/uk/uk_regions.py:60
+msgid "County Tyrone"
+msgstr "Тирон каунти"
+
+#: contrib/localflavor/uk/uk_regions.py:64
+msgid "Clwyd"
+msgstr "Клвид "
+
+#: contrib/localflavor/uk/uk_regions.py:65
+msgid "Dyfed"
+msgstr "Дифед"
+
+#: contrib/localflavor/uk/uk_regions.py:66
+msgid "Gwent"
+msgstr "Гвент"
+
+#: contrib/localflavor/uk/uk_regions.py:67
+msgid "Gwynedd"
+msgstr "Гвинедд"
+
+#: contrib/localflavor/uk/uk_regions.py:68
+msgid "Mid Glamorgan"
+msgstr "Дундад Гламорган"
+
+#: contrib/localflavor/uk/uk_regions.py:69
+msgid "Powys"
+msgstr "Повис"
+
+#: contrib/localflavor/uk/uk_regions.py:70
+msgid "South Glamorgan"
+msgstr "Өмнөд Гламорган"
+
+#: contrib/localflavor/uk/uk_regions.py:71
+msgid "West Glamorgan"
+msgstr "Баруун Гламорган"
+
+#: contrib/localflavor/uk/uk_regions.py:75
+msgid "Borders"
+msgstr "Бордэрс"
+
+#: contrib/localflavor/uk/uk_regions.py:76
+msgid "Central Scotland"
+msgstr "Төв Шотланд"
+
+#: contrib/localflavor/uk/uk_regions.py:77
+msgid "Dumfries and Galloway"
+msgstr "Дамфрайс ба Галловэй"
+
+#: contrib/localflavor/uk/uk_regions.py:78
+msgid "Fife"
+msgstr "Файф"
+
+#: contrib/localflavor/uk/uk_regions.py:79
+msgid "Grampian"
+msgstr "Грампиан"
+
+#: contrib/localflavor/uk/uk_regions.py:80
+msgid "Highland"
+msgstr "Хайланд"
+
+#: contrib/localflavor/uk/uk_regions.py:81
+msgid "Lothian"
+msgstr "Лотиан"
+
+#: contrib/localflavor/uk/uk_regions.py:82
+msgid "Orkney Islands"
+msgstr "Оркнэй арлууд"
+
+#: contrib/localflavor/uk/uk_regions.py:83
+msgid "Shetland Islands"
+msgstr "Шетланд арлууд"
+
+#: contrib/localflavor/uk/uk_regions.py:84
+msgid "Strathclyde"
+msgstr "Стратклид"
+
+#: contrib/localflavor/uk/uk_regions.py:85
+msgid "Tayside"
+msgstr "Тайсайд"
+
+#: contrib/localflavor/uk/uk_regions.py:86
+msgid "Western Isles"
+msgstr "Вестерн Айслс"
+
+#: contrib/localflavor/uk/uk_regions.py:90
+msgid "England"
+msgstr "Англи"
+
+#: contrib/localflavor/uk/uk_regions.py:91
+msgid "Northern Ireland"
+msgstr "Умард Ирланд"
+
+#: contrib/localflavor/uk/uk_regions.py:92
+msgid "Scotland"
+msgstr "Шотланд"
+
+#: contrib/localflavor/uk/uk_regions.py:93
+msgid "Wales"
+msgstr "Вэльс"
+
+#: contrib/localflavor/us/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr "Шуудангийн индексээ XXXXX буюу XXXXX-XXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/us/forms.py:26
+#, fuzzy
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Утасны дугаараа XX-XXXX-XXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/us/forms.py:55
+msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+msgstr "АНУ-ын нийгмийн хамгааллын дугаараа XXX-XX-XXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr ""
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "U.S. төлөв (хоёр том үсэг)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Утасны дугаар"
+
+#: contrib/localflavor/uy/forms.py:28
+#, fuzzy
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "CUIT-ээ XX-XXXXXXXX-X эсвэл XXXXXXXXXXXX хэлбэрээр оруулна уу."
+
+#: contrib/localflavor/uy/forms.py:30
+#, fuzzy
+msgid "Enter a valid CI number."
+msgstr "VAT дугаараа оруулна уу."
+
+#: contrib/localflavor/za/forms.py:21
+msgid "Enter a valid South African ID number"
+msgstr "Өмнөд Африкийн ID дугаараа оруулна уу."
+
+#: contrib/localflavor/za/forms.py:55
+msgid "Enter a valid South African postal code"
+msgstr "Өмнөд Африкийн шуудангийн дугаараа оруулна уу."
+
+#: contrib/localflavor/za/za_provinces.py:4
+msgid "Eastern Cape"
+msgstr "Зүүн Кэйп"
+
+#: contrib/localflavor/za/za_provinces.py:5
+msgid "Free State"
+msgstr "Фрий стэйт"
+
+#: contrib/localflavor/za/za_provinces.py:6
+msgid "Gauteng"
+msgstr "Гаутэнг"
+
+#: contrib/localflavor/za/za_provinces.py:7
+msgid "KwaZulu-Natal"
+msgstr "КваЗулу-Натал"
+
+#: contrib/localflavor/za/za_provinces.py:8
+msgid "Limpopo"
+msgstr "Лимпопо"
+
+#: contrib/localflavor/za/za_provinces.py:9
+msgid "Mpumalanga"
+msgstr "Мпумаланга"
+
+#: contrib/localflavor/za/za_provinces.py:10
+msgid "Northern Cape"
+msgstr "Хойд Кэйп"
+
+#: contrib/localflavor/za/za_provinces.py:11
+msgid "North West"
+msgstr "Норт Вэст"
+
+#: contrib/localflavor/za/za_provinces.py:12
+msgid "Western Cape"
+msgstr "Баруун Кэйп"
+
+#: contrib/messages/tests/base.py:101
+#, fuzzy
+msgid "lazy message"
+msgstr "мэдээлэл"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "хаанаас"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Энэ нь домэйн нэр агуулаагүй абсолют зам байх ёстой. Жишээ нь: '/events/"
+"search/'."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "хаашаа"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Энэ нь (дээрхийн нэгэн адил) абсолют зам юм уу 'http://' гэж эхэлсэн бүтэн "
+"URL байж болно. "
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "хандуулах"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "хандуулах"
+
+#: contrib/sessions/models.py:45
+msgid "session key"
+msgstr ""
+
+#: contrib/sessions/models.py:47
+msgid "session data"
+msgstr ""
+
+#: contrib/sessions/models.py:48
+msgid "expire date"
+msgstr "дуусах хугацаа"
+
+#: contrib/sessions/models.py:53
+msgid "session"
+msgstr ""
+
+#: contrib/sessions/models.py:54
+msgid "sessions"
+msgstr ""
+
+#: contrib/sites/models.py:32
+msgid "domain name"
+msgstr "домэйн нэр"
+
+#: contrib/sites/models.py:33
+msgid "display name"
+msgstr "дэлгэцний нэр "
+
+#: contrib/sites/models.py:39
+msgid "sites"
+msgstr "сайт"
+
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Өгөгдхүүнээ оруулна уу."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "URL оруулна уу."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Энэ URL холбоос гэмтсэн юм шиг байна."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr "Үсэг, тоо, нэмэлт тэмдэг, зурааснаас бүрдэх `slug`-аа оруулна уу."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "IPv4 хаягаа оруулна уу. "
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Зөвхөн таслалаар тусгаарлагдсан цифр оруулна уу."
+
+#: core/validators.py:135
+#, fuzzy, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+"Энэ өгөгдхүүн хамгийн багадаа %(min)d тэмдэгттэй байх ёстой (%(length)d "
+"урттай)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, fuzzy, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Энэ өгөгдхүүн %s буюу үүнээс бага байх ёстой."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, fuzzy, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Энэ өгөгдхүүн %s буюу үүнээс их байх ёстой."
+
+#: core/validators.py:164
+#, fuzzy, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Энэ өгөгдхүүн хамгийн багадаа %(min)d тэмдэгттэй байх ёстой (%(length)d "
+"урттай)."
+
+#: core/validators.py:170
+#, fuzzy, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Энэ өгөгдхүүн хамгийн ихдээ %(max)d тэмдэгттэй байх ёстой (%(length)d "
+"урттай)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr ""
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(field_label)s-тэй %(model_name)s-ийг аль хэдийнэ оруулсан байна."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr ""
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be null."
+msgstr "Энэ хэсгийг хоосон орхиж болохгүй."
+
+#: db/models/fields/__init__.py:65
+#, fuzzy
+msgid "This field cannot be blank."
+msgstr "Энэ хэсгийг хоосон орхиж болохгүй."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr ""
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Бүхэл тоо"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+msgid "This value must be an integer."
+msgstr "Энэ бүхэл тоо байх ёстой."
+
+#: db/models/fields/__init__.py:490
+msgid "This value must be either True or False."
+msgstr "Энэ True, False-ийн аль аль нь байх ёстой.  "
+
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Boolean (Үнэн худлын аль нэг нь)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Бичвэр (%(max_length)s хүртэл)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Таслалаар тусгаарлагдсан бүхэл тоо"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Огноо (цаггүй)"
+
+#: db/models/fields/__init__.py:585
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Огноогоо ЖЖЖЖ-СС-ӨӨ гэсэн хэлбэрээр оруулна уу."
+
+#: db/models/fields/__init__.py:586
+#, python-format
+msgid "Invalid date: %s"
+msgstr "Буруу огноо: %s"
+
+#: db/models/fields/__init__.py:667
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
+msgstr "Огноо/цагаа ЖЖЖЖ-СС-ӨӨ ЦЦ:ММ[:сс[.uuuuuu]] гэсэн хэлбэрээр оруулна уу."
+
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Огноо (цагтай)"
+
+#: db/models/fields/__init__.py:735
+msgid "This value must be a decimal number."
+msgstr "Энэ бутархай тоо байх ёстой."
+
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Аравтын бутархайт тоо"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "Цахим шуудангийн хаяг"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Файлын зам "
+
+#: db/models/fields/__init__.py:822
+#, fuzzy
+msgid "This value must be a float."
+msgstr "Энэ бүхэл тоо байх ёстой."
+
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr ""
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr ""
+
+#: db/models/fields/__init__.py:912
+msgid "This value must be either None, True or False."
+msgstr "Энэ None, True, False-ийн аль аль нь байх ёстой."
+
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Boolean (Үнэн, худал, эсвэл юу ч биш)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Бичвэр"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Хугацаа"
+
+#: db/models/fields/__init__.py:1025
+msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
+msgstr "Цагаа ЦЦ:ММ[:сс[.uuuuuu]] гэсэн хэлбэрээр оруулна уу. "
+
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "XML бичвэр"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr ""
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr ""
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr ""
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr ""
+
+#: db/models/fields/related.py:1000
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"Нэгээс олныг сонгохын тулд Мак дээрх \"Control\", \"Command\"-ийг дарна уу."
+
+#: db/models/fields/related.py:1061
+#, python-format
+msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "%(self)s ID-ийг оруулна уу. %(value)r гэсэн өгөгдхүүн буруу байна."
+msgstr[1] ""
+"%(self)s ID-ийг оруулна уу. %(value)r гэсэн өгөгдхүүнүүд буруу байна."
+
+#: forms/fields.py:65
+msgid "This field is required."
+msgstr "Энэ хэсгийг бөглөх шаардлагатай."
+
+#: forms/fields.py:204
+msgid "Enter a whole number."
+msgstr "Дугаараа бүхлээр нь оруулна уу."
+
+#: forms/fields.py:235 forms/fields.py:256
+msgid "Enter a number."
+msgstr "Дугаараа оруулна уу."
+
+#: forms/fields.py:259
+#, python-format
+msgid "Ensure that there are no more than %s digits in total."
+msgstr "Энд нийтдээ %s -аас олонгүй цифр байх ёстой."
+
+#: forms/fields.py:260
+#, python-format
+msgid "Ensure that there are no more than %s decimal places."
+msgstr "Энд %s -аас олонгүй бутархайн орон байх ёстой. "
+
+#: forms/fields.py:261
+#, python-format
+msgid "Ensure that there are no more than %s digits before the decimal point."
+msgstr "Энд бутархайн таслалаас өмнө %s-аас олонгүй цифр байх ёстой."
+
+#: forms/fields.py:323 forms/fields.py:838
+msgid "Enter a valid date."
+msgstr "Огноо оруулна уу."
+
+#: forms/fields.py:351 forms/fields.py:839
+msgid "Enter a valid time."
+msgstr "Цаг оруулна уу."
+
+#: forms/fields.py:377
+msgid "Enter a valid date/time."
+msgstr "Огноо/цаг оруулна уу."
+
+#: forms/fields.py:435
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Файл оруулаагүй байна. Маягтаас кодлох төрлийг чагтал. "
+
+#: forms/fields.py:436
+msgid "No file was submitted."
+msgstr "Файл оруулаагүй байна."
+
+#: forms/fields.py:437
+msgid "The submitted file is empty."
+msgstr "Оруулсан файл хоосон байна. "
+
+#: forms/fields.py:438
+#, fuzzy, python-format
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+"Энэ өгөгдхүүн хамгийн ихдээ %(max)d тэмдэгттэй байх ёстой (%(length)d "
+"урттай)."
+
+#: forms/fields.py:473
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Зөв зураг оруулна уу. Таны оруулсан файл зүгээр зураг, гэмтсэн зургийн аль "
+"нь ч биш байна."
+
+#: forms/fields.py:596 forms/fields.py:671
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr "Зөв сонголт хийгээрэй. %(value)s гэсэн сонголт байхгүй байна."
+
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
+msgid "Enter a list of values."
+msgstr "Өгөгдхүүний жагсаалтаа оруулна уу."
+
+#: forms/formsets.py:298 forms/formsets.py:300
+msgid "Order"
+msgstr "Дараалал"
+
+#: forms/models.py:567
+#, fuzzy, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Доорх алдааг засна уу."
+
+#: forms/models.py:571
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+
+#: forms/models.py:577
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+
+#: forms/models.py:585
+#, fuzzy
+msgid "Please correct the duplicate values below."
+msgstr "Доорх алдааг засна уу."
+
+#: forms/models.py:860
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr ""
+
+#: forms/models.py:926
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr "Зөв сонголт хийгээрэй. Энэ сонголт байхгүй байна."
+
+#: forms/models.py:1008
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Зөв сонголт хийгээрэй. %s гэсэн сонголт байхгүй байна."
+
+#: forms/models.py:1010
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr ""
+
+#: template/defaultfilters.py:781
+msgid "yes,no,maybe"
+msgstr "тийм, үгүй, магадгүй"
+
+#: template/defaultfilters.py:812
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] "%(size)d байт"
+msgstr[1] "%(size)d байт"
+
+#: template/defaultfilters.py:814
+#, python-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: template/defaultfilters.py:816
+#, python-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: template/defaultfilters.py:817
+#, python-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: utils/dateformat.py:42
+msgid "p.m."
+msgstr "p.m."
+
+#: utils/dateformat.py:43
+msgid "a.m."
+msgstr "a.m."
+
+#: utils/dateformat.py:48
+msgid "PM"
+msgstr "PM"
+
+#: utils/dateformat.py:49
+msgid "AM"
+msgstr "AM"
+
+#: utils/dateformat.py:98
+msgid "midnight"
+msgstr "шөнө"
+
+#: utils/dateformat.py:100
+msgid "noon"
+msgstr "үд"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Даваа гариг"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Мягмар гариг"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Лхагва гариг"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Пүрэв гариг"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Баасан гариг"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Бямба гариг"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Ням гариг"
+
+#: utils/dates.py:10
+msgid "Mon"
+msgstr "Дав"
+
+#: utils/dates.py:10
+msgid "Tue"
+msgstr "Мяг"
+
+#: utils/dates.py:10
+msgid "Wed"
+msgstr "Лха"
+
+#: utils/dates.py:10
+msgid "Thu"
+msgstr "Пүр"
+
+#: utils/dates.py:10
+msgid "Fri"
+msgstr "Баа"
+
+#: utils/dates.py:11
+msgid "Sat"
+msgstr "Бям"
+
+#: utils/dates.py:11
+msgid "Sun"
+msgstr "Ням"
+
+#: utils/dates.py:18
+msgid "January"
+msgstr "1-р сар"
+
+#: utils/dates.py:18
+msgid "February"
+msgstr "2-р сар"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "March"
+msgstr "3-р сар"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "April"
+msgstr "4-р сар"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "May"
+msgstr "5-р сар"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "June"
+msgstr "6-р сар"
+
+#: utils/dates.py:19 utils/dates.py:31
+msgid "July"
+msgstr "7-р сар"
+
+#: utils/dates.py:19
+msgid "August"
+msgstr "8-р сар"
+
+#: utils/dates.py:19
+msgid "September"
+msgstr "9-р сар"
+
+#: utils/dates.py:19
+msgid "October"
+msgstr "10-р сар"
+
+#: utils/dates.py:19
+msgid "November"
+msgstr "11-р сар"
+
+#: utils/dates.py:20
+msgid "December"
+msgstr "12-р сар"
+
+#: utils/dates.py:23
+msgid "jan"
+msgstr "1-р сар"
+
+#: utils/dates.py:23
+msgid "feb"
+msgstr "2-р сар"
+
+#: utils/dates.py:23
+msgid "mar"
+msgstr "3-р сар"
+
+#: utils/dates.py:23
+msgid "apr"
+msgstr "4-р сар"
+
+#: utils/dates.py:23
+msgid "may"
+msgstr "5-р сар"
+
+#: utils/dates.py:23
+msgid "jun"
+msgstr "6-р сар"
+
+#: utils/dates.py:24
+msgid "jul"
+msgstr "7-р сар"
+
+#: utils/dates.py:24
+msgid "aug"
+msgstr "8-р сар "
+
+#: utils/dates.py:24
+msgid "sep"
+msgstr "9-р сар"
+
+#: utils/dates.py:24
+msgid "oct"
+msgstr "10-р сар"
+
+#: utils/dates.py:24
+msgid "nov"
+msgstr "11-р сар"
+
+#: utils/dates.py:24
+msgid "dec"
+msgstr "12-р сар"
+
+#: utils/dates.py:31
+msgid "Jan."
+msgstr "1-р сар"
+
+#: utils/dates.py:31
+msgid "Feb."
+msgstr "2-р сар"
+
+#: utils/dates.py:32
+msgid "Aug."
+msgstr "8-р сар"
+
+#: utils/dates.py:32
+msgid "Sept."
+msgstr "9-р сар"
+
+#: utils/dates.py:32
+msgid "Oct."
+msgstr "10-р сар"
+
+#: utils/dates.py:32
+msgid "Nov."
+msgstr "11-р сар"
+
+#: utils/dates.py:32
+msgid "Dec."
+msgstr "12-р сар"
+
+#: utils/text.py:130
+msgid "or"
+msgstr "буюу"
+
+#: utils/timesince.py:21
+msgid "year"
+msgid_plural "years"
+msgstr[0] "жил "
+msgstr[1] "жил"
+
+#: utils/timesince.py:22
+msgid "month"
+msgid_plural "months"
+msgstr[0] "сар"
+msgstr[1] "сар"
+
+#: utils/timesince.py:23
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "долоо хоног"
+msgstr[1] "долоо хоног"
+
+#: utils/timesince.py:24
+msgid "day"
+msgid_plural "days"
+msgstr[0] "өдөр"
+msgstr[1] "өдөр"
+
+#: utils/timesince.py:25
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "цаг"
+msgstr[1] "цаг"
+
+#: utils/timesince.py:26
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "минут"
+msgstr[1] "минут"
+
+#: utils/timesince.py:45
+msgid "minutes"
+msgstr "минут"
+
+#: utils/timesince.py:50
+#, python-format
+msgid "%(number)d %(type)s"
+msgstr "%(number)d %(type)s"
+
+#: utils/timesince.py:56
+#, python-format
+msgid ", %(number)d %(type)s"
+msgstr ", %(number)d %(type)s"
+
+#: utils/translation/trans_real.py:518
+msgid "DATE_FORMAT"
+msgstr "N j, Y"
+
+#: utils/translation/trans_real.py:519
+msgid "DATETIME_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:520
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: utils/translation/trans_real.py:541
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:542
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
+
+#: views/generic/create_update.py:115
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s амжилттай үүслээ."
+
+#: views/generic/create_update.py:158
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr " %(verbose_name)s амжилттай шинэчлэгдлээ."
+
+#: views/generic/create_update.py:201
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s устлаа."
+
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "%(name)s дахь нэг буюу түүнээс дээш %(fieldname)s :%(obj)s"
+
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "%(name)s дахь нэг буюу түүнээс дээш %(fieldname)s:"
+
+#~ msgid "Old password:"
+#~ msgstr "Хуучин нууц үг:"
+
+#~ msgid "Relation to parent model"
+#~ msgstr "Эх загварт хамаарах хамаарал"
+
+#~ msgid "Add user"
+#~ msgstr "Хэрэглэгч нэмэх"
Binary file web/lib/django/conf/locale/mn/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/mn/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,149 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-05-04 19:01+0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:37
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:45
+msgid "Choose all"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:50
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:52
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:57
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:58
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:63
+msgid "Clear all"
+msgstr ""
+
+#: contrib/admin/media/js/actions.js:18
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/media/js/actions.js:109
+#: contrib/admin/media/js/actions.min.js:5
+msgid ""
+"You have unsaved changes on individual editable fields. If you run an "
+"action, your unsaved changes will be lost."
+msgstr ""
+
+#: contrib/admin/media/js/actions.js:121
+#: contrib/admin/media/js/actions.min.js:6
+msgid ""
+"You have selected an action, but you haven't saved your changes to "
+"individual fields yet. Please click OK to save. You'll need to re-run the "
+"action."
+msgstr ""
+
+#: contrib/admin/media/js/actions.js:123
+#: contrib/admin/media/js/actions.min.js:6
+msgid ""
+"You have selected an action, and you haven't made any changes on individual "
+"fields. You're probably looking for the Go button rather than the Save "
+"button."
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:24
+#: contrib/admin/media/js/dateparse.js:32
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr ""
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Now"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
+msgid "Clock"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Choose a time"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
+msgid "Midnight"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
+msgid "6 a.m."
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+msgid "Noon"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
+msgid "Cancel"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
+msgid "Calendar"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
+msgid "Yesterday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
+msgid "Tomorrow"
+msgstr ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/mn/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'd F Y'
+TIME_FORMAT = 'g:i:s A'
+# DATETIME_FORMAT =
+# YEAR_MONTH_FORMAT =
+# MONTH_DAY_FORMAT =
+SHORT_DATE_FORMAT = 'j M Y'
+# SHORT_DATETIME_FORMAT =
+# FIRST_DAY_OF_WEEK =
+# DATE_INPUT_FORMATS =
+# TIME_INPUT_FORMATS =
+# DATETIME_INPUT_FORMATS =
+# DECIMAL_SEPARATOR =
+# THOUSAND_SEPARATOR =
+# NUMBER_GROUPING =
Binary file web/lib/django/conf/locale/nb/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/nb/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,5148 @@
+# Norwegian (Bokmål) translation of Django
+# Copyright (C) 2005-2010
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-05-16 10:12+0200\n"
+"PO-Revision-Date: 2010-03-11 14:22+0100\n"
+"Last-Translator: Christian Mikalsen and Jon Lønne\n"
+"Language-Team: Norsk <no@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: conf/global_settings.py:44
+msgid "Arabic"
+msgstr "Arabisk"
+
+#: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "Bulgarsk"
+
+#: conf/global_settings.py:46
+msgid "Bengali"
+msgstr "Bengalsk"
+
+#: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr "Bosnisk"
+
+#: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "Katalansk"
+
+#: conf/global_settings.py:49
+msgid "Czech"
+msgstr "Tsjekkisk"
+
+#: conf/global_settings.py:50
+msgid "Welsh"
+msgstr "Walisisk"
+
+#: conf/global_settings.py:51
+msgid "Danish"
+msgstr "Dansk"
+
+#: conf/global_settings.py:52
+msgid "German"
+msgstr "Tysk"
+
+#: conf/global_settings.py:53
+msgid "Greek"
+msgstr "Gresk"
+
+#: conf/global_settings.py:54
+msgid "English"
+msgstr "Engelsk"
+
+#: conf/global_settings.py:55
+msgid "Spanish"
+msgstr "Spansk"
+
+#: conf/global_settings.py:56
+msgid "Argentinean Spanish"
+msgstr "Argentinsk spansk"
+
+#: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "Estisk"
+
+#: conf/global_settings.py:58
+msgid "Basque"
+msgstr "Baskisk"
+
+#: conf/global_settings.py:59
+msgid "Persian"
+msgstr "Persisk"
+
+#: conf/global_settings.py:60
+msgid "Finnish"
+msgstr "Finsk"
+
+#: conf/global_settings.py:61
+msgid "French"
+msgstr "Fransk"
+
+#: conf/global_settings.py:62
+msgid "Frisian"
+msgstr "Frisisk"
+
+#: conf/global_settings.py:63
+msgid "Irish"
+msgstr "Irsk"
+
+#: conf/global_settings.py:64
+msgid "Galician"
+msgstr "Galisisk"
+
+#: conf/global_settings.py:65
+msgid "Hebrew"
+msgstr "Hebraisk"
+
+#: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "Hindi"
+
+#: conf/global_settings.py:67
+msgid "Croatian"
+msgstr "Kroatisk"
+
+#: conf/global_settings.py:68
+msgid "Hungarian"
+msgstr "Ungarsk"
+
+#: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "Islandsk"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "Italiensk"
+
+#: conf/global_settings.py:71
+msgid "Japanese"
+msgstr "Japansk"
+
+#: conf/global_settings.py:72
+msgid "Georgian"
+msgstr "Georgisk"
+
+#: conf/global_settings.py:73
+msgid "Khmer"
+msgstr "Khmer"
+
+#: conf/global_settings.py:74
+msgid "Kannada"
+msgstr "Kannada"
+
+#: conf/global_settings.py:75
+msgid "Korean"
+msgstr "Koreansk"
+
+#: conf/global_settings.py:76
+msgid "Lithuanian"
+msgstr "Litauisk"
+
+#: conf/global_settings.py:77
+msgid "Latvian"
+msgstr "Latvisk"
+
+#: conf/global_settings.py:78
+msgid "Macedonian"
+msgstr "Makedonsk"
+
+#: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "Nederlandsk"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "Norsk"
+
+#: conf/global_settings.py:81
+msgid "Polish"
+msgstr "Polsk"
+
+#: conf/global_settings.py:82
+msgid "Portuguese"
+msgstr "Portugisisk"
+
+#: conf/global_settings.py:83
+msgid "Brazilian Portuguese"
+msgstr "Brasiliansk portugisisk"
+
+#: conf/global_settings.py:84
+msgid "Romanian"
+msgstr "Rumensk"
+
+#: conf/global_settings.py:85
+msgid "Russian"
+msgstr "Russisk"
+
+#: conf/global_settings.py:86
+msgid "Slovak"
+msgstr "Slovakisk"
+
+#: conf/global_settings.py:87
+msgid "Slovenian"
+msgstr "Slovensk"
+
+#: conf/global_settings.py:88
+msgid "Albanian"
+msgstr "Albansk"
+
+#: conf/global_settings.py:89
+msgid "Serbian"
+msgstr "Serbisk"
+
+#: conf/global_settings.py:90
+msgid "Serbian Latin"
+msgstr "Serbisk latin"
+
+#: conf/global_settings.py:91
+msgid "Swedish"
+msgstr "Svensk"
+
+#: conf/global_settings.py:92
+msgid "Tamil"
+msgstr "Tamil"
+
+#: conf/global_settings.py:93
+msgid "Telugu"
+msgstr "Telugu"
+
+#: conf/global_settings.py:94
+msgid "Thai"
+msgstr "Thai"
+
+#: conf/global_settings.py:95
+msgid "Turkish"
+msgstr "Tyrkisk"
+
+#: conf/global_settings.py:96
+msgid "Ukrainian"
+msgstr "Ukrainsk"
+
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "Vietnamesisk"
+
+#: conf/global_settings.py:98
+msgid "Simplified Chinese"
+msgstr "Forenklet kinesisk"
+
+#: conf/global_settings.py:99
+msgid "Traditional Chinese"
+msgstr "Tradisjonell kinesisk"
+
+#: contrib/admin/actions.py:52
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr "Slettet %(count)d %(items)s."
+
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1101
+msgid "Are you sure?"
+msgstr "Er du sikker?"
+
+#: contrib/admin/actions.py:77
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr "Slett valgte %(verbose_name_plural)s"
+
+#: contrib/admin/filterspecs.py:44
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+"<h3>Etter %s:</h3>\n"
+"<ul>\n"
+
+#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
+msgid "All"
+msgstr "Alle"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Any date"
+msgstr "Når som helst"
+
+#: contrib/admin/filterspecs.py:114
+msgid "Today"
+msgstr "I dag"
+
+#: contrib/admin/filterspecs.py:117
+msgid "Past 7 days"
+msgstr "Siste syv dager"
+
+#: contrib/admin/filterspecs.py:119
+msgid "This month"
+msgstr "Denne måneden"
+
+#: contrib/admin/filterspecs.py:121
+msgid "This year"
+msgstr "I år"
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
+msgid "Yes"
+msgstr "Ja"
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
+msgid "No"
+msgstr "Nei"
+
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:470
+msgid "Unknown"
+msgstr "Ukjent"
+
+#: contrib/admin/helpers.py:19
+msgid "Action:"
+msgstr "Handling:"
+
+#: contrib/admin/models.py:19
+msgid "action time"
+msgstr "tid for handling"
+
+#: contrib/admin/models.py:22
+msgid "object id"
+msgstr "objekt-ID"
+
+#: contrib/admin/models.py:23
+msgid "object repr"
+msgstr "objekt repr"
+
+#: contrib/admin/models.py:24
+msgid "action flag"
+msgstr "handlingsflagg"
+
+#: contrib/admin/models.py:25
+msgid "change message"
+msgstr "endre melding"
+
+#: contrib/admin/models.py:28
+msgid "log entry"
+msgstr "logginnlegg"
+
+#: contrib/admin/models.py:29
+msgid "log entries"
+msgstr "logginnlegg"
+
+#: contrib/admin/options.py:139 contrib/admin/options.py:154
+msgid "None"
+msgstr "Ingen"
+
+#: contrib/admin/options.py:558
+#, python-format
+msgid "Changed %s."
+msgstr "Endret %s."
+
+#: contrib/admin/options.py:558 contrib/admin/options.py:568
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:802
+#: forms/models.py:553
+msgid "and"
+msgstr "og"
+
+#: contrib/admin/options.py:563
+#, python-format
+msgid "Added %(name)s \"%(object)s\"."
+msgstr "Opprettet %(name)s \"%(object)s\"."
+
+#: contrib/admin/options.py:567
+#, python-format
+msgid "Changed %(list)s for %(name)s \"%(object)s\"."
+msgstr "Endret %(list)s for %(name)s \"%(object)s\"."
+
+#: contrib/admin/options.py:572
+#, python-format
+msgid "Deleted %(name)s \"%(object)s\"."
+msgstr "Slettet %(name)s \"%(object)s\"."
+
+#: contrib/admin/options.py:576
+msgid "No fields changed."
+msgstr "Ingen felt endret."
+
+#: contrib/admin/options.py:642
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "%(name)s \"%(obj)s\" ble opprettet."
+
+#: contrib/admin/options.py:646 contrib/admin/options.py:679
+msgid "You may edit it again below."
+msgstr "Du kan redigere videre nedenfor."
+
+#: contrib/admin/options.py:656 contrib/admin/options.py:689
+#, python-format
+msgid "You may add another %s below."
+msgstr "Du kan opprette ny %s nedenfor."
+
+#: contrib/admin/options.py:677
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "%(name)s \"%(obj)s\" ble endret."
+
+#: contrib/admin/options.py:685
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" ble endret. Du kan redigere videre nedenfor."
+
+#: contrib/admin/options.py:743
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr "Du må velge objekter for å utføre handlinger på dem. Ingen objekter "
+"har blitt endret."
+
+#: contrib/admin/options.py:761
+msgid "No action selected."
+msgstr "Ingen handling valgt."
+
+#: contrib/admin/options.py:841
+#, python-format
+msgid "Add %s"
+msgstr "Opprett %s"
+
+#: contrib/admin/options.py:867 contrib/admin/options.py:1081
+#, python-format
+msgid "%(name)s object with primary key %(key)r does not exist."
+msgstr "%(name)s-objekt med primærnøkkelen %(key)r finnes ikke."
+
+#: contrib/admin/options.py:932
+#, python-format
+msgid "Change %s"
+msgstr "Endre %s"
+
+#: contrib/admin/options.py:977
+msgid "Database error"
+msgstr "Databasefeil"
+
+#: contrib/admin/options.py:1013
+#, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] "%(count)s %(name)s ble endret."
+msgstr[1] "%(count)s %(name)s ble endret."
+
+#: contrib/admin/options.py:1040
+#, python-format
+msgid "of %(count)d selected"
+msgid_plural "of %(count)d selected"
+msgstr[0] "av %(count)d valgt"
+msgstr[1] "av %(count)d valgt"
+
+#: contrib/admin/options.py:1042
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s valgt"
+msgstr[1] "Alle %(total_count)s valgt"
+
+#: contrib/admin/options.py:1094
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "%(name)s \"%(obj)s\" ble slettet."
+
+#: contrib/admin/options.py:1131
+#, python-format
+msgid "Change history: %s"
+msgstr "Endringshistorikk: %s"
+
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+"Vennligst angi korrekt brukernavn og passord. Merk at det er forskjell på "
+"små og store bokstaver."
+
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
+msgid "Please log in again, because your session has expired."
+msgstr "Økten din har tidsavbrutt, vennligst logg inn igjen."
+
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+"Det ser ut som om nettleseren din ikke støtter informasjonskapsler "
+"(cookies). Vennligst konfigurer nettleseren din og prøv igjen."
+
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
+#: contrib/admin/views/decorators.py:66
+msgid "Usernames cannot contain the '@' character."
+msgstr "Brukernavnet kan ikke inneholde tegnet '@'."
+
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr "E-postadressen er ikke brukernavnet ditt, prøv '%s' isteden."
+
+#: contrib/admin/sites.py:393
+msgid "Site administration"
+msgstr "Nettstedsadministrasjon"
+
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/templates/registration/password_reset_complete.html:14
+#: contrib/admin/views/decorators.py:20
+msgid "Log in"
+msgstr "Logg inn"
+
+#: contrib/admin/sites.py:452
+#, python-format
+msgid "%s administration"
+msgstr "%s-administrasjon"
+
+#: contrib/admin/widgets.py:75
+msgid "Date:"
+msgstr "Dato:"
+
+#: contrib/admin/widgets.py:75
+msgid "Time:"
+msgstr "Tid:"
+
+#: contrib/admin/widgets.py:99
+msgid "Currently:"
+msgstr "Nå:"
+
+#: contrib/admin/widgets.py:99
+msgid "Change:"
+msgstr "Endre:"
+
+#: contrib/admin/widgets.py:129
+msgid "Lookup"
+msgstr "Oppslag"
+
+#: contrib/admin/widgets.py:244
+msgid "Add Another"
+msgstr "Legg til ny"
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Fant ikke siden"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Beklager, men siden du spør etter finnes ikke."
+
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/app_index.html:8
+#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:39
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/object_history.html:6
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Home"
+msgstr "Hjem"
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Tjenerfeil"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Tjenerfeil (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Tjenerfeil <em>(500)</em>"
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"Det har oppstått en feil. Feilen er blitt rapportert til administrator via e-"
+"post, og vil bli fikset snart. Takk for din tålmodighet."
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr "Utfør den valgte handlingen"
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr "Gå"
+
+#: contrib/admin/templates/admin/actions.html:10
+msgid "Click here to select the objects across all pages"
+msgstr "Trykk her for å velge samtlige objekter fra alle sider"
+
+#: contrib/admin/templates/admin/actions.html:10
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Velg alle %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:12
+msgid "Clear selection"
+msgstr "Nullstill valg"
+
+#: contrib/admin/templates/admin/app_index.html:10
+#: contrib/admin/templates/admin/index.html:19
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
+#: contrib/admin/templates/admin/base.html:27
+msgid "Welcome,"
+msgstr "Velkommen,"
+
+#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
+msgstr "Dokumentasjon"
+
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Change password"
+msgstr "Endre passord"
+
+#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Log out"
+msgstr "Logg ut"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django administrasjonsside"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Django-administrasjon"
+
+#: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/index.html:29
+msgid "Add"
+msgstr "Opprett"
+
+#: contrib/admin/templates/admin/change_form.html:28
+#: contrib/admin/templates/admin/object_history.html:10
+msgid "History"
+msgstr "Historikk"
+
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
+msgid "View on site"
+msgstr "Vis på nettsted"
+
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:68
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Vennligst korriger feilen under."
+msgstr[1] "Vennligst korriger feilene under."
+
+#: contrib/admin/templates/admin/change_list.html:60
+#, python-format
+msgid "Add %(name)s"
+msgstr "Opprett %(name)s"
+
+#: contrib/admin/templates/admin/change_list.html:79
+msgid "Filter"
+msgstr "Filtrering"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:10
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:294
+msgid "Delete"
+msgstr "Slett"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:16
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+"Hvis du sletter %(object_name)s '%(escaped_object)s', vil også slette "
+"relaterte objekter, men du har ikke tillatelse til å slette følgende "
+"objekttyper:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:23
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+"Er du sikker på at du vil slette %(object_name)s \"%(escaped_object)s\"? "
+"Alle de følgende relaterte objektene vil bli slettet:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
+msgid "Yes, I'm sure"
+msgstr "Ja, jeg er sikker"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+msgid "Delete multiple objects"
+msgstr "Slett flere objekter"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+"Sletting av %(object_name)s vil også slette relaterte objekter, men du har "
+"ikke tillatelse til å slette følgende objekttyper:"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, python-format
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Er du sikker på at du vil slette de valgte %(object_name)s-objektene? De "
+"følgende objektene og deres relaterte objekter vil bli slettet:"
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr "Etter %(filter_title)s "
+
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Modeller tilgjengelig i %(name)s-applikasjonen."
+
+#: contrib/admin/templates/admin/index.html:35
+msgid "Change"
+msgstr "Endre"
+
+#: contrib/admin/templates/admin/index.html:45
+msgid "You don't have permission to edit anything."
+msgstr "Du har ikke rettigheter til å redigere noe."
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "Recent Actions"
+msgstr "Siste handlinger"
+
+#: contrib/admin/templates/admin/index.html:54
+msgid "My Actions"
+msgstr "Mine handlinger"
+
+#: contrib/admin/templates/admin/index.html:58
+msgid "None available"
+msgstr "Ingen tilgjengelige"
+
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr "Ukjent innhold"
+
+#: contrib/admin/templates/admin/invalid_setup.html:7
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+"Noe er galt med databaseinstallasjonen din. Sørg for at databasetabellene er "
+"opprettet og at brukeren har de nødvendige rettigheter."
+
+#: contrib/admin/templates/admin/login.html:19
+msgid "Username:"
+msgstr "Brukernavn:"
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Password:"
+msgstr "Passord:"
+
+#: contrib/admin/templates/admin/object_history.html:22
+msgid "Date/time"
+msgstr "Dato/tid"
+
+#: contrib/admin/templates/admin/object_history.html:23
+msgid "User"
+msgstr "Bruker"
+
+#: contrib/admin/templates/admin/object_history.html:24
+msgid "Action"
+msgstr "Handling"
+
+#: contrib/admin/templates/admin/object_history.html:38
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Dette objektet har ingen endringshistorikk. Det var sannsynligvis ikke "
+"opprettet med administrasjonssiden."
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Vis alle"
+
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Lagre"
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Search"
+msgstr "Søk"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "Ett resultat"
+msgstr[1] "%(counter)s resultater"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s totalt"
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save as new"
+msgstr "Lagre som ny"
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and add another"
+msgstr "Lagre og opprett ny"
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save and continue editing"
+msgstr "Lagre og fortsett å redigere"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+"Skriv først inn brukernavn og passord. Deretter vil du få mulighet til å "
+"endre flere brukerinnstillinger."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr "Skriv inn et nytt passord for brukeren <strong>%(username)s</strong>."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Passord"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Passord (gjenta)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Skriv inn det samme passordet som ovenfor, for verifisering."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:53
+#: contrib/admin/templates/admin/edit_inline/tabular.html:99
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Legg til ny %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:56
+#: contrib/admin/templates/admin/edit_inline/tabular.html:102
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Fjern"
+
+#: contrib/admin/templates/admin/edit_inline/tabular.html:15
+msgid "Delete?"
+msgstr "Slette?"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Takk for at du valgte å bruke kvalitetstid på nettstedet i dag."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Logg inn igjen"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "Password change"
+msgstr "Endre passord"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Passord endret"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Ditt passord ble endret."
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Venligst oppgi ditt gamle passord av sikkerhetsgrunner. Oppgi deretter ditt "
+"nye passord to ganger, slik at vi kan kontrollere at det er korrekt."
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Gammelt passord"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Nytt passord"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
+#: contrib/admin/templates/registration/password_reset_confirm.html:21
+msgid "Change my password"
+msgstr "Endre passord"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_form.html:10
+msgid "Password reset"
+msgstr "Nullstill passord"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:6
+#: contrib/admin/templates/registration/password_reset_complete.html:10
+msgid "Password reset complete"
+msgstr "Passord nullstilt"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:12
+msgid "Your password has been set.  You may go ahead and log in now."
+msgstr "Passordet ditt er satt. Du kan nå logge inn."
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+msgid "Password reset confirmation"
+msgstr "Bekreftelse på nullstilt passord"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:12
+msgid "Enter new password"
+msgstr "Oppgi nytt passord"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:14
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+"Venligst oppgi ditt nye passord to ganger, for å sikre at du oppgir det "
+"korrekt."
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Nytt passord:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Gjenta nytt passord:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:26
+msgid "Password reset unsuccessful"
+msgstr "Passordet ble ikke nullstilt"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:28
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used.  Please request a new password reset."
+msgstr ""
+"Nullstillingslinken er ugyldig, kanskje fordi den allerede har vært brukt. "
+"Vennligst nullstill passordet ditt på nytt."
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Passordet ble nullstilt"
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"Vi har sendt deg en e-post med instruksjoner for nullstilling av passord. Du "
+"bør motta den om kort tid."
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr ""
+"Du har mottatt denne e-posten fordi du har bedt om nullstilling av passordet "
+"ditt"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "for din konto på %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+msgid "Please go to the following page and choose a new password:"
+msgstr "Vennligst gå til følgende side og velg et nytt passord:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:9
+msgid "Your username, in case you've forgotten:"
+msgstr "Brukernavnet ditt, i tilfelle du har glemt det:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Thanks for using our site!"
+msgstr "Takk for at du bruker siden vår!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "Hilsen %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+"Glemt passordet ditt? Oppgi e-postadressen din under, så sender vi deg en e-"
+"post med instruksjoner for nullstilling av passord."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "E-postadresse:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Nullstill mitt passord"
+
+#: contrib/admin/templatetags/admin_list.py:240
+msgid "All dates"
+msgstr "Alle datoer"
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s"
+msgstr "Velg %s"
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s to change"
+msgstr "Velg %s du ønsker å endre"
+
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
+msgid "site"
+msgstr "nettsted"
+
+#: contrib/admin/views/template.py:40
+msgid "template"
+msgstr "mal"
+
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
+msgid "tag:"
+msgstr "tag:"
+
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
+msgid "filter:"
+msgstr "filter:"
+
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
+msgid "view:"
+msgstr "view:"
+
+#: contrib/admindocs/views.py:190
+#, python-format
+msgid "App %r not found"
+msgstr "Fant ikke applikasjonen %r"
+
+#: contrib/admindocs/views.py:197
+#, python-format
+msgid "Model %(model_name)r not found in app %(app_label)r"
+msgstr "Fant ikke modellen %(model_name)r i applikasjonen %(app_label)r"
+
+#: contrib/admindocs/views.py:209
+#, python-format
+msgid "the related `%(app_label)s.%(data_type)s` object"
+msgstr "det relaterte `%(app_label)s.%(data_type)s`-objektet"
+
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
+msgid "model:"
+msgstr "modell:"
+
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
+#, python-format
+msgid "related `%(app_label)s.%(object_name)s` objects"
+msgstr "relaterte `%(app_label)s.%(object_name)s`-objekter"
+
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
+#, python-format
+msgid "all %s"
+msgstr "alle %s"
+
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
+#, python-format
+msgid "number of %s"
+msgstr "antall %s"
+
+#: contrib/admindocs/views.py:271
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Felter på %s-objekter"
+
+#: contrib/admindocs/views.py:361
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s ser ikke ut til å være et urlpattern-objekt"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr "Bokmerker"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
+msgid "Documentation bookmarklets"
+msgstr "Dokumentasjonsbokmerker"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p class=\"help\">For å installere bokmerker, dra linken til verktøylinja\n"
+"for bokmerker, eller høyreklikk og legg til i bokmerker. Nå kan du du velge\n"
+"bokmerket fra hvilken som helst side på nettstedet. Noen av disse\n"
+"bokmerkene krever at datamaskinen du bruker er markert som \"intern\"\n"
+"(kontakt din systemadministrator hvis du er usikker på om maskinen din er "
+"\"intern\").</p>\n"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
+msgid "Documentation for this page"
+msgstr "Dokumentasjon for denne siden"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+"Hopp fra hvilken som helst side til dokumentasjonen for visningsfunksjonen "
+"som genererte den siden."
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
+msgid "Show object ID"
+msgstr "Vis objekt-ID"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"Viser \"content-type\" og en unik ID for sider som representerer et enkelt "
+"objekt."
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
+msgid "Edit this object (current window)"
+msgstr "Endre dette objektet (nåværende vindu)"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr ""
+"Hopper til administrasjonssiden for sider som representerer et enkelt objekt."
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
+msgid "Edit this object (new window)"
+msgstr "Endre dette objektet (nytt vindu)"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
+msgid "As above, but opens the admin page in a new window."
+msgstr "Samme som over, men åpner administrasjonssiden i et nytt vindu."
+
+#: contrib/auth/admin.py:29
+msgid "Personal info"
+msgstr "Personlig informasjon"
+
+#: contrib/auth/admin.py:30
+msgid "Permissions"
+msgstr "Rettigheter"
+
+#: contrib/auth/admin.py:31
+msgid "Important dates"
+msgstr "Viktige datoer"
+
+#: contrib/auth/admin.py:32
+msgid "Groups"
+msgstr "Grupper"
+
+#: contrib/auth/admin.py:114
+msgid "Password changed successfully."
+msgstr "Passordet er endret."
+
+#: contrib/auth/admin.py:124
+#, python-format
+msgid "Change password: %s"
+msgstr "Endre passord: %s"
+
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Brukernavn"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr ""
+"Påkrevet. 30 tegn eller færre. Kun bokstaver, tall og @/./+/-/_."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Verdien kan kun inneholde bokstaver, tall og @/./+/-/_."
+
+#: contrib/auth/forms.py:18
+msgid "Password confirmation"
+msgstr "Passordbekreftelse"
+
+#: contrib/auth/forms.py:31
+msgid "A user with that username already exists."
+msgstr "Det eksisterer allerede en bruker med dette brukernavnet."
+
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
+msgid "The two password fields didn't match."
+msgstr "De to passordfeltene er ikke like."
+
+#: contrib/auth/forms.py:83
+msgid "This account is inactive."
+msgstr "Denne kontoen er inaktiv."
+
+#: contrib/auth/forms.py:88
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"Din nettleser ser ikke ut til å støtte informasjonskapsler (cookies). "
+"Informasjonskapsler er påkrevet for å logge inn."
+
+#: contrib/auth/forms.py:101
+msgid "E-mail"
+msgstr "E-post"
+
+#: contrib/auth/forms.py:110
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Den oppgitte e-postadressen er ikke registrert hos oss. Er du sikker på at "
+"du er registrert?"
+
+#: contrib/auth/forms.py:136
+#, python-format
+msgid "Password reset on %s"
+msgstr "Nullstilling av passord på %s"
+
+#: contrib/auth/forms.py:145
+msgid "New password confirmation"
+msgstr "Bekreft nytt passord"
+
+#: contrib/auth/forms.py:178
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "Ditt gamle passord er galt. Vennligst prøv igjen."
+
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
+msgid "name"
+msgstr "navn"
+
+#: contrib/auth/models.py:68
+msgid "codename"
+msgstr "kodenavn"
+
+#: contrib/auth/models.py:72
+msgid "permission"
+msgstr "rettighet"
+
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
+msgid "permissions"
+msgstr "rettigheter"
+
+#: contrib/auth/models.py:98
+msgid "group"
+msgstr "gruppe"
+
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
+msgid "groups"
+msgstr "grupper"
+
+#: contrib/auth/models.py:196
+msgid "username"
+msgstr "brukernavn"
+
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Påkrevet. 30 tegn eller færre. Bokstaver, tall og @/./+/-/_."
+
+#: contrib/auth/models.py:197
+msgid "first name"
+msgstr "fornavn"
+
+#: contrib/auth/models.py:198
+msgid "last name"
+msgstr "etternavn"
+
+#: contrib/auth/models.py:199
+msgid "e-mail address"
+msgstr "e-postadresse"
+
+#: contrib/auth/models.py:200
+msgid "password"
+msgstr "passord"
+
+#: contrib/auth/models.py:200
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+"Bruk '[algo]$[salt]$[hexdigest]' eller <a href=\"password/\">endre passord-"
+"skjemaet</a>."
+
+#: contrib/auth/models.py:201
+msgid "staff status"
+msgstr "administrasjonsstatus"
+
+#: contrib/auth/models.py:201
+msgid "Designates whether the user can log into this admin site."
+msgstr "Angir at brukeren kan logge inn på denne administrasjonssiden."
+
+#: contrib/auth/models.py:202
+msgid "active"
+msgstr "aktiv"
+
+#: contrib/auth/models.py:202
+msgid ""
+"Designates whether this user should be treated as active. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Angir at denne brukeren er aktiv. Avmerk denne i stedet for å slette kontoen."
+
+#: contrib/auth/models.py:203
+msgid "superuser status"
+msgstr "superbruker"
+
+#: contrib/auth/models.py:203
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+"Angir at denne brukeren har alle rettigheter uten å eksplisitt sette de."
+
+#: contrib/auth/models.py:204
+msgid "last login"
+msgstr "siste innlogging"
+
+#: contrib/auth/models.py:205
+msgid "date joined"
+msgstr "registrert"
+
+#: contrib/auth/models.py:207
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"I tillegg til de rettighetene som blir angitt manuelt, får brukeren også "
+"rettighetene til gruppene han/hun er med i."
+
+#: contrib/auth/models.py:208
+msgid "user permissions"
+msgstr "Brukerrettigheter"
+
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
+msgid "user"
+msgstr "bruker"
+
+#: contrib/auth/models.py:213
+msgid "users"
+msgstr "brukere"
+
+#: contrib/auth/models.py:394
+msgid "message"
+msgstr "melding"
+
+#: contrib/auth/views.py:79
+msgid "Logged out"
+msgstr "Logget ut"
+
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:416
+msgid "Enter a valid e-mail address."
+msgstr "Oppgi en gyldig e-postadresse."
+
+#: contrib/comments/admin.py:12
+msgid "Content"
+msgstr "Innhold"
+
+#: contrib/comments/admin.py:15
+msgid "Metadata"
+msgstr "Metadata"
+
+#: contrib/comments/admin.py:39
+msgid "flagged"
+msgstr "flagget"
+
+#: contrib/comments/admin.py:40
+msgid "Flag selected comments"
+msgstr "Flagg valgte kommentarer"
+
+#: contrib/comments/admin.py:43
+msgid "approved"
+msgstr "godkjent"
+
+#: contrib/comments/admin.py:44
+msgid "Approve selected comments"
+msgstr "Tillat valgte kommentarer"
+
+#: contrib/comments/admin.py:47
+msgid "removed"
+msgstr "fjernet"
+
+#: contrib/comments/admin.py:48
+msgid "Remove selected comments"
+msgstr "Fjern valgte kommentarer"
+
+#: contrib/comments/admin.py:60
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 kommentar ble %(action)s."
+msgstr[1] "%(count)s kommentarer ble %(action)s."
+
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr "%(site_name)s kommentarer"
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr "Siste kommentarer fra %(site_name)s"
+
+#: contrib/comments/forms.py:93
+msgid "Name"
+msgstr "Navn"
+
+#: contrib/comments/forms.py:94
+msgid "Email address"
+msgstr "E-postadresse"
+
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1121
+msgid "URL"
+msgstr "Nettadresse"
+
+#: contrib/comments/forms.py:96
+msgid "Comment"
+msgstr "Kommentar"
+
+#: contrib/comments/forms.py:175
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Pass munnen din! Ordet %s er ikke tillatt her."
+msgstr[1] "Pass munnen din! Ordene %s er ikke tillatt her."
+
+#: contrib/comments/forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr ""
+"Hvis du oppgir noe i dette feltet, vil kommentaren bli behandlet som spam"
+
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
+msgid "content type"
+msgstr "innholdstype"
+
+#: contrib/comments/models.py:24
+msgid "object ID"
+msgstr "objekt-ID"
+
+#: contrib/comments/models.py:52
+msgid "user's name"
+msgstr "brukerens navn"
+
+#: contrib/comments/models.py:53
+msgid "user's email address"
+msgstr "brukerens e-postadresse"
+
+#: contrib/comments/models.py:54
+msgid "user's URL"
+msgstr "brukerens nettadresse"
+
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
+msgid "comment"
+msgstr "kommentar"
+
+#: contrib/comments/models.py:59
+msgid "date/time submitted"
+msgstr "dato/tid for innsendelse"
+
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:916
+msgid "IP address"
+msgstr "IP-adresse"
+
+#: contrib/comments/models.py:61
+msgid "is public"
+msgstr "er tilgjengelig for alle"
+
+#: contrib/comments/models.py:62
+msgid ""
+"Uncheck this box to make the comment effectively disappear from the site."
+msgstr "Avmerk denne boksen for å fjerne kommentaren fra siden."
+
+#: contrib/comments/models.py:64
+msgid "is removed"
+msgstr "er fjernet"
+
+#: contrib/comments/models.py:65
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+"Huk av denne hvis kommentaren er upassende. Meldingen \"Denne kommentaren "
+"har blitt fjernet\" vil bli vist i stedet."
+
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr "kommentarer"
+
+#: contrib/comments/models.py:119
+msgid ""
+"This comment was posted by an authenticated user and thus the name is read-"
+"only."
+msgstr ""
+"Denne kommentaren er skrevet av en innlogget bruker og navnet kan derfor "
+"ikke endres."
+
+#: contrib/comments/models.py:128
+msgid ""
+"This comment was posted by an authenticated user and thus the email is read-"
+"only."
+msgstr ""
+"Denne kommentaren er skrevet av en innlogget bruker og e-postadressen kan "
+"derfor ikke endres."
+
+#: contrib/comments/models.py:153
+#, python-format
+msgid ""
+"Posted by %(user)s at %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+msgstr ""
+"Skrevet av %(user)s, %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr "flagg"
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr "dato"
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr "kommentarflagg"
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr "kommentarflagg"
+
+#: contrib/comments/templates/comments/approve.html:4
+msgid "Approve a comment"
+msgstr "Tillat en kommentar"
+
+#: contrib/comments/templates/comments/approve.html:7
+msgid "Really make this comment public?"
+msgstr "Gjør denne kommentaren offentlig?"
+
+#: contrib/comments/templates/comments/approve.html:12
+msgid "Approve"
+msgstr "Godkjenn"
+
+#: contrib/comments/templates/comments/approved.html:4
+msgid "Thanks for approving"
+msgstr "Takk for godkjennelse"
+
+#: contrib/comments/templates/comments/approved.html:7
+#: contrib/comments/templates/comments/deleted.html:7
+#: contrib/comments/templates/comments/flagged.html:7
+msgid ""
+"Thanks for taking the time to improve the quality of discussion on our site"
+msgstr ""
+"Takk for at du tok deg tid til å forbedre kvaliteten på diskusjonen på siden "
+"vår"
+
+#: contrib/comments/templates/comments/delete.html:4
+msgid "Remove a comment"
+msgstr "Fjern en kommentar"
+
+#: contrib/comments/templates/comments/delete.html:7
+msgid "Really remove this comment?"
+msgstr "Fjerne denne kommentaren?"
+
+#: contrib/comments/templates/comments/deleted.html:4
+msgid "Thanks for removing"
+msgstr "Takk for fjerningen"
+
+#: contrib/comments/templates/comments/flag.html:4
+msgid "Flag this comment"
+msgstr "Flagg denne kommentaren"
+
+#: contrib/comments/templates/comments/flag.html:7
+msgid "Really flag this comment?"
+msgstr "Flagg denne kommentaren?"
+
+#: contrib/comments/templates/comments/flag.html:12
+msgid "Flag"
+msgstr "Flagg"
+
+#: contrib/comments/templates/comments/flagged.html:4
+msgid "Thanks for flagging"
+msgstr "Takk for flagging"
+
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
+msgid "Post"
+msgstr "Publiser"
+
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
+msgid "Preview"
+msgstr "Forhåndsvisning"
+
+#: contrib/comments/templates/comments/posted.html:4
+msgid "Thanks for commenting"
+msgstr "Takk for kommentar"
+
+#: contrib/comments/templates/comments/posted.html:7
+msgid "Thank you for your comment"
+msgstr "Takk for din kommentar"
+
+#: contrib/comments/templates/comments/preview.html:4
+#: contrib/comments/templates/comments/preview.html:13
+msgid "Preview your comment"
+msgstr "Forhåndsvis kommentaren din"
+
+#: contrib/comments/templates/comments/preview.html:11
+msgid "Please correct the error below"
+msgid_plural "Please correct the errors below"
+msgstr[0] "Vennligst korriger feilen under"
+msgstr[1] "Vennligst korriger feilene under"
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "Post your comment"
+msgstr "Publiser din kommentar"
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "or make changes"
+msgstr "eller gjør endringer"
+
+#: contrib/contenttypes/models.py:77
+msgid "python model class name"
+msgstr "python-modell klassenavn"
+
+#: contrib/contenttypes/models.py:82
+msgid "content types"
+msgstr "innholdstyper"
+
+#: contrib/flatpages/admin.py:9
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Eksempel: '/om/kontakt/'. Kontroller at det er en skråstrek foran og bak."
+
+#: contrib/flatpages/admin.py:11
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Dette feltet kan bare inneholde bokstaver, nummer, understreker, "
+"bindestreker eller skråstreker."
+
+#: contrib/flatpages/admin.py:22
+msgid "Advanced options"
+msgstr "Avanserte innstillinger"
+
+#: contrib/flatpages/models.py:8
+msgid "title"
+msgstr "tittel"
+
+#: contrib/flatpages/models.py:9
+msgid "content"
+msgstr "innhold"
+
+#: contrib/flatpages/models.py:10
+msgid "enable comments"
+msgstr "tillat kommentarer"
+
+#: contrib/flatpages/models.py:11
+msgid "template name"
+msgstr "malnavn"
+
+#: contrib/flatpages/models.py:12
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Eksempel: 'flatpages/kontakt_side.html'. Hvis denne ikke er gitt, vil "
+"'flatpages/default.html' bli brukt."
+
+#: contrib/flatpages/models.py:13
+msgid "registration required"
+msgstr "krever registrering"
+
+#: contrib/flatpages/models.py:13
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Hvis denne er krysset av, kan kun innloggede brukere se siden."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "flatside"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "flatsider"
+
+#: contrib/formtools/wizard.py:140
+msgid ""
+"We apologize, but your form has expired. Please continue filling out the "
+"form from this page."
+msgstr ""
+"Vi beklager, men dette skjemaet har tidsavbrutt. Vennligst fyll ut skjemaet "
+"fra denne siden."
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:269
+msgid "Point"
+msgstr "Punkt"
+
+#: contrib/gis/db/models/fields.py:273
+msgid "Line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:277
+msgid "Polygon"
+msgstr "Polygon"
+
+#: contrib/gis/db/models/fields.py:281
+msgid "Multi-point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:285
+msgid "Multi-line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:289
+msgid "Multi polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:293
+msgid "Geometry collection"
+msgstr ""
+
+#: contrib/gis/forms/fields.py:17
+msgid "No geometry value provided."
+msgstr "Ingen geometriverdi oppgitt."
+
+#: contrib/gis/forms/fields.py:18
+msgid "Invalid geometry value."
+msgstr "Ugyldig geometriverdi"
+
+#: contrib/gis/forms/fields.py:19
+msgid "Invalid geometry type."
+msgstr "Ugyldig geometritype"
+
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+"En feil oppstod ved transformering av geometrien til SRID fra geometrifeltet."
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "th"
+msgstr "."
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "st"
+msgstr "."
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "nd"
+msgstr "."
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "rd"
+msgstr "."
+
+#: contrib/humanize/templatetags/humanize.py:51
+#, python-format
+msgid "%(value).1f million"
+msgid_plural "%(value).1f million"
+msgstr[0] "%(value).1f million"
+msgstr[1] "%(value).1f millioner"
+
+#: contrib/humanize/templatetags/humanize.py:54
+#, python-format
+msgid "%(value).1f billion"
+msgid_plural "%(value).1f billion"
+msgstr[0] "%(value).1f milliard"
+msgstr[1] "%(value).1f milliarder"
+
+#: contrib/humanize/templatetags/humanize.py:57
+#, python-format
+msgid "%(value).1f trillion"
+msgid_plural "%(value).1f trillion"
+msgstr[0] "%(value).1f billion"
+msgstr[1] "%(value).1f billioner"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "one"
+msgstr "én"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "two"
+msgstr "to"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "three"
+msgstr "tre"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "four"
+msgstr "fire"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "five"
+msgstr "fem"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "six"
+msgstr "seks"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "seven"
+msgstr "sju"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "eight"
+msgstr "åtte"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "nine"
+msgstr "ni"
+
+#: contrib/humanize/templatetags/humanize.py:93
+msgid "today"
+msgstr "i dag"
+
+#: contrib/humanize/templatetags/humanize.py:95
+msgid "tomorrow"
+msgstr "i morgen"
+
+#: contrib/humanize/templatetags/humanize.py:97
+msgid "yesterday"
+msgstr "i går"
+
+#: contrib/localflavor/ar/forms.py:28
+msgid "Enter a postal code in the format NNNN or ANNNNAAA."
+msgstr "Oppgi et postnummer på formen NNNN eller ANNNNAAA."
+
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
+msgid "This field requires only numbers."
+msgstr "Feltet krever kun tall."
+
+#: contrib/localflavor/ar/forms.py:51
+msgid "This field requires 7 or 8 digits."
+msgstr "Feltet krever 7 eller 8 siffer."
+
+#: contrib/localflavor/ar/forms.py:80
+msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
+msgstr "Oppgi gyldig CUIT på formen XX-XXXXXXXX-X or XXXXXXXXXXXX."
+
+#: contrib/localflavor/ar/forms.py:81
+msgid "Invalid CUIT."
+msgstr "Ugyldig CUIT."
+
+#: contrib/localflavor/at/at_states.py:5
+msgid "Burgenland"
+msgstr "Burgenland"
+
+#: contrib/localflavor/at/at_states.py:6
+msgid "Carinthia"
+msgstr "Carinthia"
+
+#: contrib/localflavor/at/at_states.py:7
+msgid "Lower Austria"
+msgstr "Niederösterreich"
+
+#: contrib/localflavor/at/at_states.py:8
+msgid "Upper Austria"
+msgstr "Oberösterreich"
+
+#: contrib/localflavor/at/at_states.py:9
+msgid "Salzburg"
+msgstr "Salzburg"
+
+#: contrib/localflavor/at/at_states.py:10
+msgid "Styria"
+msgstr "Steiermark"
+
+#: contrib/localflavor/at/at_states.py:11
+msgid "Tyrol"
+msgstr "Tirol"
+
+#: contrib/localflavor/at/at_states.py:12
+msgid "Vorarlberg"
+msgstr "Vorarlberg"
+
+#: contrib/localflavor/at/at_states.py:13
+msgid "Vienna"
+msgstr "Wien"
+
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
+msgid "Enter a zip code in the format XXXX."
+msgstr "Oppgi et postnummer på formen XXXX."
+
+#: contrib/localflavor/at/forms.py:48
+msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
+msgstr "Oppgi et gyldig Østerrisk personnummer på formen XXXX XXXXXX."
+
+#: contrib/localflavor/au/forms.py:17
+msgid "Enter a 4 digit post code."
+msgstr "Oppgi et firesifret postnummer."
+
+#: contrib/localflavor/br/forms.py:22
+msgid "Enter a zip code in the format XXXXX-XXX."
+msgstr "Oppgi et postnummer på formen XXXXX-XXX."
+
+#: contrib/localflavor/br/forms.py:31
+msgid "Phone numbers must be in XX-XXXX-XXXX format."
+msgstr "Telefonnummeret må være på formen XX-XXXX-XXXX."
+
+#: contrib/localflavor/br/forms.py:59
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
+msgstr ""
+"Velg en gyldig brasiliansk stat. Den staten er ikke et av de tilgjengelige "
+"valgene."
+
+#: contrib/localflavor/br/forms.py:95
+msgid "Invalid CPF number."
+msgstr "Ugyldig CPF-nummer."
+
+#: contrib/localflavor/br/forms.py:96
+msgid "This field requires at most 11 digits or 14 characters."
+msgstr "Feltet krever maksimum 11 eller 14 siffer."
+
+#: contrib/localflavor/br/forms.py:135
+msgid "Invalid CNPJ number."
+msgstr "Ugyldig CNPJ-nummer."
+
+#: contrib/localflavor/br/forms.py:137
+msgid "This field requires at least 14 digits"
+msgstr "Feltet krever minst 14 siffer."
+
+#: contrib/localflavor/ca/forms.py:25
+msgid "Enter a postal code in the format XXX XXX."
+msgstr "Oppgi et postnummer på formen XXX XXX."
+
+#: contrib/localflavor/ca/forms.py:96
+msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
+msgstr "Oppgi et gyldig kanadisk personnummer på formen XXX-XXX-XXX."
+
+#: contrib/localflavor/ch/ch_states.py:5
+msgid "Aargau"
+msgstr "Aargau"
+
+#: contrib/localflavor/ch/ch_states.py:6
+msgid "Appenzell Innerrhoden"
+msgstr "Appenzell Innerrhoden"
+
+#: contrib/localflavor/ch/ch_states.py:7
+msgid "Appenzell Ausserrhoden"
+msgstr "Appenzell Ausserrhoden"
+
+#: contrib/localflavor/ch/ch_states.py:8
+msgid "Basel-Stadt"
+msgstr "Basel-Stadt"
+
+#: contrib/localflavor/ch/ch_states.py:9
+msgid "Basel-Land"
+msgstr "Basel-Landschaft"
+
+#: contrib/localflavor/ch/ch_states.py:10
+msgid "Berne"
+msgstr "Bern"
+
+#: contrib/localflavor/ch/ch_states.py:11
+msgid "Fribourg"
+msgstr "Fribourg"
+
+#: contrib/localflavor/ch/ch_states.py:12
+msgid "Geneva"
+msgstr "Genève"
+
+#: contrib/localflavor/ch/ch_states.py:13
+msgid "Glarus"
+msgstr "Glarus"
+
+#: contrib/localflavor/ch/ch_states.py:14
+msgid "Graubuenden"
+msgstr "Graubünden"
+
+#: contrib/localflavor/ch/ch_states.py:15
+msgid "Jura"
+msgstr "Jura"
+
+#: contrib/localflavor/ch/ch_states.py:16
+msgid "Lucerne"
+msgstr "Luzern"
+
+#: contrib/localflavor/ch/ch_states.py:17
+msgid "Neuchatel"
+msgstr "Neuchâtel"
+
+#: contrib/localflavor/ch/ch_states.py:18
+msgid "Nidwalden"
+msgstr "Nidwalden"
+
+#: contrib/localflavor/ch/ch_states.py:19
+msgid "Obwalden"
+msgstr "Obwalden"
+
+#: contrib/localflavor/ch/ch_states.py:20
+msgid "Schaffhausen"
+msgstr "Schaffhausen"
+
+#: contrib/localflavor/ch/ch_states.py:21
+msgid "Schwyz"
+msgstr "Schwyz"
+
+#: contrib/localflavor/ch/ch_states.py:22
+msgid "Solothurn"
+msgstr "Solothurn"
+
+#: contrib/localflavor/ch/ch_states.py:23
+msgid "St. Gallen"
+msgstr "St. Gallen"
+
+#: contrib/localflavor/ch/ch_states.py:24
+msgid "Thurgau"
+msgstr "Thurgau"
+
+#: contrib/localflavor/ch/ch_states.py:25
+msgid "Ticino"
+msgstr "Ticino"
+
+#: contrib/localflavor/ch/ch_states.py:26
+msgid "Uri"
+msgstr "Uri"
+
+#: contrib/localflavor/ch/ch_states.py:27
+msgid "Valais"
+msgstr "Wallis"
+
+#: contrib/localflavor/ch/ch_states.py:28
+msgid "Vaud"
+msgstr "Vaud"
+
+#: contrib/localflavor/ch/ch_states.py:29
+msgid "Zug"
+msgstr "Zug"
+
+#: contrib/localflavor/ch/ch_states.py:30
+msgid "Zurich"
+msgstr "Zürich"
+
+#: contrib/localflavor/ch/forms.py:65
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr ""
+"Oppgi et gyldig sveitsisk identitets- eller passnummer på formen X1234567<0 "
+"eller 1234567890."
+
+#: contrib/localflavor/cl/forms.py:30
+msgid "Enter a valid Chilean RUT."
+msgstr "Oppgi et gyldig chilensk RUT."
+
+#: contrib/localflavor/cl/forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr "Oppgi et gyldig chilensk RUT på formen XX.XXX.XXX-X."
+
+#: contrib/localflavor/cl/forms.py:32
+msgid "The Chilean RUT is not valid."
+msgstr "Den chilenske RUT er ugyldig."
+
+#: contrib/localflavor/cz/cz_regions.py:8
+msgid "Prague"
+msgstr "Praha"
+
+#: contrib/localflavor/cz/cz_regions.py:9
+msgid "Central Bohemian Region"
+msgstr "Sentralbøhmen region"
+
+#: contrib/localflavor/cz/cz_regions.py:10
+msgid "South Bohemian Region"
+msgstr "Sydbøhmen region"
+
+#: contrib/localflavor/cz/cz_regions.py:11
+msgid "Pilsen Region"
+msgstr "Plzeň region"
+
+#: contrib/localflavor/cz/cz_regions.py:12
+msgid "Carlsbad Region"
+msgstr "Karlovy Vary region"
+
+#: contrib/localflavor/cz/cz_regions.py:13
+msgid "Usti Region"
+msgstr "Ústí nad Labem region"
+
+#: contrib/localflavor/cz/cz_regions.py:14
+msgid "Liberec Region"
+msgstr "Liberec region"
+
+#: contrib/localflavor/cz/cz_regions.py:15
+msgid "Hradec Region"
+msgstr "Hradec Králové region"
+
+#: contrib/localflavor/cz/cz_regions.py:16
+msgid "Pardubice Region"
+msgstr "Pardubice region"
+
+#: contrib/localflavor/cz/cz_regions.py:17
+msgid "Vysocina Region"
+msgstr "Žilina-regionen"
+
+#: contrib/localflavor/cz/cz_regions.py:18
+msgid "South Moravian Region"
+msgstr "Sydmähriske region"
+
+#: contrib/localflavor/cz/cz_regions.py:19
+msgid "Olomouc Region"
+msgstr "Olomouc region"
+
+#: contrib/localflavor/cz/cz_regions.py:20
+msgid "Zlin Region"
+msgstr "Zlín region"
+
+#: contrib/localflavor/cz/cz_regions.py:21
+msgid "Moravian-Silesian Region"
+msgstr "Mähren-Schlesien region"
+
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
+msgid "Enter a postal code in the format XXXXX or XXX XX."
+msgstr "Oppgi et postnummer på formen XXXXX or XXX XX."
+
+#: contrib/localflavor/cz/forms.py:48
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Oppgi et fødselsnummer på formen XXXXXX/XXXX eller XXXXXXXXXX."
+
+#: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:50
+msgid "Enter a valid birth number."
+msgstr "Oppgi et gyldig fødselsnummer."
+
+#: contrib/localflavor/cz/forms.py:107
+msgid "Enter a valid IC number."
+msgstr "Oppgi et gyldig IC-nummer."
+
+#: contrib/localflavor/de/de_states.py:5
+msgid "Baden-Wuerttemberg"
+msgstr "Baden-Württemberg"
+
+#: contrib/localflavor/de/de_states.py:6
+msgid "Bavaria"
+msgstr "Bayern"
+
+#: contrib/localflavor/de/de_states.py:7
+msgid "Berlin"
+msgstr "Berlin"
+
+#: contrib/localflavor/de/de_states.py:8
+msgid "Brandenburg"
+msgstr "Brandenburg"
+
+#: contrib/localflavor/de/de_states.py:9
+msgid "Bremen"
+msgstr "Bremen"
+
+#: contrib/localflavor/de/de_states.py:10
+msgid "Hamburg"
+msgstr "Hamburg"
+
+#: contrib/localflavor/de/de_states.py:11
+msgid "Hessen"
+msgstr "Hessen"
+
+#: contrib/localflavor/de/de_states.py:12
+msgid "Mecklenburg-Western Pomerania"
+msgstr "Mecklenburg-Vorpommern"
+
+#: contrib/localflavor/de/de_states.py:13
+msgid "Lower Saxony"
+msgstr "Niedersachsen"
+
+#: contrib/localflavor/de/de_states.py:14
+msgid "North Rhine-Westphalia"
+msgstr "Nordrhein-Westfalen"
+
+#: contrib/localflavor/de/de_states.py:15
+msgid "Rhineland-Palatinate"
+msgstr "Rheinland-Pfalz"
+
+#: contrib/localflavor/de/de_states.py:16
+msgid "Saarland"
+msgstr "Saarland"
+
+#: contrib/localflavor/de/de_states.py:17
+msgid "Saxony"
+msgstr "Sachsen"
+
+#: contrib/localflavor/de/de_states.py:18
+msgid "Saxony-Anhalt"
+msgstr "Sachsen-Anhalt"
+
+#: contrib/localflavor/de/de_states.py:19
+msgid "Schleswig-Holstein"
+msgstr "Schleswig-Holstein"
+
+#: contrib/localflavor/de/de_states.py:20
+msgid "Thuringia"
+msgstr "Thüringen"
+
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
+msgid "Enter a zip code in the format XXXXX."
+msgstr "Oppgi et postnummer på formen XXXXX."
+
+#: contrib/localflavor/de/forms.py:42
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr ""
+"Oppgi et gyldig tysk identitetsnummer på formen XXXXXXXXXXX-XXXXXXX-XXXXXXX-"
+"X."
+
+#: contrib/localflavor/es/es_provinces.py:5
+msgid "Arava"
+msgstr "Álava"
+
+#: contrib/localflavor/es/es_provinces.py:6
+msgid "Albacete"
+msgstr "Albacete"
+
+#: contrib/localflavor/es/es_provinces.py:7
+msgid "Alacant"
+msgstr "Alicante"
+
+#: contrib/localflavor/es/es_provinces.py:8
+msgid "Almeria"
+msgstr "Almería"
+
+#: contrib/localflavor/es/es_provinces.py:9
+msgid "Avila"
+msgstr "Ávila"
+
+#: contrib/localflavor/es/es_provinces.py:10
+msgid "Badajoz"
+msgstr "Badajoz"
+
+#: contrib/localflavor/es/es_provinces.py:11
+msgid "Illes Balears"
+msgstr "Balearene"
+
+#: contrib/localflavor/es/es_provinces.py:12
+msgid "Barcelona"
+msgstr "Barcelona"
+
+#: contrib/localflavor/es/es_provinces.py:13
+msgid "Burgos"
+msgstr "Burgos"
+
+#: contrib/localflavor/es/es_provinces.py:14
+msgid "Caceres"
+msgstr "Cáceres"
+
+#: contrib/localflavor/es/es_provinces.py:15
+msgid "Cadiz"
+msgstr "Cádiz"
+
+#: contrib/localflavor/es/es_provinces.py:16
+msgid "Castello"
+msgstr "Castellón"
+
+#: contrib/localflavor/es/es_provinces.py:17
+msgid "Ciudad Real"
+msgstr "Ciudad Real"
+
+#: contrib/localflavor/es/es_provinces.py:18
+msgid "Cordoba"
+msgstr "Córdoba"
+
+#: contrib/localflavor/es/es_provinces.py:19
+msgid "A Coruna"
+msgstr "A Coruna"
+
+#: contrib/localflavor/es/es_provinces.py:20
+msgid "Cuenca"
+msgstr "Cuenca"
+
+#: contrib/localflavor/es/es_provinces.py:21
+msgid "Girona"
+msgstr "Girona"
+
+#: contrib/localflavor/es/es_provinces.py:22
+msgid "Granada"
+msgstr "Granada"
+
+#: contrib/localflavor/es/es_provinces.py:23
+msgid "Guadalajara"
+msgstr "Guadalajara"
+
+#: contrib/localflavor/es/es_provinces.py:24
+msgid "Guipuzkoa"
+msgstr "Gipuzkoa"
+
+#: contrib/localflavor/es/es_provinces.py:25
+msgid "Huelva"
+msgstr "Huelva"
+
+#: contrib/localflavor/es/es_provinces.py:26
+msgid "Huesca"
+msgstr "Huesca"
+
+#: contrib/localflavor/es/es_provinces.py:27
+msgid "Jaen"
+msgstr "Jaén"
+
+#: contrib/localflavor/es/es_provinces.py:28
+msgid "Leon"
+msgstr "León"
+
+#: contrib/localflavor/es/es_provinces.py:29
+msgid "Lleida"
+msgstr "Lleida"
+
+#: contrib/localflavor/es/es_provinces.py:30
+#: contrib/localflavor/es/es_regions.py:17
+msgid "La Rioja"
+msgstr "La Rioja"
+
+#: contrib/localflavor/es/es_provinces.py:31
+msgid "Lugo"
+msgstr "Lugo"
+
+#: contrib/localflavor/es/es_provinces.py:32
+#: contrib/localflavor/es/es_regions.py:18
+msgid "Madrid"
+msgstr "Madrid"
+
+#: contrib/localflavor/es/es_provinces.py:33
+msgid "Malaga"
+msgstr "Málaga"
+
+#: contrib/localflavor/es/es_provinces.py:34
+msgid "Murcia"
+msgstr "Murcia"
+
+#: contrib/localflavor/es/es_provinces.py:35
+msgid "Navarre"
+msgstr "Navarra"
+
+#: contrib/localflavor/es/es_provinces.py:36
+msgid "Ourense"
+msgstr "Ourense"
+
+#: contrib/localflavor/es/es_provinces.py:37
+msgid "Asturias"
+msgstr "Asturias"
+
+#: contrib/localflavor/es/es_provinces.py:38
+msgid "Palencia"
+msgstr "Palencia"
+
+#: contrib/localflavor/es/es_provinces.py:39
+msgid "Las Palmas"
+msgstr "Las Palmas"
+
+#: contrib/localflavor/es/es_provinces.py:40
+msgid "Pontevedra"
+msgstr "Pontevedra"
+
+#: contrib/localflavor/es/es_provinces.py:41
+msgid "Salamanca"
+msgstr "Salamanca"
+
+#: contrib/localflavor/es/es_provinces.py:42
+msgid "Santa Cruz de Tenerife"
+msgstr "Santa Cruz de Tenerife"
+
+#: contrib/localflavor/es/es_provinces.py:43
+#: contrib/localflavor/es/es_regions.py:11
+msgid "Cantabria"
+msgstr "Cantabria"
+
+#: contrib/localflavor/es/es_provinces.py:44
+msgid "Segovia"
+msgstr "Segovia"
+
+#: contrib/localflavor/es/es_provinces.py:45
+msgid "Seville"
+msgstr "Sevilla"
+
+#: contrib/localflavor/es/es_provinces.py:46
+msgid "Soria"
+msgstr "Soria"
+
+#: contrib/localflavor/es/es_provinces.py:47
+msgid "Tarragona"
+msgstr "Tarragona"
+
+#: contrib/localflavor/es/es_provinces.py:48
+msgid "Teruel"
+msgstr "Teruel"
+
+#: contrib/localflavor/es/es_provinces.py:49
+msgid "Toledo"
+msgstr "Toledo"
+
+#: contrib/localflavor/es/es_provinces.py:50
+msgid "Valencia"
+msgstr "Valencia"
+
+#: contrib/localflavor/es/es_provinces.py:51
+msgid "Valladolid"
+msgstr "Valladolid"
+
+#: contrib/localflavor/es/es_provinces.py:52
+msgid "Bizkaia"
+msgstr "Bizkaia"
+
+#: contrib/localflavor/es/es_provinces.py:53
+msgid "Zamora"
+msgstr "Zamora"
+
+#: contrib/localflavor/es/es_provinces.py:54
+msgid "Zaragoza"
+msgstr "Zaragoza"
+
+#: contrib/localflavor/es/es_provinces.py:55
+msgid "Ceuta"
+msgstr "Ceuta"
+
+#: contrib/localflavor/es/es_provinces.py:56
+msgid "Melilla"
+msgstr "Melilla"
+
+#: contrib/localflavor/es/es_regions.py:5
+msgid "Andalusia"
+msgstr "Andalucía"
+
+#: contrib/localflavor/es/es_regions.py:6
+msgid "Aragon"
+msgstr "Aragón"
+
+#: contrib/localflavor/es/es_regions.py:7
+msgid "Principality of Asturias"
+msgstr "Asturias"
+
+#: contrib/localflavor/es/es_regions.py:8
+msgid "Balearic Islands"
+msgstr "Balearene"
+
+#: contrib/localflavor/es/es_regions.py:9
+msgid "Basque Country"
+msgstr "Baskerland"
+
+#: contrib/localflavor/es/es_regions.py:10
+msgid "Canary Islands"
+msgstr "Kanariøyene"
+
+#: contrib/localflavor/es/es_regions.py:12
+msgid "Castile-La Mancha"
+msgstr "Castilla-La Mancha"
+
+#: contrib/localflavor/es/es_regions.py:13
+msgid "Castile and Leon"
+msgstr "Castilla y León"
+
+#: contrib/localflavor/es/es_regions.py:14
+msgid "Catalonia"
+msgstr "Catalonia"
+
+#: contrib/localflavor/es/es_regions.py:15
+msgid "Extremadura"
+msgstr "Extremadura"
+
+#: contrib/localflavor/es/es_regions.py:16
+msgid "Galicia"
+msgstr "Galicia"
+
+#: contrib/localflavor/es/es_regions.py:19
+msgid "Region of Murcia"
+msgstr "Murcia"
+
+#: contrib/localflavor/es/es_regions.py:20
+msgid "Foral Community of Navarre"
+msgstr "Navarra"
+
+#: contrib/localflavor/es/es_regions.py:21
+msgid "Valencian Community"
+msgstr "Valenciana"
+
+#: contrib/localflavor/es/forms.py:20
+msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
+msgstr "Oppgi et gyldig postnummer på formen 01XXX - 52XXX."
+
+#: contrib/localflavor/es/forms.py:40
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+"Oppgi et gyldig telefonnummer på et av følgende formater: 6XXXXXXXX, "
+"8XXXXXXXX eller 9XXXXXXXX."
+
+#: contrib/localflavor/es/forms.py:67
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr "Oppgi et gyldig NIF, NIE eller CIF."
+
+#: contrib/localflavor/es/forms.py:68
+msgid "Please enter a valid NIF or NIE."
+msgstr "Oppgi et gyldig NIF eller NIE."
+
+#: contrib/localflavor/es/forms.py:69
+msgid "Invalid checksum for NIF."
+msgstr "Ugyldig kontrollsum for NIF."
+
+#: contrib/localflavor/es/forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr "Ugyldig kontrollsum for NIE."
+
+#: contrib/localflavor/es/forms.py:71
+msgid "Invalid checksum for CIF."
+msgstr "Ugyldig kontrollsum for CIF."
+
+#: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr "Oppgi et gyldig kontonummer på formen XXXX-XXXX-XX-XXXXXXXXXX."
+
+#: contrib/localflavor/es/forms.py:144
+msgid "Invalid checksum for bank account number."
+msgstr "Ugyldig kontrollsum for kontonummer."
+
+#: contrib/localflavor/fi/forms.py:29
+msgid "Enter a valid Finnish social security number."
+msgstr "Oppgi et gyldig finsk personnummer."
+
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Telefonnummeret må være på formen 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Oppgi et gyldig postnummer."
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Oppgi et gyldig telefonnummer."
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Oppgi et gyldig kjøretøyregistreringsnummer."
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Oppgi et gyldig NIK/KTP-nummer."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+#, fuzzy
+msgid "Pati"
+msgstr "aktiv"
+
+#: contrib/localflavor/id/id_choices.py:91
+#, fuzzy
+msgid "Surabaya"
+msgstr "lørdag"
+
+#: contrib/localflavor/id/id_choices.py:92
+#, fuzzy
+msgid "Madura"
+msgstr "Madrid"
+
+#: contrib/localflavor/id/id_choices.py:93
+#, fuzzy
+msgid "Malang"
+msgstr "Málaga"
+
+#: contrib/localflavor/id/id_choices.py:94
+#, fuzzy
+msgid "Jember"
+msgstr "november"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+#, fuzzy
+msgid "Garut"
+msgstr "Glarus"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+#, fuzzy
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+#, fuzzy
+msgid "Armagh"
+msgstr "Aragón"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+#, fuzzy
+msgid "Cavan"
+msgstr "Katalansk"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+#, fuzzy
+msgid "Clare"
+msgstr "Cáceres"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+#, fuzzy
+msgid "Cork"
+msgstr "eller"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+#, fuzzy
+msgid "Derry"
+msgstr "februar"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+#, fuzzy
+msgid "Donegal"
+msgstr "én"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+#, fuzzy
+msgid "Down"
+msgstr "Devon"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+#, fuzzy
+msgid "Dublin"
+msgstr "Lublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+#, fuzzy
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+#, fuzzy
+msgid "Galway"
+msgstr "Galicia"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+#, fuzzy
+msgid "Kerry"
+msgstr "februar"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+#, fuzzy
+msgid "Louth"
+msgstr "Logg ut"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+#, fuzzy
+msgid "Mayo"
+msgstr "mai"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+#, fuzzy
+msgid "Meath"
+msgstr "Metadata"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+#, fuzzy
+msgid "Monaghan"
+msgstr "Logg inn igjen"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+#, fuzzy
+msgid "Roscommon"
+msgstr "kommentar"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+#, fuzzy
+msgid "Sligo"
+msgstr "Shiga"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+#, fuzzy
+msgid "Tyrone"
+msgstr "Tirol"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+#, fuzzy
+msgid "Westmeath"
+msgstr "West Pomerania"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+#, fuzzy
+msgid "Wexford"
+msgstr "ons"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
+msgid "Enter a zip code in the format XXXXXXX."
+msgstr "Oppgi et postnummer på formen XXXXXXX."
+
+#: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr "Oppgi et gyldig islandsk identifikasjonsnummer på formen XXXXXX-XXXX."
+
+#: contrib/localflavor/is_/forms.py:19
+msgid "The Icelandic identification number is not valid."
+msgstr "Det islandsk identifikasjonsnummer er ugyldig."
+
+#: contrib/localflavor/it/forms.py:15
+msgid "Enter a valid zip code."
+msgstr "Oppgi et gyldig postnummer."
+
+#: contrib/localflavor/it/forms.py:44
+msgid "Enter a valid Social Security number."
+msgstr "Oppgi et gyldig italiensk personnummer."
+
+#: contrib/localflavor/it/forms.py:69
+msgid "Enter a valid VAT number."
+msgstr "Oppgi et gyldig VAT-nummer."
+
+#: contrib/localflavor/jp/forms.py:16
+msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
+msgstr "Oppgi et postnummer på formen XXXXXXX eller XXX-XXXX."
+
+#: contrib/localflavor/jp/jp_prefectures.py:4
+msgid "Hokkaido"
+msgstr "Hokkaido"
+
+#: contrib/localflavor/jp/jp_prefectures.py:5
+msgid "Aomori"
+msgstr "Aomori"
+
+#: contrib/localflavor/jp/jp_prefectures.py:6
+msgid "Iwate"
+msgstr "Iwate"
+
+#: contrib/localflavor/jp/jp_prefectures.py:7
+msgid "Miyagi"
+msgstr "Miyagi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:8
+msgid "Akita"
+msgstr "Akita"
+
+#: contrib/localflavor/jp/jp_prefectures.py:9
+msgid "Yamagata"
+msgstr "Yamagata"
+
+#: contrib/localflavor/jp/jp_prefectures.py:10
+msgid "Fukushima"
+msgstr "Fukushima"
+
+#: contrib/localflavor/jp/jp_prefectures.py:11
+msgid "Ibaraki"
+msgstr "Ibaraki"
+
+#: contrib/localflavor/jp/jp_prefectures.py:12
+msgid "Tochigi"
+msgstr "Tochigi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:13
+msgid "Gunma"
+msgstr "Gunma"
+
+#: contrib/localflavor/jp/jp_prefectures.py:14
+msgid "Saitama"
+msgstr "Saitama"
+
+#: contrib/localflavor/jp/jp_prefectures.py:15
+msgid "Chiba"
+msgstr "Chiba"
+
+#: contrib/localflavor/jp/jp_prefectures.py:16
+msgid "Tokyo"
+msgstr "Tokyo"
+
+#: contrib/localflavor/jp/jp_prefectures.py:17
+msgid "Kanagawa"
+msgstr "Kanagawa"
+
+#: contrib/localflavor/jp/jp_prefectures.py:18
+msgid "Yamanashi"
+msgstr "Yamanashi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:19
+msgid "Nagano"
+msgstr "Nagano"
+
+#: contrib/localflavor/jp/jp_prefectures.py:20
+msgid "Niigata"
+msgstr "Niigata"
+
+#: contrib/localflavor/jp/jp_prefectures.py:21
+msgid "Toyama"
+msgstr "Toyama"
+
+#: contrib/localflavor/jp/jp_prefectures.py:22
+msgid "Ishikawa"
+msgstr "Ishikawa"
+
+#: contrib/localflavor/jp/jp_prefectures.py:23
+msgid "Fukui"
+msgstr "Fukui"
+
+#: contrib/localflavor/jp/jp_prefectures.py:24
+msgid "Gifu"
+msgstr "Gifu"
+
+#: contrib/localflavor/jp/jp_prefectures.py:25
+msgid "Shizuoka"
+msgstr "Shizuoka"
+
+#: contrib/localflavor/jp/jp_prefectures.py:26
+msgid "Aichi"
+msgstr "Aichi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:27
+msgid "Mie"
+msgstr "Mie"
+
+#: contrib/localflavor/jp/jp_prefectures.py:28
+msgid "Shiga"
+msgstr "Shiga"
+
+#: contrib/localflavor/jp/jp_prefectures.py:29
+msgid "Kyoto"
+msgstr "Kyoto"
+
+#: contrib/localflavor/jp/jp_prefectures.py:30
+msgid "Osaka"
+msgstr "Osaka"
+
+#: contrib/localflavor/jp/jp_prefectures.py:31
+msgid "Hyogo"
+msgstr "Hyogo"
+
+#: contrib/localflavor/jp/jp_prefectures.py:32
+msgid "Nara"
+msgstr "Nara"
+
+#: contrib/localflavor/jp/jp_prefectures.py:33
+msgid "Wakayama"
+msgstr "Wakayama"
+
+#: contrib/localflavor/jp/jp_prefectures.py:34
+msgid "Tottori"
+msgstr "Tottori"
+
+#: contrib/localflavor/jp/jp_prefectures.py:35
+msgid "Shimane"
+msgstr "Shimane"
+
+#: contrib/localflavor/jp/jp_prefectures.py:36
+msgid "Okayama"
+msgstr "Okayama"
+
+#: contrib/localflavor/jp/jp_prefectures.py:37
+msgid "Hiroshima"
+msgstr "Hiroshima"
+
+#: contrib/localflavor/jp/jp_prefectures.py:38
+msgid "Yamaguchi"
+msgstr "Yamaguchi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:39
+msgid "Tokushima"
+msgstr "Tokushima"
+
+#: contrib/localflavor/jp/jp_prefectures.py:40
+msgid "Kagawa"
+msgstr "Kagawa"
+
+#: contrib/localflavor/jp/jp_prefectures.py:41
+msgid "Ehime"
+msgstr "Ehime"
+
+#: contrib/localflavor/jp/jp_prefectures.py:42
+msgid "Kochi"
+msgstr "Kochi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:43
+msgid "Fukuoka"
+msgstr "Fukuoka"
+
+#: contrib/localflavor/jp/jp_prefectures.py:44
+msgid "Saga"
+msgstr "Saga"
+
+#: contrib/localflavor/jp/jp_prefectures.py:45
+msgid "Nagasaki"
+msgstr "Nagasaki"
+
+#: contrib/localflavor/jp/jp_prefectures.py:46
+msgid "Kumamoto"
+msgstr "Kumamoto"
+
+#: contrib/localflavor/jp/jp_prefectures.py:47
+msgid "Oita"
+msgstr "Oita"
+
+#: contrib/localflavor/jp/jp_prefectures.py:48
+msgid "Miyazaki"
+msgstr "Miyazaki"
+
+#: contrib/localflavor/jp/jp_prefectures.py:49
+msgid "Kagoshima"
+msgstr "Kagoshima"
+
+#: contrib/localflavor/jp/jp_prefectures.py:50
+msgid "Okinawa"
+msgstr "Okinawa"
+
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Oppgi et gyldig Kuwaiti Civil ID-nummer."
+
+#: contrib/localflavor/mx/mx_states.py:12
+msgid "Aguascalientes"
+msgstr "Aguascalientes"
+
+#: contrib/localflavor/mx/mx_states.py:13
+msgid "Baja California"
+msgstr "Baja California"
+
+#: contrib/localflavor/mx/mx_states.py:14
+msgid "Baja California Sur"
+msgstr "Baja California Sur"
+
+#: contrib/localflavor/mx/mx_states.py:15
+msgid "Campeche"
+msgstr "Campeche"
+
+#: contrib/localflavor/mx/mx_states.py:16
+msgid "Chihuahua"
+msgstr "Chihuahua"
+
+#: contrib/localflavor/mx/mx_states.py:17
+msgid "Chiapas"
+msgstr "Chiapas"
+
+#: contrib/localflavor/mx/mx_states.py:18
+msgid "Coahuila"
+msgstr "Coahuila"
+
+#: contrib/localflavor/mx/mx_states.py:19
+msgid "Colima"
+msgstr "Colima"
+
+#: contrib/localflavor/mx/mx_states.py:20
+msgid "Distrito Federal"
+msgstr "Distrito Federal"
+
+#: contrib/localflavor/mx/mx_states.py:21
+msgid "Durango"
+msgstr "Durango"
+
+#: contrib/localflavor/mx/mx_states.py:22
+msgid "Guerrero"
+msgstr "Guerrero"
+
+#: contrib/localflavor/mx/mx_states.py:23
+msgid "Guanajuato"
+msgstr "Guanajuato"
+
+#: contrib/localflavor/mx/mx_states.py:24
+msgid "Hidalgo"
+msgstr "Hidalgo"
+
+#: contrib/localflavor/mx/mx_states.py:25
+msgid "Jalisco"
+msgstr "Jalisco"
+
+#: contrib/localflavor/mx/mx_states.py:26
+msgid "Estado de México"
+msgstr "Estado de México"
+
+#: contrib/localflavor/mx/mx_states.py:27
+msgid "Michoacán"
+msgstr "Michoacán"
+
+#: contrib/localflavor/mx/mx_states.py:28
+msgid "Morelos"
+msgstr "Morelos"
+
+#: contrib/localflavor/mx/mx_states.py:29
+msgid "Nayarit"
+msgstr "Nayarit"
+
+#: contrib/localflavor/mx/mx_states.py:30
+msgid "Nuevo León"
+msgstr "Nuevo León"
+
+#: contrib/localflavor/mx/mx_states.py:31
+msgid "Oaxaca"
+msgstr "Oaxaca"
+
+#: contrib/localflavor/mx/mx_states.py:32
+msgid "Puebla"
+msgstr "Puebla"
+
+#: contrib/localflavor/mx/mx_states.py:33
+msgid "Querétaro"
+msgstr "Querétaro"
+
+#: contrib/localflavor/mx/mx_states.py:34
+msgid "Quintana Roo"
+msgstr "Quintana Roo"
+
+#: contrib/localflavor/mx/mx_states.py:35
+msgid "Sinaloa"
+msgstr "Sinaloa"
+
+#: contrib/localflavor/mx/mx_states.py:36
+msgid "San Luis Potosí"
+msgstr "San Luis Potosí"
+
+#: contrib/localflavor/mx/mx_states.py:37
+msgid "Sonora"
+msgstr "Sonora"
+
+#: contrib/localflavor/mx/mx_states.py:38
+msgid "Tabasco"
+msgstr "Tabasco"
+
+#: contrib/localflavor/mx/mx_states.py:39
+msgid "Tamaulipas"
+msgstr "Tamaulipas"
+
+#: contrib/localflavor/mx/mx_states.py:40
+msgid "Tlaxcala"
+msgstr "Tlaxcala"
+
+#: contrib/localflavor/mx/mx_states.py:41
+msgid "Veracruz"
+msgstr "Veracruz"
+
+#: contrib/localflavor/mx/mx_states.py:42
+msgid "Yucatán"
+msgstr "Yucatán"
+
+#: contrib/localflavor/mx/mx_states.py:43
+msgid "Zacatecas"
+msgstr "Zacatecas"
+
+#: contrib/localflavor/nl/forms.py:22
+msgid "Enter a valid postal code"
+msgstr "Oppgi et gyldig postnummer."
+
+#: contrib/localflavor/nl/forms.py:79
+msgid "Enter a valid SoFi number"
+msgstr "Oppgi et gyldig SoFi-nummer."
+
+#: contrib/localflavor/nl/nl_provinces.py:4
+msgid "Drenthe"
+msgstr "Drenthe"
+
+#: contrib/localflavor/nl/nl_provinces.py:5
+msgid "Flevoland"
+msgstr "Flevoland"
+
+#: contrib/localflavor/nl/nl_provinces.py:6
+msgid "Friesland"
+msgstr "Friesland"
+
+#: contrib/localflavor/nl/nl_provinces.py:7
+msgid "Gelderland"
+msgstr "Gelderland"
+
+#: contrib/localflavor/nl/nl_provinces.py:8
+msgid "Groningen"
+msgstr "Groningen"
+
+#: contrib/localflavor/nl/nl_provinces.py:9
+msgid "Limburg"
+msgstr "Limburg"
+
+#: contrib/localflavor/nl/nl_provinces.py:10
+msgid "Noord-Brabant"
+msgstr "Noord-Brabant"
+
+#: contrib/localflavor/nl/nl_provinces.py:11
+msgid "Noord-Holland"
+msgstr "Noord-Holland"
+
+#: contrib/localflavor/nl/nl_provinces.py:12
+msgid "Overijssel"
+msgstr "Overijssel"
+
+#: contrib/localflavor/nl/nl_provinces.py:13
+msgid "Utrecht"
+msgstr "Utrecht"
+
+#: contrib/localflavor/nl/nl_provinces.py:14
+msgid "Zeeland"
+msgstr "Zeeland"
+
+#: contrib/localflavor/nl/nl_provinces.py:15
+msgid "Zuid-Holland"
+msgstr "Zuid-Holland"
+
+#: contrib/localflavor/no/forms.py:34
+msgid "Enter a valid Norwegian social security number."
+msgstr "Oppgi et gyldig norsk personnummer."
+
+#: contrib/localflavor/pe/forms.py:25
+msgid "This field requires 8 digits."
+msgstr "Feltet krever åtte siffer."
+
+#: contrib/localflavor/pe/forms.py:53
+msgid "This field requires 11 digits."
+msgstr "Feltet krever 11 siffer."
+
+#: contrib/localflavor/pl/forms.py:38
+msgid "National Identification Number consists of 11 digits."
+msgstr "National Identification Number består av 11 siffer."
+
+#: contrib/localflavor/pl/forms.py:39
+msgid "Wrong checksum for the National Identification Number."
+msgstr "Feil kontrollsum for National Identification Number."
+
+#: contrib/localflavor/pl/forms.py:71
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr "Oppgi et NIP på formen XXX-XXX-XX-XX eller XX-XX-XXX-XXX."
+
+#: contrib/localflavor/pl/forms.py:72
+msgid "Wrong checksum for the Tax Number (NIP)."
+msgstr "Ugyldig kontrollsum for NIP."
+
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr "National Business Register Number (REGON) består av 9 eller 14 siffer."
+
+#: contrib/localflavor/pl/forms.py:110
+msgid "Wrong checksum for the National Business Register Number (REGON)."
+msgstr "Ugyldig kontrollsum for National Business Register Number (REGON)."
+
+#: contrib/localflavor/pl/forms.py:148
+msgid "Enter a postal code in the format XX-XXX."
+msgstr "Oppgi et postnummer på formen XX-XXX."
+
+#: contrib/localflavor/pl/pl_voivodeships.py:8
+msgid "Lower Silesia"
+msgstr "Lower Silesia"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:9
+msgid "Kuyavia-Pomerania"
+msgstr "Kuyavia-Pomerania"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:10
+msgid "Lublin"
+msgstr "Lublin"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:11
+msgid "Lubusz"
+msgstr "Lubusz"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:12
+msgid "Lodz"
+msgstr "Lodz"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:13
+msgid "Lesser Poland"
+msgstr "Lesser Poland"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:14
+msgid "Masovia"
+msgstr "Masovia"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:15
+msgid "Opole"
+msgstr "Opole"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:16
+msgid "Subcarpatia"
+msgstr "Subcarpatia"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:17
+msgid "Podlasie"
+msgstr "Podlasie"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:18
+msgid "Pomerania"
+msgstr "Pomerania"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:19
+msgid "Silesia"
+msgstr "Silesia"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:20
+msgid "Swietokrzyskie"
+msgstr "Swietokrzyskie"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:21
+msgid "Warmia-Masuria"
+msgstr "Warmia-Masuria"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:22
+msgid "Greater Poland"
+msgstr "Greater Poland"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:23
+msgid "West Pomerania"
+msgstr "West Pomerania"
+
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Oppgi et postnummer på formen XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "Telefonnummer må ha 9 siffer, eller starte med + eller 00."
+
+#: contrib/localflavor/ro/forms.py:19
+msgid "Enter a valid CIF."
+msgstr "Oppgi et gyldig CIF."
+
+#: contrib/localflavor/ro/forms.py:56
+msgid "Enter a valid CNP."
+msgstr "Oppgi et gyldig CNP."
+
+#: contrib/localflavor/ro/forms.py:141
+msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
+msgstr "Oppgi et gyldig IBAN på formen ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
+
+#: contrib/localflavor/ro/forms.py:171
+msgid "Phone numbers must be in XXXX-XXXXXX format."
+msgstr "Telefonnummeret må være på formen XXXX-XXXXXX."
+
+#: contrib/localflavor/ro/forms.py:194
+msgid "Enter a valid postal code in the format XXXXXX"
+msgstr "Oppgi et postnummer på formen XXXXXX."
+
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Oppgi et gyldig svensk organisasjonsnummer."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Oppgi et gyldig svensk personnummer."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Oppgi et gyldig svensk postnummer på formen XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Stockholm"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
+
+#: contrib/localflavor/sk/sk_districts.py:8
+msgid "Banska Bystrica"
+msgstr "Banska Bystrica"
+
+#: contrib/localflavor/sk/sk_districts.py:9
+msgid "Banska Stiavnica"
+msgstr "Banska Stiavnica"
+
+#: contrib/localflavor/sk/sk_districts.py:10
+msgid "Bardejov"
+msgstr "Bardejov"
+
+#: contrib/localflavor/sk/sk_districts.py:11
+msgid "Banovce nad Bebravou"
+msgstr "Banovce nad Bebravou"
+
+#: contrib/localflavor/sk/sk_districts.py:12
+msgid "Brezno"
+msgstr "Brezno"
+
+#: contrib/localflavor/sk/sk_districts.py:13
+msgid "Bratislava I"
+msgstr "Bratislava I"
+
+#: contrib/localflavor/sk/sk_districts.py:14
+msgid "Bratislava II"
+msgstr "Bratislava II"
+
+#: contrib/localflavor/sk/sk_districts.py:15
+msgid "Bratislava III"
+msgstr "Bratislava III"
+
+#: contrib/localflavor/sk/sk_districts.py:16
+msgid "Bratislava IV"
+msgstr "Bratislava IV"
+
+#: contrib/localflavor/sk/sk_districts.py:17
+msgid "Bratislava V"
+msgstr "Bratislava V"
+
+#: contrib/localflavor/sk/sk_districts.py:18
+msgid "Bytca"
+msgstr "Bytca"
+
+#: contrib/localflavor/sk/sk_districts.py:19
+msgid "Cadca"
+msgstr "Cadca"
+
+#: contrib/localflavor/sk/sk_districts.py:20
+msgid "Detva"
+msgstr "Detva"
+
+#: contrib/localflavor/sk/sk_districts.py:21
+msgid "Dolny Kubin"
+msgstr "Dolny Kubin"
+
+#: contrib/localflavor/sk/sk_districts.py:22
+msgid "Dunajska Streda"
+msgstr "Dunajska Streda"
+
+#: contrib/localflavor/sk/sk_districts.py:23
+msgid "Galanta"
+msgstr "Galanta"
+
+#: contrib/localflavor/sk/sk_districts.py:24
+msgid "Gelnica"
+msgstr "Gelnica"
+
+#: contrib/localflavor/sk/sk_districts.py:25
+msgid "Hlohovec"
+msgstr "Hlohovec"
+
+#: contrib/localflavor/sk/sk_districts.py:26
+msgid "Humenne"
+msgstr "Humenne"
+
+#: contrib/localflavor/sk/sk_districts.py:27
+msgid "Ilava"
+msgstr "Ilava"
+
+#: contrib/localflavor/sk/sk_districts.py:28
+msgid "Kezmarok"
+msgstr "Kezmarok"
+
+#: contrib/localflavor/sk/sk_districts.py:29
+msgid "Komarno"
+msgstr "Komarno"
+
+#: contrib/localflavor/sk/sk_districts.py:30
+msgid "Kosice I"
+msgstr "Kosice I"
+
+#: contrib/localflavor/sk/sk_districts.py:31
+msgid "Kosice II"
+msgstr "Kosice II"
+
+#: contrib/localflavor/sk/sk_districts.py:32
+msgid "Kosice III"
+msgstr "Kosice III"
+
+#: contrib/localflavor/sk/sk_districts.py:33
+msgid "Kosice IV"
+msgstr "Kosice IV"
+
+#: contrib/localflavor/sk/sk_districts.py:34
+msgid "Kosice - okolie"
+msgstr "Kosice - okolie"
+
+#: contrib/localflavor/sk/sk_districts.py:35
+msgid "Krupina"
+msgstr "Krupina"
+
+#: contrib/localflavor/sk/sk_districts.py:36
+msgid "Kysucke Nove Mesto"
+msgstr "Kysucke Nove Mesto"
+
+#: contrib/localflavor/sk/sk_districts.py:37
+msgid "Levice"
+msgstr "Levice"
+
+#: contrib/localflavor/sk/sk_districts.py:38
+msgid "Levoca"
+msgstr "Levoca"
+
+#: contrib/localflavor/sk/sk_districts.py:39
+msgid "Liptovsky Mikulas"
+msgstr "Liptovsky Mikulas"
+
+#: contrib/localflavor/sk/sk_districts.py:40
+msgid "Lucenec"
+msgstr "Lucenec"
+
+#: contrib/localflavor/sk/sk_districts.py:41
+msgid "Malacky"
+msgstr "Malacky"
+
+#: contrib/localflavor/sk/sk_districts.py:42
+msgid "Martin"
+msgstr "Martin"
+
+#: contrib/localflavor/sk/sk_districts.py:43
+msgid "Medzilaborce"
+msgstr "Medzilaborce"
+
+#: contrib/localflavor/sk/sk_districts.py:44
+msgid "Michalovce"
+msgstr "Michalovce"
+
+#: contrib/localflavor/sk/sk_districts.py:45
+msgid "Myjava"
+msgstr "Myjava"
+
+#: contrib/localflavor/sk/sk_districts.py:46
+msgid "Namestovo"
+msgstr "Namestovo"
+
+#: contrib/localflavor/sk/sk_districts.py:47
+msgid "Nitra"
+msgstr "Nitra"
+
+#: contrib/localflavor/sk/sk_districts.py:48
+msgid "Nove Mesto nad Vahom"
+msgstr "Nove Mesto nad Vahom"
+
+#: contrib/localflavor/sk/sk_districts.py:49
+msgid "Nove Zamky"
+msgstr "Nove Zamky"
+
+#: contrib/localflavor/sk/sk_districts.py:50
+msgid "Partizanske"
+msgstr "Partizanske"
+
+#: contrib/localflavor/sk/sk_districts.py:51
+msgid "Pezinok"
+msgstr "Pezinok"
+
+#: contrib/localflavor/sk/sk_districts.py:52
+msgid "Piestany"
+msgstr "Piestany"
+
+#: contrib/localflavor/sk/sk_districts.py:53
+msgid "Poltar"
+msgstr "Poltar"
+
+#: contrib/localflavor/sk/sk_districts.py:54
+msgid "Poprad"
+msgstr "Poprad"
+
+#: contrib/localflavor/sk/sk_districts.py:55
+msgid "Povazska Bystrica"
+msgstr "Povazska Bystrica"
+
+#: contrib/localflavor/sk/sk_districts.py:56
+msgid "Presov"
+msgstr "Presov"
+
+#: contrib/localflavor/sk/sk_districts.py:57
+msgid "Prievidza"
+msgstr "Prievidza"
+
+#: contrib/localflavor/sk/sk_districts.py:58
+msgid "Puchov"
+msgstr "Puchov"
+
+#: contrib/localflavor/sk/sk_districts.py:59
+msgid "Revuca"
+msgstr "Revuca"
+
+#: contrib/localflavor/sk/sk_districts.py:60
+msgid "Rimavska Sobota"
+msgstr "Rimavska Sobota"
+
+#: contrib/localflavor/sk/sk_districts.py:61
+msgid "Roznava"
+msgstr "Roznava"
+
+#: contrib/localflavor/sk/sk_districts.py:62
+msgid "Ruzomberok"
+msgstr "Ruzomberok"
+
+#: contrib/localflavor/sk/sk_districts.py:63
+msgid "Sabinov"
+msgstr "Sabinov"
+
+#: contrib/localflavor/sk/sk_districts.py:64
+msgid "Senec"
+msgstr "Senec"
+
+#: contrib/localflavor/sk/sk_districts.py:65
+msgid "Senica"
+msgstr "Senica"
+
+#: contrib/localflavor/sk/sk_districts.py:66
+msgid "Skalica"
+msgstr "Skalica"
+
+#: contrib/localflavor/sk/sk_districts.py:67
+msgid "Snina"
+msgstr "Snina"
+
+#: contrib/localflavor/sk/sk_districts.py:68
+msgid "Sobrance"
+msgstr "Sobrance"
+
+#: contrib/localflavor/sk/sk_districts.py:69
+msgid "Spisska Nova Ves"
+msgstr "Spisska Nova Ves"
+
+#: contrib/localflavor/sk/sk_districts.py:70
+msgid "Stara Lubovna"
+msgstr "Stara Lubovna"
+
+#: contrib/localflavor/sk/sk_districts.py:71
+msgid "Stropkov"
+msgstr "Stropkov"
+
+#: contrib/localflavor/sk/sk_districts.py:72
+msgid "Svidnik"
+msgstr "Svidnik"
+
+#: contrib/localflavor/sk/sk_districts.py:73
+msgid "Sala"
+msgstr "Sala"
+
+#: contrib/localflavor/sk/sk_districts.py:74
+msgid "Topolcany"
+msgstr "Topolcany"
+
+#: contrib/localflavor/sk/sk_districts.py:75
+msgid "Trebisov"
+msgstr "Trebisov"
+
+#: contrib/localflavor/sk/sk_districts.py:76
+msgid "Trencin"
+msgstr "Trencin"
+
+#: contrib/localflavor/sk/sk_districts.py:77
+msgid "Trnava"
+msgstr "Trnava"
+
+#: contrib/localflavor/sk/sk_districts.py:78
+msgid "Turcianske Teplice"
+msgstr "Turcianske Teplice"
+
+#: contrib/localflavor/sk/sk_districts.py:79
+msgid "Tvrdosin"
+msgstr "Tvrdosin"
+
+#: contrib/localflavor/sk/sk_districts.py:80
+msgid "Velky Krtis"
+msgstr "Velky Krtis"
+
+#: contrib/localflavor/sk/sk_districts.py:81
+msgid "Vranov nad Toplou"
+msgstr "Vranov nad Toplou"
+
+#: contrib/localflavor/sk/sk_districts.py:82
+msgid "Zlate Moravce"
+msgstr "Zlate Moravce"
+
+#: contrib/localflavor/sk/sk_districts.py:83
+msgid "Zvolen"
+msgstr "Zvolen"
+
+#: contrib/localflavor/sk/sk_districts.py:84
+msgid "Zarnovica"
+msgstr "Zarnovica"
+
+#: contrib/localflavor/sk/sk_districts.py:85
+msgid "Ziar nad Hronom"
+msgstr "Ziar nad Hronom"
+
+#: contrib/localflavor/sk/sk_districts.py:86
+msgid "Zilina"
+msgstr "Zilina"
+
+#: contrib/localflavor/sk/sk_regions.py:8
+msgid "Banska Bystrica region"
+msgstr "Banská Bystrica-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:9
+msgid "Bratislava region"
+msgstr "Bratislava-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:10
+msgid "Kosice region"
+msgstr "Košice-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:11
+msgid "Nitra region"
+msgstr "Nitra-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:12
+msgid "Presov region"
+msgstr "Prešov-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:13
+msgid "Trencin region"
+msgstr "Trenčín-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:14
+msgid "Trnava region"
+msgstr "Trnava-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:15
+msgid "Zilina region"
+msgstr "Žilina-regionen"
+
+#: contrib/localflavor/uk/forms.py:21
+msgid "Enter a valid postcode."
+msgstr "Oppgi et gyldig postnummer."
+
+#: contrib/localflavor/uk/uk_regions.py:11
+msgid "Bedfordshire"
+msgstr "Bedfordshire"
+
+#: contrib/localflavor/uk/uk_regions.py:12
+msgid "Buckinghamshire"
+msgstr "Buckinghamshire"
+
+#: contrib/localflavor/uk/uk_regions.py:14
+msgid "Cheshire"
+msgstr "Cheshire"
+
+#: contrib/localflavor/uk/uk_regions.py:15
+msgid "Cornwall and Isles of Scilly"
+msgstr "Cornwall"
+
+#: contrib/localflavor/uk/uk_regions.py:16
+msgid "Cumbria"
+msgstr "Cumbria"
+
+#: contrib/localflavor/uk/uk_regions.py:17
+msgid "Derbyshire"
+msgstr "Derbyshire"
+
+#: contrib/localflavor/uk/uk_regions.py:18
+msgid "Devon"
+msgstr "Devon"
+
+#: contrib/localflavor/uk/uk_regions.py:19
+msgid "Dorset"
+msgstr "Dorset"
+
+#: contrib/localflavor/uk/uk_regions.py:20
+msgid "Durham"
+msgstr "Durham"
+
+#: contrib/localflavor/uk/uk_regions.py:21
+msgid "East Sussex"
+msgstr "East Sussex"
+
+#: contrib/localflavor/uk/uk_regions.py:22
+msgid "Essex"
+msgstr "Essex"
+
+#: contrib/localflavor/uk/uk_regions.py:23
+msgid "Gloucestershire"
+msgstr "Gloucestershire"
+
+#: contrib/localflavor/uk/uk_regions.py:24
+msgid "Greater London"
+msgstr "Stor-London"
+
+#: contrib/localflavor/uk/uk_regions.py:25
+msgid "Greater Manchester"
+msgstr "Stor-Manchester"
+
+#: contrib/localflavor/uk/uk_regions.py:26
+msgid "Hampshire"
+msgstr "Hampshire"
+
+#: contrib/localflavor/uk/uk_regions.py:27
+msgid "Hertfordshire"
+msgstr "Hertfordshire"
+
+#: contrib/localflavor/uk/uk_regions.py:28
+msgid "Kent"
+msgstr "Kent"
+
+#: contrib/localflavor/uk/uk_regions.py:29
+msgid "Lancashire"
+msgstr "Lancashire"
+
+#: contrib/localflavor/uk/uk_regions.py:30
+msgid "Leicestershire"
+msgstr "Leicestershire"
+
+#: contrib/localflavor/uk/uk_regions.py:31
+msgid "Lincolnshire"
+msgstr "Lincolnshire"
+
+#: contrib/localflavor/uk/uk_regions.py:32
+msgid "Merseyside"
+msgstr "Merseyside"
+
+#: contrib/localflavor/uk/uk_regions.py:33
+msgid "Norfolk"
+msgstr "Norfolk"
+
+#: contrib/localflavor/uk/uk_regions.py:34
+msgid "North Yorkshire"
+msgstr "North Yorkshire"
+
+#: contrib/localflavor/uk/uk_regions.py:35
+msgid "Northamptonshire"
+msgstr "Northamptonshire"
+
+#: contrib/localflavor/uk/uk_regions.py:36
+msgid "Northumberland"
+msgstr "Northumberland"
+
+#: contrib/localflavor/uk/uk_regions.py:37
+msgid "Nottinghamshire"
+msgstr "Nottinghamshire"
+
+#: contrib/localflavor/uk/uk_regions.py:38
+msgid "Oxfordshire"
+msgstr "Oxfordshire"
+
+#: contrib/localflavor/uk/uk_regions.py:39
+msgid "Shropshire"
+msgstr "Shropshire"
+
+#: contrib/localflavor/uk/uk_regions.py:40
+msgid "Somerset"
+msgstr "Somerset"
+
+#: contrib/localflavor/uk/uk_regions.py:41
+msgid "South Yorkshire"
+msgstr "South Yorkshire"
+
+#: contrib/localflavor/uk/uk_regions.py:42
+msgid "Staffordshire"
+msgstr "Staffordshire"
+
+#: contrib/localflavor/uk/uk_regions.py:43
+msgid "Suffolk"
+msgstr "Suffolk"
+
+#: contrib/localflavor/uk/uk_regions.py:44
+msgid "Surrey"
+msgstr "Surrey"
+
+#: contrib/localflavor/uk/uk_regions.py:45
+msgid "Tyne and Wear"
+msgstr "Tyne and Wear"
+
+#: contrib/localflavor/uk/uk_regions.py:46
+msgid "Warwickshire"
+msgstr "Warwickshire"
+
+#: contrib/localflavor/uk/uk_regions.py:47
+msgid "West Midlands"
+msgstr "West Midlands"
+
+#: contrib/localflavor/uk/uk_regions.py:48
+msgid "West Sussex"
+msgstr "West Sussex"
+
+#: contrib/localflavor/uk/uk_regions.py:49
+msgid "West Yorkshire"
+msgstr "West Yorkshire"
+
+#: contrib/localflavor/uk/uk_regions.py:50
+msgid "Wiltshire"
+msgstr "Wiltshire"
+
+#: contrib/localflavor/uk/uk_regions.py:51
+msgid "Worcestershire"
+msgstr "Worcestershire"
+
+#: contrib/localflavor/uk/uk_regions.py:55
+msgid "County Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/uk/uk_regions.py:56
+msgid "County Armagh"
+msgstr "Armagh"
+
+#: contrib/localflavor/uk/uk_regions.py:57
+msgid "County Down"
+msgstr "Down"
+
+#: contrib/localflavor/uk/uk_regions.py:58
+msgid "County Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/uk/uk_regions.py:59
+msgid "County Londonderry"
+msgstr "Londonderry"
+
+#: contrib/localflavor/uk/uk_regions.py:60
+msgid "County Tyrone"
+msgstr "Tyrone"
+
+#: contrib/localflavor/uk/uk_regions.py:64
+msgid "Clwyd"
+msgstr "Clwyd"
+
+#: contrib/localflavor/uk/uk_regions.py:65
+msgid "Dyfed"
+msgstr "Dyfed"
+
+#: contrib/localflavor/uk/uk_regions.py:66
+msgid "Gwent"
+msgstr "Gwent"
+
+#: contrib/localflavor/uk/uk_regions.py:67
+msgid "Gwynedd"
+msgstr "Gwynedd"
+
+#: contrib/localflavor/uk/uk_regions.py:68
+msgid "Mid Glamorgan"
+msgstr "Mid Glamorgan"
+
+#: contrib/localflavor/uk/uk_regions.py:69
+msgid "Powys"
+msgstr "Powys"
+
+#: contrib/localflavor/uk/uk_regions.py:70
+msgid "South Glamorgan"
+msgstr "South Glamorgan"
+
+#: contrib/localflavor/uk/uk_regions.py:71
+msgid "West Glamorgan"
+msgstr "West Glamorgan"
+
+#: contrib/localflavor/uk/uk_regions.py:75
+msgid "Borders"
+msgstr "Borders"
+
+#: contrib/localflavor/uk/uk_regions.py:76
+msgid "Central Scotland"
+msgstr "Central Scotland"
+
+#: contrib/localflavor/uk/uk_regions.py:77
+msgid "Dumfries and Galloway"
+msgstr "Dumfries and Galloway"
+
+#: contrib/localflavor/uk/uk_regions.py:78
+msgid "Fife"
+msgstr "Fife"
+
+#: contrib/localflavor/uk/uk_regions.py:79
+msgid "Grampian"
+msgstr "Grampian"
+
+#: contrib/localflavor/uk/uk_regions.py:80
+msgid "Highland"
+msgstr "Highland"
+
+#: contrib/localflavor/uk/uk_regions.py:81
+msgid "Lothian"
+msgstr "Lothian"
+
+#: contrib/localflavor/uk/uk_regions.py:82
+msgid "Orkney Islands"
+msgstr "Orknøyene"
+
+#: contrib/localflavor/uk/uk_regions.py:83
+msgid "Shetland Islands"
+msgstr "Shetland"
+
+#: contrib/localflavor/uk/uk_regions.py:84
+msgid "Strathclyde"
+msgstr "Strathclyde"
+
+#: contrib/localflavor/uk/uk_regions.py:85
+msgid "Tayside"
+msgstr "Tayside"
+
+#: contrib/localflavor/uk/uk_regions.py:86
+msgid "Western Isles"
+msgstr "Ytre Hebridene"
+
+#: contrib/localflavor/uk/uk_regions.py:90
+msgid "England"
+msgstr "England"
+
+#: contrib/localflavor/uk/uk_regions.py:91
+msgid "Northern Ireland"
+msgstr "Nord-Irland"
+
+#: contrib/localflavor/uk/uk_regions.py:92
+msgid "Scotland"
+msgstr "Skottland"
+
+#: contrib/localflavor/uk/uk_regions.py:93
+msgid "Wales"
+msgstr "Wales"
+
+#: contrib/localflavor/us/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr "Oppgi et postnummer på formen XXXXX eller XXXXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Telefonnummeret må være på formen XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
+msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+msgstr ""
+"Oppgi et gyldig amerikansik Social Security-nummer på formen XXX-XX-XXXX."
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr ""
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Stat (i USA, to store bokstaver)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Telefonnummer"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "Oppgi gyldig CI på formen X.XXX.XXX-X,XXXXXXX-X eller XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Oppgi et gyldig CI-nummer."
+
+#: contrib/localflavor/za/forms.py:21
+msgid "Enter a valid South African ID number"
+msgstr "Oppgi et gyldig South African ID-nummer."
+
+#: contrib/localflavor/za/forms.py:55
+msgid "Enter a valid South African postal code"
+msgstr "Oppgi et gyldig postnummer."
+
+#: contrib/localflavor/za/za_provinces.py:4
+msgid "Eastern Cape"
+msgstr "Eastern Cape"
+
+#: contrib/localflavor/za/za_provinces.py:5
+msgid "Free State"
+msgstr "Free State"
+
+#: contrib/localflavor/za/za_provinces.py:6
+msgid "Gauteng"
+msgstr "Gauteng"
+
+#: contrib/localflavor/za/za_provinces.py:7
+msgid "KwaZulu-Natal"
+msgstr "KwaZulu-Natal"
+
+#: contrib/localflavor/za/za_provinces.py:8
+msgid "Limpopo"
+msgstr "Limpopo"
+
+#: contrib/localflavor/za/za_provinces.py:9
+msgid "Mpumalanga"
+msgstr "Mpumalanga"
+
+#: contrib/localflavor/za/za_provinces.py:10
+msgid "Northern Cape"
+msgstr "Northern Cape"
+
+#: contrib/localflavor/za/za_provinces.py:11
+msgid "North West"
+msgstr "North West"
+
+#: contrib/localflavor/za/za_provinces.py:12
+msgid "Western Cape"
+msgstr "Western Cape"
+
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "\"lazy\" melding"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "omadresser fra"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Dette bør være en fullstendig sti uten domenenavn. Eksempel: '/hendelser/"
+"finn/"
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "omadresser til"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Dette kan enten være en fullstendig sti (som over), eller en fullstendig "
+"nettadresse som starter med 'http://'"
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "omadressering"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "omadresseringer"
+
+#: contrib/sessions/models.py:45
+msgid "session key"
+msgstr "sesjonsnøkkel"
+
+#: contrib/sessions/models.py:47
+msgid "session data"
+msgstr "sesjonsdata"
+
+#: contrib/sessions/models.py:48
+msgid "expire date"
+msgstr "utløpsdato"
+
+#: contrib/sessions/models.py:53
+msgid "session"
+msgstr "sesjon"
+
+#: contrib/sessions/models.py:54
+msgid "sessions"
+msgstr "sesjoner"
+
+#: contrib/sites/models.py:32
+msgid "domain name"
+msgstr "domenenavn"
+
+#: contrib/sites/models.py:33
+msgid "display name"
+msgstr "visningsnavn"
+
+#: contrib/sites/models.py:39
+msgid "sites"
+msgstr "nettsteder"
+
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Oppgi en gyldig verdi."
+
+#: core/validators.py:87 forms/fields.py:517
+msgid "Enter a valid URL."
+msgstr "Oppgi en gyldig nettadresse."
+
+#: core/validators.py:89 forms/fields.py:518
+msgid "This URL appears to be a broken link."
+msgstr "Nettadressen fører til en side som ikke eksisterer."
+
+#: core/validators.py:123 forms/fields.py:861
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Oppgi en gyldig 'slug' bestående av bokstaver, nummer, understreker eller "
+"bindestreker."
+
+#: core/validators.py:126 forms/fields.py:854
+msgid "Enter a valid IPv4 address."
+msgstr "Oppgi en gyldig IPv4-adresse."
+
+#: core/validators.py:129 db/models/fields/__init__.py:598
+msgid "Enter only digits separated by commas."
+msgstr "Oppgi kun tall adskilt med komma."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Verdien må være %(limit_value)s (den er %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:196 forms/fields.py:246
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Verdien må være mindre enn eller lik som %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:197 forms/fields.py:247
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Verdien må være større enn eller lik som %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr "Verdien må minimum ha %(limit_value)d tegn (den har %(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr "Verdien kan maksimalt ha %(limit_value)d tegn (den er %(show_value)d)."
+
+#: db/models/base.py:780
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s må være unik for %(date_field)s %(lookup)s."
+
+#: db/models/base.py:795 db/models/base.py:803
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s med %(field_label)s finnes allerede."
+
+#: db/models/fields/__init__.py:62
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Verdien %r er ikke et gyldig valg."
+
+#: db/models/fields/__init__.py:63
+msgid "This field cannot be null."
+msgstr "Feltet kan ikke være tomt."
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be blank."
+msgstr "Feltet kan ikke være blankt."
+
+#: db/models/fields/__init__.py:69
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Felt av typen: %(field_type)s"
+
+#: db/models/fields/__init__.py:477 db/models/fields/__init__.py:878
+#: db/models/fields/__init__.py:981 db/models/fields/__init__.py:992
+#: db/models/fields/__init__.py:1019
+msgid "Integer"
+msgstr "Heltall"
+
+#: db/models/fields/__init__.py:481 db/models/fields/__init__.py:876
+msgid "This value must be an integer."
+msgstr "Verdien må være et heltall."
+
+#: db/models/fields/__init__.py:516
+msgid "This value must be either True or False."
+msgstr "Verdien må være True eller False."
+
+#: db/models/fields/__init__.py:518
+msgid "Boolean (Either True or False)"
+msgstr "Boolsk (True eller False)"
+
+#: db/models/fields/__init__.py:565 db/models/fields/__init__.py:1002
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Tekst (opp til %(max_length)s tegn)"
+
+#: db/models/fields/__init__.py:593
+msgid "Comma-separated integers"
+msgstr "Heltall adskilt med komma"
+
+#: db/models/fields/__init__.py:607
+msgid "Date (without time)"
+msgstr "Dato (uten tid)"
+
+#: db/models/fields/__init__.py:611
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Oppgi en gyldig dato på formen ÅÅÅÅ-MM-DD."
+
+#: db/models/fields/__init__.py:612
+#, python-format
+msgid "Invalid date: %s"
+msgstr "Ugyldig dato: %s"
+
+#: db/models/fields/__init__.py:693
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
+msgstr "Oppgi dato og tid på formen ÅÅÅÅ-MM-DD TT:MM[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:695
+msgid "Date (with time)"
+msgstr "Dato (med tid)"
+
+#: db/models/fields/__init__.py:761
+msgid "This value must be a decimal number."
+msgstr "Verdien må være et desimaltall."
+
+#: db/models/fields/__init__.py:763
+msgid "Decimal number"
+msgstr "Desimaltall"
+
+#: db/models/fields/__init__.py:818
+msgid "E-mail address"
+msgstr "E-postadresse"
+
+#: db/models/fields/__init__.py:825 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Filsti"
+
+#: db/models/fields/__init__.py:848
+msgid "This value must be a float."
+msgstr "Verdien må være et flyttall."
+
+#: db/models/fields/__init__.py:850
+msgid "Floating point number"
+msgstr "Flyttall"
+
+#: db/models/fields/__init__.py:903
+msgid "Big (8 byte) integer"
+msgstr "Stort (8 byte) heltall"
+
+#: db/models/fields/__init__.py:932
+msgid "This value must be either None, True or False."
+msgstr "Verdien må være None, True eller False."
+
+#: db/models/fields/__init__.py:934
+msgid "Boolean (Either True, False or None)"
+msgstr "Boolsk (True, False eller None)"
+
+#: db/models/fields/__init__.py:1025
+msgid "Text"
+msgstr "Tekst"
+
+#: db/models/fields/__init__.py:1041
+msgid "Time"
+msgstr "Tid"
+
+#: db/models/fields/__init__.py:1045
+msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
+msgstr "Oppgi tiden på formen TT:MM[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:1129
+msgid "XML text"
+msgstr "XML-tekst"
+
+#: db/models/fields/related.py:755
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Modell %(model)s med primærnøkkelen %(pk)r finnes ikke."
+
+#: db/models/fields/related.py:757
+msgid "Foreign Key (type determined by related field)"
+msgstr "Fremmednøkkel (type bestemmes av relatert felt)"
+
+#: db/models/fields/related.py:879
+msgid "One-to-one relationship"
+msgstr "En-til-en-relasjon"
+
+#: db/models/fields/related.py:939
+msgid "Many-to-many relationship"
+msgstr "Mange-til-mange-relasjon"
+
+#: db/models/fields/related.py:959
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"Hold nede \"Control\", eller \"Command\" på en Mac, for å velge mer enn en."
+
+#: db/models/fields/related.py:1020
+#, python-format
+msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "Oppgi gyldige %(self)s-ID-er. Verdien %(value)r er ugyldig."
+msgstr[1] "Oppgi gyldige %(self)s-ID-er. Verdiene %(value)r er ugyldige."
+
+#: forms/fields.py:65
+msgid "This field is required."
+msgstr "Feltet er påkrevet."
+
+#: forms/fields.py:195
+msgid "Enter a whole number."
+msgstr "Oppgi et heltall."
+
+#: forms/fields.py:225 forms/fields.py:245
+msgid "Enter a number."
+msgstr "Oppgi et tall."
+
+#: forms/fields.py:248
+#, python-format
+msgid "Ensure that there are no more than %s digits in total."
+msgstr "Verdien kan ikke ha mer enn %s siffer totalt."
+
+#: forms/fields.py:249
+#, python-format
+msgid "Ensure that there are no more than %s decimal places."
+msgstr "Verdien kan ikke ha mer enn %s desimaler."
+
+#: forms/fields.py:250
+#, python-format
+msgid "Ensure that there are no more than %s digits before the decimal point."
+msgstr "Verdien kan ikke ha mer enn %s siffer foran komma."
+
+#: forms/fields.py:311 forms/fields.py:826
+msgid "Enter a valid date."
+msgstr "Oppgi en gyldig dato."
+
+#: forms/fields.py:339 forms/fields.py:827
+msgid "Enter a valid time."
+msgstr "Oppgi et gyldig tidspunkt."
+
+#: forms/fields.py:365
+msgid "Enter a valid date/time."
+msgstr "Oppgi gyldig dato og tidspunkt."
+
+#: forms/fields.py:423
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Ingen fil ble sendt. Sjekk \"encoding\"-typen på skjemaet."
+
+#: forms/fields.py:424
+msgid "No file was submitted."
+msgstr "Ingen fil ble sendt."
+
+#: forms/fields.py:425
+msgid "The submitted file is empty."
+msgstr "Filen er tom."
+
+#: forms/fields.py:426
+#, python-format
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr "Filnavnet kan maksimalt ha %(max)d tegn (det har %(length)d)."
+
+#: forms/fields.py:461
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Last opp et gyldig bilde. Filen du lastet opp var ødelagt eller ikke et "
+"bilde."
+
+#: forms/fields.py:584 forms/fields.py:659
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr "Velg et gyldig valg. %(value)s er ikke et av de tilgjengelige valgene."
+
+#: forms/fields.py:660 forms/fields.py:722 forms/models.py:986
+msgid "Enter a list of values."
+msgstr "Oppgi en liste med verdier."
+
+#: forms/formsets.py:290 forms/formsets.py:292
+msgid "Order"
+msgstr "Rekkefølge"
+
+#: forms/models.py:547
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Vennligst korriger duplisert data for %(field)s."
+
+#: forms/models.py:551
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr "Vennligst korriger duplisert data for %(field)s, som må være unik."
+
+#: forms/models.py:557
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+"Vennligst korriger duplisert data for %(field_name)s, som må være unik for %"
+"(lookup)s i %(date_field)s."
+
+#: forms/models.py:565
+msgid "Please correct the duplicate values below."
+msgstr "Vennligst korriger de dupliserte verdiene nedenfor."
+
+#: forms/models.py:839
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr "Primærnøkkelen er ikke den samme som foreldreinstansens primærnøkkel."
+
+#: forms/models.py:905
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr "Velg et gyldig valg. Valget er ikke et av de tilgjengelige valgene."
+
+#: forms/models.py:987
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Velg et gyldig valg. %s er ikke et av de tilgjengelige valgene."
+
+#: forms/models.py:989
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr "\"%s\" er ikke en gyldig verdi for en primærnøkkel."
+
+#: template/defaultfilters.py:781
+msgid "yes,no,maybe"
+msgstr "ja,nei,kanskje"
+
+#: template/defaultfilters.py:812
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] "%(size)d byte"
+msgstr[1] "%(size)d bytes"
+
+#: template/defaultfilters.py:814
+#, python-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: template/defaultfilters.py:816
+#, python-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: template/defaultfilters.py:817
+#, python-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: utils/dateformat.py:42
+msgid "p.m."
+msgstr "p.m."
+
+#: utils/dateformat.py:43
+msgid "a.m."
+msgstr "a.m."
+
+#: utils/dateformat.py:48
+msgid "PM"
+msgstr "PM"
+
+#: utils/dateformat.py:49
+msgid "AM"
+msgstr "AM"
+
+#: utils/dateformat.py:98
+msgid "midnight"
+msgstr "midnatt"
+
+#: utils/dateformat.py:100
+msgid "noon"
+msgstr "12:00"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "mandag"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "tirsdag"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "onsdag"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "torsdag"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "fredag"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "lørdag"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "søndag"
+
+#: utils/dates.py:10
+msgid "Mon"
+msgstr "man"
+
+#: utils/dates.py:10
+msgid "Tue"
+msgstr "tirs"
+
+#: utils/dates.py:10
+msgid "Wed"
+msgstr "ons"
+
+#: utils/dates.py:10
+msgid "Thu"
+msgstr "tors"
+
+#: utils/dates.py:10
+msgid "Fri"
+msgstr "fre"
+
+#: utils/dates.py:11
+msgid "Sat"
+msgstr "lør"
+
+#: utils/dates.py:11
+msgid "Sun"
+msgstr "søn"
+
+#: utils/dates.py:18
+msgid "January"
+msgstr "januar"
+
+#: utils/dates.py:18
+msgid "February"
+msgstr "februar"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "March"
+msgstr "mars"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "April"
+msgstr "april"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "May"
+msgstr "mai"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "June"
+msgstr "juni"
+
+#: utils/dates.py:19 utils/dates.py:31
+msgid "July"
+msgstr "juli"
+
+#: utils/dates.py:19
+msgid "August"
+msgstr "august"
+
+#: utils/dates.py:19
+msgid "September"
+msgstr "september"
+
+#: utils/dates.py:19
+msgid "October"
+msgstr "oktober"
+
+#: utils/dates.py:19
+msgid "November"
+msgstr "november"
+
+#: utils/dates.py:20
+msgid "December"
+msgstr "desember"
+
+#: utils/dates.py:23
+msgid "jan"
+msgstr "jan"
+
+#: utils/dates.py:23
+msgid "feb"
+msgstr "feb"
+
+#: utils/dates.py:23
+msgid "mar"
+msgstr "mar"
+
+#: utils/dates.py:23
+msgid "apr"
+msgstr "apr"
+
+#: utils/dates.py:23
+msgid "may"
+msgstr "mai"
+
+#: utils/dates.py:23
+msgid "jun"
+msgstr "jun"
+
+#: utils/dates.py:24
+msgid "jul"
+msgstr "jul"
+
+#: utils/dates.py:24
+msgid "aug"
+msgstr "aug"
+
+#: utils/dates.py:24
+msgid "sep"
+msgstr "sep"
+
+#: utils/dates.py:24
+msgid "oct"
+msgstr "okt"
+
+#: utils/dates.py:24
+msgid "nov"
+msgstr "nov"
+
+#: utils/dates.py:24
+msgid "dec"
+msgstr "des"
+
+#: utils/dates.py:31
+msgid "Jan."
+msgstr "jan."
+
+#: utils/dates.py:31
+msgid "Feb."
+msgstr "feb."
+
+#: utils/dates.py:32
+msgid "Aug."
+msgstr "aug."
+
+#: utils/dates.py:32
+msgid "Sept."
+msgstr "sept."
+
+#: utils/dates.py:32
+msgid "Oct."
+msgstr "okt."
+
+#: utils/dates.py:32
+msgid "Nov."
+msgstr "nov."
+
+#: utils/dates.py:32
+msgid "Dec."
+msgstr "des."
+
+#: utils/text.py:130
+msgid "or"
+msgstr "eller"
+
+#: utils/timesince.py:21
+msgid "year"
+msgid_plural "years"
+msgstr[0] "år"
+msgstr[1] "år"
+
+#: utils/timesince.py:22
+msgid "month"
+msgid_plural "months"
+msgstr[0] "måned"
+msgstr[1] "måneder"
+
+#: utils/timesince.py:23
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "uke"
+msgstr[1] "uker"
+
+#: utils/timesince.py:24
+msgid "day"
+msgid_plural "days"
+msgstr[0] "dag"
+msgstr[1] "dager"
+
+#: utils/timesince.py:25
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "time"
+msgstr[1] "timer"
+
+#: utils/timesince.py:26
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minutt"
+msgstr[1] "minutter"
+
+#: utils/timesince.py:45
+msgid "minutes"
+msgstr "minutter"
+
+#: utils/timesince.py:50
+#, python-format
+msgid "%(number)d %(type)s"
+msgstr "%(number)d %(type)s"
+
+#: utils/timesince.py:56
+#, python-format
+msgid ", %(number)d %(type)s"
+msgstr ", %(number)d %(type)s"
+
+#: utils/translation/trans_real.py:512
+msgid "DATE_FORMAT"
+msgstr "j. F Y"
+
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j. F Y H:i"
+
+#: utils/translation/trans_real.py:514
+msgid "TIME_FORMAT"
+msgstr "H:i"
+
+#: utils/translation/trans_real.py:535
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:536
+msgid "MONTH_DAY_FORMAT"
+msgstr "j. F"
+
+#: views/generic/create_update.py:115
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s ble opprettet."
+
+#: views/generic/create_update.py:158
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s ble oppdatert."
+
+#: views/generic/create_update.py:201
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s ble slettet."
+
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "En eller flere %(fieldname)s i %(name)s: %(obj)s"
+
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "En eller flere %(fieldname)s i %(name)s:"
+
+#~ msgid "Old password:"
+#~ msgstr "Gammelt passord:"
+
+#~ msgid "Relation to parent model"
+#~ msgstr "Relasjon til foreldermodell"
+
+#~ msgid "Add user"
+#~ msgstr "Opprett ny bruker"
+
+#~ msgid "Comment moderation queue"
+#~ msgstr "Kommentarmoderasjonskø"
+
+#~ msgid "No comments to moderate"
+#~ msgstr "Ingen kommentarer å moderere"
+
+#~ msgid "Email"
+#~ msgstr "E-post"
+
+#~ msgid "Authenticated?"
+#~ msgstr "Godkjent?"
+
+#~ msgid "IP Address"
+#~ msgstr "IP-adresse"
+
+#~ msgid "Date posted"
+#~ msgstr "Dato lagt inn"
+
+#~ msgid "yes"
+#~ msgstr "ja"
+
+#~ msgid "no"
+#~ msgstr "nei"
Binary file web/lib/django/conf/locale/nb/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/nb/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,119 @@
+# Norwegian (Bokmål) translation of Django Javascript
+# Copyright (C) 2005 and beyond
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-12-09 11:51+0100\n"
+"PO-Revision-Date: 2010-03-11 18:06+0100\n"
+"Last-Translator: Christian Mikalsen and Jon Lønne\n"
+"Language-Team: Norsk <no@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:37
+#, perl-format
+msgid "Available %s"
+msgstr "Tilgjengelige %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:45
+msgid "Choose all"
+msgstr "Velg alle"
+
+#: contrib/admin/media/js/SelectFilter2.js:50
+msgid "Add"
+msgstr "Ny"
+
+#: contrib/admin/media/js/SelectFilter2.js:52
+msgid "Remove"
+msgstr "Slett"
+
+#: contrib/admin/media/js/SelectFilter2.js:57
+#, perl-format
+msgid "Chosen %s"
+msgstr "Valgte %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:58
+msgid "Select your choice(s) and click "
+msgstr "Velg ditt valg og klikk "
+
+#: contrib/admin/media/js/SelectFilter2.js:63
+msgid "Clear all"
+msgstr "Fjern alle"
+
+#: contrib/admin/media/js/calendar.js:24
+#: contrib/admin/media/js/dateparse.js:32
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+"Januar Februar Mars April Mai Juni Juli August September Oktober November "
+"Desember"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "S M T O T F L"
+
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Vis"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Skjul"
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Søndag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:50
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
+msgid "Now"
+msgstr "Nå"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:54
+msgid "Clock"
+msgstr "Klokke"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Choose a time"
+msgstr "Velg et klokkeslett"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
+msgid "Midnight"
+msgstr "Midnatt"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+msgid "6 a.m."
+msgstr "06:00"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+msgid "Noon"
+msgstr "12:00"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:92
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
+msgid "Today"
+msgstr "I dag"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
+msgid "Calendar"
+msgstr "Kalender"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
+msgid "Yesterday"
+msgstr "I går"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
+msgid "Tomorrow"
+msgstr "I morgen"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/nb/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,34 @@
+DATE_FORMAT = 'j. F Y'
+TIME_FORMAT = 'H:i'
+DATETIME_FORMAT = 'j. F Y H:i'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'd.m.Y'
+SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+FIRST_DAY_OF_WEEK = 1 # Monday
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%j.%m.%Y', '%j.%m.%y', # '2006-10-25', '25.10.2006', '25.10.06'
+    '%Y-%m-%j',                         # '2006-10-25',
+    # '%j. %b %Y', '%j %b %Y',            # '25. okt 2006', '25 okt 2006'
+    # '%j. %b. %Y', '%j %b. %Y',          # '25. okt. 2006', '25 okt. 2006'
+    # '%j. %B %Y', '%j %B %Y',            # '25. oktober 2006', '25 oktober 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',     # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+    '%Y-%m-%j',              # '2006-10-25'
+    '%j.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
+    '%j.%m.%Y %H:%M',        # '25.10.2006 14:30'
+    '%j.%m.%Y',              # '25.10.2006'
+    '%j.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
+    '%j.%m.%y %H:%M',        # '25.10.06 14:30'
+    '%j.%m.%y',              # '25.10.06'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/nl/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/nl/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/nl/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -6,7 +6,7 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-08 15:34+0200\n"
+"POT-Creation-Date: 2009-08-08 09:21+0200\n"
 "PO-Revision-Date: 2008-08-28 13:58+0100\n"
 "Last-Translator: Rudolph Froger <rudolphfroger@estrate.nl>\n"
 "Language-Team: \n"
@@ -224,7 +224,7 @@
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "%(count)d %(items)s succesvol verwijderd."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1025
+#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
 msgid "Are you sure?"
 msgstr "Weet u het zeker?"
 
@@ -322,7 +322,7 @@
 
 #: contrib/admin/options.py:519 contrib/admin/options.py:529
 #: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:587
+#: forms/models.py:600
 msgid "and"
 msgstr "en"
 
@@ -345,69 +345,69 @@
 msgid "No fields changed."
 msgstr "Geen velden gewijzigd."
 
-#: contrib/admin/options.py:598 contrib/auth/admin.py:67
+#: contrib/admin/options.py:599 contrib/auth/admin.py:67
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "De %(name)s \"%(obj)s\" is toegevoegd."
 
-#: contrib/admin/options.py:602 contrib/admin/options.py:635
+#: contrib/admin/options.py:603 contrib/admin/options.py:636
 #: contrib/auth/admin.py:75
 msgid "You may edit it again below."
 msgstr "U kunt dit hieronder weer bewerken."
 
-#: contrib/admin/options.py:612 contrib/admin/options.py:645
+#: contrib/admin/options.py:613 contrib/admin/options.py:646
 #, python-format
 msgid "You may add another %s below."
 msgstr "U kunt hieronder de volgende %s toevoegen."
 
-#: contrib/admin/options.py:633
+#: contrib/admin/options.py:634
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "Het wijzigen van %(name)s \"%(obj)s\" is geslaagd."
 
-#: contrib/admin/options.py:641
+#: contrib/admin/options.py:642
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr "De %(name)s \"%(obj)s\" was toegevoegd. U kunt het hieronder wijzigen."
 
-#: contrib/admin/options.py:772
+#: contrib/admin/options.py:773
 #, python-format
 msgid "Add %s"
 msgstr "Toevoegen %s"
 
-#: contrib/admin/options.py:803 contrib/admin/options.py:1003
+#: contrib/admin/options.py:804 contrib/admin/options.py:1005
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "%(name)s object met primaire sleutel %(key)r bestaat niet."
 
-#: contrib/admin/options.py:860
+#: contrib/admin/options.py:861
 #, python-format
 msgid "Change %s"
 msgstr "Wijzig %s"
 
-#: contrib/admin/options.py:904
+#: contrib/admin/options.py:905
 msgid "Database error"
 msgstr "Databasefout"
 
-#: contrib/admin/options.py:940
+#: contrib/admin/options.py:941
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s %(name)s is succesvol gewijzigd."
 msgstr[1] "%(count)s %(name)s zijn succesvol gewijzigd."
 
-#: contrib/admin/options.py:1018
+#: contrib/admin/options.py:1020
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "De verwijdering van %(name)s \"%(obj)s\" is geslaagd."
 
-#: contrib/admin/options.py:1054
+#: contrib/admin/options.py:1057
 #, python-format
 msgid "Change history: %s"
 msgstr "Wijzigingsgeschiedenis: %s"
 
-#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
+#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
 #: contrib/auth/forms.py:80
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
@@ -416,11 +416,11 @@
 "Voer een correcte gebruikersnaam en wachtwoord in. Let op, de velden zijn "
 "hoofdletter-gevoelig."
 
-#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Uw sessie is verlopen, meld u opnieuw aan."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -428,27 +428,27 @@
 "Het lijkt erop dat uw browser geen cookies accepteert. Zet het gebruik van "
 "cookies aan in uw browser, laad deze pagina nogmaals en probeer het opnieuw."
 
-#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
+#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Gebruikersnamen mogen geen '@' teken bevatten."
 
-#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Uw e-mailadres is niet uw gebruikersnaam. Probeer '%s' eens."
 
-#: contrib/admin/sites.py:360
+#: contrib/admin/sites.py:367
 msgid "Site administration"
 msgstr "Sitebeheer"
 
-#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Inloggen"
 
-#: contrib/admin/sites.py:417
+#: contrib/admin/sites.py:426
 #, python-format
 msgid "%s administration"
 msgstr "%s beheer"
@@ -498,7 +498,7 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
+#: contrib/admin/templates/admin/base.html:54
 #: contrib/admin/templates/admin/change_form.html:17
 #: contrib/admin/templates/admin/change_list.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:6
@@ -543,7 +543,7 @@
 
 #: contrib/admin/templates/admin/actions.html:4
 msgid "Go"
-msgstr "Zoek"
+msgstr "Voer Uit"
 
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
@@ -551,18 +551,18 @@
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:27
 msgid "Welcome,"
 msgstr "Welkom,"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Documentatie"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:40
 #: contrib/admin/templates/admin/auth/user/change_password.html:14
 #: contrib/admin/templates/admin/auth/user/change_password.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
@@ -570,7 +570,7 @@
 msgid "Change password"
 msgstr "Wachtwoord wijzigen"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 msgid "Log out"
@@ -659,8 +659,8 @@
 "objects:"
 msgstr ""
 "Het verwijderen van %(object_name)s zal ook gerelateerde objecten "
-"verwijderen. Echter, u heeft geen rechten om de volgende typen objecten "
-"te verwijderen:"
+"verwijderen. Echter, u heeft geen rechten om de volgende typen objecten te "
+"verwijderen:"
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:22
 #, python-format
@@ -668,8 +668,8 @@
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
 "the following objects and it's related items will be deleted:"
 msgstr ""
-"Weet u zeker dat u %(object_name)s objecten wilt verwijderen? "
-"Alle volgende objecten worden verwijderd:"
+"Weet u zeker dat u %(object_name)s objecten wilt verwijderen? Alle volgende "
+"objecten worden verwijderd:"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -752,6 +752,11 @@
 msgid "Show all"
 msgstr "Alles tonen"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Opslaan"
+
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Search"
 msgstr "Zoek"
@@ -768,10 +773,6 @@
 msgid "%(full_result_count)s total"
 msgstr "%(full_result_count)s totaal"
 
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Opslaan"
-
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
 msgstr "Opslaan als nieuw item"
@@ -997,144 +998,145 @@
 msgid "template"
 msgstr "sjabloon"
 
-#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "tag:"
 
-#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "filter:"
 
-#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "view:"
 
-#: contrib/admindocs/views.py:187
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "Toepassing %r niet gevonden"
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "Model %(model_name)r niet gevonden in toepassing %(app_label)r"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "het gerelateerde `%(app_label)s.%(data_type)s` object"
 
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "model:"
 
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "gerelateerde `%(app_label)s.%(object_name)s` objecten"
 
-#: contrib/admindocs/views.py:242
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "alle %s"
 
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "aantal %s"
 
-#: contrib/admindocs/views.py:252
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "Velden van %s objecten"
 
-#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
+#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
+#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
+#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
 msgid "Integer"
 msgstr "Geheel getal"
 
-#: contrib/admindocs/views.py:316
+#: contrib/admindocs/views.py:335
 msgid "Boolean (Either True or False)"
 msgstr "Boolean (True danwel False)"
 
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
+#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
 #, python-format
 msgid "String (up to %(max_length)s)"
 msgstr "Karakterreeks (hooguit %(max_length)s)"
 
-#: contrib/admindocs/views.py:318
+#: contrib/admindocs/views.py:337
 msgid "Comma-separated integers"
 msgstr "Komma-gescheiden gehele getallen"
 
-#: contrib/admindocs/views.py:319
+#: contrib/admindocs/views.py:338
 msgid "Date (without time)"
 msgstr "Datum (zonder tijd)"
 
-#: contrib/admindocs/views.py:320
+#: contrib/admindocs/views.py:339
 msgid "Date (with time)"
 msgstr "Datum (met tijd)"
 
-#: contrib/admindocs/views.py:321
+#: contrib/admindocs/views.py:340
 msgid "Decimal number"
 msgstr "Decimaal getal"
 
-#: contrib/admindocs/views.py:322
+#: contrib/admindocs/views.py:341
 msgid "E-mail address"
 msgstr "E-mailadres"
 
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
+#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
+#: contrib/admindocs/views.py:346
 msgid "File path"
 msgstr "Bestandspad"
 
-#: contrib/admindocs/views.py:325
+#: contrib/admindocs/views.py:344
 msgid "Floating point number"
 msgstr "Decimaal getal"
 
-#: contrib/admindocs/views.py:329 contrib/comments/models.py:60
+#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
 msgid "IP address"
 msgstr "IP-adres"
 
-#: contrib/admindocs/views.py:331
+#: contrib/admindocs/views.py:350
 msgid "Boolean (Either True, False or None)"
 msgstr "Boolean (True, False of None)"
 
-#: contrib/admindocs/views.py:332
+#: contrib/admindocs/views.py:351
 msgid "Relation to parent model"
 msgstr "Relatie tot oudermodel"
 
-#: contrib/admindocs/views.py:333
+#: contrib/admindocs/views.py:352
 msgid "Phone number"
 msgstr "Telefoonnummer"
 
-#: contrib/admindocs/views.py:338
+#: contrib/admindocs/views.py:357
 msgid "Text"
 msgstr "Tekst"
 
-#: contrib/admindocs/views.py:339
+#: contrib/admindocs/views.py:358
 msgid "Time"
 msgstr "Tijd"
 
-#: contrib/admindocs/views.py:340 contrib/comments/forms.py:95
+#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
 #: contrib/comments/templates/comments/moderation_queue.html:37
 #: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
-#: contrib/admindocs/views.py:341
+#: contrib/admindocs/views.py:360
 msgid "U.S. state (two uppercase letters)"
 msgstr "Staat van de VS (twee hoofdletters)"
 
-#: contrib/admindocs/views.py:342
+#: contrib/admindocs/views.py:361
 msgid "XML text"
 msgstr "XML-tekst"
 
-#: contrib/admindocs/views.py:368
+#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s lijkt geen urlpattern-object te zijn"
@@ -1361,7 +1363,7 @@
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
 msgstr ""
-"Gebruik '[algo]$[salt]$[hexdigest]' of gebruik het<a href=\"password/"
+"Gebruik '[algo]$[salt]$[hexdigest]' of gebruik het <a href=\"password/"
 "\">wachtwoord wijzigen formulier</a>."
 
 #: contrib/auth/models.py:133
@@ -1530,8 +1532,8 @@
 "Check this box if the comment is inappropriate. A \"This comment has been "
 "removed\" message will be displayed instead."
 msgstr ""
-"Vink dit vak aan indien de opmerking niet gepast is. Een \"Dit commentaar "
-"is verwijderd\" bericht wordt dan getoond."
+"Vink dit vak aan indien de opmerking niet gepast is. Een \"Dit commentaar is "
+"verwijderd\" bericht wordt dan getoond."
 
 #: contrib/comments/models.py:77
 msgid "comments"
@@ -1607,7 +1609,8 @@
 msgid ""
 "Thanks for taking the time to improve the quality of discussion on our site"
 msgstr ""
-"Bedankt dat u de tijd heeft genomen om de kwaliteit van de discussie op onze site te verbeteren"
+"Bedankt dat u de tijd heeft genomen om de kwaliteit van de discussie op onze "
+"site te verbeteren"
 
 #: contrib/comments/templates/comments/delete.html:4
 msgid "Remove a comment"
@@ -2190,12 +2193,12 @@
 
 #: contrib/localflavor/cz/forms.py:47
 msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-"Geef een geboorte nummer op in het formaat XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Geef een geboorte nummer op in het formaat XXXXXX/XXXX or XXXXXXXXXX."
 
 #: contrib/localflavor/cz/forms.py:48
 msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Ongeldige optionele parameter Geslacht, geldige waarden zijn 'f' en 'm'"
+msgstr ""
+"Ongeldige optionele parameter Geslacht, geldige waarden zijn 'f' en 'm'"
 
 #: contrib/localflavor/cz/forms.py:49
 msgid "Enter a valid birth number."
@@ -3035,7 +3038,8 @@
 #: contrib/localflavor/pl/forms.py:109
 msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
 msgstr ""
-"Het Nationaal Zakelijk Registratie Nummer (REGON) bestaat uit 9 of 14 cijfers."
+"Het Nationaal Zakelijk Registratie Nummer (REGON) bestaat uit 9 of 14 "
+"cijfers."
 
 #: contrib/localflavor/pl/forms.py:110
 msgid "Wrong checksum for the National Business Register Number (REGON)."
@@ -3883,7 +3887,7 @@
 msgid "This value must be an integer."
 msgstr "De waarde moet een geheel getal zijn."
 
-#: db/models/fields/__init__.py:3883918
+#: db/models/fields/__init__.py:388
 msgid "This value must be either True or False."
 msgstr "De waarde moet of True (Waar) of False (Onwaar) zijn."
 
@@ -3912,8 +3916,8 @@
 msgid "This value must be a decimal number."
 msgstr "De waarde moet een decimaal getal zijn."
 
+# Choose 'kommagetal' because it's user input.
 #: db/models/fields/__init__.py:686
-# Choose 'kommagetal' because it's user input.
 msgid "This value must be a float."
 msgstr "De waarde moet een kommagetal zijn."
 
@@ -3925,14 +3929,14 @@
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Geef een geldige tijd in UU:MM[:ss[.uuuuuu]] formaat."
 
-#: db/models/fields/related.py:792
+#: db/models/fields/related.py:816
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Houd \"Control\", of \"Command\" op een Mac, ingedrukt om meerdere te "
 "selecteren."
 
-#: db/models/fields/related.py:870
+#: db/models/fields/related.py:894
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3952,15 +3956,15 @@
 #, python-format
 msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
 msgstr ""
-"Zorg ervoor dat waarde korter is dan %(max)d tekens (huidige lengte "
-"%(length)d)."
+"Zorg ervoor dat waarde korter is dan %(max)d tekens (huidige lengte %(length)"
+"d)."
 
 #: forms/fields.py:139
 #, python-format
 msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
 msgstr ""
-"Zorg ervoor dat deze tekst langer is dan %(min)d tekens (huidige lengte "
-"%(length)d)."
+"Zorg ervoor dat deze tekst langer is dan %(min)d tekens (huidige lengte %"
+"(length)d)."
 
 #: forms/fields.py:166
 msgid "Enter a whole number."
@@ -4026,7 +4030,8 @@
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
 msgstr ""
-"De bestandsnaam mag maximaal %(max)d karakters bevatten (dit zijn er nu %(length)d)."
+"De bestandsnaam mag maximaal %(max)d karakters bevatten (dit zijn er nu %"
+"(length)d)."
 
 #: forms/fields.py:483
 msgid ""
@@ -4049,7 +4054,7 @@
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Selecteer een geldige keuze. %(value)s is geen beschikbare keuze."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:962
+#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
 msgid "Enter a list of values."
 msgstr "Geef een lijst op met waardes."
 
@@ -4078,43 +4083,45 @@
 msgid "%(model_name)s with this %(field_label)s already exists."
 msgstr "Er bestaat al een %(model_name)s met eenzelfde %(field_label)s."
 
-#: forms/models.py:581
+#: forms/models.py:594
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Verbeter de dubbele gegevens voor %(field)s."
 
-#: forms/models.py:585
+#: forms/models.py:598
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr "Verbeter de dubbele gegevens voor %(field)s, welke uniek moet zijn."
 
-#: forms/models.py:591
+#: forms/models.py:604
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
 "for the %(lookup)s in %(date_field)s."
-msgstr "Verbeter de dubbele gegevens voor %(field_name)s, welke uniek moet "
-"zijn voor de %(lookup)s in %(date_field)s."
-
-#: forms/models.py:599
+msgstr ""
+"Verbeter de dubbele gegevens voor %(field_name)s, welke uniek moet zijn voor "
+"de %(lookup)s in %(date_field)s."
+
+#: forms/models.py:612
 msgid "Please correct the duplicate values below."
 msgstr "Verbeter de dubbele waarden hieronder."
 
-#: forms/models.py:837
+#: forms/models.py:867
 msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "De secundaire sleutel komt niet overeen met de primaire sleutel van "
-"de bovenliggende instantie."
-
-#: forms/models.py:892
+msgstr ""
+"De secundaire sleutel komt niet overeen met de primaire sleutel van de "
+"bovenliggende instantie."
+
+#: forms/models.py:930
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Selecteer een geldige keuze. Deze keuze is niet beschikbaar."
 
-#: forms/models.py:963
+#: forms/models.py:1004
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Selecteer een geldige keuze. %s is geen beschikbare keuze."
 
-#: forms/models.py:965
+#: forms/models.py:1006
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" is geen geldige waarde voor een primaire sleutel."
@@ -4145,27 +4152,27 @@
 msgid "%.1f GB"
 msgstr "%.1f GB"
 
-#: utils/dateformat.py:41
+#: utils/dateformat.py:42
 msgid "p.m."
 msgstr "p.m."
 
-#: utils/dateformat.py:42
+#: utils/dateformat.py:43
 msgid "a.m."
 msgstr "a.m."
 
-#: utils/dateformat.py:47
+#: utils/dateformat.py:48
 msgid "PM"
 msgstr "PM"
 
-#: utils/dateformat.py:48
+#: utils/dateformat.py:49
 msgid "AM"
 msgstr "AM"
 
-#: utils/dateformat.py:97
+#: utils/dateformat.py:98
 msgid "midnight"
 msgstr "middernacht"
 
-#: utils/dateformat.py:99
+#: utils/dateformat.py:100
 msgid "noon"
 msgstr "middag"
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/nl/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,48 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'                   # '20 januari 2009'
+TIME_FORMAT = 'H:i'                     # '15:23'
+DATETIME_FORMAT = 'j F Y H:i'           # '20 januari 2009 15:23'
+YEAR_MONTH_FORMAT = 'F Y'               # 'januari 2009'
+MONTH_DAY_FORMAT = 'j F'                # '20 januari'
+SHORT_DATE_FORMAT = 'j-n-Y'             # '20-1-2009'
+SHORT_DATETIME_FORMAT = 'j-n-Y H:i'     # '20-1-2009 15:23'
+FIRST_DAY_OF_WEEK = 1                   # Monday (in Dutch 'maandag')
+DATE_INPUT_FORMATS = (
+    '%d-%m-%Y', '%d-%m-%y', '%Y-%m-%d', # '20-01-2009', '20-01-09', '2009-01-20'
+    # '%d %b %Y', '%d %b %y',             # '20 jan 2009', '20 jan 09'
+    # '%d %B %Y', '%d %B %y',             # '20 januari 2009', '20 januari 09'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',                         # '15:23:35'
+    '%H.%M:%S',                         # '15.23:35'
+    '%H.%M',                            # '15.23'
+    '%H:%M',                            # '15:23'
+)
+DATETIME_INPUT_FORMATS = (
+    # With time in %H:%M:%S :
+    '%d-%m-%Y %H:%M:%S', '%d-%m-%y %H:%M:%S', '%Y-%m-%d %H:%M:%S',  # '20-01-2009 15:23:35', '20-01-09 15:23:35', '2009-01-20 15:23:35'
+    # '%d %b %Y %H:%M:%S', '%d %b %y %H:%M:%S',   # '20 jan 2009 15:23:35', '20 jan 09 15:23:35'
+    # '%d %B %Y %H:%M:%S', '%d %B %y %H:%M:%S',   # '20 januari 2009 15:23:35', '20 januari 2009 15:23:35'
+    # With time in %H.%M:%S :
+    '%d-%m-%Y %H.%M:%S', '%d-%m-%y %H.%M:%S',   # '20-01-2009 15.23:35', '20-01-09 15.23:35'
+    # '%d %b %Y %H.%M:%S', '%d %b %y %H.%M:%S',   # '20 jan 2009 15.23:35', '20 jan 09 15.23:35'
+    # '%d %B %Y %H.%M:%S', '%d %B %y %H.%M:%S',   # '20 januari 2009 15.23:35', '20 januari 2009 15.23:35'
+    # With time in %H:%M :
+    '%d-%m-%Y %H:%M', '%d-%m-%y %H:%M', '%Y-%m-%d %H:%M',   # '20-01-2009 15:23', '20-01-09 15:23', '2009-01-20 15:23'
+    # '%d %b %Y %H:%M', '%d %b %y %H:%M',         # '20 jan 2009 15:23', '20 jan 09 15:23'
+    # '%d %B %Y %H:%M', '%d %B %y %H:%M',         # '20 januari 2009 15:23', '20 januari 2009 15:23'
+    # With time in %H.%M :
+    '%d-%m-%Y %H.%M', '%d-%m-%y %H.%M',         # '20-01-2009 15.23', '20-01-09 15.23'
+    # '%d %b %Y %H.%M', '%d %b %y %H.%M',         # '20 jan 2009 15.23', '20 jan 09 15.23'
+    # '%d %B %Y %H.%M', '%d %B %y %H.%M',         # '20 januari 2009 15.23', '20 januari 2009 15.23'
+    # Without time :
+    '%d-%m-%Y', '%d-%m-%y', '%Y-%m-%d',         # '20-01-2009', '20-01-09', '2009-01-20'
+    # '%d %b %Y', '%d %b %y',                     # '20 jan 2009', '20 jan 09'
+    # '%d %B %Y', '%d %B %y',                     # '20 januari 2009', '20 januari 2009'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/nn/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/nn/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,5205 @@
+# translation of django.po to norwegian nynorsk
+# Copyright (C) 2005 and beyond
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-28 17:42+0200\n"
+"PO-Revision-Date: 2010-03-04 12:13+0200\n"
+"Last-Translator: Håvard Grimelid\n"
+"Language-Team: Norsk nynorsk <nn@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: conf/global_settings.py:44
+msgid "Arabic"
+msgstr "Arabisk"
+
+#: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "Bulgarsk"
+
+#: conf/global_settings.py:46
+msgid "Bengali"
+msgstr "Bengalsk"
+
+#: conf/global_settings.py:47
+#, fuzzy
+msgid "Bosnian"
+msgstr "Estisk"
+
+#: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "Katalansk"
+
+#: conf/global_settings.py:49
+msgid "Czech"
+msgstr "Tsjekkisk"
+
+#: conf/global_settings.py:50
+msgid "Welsh"
+msgstr "Walisisk"
+
+#: conf/global_settings.py:51
+msgid "Danish"
+msgstr "Dansk"
+
+#: conf/global_settings.py:52
+msgid "German"
+msgstr "Tysk"
+
+#: conf/global_settings.py:53
+msgid "Greek"
+msgstr "Gresk"
+
+#: conf/global_settings.py:54
+msgid "English"
+msgstr "Engelsk"
+
+#: conf/global_settings.py:55
+msgid "Spanish"
+msgstr "Spansk"
+
+#: conf/global_settings.py:56
+msgid "Argentinean Spanish"
+msgstr "Argentinsk spansk"
+
+#: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "Estisk"
+
+#: conf/global_settings.py:58
+msgid "Basque"
+msgstr "Baskisk"
+
+#: conf/global_settings.py:59
+msgid "Persian"
+msgstr "Persisk"
+
+#: conf/global_settings.py:60
+msgid "Finnish"
+msgstr "Finsk"
+
+#: conf/global_settings.py:61
+msgid "French"
+msgstr "Fransk"
+
+#: conf/global_settings.py:62
+#, fuzzy
+msgid "Frisian"
+msgstr "Friesland"
+
+#: conf/global_settings.py:63
+msgid "Irish"
+msgstr "Irsk"
+
+#: conf/global_settings.py:64
+msgid "Galician"
+msgstr "Galisisk"
+
+#: conf/global_settings.py:65
+msgid "Hebrew"
+msgstr "Hebraisk"
+
+#: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "Hindi"
+
+#: conf/global_settings.py:67
+msgid "Croatian"
+msgstr "Kroatisk"
+
+#: conf/global_settings.py:68
+msgid "Hungarian"
+msgstr "Ungarsk"
+
+#: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "Islandsk"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "Italiensk"
+
+#: conf/global_settings.py:71
+msgid "Japanese"
+msgstr "Japansk"
+
+#: conf/global_settings.py:72
+msgid "Georgian"
+msgstr "Georgisk"
+
+#: conf/global_settings.py:73
+msgid "Khmer"
+msgstr "Khmer"
+
+#: conf/global_settings.py:74
+msgid "Kannada"
+msgstr "Kannada"
+
+#: conf/global_settings.py:75
+msgid "Korean"
+msgstr "Koreansk"
+
+#: conf/global_settings.py:76
+msgid "Lithuanian"
+msgstr "Litauisk"
+
+#: conf/global_settings.py:77
+msgid "Latvian"
+msgstr "Latvisk"
+
+#: conf/global_settings.py:78
+msgid "Macedonian"
+msgstr "Makedonsk"
+
+#: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "Nederlandsk"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "Norsk"
+
+#: conf/global_settings.py:81
+msgid "Polish"
+msgstr "Polsk"
+
+#: conf/global_settings.py:82
+msgid "Portuguese"
+msgstr "Portugisisk"
+
+#: conf/global_settings.py:83
+msgid "Brazilian Portuguese"
+msgstr "Brasiliansk portugisisk"
+
+#: conf/global_settings.py:84
+msgid "Romanian"
+msgstr "Rumensk"
+
+#: conf/global_settings.py:85
+msgid "Russian"
+msgstr "Russisk"
+
+#: conf/global_settings.py:86
+msgid "Slovak"
+msgstr "Slovakisk"
+
+#: conf/global_settings.py:87
+msgid "Slovenian"
+msgstr "Slovensk"
+
+#: conf/global_settings.py:88
+#, fuzzy
+msgid "Albanian"
+msgstr "Alicante"
+
+#: conf/global_settings.py:89
+msgid "Serbian"
+msgstr "Serbisk"
+
+#: conf/global_settings.py:90
+#, fuzzy
+msgid "Serbian Latin"
+msgstr "Serbisk"
+
+#: conf/global_settings.py:91
+msgid "Swedish"
+msgstr "Svensk"
+
+#: conf/global_settings.py:92
+msgid "Tamil"
+msgstr "Tamil"
+
+#: conf/global_settings.py:93
+msgid "Telugu"
+msgstr "Telugu"
+
+#: conf/global_settings.py:94
+msgid "Thai"
+msgstr "Thai"
+
+#: conf/global_settings.py:95
+msgid "Turkish"
+msgstr "Tyrkisk"
+
+#: conf/global_settings.py:96
+msgid "Ukrainian"
+msgstr "Ukrainsk"
+
+#: conf/global_settings.py:97
+#, fuzzy
+msgid "Vietnamese"
+msgstr "Wien"
+
+#: conf/global_settings.py:98
+msgid "Simplified Chinese"
+msgstr "Simplifisert kinesisk"
+
+#: conf/global_settings.py:99
+msgid "Traditional Chinese"
+msgstr "Tradisjonell kinesisk"
+
+#: contrib/admin/actions.py:52
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr "Sletta %(count)d %(items)s."
+
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
+msgid "Are you sure?"
+msgstr "Er du sikker?"
+
+#: contrib/admin/actions.py:77
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr "Slett valgte %(verbose_name_plural)s"
+
+#: contrib/admin/filterspecs.py:44
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+"<h3>Etter %s:</h3>\n"
+"<ul>\n"
+
+#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
+msgid "All"
+msgstr "Alle"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Any date"
+msgstr "Når som helst"
+
+#: contrib/admin/filterspecs.py:114
+msgid "Today"
+msgstr "I dag"
+
+#: contrib/admin/filterspecs.py:117
+msgid "Past 7 days"
+msgstr "Siste sju dager"
+
+#: contrib/admin/filterspecs.py:119
+msgid "This month"
+msgstr "Denne månaden"
+
+#: contrib/admin/filterspecs.py:121
+msgid "This year"
+msgstr "I år"
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+msgid "Yes"
+msgstr "Ja"
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+msgid "No"
+msgstr "Nei"
+
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
+msgid "Unknown"
+msgstr "Ukjend"
+
+#: contrib/admin/helpers.py:20
+msgid "Action:"
+msgstr "Handling:"
+
+#: contrib/admin/models.py:19
+msgid "action time"
+msgstr "tid for handling"
+
+#: contrib/admin/models.py:22
+msgid "object id"
+msgstr "objekt-ID"
+
+#: contrib/admin/models.py:23
+msgid "object repr"
+msgstr "objekt repr"
+
+#: contrib/admin/models.py:24
+msgid "action flag"
+msgstr "handlingsflagg"
+
+#: contrib/admin/models.py:25
+msgid "change message"
+msgstr "endre melding"
+
+#: contrib/admin/models.py:28
+msgid "log entry"
+msgstr "logginnlegg"
+
+#: contrib/admin/models.py:29
+msgid "log entries"
+msgstr "logginnlegg"
+
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
+msgid "None"
+msgstr "Ingen"
+
+#: contrib/admin/options.py:563
+#, python-format
+msgid "Changed %s."
+msgstr "Endra %s."
+
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:573
+msgid "and"
+msgstr "og"
+
+#: contrib/admin/options.py:568
+#, python-format
+msgid "Added %(name)s \"%(object)s\"."
+msgstr "Oppretta %(name)s \"%(object)s\"."
+
+#: contrib/admin/options.py:572
+#, python-format
+msgid "Changed %(list)s for %(name)s \"%(object)s\"."
+msgstr "Endra %(list)s for %(name)s \"%(object)s\"."
+
+#: contrib/admin/options.py:577
+#, python-format
+msgid "Deleted %(name)s \"%(object)s\"."
+msgstr "Sletta %(name)s \"%(object)s\"."
+
+#: contrib/admin/options.py:581
+msgid "No fields changed."
+msgstr "Ingen felt endra."
+
+#: contrib/admin/options.py:647
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "%(name)s \"%(obj)s\" vart oppretta."
+
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
+msgid "You may edit it again below."
+msgstr "Du kan redigere vidare nedanfor."
+
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
+#, python-format
+msgid "You may add another %s below."
+msgstr "Du kan opprette ny %s nedanfor."
+
+#: contrib/admin/options.py:682
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "%(name)s \"%(obj)s\" vart endra."
+
+#: contrib/admin/options.py:690
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "%(name)s \"%(obj)s\" vart endra Du kan redigere vidare nedanfor."
+
+#: contrib/admin/options.py:744
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: contrib/admin/options.py:762
+#, fuzzy
+msgid "No action selected."
+msgstr "tid for handling"
+
+#: contrib/admin/options.py:842
+#, python-format
+msgid "Add %s"
+msgstr "Opprett %s"
+
+#: contrib/admin/options.py:868 contrib/admin/options.py:1080
+#, python-format
+msgid "%(name)s object with primary key %(key)r does not exist."
+msgstr "%(name)s-objekt med primærnøkkelen %(key)r finst ikkje."
+
+#: contrib/admin/options.py:933
+#, python-format
+msgid "Change %s"
+msgstr "Rediger %s"
+
+#: contrib/admin/options.py:978
+msgid "Database error"
+msgstr "Databasefeil"
+
+#: contrib/admin/options.py:1014
+#, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] "%(count)s %(name)s vart endra."
+msgstr[1] "%(count)s %(name)s vart endra."
+
+#: contrib/admin/options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/options.py:1046
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr ""
+
+#: contrib/admin/options.py:1093
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "%(name)s \"%(obj)s\" vart sletta."
+
+#: contrib/admin/options.py:1130
+#, python-format
+msgid "Change history: %s"
+msgstr "Endringshistorikk: %s"
+
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+"Gje korrekt brukarnamn og passord. Merk at det er forskjell på små og store "
+"bokstavar."
+
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
+msgid "Please log in again, because your session has expired."
+msgstr "Økta har tidsavbrot, logg inn att."
+
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+"Det ser ut til at nettlesaren din ikkje støttar informasjonskapslar "
+"(cookies). Konfigurer nettlesaren din og prøv omatt."
+
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
+#: contrib/admin/views/decorators.py:66
+msgid "Usernames cannot contain the '@' character."
+msgstr "Brukarnamnet kan ikkje innehalde teiknet '@'."
+
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr "E-postadressa er ikkje brukarnamnet ditt, prøv '%s' istadenfor."
+
+#: contrib/admin/sites.py:393
+msgid "Site administration"
+msgstr "Nettstadsadministrasjon"
+
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/templates/registration/password_reset_complete.html:14
+#: contrib/admin/views/decorators.py:20
+msgid "Log in"
+msgstr "Logg inn"
+
+#: contrib/admin/sites.py:452
+#, python-format
+msgid "%s administration"
+msgstr "%s-administrasjon"
+
+#: contrib/admin/widgets.py:75
+msgid "Date:"
+msgstr "Dato:"
+
+#: contrib/admin/widgets.py:75
+msgid "Time:"
+msgstr "Tid:"
+
+#: contrib/admin/widgets.py:99
+msgid "Currently:"
+msgstr "No:"
+
+#: contrib/admin/widgets.py:99
+msgid "Change:"
+msgstr "Endre:"
+
+#: contrib/admin/widgets.py:129
+msgid "Lookup"
+msgstr "Oppslag"
+
+#: contrib/admin/widgets.py:244
+msgid "Add Another"
+msgstr "Legg til ny"
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Fann ikkje sida"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Sida du spør etter finst ikkje."
+
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/app_index.html:8
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/object_history.html:6
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Home"
+msgstr "Heim"
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Tenarfeil"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Tenarfeil (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Tenarfeil <em>(500)</em>"
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"Det har oppstått ein feil. Feilen er rapportert til administrator via e-"
+"post, og vil bli fiksa snart. "
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr "Utfør den valde handlinga"
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr "Gå"
+
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr ""
+
+#: contrib/admin/templates/admin/app_index.html:10
+#: contrib/admin/templates/admin/index.html:19
+#, python-format
+msgid "%(name)s"
+msgstr "%(name)s"
+
+#: contrib/admin/templates/admin/base.html:28
+msgid "Welcome,"
+msgstr "Velkommen,"
+
+#: contrib/admin/templates/admin/base.html:33
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
+msgstr "Dokumentasjon"
+
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Change password"
+msgstr "Endre passord"
+
+#: contrib/admin/templates/admin/base.html:48
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Log out"
+msgstr "Logg ut"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django administrasjonsside"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Django-administrasjon"
+
+#: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/index.html:29
+msgid "Add"
+msgstr "Opprett"
+
+#: contrib/admin/templates/admin/change_form.html:28
+#: contrib/admin/templates/admin/object_history.html:10
+msgid "History"
+msgstr "Historikk"
+
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
+msgid "View on site"
+msgstr "Vis på nettstad"
+
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Korriger feilen under."
+msgstr[1] "Korriger feila under."
+
+#: contrib/admin/templates/admin/change_list.html:63
+#, python-format
+msgid "Add %(name)s"
+msgstr "Opprett %(name)s"
+
+#: contrib/admin/templates/admin/change_list.html:82
+msgid "Filter"
+msgstr "Filtrering"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:10
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
+msgid "Delete"
+msgstr "Slett"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:16
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+"Dersom du slettar %(object_name)s '%(escaped_object)s', vil også slette "
+"relaterte objekt, men du har ikkje løyve til å slette følgande objekttypar:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:23
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+"Er du sikker på at du vil slette %(object_name)s \"%(escaped_object)s\"? "
+"Alle dei følgjande relaterte objekta vil bli sletta:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
+msgid "Yes, I'm sure"
+msgstr "Ja, eg er sikker"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+msgid "Delete multiple objects"
+msgstr "Slett fleire objekt"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+"Sletting av %(object_name)s vil også slette relaterte objekt, men du har "
+"ikkje løyve til å slette følgjande objekttypar:"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, fuzzy, python-format
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Er du sikker på at du vil slette desse %(object_name)s-objekta? Dei "
+"følgjande objekta og deira relaterte objekt vil bli sletta:"
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr "Etter %(filter_title)s "
+
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr "Modellar tilgjengeleg i %(name)s-applikasjonen."
+
+#: contrib/admin/templates/admin/index.html:35
+msgid "Change"
+msgstr "Endre"
+
+#: contrib/admin/templates/admin/index.html:45
+msgid "You don't have permission to edit anything."
+msgstr "Du har ikkje løyve til å redigere noko."
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "Recent Actions"
+msgstr "Siste handlingar"
+
+#: contrib/admin/templates/admin/index.html:54
+msgid "My Actions"
+msgstr "Mine handlingar"
+
+#: contrib/admin/templates/admin/index.html:58
+msgid "None available"
+msgstr "Ingen tilgjengelege"
+
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr "Ukjent innhald"
+
+#: contrib/admin/templates/admin/invalid_setup.html:7
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+"Noko er gale med databaseinstallasjonen din. Syt for at databasetabellane er "
+"oppretta og at brukaren har dei naudsynte løyve."
+
+#: contrib/admin/templates/admin/login.html:19
+msgid "Username:"
+msgstr "Brukarnamn:"
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Password:"
+msgstr "Passord:"
+
+#: contrib/admin/templates/admin/object_history.html:22
+msgid "Date/time"
+msgstr "Dato/tid"
+
+#: contrib/admin/templates/admin/object_history.html:23
+msgid "User"
+msgstr "Brukar"
+
+#: contrib/admin/templates/admin/object_history.html:24
+msgid "Action"
+msgstr "Handling"
+
+#: contrib/admin/templates/admin/object_history.html:38
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Dette objektet har ingen endringshistorikk. Det var sannsynlegvis ikkje "
+"oppretta med administrasjonssida."
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Vis alle"
+
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Lagre"
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Search"
+msgstr "Søk"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "Ett resultat"
+msgstr[1] "%(counter)s resultat"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr "%(full_result_count)s totalt"
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save as new"
+msgstr "Lagre som ny"
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and add another"
+msgstr "Lagre og opprett ny"
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save and continue editing"
+msgstr "Lagre og hald fram å redigere"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+"Skriv først inn brukernamn og passord. Deretter vil du få høve til å endre "
+"fleire brukarinnstillingar."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr "Skriv inn eit nytt passord for brukaren <strong>%(username)s</strong>."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Passord"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Passord (gjenta)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Skriv inn det samme passordet som over, for verifisering."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, fuzzy, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "%(verbose_name)s vart sletta."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Fjern"
+
+#: contrib/admin/templates/admin/edit_inline/tabular.html:15
+msgid "Delete?"
+msgstr "Slette?"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Takk for at du brukte kvalitetstid på nettstaden i dag."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Logg inn att"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "Password change"
+msgstr "Endre passord"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Passord endra"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Passordet ditt vart endret."
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Av sikkerheitsgrunnar må du oppgje det gamle passordet ditt. Oppgje så det "
+"nye passordet ditt to gonger, slik at vi kan kontrollere at det er korrekt."
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Gammalt passord"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Nytt passord"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
+#: contrib/admin/templates/registration/password_reset_confirm.html:21
+msgid "Change my password"
+msgstr "Endre passord"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_form.html:10
+msgid "Password reset"
+msgstr "Nullstill passord"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:6
+#: contrib/admin/templates/registration/password_reset_complete.html:10
+msgid "Password reset complete"
+msgstr "Passord nullstilt"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:12
+msgid "Your password has been set.  You may go ahead and log in now."
+msgstr "Passordet ditt er sett. Du kan logge inn."
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+msgid "Password reset confirmation"
+msgstr "Stadfesting på nullstilt passord"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:12
+msgid "Enter new password"
+msgstr "Oppgje nytt passord"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:14
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+"Oppgje det nye passordet ditt to gonger, for å sikre at du oppgjev det "
+"korrekt."
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Nytt passord:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Gjenta nytt passord:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:26
+msgid "Password reset unsuccessful"
+msgstr "Passordet vart ikkje nullstilt"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:28
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used.  Please request a new password reset."
+msgstr ""
+"Nullstillingslinken er ugyldig, kanskje fordi den allereie har vore brukt. "
+"Nullstill passordet ditt på nytt."
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Passordet vart nullstilt"
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"Vi har sendt deg ein e-post med instruksjonar for nullstilling av passord. "
+"Du bør motta den om kort tid."
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr ""
+"Du har mottatt denne e-posten fordi du har bedt om nullstilling av passordet "
+"ditt"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "for kontoen din på %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+msgid "Please go to the following page and choose a new password:"
+msgstr "Gå til følgjande side og velg eit nytt passord:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:9
+msgid "Your username, in case you've forgotten:"
+msgstr "Brukarnamnet ditt, i tilfelle du har gløymt det:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Thanks for using our site!"
+msgstr "Takk for at du brukar sida vår!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "Helsing %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+"Har du gløymt passordet ditt? Oppgje e-postadressa di under, så sender vi "
+"deg ein e-post med instruksjonar for nullstilling av passord."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "E-postadresse:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Nullstill passordet"
+
+#: contrib/admin/templatetags/admin_list.py:239
+msgid "All dates"
+msgstr "Alle datoar"
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s"
+msgstr "Velg %s"
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s to change"
+msgstr "Velg %s du ønskar å redigere"
+
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
+msgid "site"
+msgstr "nettstad"
+
+#: contrib/admin/views/template.py:40
+msgid "template"
+msgstr "mal"
+
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
+msgid "tag:"
+msgstr "tag:"
+
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
+msgid "filter:"
+msgstr "filter:"
+
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
+msgid "view:"
+msgstr "view:"
+
+#: contrib/admindocs/views.py:190
+#, python-format
+msgid "App %r not found"
+msgstr "Kunne ikkje finne applikasjonen %r"
+
+#: contrib/admindocs/views.py:197
+#, python-format
+msgid "Model %(model_name)r not found in app %(app_label)r"
+msgstr ""
+"Kunne ikkje finne modellen %(model_name)r i applikasjonen %(app_label)r"
+
+#: contrib/admindocs/views.py:209
+#, python-format
+msgid "the related `%(app_label)s.%(data_type)s` object"
+msgstr "det relaterte `%(app_label)s.%(data_type)s`-objektet"
+
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
+msgid "model:"
+msgstr "modell:"
+
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
+#, python-format
+msgid "related `%(app_label)s.%(object_name)s` objects"
+msgstr "relaterte `%(app_label)s.%(object_name)s`-objekt"
+
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
+#, python-format
+msgid "all %s"
+msgstr "alle %s"
+
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
+#, python-format
+msgid "number of %s"
+msgstr "tal på %s"
+
+#: contrib/admindocs/views.py:271
+#, python-format
+msgid "Fields on %s objects"
+msgstr "Felt på %s-objekt"
+
+#: contrib/admindocs/views.py:361
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr "%s ser ikkje ut til å vere eit urlpattern-objekt"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr "Bokmerke"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
+msgid "Documentation bookmarklets"
+msgstr "Dokumentasjonsbokmerke"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+"\n"
+"<p class=\"help\">For å installere bokmerke, dra linken til verktøylinja\n"
+"for bokmerke, eller høgreklikk og legg til i bokmerke. No kan du du velge\n"
+"bokmerket frå kva som helst side på nettstaden. Nokre av desse\n"
+"bokmerka krevar at datamaskina du brukar er markert som \"intern\"\n"
+"(kontakt systemadministratoren din dersom du er usikker på om maskina di er "
+"\"intern\").</p>\n"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
+msgid "Documentation for this page"
+msgstr "Dokumentasjon for denne sida"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+"Hopp frå kva som helst side til dokumentasjonen for visingsfunksjonen som "
+"genererte sida."
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
+msgid "Show object ID"
+msgstr "Vis objekt-ID"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"Viser \"content-type\" og ein unik ID for sider som representerar eit enkelt "
+"objekt."
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
+msgid "Edit this object (current window)"
+msgstr "Endre dette objektet (noverande vindauge)"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr ""
+"Hoppar til administrasjonssida for sider som representerer eit enkelt objekt."
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
+msgid "Edit this object (new window)"
+msgstr "Endre dette objektet (nytt vindauge)"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
+msgid "As above, but opens the admin page in a new window."
+msgstr "Samme som over, men opnar administrasjonssida i eit nytt vindauge."
+
+#: contrib/auth/admin.py:29
+msgid "Personal info"
+msgstr "Personleg informasjon"
+
+#: contrib/auth/admin.py:30
+msgid "Permissions"
+msgstr "Løyve"
+
+#: contrib/auth/admin.py:31
+msgid "Important dates"
+msgstr "Viktige datoar"
+
+#: contrib/auth/admin.py:32
+msgid "Groups"
+msgstr "Grupper"
+
+#: contrib/auth/admin.py:114
+msgid "Password changed successfully."
+msgstr "Passordet er endra."
+
+#: contrib/auth/admin.py:124
+#, python-format
+msgid "Change password: %s"
+msgstr "Endre passord: %s"
+
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Brukarnamn"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+#, fuzzy
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr ""
+"Nødvendig. 30 teikn eller færre. Berre alfanumeriske tegn (bokstavar, tall "
+"og understrekar)."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+#, fuzzy
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Feltet kan berre innehalde bokstavar, nummer og understrekar."
+
+#: contrib/auth/forms.py:18
+msgid "Password confirmation"
+msgstr "Stadfesting av passord"
+
+#: contrib/auth/forms.py:31
+msgid "A user with that username already exists."
+msgstr "Det eksisterar allereie ein brukar med dette brukernamnet."
+
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
+msgid "The two password fields didn't match."
+msgstr "Dei to passordfelta er ikkje like."
+
+#: contrib/auth/forms.py:83
+msgid "This account is inactive."
+msgstr "Denne kontoen er inaktiv."
+
+#: contrib/auth/forms.py:88
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"Nettlesaren din ser ikkje ut til å støtte informasjonskapslar (cookies). "
+"Informasjonskapslar er nødvendige for å logge inn."
+
+#: contrib/auth/forms.py:101
+msgid "E-mail"
+msgstr "E-post"
+
+#: contrib/auth/forms.py:110
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Den oppgitte e-postadressa er ikkje registrert hos oss. Er du sikker på at "
+"du er registrert?"
+
+#: contrib/auth/forms.py:136
+#, python-format
+msgid "Password reset on %s"
+msgstr "Nullstilling av passord på %s"
+
+#: contrib/auth/forms.py:145
+msgid "New password confirmation"
+msgstr "Stadfest nytt passord"
+
+#: contrib/auth/forms.py:178
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "Det gamle passordet er feil. Prøv omatt."
+
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
+msgid "name"
+msgstr "namn"
+
+#: contrib/auth/models.py:68
+msgid "codename"
+msgstr "kodenamn"
+
+#: contrib/auth/models.py:72
+msgid "permission"
+msgstr "løyve"
+
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
+msgid "permissions"
+msgstr "løyve"
+
+#: contrib/auth/models.py:98
+msgid "group"
+msgstr "gruppe"
+
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
+msgid "groups"
+msgstr "grupper"
+
+#: contrib/auth/models.py:196
+msgid "username"
+msgstr "brukarnamn"
+
+#: contrib/auth/models.py:196
+#, fuzzy
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Nødvendig. 30 teikn eller færre. Berre alfanumeriske tegn (bokstavar, tall "
+"og understrekar)."
+
+#: contrib/auth/models.py:197
+msgid "first name"
+msgstr "fornamn"
+
+#: contrib/auth/models.py:198
+msgid "last name"
+msgstr "etternamn"
+
+#: contrib/auth/models.py:199
+msgid "e-mail address"
+msgstr "e-postadresse"
+
+#: contrib/auth/models.py:200
+msgid "password"
+msgstr "passord"
+
+#: contrib/auth/models.py:200
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+"Bruk '[algo]$[salt]$[hexdigest]' eller <a href=\"password/\">endre passord-"
+"skjemaet</a>."
+
+#: contrib/auth/models.py:201
+msgid "staff status"
+msgstr "administrasjonsstatus"
+
+#: contrib/auth/models.py:201
+msgid "Designates whether the user can log into this admin site."
+msgstr "Angir at brukaren kan logge inn på denne administrasjonssida."
+
+#: contrib/auth/models.py:202
+msgid "active"
+msgstr "aktiv"
+
+#: contrib/auth/models.py:202
+msgid ""
+"Designates whether this user should be treated as active. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Angir at denne brukaren er aktiv. Avmerk denne i staden for å slette kontoen."
+
+#: contrib/auth/models.py:203
+msgid "superuser status"
+msgstr "superbrukar"
+
+#: contrib/auth/models.py:203
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr "Angir at denne brukaren har alle løyve utan å eksplisitt sette dei."
+
+#: contrib/auth/models.py:204
+msgid "last login"
+msgstr "siste innlogging"
+
+#: contrib/auth/models.py:205
+msgid "date joined"
+msgstr "registrert"
+
+#: contrib/auth/models.py:207
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"I tillegg til dei løyva som vert angitt manuelt, får brukaren òg løyve til "
+"gruppene han/hon er med i."
+
+#: contrib/auth/models.py:208
+msgid "user permissions"
+msgstr "Brukerløyve"
+
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
+msgid "user"
+msgstr "brukar"
+
+#: contrib/auth/models.py:213
+msgid "users"
+msgstr "brukarar"
+
+#: contrib/auth/models.py:394
+msgid "message"
+msgstr "melding"
+
+#: contrib/auth/views.py:79
+msgid "Logged out"
+msgstr "Logga ut"
+
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
+msgid "Enter a valid e-mail address."
+msgstr "Oppgje ei gyldig e-postadresse."
+
+#: contrib/comments/admin.py:12
+msgid "Content"
+msgstr "Innhald"
+
+#: contrib/comments/admin.py:15
+msgid "Metadata"
+msgstr "Metadata"
+
+#: contrib/comments/admin.py:40
+#, fuzzy
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "flagg"
+msgstr[1] "flagg"
+
+#: contrib/comments/admin.py:41
+#, fuzzy
+msgid "Flag selected comments"
+msgstr "Flagg denne kommentaren"
+
+#: contrib/comments/admin.py:45
+#, fuzzy
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "Godkjenn"
+msgstr[1] "Godkjenn"
+
+#: contrib/comments/admin.py:46
+#, fuzzy
+msgid "Approve selected comments"
+msgstr "Tillat ein kommentar"
+
+#: contrib/comments/admin.py:50
+#, fuzzy
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "er fjerna"
+msgstr[1] "er fjerna"
+
+#: contrib/comments/admin.py:51
+#, fuzzy
+msgid "Remove selected comments"
+msgstr "Fjern ein kommentar"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr "%(site_name)s - kommentarar"
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr "Siste kommentarar frå %(site_name)s"
+
+#: contrib/comments/forms.py:93
+msgid "Name"
+msgstr "Namn"
+
+#: contrib/comments/forms.py:94
+msgid "Email address"
+msgstr "E-postadresse"
+
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "Nettadresse"
+
+#: contrib/comments/forms.py:96
+msgid "Comment"
+msgstr "Kommentar"
+
+#: contrib/comments/forms.py:175
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Pass munnen din! Ordet %s er ikkje lovleg her."
+msgstr[1] "Pass munnen din! Orda %s er ikkje lovlege her."
+
+#: contrib/comments/forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr ""
+"Dersom du oppgjev noko i dette feltet, vil kommentaren bli behandla som spam"
+
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
+msgid "content type"
+msgstr "innhaldstype"
+
+#: contrib/comments/models.py:24
+msgid "object ID"
+msgstr "objekt-ID"
+
+#: contrib/comments/models.py:52
+msgid "user's name"
+msgstr "brukaren sitt namn"
+
+#: contrib/comments/models.py:53
+msgid "user's email address"
+msgstr "brukaren si e-postadresse"
+
+#: contrib/comments/models.py:54
+msgid "user's URL"
+msgstr "brukaren si nettadresse"
+
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
+msgid "comment"
+msgstr "kommentar"
+
+#: contrib/comments/models.py:59
+msgid "date/time submitted"
+msgstr "dato/tid for innsending"
+
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "IP-adresse"
+
+#: contrib/comments/models.py:61
+msgid "is public"
+msgstr "er tilgjengeleg for alle"
+
+#: contrib/comments/models.py:62
+msgid ""
+"Uncheck this box to make the comment effectively disappear from the site."
+msgstr "Avmerk denne boksen for å fjerne kommentaren frå sida."
+
+#: contrib/comments/models.py:64
+msgid "is removed"
+msgstr "er fjerna"
+
+#: contrib/comments/models.py:65
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+"Kryss av denne dersom kommentaren er upassande. Meldinga \"Denne kommentaren "
+"har blitt fjerna\" vil bli vist i staden."
+
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr "kommentarar"
+
+#: contrib/comments/models.py:119
+msgid ""
+"This comment was posted by an authenticated user and thus the name is read-"
+"only."
+msgstr ""
+"Denne kommentaren er skriven av ein innlogga brukar og namnnet kan difor "
+"ikkje endrast."
+
+#: contrib/comments/models.py:128
+msgid ""
+"This comment was posted by an authenticated user and thus the email is read-"
+"only."
+msgstr ""
+"Denne kommentaren er skriven av ein innlogga brukar og e-postadressa kan "
+"derfor ikkje endrast."
+
+#: contrib/comments/models.py:153
+#, python-format
+msgid ""
+"Posted by %(user)s at %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+msgstr ""
+"Skrive av %(user)s, %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr "flagg"
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr "dato"
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr "kommentarflagg"
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr "kommentarflagg"
+
+#: contrib/comments/templates/comments/approve.html:4
+msgid "Approve a comment"
+msgstr "Tillat ein kommentar"
+
+#: contrib/comments/templates/comments/approve.html:7
+msgid "Really make this comment public?"
+msgstr "Gjere denne kommentaren offentleg?"
+
+#: contrib/comments/templates/comments/approve.html:12
+msgid "Approve"
+msgstr "Godkjenn"
+
+#: contrib/comments/templates/comments/approved.html:4
+msgid "Thanks for approving"
+msgstr "Takk for godkjenning"
+
+#: contrib/comments/templates/comments/approved.html:7
+#: contrib/comments/templates/comments/deleted.html:7
+#: contrib/comments/templates/comments/flagged.html:7
+msgid ""
+"Thanks for taking the time to improve the quality of discussion on our site"
+msgstr ""
+"Takk for at du tok deg tid til å forbetre kvaliteten på diskusjonen på sida "
+"vår"
+
+#: contrib/comments/templates/comments/delete.html:4
+msgid "Remove a comment"
+msgstr "Fjern ein kommentar"
+
+#: contrib/comments/templates/comments/delete.html:7
+msgid "Really remove this comment?"
+msgstr "Fjerne denne kommentaren?"
+
+#: contrib/comments/templates/comments/deleted.html:4
+msgid "Thanks for removing"
+msgstr "Takk for fjerninga"
+
+#: contrib/comments/templates/comments/flag.html:4
+msgid "Flag this comment"
+msgstr "Flagg denne kommentaren"
+
+#: contrib/comments/templates/comments/flag.html:7
+msgid "Really flag this comment?"
+msgstr "Flagg denne kommentaren?"
+
+#: contrib/comments/templates/comments/flag.html:12
+msgid "Flag"
+msgstr "Flagg"
+
+#: contrib/comments/templates/comments/flagged.html:4
+msgid "Thanks for flagging"
+msgstr "Takk for flagging"
+
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
+msgid "Post"
+msgstr "Publiser"
+
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
+msgid "Preview"
+msgstr "Førehandsvising"
+
+#: contrib/comments/templates/comments/posted.html:4
+msgid "Thanks for commenting"
+msgstr "Takk for kommentaren"
+
+#: contrib/comments/templates/comments/posted.html:7
+msgid "Thank you for your comment"
+msgstr "Takk for kommentaren din"
+
+#: contrib/comments/templates/comments/preview.html:4
+#: contrib/comments/templates/comments/preview.html:13
+msgid "Preview your comment"
+msgstr "Førehandsvis kommentaren din"
+
+#: contrib/comments/templates/comments/preview.html:11
+msgid "Please correct the error below"
+msgid_plural "Please correct the errors below"
+msgstr[0] "Korriger feilen under"
+msgstr[1] "Korriger feila under"
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "Post your comment"
+msgstr "Publiser kommentaren din"
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "or make changes"
+msgstr "eller gjer endringar"
+
+#: contrib/contenttypes/models.py:77
+msgid "python model class name"
+msgstr "python-modell klassenamn"
+
+#: contrib/contenttypes/models.py:82
+msgid "content types"
+msgstr "innhaldstypar"
+
+#: contrib/flatpages/admin.py:9
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Eksempel: '/om/kontakt/'. Kontroller at det er ein skråstrek framfor og bak."
+
+#: contrib/flatpages/admin.py:11
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Dette feltet kan berre innehalde bokstavar, nummer, understrekar, "
+"bindestrekar eller skråstrekar."
+
+#: contrib/flatpages/admin.py:22
+msgid "Advanced options"
+msgstr "Avanserte innstillingar"
+
+#: contrib/flatpages/models.py:8
+msgid "title"
+msgstr "tittel"
+
+#: contrib/flatpages/models.py:9
+msgid "content"
+msgstr "innhald"
+
+#: contrib/flatpages/models.py:10
+msgid "enable comments"
+msgstr "tillat kommentarer"
+
+#: contrib/flatpages/models.py:11
+msgid "template name"
+msgstr "malnamn"
+
+#: contrib/flatpages/models.py:12
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Døme: 'flatpages/kontakt_side.html'. Dersom denne ikkje er gjeve, vil "
+"'flatpages/default.html' bli brukt."
+
+#: contrib/flatpages/models.py:13
+msgid "registration required"
+msgstr "krevar registrering"
+
+#: contrib/flatpages/models.py:13
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Dersom denne er kryssa av, kan berre innlogga brukarar sjå sida."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr "flatside"
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr "flatsider"
+
+#: contrib/formtools/wizard.py:140
+msgid ""
+"We apologize, but your form has expired. Please continue filling out the "
+"form from this page."
+msgstr ""
+"Du har brukt for lang tid på å fylle ut skjemaet. Fyll ut skjemaet frå denne "
+"sida."
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:270
+#, fuzzy
+msgid "Point"
+msgstr "Publiser"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr ""
+
+#: contrib/gis/forms/fields.py:17
+msgid "No geometry value provided."
+msgstr "Ingen geometriverdi oppgjeve."
+
+#: contrib/gis/forms/fields.py:18
+msgid "Invalid geometry value."
+msgstr "Ugyldig geometriverdi"
+
+#: contrib/gis/forms/fields.py:19
+msgid "Invalid geometry type."
+msgstr "Ugyldig geometritype"
+
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+"Det oppstod ein feil ved transformering av geometrien til SRID frå "
+"geometrifeltet."
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "th"
+msgstr "."
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "st"
+msgstr "."
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "nd"
+msgstr "."
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "rd"
+msgstr "."
+
+#: contrib/humanize/templatetags/humanize.py:51
+#, python-format
+msgid "%(value).1f million"
+msgid_plural "%(value).1f million"
+msgstr[0] "%(value).1f million"
+msgstr[1] "%(value).1f millionar"
+
+#: contrib/humanize/templatetags/humanize.py:54
+#, python-format
+msgid "%(value).1f billion"
+msgid_plural "%(value).1f billion"
+msgstr[0] "%(value).1f milliard"
+msgstr[1] "%(value).1f milliardar"
+
+#: contrib/humanize/templatetags/humanize.py:57
+#, python-format
+msgid "%(value).1f trillion"
+msgid_plural "%(value).1f trillion"
+msgstr[0] "%(value).1f billion"
+msgstr[1] "%(value).1f billionar"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "one"
+msgstr "éin"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "two"
+msgstr "to"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "three"
+msgstr "tre"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "four"
+msgstr "fire"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "five"
+msgstr "fem"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "six"
+msgstr "seks"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "seven"
+msgstr "sju"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "eight"
+msgstr "åtte"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "nine"
+msgstr "ni"
+
+#: contrib/humanize/templatetags/humanize.py:93
+msgid "today"
+msgstr "i dag"
+
+#: contrib/humanize/templatetags/humanize.py:95
+msgid "tomorrow"
+msgstr "i morgon"
+
+#: contrib/humanize/templatetags/humanize.py:97
+msgid "yesterday"
+msgstr "i går"
+
+#: contrib/localflavor/ar/forms.py:28
+msgid "Enter a postal code in the format NNNN or ANNNNAAA."
+msgstr "Oppgje eit postnummer på forma NNNN eller ANNNNAAA."
+
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
+msgid "This field requires only numbers."
+msgstr "Feltet krevar berre tall."
+
+#: contrib/localflavor/ar/forms.py:51
+msgid "This field requires 7 or 8 digits."
+msgstr "Feltet krevar 7 eller 8 siffer."
+
+#: contrib/localflavor/ar/forms.py:80
+msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
+msgstr "Oppgje gyldig CUIT på forma XX-XXXXXXXX-X or XXXXXXXXXXXX."
+
+#: contrib/localflavor/ar/forms.py:81
+msgid "Invalid CUIT."
+msgstr "Ugyldig CUIT."
+
+#: contrib/localflavor/at/at_states.py:5
+msgid "Burgenland"
+msgstr "Burgenland"
+
+#: contrib/localflavor/at/at_states.py:6
+msgid "Carinthia"
+msgstr "Carinthia"
+
+#: contrib/localflavor/at/at_states.py:7
+msgid "Lower Austria"
+msgstr "Niederösterreich"
+
+#: contrib/localflavor/at/at_states.py:8
+msgid "Upper Austria"
+msgstr "Oberösterreich"
+
+#: contrib/localflavor/at/at_states.py:9
+msgid "Salzburg"
+msgstr "Salzburg"
+
+#: contrib/localflavor/at/at_states.py:10
+msgid "Styria"
+msgstr "Steiermark"
+
+#: contrib/localflavor/at/at_states.py:11
+msgid "Tyrol"
+msgstr "Tirol"
+
+#: contrib/localflavor/at/at_states.py:12
+msgid "Vorarlberg"
+msgstr "Vorarlberg"
+
+#: contrib/localflavor/at/at_states.py:13
+msgid "Vienna"
+msgstr "Wien"
+
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
+msgid "Enter a zip code in the format XXXX."
+msgstr "Oppgje eit postnummer på forma XXXX."
+
+#: contrib/localflavor/at/forms.py:48
+msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
+msgstr "Oppgje eit gyldig Østerrisk personnummer på forma XXXX XXXXXX."
+
+#: contrib/localflavor/au/forms.py:17
+msgid "Enter a 4 digit post code."
+msgstr "Oppgje eit firesifra postnummer."
+
+#: contrib/localflavor/br/forms.py:22
+msgid "Enter a zip code in the format XXXXX-XXX."
+msgstr "Oppgje eit postnummer på forma XXXXX-XXX."
+
+#: contrib/localflavor/br/forms.py:31
+msgid "Phone numbers must be in XX-XXXX-XXXX format."
+msgstr "Telefonnummeret må vere på forma XX-XXXX-XXXX."
+
+#: contrib/localflavor/br/forms.py:59
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
+msgstr ""
+"Velg ein gyldig brasiliansk stat. Den staten er ikkje eit av dei "
+"tilgjengelege valga."
+
+#: contrib/localflavor/br/forms.py:95
+msgid "Invalid CPF number."
+msgstr "Ugyldig CPF-nummer."
+
+#: contrib/localflavor/br/forms.py:96
+msgid "This field requires at most 11 digits or 14 characters."
+msgstr "Feltet krevar maksimum 11 eller 14 siffer."
+
+#: contrib/localflavor/br/forms.py:135
+msgid "Invalid CNPJ number."
+msgstr "Ugyldig CNPJ-nummer."
+
+#: contrib/localflavor/br/forms.py:137
+msgid "This field requires at least 14 digits"
+msgstr "Feltet krevar minst 14 siffer."
+
+#: contrib/localflavor/ca/forms.py:25
+msgid "Enter a postal code in the format XXX XXX."
+msgstr "Oppgje eit postnummer på forma XXX XXX."
+
+#: contrib/localflavor/ca/forms.py:96
+msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
+msgstr "Oppgje eit gyldig kanadisk personnummer på forma XXX-XXX-XXX."
+
+#: contrib/localflavor/ch/ch_states.py:5
+msgid "Aargau"
+msgstr "Aargau"
+
+#: contrib/localflavor/ch/ch_states.py:6
+msgid "Appenzell Innerrhoden"
+msgstr "Appenzell Innerrhoden"
+
+#: contrib/localflavor/ch/ch_states.py:7
+msgid "Appenzell Ausserrhoden"
+msgstr "Appenzell Ausserrhoden"
+
+#: contrib/localflavor/ch/ch_states.py:8
+msgid "Basel-Stadt"
+msgstr "Basel-Stadt"
+
+#: contrib/localflavor/ch/ch_states.py:9
+msgid "Basel-Land"
+msgstr "Basel-Landschaft"
+
+#: contrib/localflavor/ch/ch_states.py:10
+msgid "Berne"
+msgstr "Bern"
+
+#: contrib/localflavor/ch/ch_states.py:11
+msgid "Fribourg"
+msgstr "Fribourg"
+
+#: contrib/localflavor/ch/ch_states.py:12
+msgid "Geneva"
+msgstr "Genève"
+
+#: contrib/localflavor/ch/ch_states.py:13
+msgid "Glarus"
+msgstr "Glarus"
+
+#: contrib/localflavor/ch/ch_states.py:14
+msgid "Graubuenden"
+msgstr "Graubünden"
+
+#: contrib/localflavor/ch/ch_states.py:15
+msgid "Jura"
+msgstr "Jura"
+
+#: contrib/localflavor/ch/ch_states.py:16
+msgid "Lucerne"
+msgstr "Luzern"
+
+#: contrib/localflavor/ch/ch_states.py:17
+msgid "Neuchatel"
+msgstr "Neuchâtel"
+
+#: contrib/localflavor/ch/ch_states.py:18
+msgid "Nidwalden"
+msgstr "Nidwalden"
+
+#: contrib/localflavor/ch/ch_states.py:19
+msgid "Obwalden"
+msgstr "Obwalden"
+
+#: contrib/localflavor/ch/ch_states.py:20
+msgid "Schaffhausen"
+msgstr "Schaffhausen"
+
+#: contrib/localflavor/ch/ch_states.py:21
+msgid "Schwyz"
+msgstr "Schwyz"
+
+#: contrib/localflavor/ch/ch_states.py:22
+msgid "Solothurn"
+msgstr "Solothurn"
+
+#: contrib/localflavor/ch/ch_states.py:23
+msgid "St. Gallen"
+msgstr "St. Gallen"
+
+#: contrib/localflavor/ch/ch_states.py:24
+msgid "Thurgau"
+msgstr "Thurgau"
+
+#: contrib/localflavor/ch/ch_states.py:25
+msgid "Ticino"
+msgstr "Ticino"
+
+#: contrib/localflavor/ch/ch_states.py:26
+msgid "Uri"
+msgstr "Uri"
+
+#: contrib/localflavor/ch/ch_states.py:27
+msgid "Valais"
+msgstr "Wallis"
+
+#: contrib/localflavor/ch/ch_states.py:28
+msgid "Vaud"
+msgstr "Vaud"
+
+#: contrib/localflavor/ch/ch_states.py:29
+msgid "Zug"
+msgstr "Zug"
+
+#: contrib/localflavor/ch/ch_states.py:30
+msgid "Zurich"
+msgstr "Zürich"
+
+#: contrib/localflavor/ch/forms.py:65
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr ""
+"Oppgje eit gyldig sveitsisk identitets- eller passnummer på forma X1234567<0 "
+"eller 1234567890."
+
+#: contrib/localflavor/cl/forms.py:30
+msgid "Enter a valid Chilean RUT."
+msgstr "Oppgje eit gyldig chilensk RUT."
+
+#: contrib/localflavor/cl/forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr "Oppgje eit gyldig chilensk RUT på forma XX.XXX.XXX-X."
+
+#: contrib/localflavor/cl/forms.py:32
+msgid "The Chilean RUT is not valid."
+msgstr "Den chilenske RUT er ugyldig."
+
+#: contrib/localflavor/cz/cz_regions.py:8
+msgid "Prague"
+msgstr "Praha"
+
+#: contrib/localflavor/cz/cz_regions.py:9
+msgid "Central Bohemian Region"
+msgstr "Sentralbøhmen region"
+
+#: contrib/localflavor/cz/cz_regions.py:10
+msgid "South Bohemian Region"
+msgstr "Sydbøhmen region"
+
+#: contrib/localflavor/cz/cz_regions.py:11
+msgid "Pilsen Region"
+msgstr "Plzeň region"
+
+#: contrib/localflavor/cz/cz_regions.py:12
+msgid "Carlsbad Region"
+msgstr "Karlovy Vary region"
+
+#: contrib/localflavor/cz/cz_regions.py:13
+msgid "Usti Region"
+msgstr "Ústí nad Labem region"
+
+#: contrib/localflavor/cz/cz_regions.py:14
+msgid "Liberec Region"
+msgstr "Liberec region"
+
+#: contrib/localflavor/cz/cz_regions.py:15
+msgid "Hradec Region"
+msgstr "Hradec Králové region"
+
+#: contrib/localflavor/cz/cz_regions.py:16
+msgid "Pardubice Region"
+msgstr "Pardubice region"
+
+#: contrib/localflavor/cz/cz_regions.py:17
+msgid "Vysocina Region"
+msgstr "Žilina-regionen"
+
+#: contrib/localflavor/cz/cz_regions.py:18
+msgid "South Moravian Region"
+msgstr "Sydmähriske region"
+
+#: contrib/localflavor/cz/cz_regions.py:19
+msgid "Olomouc Region"
+msgstr "Olomouc region"
+
+#: contrib/localflavor/cz/cz_regions.py:20
+msgid "Zlin Region"
+msgstr "Zlín region"
+
+#: contrib/localflavor/cz/cz_regions.py:21
+msgid "Moravian-Silesian Region"
+msgstr "Mähren-Schlesien region"
+
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
+msgid "Enter a postal code in the format XXXXX or XXX XX."
+msgstr "Oppgje eit postnummer på forma XXXXX or XXX XX."
+
+#: contrib/localflavor/cz/forms.py:48
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Oppgje eit fødselsnummer på forma XXXXXX/XXXX eller XXXXXXXXXX."
+
+#: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:50
+msgid "Enter a valid birth number."
+msgstr "Oppgje eit gyldig fødselsnummer."
+
+#: contrib/localflavor/cz/forms.py:107
+msgid "Enter a valid IC number."
+msgstr "Oppgje eit gyldig IC-nummer."
+
+#: contrib/localflavor/de/de_states.py:5
+msgid "Baden-Wuerttemberg"
+msgstr "Baden-Württemberg"
+
+#: contrib/localflavor/de/de_states.py:6
+msgid "Bavaria"
+msgstr "Bayern"
+
+#: contrib/localflavor/de/de_states.py:7
+msgid "Berlin"
+msgstr "Berlin"
+
+#: contrib/localflavor/de/de_states.py:8
+msgid "Brandenburg"
+msgstr "Brandenburg"
+
+#: contrib/localflavor/de/de_states.py:9
+msgid "Bremen"
+msgstr "Bremen"
+
+#: contrib/localflavor/de/de_states.py:10
+msgid "Hamburg"
+msgstr "Hamburg"
+
+#: contrib/localflavor/de/de_states.py:11
+msgid "Hessen"
+msgstr "Hessen"
+
+#: contrib/localflavor/de/de_states.py:12
+msgid "Mecklenburg-Western Pomerania"
+msgstr "Mecklenburg-Vorpommern"
+
+#: contrib/localflavor/de/de_states.py:13
+msgid "Lower Saxony"
+msgstr "Niedersachsen"
+
+#: contrib/localflavor/de/de_states.py:14
+msgid "North Rhine-Westphalia"
+msgstr "Nordrhein-Westfalen"
+
+#: contrib/localflavor/de/de_states.py:15
+msgid "Rhineland-Palatinate"
+msgstr "Rheinland-Pfalz"
+
+#: contrib/localflavor/de/de_states.py:16
+msgid "Saarland"
+msgstr "Saarland"
+
+#: contrib/localflavor/de/de_states.py:17
+msgid "Saxony"
+msgstr "Sachsen"
+
+#: contrib/localflavor/de/de_states.py:18
+msgid "Saxony-Anhalt"
+msgstr "Sachsen-Anhalt"
+
+#: contrib/localflavor/de/de_states.py:19
+msgid "Schleswig-Holstein"
+msgstr "Schleswig-Holstein"
+
+#: contrib/localflavor/de/de_states.py:20
+msgid "Thuringia"
+msgstr "Thüringen"
+
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
+msgid "Enter a zip code in the format XXXXX."
+msgstr "Oppgje eit postnummer på forma XXXXX."
+
+#: contrib/localflavor/de/forms.py:42
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr ""
+"Oppgje eit gyldig tysk identitetsnummer på forma XXXXXXXXXXX-XXXXXXX-XXXXXXX-"
+"X."
+
+#: contrib/localflavor/es/es_provinces.py:5
+msgid "Arava"
+msgstr "Álava"
+
+#: contrib/localflavor/es/es_provinces.py:6
+msgid "Albacete"
+msgstr "Albacete"
+
+#: contrib/localflavor/es/es_provinces.py:7
+msgid "Alacant"
+msgstr "Alicante"
+
+#: contrib/localflavor/es/es_provinces.py:8
+msgid "Almeria"
+msgstr "Almería"
+
+#: contrib/localflavor/es/es_provinces.py:9
+msgid "Avila"
+msgstr "Ávila"
+
+#: contrib/localflavor/es/es_provinces.py:10
+msgid "Badajoz"
+msgstr "Badajoz"
+
+#: contrib/localflavor/es/es_provinces.py:11
+msgid "Illes Balears"
+msgstr "Balearane"
+
+#: contrib/localflavor/es/es_provinces.py:12
+msgid "Barcelona"
+msgstr "Barcelona"
+
+#: contrib/localflavor/es/es_provinces.py:13
+msgid "Burgos"
+msgstr "Burgos"
+
+#: contrib/localflavor/es/es_provinces.py:14
+msgid "Caceres"
+msgstr "Cáceres"
+
+#: contrib/localflavor/es/es_provinces.py:15
+msgid "Cadiz"
+msgstr "Cádiz"
+
+#: contrib/localflavor/es/es_provinces.py:16
+msgid "Castello"
+msgstr "Castellón"
+
+#: contrib/localflavor/es/es_provinces.py:17
+msgid "Ciudad Real"
+msgstr "Ciudad Real"
+
+#: contrib/localflavor/es/es_provinces.py:18
+msgid "Cordoba"
+msgstr "Córdoba"
+
+#: contrib/localflavor/es/es_provinces.py:19
+msgid "A Coruna"
+msgstr "A Coruna"
+
+#: contrib/localflavor/es/es_provinces.py:20
+msgid "Cuenca"
+msgstr "Cuenca"
+
+#: contrib/localflavor/es/es_provinces.py:21
+msgid "Girona"
+msgstr "Girona"
+
+#: contrib/localflavor/es/es_provinces.py:22
+msgid "Granada"
+msgstr "Granada"
+
+#: contrib/localflavor/es/es_provinces.py:23
+msgid "Guadalajara"
+msgstr "Guadalajara"
+
+#: contrib/localflavor/es/es_provinces.py:24
+msgid "Guipuzkoa"
+msgstr "Gipuzkoa"
+
+#: contrib/localflavor/es/es_provinces.py:25
+msgid "Huelva"
+msgstr "Huelva"
+
+#: contrib/localflavor/es/es_provinces.py:26
+msgid "Huesca"
+msgstr "Huesca"
+
+#: contrib/localflavor/es/es_provinces.py:27
+msgid "Jaen"
+msgstr "Jaén"
+
+#: contrib/localflavor/es/es_provinces.py:28
+msgid "Leon"
+msgstr "León"
+
+#: contrib/localflavor/es/es_provinces.py:29
+msgid "Lleida"
+msgstr "Lleida"
+
+#: contrib/localflavor/es/es_provinces.py:30
+#: contrib/localflavor/es/es_regions.py:17
+msgid "La Rioja"
+msgstr "La Rioja"
+
+#: contrib/localflavor/es/es_provinces.py:31
+msgid "Lugo"
+msgstr "Lugo"
+
+#: contrib/localflavor/es/es_provinces.py:32
+#: contrib/localflavor/es/es_regions.py:18
+msgid "Madrid"
+msgstr "Madrid"
+
+#: contrib/localflavor/es/es_provinces.py:33
+msgid "Malaga"
+msgstr "Málaga"
+
+#: contrib/localflavor/es/es_provinces.py:34
+msgid "Murcia"
+msgstr "Murcia"
+
+#: contrib/localflavor/es/es_provinces.py:35
+msgid "Navarre"
+msgstr "Navarra"
+
+#: contrib/localflavor/es/es_provinces.py:36
+msgid "Ourense"
+msgstr "Ourense"
+
+#: contrib/localflavor/es/es_provinces.py:37
+msgid "Asturias"
+msgstr "Asturias"
+
+#: contrib/localflavor/es/es_provinces.py:38
+msgid "Palencia"
+msgstr "Palencia"
+
+#: contrib/localflavor/es/es_provinces.py:39
+msgid "Las Palmas"
+msgstr "Las Palmas"
+
+#: contrib/localflavor/es/es_provinces.py:40
+msgid "Pontevedra"
+msgstr "Pontevedra"
+
+#: contrib/localflavor/es/es_provinces.py:41
+msgid "Salamanca"
+msgstr "Salamanca"
+
+#: contrib/localflavor/es/es_provinces.py:42
+msgid "Santa Cruz de Tenerife"
+msgstr "Santa Cruz de Tenerife"
+
+#: contrib/localflavor/es/es_provinces.py:43
+#: contrib/localflavor/es/es_regions.py:11
+msgid "Cantabria"
+msgstr "Cantabria"
+
+#: contrib/localflavor/es/es_provinces.py:44
+msgid "Segovia"
+msgstr "Segovia"
+
+#: contrib/localflavor/es/es_provinces.py:45
+msgid "Seville"
+msgstr "Sevilla"
+
+#: contrib/localflavor/es/es_provinces.py:46
+msgid "Soria"
+msgstr "Soria"
+
+#: contrib/localflavor/es/es_provinces.py:47
+msgid "Tarragona"
+msgstr "Tarragona"
+
+#: contrib/localflavor/es/es_provinces.py:48
+msgid "Teruel"
+msgstr "Teruel"
+
+#: contrib/localflavor/es/es_provinces.py:49
+msgid "Toledo"
+msgstr "Toledo"
+
+#: contrib/localflavor/es/es_provinces.py:50
+msgid "Valencia"
+msgstr "Valencia"
+
+#: contrib/localflavor/es/es_provinces.py:51
+msgid "Valladolid"
+msgstr "Valladolid"
+
+#: contrib/localflavor/es/es_provinces.py:52
+msgid "Bizkaia"
+msgstr "Bizkaia"
+
+#: contrib/localflavor/es/es_provinces.py:53
+msgid "Zamora"
+msgstr "Zamora"
+
+#: contrib/localflavor/es/es_provinces.py:54
+msgid "Zaragoza"
+msgstr "Zaragoza"
+
+#: contrib/localflavor/es/es_provinces.py:55
+msgid "Ceuta"
+msgstr "Ceuta"
+
+#: contrib/localflavor/es/es_provinces.py:56
+msgid "Melilla"
+msgstr "Melilla"
+
+#: contrib/localflavor/es/es_regions.py:5
+msgid "Andalusia"
+msgstr "Andalucía"
+
+#: contrib/localflavor/es/es_regions.py:6
+msgid "Aragon"
+msgstr "Aragón"
+
+#: contrib/localflavor/es/es_regions.py:7
+msgid "Principality of Asturias"
+msgstr "Asturias"
+
+#: contrib/localflavor/es/es_regions.py:8
+msgid "Balearic Islands"
+msgstr "Balearane"
+
+#: contrib/localflavor/es/es_regions.py:9
+msgid "Basque Country"
+msgstr "Baskarland"
+
+#: contrib/localflavor/es/es_regions.py:10
+msgid "Canary Islands"
+msgstr "Kanariøyene"
+
+#: contrib/localflavor/es/es_regions.py:12
+msgid "Castile-La Mancha"
+msgstr "Castilla-La Mancha"
+
+#: contrib/localflavor/es/es_regions.py:13
+msgid "Castile and Leon"
+msgstr "Castilla y León"
+
+#: contrib/localflavor/es/es_regions.py:14
+msgid "Catalonia"
+msgstr "Catalonia"
+
+#: contrib/localflavor/es/es_regions.py:15
+msgid "Extremadura"
+msgstr "Extremadura"
+
+#: contrib/localflavor/es/es_regions.py:16
+msgid "Galicia"
+msgstr "Galicia"
+
+#: contrib/localflavor/es/es_regions.py:19
+msgid "Region of Murcia"
+msgstr "Murcia"
+
+#: contrib/localflavor/es/es_regions.py:20
+msgid "Foral Community of Navarre"
+msgstr "Navarra"
+
+#: contrib/localflavor/es/es_regions.py:21
+msgid "Valencian Community"
+msgstr "Valenciana"
+
+#: contrib/localflavor/es/forms.py:20
+msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
+msgstr "Oppgje eit gyldig postnummer på forma 01XXX - 52XXX."
+
+#: contrib/localflavor/es/forms.py:40
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+"Oppgje eit gyldig telefonnummer på eit av følgjande format: 6XXXXXXXX, "
+"8XXXXXXXX eller 9XXXXXXXX."
+
+#: contrib/localflavor/es/forms.py:67
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr "Oppgje eit gyldig NIF, NIE eller CIF."
+
+#: contrib/localflavor/es/forms.py:68
+msgid "Please enter a valid NIF or NIE."
+msgstr "Oppgje eit gyldig NIF eller NIE."
+
+#: contrib/localflavor/es/forms.py:69
+msgid "Invalid checksum for NIF."
+msgstr "Ugyldig kontrollsum for NIF."
+
+#: contrib/localflavor/es/forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr "Ugyldig kontrollsum for NIE."
+
+#: contrib/localflavor/es/forms.py:71
+msgid "Invalid checksum for CIF."
+msgstr "Ugyldig kontrollsum for CIF."
+
+#: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr "Oppgje eit gyldig kontonummer på forma XXXX-XXXX-XX-XXXXXXXXXX."
+
+#: contrib/localflavor/es/forms.py:144
+msgid "Invalid checksum for bank account number."
+msgstr "Ugyldig kontrollsum for kontonummer."
+
+#: contrib/localflavor/fi/forms.py:29
+msgid "Enter a valid Finnish social security number."
+msgstr "Oppgje eit gyldig finsk personnummer."
+
+#: contrib/localflavor/fr/forms.py:31
+#, fuzzy
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Telefonnummeret må vere på forma XXXX-XXXXXX."
+
+#: contrib/localflavor/id/forms.py:28
+#, fuzzy
+msgid "Enter a valid post code"
+msgstr "Oppgje eit gyldig postnummer."
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Oppgje eit gyldig telefonnummer."
+
+#: contrib/localflavor/id/forms.py:107
+#, fuzzy
+msgid "Enter a valid vehicle license plate number"
+msgstr "Oppgje eit gyldig telefonnummer."
+
+#: contrib/localflavor/id/forms.py:170
+#, fuzzy
+msgid "Enter a valid NIK/KTP number"
+msgstr "Oppgje eit gyldig IC-nummer."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+#, fuzzy
+msgid "Bali"
+msgstr "Bengalsk"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+#, fuzzy
+msgid "Banten"
+msgstr "Innhald"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+#, fuzzy
+msgid "Bengkulu"
+msgstr "Bengalsk"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+#, fuzzy
+msgid "Gorontalo"
+msgstr "Girona"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+#, fuzzy
+msgid "Jambi"
+msgstr "Tamil"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+#, fuzzy
+msgid "Lampung"
+msgstr "aug"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+#, fuzzy
+msgid "Maluku"
+msgstr "Malacky"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+#, fuzzy
+msgid "Magelang"
+msgstr "Málaga"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+#, fuzzy
+msgid "Madiun"
+msgstr "Madrid"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+#, fuzzy
+msgid "Tapanuli"
+msgstr "Tamaulipas"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+#, fuzzy
+msgid "Bandung"
+msgstr "Brandenburg"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+#, fuzzy
+msgid "Cirebon"
+msgstr "Girona"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+#, fuzzy
+msgid "Bogor"
+msgstr "Hyogo"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+#, fuzzy
+msgid "Semarang"
+msgstr "Serbisk"
+
+#: contrib/localflavor/id/id_choices.py:87
+#, fuzzy
+msgid "Pati"
+msgstr "aktiv"
+
+#: contrib/localflavor/id/id_choices.py:91
+#, fuzzy
+msgid "Surabaya"
+msgstr "laurdag"
+
+#: contrib/localflavor/id/id_choices.py:92
+#, fuzzy
+msgid "Madura"
+msgstr "Madrid"
+
+#: contrib/localflavor/id/id_choices.py:93
+#, fuzzy
+msgid "Malang"
+msgstr "Málaga"
+
+#: contrib/localflavor/id/id_choices.py:94
+#, fuzzy
+msgid "Jember"
+msgstr "november"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+#, fuzzy
+msgid "Garut"
+msgstr "Glarus"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+#, fuzzy
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+#, fuzzy
+msgid "Armagh"
+msgstr "Aragón"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+#, fuzzy
+msgid "Cavan"
+msgstr "Katalansk"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+#, fuzzy
+msgid "Clare"
+msgstr "Cáceres"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+#, fuzzy
+msgid "Cork"
+msgstr "eller"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+#, fuzzy
+msgid "Derry"
+msgstr "februar"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+#, fuzzy
+msgid "Donegal"
+msgstr "éin"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+#, fuzzy
+msgid "Down"
+msgstr "Devon"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+#, fuzzy
+msgid "Dublin"
+msgstr "Lublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+#, fuzzy
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+#, fuzzy
+msgid "Galway"
+msgstr "Galicia"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+#, fuzzy
+msgid "Kerry"
+msgstr "februar"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+#, fuzzy
+msgid "Louth"
+msgstr "Logg ut"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+#, fuzzy
+msgid "Mayo"
+msgstr "mai"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+#, fuzzy
+msgid "Meath"
+msgstr "Metadata"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+#, fuzzy
+msgid "Monaghan"
+msgstr "Logg inn att"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+#, fuzzy
+msgid "Roscommon"
+msgstr "kommentar"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+#, fuzzy
+msgid "Sligo"
+msgstr "Shiga"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+#, fuzzy
+msgid "Tyrone"
+msgstr "Tirol"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+#, fuzzy
+msgid "Westmeath"
+msgstr "West Pomerania"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+#, fuzzy
+msgid "Wexford"
+msgstr "ons"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
+msgid "Enter a zip code in the format XXXXXXX."
+msgstr "Oppgje eit postnummer på forma XXXXXXX."
+
+#: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr "Oppgje eit gyldig islandsk identifikasjonsnummer på forma XXXXXX-XXXX."
+
+#: contrib/localflavor/is_/forms.py:19
+msgid "The Icelandic identification number is not valid."
+msgstr "Det islandske identifikasjonsnummeret er ugyldig."
+
+#: contrib/localflavor/it/forms.py:15
+msgid "Enter a valid zip code."
+msgstr "Oppgje eit gyldig postnummer."
+
+#: contrib/localflavor/it/forms.py:44
+msgid "Enter a valid Social Security number."
+msgstr "Oppgje eit gyldig italiensk personnummer."
+
+#: contrib/localflavor/it/forms.py:69
+msgid "Enter a valid VAT number."
+msgstr "Oppgje eit gyldig VAT-nummer."
+
+#: contrib/localflavor/jp/forms.py:16
+msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
+msgstr "Oppgje eit postnummer på forma XXXXXXX eller XXX-XXXX."
+
+#: contrib/localflavor/jp/jp_prefectures.py:4
+msgid "Hokkaido"
+msgstr "Hokkaido"
+
+#: contrib/localflavor/jp/jp_prefectures.py:5
+msgid "Aomori"
+msgstr "Aomori"
+
+#: contrib/localflavor/jp/jp_prefectures.py:6
+msgid "Iwate"
+msgstr "Iwate"
+
+#: contrib/localflavor/jp/jp_prefectures.py:7
+msgid "Miyagi"
+msgstr "Miyagi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:8
+msgid "Akita"
+msgstr "Akita"
+
+#: contrib/localflavor/jp/jp_prefectures.py:9
+msgid "Yamagata"
+msgstr "Yamagata"
+
+#: contrib/localflavor/jp/jp_prefectures.py:10
+msgid "Fukushima"
+msgstr "Fukushima"
+
+#: contrib/localflavor/jp/jp_prefectures.py:11
+msgid "Ibaraki"
+msgstr "Ibaraki"
+
+#: contrib/localflavor/jp/jp_prefectures.py:12
+msgid "Tochigi"
+msgstr "Tochigi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:13
+msgid "Gunma"
+msgstr "Gunma"
+
+#: contrib/localflavor/jp/jp_prefectures.py:14
+msgid "Saitama"
+msgstr "Saitama"
+
+#: contrib/localflavor/jp/jp_prefectures.py:15
+msgid "Chiba"
+msgstr "Chiba"
+
+#: contrib/localflavor/jp/jp_prefectures.py:16
+msgid "Tokyo"
+msgstr "Tokyo"
+
+#: contrib/localflavor/jp/jp_prefectures.py:17
+msgid "Kanagawa"
+msgstr "Kanagawa"
+
+#: contrib/localflavor/jp/jp_prefectures.py:18
+msgid "Yamanashi"
+msgstr "Yamanashi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:19
+msgid "Nagano"
+msgstr "Nagano"
+
+#: contrib/localflavor/jp/jp_prefectures.py:20
+msgid "Niigata"
+msgstr "Niigata"
+
+#: contrib/localflavor/jp/jp_prefectures.py:21
+msgid "Toyama"
+msgstr "Toyama"
+
+#: contrib/localflavor/jp/jp_prefectures.py:22
+msgid "Ishikawa"
+msgstr "Ishikawa"
+
+#: contrib/localflavor/jp/jp_prefectures.py:23
+msgid "Fukui"
+msgstr "Fukui"
+
+#: contrib/localflavor/jp/jp_prefectures.py:24
+msgid "Gifu"
+msgstr "Gifu"
+
+#: contrib/localflavor/jp/jp_prefectures.py:25
+msgid "Shizuoka"
+msgstr "Shizuoka"
+
+#: contrib/localflavor/jp/jp_prefectures.py:26
+msgid "Aichi"
+msgstr "Aichi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:27
+msgid "Mie"
+msgstr "Mie"
+
+#: contrib/localflavor/jp/jp_prefectures.py:28
+msgid "Shiga"
+msgstr "Shiga"
+
+#: contrib/localflavor/jp/jp_prefectures.py:29
+msgid "Kyoto"
+msgstr "Kyoto"
+
+#: contrib/localflavor/jp/jp_prefectures.py:30
+msgid "Osaka"
+msgstr "Osaka"
+
+#: contrib/localflavor/jp/jp_prefectures.py:31
+msgid "Hyogo"
+msgstr "Hyogo"
+
+#: contrib/localflavor/jp/jp_prefectures.py:32
+msgid "Nara"
+msgstr "Nara"
+
+#: contrib/localflavor/jp/jp_prefectures.py:33
+msgid "Wakayama"
+msgstr "Wakayama"
+
+#: contrib/localflavor/jp/jp_prefectures.py:34
+msgid "Tottori"
+msgstr "Tottori"
+
+#: contrib/localflavor/jp/jp_prefectures.py:35
+msgid "Shimane"
+msgstr "Shimane"
+
+#: contrib/localflavor/jp/jp_prefectures.py:36
+msgid "Okayama"
+msgstr "Okayama"
+
+#: contrib/localflavor/jp/jp_prefectures.py:37
+msgid "Hiroshima"
+msgstr "Hiroshima"
+
+#: contrib/localflavor/jp/jp_prefectures.py:38
+msgid "Yamaguchi"
+msgstr "Yamaguchi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:39
+msgid "Tokushima"
+msgstr "Tokushima"
+
+#: contrib/localflavor/jp/jp_prefectures.py:40
+msgid "Kagawa"
+msgstr "Kagawa"
+
+#: contrib/localflavor/jp/jp_prefectures.py:41
+msgid "Ehime"
+msgstr "Ehime"
+
+#: contrib/localflavor/jp/jp_prefectures.py:42
+msgid "Kochi"
+msgstr "Kochi"
+
+#: contrib/localflavor/jp/jp_prefectures.py:43
+msgid "Fukuoka"
+msgstr "Fukuoka"
+
+#: contrib/localflavor/jp/jp_prefectures.py:44
+msgid "Saga"
+msgstr "Saga"
+
+#: contrib/localflavor/jp/jp_prefectures.py:45
+msgid "Nagasaki"
+msgstr "Nagasaki"
+
+#: contrib/localflavor/jp/jp_prefectures.py:46
+msgid "Kumamoto"
+msgstr "Kumamoto"
+
+#: contrib/localflavor/jp/jp_prefectures.py:47
+msgid "Oita"
+msgstr "Oita"
+
+#: contrib/localflavor/jp/jp_prefectures.py:48
+msgid "Miyazaki"
+msgstr "Miyazaki"
+
+#: contrib/localflavor/jp/jp_prefectures.py:49
+msgid "Kagoshima"
+msgstr "Kagoshima"
+
+#: contrib/localflavor/jp/jp_prefectures.py:50
+msgid "Okinawa"
+msgstr "Okinawa"
+
+#: contrib/localflavor/kw/forms.py:25
+#, fuzzy
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Oppgje eit gyldig South African ID-nummer."
+
+#: contrib/localflavor/mx/mx_states.py:12
+msgid "Aguascalientes"
+msgstr "Aguascalientes"
+
+#: contrib/localflavor/mx/mx_states.py:13
+msgid "Baja California"
+msgstr "Baja California"
+
+#: contrib/localflavor/mx/mx_states.py:14
+msgid "Baja California Sur"
+msgstr "Baja California Sur"
+
+#: contrib/localflavor/mx/mx_states.py:15
+msgid "Campeche"
+msgstr "Campeche"
+
+#: contrib/localflavor/mx/mx_states.py:16
+msgid "Chihuahua"
+msgstr "Chihuahua"
+
+#: contrib/localflavor/mx/mx_states.py:17
+msgid "Chiapas"
+msgstr "Chiapas"
+
+#: contrib/localflavor/mx/mx_states.py:18
+msgid "Coahuila"
+msgstr "Coahuila"
+
+#: contrib/localflavor/mx/mx_states.py:19
+msgid "Colima"
+msgstr "Colima"
+
+#: contrib/localflavor/mx/mx_states.py:20
+msgid "Distrito Federal"
+msgstr "Distrito Federal"
+
+#: contrib/localflavor/mx/mx_states.py:21
+msgid "Durango"
+msgstr "Durango"
+
+#: contrib/localflavor/mx/mx_states.py:22
+msgid "Guerrero"
+msgstr "Guerrero"
+
+#: contrib/localflavor/mx/mx_states.py:23
+msgid "Guanajuato"
+msgstr "Guanajuato"
+
+#: contrib/localflavor/mx/mx_states.py:24
+msgid "Hidalgo"
+msgstr "Hidalgo"
+
+#: contrib/localflavor/mx/mx_states.py:25
+msgid "Jalisco"
+msgstr "Jalisco"
+
+#: contrib/localflavor/mx/mx_states.py:26
+msgid "Estado de México"
+msgstr "Estado de México"
+
+#: contrib/localflavor/mx/mx_states.py:27
+msgid "Michoacán"
+msgstr "Michoacán"
+
+#: contrib/localflavor/mx/mx_states.py:28
+msgid "Morelos"
+msgstr "Morelos"
+
+#: contrib/localflavor/mx/mx_states.py:29
+msgid "Nayarit"
+msgstr "Nayarit"
+
+#: contrib/localflavor/mx/mx_states.py:30
+msgid "Nuevo León"
+msgstr "Nuevo León"
+
+#: contrib/localflavor/mx/mx_states.py:31
+msgid "Oaxaca"
+msgstr "Oaxaca"
+
+#: contrib/localflavor/mx/mx_states.py:32
+msgid "Puebla"
+msgstr "Puebla"
+
+#: contrib/localflavor/mx/mx_states.py:33
+msgid "Querétaro"
+msgstr "Querétaro"
+
+#: contrib/localflavor/mx/mx_states.py:34
+msgid "Quintana Roo"
+msgstr "Quintana Roo"
+
+#: contrib/localflavor/mx/mx_states.py:35
+msgid "Sinaloa"
+msgstr "Sinaloa"
+
+#: contrib/localflavor/mx/mx_states.py:36
+msgid "San Luis Potosí"
+msgstr "San Luis Potosí"
+
+#: contrib/localflavor/mx/mx_states.py:37
+msgid "Sonora"
+msgstr "Sonora"
+
+#: contrib/localflavor/mx/mx_states.py:38
+msgid "Tabasco"
+msgstr "Tabasco"
+
+#: contrib/localflavor/mx/mx_states.py:39
+msgid "Tamaulipas"
+msgstr "Tamaulipas"
+
+#: contrib/localflavor/mx/mx_states.py:40
+msgid "Tlaxcala"
+msgstr "Tlaxcala"
+
+#: contrib/localflavor/mx/mx_states.py:41
+msgid "Veracruz"
+msgstr "Veracruz"
+
+#: contrib/localflavor/mx/mx_states.py:42
+msgid "Yucatán"
+msgstr "Yucatán"
+
+#: contrib/localflavor/mx/mx_states.py:43
+msgid "Zacatecas"
+msgstr "Zacatecas"
+
+#: contrib/localflavor/nl/forms.py:22
+msgid "Enter a valid postal code"
+msgstr "Oppgje eit gyldig postnummer."
+
+#: contrib/localflavor/nl/forms.py:79
+msgid "Enter a valid SoFi number"
+msgstr "Oppgje eit gyldig SoFi-nummer."
+
+#: contrib/localflavor/nl/nl_provinces.py:4
+msgid "Drenthe"
+msgstr "Drenthe"
+
+#: contrib/localflavor/nl/nl_provinces.py:5
+msgid "Flevoland"
+msgstr "Flevoland"
+
+#: contrib/localflavor/nl/nl_provinces.py:6
+msgid "Friesland"
+msgstr "Friesland"
+
+#: contrib/localflavor/nl/nl_provinces.py:7
+msgid "Gelderland"
+msgstr "Gelderland"
+
+#: contrib/localflavor/nl/nl_provinces.py:8
+msgid "Groningen"
+msgstr "Groningen"
+
+#: contrib/localflavor/nl/nl_provinces.py:9
+msgid "Limburg"
+msgstr "Limburg"
+
+#: contrib/localflavor/nl/nl_provinces.py:10
+msgid "Noord-Brabant"
+msgstr "Noord-Brabant"
+
+#: contrib/localflavor/nl/nl_provinces.py:11
+msgid "Noord-Holland"
+msgstr "Noord-Holland"
+
+#: contrib/localflavor/nl/nl_provinces.py:12
+msgid "Overijssel"
+msgstr "Overijssel"
+
+#: contrib/localflavor/nl/nl_provinces.py:13
+msgid "Utrecht"
+msgstr "Utrecht"
+
+#: contrib/localflavor/nl/nl_provinces.py:14
+msgid "Zeeland"
+msgstr "Zeeland"
+
+#: contrib/localflavor/nl/nl_provinces.py:15
+msgid "Zuid-Holland"
+msgstr "Zuid-Holland"
+
+#: contrib/localflavor/no/forms.py:34
+msgid "Enter a valid Norwegian social security number."
+msgstr "Oppgje eit gyldig norsk personnummer."
+
+#: contrib/localflavor/pe/forms.py:25
+msgid "This field requires 8 digits."
+msgstr "Feltet krevar åtte siffer."
+
+#: contrib/localflavor/pe/forms.py:53
+msgid "This field requires 11 digits."
+msgstr "Feltet krevar 11 siffer."
+
+#: contrib/localflavor/pl/forms.py:38
+msgid "National Identification Number consists of 11 digits."
+msgstr "National Identification Number består av 11 siffer."
+
+#: contrib/localflavor/pl/forms.py:39
+msgid "Wrong checksum for the National Identification Number."
+msgstr "Feil kontrollsum for National Identification Number."
+
+#: contrib/localflavor/pl/forms.py:71
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr "Oppgje eit NIP på forma XXX-XXX-XX-XX eller XX-XX-XXX-XXX."
+
+#: contrib/localflavor/pl/forms.py:72
+msgid "Wrong checksum for the Tax Number (NIP)."
+msgstr "Ugyldig kontrollsum for NIP."
+
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr "National Business Register Number (REGON) består av 9 eller 14 siffer."
+
+#: contrib/localflavor/pl/forms.py:110
+msgid "Wrong checksum for the National Business Register Number (REGON)."
+msgstr "Ugyldig kontrollsum for National Business Register Number (REGON)."
+
+#: contrib/localflavor/pl/forms.py:148
+msgid "Enter a postal code in the format XX-XXX."
+msgstr "Oppgje eit postnummer på forma XX-XXX."
+
+#: contrib/localflavor/pl/pl_voivodeships.py:8
+msgid "Lower Silesia"
+msgstr "Lower Silesia"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:9
+msgid "Kuyavia-Pomerania"
+msgstr "Kuyavia-Pomerania"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:10
+msgid "Lublin"
+msgstr "Lublin"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:11
+msgid "Lubusz"
+msgstr "Lubusz"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:12
+msgid "Lodz"
+msgstr "Lodz"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:13
+msgid "Lesser Poland"
+msgstr "Lesser Poland"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:14
+msgid "Masovia"
+msgstr "Masovia"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:15
+msgid "Opole"
+msgstr "Opole"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:16
+msgid "Subcarpatia"
+msgstr "Subcarpatia"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:17
+msgid "Podlasie"
+msgstr "Podlasie"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:18
+msgid "Pomerania"
+msgstr "Pomerania"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:19
+msgid "Silesia"
+msgstr "Silesia"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:20
+msgid "Swietokrzyskie"
+msgstr "Swietokrzyskie"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:21
+msgid "Warmia-Masuria"
+msgstr "Warmia-Masuria"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:22
+msgid "Greater Poland"
+msgstr "Greater Poland"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:23
+msgid "West Pomerania"
+msgstr "West Pomerania"
+
+#: contrib/localflavor/pt/forms.py:17
+#, fuzzy
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Oppgje eit postnummer på forma XXXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:19
+msgid "Enter a valid CIF."
+msgstr "Oppgje eit gyldig CIF."
+
+#: contrib/localflavor/ro/forms.py:56
+msgid "Enter a valid CNP."
+msgstr "Oppgje eit gyldig CNP."
+
+#: contrib/localflavor/ro/forms.py:141
+msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
+msgstr "Oppgje eit gyldig IBAN på forma ROXX-XXXX-XXXX-XXXX-XXXX-XXXX."
+
+#: contrib/localflavor/ro/forms.py:171
+msgid "Phone numbers must be in XXXX-XXXXXX format."
+msgstr "Telefonnummeret må vere på forma XXXX-XXXXXX."
+
+#: contrib/localflavor/ro/forms.py:194
+msgid "Enter a valid postal code in the format XXXXXX"
+msgstr "Oppgje eit postnummer på forma XXXXXX."
+
+#: contrib/localflavor/se/forms.py:50
+#, fuzzy
+msgid "Enter a valid Swedish organisation number."
+msgstr "Oppgje eit gyldig fødselsnummer."
+
+#: contrib/localflavor/se/forms.py:107
+#, fuzzy
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Oppgje eit gyldig finsk personnummer."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+#, fuzzy
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Oppgje eit postnummer på forma XX-XXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+#, fuzzy
+msgid "Södermanland"
+msgstr "Gelderland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+#, fuzzy
+msgid "Kalmar"
+msgstr "mar"
+
+#: contrib/localflavor/se/se_counties.py:24
+#, fuzzy
+msgid "Gotland"
+msgstr "Skottland"
+
+#: contrib/localflavor/se/se_counties.py:25
+#, fuzzy
+msgid "Blekinge"
+msgstr "Bern"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+#, fuzzy
+msgid "Halland"
+msgstr "Saarland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:32
+#, fuzzy
+msgid "Dalarna"
+msgstr "Galanta"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:8
+msgid "Banska Bystrica"
+msgstr "Banska Bystrica"
+
+#: contrib/localflavor/sk/sk_districts.py:9
+msgid "Banska Stiavnica"
+msgstr "Banska Stiavnica"
+
+#: contrib/localflavor/sk/sk_districts.py:10
+msgid "Bardejov"
+msgstr "Bardejov"
+
+#: contrib/localflavor/sk/sk_districts.py:11
+msgid "Banovce nad Bebravou"
+msgstr "Banovce nad Bebravou"
+
+#: contrib/localflavor/sk/sk_districts.py:12
+msgid "Brezno"
+msgstr "Brezno"
+
+#: contrib/localflavor/sk/sk_districts.py:13
+msgid "Bratislava I"
+msgstr "Bratislava I"
+
+#: contrib/localflavor/sk/sk_districts.py:14
+msgid "Bratislava II"
+msgstr "Bratislava II"
+
+#: contrib/localflavor/sk/sk_districts.py:15
+msgid "Bratislava III"
+msgstr "Bratislava III"
+
+#: contrib/localflavor/sk/sk_districts.py:16
+msgid "Bratislava IV"
+msgstr "Bratislava IV"
+
+#: contrib/localflavor/sk/sk_districts.py:17
+msgid "Bratislava V"
+msgstr "Bratislava V"
+
+#: contrib/localflavor/sk/sk_districts.py:18
+msgid "Bytca"
+msgstr "Bytca"
+
+#: contrib/localflavor/sk/sk_districts.py:19
+msgid "Cadca"
+msgstr "Cadca"
+
+#: contrib/localflavor/sk/sk_districts.py:20
+msgid "Detva"
+msgstr "Detva"
+
+#: contrib/localflavor/sk/sk_districts.py:21
+msgid "Dolny Kubin"
+msgstr "Dolny Kubin"
+
+#: contrib/localflavor/sk/sk_districts.py:22
+msgid "Dunajska Streda"
+msgstr "Dunajska Streda"
+
+#: contrib/localflavor/sk/sk_districts.py:23
+msgid "Galanta"
+msgstr "Galanta"
+
+#: contrib/localflavor/sk/sk_districts.py:24
+msgid "Gelnica"
+msgstr "Gelnica"
+
+#: contrib/localflavor/sk/sk_districts.py:25
+msgid "Hlohovec"
+msgstr "Hlohovec"
+
+#: contrib/localflavor/sk/sk_districts.py:26
+msgid "Humenne"
+msgstr "Humenne"
+
+#: contrib/localflavor/sk/sk_districts.py:27
+msgid "Ilava"
+msgstr "Ilava"
+
+#: contrib/localflavor/sk/sk_districts.py:28
+msgid "Kezmarok"
+msgstr "Kezmarok"
+
+#: contrib/localflavor/sk/sk_districts.py:29
+msgid "Komarno"
+msgstr "Komarno"
+
+#: contrib/localflavor/sk/sk_districts.py:30
+msgid "Kosice I"
+msgstr "Kosice I"
+
+#: contrib/localflavor/sk/sk_districts.py:31
+msgid "Kosice II"
+msgstr "Kosice II"
+
+#: contrib/localflavor/sk/sk_districts.py:32
+msgid "Kosice III"
+msgstr "Kosice III"
+
+#: contrib/localflavor/sk/sk_districts.py:33
+msgid "Kosice IV"
+msgstr "Kosice IV"
+
+#: contrib/localflavor/sk/sk_districts.py:34
+msgid "Kosice - okolie"
+msgstr "Kosice - okolie"
+
+#: contrib/localflavor/sk/sk_districts.py:35
+msgid "Krupina"
+msgstr "Krupina"
+
+#: contrib/localflavor/sk/sk_districts.py:36
+msgid "Kysucke Nove Mesto"
+msgstr "Kysucke Nove Mesto"
+
+#: contrib/localflavor/sk/sk_districts.py:37
+msgid "Levice"
+msgstr "Levice"
+
+#: contrib/localflavor/sk/sk_districts.py:38
+msgid "Levoca"
+msgstr "Levoca"
+
+#: contrib/localflavor/sk/sk_districts.py:39
+msgid "Liptovsky Mikulas"
+msgstr "Liptovsky Mikulas"
+
+#: contrib/localflavor/sk/sk_districts.py:40
+msgid "Lucenec"
+msgstr "Lucenec"
+
+#: contrib/localflavor/sk/sk_districts.py:41
+msgid "Malacky"
+msgstr "Malacky"
+
+#: contrib/localflavor/sk/sk_districts.py:42
+msgid "Martin"
+msgstr "Martin"
+
+#: contrib/localflavor/sk/sk_districts.py:43
+msgid "Medzilaborce"
+msgstr "Medzilaborce"
+
+#: contrib/localflavor/sk/sk_districts.py:44
+msgid "Michalovce"
+msgstr "Michalovce"
+
+#: contrib/localflavor/sk/sk_districts.py:45
+msgid "Myjava"
+msgstr "Myjava"
+
+#: contrib/localflavor/sk/sk_districts.py:46
+msgid "Namestovo"
+msgstr "Namestovo"
+
+#: contrib/localflavor/sk/sk_districts.py:47
+msgid "Nitra"
+msgstr "Nitra"
+
+#: contrib/localflavor/sk/sk_districts.py:48
+msgid "Nove Mesto nad Vahom"
+msgstr "Nove Mesto nad Vahom"
+
+#: contrib/localflavor/sk/sk_districts.py:49
+msgid "Nove Zamky"
+msgstr "Nove Zamky"
+
+#: contrib/localflavor/sk/sk_districts.py:50
+msgid "Partizanske"
+msgstr "Partizanske"
+
+#: contrib/localflavor/sk/sk_districts.py:51
+msgid "Pezinok"
+msgstr "Pezinok"
+
+#: contrib/localflavor/sk/sk_districts.py:52
+msgid "Piestany"
+msgstr "Piestany"
+
+#: contrib/localflavor/sk/sk_districts.py:53
+msgid "Poltar"
+msgstr "Poltar"
+
+#: contrib/localflavor/sk/sk_districts.py:54
+msgid "Poprad"
+msgstr "Poprad"
+
+#: contrib/localflavor/sk/sk_districts.py:55
+msgid "Povazska Bystrica"
+msgstr "Povazska Bystrica"
+
+#: contrib/localflavor/sk/sk_districts.py:56
+msgid "Presov"
+msgstr "Presov"
+
+#: contrib/localflavor/sk/sk_districts.py:57
+msgid "Prievidza"
+msgstr "Prievidza"
+
+#: contrib/localflavor/sk/sk_districts.py:58
+msgid "Puchov"
+msgstr "Puchov"
+
+#: contrib/localflavor/sk/sk_districts.py:59
+msgid "Revuca"
+msgstr "Revuca"
+
+#: contrib/localflavor/sk/sk_districts.py:60
+msgid "Rimavska Sobota"
+msgstr "Rimavska Sobota"
+
+#: contrib/localflavor/sk/sk_districts.py:61
+msgid "Roznava"
+msgstr "Roznava"
+
+#: contrib/localflavor/sk/sk_districts.py:62
+msgid "Ruzomberok"
+msgstr "Ruzomberok"
+
+#: contrib/localflavor/sk/sk_districts.py:63
+msgid "Sabinov"
+msgstr "Sabinov"
+
+#: contrib/localflavor/sk/sk_districts.py:64
+msgid "Senec"
+msgstr "Senec"
+
+#: contrib/localflavor/sk/sk_districts.py:65
+msgid "Senica"
+msgstr "Senica"
+
+#: contrib/localflavor/sk/sk_districts.py:66
+msgid "Skalica"
+msgstr "Skalica"
+
+#: contrib/localflavor/sk/sk_districts.py:67
+msgid "Snina"
+msgstr "Snina"
+
+#: contrib/localflavor/sk/sk_districts.py:68
+msgid "Sobrance"
+msgstr "Sobrance"
+
+#: contrib/localflavor/sk/sk_districts.py:69
+msgid "Spisska Nova Ves"
+msgstr "Spisska Nova Ves"
+
+#: contrib/localflavor/sk/sk_districts.py:70
+msgid "Stara Lubovna"
+msgstr "Stara Lubovna"
+
+#: contrib/localflavor/sk/sk_districts.py:71
+msgid "Stropkov"
+msgstr "Stropkov"
+
+#: contrib/localflavor/sk/sk_districts.py:72
+msgid "Svidnik"
+msgstr "Svidnik"
+
+#: contrib/localflavor/sk/sk_districts.py:73
+msgid "Sala"
+msgstr "Sala"
+
+#: contrib/localflavor/sk/sk_districts.py:74
+msgid "Topolcany"
+msgstr "Topolcany"
+
+#: contrib/localflavor/sk/sk_districts.py:75
+msgid "Trebisov"
+msgstr "Trebisov"
+
+#: contrib/localflavor/sk/sk_districts.py:76
+msgid "Trencin"
+msgstr "Trencin"
+
+#: contrib/localflavor/sk/sk_districts.py:77
+msgid "Trnava"
+msgstr "Trnava"
+
+#: contrib/localflavor/sk/sk_districts.py:78
+msgid "Turcianske Teplice"
+msgstr "Turcianske Teplice"
+
+#: contrib/localflavor/sk/sk_districts.py:79
+msgid "Tvrdosin"
+msgstr "Tvrdosin"
+
+#: contrib/localflavor/sk/sk_districts.py:80
+msgid "Velky Krtis"
+msgstr "Velky Krtis"
+
+#: contrib/localflavor/sk/sk_districts.py:81
+msgid "Vranov nad Toplou"
+msgstr "Vranov nad Toplou"
+
+#: contrib/localflavor/sk/sk_districts.py:82
+msgid "Zlate Moravce"
+msgstr "Zlate Moravce"
+
+#: contrib/localflavor/sk/sk_districts.py:83
+msgid "Zvolen"
+msgstr "Zvolen"
+
+#: contrib/localflavor/sk/sk_districts.py:84
+msgid "Zarnovica"
+msgstr "Zarnovica"
+
+#: contrib/localflavor/sk/sk_districts.py:85
+msgid "Ziar nad Hronom"
+msgstr "Ziar nad Hronom"
+
+#: contrib/localflavor/sk/sk_districts.py:86
+msgid "Zilina"
+msgstr "Zilina"
+
+#: contrib/localflavor/sk/sk_regions.py:8
+msgid "Banska Bystrica region"
+msgstr "Banská Bystrica-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:9
+msgid "Bratislava region"
+msgstr "Bratislava-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:10
+msgid "Kosice region"
+msgstr "Košice-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:11
+msgid "Nitra region"
+msgstr "Nitra-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:12
+msgid "Presov region"
+msgstr "Prešov-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:13
+msgid "Trencin region"
+msgstr "Trenčín-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:14
+msgid "Trnava region"
+msgstr "Trnava-regionen"
+
+#: contrib/localflavor/sk/sk_regions.py:15
+msgid "Zilina region"
+msgstr "Žilina-regionen"
+
+#: contrib/localflavor/uk/forms.py:21
+msgid "Enter a valid postcode."
+msgstr "Oppgje eit gyldig postnummer."
+
+#: contrib/localflavor/uk/uk_regions.py:11
+msgid "Bedfordshire"
+msgstr "Bedfordshire"
+
+#: contrib/localflavor/uk/uk_regions.py:12
+msgid "Buckinghamshire"
+msgstr "Buckinghamshire"
+
+#: contrib/localflavor/uk/uk_regions.py:14
+msgid "Cheshire"
+msgstr "Cheshire"
+
+#: contrib/localflavor/uk/uk_regions.py:15
+msgid "Cornwall and Isles of Scilly"
+msgstr "Cornwall"
+
+#: contrib/localflavor/uk/uk_regions.py:16
+msgid "Cumbria"
+msgstr "Cumbria"
+
+#: contrib/localflavor/uk/uk_regions.py:17
+msgid "Derbyshire"
+msgstr "Derbyshire"
+
+#: contrib/localflavor/uk/uk_regions.py:18
+msgid "Devon"
+msgstr "Devon"
+
+#: contrib/localflavor/uk/uk_regions.py:19
+msgid "Dorset"
+msgstr "Dorset"
+
+#: contrib/localflavor/uk/uk_regions.py:20
+msgid "Durham"
+msgstr "Durham"
+
+#: contrib/localflavor/uk/uk_regions.py:21
+msgid "East Sussex"
+msgstr "East Sussex"
+
+#: contrib/localflavor/uk/uk_regions.py:22
+msgid "Essex"
+msgstr "Essex"
+
+#: contrib/localflavor/uk/uk_regions.py:23
+msgid "Gloucestershire"
+msgstr "Gloucestershire"
+
+#: contrib/localflavor/uk/uk_regions.py:24
+msgid "Greater London"
+msgstr "Stor-London"
+
+#: contrib/localflavor/uk/uk_regions.py:25
+msgid "Greater Manchester"
+msgstr "Stor-Manchester"
+
+#: contrib/localflavor/uk/uk_regions.py:26
+msgid "Hampshire"
+msgstr "Hampshire"
+
+#: contrib/localflavor/uk/uk_regions.py:27
+msgid "Hertfordshire"
+msgstr "Hertfordshire"
+
+#: contrib/localflavor/uk/uk_regions.py:28
+msgid "Kent"
+msgstr "Kent"
+
+#: contrib/localflavor/uk/uk_regions.py:29
+msgid "Lancashire"
+msgstr "Lancashire"
+
+#: contrib/localflavor/uk/uk_regions.py:30
+msgid "Leicestershire"
+msgstr "Leicestershire"
+
+#: contrib/localflavor/uk/uk_regions.py:31
+msgid "Lincolnshire"
+msgstr "Lincolnshire"
+
+#: contrib/localflavor/uk/uk_regions.py:32
+msgid "Merseyside"
+msgstr "Merseyside"
+
+#: contrib/localflavor/uk/uk_regions.py:33
+msgid "Norfolk"
+msgstr "Norfolk"
+
+#: contrib/localflavor/uk/uk_regions.py:34
+msgid "North Yorkshire"
+msgstr "North Yorkshire"
+
+#: contrib/localflavor/uk/uk_regions.py:35
+msgid "Northamptonshire"
+msgstr "Northamptonshire"
+
+#: contrib/localflavor/uk/uk_regions.py:36
+msgid "Northumberland"
+msgstr "Northumberland"
+
+#: contrib/localflavor/uk/uk_regions.py:37
+msgid "Nottinghamshire"
+msgstr "Nottinghamshire"
+
+#: contrib/localflavor/uk/uk_regions.py:38
+msgid "Oxfordshire"
+msgstr "Oxfordshire"
+
+#: contrib/localflavor/uk/uk_regions.py:39
+msgid "Shropshire"
+msgstr "Shropshire"
+
+#: contrib/localflavor/uk/uk_regions.py:40
+msgid "Somerset"
+msgstr "Somerset"
+
+#: contrib/localflavor/uk/uk_regions.py:41
+msgid "South Yorkshire"
+msgstr "South Yorkshire"
+
+#: contrib/localflavor/uk/uk_regions.py:42
+msgid "Staffordshire"
+msgstr "Staffordshire"
+
+#: contrib/localflavor/uk/uk_regions.py:43
+msgid "Suffolk"
+msgstr "Suffolk"
+
+#: contrib/localflavor/uk/uk_regions.py:44
+msgid "Surrey"
+msgstr "Surrey"
+
+#: contrib/localflavor/uk/uk_regions.py:45
+msgid "Tyne and Wear"
+msgstr "Tyne and Wear"
+
+#: contrib/localflavor/uk/uk_regions.py:46
+msgid "Warwickshire"
+msgstr "Warwickshire"
+
+#: contrib/localflavor/uk/uk_regions.py:47
+msgid "West Midlands"
+msgstr "West Midlands"
+
+#: contrib/localflavor/uk/uk_regions.py:48
+msgid "West Sussex"
+msgstr "West Sussex"
+
+#: contrib/localflavor/uk/uk_regions.py:49
+msgid "West Yorkshire"
+msgstr "West Yorkshire"
+
+#: contrib/localflavor/uk/uk_regions.py:50
+msgid "Wiltshire"
+msgstr "Wiltshire"
+
+#: contrib/localflavor/uk/uk_regions.py:51
+msgid "Worcestershire"
+msgstr "Worcestershire"
+
+#: contrib/localflavor/uk/uk_regions.py:55
+msgid "County Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/uk/uk_regions.py:56
+msgid "County Armagh"
+msgstr "Armagh"
+
+#: contrib/localflavor/uk/uk_regions.py:57
+msgid "County Down"
+msgstr "Down"
+
+#: contrib/localflavor/uk/uk_regions.py:58
+msgid "County Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/uk/uk_regions.py:59
+msgid "County Londonderry"
+msgstr "Londonderry"
+
+#: contrib/localflavor/uk/uk_regions.py:60
+msgid "County Tyrone"
+msgstr "Tyrone"
+
+#: contrib/localflavor/uk/uk_regions.py:64
+msgid "Clwyd"
+msgstr "Clwyd"
+
+#: contrib/localflavor/uk/uk_regions.py:65
+msgid "Dyfed"
+msgstr "Dyfed"
+
+#: contrib/localflavor/uk/uk_regions.py:66
+msgid "Gwent"
+msgstr "Gwent"
+
+#: contrib/localflavor/uk/uk_regions.py:67
+msgid "Gwynedd"
+msgstr "Gwynedd"
+
+#: contrib/localflavor/uk/uk_regions.py:68
+msgid "Mid Glamorgan"
+msgstr "Mid Glamorgan"
+
+#: contrib/localflavor/uk/uk_regions.py:69
+msgid "Powys"
+msgstr "Powys"
+
+#: contrib/localflavor/uk/uk_regions.py:70
+msgid "South Glamorgan"
+msgstr "South Glamorgan"
+
+#: contrib/localflavor/uk/uk_regions.py:71
+msgid "West Glamorgan"
+msgstr "West Glamorgan"
+
+#: contrib/localflavor/uk/uk_regions.py:75
+msgid "Borders"
+msgstr "Borders"
+
+#: contrib/localflavor/uk/uk_regions.py:76
+msgid "Central Scotland"
+msgstr "Central Scotland"
+
+#: contrib/localflavor/uk/uk_regions.py:77
+msgid "Dumfries and Galloway"
+msgstr "Dumfries og Galloway"
+
+#: contrib/localflavor/uk/uk_regions.py:78
+msgid "Fife"
+msgstr "Fife"
+
+#: contrib/localflavor/uk/uk_regions.py:79
+msgid "Grampian"
+msgstr "Grampian"
+
+#: contrib/localflavor/uk/uk_regions.py:80
+msgid "Highland"
+msgstr "Highland"
+
+#: contrib/localflavor/uk/uk_regions.py:81
+msgid "Lothian"
+msgstr "Lothian"
+
+#: contrib/localflavor/uk/uk_regions.py:82
+msgid "Orkney Islands"
+msgstr "Orknøyene"
+
+#: contrib/localflavor/uk/uk_regions.py:83
+msgid "Shetland Islands"
+msgstr "Shetland"
+
+#: contrib/localflavor/uk/uk_regions.py:84
+msgid "Strathclyde"
+msgstr "Strathclyde"
+
+#: contrib/localflavor/uk/uk_regions.py:85
+msgid "Tayside"
+msgstr "Tayside"
+
+#: contrib/localflavor/uk/uk_regions.py:86
+msgid "Western Isles"
+msgstr "Ytre Hebridene"
+
+#: contrib/localflavor/uk/uk_regions.py:90
+msgid "England"
+msgstr "England"
+
+#: contrib/localflavor/uk/uk_regions.py:91
+msgid "Northern Ireland"
+msgstr "Nord-Irland"
+
+#: contrib/localflavor/uk/uk_regions.py:92
+msgid "Scotland"
+msgstr "Skottland"
+
+#: contrib/localflavor/uk/uk_regions.py:93
+msgid "Wales"
+msgstr "Wales"
+
+#: contrib/localflavor/us/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr "Oppgje eit postnummer på forma XXXXX eller XXXXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:26
+#, fuzzy
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Telefonnummeret må vere på forma XX-XXXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
+msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+msgstr ""
+"Oppgje eit gyldig amerikansik Social Security-nummer på forma XXX-XX-XXXX."
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr ""
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Stat (i USA, to store bokstavar)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Telefonnummer"
+
+#: contrib/localflavor/uy/forms.py:28
+#, fuzzy
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "Oppgje gyldig CUIT på forma XX-XXXXXXXX-X or XXXXXXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+#, fuzzy
+msgid "Enter a valid CI number."
+msgstr "Oppgje eit gyldig IC-nummer."
+
+#: contrib/localflavor/za/forms.py:21
+msgid "Enter a valid South African ID number"
+msgstr "Oppgje eit gyldig South African ID-nummer."
+
+#: contrib/localflavor/za/forms.py:55
+msgid "Enter a valid South African postal code"
+msgstr "Oppgje eit gyldig postnummer."
+
+#: contrib/localflavor/za/za_provinces.py:4
+msgid "Eastern Cape"
+msgstr "Eastern Cape"
+
+#: contrib/localflavor/za/za_provinces.py:5
+msgid "Free State"
+msgstr "Free State"
+
+#: contrib/localflavor/za/za_provinces.py:6
+msgid "Gauteng"
+msgstr "Gauteng"
+
+#: contrib/localflavor/za/za_provinces.py:7
+msgid "KwaZulu-Natal"
+msgstr "KwaZulu-Natal"
+
+#: contrib/localflavor/za/za_provinces.py:8
+msgid "Limpopo"
+msgstr "Limpopo"
+
+#: contrib/localflavor/za/za_provinces.py:9
+msgid "Mpumalanga"
+msgstr "Mpumalanga"
+
+#: contrib/localflavor/za/za_provinces.py:10
+msgid "Northern Cape"
+msgstr "Northern Cape"
+
+#: contrib/localflavor/za/za_provinces.py:11
+msgid "North West"
+msgstr "North West"
+
+#: contrib/localflavor/za/za_provinces.py:12
+msgid "Western Cape"
+msgstr "Western Cape"
+
+#: contrib/messages/tests/base.py:101
+#, fuzzy
+msgid "lazy message"
+msgstr "melding"
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "omadresser frå"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Dette bør vere ein fullstendig sti utan domenenavn. Døme: '/hendingar/finn/"
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "omadresser til"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Dette kan enten vere ein fullstendig sti (som over), eller ei fullstendig "
+"nettadresse som startar med 'http://'"
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "omadressering"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "omadresseringar"
+
+#: contrib/sessions/models.py:45
+msgid "session key"
+msgstr "sesjonsnøkkel"
+
+#: contrib/sessions/models.py:47
+msgid "session data"
+msgstr "sesjonsdata"
+
+#: contrib/sessions/models.py:48
+msgid "expire date"
+msgstr "utløpsdato"
+
+#: contrib/sessions/models.py:53
+msgid "session"
+msgstr "sesjon"
+
+#: contrib/sessions/models.py:54
+msgid "sessions"
+msgstr "sesjonar"
+
+#: contrib/sites/models.py:32
+msgid "domain name"
+msgstr "domenenamn"
+
+#: contrib/sites/models.py:33
+msgid "display name"
+msgstr "visingsnamn"
+
+#: contrib/sites/models.py:39
+msgid "sites"
+msgstr "nettstader"
+
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Oppgje ein gyldig verdi."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Oppgje ei gyldig nettadresse."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Nettadressa fører til ei side som ikkje eksisterar."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Oppgje ein gyldig 'slug' som består av bokstavar, nummer, understrekar eller "
+"bindestrekar."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Oppgje ei gyldig IPv4-adresse."
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Oppgje berre tall skild med komma."
+
+#: core/validators.py:135
+#, fuzzy, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Verdien må minimum ha %(min)d teikn (den er %(length)d)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, fuzzy, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Verdien må vere mindre enn eller lik %s."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, fuzzy, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Verdien må vere større enn eller lik %s."
+
+#: core/validators.py:164
+#, fuzzy, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr "Verdien må minimum ha %(min)d teikn (den er %(length)d)."
+
+#: core/validators.py:170
+#, fuzzy, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr "Verdien kan maksimalt ha %(max)d teikn (den er %(length)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s må vere unik for %(date_field)s %(lookup)s."
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s med %(field_label)s fins allereie."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr ""
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be null."
+msgstr "Feltet kan ikkje vere tomt."
+
+#: db/models/fields/__init__.py:65
+#, fuzzy
+msgid "This field cannot be blank."
+msgstr "Feltet kan ikkje vere tomt."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr ""
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Heiltal"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+msgid "This value must be an integer."
+msgstr "Verdien må vere eit heltall."
+
+#: db/models/fields/__init__.py:490
+msgid "This value must be either True or False."
+msgstr "Verdien må vere True eller False."
+
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Boolsk (True eller False)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Tekst (opp til %(max_length)s teikn)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Heiltal skild med komma"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Dato (utan tid)"
+
+#: db/models/fields/__init__.py:585
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Oppgje ein gyldig dato på forma ÅÅÅÅ-MM-DD."
+
+#: db/models/fields/__init__.py:586
+#, python-format
+msgid "Invalid date: %s"
+msgstr "Ugyldig dato: %s"
+
+#: db/models/fields/__init__.py:667
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
+msgstr "Oppgje dato og tid på forma ÅÅÅÅ-MM-DD TT:MM[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Dato (med tid)"
+
+#: db/models/fields/__init__.py:735
+msgid "This value must be a decimal number."
+msgstr "Verdien må vere eit desimaltall."
+
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Desimaltall"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "E-postadresse"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Filsti"
+
+#: db/models/fields/__init__.py:822
+msgid "This value must be a float."
+msgstr "Verdien må vere eit flyttall."
+
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "Flyttall"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr ""
+
+#: db/models/fields/__init__.py:912
+msgid "This value must be either None, True or False."
+msgstr "Verdien må vere None, True eller False."
+
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Boolsk (True, False eller None)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Tekst"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Tid"
+
+#: db/models/fields/__init__.py:1025
+msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
+msgstr "Oppgje tida på forma TT:MM[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "XML-tekst"
+
+#: db/models/fields/related.py:799
+#, fuzzy, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "%(name)s-objekt med primærnøkkelen %(key)r finst ikkje."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr ""
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr ""
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr ""
+
+#: db/models/fields/related.py:1000
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"Hald nede \"Control\", eller \"Command\" på ein Mac, for å velge meir enn "
+"éin."
+
+#: db/models/fields/related.py:1061
+#, python-format
+msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "Oppgje gyldige %(self)s-ID-ar. Verdien %(value)r er ugyldig."
+msgstr[1] "Oppgje gyldige %(self)s-ID-ar. Verdiane %(value)r er ugyldige."
+
+#: forms/fields.py:65
+msgid "This field is required."
+msgstr "Feltet er påkravd."
+
+#: forms/fields.py:204
+msgid "Enter a whole number."
+msgstr "Oppgje eit heiltall."
+
+#: forms/fields.py:235 forms/fields.py:256
+msgid "Enter a number."
+msgstr "Oppgje eit tall."
+
+#: forms/fields.py:259
+#, python-format
+msgid "Ensure that there are no more than %s digits in total."
+msgstr "Verdien kan ikkje ha meir enn %s siffer totalt."
+
+#: forms/fields.py:260
+#, python-format
+msgid "Ensure that there are no more than %s decimal places."
+msgstr "Verdien kan ikkie ha meir enn %s desimalar."
+
+#: forms/fields.py:261
+#, python-format
+msgid "Ensure that there are no more than %s digits before the decimal point."
+msgstr "Verdien kan ikkje ha meir enn %s siffer framfor komma."
+
+#: forms/fields.py:323 forms/fields.py:838
+msgid "Enter a valid date."
+msgstr "Oppgje ein gyldig dato."
+
+#: forms/fields.py:351 forms/fields.py:839
+msgid "Enter a valid time."
+msgstr "Oppgje eit gyldig tidspunkt."
+
+#: forms/fields.py:377
+msgid "Enter a valid date/time."
+msgstr "Oppgje gyldig dato og tidspunkt."
+
+#: forms/fields.py:435
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Inga fil vart sendt. Sjekk \"encoding\"-typen på skjemaet."
+
+#: forms/fields.py:436
+msgid "No file was submitted."
+msgstr "Inga fil vart sendt."
+
+#: forms/fields.py:437
+msgid "The submitted file is empty."
+msgstr "Fila er tom."
+
+#: forms/fields.py:438
+#, python-format
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr "Filnamnet kan maksimalt ha %(max)d teikn (det har %(length)d)."
+
+#: forms/fields.py:473
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Last opp eit gyldig bilete. Fila du lasta opp var ødelagt eller ikkje eit "
+"bilete."
+
+#: forms/fields.py:596 forms/fields.py:671
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr ""
+"Velg eit gyldig valg. %(value)s er ikkje eit av dei tilgjengelege valga."
+
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
+msgid "Enter a list of values."
+msgstr "Oppgje ei liste med verdiar."
+
+#: forms/formsets.py:298 forms/formsets.py:300
+msgid "Order"
+msgstr "Rekkefølge"
+
+#: forms/models.py:567
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Korriger dupliserte data for %(field)s."
+
+#: forms/models.py:571
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr "Korriger dupliserte data for %(field)s, som må vere unike."
+
+#: forms/models.py:577
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+"Korriger dupliserte data for %(field_name)s, som må vere unike for %(lookup)"
+"s i %(date_field)s."
+
+#: forms/models.py:585
+msgid "Please correct the duplicate values below."
+msgstr "Korriger dei dupliserte verdiane nedanfor."
+
+#: forms/models.py:860
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr ""
+"Primærnøkkelen er ikkje den samme som foreldreinstansen sin primærnøkkel."
+
+#: forms/models.py:926
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr "Velg eit gyldig valg. Valget er ikkje eit av dei tilgjengelege valga."
+
+#: forms/models.py:1008
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr "Velg eit gyldig valg. %s er ikkje eit av dei tilgjengelege valga."
+
+#: forms/models.py:1010
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr "\"%s\" er ikkje ein gyldig verdi for ein primærnøkkel."
+
+#: template/defaultfilters.py:781
+msgid "yes,no,maybe"
+msgstr "ja,nei,kanskje"
+
+#: template/defaultfilters.py:812
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] "%(size)d byte"
+msgstr[1] "%(size)d bytes"
+
+#: template/defaultfilters.py:814
+#, python-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: template/defaultfilters.py:816
+#, python-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: template/defaultfilters.py:817
+#, python-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: utils/dateformat.py:42
+msgid "p.m."
+msgstr "p.m."
+
+#: utils/dateformat.py:43
+msgid "a.m."
+msgstr "a.m."
+
+#: utils/dateformat.py:48
+msgid "PM"
+msgstr "PM"
+
+#: utils/dateformat.py:49
+msgid "AM"
+msgstr "AM"
+
+#: utils/dateformat.py:98
+msgid "midnight"
+msgstr "midnatt"
+
+#: utils/dateformat.py:100
+msgid "noon"
+msgstr "12:00"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "måndag"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "tysdag"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "onsdag"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "torsdag"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "fredag"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "laurdag"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "søndag"
+
+#: utils/dates.py:10
+msgid "Mon"
+msgstr "man"
+
+#: utils/dates.py:10
+msgid "Tue"
+msgstr "tys"
+
+#: utils/dates.py:10
+msgid "Wed"
+msgstr "ons"
+
+#: utils/dates.py:10
+msgid "Thu"
+msgstr "tors"
+
+#: utils/dates.py:10
+msgid "Fri"
+msgstr "fre"
+
+#: utils/dates.py:11
+msgid "Sat"
+msgstr "laur"
+
+#: utils/dates.py:11
+msgid "Sun"
+msgstr "søn"
+
+#: utils/dates.py:18
+msgid "January"
+msgstr "januar"
+
+#: utils/dates.py:18
+msgid "February"
+msgstr "februar"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "March"
+msgstr "mars"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "April"
+msgstr "april"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "May"
+msgstr "mai"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "June"
+msgstr "juni"
+
+#: utils/dates.py:19 utils/dates.py:31
+msgid "July"
+msgstr "juli"
+
+#: utils/dates.py:19
+msgid "August"
+msgstr "august"
+
+#: utils/dates.py:19
+msgid "September"
+msgstr "september"
+
+#: utils/dates.py:19
+msgid "October"
+msgstr "oktober"
+
+#: utils/dates.py:19
+msgid "November"
+msgstr "november"
+
+#: utils/dates.py:20
+msgid "December"
+msgstr "desember"
+
+#: utils/dates.py:23
+msgid "jan"
+msgstr "jan"
+
+#: utils/dates.py:23
+msgid "feb"
+msgstr "feb"
+
+#: utils/dates.py:23
+msgid "mar"
+msgstr "mar"
+
+#: utils/dates.py:23
+msgid "apr"
+msgstr "apr"
+
+#: utils/dates.py:23
+msgid "may"
+msgstr "mai"
+
+#: utils/dates.py:23
+msgid "jun"
+msgstr "jun"
+
+#: utils/dates.py:24
+msgid "jul"
+msgstr "jul"
+
+#: utils/dates.py:24
+msgid "aug"
+msgstr "aug"
+
+#: utils/dates.py:24
+msgid "sep"
+msgstr "sep"
+
+#: utils/dates.py:24
+msgid "oct"
+msgstr "okt"
+
+#: utils/dates.py:24
+msgid "nov"
+msgstr "nov"
+
+#: utils/dates.py:24
+msgid "dec"
+msgstr "des"
+
+#: utils/dates.py:31
+msgid "Jan."
+msgstr "jan."
+
+#: utils/dates.py:31
+msgid "Feb."
+msgstr "feb."
+
+#: utils/dates.py:32
+msgid "Aug."
+msgstr "aug."
+
+#: utils/dates.py:32
+msgid "Sept."
+msgstr "sept."
+
+#: utils/dates.py:32
+msgid "Oct."
+msgstr "okt."
+
+#: utils/dates.py:32
+msgid "Nov."
+msgstr "nov."
+
+#: utils/dates.py:32
+msgid "Dec."
+msgstr "des."
+
+#: utils/text.py:130
+msgid "or"
+msgstr "eller"
+
+#: utils/timesince.py:21
+msgid "year"
+msgid_plural "years"
+msgstr[0] "år"
+msgstr[1] "år"
+
+#: utils/timesince.py:22
+msgid "month"
+msgid_plural "months"
+msgstr[0] "månad"
+msgstr[1] "månadar"
+
+#: utils/timesince.py:23
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "veke"
+msgstr[1] "veker"
+
+#: utils/timesince.py:24
+msgid "day"
+msgid_plural "days"
+msgstr[0] "dag"
+msgstr[1] "dagar"
+
+#: utils/timesince.py:25
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] "time"
+msgstr[1] "timar"
+
+#: utils/timesince.py:26
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "minutt"
+msgstr[1] "minuttar"
+
+#: utils/timesince.py:45
+msgid "minutes"
+msgstr "minuttar"
+
+#: utils/timesince.py:50
+#, python-format
+msgid "%(number)d %(type)s"
+msgstr "%(number)d %(type)s"
+
+#: utils/timesince.py:56
+#, python-format
+msgid ", %(number)d %(type)s"
+msgstr ", %(number)d %(type)s"
+
+#: utils/translation/trans_real.py:512
+msgid "DATE_FORMAT"
+msgstr "j. F Y"
+
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j. F Y H:i"
+
+#: utils/translation/trans_real.py:514
+msgid "TIME_FORMAT"
+msgstr "H:i"
+
+#: utils/translation/trans_real.py:535
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:536
+msgid "MONTH_DAY_FORMAT"
+msgstr "j. F"
+
+#: views/generic/create_update.py:115
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s vart oppretta."
+
+#: views/generic/create_update.py:158
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s vart oppdatert."
+
+#: views/generic/create_update.py:201
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s vart sletta."
+
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "Ei eller fleire %(fieldname)s i %(name)s: %(obj)s"
+
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "Ein eller fleire %(fieldname)s i %(name)s:"
+
+#~ msgid "Old password:"
+#~ msgstr "Gammalt passord:"
+
+#~ msgid "Relation to parent model"
+#~ msgstr "Relasjon til foreldermodell"
+
+#~ msgid "Add user"
+#~ msgstr "Opprett ny brukar"
+
+#~ msgid "Comment moderation queue"
+#~ msgstr "Kommentarmoderasjonskø"
+
+#~ msgid "No comments to moderate"
+#~ msgstr "Ingen kommentarar å moderere"
+
+#~ msgid "Email"
+#~ msgstr "E-post"
+
+#~ msgid "Authenticated?"
+#~ msgstr "Godkjend?"
+
+#~ msgid "IP Address"
+#~ msgstr "IP-adresse"
+
+#~ msgid "Date posted"
+#~ msgstr "Dato lagt inn"
+
+#~ msgid "yes"
+#~ msgstr "ja"
+
+#~ msgid "no"
+#~ msgstr "nei"
Binary file web/lib/django/conf/locale/nn/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/nn/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,126 @@
+# translation of djangojs.po to norwegian nynorsk
+# Copyright (C) 2005 and beyond
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-28 17:42+0200\n"
+"PO-Revision-Date: 2010-03-04 12:13+0200\n"
+"Last-Translator: Håvard Grimelid\n"
+"Language-Team: Norsk <no@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:37
+#, perl-format
+msgid "Available %s"
+msgstr "Tilgjengelege %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:45
+msgid "Choose all"
+msgstr "Velg alle"
+
+#: contrib/admin/media/js/SelectFilter2.js:50
+msgid "Add"
+msgstr "Ny"
+
+#: contrib/admin/media/js/SelectFilter2.js:52
+msgid "Remove"
+msgstr "Slett"
+
+#: contrib/admin/media/js/SelectFilter2.js:57
+#, perl-format
+msgid "Chosen %s"
+msgstr "Valde %s"
+
+#: contrib/admin/media/js/SelectFilter2.js:58
+msgid "Select your choice(s) and click "
+msgstr "Velg valet og klikk "
+
+#: contrib/admin/media/js/SelectFilter2.js:63
+msgid "Clear all"
+msgstr "Fjern alle"
+
+#: contrib/admin/media/js/actions.js:17
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/media/js/calendar.js:24
+#: contrib/admin/media/js/dateparse.js:32
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+"Januar Februar Mars April Mai Juni Juli August September Oktober November "
+"Desember"
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr "S M T O T F L"
+
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Vis"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Skjul"
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Søndag Måndag Tysdag Onsdag Torsdag Fredag Laurdag"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Now"
+msgstr "No"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
+msgid "Clock"
+msgstr "Klokke"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+msgid "Choose a time"
+msgstr "Velg eit klokkeslett"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
+msgid "Midnight"
+msgstr "Midnatt"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
+msgid "6 a.m."
+msgstr "06:00"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+msgid "Noon"
+msgstr "12:00"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
+msgid "Today"
+msgstr "I dag"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
+msgid "Calendar"
+msgstr "Kalender"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
+msgid "Yesterday"
+msgstr "I går"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
+msgid "Tomorrow"
+msgstr "I morgon"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/nn/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,34 @@
+DATE_FORMAT = 'j. F Y'
+TIME_FORMAT = 'H:i'
+DATETIME_FORMAT = 'j. F Y H:i'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'd.m.Y'
+SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+FIRST_DAY_OF_WEEK = 1 # Monday
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%j.%m.%Y', '%j.%m.%y', # '2006-10-25', '25.10.2006', '25.10.06'
+    '%Y-%m-%j',                         # '2006-10-25',
+    # '%j. %b %Y', '%j %b %Y',            # '25. okt 2006', '25 okt 2006'
+    # '%j. %b. %Y', '%j %b. %Y',          # '25. okt. 2006', '25 okt. 2006'
+    # '%j. %B %Y', '%j %B %Y',            # '25. oktober 2006', '25 oktober 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',     # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+    '%Y-%m-%j',              # '2006-10-25'
+    '%j.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
+    '%j.%m.%Y %H:%M',        # '25.10.2006 14:30'
+    '%j.%m.%Y',              # '25.10.2006'
+    '%j.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
+    '%j.%m.%y %H:%M',        # '25.10.06 14:30'
+    '%j.%m.%y',              # '25.10.06'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/no/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/no/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/no/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,6 @@
-# translation of django.po to norwegian
-# Copyright (C) 2005 and beyond
+# This is the *old* Norwegian (Bokmål) translation of Django
+# For future updates please use the translation in the "nb" directory.
+# Copyright (C) 2005-2010
 # This file is distributed under the same license as the Django package.
 #
 msgid ""
@@ -7,7 +8,7 @@
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2006-05-16 10:12+0200\n"
-"PO-Revision-Date: 2009-07-24 15:44+0200\n"
+"PO-Revision-Date: 2010-03-11 14:22+0100\n"
 "Last-Translator: Christian Mikalsen and Jon Lønne\n"
 "Language-Team: Norsk <no@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -19,215 +20,235 @@
 msgstr "Arabisk"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "Bulgarsk"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "Bengalsk"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Bulgarsk"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "Katalansk"
+msgid "Bosnian"
+msgstr "Bosnisk"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "Katalansk"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "Tsjekkisk"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "Walisisk"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "Dansk"
+msgid "Welsh"
+msgstr "Walisisk"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "Dansk"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "Tysk"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "Gresk"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "Engelsk"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "Spansk"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Estisk"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "Argentinsk spansk"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "Estisk"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "Baskisk"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
 msgid "Persian"
 msgstr "Persisk"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
 msgid "Finnish"
 msgstr "Finsk"
 
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "Fransk"
-
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Irsk"
+msgid "French"
+msgstr "Fransk"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Galisisk"
+msgid "Frisian"
+msgstr "Frisisk"
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Ungarsk"
+msgid "Irish"
+msgstr "Irsk"
 
 #: conf/global_settings.py:64
+msgid "Galician"
+msgstr "Galisisk"
+
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "Hebraisk"
 
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "Hindi"
-
 #: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "Hindi"
+
+#: conf/global_settings.py:67
 msgid "Croatian"
 msgstr "Kroatisk"
 
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "Islandsk"
-
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "Italiensk"
+msgid "Hungarian"
+msgstr "Ungarsk"
 
 #: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "Islandsk"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "Italiensk"
+
+#: conf/global_settings.py:71
 msgid "Japanese"
 msgstr "Japansk"
 
-#: conf/global_settings.py:70
+#: conf/global_settings.py:72
 msgid "Georgian"
 msgstr "Georgisk"
 
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "Koreansk"
-
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
 msgid "Khmer"
 msgstr "Khmer"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
 msgid "Kannada"
 msgstr "Kannada"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "Latvisk"
-
 #: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "Litauisk"
+msgid "Korean"
+msgstr "Koreansk"
 
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "Makedonsk"
+msgid "Lithuanian"
+msgstr "Litauisk"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "Nederlandsk"
+msgid "Latvian"
+msgstr "Latvisk"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "Norsk"
+msgid "Macedonian"
+msgstr "Makedonsk"
 
 #: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "Nederlandsk"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "Norsk"
+
+#: conf/global_settings.py:81
 msgid "Polish"
 msgstr "Polsk"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:82
 msgid "Portuguese"
 msgstr "Portugisisk"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
 msgid "Brazilian Portuguese"
 msgstr "Brasiliansk portugisisk"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
 msgid "Romanian"
 msgstr "Rumensk"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
 msgid "Russian"
 msgstr "Russisk"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
 msgid "Slovak"
 msgstr "Slovakisk"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
 msgid "Slovenian"
 msgstr "Slovensk"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
+msgid "Albanian"
+msgstr "Albansk"
+
+#: conf/global_settings.py:89
 msgid "Serbian"
 msgstr "Serbisk"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:90
+msgid "Serbian Latin"
+msgstr "Serbisk latin"
+
+#: conf/global_settings.py:91
 msgid "Swedish"
 msgstr "Svensk"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:92
 msgid "Tamil"
 msgstr "Tamil"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:93
 msgid "Telugu"
 msgstr "Telugu"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:94
 msgid "Thai"
 msgstr "Thai"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:95
 msgid "Turkish"
 msgstr "Tyrkisk"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:96
 msgid "Ukrainian"
 msgstr "Ukrainsk"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "Vietnamesisk"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
-msgstr "Simplifisert kinesisk"
-
-#: conf/global_settings.py:94
+msgstr "Forenklet kinesisk"
+
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "Tradisjonell kinesisk"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Slettet %(count)d %(items)s."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1101
 msgid "Are you sure?"
 msgstr "Er du sikker?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Slett valgte %(verbose_name_plural)s"
@@ -266,19 +287,19 @@
 msgid "This year"
 msgstr "I år"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
 msgid "Yes"
 msgstr "Ja"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
 msgid "No"
 msgstr "Nei"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:470
 msgid "Unknown"
 msgstr "Ukjent"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:19
 msgid "Action:"
 msgstr "Handling:"
 
@@ -310,104 +331,128 @@
 msgid "log entries"
 msgstr "logginnlegg"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:139 contrib/admin/options.py:154
 msgid "None"
 msgstr "Ingen"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:558
 #, python-format
 msgid "Changed %s."
 msgstr "Endret %s."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
+#: contrib/admin/options.py:558 contrib/admin/options.py:568
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:802
+#: forms/models.py:553
 msgid "and"
 msgstr "og"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Opprettet %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:567
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Endret %(list)s for %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Slettet %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:576
 msgid "No fields changed."
 msgstr "Ingen felt endret."
 
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
+#: contrib/admin/options.py:642
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "%(name)s \"%(obj)s\" ble opprettet."
 
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:646 contrib/admin/options.py:679
 msgid "You may edit it again below."
 msgstr "Du kan redigere videre nedenfor."
 
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
+#: contrib/admin/options.py:656 contrib/admin/options.py:689
 #, python-format
 msgid "You may add another %s below."
 msgstr "Du kan opprette ny %s nedenfor."
 
-#: contrib/admin/options.py:634
+#: contrib/admin/options.py:677
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\" ble endret."
 
-#: contrib/admin/options.py:642
+#: contrib/admin/options.py:685
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr "%(name)s \"%(obj)s\" ble endret. Du kan redigere videre nedenfor."
 
-#: contrib/admin/options.py:773
+#: contrib/admin/options.py:743
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr "Du må velge objekter for å utføre handlinger på dem. Ingen objekter "
+"har blitt endret."
+
+#: contrib/admin/options.py:761
+msgid "No action selected."
+msgstr "Ingen handling valgt."
+
+#: contrib/admin/options.py:841
 #, python-format
 msgid "Add %s"
 msgstr "Opprett %s"
 
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
+#: contrib/admin/options.py:867 contrib/admin/options.py:1081
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "%(name)s-objekt med primærnøkkelen %(key)r finnes ikke."
 
-#: contrib/admin/options.py:861
+#: contrib/admin/options.py:932
 #, python-format
 msgid "Change %s"
-msgstr "Rediger %s"
-
-#: contrib/admin/options.py:905
+msgstr "Endre %s"
+
+#: contrib/admin/options.py:977
 msgid "Database error"
 msgstr "Databasefeil"
 
-#: contrib/admin/options.py:941
+#: contrib/admin/options.py:1013
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s %(name)s ble endret."
 msgstr[1] "%(count)s %(name)s ble endret."
 
-#: contrib/admin/options.py:1020
+#: contrib/admin/options.py:1040
+#, python-format
+msgid "of %(count)d selected"
+msgid_plural "of %(count)d selected"
+msgstr[0] "av %(count)d valgt"
+msgstr[1] "av %(count)d valgt"
+
+#: contrib/admin/options.py:1042
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s valgt"
+msgstr[1] "Alle %(total_count)s valgt"
+
+#: contrib/admin/options.py:1094
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)s \"%(obj)s\" ble slettet."
 
-#: contrib/admin/options.py:1057
+#: contrib/admin/options.py:1131
 #, python-format
 msgid "Change history: %s"
 msgstr "Endringshistorikk: %s"
 
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -415,11 +460,11 @@
 "Vennligst angi korrekt brukernavn og passord. Merk at det er forskjell på "
 "små og store bokstaver."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Økten din har tidsavbrutt, vennligst logg inn igjen."
 
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -427,62 +472,52 @@
 "Det ser ut som om nettleseren din ikke støtter informasjonskapsler "
 "(cookies). Vennligst konfigurer nettleseren din og prøv igjen."
 
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Brukernavnet kan ikke inneholde tegnet '@'."
 
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "E-postadressen er ikke brukernavnet ditt, prøv '%s' isteden."
 
-#: contrib/admin/sites.py:367
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Nettstedsadministrasjon"
 
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Logg inn"
 
-#: contrib/admin/sites.py:426
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "%s-administrasjon"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "En eller flere %(fieldname)s i %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "En eller flere %(fieldname)s i %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Dato:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Tid:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Nå:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Endre:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Oppslag"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Legg til ny"
 
@@ -498,16 +533,16 @@
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
 #: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:39
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -544,6 +579,19 @@
 msgid "Go"
 msgstr "Gå"
 
+#: contrib/admin/templates/admin/actions.html:10
+msgid "Click here to select the objects across all pages"
+msgstr "Trykk her for å velge samtlige objekter fra alle sider"
+
+#: contrib/admin/templates/admin/actions.html:10
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Velg alle %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:12
+msgid "Clear selection"
+msgstr "Nullstill valg"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
@@ -556,22 +604,22 @@
 
 #: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Dokumentasjon"
 
 #: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Endre passord"
 
 #: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Logg ut"
 
@@ -583,41 +631,42 @@
 msgid "Django administration"
 msgstr "Django-administrasjon"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Opprett"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Historikk"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
-msgstr "Vis på nettside"
-
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+msgstr "Vis på nettsted"
+
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:68
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Vennligst korriger feilen under."
 msgstr[1] "Vennligst korriger feilene under."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:60
 #, python-format
 msgid "Add %(name)s"
 msgstr "Opprett %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:79
 msgid "Filter"
 msgstr "Filtrering"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:294
 msgid "Delete"
 msgstr "Slett"
 
@@ -664,9 +713,9 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
-"Er du sikker på at du vil slette disse %(object_name)s-objektene? De "
+"Er du sikker på at du vil slette de valgte %(object_name)s-objektene? De "
 "følgende objektene og deres relaterte objekter vil bli slettet:"
 
 #: contrib/admin/templates/admin/filter.html:2
@@ -729,15 +778,9 @@
 msgstr "Bruker"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Handling"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j. F Y H:i"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -783,7 +826,7 @@
 msgid "Save and continue editing"
 msgstr "Lagre og fortsett å redigere"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -791,33 +834,39 @@
 "Skriv først inn brukernavn og passord. Deretter vil du få mulighet til å "
 "endre flere brukerinnstillinger."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Brukernavn"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Passord"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Passord (gjenta)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Skriv inn det samme passordet som ovenfor, for verifisering."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Skriv inn et nytt passord for brukeren <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Passord"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Passord (gjenta)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Skriv inn det samme passordet som ovenfor, for verifisering."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:53
+#: contrib/admin/templates/admin/edit_inline/tabular.html:99
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Legg til ny %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:56
+#: contrib/admin/templates/admin/edit_inline/tabular.html:102
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Fjern"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Slette?"
@@ -831,9 +880,9 @@
 msgstr "Logg inn igjen"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Endre passord"
 
@@ -846,7 +895,7 @@
 msgid "Your password was changed."
 msgstr "Ditt passord ble endret."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -854,21 +903,17 @@
 "Venligst oppgi ditt gamle passord av sikkerhetsgrunner. Oppgi deretter ditt "
 "nye passord to ganger, slik at vi kan kontrollere at det er korrekt."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Gammelt passord:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nytt passord:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Gjenta nytt passord:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Gammelt passord"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Nytt passord"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Endre passord"
@@ -907,6 +952,14 @@
 "Venligst oppgi ditt nye passord to ganger, for å sikre at du oppgir det "
 "korrekt."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Nytt passord:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Gjenta nytt passord:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Passordet ble ikke nullstilt"
@@ -976,7 +1029,7 @@
 msgid "Reset my password"
 msgstr "Nullstill mitt passord"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:240
 msgid "All dates"
 msgstr "Alle datoer"
 
@@ -988,13 +1041,13 @@
 #: contrib/admin/views/main.py:70
 #, python-format
 msgid "Select %s to change"
-msgstr "Velg %s du ønsker å redigere"
-
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+msgstr "Velg %s du ønsker å endre"
+
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
-msgstr "nettside"
-
-#: contrib/admin/views/template.py:39
+msgstr "nettsted"
+
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "mal"
 
@@ -1054,89 +1107,7 @@
 msgid "Fields on %s objects"
 msgstr "Felter på %s-objekter"
 
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Heltall"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Boolsk (True eller False)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Tekst (opp til %(max_length)s tegn)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Heltall adskilt med komma"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Dato (uten tid)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Dato (med tid)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Desimaltall"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "E-postadresse"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Filsti"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Flyttall"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "IP-adresse"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolsk (True, False eller None)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Relasjon til foreldermodell"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Telefonnummer"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Tekst"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Tid"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "Nettadresse"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stat (i USA, to store bokstaver)"
-
 #: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "XML-tekst"
-
-#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s ser ikke ut til å være et urlpattern-objekt"
@@ -1208,66 +1179,62 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Samme som over, men åpner administrasjonssiden i et nytt vindu."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Personlig informasjon"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Rettigheter"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Viktige datoer"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Grupper"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Opprett ny bruker"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Passordet er endret."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Endre passord: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Brukernavn"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
 msgstr ""
-"Påkrevet. 30 tegn eller færre. Kun alfanumeriske tegn (bokstaver, tall og "
-"understreker)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Feltet kan kun inneholde bokstaver, nummer og understreker."
+"Påkrevet. 30 tegn eller færre. Kun bokstaver, tall og @/./+/-/_."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Verdien kan kun inneholde bokstaver, tall og @/./+/-/_."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Passordbekreftelse"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Det eksisterer allerede en bruker med dette brukernavnet."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "De to passordfeltene er ikke like."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Denne kontoen er inaktiv."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1275,11 +1242,11 @@
 "Din nettleser ser ikke ut til å støtte informasjonskapsler (cookies). "
 "Informasjonskapsler er påkrevet for å logge inn."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "E-post"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1287,72 +1254,70 @@
 "Den oppgitte e-postadressen er ikke registrert hos oss. Er du sikker på at "
 "du er registrert?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Nullstilling av passord på %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Nytt passord"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Bekreft nytt passord"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Gammelt passord"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr "Ditt gamle passord er galt. Vennligst prøv igjen."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "navn"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "kodenavn"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "rettighet"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "rettigheter"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "gruppe"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "grupper"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "brukernavn"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Påkrevet. 30 tegn eller færre. Bokstaver, tall og @/./+/-/_."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "fornavn"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "etternavn"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "e-postadresse"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "passord"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1360,45 +1325,45 @@
 "Bruk '[algo]$[salt]$[hexdigest]' eller <a href=\"password/\">endre passord-"
 "skjemaet</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "administrasjonsstatus"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Angir at brukeren kan logge inn på denne administrasjonssiden."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "aktiv"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
 msgstr ""
 "Angir at denne brukeren er aktiv. Avmerk denne i stedet for å slette kontoen."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "superbruker"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
 msgstr ""
 "Angir at denne brukeren har alle rettigheter uten å eksplisitt sette de."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "siste innlogging"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "registrert"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1406,43 +1371,75 @@
 "I tillegg til de rettighetene som blir angitt manuelt, får brukeren også "
 "rettighetene til gruppene han/hun er med i."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "Brukerrettigheter"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "bruker"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "brukere"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "melding"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Logget ut"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:416
 msgid "Enter a valid e-mail address."
 msgstr "Oppgi en gyldig e-postadresse."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Innhold"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metadata"
 
+#: contrib/comments/admin.py:39
+msgid "flagged"
+msgstr "flagget"
+
+#: contrib/comments/admin.py:40
+msgid "Flag selected comments"
+msgstr "Flagg valgte kommentarer"
+
+#: contrib/comments/admin.py:43
+msgid "approved"
+msgstr "godkjent"
+
+#: contrib/comments/admin.py:44
+msgid "Approve selected comments"
+msgstr "Tillat valgte kommentarer"
+
+#: contrib/comments/admin.py:47
+msgid "removed"
+msgstr "fjernet"
+
+#: contrib/comments/admin.py:48
+msgid "Remove selected comments"
+msgstr "Fjern valgte kommentarer"
+
+#: contrib/comments/admin.py:60
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 kommentar ble %(action)s."
+msgstr[1] "%(count)s kommentarer ble %(action)s."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
-msgstr "%(site_name)s - kommentarer"
+msgstr "%(site_name)s kommentarer"
 
 #: contrib/comments/feeds.py:23
 #, python-format
@@ -1450,7 +1447,6 @@
 msgstr "Siste kommentarer fra %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Navn"
 
@@ -1458,25 +1454,29 @@
 msgid "Email address"
 msgstr "E-postadresse"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1121
+msgid "URL"
+msgstr "Nettadresse"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Kommentar"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Pass munnen din! Ordet %s er ikke tillatt her."
 msgstr[1] "Pass munnen din! Ordene %s er ikke tillatt her."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr ""
 "Hvis du oppgir noe i dette feltet, vil kommentaren bli behandlet som spam"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "innholdstype"
 
@@ -1505,6 +1505,10 @@
 msgid "date/time submitted"
 msgstr "dato/tid for innsendelse"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:916
+msgid "IP address"
+msgstr "IP-adresse"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "er tilgjengelig for alle"
@@ -1586,7 +1590,6 @@
 msgstr "Gjør denne kommentaren offentlig?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Godkjenn"
 
@@ -1611,11 +1614,6 @@
 msgid "Really remove this comment?"
 msgstr "Fjerne denne kommentaren?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Fjern"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Takk for fjerningen"
@@ -1646,39 +1644,6 @@
 msgid "Preview"
 msgstr "Forhåndsvisning"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Kommentarmoderasjonskø"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Ingen kommentarer å moderere"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "E-post"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Godkjent?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP-adresse"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Dato lagt inn"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "ja"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "nei"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Takk for kommentar"
@@ -1706,11 +1671,11 @@
 msgid "or make changes"
 msgstr "eller gjør endringer"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "python-modell klassenavn"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "innholdstyper"
 
@@ -1772,7 +1737,7 @@
 msgid "flat pages"
 msgstr "flatsider"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1780,6 +1745,38 @@
 "Vi beklager, men dette skjemaet har tidsavbrutt. Vennligst fyll ut skjemaet "
 "fra denne siden."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:269
+msgid "Point"
+msgstr "Punkt"
+
+#: contrib/gis/db/models/fields.py:273
+msgid "Line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:277
+msgid "Polygon"
+msgstr "Polygon"
+
+#: contrib/gis/db/models/fields.py:281
+msgid "Multi-point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:285
+msgid "Multi-line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:289
+msgid "Multi polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:293
+msgid "Geometry collection"
+msgstr ""
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Ingen geometriverdi oppgitt."
@@ -1884,25 +1881,25 @@
 msgid "yesterday"
 msgstr "i går"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Oppgi et postnummer på formen NNNN eller ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Feltet krever kun tall."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Feltet krever 7 eller 8 siffer."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Oppgi gyldig CUIT på formen XX-XXXXXXXX-X or XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "Ugyldig CUIT."
 
@@ -1942,8 +1939,8 @@
 msgid "Vienna"
 msgstr "Wien"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Oppgi et postnummer på formen XXXX."
 
@@ -1951,19 +1948,19 @@
 msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
 msgstr "Oppgi et gyldig Østerrisk personnummer på formen XXXX XXXXXX."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Oppgi et firesifret postnummer."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Oppgi et postnummer på formen XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Telefonnummeret må være på formen XX-XXXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
@@ -1971,27 +1968,27 @@
 "Velg en gyldig brasiliansk stat. Den staten er ikke et av de tilgjengelige "
 "valgene."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Ugyldig CPF-nummer."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Feltet krever maksimum 11 eller 14 siffer."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Ugyldig CNPJ-nummer."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "Feltet krever minst 14 siffer."
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Oppgi et postnummer på formen XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr "Oppgi et gyldig kanadisk personnummer på formen XXX-XXX-XXX."
 
@@ -2099,7 +2096,7 @@
 msgid "Zurich"
 msgstr "Zürich"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2107,15 +2104,15 @@
 "Oppgi et gyldig sveitsisk identitets- eller passnummer på formen X1234567<0 "
 "eller 1234567890."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Oppgi et gyldig chilensk RUT."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Oppgi et gyldig chilensk RUT på formen XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "Den chilenske RUT er ugyldig."
 
@@ -2175,23 +2172,23 @@
 msgid "Moravian-Silesian Region"
 msgstr "Mähren-Schlesien region"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Oppgi et postnummer på formen XXXXX or XXX XX."
 
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Oppgi et fødselsnummer på formen XXXXXX/XXXX eller XXXXXXXXXX."
-
 #: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr ""
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Oppgi et fødselsnummer på formen XXXXXX/XXXX eller XXXXXXXXXX."
 
 #: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Oppgi et gyldig fødselsnummer."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Oppgi et gyldig IC-nummer."
 
@@ -2259,12 +2256,12 @@
 msgid "Thuringia"
 msgstr "Thüringen"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Oppgi et postnummer på formen XXXXX."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2539,11 +2536,11 @@
 msgid "Valencian Community"
 msgstr "Valenciana"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Oppgi et gyldig postnummer på formen 01XXX - 52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
@@ -2551,61 +2548,520 @@
 "Oppgi et gyldig telefonnummer på et av følgende formater: 6XXXXXXXX, "
 "8XXXXXXXX eller 9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Oppgi et gyldig NIF, NIE eller CIF."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Oppgi et gyldig NIF eller NIE."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Ugyldig kontrollsum for NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Ugyldig kontrollsum for NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Ugyldig kontrollsum for CIF."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr "Oppgi et gyldig kontonummer på formen XXXX-XXXX-XX-XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Ugyldig kontrollsum for kontonummer."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Oppgi et gyldig finsk personnummer."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Telefonnummeret må være på formen 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Oppgi et gyldig postnummer."
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Oppgi et gyldig telefonnummer."
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Oppgi et gyldig kjøretøyregistreringsnummer."
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Oppgi et gyldig NIK/KTP-nummer."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+#, fuzzy
+msgid "Pati"
+msgstr "aktiv"
+
+#: contrib/localflavor/id/id_choices.py:91
+#, fuzzy
+msgid "Surabaya"
+msgstr "lørdag"
+
+#: contrib/localflavor/id/id_choices.py:92
+#, fuzzy
+msgid "Madura"
+msgstr "Madrid"
+
+#: contrib/localflavor/id/id_choices.py:93
+#, fuzzy
+msgid "Malang"
+msgstr "Málaga"
+
+#: contrib/localflavor/id/id_choices.py:94
+#, fuzzy
+msgid "Jember"
+msgstr "november"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+#, fuzzy
+msgid "Garut"
+msgstr "Glarus"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+#, fuzzy
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+#, fuzzy
+msgid "Armagh"
+msgstr "Aragón"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+#, fuzzy
+msgid "Cavan"
+msgstr "Katalansk"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+#, fuzzy
+msgid "Clare"
+msgstr "Cáceres"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+#, fuzzy
+msgid "Cork"
+msgstr "eller"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+#, fuzzy
+msgid "Derry"
+msgstr "februar"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+#, fuzzy
+msgid "Donegal"
+msgstr "én"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+#, fuzzy
+msgid "Down"
+msgstr "Devon"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+#, fuzzy
+msgid "Dublin"
+msgstr "Lublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+#, fuzzy
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+#, fuzzy
+msgid "Galway"
+msgstr "Galicia"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+#, fuzzy
+msgid "Kerry"
+msgstr "februar"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+#, fuzzy
+msgid "Louth"
+msgstr "Logg ut"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+#, fuzzy
+msgid "Mayo"
+msgstr "mai"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+#, fuzzy
+msgid "Meath"
+msgstr "Metadata"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+#, fuzzy
+msgid "Monaghan"
+msgstr "Logg inn igjen"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+#, fuzzy
+msgid "Roscommon"
+msgstr "kommentar"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+#, fuzzy
+msgid "Sligo"
+msgstr "Shiga"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+#, fuzzy
+msgid "Tyrone"
+msgstr "Tirol"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+#, fuzzy
+msgid "Westmeath"
+msgstr "West Pomerania"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+#, fuzzy
+msgid "Wexford"
+msgstr "ons"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Oppgi et postnummer på formen XXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr "Oppgi et gyldig islandsk identifikasjonsnummer på formen XXXXXX-XXXX."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "Det islandsk identifikasjonsnummer er ugyldig."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Oppgi et gyldig postnummer."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Oppgi et gyldig italiensk personnummer."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Oppgi et gyldig VAT-nummer."
 
@@ -2801,6 +3257,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Oppgi et gyldig Kuwaiti Civil ID-nummer."
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2929,15 +3389,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Oppgi et gyldig postnummer."
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Oppgi et gyldig telefonnummer."
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Oppgi et gyldig SoFi-nummer."
 
@@ -2989,15 +3445,15 @@
 msgid "Zuid-Holland"
 msgstr "Zuid-Holland"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Oppgi et gyldig norsk personnummer."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Feltet krever åtte siffer."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Feltet krever 11 siffer."
 
@@ -3094,6 +3550,14 @@
 msgid "West Pomerania"
 msgstr "West Pomerania"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Oppgi et postnummer på formen XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "Telefonnummer må ha 9 siffer, eller starte med + eller 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Oppgi et gyldig CIF."
@@ -3114,6 +3578,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Oppgi et postnummer på formen XXXXXX."
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Oppgi et gyldig svensk organisasjonsnummer."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Oppgi et gyldig svensk personnummer."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Oppgi et gyldig svensk postnummer på formen XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Stockholm"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Banska Bystrica"
@@ -3746,20 +4310,44 @@
 msgid "Wales"
 msgstr "Wales"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Oppgi et postnummer på formen XXXXX eller XXXXX-XXXX."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Telefonnummeret må være på formen XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr ""
 "Oppgi et gyldig amerikansik Social Security-nummer på formen XXX-XX-XXXX."
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr ""
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Stat (i USA, to store bokstaver)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Telefonnummer"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "Oppgi gyldig CI på formen X.XXX.XXX-X,XXXXXXX-X eller XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Oppgi et gyldig CI-nummer."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Oppgi et gyldig South African ID-nummer."
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Oppgi et gyldig postnummer."
 
@@ -3799,6 +4387,10 @@
 msgid "Western Cape"
 msgstr "Western Cape"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "\"lazy\" melding"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "omadresser fra"
@@ -3861,60 +4453,217 @@
 
 #: contrib/sites/models.py:39
 msgid "sites"
-msgstr "nettsider"
-
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
+msgstr "nettsteder"
+
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Oppgi en gyldig verdi."
+
+#: core/validators.py:87 forms/fields.py:517
+msgid "Enter a valid URL."
+msgstr "Oppgi en gyldig nettadresse."
+
+#: core/validators.py:89 forms/fields.py:518
+msgid "This URL appears to be a broken link."
+msgstr "Nettadressen fører til en side som ikke eksisterer."
+
+#: core/validators.py:123 forms/fields.py:861
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Oppgi en gyldig 'slug' bestående av bokstaver, nummer, understreker eller "
+"bindestreker."
+
+#: core/validators.py:126 forms/fields.py:854
+msgid "Enter a valid IPv4 address."
+msgstr "Oppgi en gyldig IPv4-adresse."
+
+#: core/validators.py:129 db/models/fields/__init__.py:598
+msgid "Enter only digits separated by commas."
+msgstr "Oppgi kun tall adskilt med komma."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Verdien må være %(limit_value)s (den er %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:196 forms/fields.py:246
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Verdien må være mindre enn eller lik som %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:197 forms/fields.py:247
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Verdien må være større enn eller lik som %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr "Verdien må minimum ha %(limit_value)d tegn (den har %(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr "Verdien kan maksimalt ha %(limit_value)d tegn (den er %(show_value)d)."
+
+#: db/models/base.py:780
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s må være unik for %(date_field)s %(lookup)s."
+
+#: db/models/base.py:795 db/models/base.py:803
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s med %(field_label)s finnes allerede."
+
+#: db/models/fields/__init__.py:62
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Verdien %r er ikke et gyldig valg."
+
+#: db/models/fields/__init__.py:63
+msgid "This field cannot be null."
+msgstr "Feltet kan ikke være tomt."
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be blank."
+msgstr "Feltet kan ikke være blankt."
+
+#: db/models/fields/__init__.py:69
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Felt av typen: %(field_type)s"
+
+#: db/models/fields/__init__.py:477 db/models/fields/__init__.py:878
+#: db/models/fields/__init__.py:981 db/models/fields/__init__.py:992
+#: db/models/fields/__init__.py:1019
+msgid "Integer"
+msgstr "Heltall"
+
+#: db/models/fields/__init__.py:481 db/models/fields/__init__.py:876
 msgid "This value must be an integer."
 msgstr "Verdien må være et heltall."
 
-#: db/models/fields/__init__.py:388
+#: db/models/fields/__init__.py:516
 msgid "This value must be either True or False."
 msgstr "Verdien må være True eller False."
 
-#: db/models/fields/__init__.py:427
-msgid "This field cannot be null."
-msgstr "Feltet kan ikke være tomt."
-
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Oppgi kun tall adskilt med komma."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:518
+msgid "Boolean (Either True or False)"
+msgstr "Boolsk (True eller False)"
+
+#: db/models/fields/__init__.py:565 db/models/fields/__init__.py:1002
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Tekst (opp til %(max_length)s tegn)"
+
+#: db/models/fields/__init__.py:593
+msgid "Comma-separated integers"
+msgstr "Heltall adskilt med komma"
+
+#: db/models/fields/__init__.py:607
+msgid "Date (without time)"
+msgstr "Dato (uten tid)"
+
+#: db/models/fields/__init__.py:611
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Oppgi en gyldig dato på formen ÅÅÅÅ-MM-DD."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:612
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Ugyldig dato: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:693
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr "Oppgi dato og tid på formen ÅÅÅÅ-MM-DD TT:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:695
+msgid "Date (with time)"
+msgstr "Dato (med tid)"
+
+#: db/models/fields/__init__.py:761
 msgid "This value must be a decimal number."
 msgstr "Verdien må være et desimaltall."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:763
+msgid "Decimal number"
+msgstr "Desimaltall"
+
+#: db/models/fields/__init__.py:818
+msgid "E-mail address"
+msgstr "E-postadresse"
+
+#: db/models/fields/__init__.py:825 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Filsti"
+
+#: db/models/fields/__init__.py:848
 msgid "This value must be a float."
 msgstr "Verdien må være et flyttall."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:850
+msgid "Floating point number"
+msgstr "Flyttall"
+
+#: db/models/fields/__init__.py:903
+msgid "Big (8 byte) integer"
+msgstr "Stort (8 byte) heltall"
+
+#: db/models/fields/__init__.py:932
 msgid "This value must be either None, True or False."
 msgstr "Verdien må være None, True eller False."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:934
+msgid "Boolean (Either True, False or None)"
+msgstr "Boolsk (True, False eller None)"
+
+#: db/models/fields/__init__.py:1025
+msgid "Text"
+msgstr "Tekst"
+
+#: db/models/fields/__init__.py:1041
+msgid "Time"
+msgstr "Tid"
+
+#: db/models/fields/__init__.py:1045
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Oppgi tiden på formen TT:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/__init__.py:1129
+msgid "XML text"
+msgstr "XML-tekst"
+
+#: db/models/fields/related.py:755
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Modell %(model)s med primærnøkkelen %(pk)r finnes ikke."
+
+#: db/models/fields/related.py:757
+msgid "Foreign Key (type determined by related field)"
+msgstr "Fremmednøkkel (type bestemmes av relatert felt)"
+
+#: db/models/fields/related.py:879
+msgid "One-to-one relationship"
+msgstr "En-til-en-relasjon"
+
+#: db/models/fields/related.py:939
+msgid "Many-to-many relationship"
+msgstr "Mange-til-mange-relasjon"
+
+#: db/models/fields/related.py:959
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Hold nede \"Control\", eller \"Command\" på en Mac, for å velge mer enn en."
 
-#: db/models/fields/related.py:894
+#: db/models/fields/related.py:1020
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3922,88 +4671,64 @@
 msgstr[0] "Oppgi gyldige %(self)s-ID-er. Verdien %(value)r er ugyldig."
 msgstr[1] "Oppgi gyldige %(self)s-ID-er. Verdiene %(value)r er ugyldige."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Feltet er påkrevet."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Oppgi en gyldig verdi."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Verdien kan maksimalt ha %(max)d tegn (den er %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "Verdien må minimum ha %(min)d tegn (den er %(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:195
 msgid "Enter a whole number."
 msgstr "Oppgi et heltall."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Verdien må være mindre enn eller lik %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Verdien må være større enn eller lik %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:225 forms/fields.py:245
 msgid "Enter a number."
 msgstr "Oppgi et tall."
 
-#: forms/fields.py:227
+#: forms/fields.py:248
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Verdien kan ikke ha mer enn %s siffer totalt."
 
-#: forms/fields.py:228
+#: forms/fields.py:249
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Verdien kan ikke ha mer enn %s desimaler."
 
-#: forms/fields.py:229
+#: forms/fields.py:250
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Verdien kan ikke ha mer enn %s siffer foran komma."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:311 forms/fields.py:826
 msgid "Enter a valid date."
 msgstr "Oppgi en gyldig dato."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:339 forms/fields.py:827
 msgid "Enter a valid time."
 msgstr "Oppgi et gyldig tidspunkt."
 
-#: forms/fields.py:361
+#: forms/fields.py:365
 msgid "Enter a valid date/time."
 msgstr "Oppgi gyldig dato og tidspunkt."
 
-#: forms/fields.py:447
+#: forms/fields.py:423
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "Ingen fil ble sendt. Sjekk \"encoding\"-typen på skjemaet."
 
-#: forms/fields.py:448
+#: forms/fields.py:424
 msgid "No file was submitted."
 msgstr "Ingen fil ble sendt."
 
-#: forms/fields.py:449
+#: forms/fields.py:425
 msgid "The submitted file is empty."
 msgstr "Filen er tom."
 
-#: forms/fields.py:450
+#: forms/fields.py:426
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
 msgstr "Filnavnet kan maksimalt ha %(max)d tegn (det har %(length)d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:461
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4011,111 +4736,82 @@
 "Last opp et gyldig bilde. Filen du lastet opp var ødelagt eller ikke et "
 "bilde."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Oppgi en gyldig nettadresse."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Nettadressen fører til en side som ikke eksisterer."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:584 forms/fields.py:659
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Velg et gyldig valg. %(value)s er ikke et av de tilgjengelige valgene."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
+#: forms/fields.py:660 forms/fields.py:722 forms/models.py:986
 msgid "Enter a list of values."
 msgstr "Oppgi en liste med verdier."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Oppgi en gyldig IPv4-adresse."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Oppgi en gyldig 'slug' bestående av bokstaver, nummer, understreker eller "
-"bindestreker."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:290 forms/formsets.py:292
 msgid "Order"
 msgstr "Rekkefølge"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s må være unik for %(date_field)s %(lookup)s."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s med %(field_label)s finnes allerede."
-
-#: forms/models.py:594
+#: forms/models.py:547
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Vennligst korriger duplisert data for %(field)s."
 
-#: forms/models.py:598
+#: forms/models.py:551
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr "Vennligst korriger duplisert data for %(field)s, som må være unik."
 
-#: forms/models.py:604
+#: forms/models.py:557
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
 "for the %(lookup)s in %(date_field)s."
 msgstr ""
-"Vennligst korriger duplisert data for %(field_name)s, som må være unik for "
-"%(lookup)s i %(date_field)s."
-
-#: forms/models.py:612
+"Vennligst korriger duplisert data for %(field_name)s, som må være unik for %"
+"(lookup)s i %(date_field)s."
+
+#: forms/models.py:565
 msgid "Please correct the duplicate values below."
 msgstr "Vennligst korriger de dupliserte verdiene nedenfor."
 
-#: forms/models.py:867
+#: forms/models.py:839
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr "Primærnøkkelen er ikke den samme som foreldreinstansens primærnøkkel."
 
-#: forms/models.py:930
+#: forms/models.py:905
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Velg et gyldig valg. Valget er ikke et av de tilgjengelige valgene."
 
-#: forms/models.py:1004
+#: forms/models.py:987
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Velg et gyldig valg. %s er ikke et av de tilgjengelige valgene."
 
-#: forms/models.py:1006
+#: forms/models.py:989
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" er ikke en gyldig verdi for en primærnøkkel."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "ja,nei,kanskje"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d byte"
 msgstr[1] "%(size)d bytes"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4324,7 +5020,7 @@
 msgid "Dec."
 msgstr "des."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "eller"
 
@@ -4378,33 +5074,76 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
 msgstr "j. F Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j. F Y H:i"
+
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
 msgstr "H:i"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
 msgstr "j. F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "%(verbose_name)s ble opprettet."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "%(verbose_name)s ble oppdatert."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s ble slettet."
+
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "En eller flere %(fieldname)s i %(name)s: %(obj)s"
+
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "En eller flere %(fieldname)s i %(name)s:"
+
+#~ msgid "Old password:"
+#~ msgstr "Gammelt passord:"
+
+#~ msgid "Relation to parent model"
+#~ msgstr "Relasjon til foreldermodell"
+
+#~ msgid "Add user"
+#~ msgstr "Opprett ny bruker"
+
+#~ msgid "Comment moderation queue"
+#~ msgstr "Kommentarmoderasjonskø"
+
+#~ msgid "No comments to moderate"
+#~ msgstr "Ingen kommentarer å moderere"
+
+#~ msgid "Email"
+#~ msgstr "E-post"
+
+#~ msgid "Authenticated?"
+#~ msgstr "Godkjent?"
+
+#~ msgid "IP Address"
+#~ msgstr "IP-adresse"
+
+#~ msgid "Date posted"
+#~ msgstr "Dato lagt inn"
+
+#~ msgid "yes"
+#~ msgstr "ja"
+
+#~ msgid "no"
+#~ msgstr "nei"
Binary file web/lib/django/conf/locale/no/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/no/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/no/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -1,4 +1,5 @@
-# translation of djangojs.po to norwegian
+# This is the *old* Norwegian (Bokmål) translation of Django javascript
+# For future updates please use the translation in the "nb" directory.
 # Copyright (C) 2005 and beyond
 # This file is distributed under the same license as the Django package.
 #
@@ -7,40 +8,40 @@
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2005-12-09 11:51+0100\n"
-"PO-Revision-Date: 2008-08-29 16:12+0200\n"
+"PO-Revision-Date: 2010-03-11 18:06+0100\n"
 "Last-Translator: Christian Mikalsen and Jon Lønne\n"
 "Language-Team: Norsk <no@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
 msgstr "Tilgjengelige %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "Velg alle"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "Ny"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "Slett"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
 msgstr "Valgte %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
 msgstr "Velg ditt valg og klikk "
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
 msgstr "Fjern alle"
 
@@ -57,62 +58,63 @@
 msgid "S M T W T F S"
 msgstr "S M T O T F L"
 
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Vis"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Skjul"
+
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
 msgstr "Søndag Mandag Tirsdag Onsdag Torsdag Fredag Lørdag"
 
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Vis"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Skjul"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:50
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Now"
 msgstr "Nå"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:54
 msgid "Clock"
 msgstr "Klokke"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
 msgid "Choose a time"
 msgstr "Velg et klokkeslett"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "Midnight"
 msgstr "Midnatt"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "6 a.m."
 msgstr "06:00"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
 msgid "Noon"
 msgstr "12:00"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:92
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "Avbryt"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "I dag"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "Kalender"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "I går"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "I morgen"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/no/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,34 @@
+DATE_FORMAT = 'j. F Y'
+TIME_FORMAT = 'H:i'
+DATETIME_FORMAT = 'j. F Y H:i'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'd.m.Y'
+SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+FIRST_DAY_OF_WEEK = 1 # Monday
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%j.%m.%Y', '%j.%m.%y', # '2006-10-25', '25.10.2006', '25.10.06'
+    '%Y-%m-%j',                         # '2006-10-25',
+    # '%j. %b %Y', '%j %b %Y',            # '25. okt 2006', '25 okt 2006'
+    # '%j. %b. %Y', '%j %b. %Y',          # '25. okt. 2006', '25 okt. 2006'
+    # '%j. %B %Y', '%j %B %Y',            # '25. oktober 2006', '25 oktober 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',     # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+    '%Y-%m-%j',              # '2006-10-25'
+    '%j.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
+    '%j.%m.%Y %H:%M',        # '25.10.2006 14:30'
+    '%j.%m.%Y',              # '25.10.2006'
+    '%j.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
+    '%j.%m.%y %H:%M',        # '25.10.06 14:30'
+    '%j.%m.%y',              # '25.10.06'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/pl/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/pl/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/pl/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-17 21:59+0200\n"
+"POT-Creation-Date: 2010-04-28 12:24+0200\n"
 "PO-Revision-Date: 2008-02-25 15:53+0100\n"
 "Last-Translator: Jarek Zgoda <jarek.zgoda@gmail.com>\n"
 "MIME-Version: 1.0\n"
@@ -19,215 +19,235 @@
 msgstr "arabski"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "bułgarski"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "bengalski"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "bułgarski"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "kataloński"
+msgid "Bosnian"
+msgstr "bośniacki"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "kataloński"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "czeski"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "walijski"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "duński"
+msgid "Welsh"
+msgstr "walijski"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "duński"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "niemiecki"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "grecki"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "angielski"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "hiszpański"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "estoński"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "hiszpański argentyński"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "estoński"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "baskijski"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
 msgid "Persian"
 msgstr "perski"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
 msgid "Finnish"
 msgstr "fiński"
 
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "francuski"
-
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "irlandzki"
+msgid "French"
+msgstr "francuski"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "galicyjski"
+msgid "Frisian"
+msgstr "fryzyjski"
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "węgierski"
+msgid "Irish"
+msgstr "irlandzki"
 
 #: conf/global_settings.py:64
+msgid "Galician"
+msgstr "galicyjski"
+
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "hebrajski"
 
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "hindi"
-
 #: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "hindi"
+
+#: conf/global_settings.py:67
 msgid "Croatian"
 msgstr "chorwacki"
 
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "islandzki"
-
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "włoski"
+msgid "Hungarian"
+msgstr "węgierski"
 
 #: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "islandzki"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "włoski"
+
+#: conf/global_settings.py:71
 msgid "Japanese"
 msgstr "japoński"
 
-#: conf/global_settings.py:70
+#: conf/global_settings.py:72
 msgid "Georgian"
 msgstr "gruziński"
 
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "koreański"
-
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
 msgid "Khmer"
 msgstr "khmerski"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
 msgid "Kannada"
 msgstr "kannada"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "łotewski"
-
 #: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "litewski"
+msgid "Korean"
+msgstr "koreański"
 
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "macedoński"
+msgid "Lithuanian"
+msgstr "litewski"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "holenderski"
+msgid "Latvian"
+msgstr "łotewski"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "norweski"
+msgid "Macedonian"
+msgstr "macedoński"
 
 #: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "holenderski"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "norweski"
+
+#: conf/global_settings.py:81
 msgid "Polish"
 msgstr "polski"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:82
 msgid "Portuguese"
 msgstr "portugalski"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
 msgid "Brazilian Portuguese"
 msgstr "brazylijski portugalski"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
 msgid "Romanian"
 msgstr "rumuński"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
 msgid "Russian"
 msgstr "rosyjski"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
 msgid "Slovak"
 msgstr "słowacki"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
 msgid "Slovenian"
 msgstr "słoweński"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
+msgid "Albanian"
+msgstr "albański"
+
+#: conf/global_settings.py:89
 msgid "Serbian"
 msgstr "serbski"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:90
+msgid "Serbian Latin"
+msgstr "serbski (łaciński)"
+
+#: conf/global_settings.py:91
 msgid "Swedish"
 msgstr "szwedzki"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:92
 msgid "Tamil"
 msgstr "tamilski"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:93
 msgid "Telugu"
 msgstr "telugu"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:94
 msgid "Thai"
 msgstr "tajski"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:95
 msgid "Turkish"
 msgstr "turecki"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:96
 msgid "Ukrainian"
 msgstr "ukraiński"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "wietnamski"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
 msgstr "chiński uproszczony"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "chiński tradycyjny"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Usunięto %(count)d %(items)s."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
 msgid "Are you sure?"
 msgstr "Jesteś pewien?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Usuń wybrane %(verbose_name_plural)s"
@@ -266,19 +286,19 @@
 msgid "This year"
 msgstr "Ten rok"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Tak"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "Nie"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Nieznany"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "Akcja:"
 
@@ -310,87 +330,97 @@
 msgid "log entries"
 msgstr "logi"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
 msgid "None"
 msgstr "brak"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Changed %s."
 msgstr "Zmieniono %s"
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:573
 msgid "and"
 msgstr "i"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Dodano %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Zmieniono %(list)s w %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:577
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Usunięto %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:581
 msgid "No fields changed."
 msgstr "Żadne pole nie zmienione."
 
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
+#: contrib/admin/options.py:647
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "%(name)s \"%(obj)s\" dodany pomyślnie."
 
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
 msgid "You may edit it again below."
 msgstr "Możesz ponownie edytować wpis poniżej."
 
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
 #, python-format
 msgid "You may add another %s below."
 msgstr "Możesz dodać nowy wpis %s poniżej."
 
-#: contrib/admin/options.py:634
+#: contrib/admin/options.py:682
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\" zostało pomyślnie zmienione."
 
-#: contrib/admin/options.py:642
+#: contrib/admin/options.py:690
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
 msgstr ""
 "%(name)s \"%(obj)s\" dodane pomyślnie. Możesz edytować ponownie wpis poniżej."
 
-#: contrib/admin/options.py:773
+#: contrib/admin/options.py:744
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Wykonanie akcji wymaga wybrania obiektów. Żaden obiekt nie został zmieniony."
+
+#: contrib/admin/options.py:762
+msgid "No action selected."
+msgstr "Nie wybrano akcji."
+
+#: contrib/admin/options.py:842
 #, python-format
 msgid "Add %s"
 msgstr "Dodaj %s"
 
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
+#: contrib/admin/options.py:868 contrib/admin/options.py:1080
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "Obiekt %(name)s o kluczu głównym %(key)r nie istnieje."
 
-#: contrib/admin/options.py:861
+#: contrib/admin/options.py:933
 #, python-format
 msgid "Change %s"
 msgstr "Zmień %s"
 
-#: contrib/admin/options.py:905
+#: contrib/admin/options.py:978
 msgid "Database error"
 msgstr "Błąd bazy danych"
 
-#: contrib/admin/options.py:941
+#: contrib/admin/options.py:1014
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
@@ -398,18 +428,31 @@
 msgstr[1] "%(count)s %(name)s zostały pomyślnie zmienione."
 msgstr[2] "%(count)s %(name)s zostało pomyślnie zmienionych."
 
-#: contrib/admin/options.py:1020
+#: contrib/admin/options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s wybrany"
+msgstr[1] "%(total_count)s wybrane"
+msgstr[2] "%(total_count)s wybranych"
+
+#: contrib/admin/options.py:1046
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 z %(cnt)s wybranych"
+
+#: contrib/admin/options.py:1093
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)s \"%(obj)s\" usunięty pomyślnie."
 
-#: contrib/admin/options.py:1057
+#: contrib/admin/options.py:1130
 #, python-format
 msgid "Change history: %s"
 msgstr "Historia zmian: %s"
 
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -417,11 +460,11 @@
 "Proszę wpisać poprawną nazwę użytkownika i hasło. Uwaga: wielkość liter ma "
 "znaczenie."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Twoja sesja wygasła, zaloguj się ponownie."
 
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -429,62 +472,52 @@
 "Twoja przeglądarka nie chce akceptować ciasteczek. Zmień jej ustawienia i "
 "spróbuj ponownie."
 
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Nazwy użytkowników nie mogą zawierać znaku '@'."
 
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Podany adres e-mail nie jest Twoją nazwą użytkownika. Spróbuj '%s'."
 
-#: contrib/admin/sites.py:367
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Administracja stroną"
 
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Zaloguj się"
 
-#: contrib/admin/sites.py:426
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "%s - administracja"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Jedno lub więcej %(fieldname)s w %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Jedno lub więcej %(fieldname)s w %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Data:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Czas:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Teraz:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Zmień:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Szukaj"
 
-#: contrib/admin/widgets.py:235
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Dodaj kolejny"
 
@@ -499,17 +532,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -535,9 +568,8 @@
 "There's been an error. It's been reported to the site administrators via e-"
 "mail and should be fixed shortly. Thanks for your patience."
 msgstr ""
-"Wystąpił niespodziewany błąd. Raport został wysłany e-mailem "
-"administratorowi strony i powinien zostać wkrótce naprawiony. Dziękujemy za "
-"cierpliwość."
+"Wystąpił niespodziewany błąd. Został on zgłoszony e-mailem administratorowi "
+"strony i powinien zostać wkrótce naprawiony. Dziękujemy za cierpliwość."
 
 #: contrib/admin/templates/admin/actions.html:4
 msgid "Run the selected action"
@@ -547,34 +579,47 @@
 msgid "Go"
 msgstr "Wykonaj"
 
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr "Kliknij by wybrać obiekty na wszystkich stronach"
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Wybierz wszystkie %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "Wyczyść wybór"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:27
+#: contrib/admin/templates/admin/base.html:28
 msgid "Welcome,"
 msgstr "Witaj,"
 
-#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Dokumentacja"
 
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Zmiana hasła"
 
-#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Wyloguj się"
 
@@ -586,42 +631,43 @@
 msgid "Django administration"
 msgstr "Administracja Django"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Dodaj"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Historia"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Pokaż na stronie"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Proszę popraw poniższy błąd."
 msgstr[1] "Proszę popraw poniższe błędy."
 msgstr[2] "Proszę popraw poniższe błędy."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "Dodaj %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Filtr"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Usuń"
 
@@ -668,10 +714,10 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
-"Czy chcesz skasować %(object_name)s? Następujące obiekty i zależne od nich "
-"zostaną skasowane:"
+"Czy chcesz skasować wybrane %(object_name)s? Następujące obiekty i zależne "
+"od nich zostaną skasowane:"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -734,15 +780,9 @@
 msgstr "Użytkownik"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Akcja"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "Y-m-d H:i:s"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -789,7 +829,7 @@
 msgid "Save and continue editing"
 msgstr "Zapisz i kontynuuj edycję"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -797,33 +837,39 @@
 "Najpierw podaj nazwę użytkownika i hasło. Następnie będziesz mógł edytować "
 "więcej opcji użytkownika."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Nazwa użytkownika"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Hasło"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Hasło (powtórz)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Podaj powyższe hasło w celu weryfikacji."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Podaj nowe hasło dla użytkownika <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Hasło"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Hasło (powtórz)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Podaj powyższe hasło w celu weryfikacji."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Dodaj kolejne %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Usuń"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Usunąć?"
@@ -837,9 +883,9 @@
 msgstr "Zaloguj się ponownie"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Zmiana hasła"
 
@@ -852,27 +898,23 @@
 msgid "Your password was changed."
 msgstr "Twoje hasło zostało zmienione."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
 msgstr "Podaj swoje stare hasło i dwa razy nowe."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Stare hasło:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nowe hasło:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Potwierdź hasło:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Stare hasło"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Nowe hasło"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Zmień hasło"
@@ -911,6 +953,14 @@
 "Podaj dwukrotnie nowe hasło, by można było zweryfikować, czy zostało wpisane "
 "poprawnie."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Nowe hasło:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Potwierdź hasło:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Resetowanie hasła nieudane"
@@ -978,7 +1028,7 @@
 msgid "Reset my password"
 msgstr "Zresetuj moje hasło"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Wszystkie daty"
 
@@ -992,11 +1042,11 @@
 msgid "Select %s to change"
 msgstr "Zaznacz %s aby zmienić"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "strona"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "szablon"
 
@@ -1056,89 +1106,7 @@
 msgid "Fields on %s objects"
 msgstr "Pola obiektów %s"
 
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Liczba całkowita"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Wartość logiczna (True, False - prawda lub fałsz)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Łańcuch (do %(max_length)s znaków)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Liczby całkowite rozdzielone przecinkami"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Data (bez godziny)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Data (z godziną)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Liczba dziesiętna"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "Adres e-mail"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Ścieżka do pliku"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Liczba zmiennoprzecinkowa"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "Adres IP"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Wartość logiczna (True, False, None - prawda, fałsz lub nic)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Relacja do modelu rodzica"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Numer telefonu"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Tekst"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Czas"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "Stan USA (dwie duże litery)"
-
 #: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "Tekst XML"
-
-#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s nie jest obiektem urlpattern"
@@ -1211,66 +1179,61 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Jak wyżej, tyle że otwiera nowe okno."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Dane osobowe"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Uprawnienia"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Ważne daty"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Grupy"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Dodaj użytkownika"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Hasło zostało zmienione pomyślnie."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Zmień hasło: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Wymagane. 30 znaków lub mniej. Tylko znaki alfanumeryczne (litery, cyfry i "
-"podkreślenia)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "To pole może zawierać tylko litery, cyfry i podkreślenia."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Nazwa użytkownika"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr "Wymagane. 30 znaków lub mniej. Tylko litery, cyfry i znaki @/./+/-/_."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "To pole może zawierać tylko litery, cyfry i znaki @/./+/-/_."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Potwierdzenie hasła"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Użytkownik o tej nazwie już istnieje."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Hasła się nie zgadzają."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "To konto jest nieaktywne."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1278,11 +1241,11 @@
 "Twoja przeglądarka nie chce akceptować ciasteczek. Są one wymagane do "
 "zalogowania się."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "E-mail"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1290,72 +1253,69 @@
 "Ten adres e-mail nie ma przypisanego konta. Jesteś pewien, że "
 "zarejestrowałeś się?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Hasło zresetowane dla %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Nowe hasło"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Nowe hasło ponownie"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Stare hasło"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr "Podane stare hasło jest niepoprawne. Proszę podać je jeszcze raz."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "nazwa"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "nazwa kodowa"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "uprawnienie"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "uprawnienia"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "grupa"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "grupy"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "użytkownik"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr "Wymagane. 30 znaków lub mniej. Tylko litery, cyfry i znaki @/./+/-/_."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "imię"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "nazwisko"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "adres e-mail"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "hasło"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1363,19 +1323,19 @@
 "Użyj '[algo]$[salt]$[hexdigest]' lub <a href=\"password/\">formularza zmiany "
 "hasła</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "w zespole"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Oznacza czy użytkownik może zalogować się do panelu admina."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "aktywny"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1383,11 +1343,11 @@
 "Oznacza czy użytkownika należy uważać za aktywnego. Odznacz to, zamiast "
 "usuwać konta."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "status administratora"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
@@ -1395,15 +1355,15 @@
 "Oznacza, że ten użytkownik ma wszystkie uprawnienia bez jawnego "
 "przypisywania ich."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "ostatnio zalogowany"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "data przyłączenia"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1411,39 +1371,81 @@
 "Oprócz uprawnień przypisanych bezpośrednio użytkownikowi otrzyma on "
 "uprawnienia grup, do których należy."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "uprawnienia użytkownika"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "użytkownik"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "użytkownicy"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "wiadomość"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Wylogowany"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Wprowadź poprawny adres e-mail."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Zawartość"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metadane"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "oflagowany"
+msgstr[1] "oflagowane"
+msgstr[2] "oflagowanych"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Oflaguj wybrane komentarze"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "zaakceptowany"
+msgstr[1] "zaakceptowane"
+msgstr[2] "zaakceptowanych"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Zaakceptuj wybrane komentarze"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "usunięty"
+msgstr[1] "usunięte"
+msgstr[2] "usuniętych"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Usuń wybrane komentarze"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 komentarz został %(action)s"
+msgstr[1] "%(count)s komentarze zostały %(action)s"
+msgstr[2] "%(count)s komentarzy zostało %(action)s"
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1455,7 +1457,6 @@
 msgstr "Ostatnie komentarze na %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Nazwa"
 
@@ -1463,12 +1464,16 @@
 msgid "Email address"
 msgstr "Adres e-mail"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Komentarz"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
@@ -1476,13 +1481,13 @@
 msgstr[1] "Nie wolno przeklinać! Słowa %s nie są dozwolone."
 msgstr[2] "Nie wolno przeklinać! Słowa %s nie są dozwolone."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr ""
 "Jeżeli wpiszesz cokolwiek w to pole, Twój komentarz zostanie uznany za spam"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "typ zawartości"
 
@@ -1511,6 +1516,10 @@
 msgid "date/time submitted"
 msgstr "data/czas dodania"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "Adres IP"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "publicznie dostępny"
@@ -1592,7 +1601,6 @@
 msgstr "Czy ten komentarz na pewno ma być publiczny?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Zaakceptuj"
 
@@ -1617,11 +1625,6 @@
 msgid "Really remove this comment?"
 msgstr "Czy na pewno usunąć ten komentarz?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Usuń"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Dziękujemy za usunięcie"
@@ -1652,39 +1655,6 @@
 msgid "Preview"
 msgstr "Podgląd"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Kolejka moderacji komentarzy"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Żaden komentarz nie oczekuje na akceptację"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "E-mail"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Zalogowany?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "Adres IP"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Data dodania"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "tak"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "nie"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Dziękujemy za dodanie komentarza"
@@ -1713,11 +1683,11 @@
 msgid "or make changes"
 msgstr "lub wprowadź jakieś zmiany"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "nazwa pythonowa modelu klasy"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "typy zawartości"
 
@@ -1781,7 +1751,7 @@
 msgid "flat pages"
 msgstr "strony statyczne"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1789,6 +1759,39 @@
 "Przepraszamy, ale Twój formularz wygasł. Proszę kontynuować wypełnianie "
 "formularza od tej strony."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+"Podstawowe pole GIS - odpowiada typowi Geometry w specyfikacji OpenGIS."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Punkt"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Ścieżka"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Wielokąt"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Zbiór punktów"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Zbiór ścieżek"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Zbiór wielokątów"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Zbiór geometrii"
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Brak wartości geometrii."
@@ -1897,25 +1900,25 @@
 msgid "yesterday"
 msgstr "wczoraj"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Wpisz kod pocztowy w formacie NNNN lub ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "To pole może zawierać jedynie liczby."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "To pole musi zawierać 7 lub 8 cyfr."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Podaj poprawny numer CUIT w formacie XX-XXXXXXXX-X lub XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "Niepoprawny CUIT"
 
@@ -1955,8 +1958,8 @@
 msgid "Vienna"
 msgstr "Wiedeń"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Wpisz kod pocztowy w formacie XXXX."
 
@@ -1965,19 +1968,19 @@
 msgstr ""
 "Wpisz poprawny numer austriackiego ubezpieczenia w formacie XXXX XXXXXX."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Wpisz czterocyfrowy kod pocztowy."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Wpisz kod pocztowy w formacie XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Numery telefoniczne muszą być w formacie XX-XXXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
@@ -1985,27 +1988,27 @@
 "Wybierz poprawny brazylijski stan. Ten stan nie jest jednym z dostępnych "
 "stanów."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Błędny numer CPF."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "To pole nie może zawierać więcej niż 11 cyfr lub 14 znaków."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Błędny numer CNPJ."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "To pole musi zawierać co najmniej 14 cyfr"
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Wpisz kod pocztowy w formacie XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr ""
 "Wpisz poprawny numer kanadyjskiego ubezpieczenia w formacie XXX-XXX-XXXX."
@@ -2114,7 +2117,7 @@
 msgid "Zurich"
 msgstr "Zurych"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2122,15 +2125,15 @@
 "Podaj poprawny numer szwajcarskiego dowodu osobistego lub paszportu w "
 "formacie X1234567<0 lub 1234567890."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Wpisz poprawny chilijski RUT."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Podaj poprawny chilijski RUT w formacie XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "Podany chilijski RUT jest nieprawidłowy."
 
@@ -2190,23 +2193,23 @@
 msgid "Moravian-Silesian Region"
 msgstr "Kraj morawski-śląski"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Wpisz kod pocztowy w formacie XXXXX or XXX XX."
 
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Wpisz numer urodzenia w formacie XXXXXX/XXXX or XXXXXXXXXX."
-
 #: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Niepoprawny dodatkowy parametr płci, wartości poprawne to 'f' i 'm'"
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Wpisz numer urodzenia w formacie XXXXXX/XXXX or XXXXXXXXXX."
 
 #: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr "Niepoprawny dodatkowy parametr płci, wartości poprawne to 'f' i 'm'"
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Wpisz poprawny numer urodzenia."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Wpisz poprawny numer IC."
 
@@ -2274,12 +2277,12 @@
 msgid "Thuringia"
 msgstr "Turyngia"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Wpisz kod pocztowy w formacie XXXXX."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2554,74 +2557,506 @@
 msgid "Valencian Community"
 msgstr "Walencja"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Wpisz kod pocztowy w zakresie i formacie 01XXX - 52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
 msgstr ""
 "Wpisz numer telefoniczny w formacie 6XXXXXXXX, 8XXXXXXXX lub 9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Proszę wpisać poprawny numer NIF, NIE lub CIF."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Proszę wpisać poprawny numer NIF lub NIE."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Niepoprawna suma kontrolna NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Niepoprawna suma kontrolna NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Niepoprawna suma kontrolna CIF."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr ""
 "Podaj poprawny numer konta bankowego w formacie XXXX-XXXX-XX-XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Niepoprawna suma kontrolna numeru konta bankowego."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Wpis poprawny numer fińskiego ubezpieczenia socjalnego."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Numery telefoniczne muszą być w formacie 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Wpisz poprawny kod pocztowy"
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Wpisz poprawny numer telefonu"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Wpisz poprawny numer rejestracyjny pojazdu"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Wpisz poprawny numer NIK/KTP."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Wpisz kod pocztowy w formacie XXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr ""
 "Podaj poprawny numer islandzkiego dowodu osobistego w formacie XXXXXX-XXXX."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "Numer islandzkiego dowodu osobistego jest błędny."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Wpisz poprawny kod pocztowy."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Wpisz poprawny numer ubezpieczenia socjalnego."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Wpisz poprawny numer VAT."
 
@@ -2817,6 +3252,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Wpisz poprawny kuwejcki numer ID"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2945,15 +3384,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Wpisz poprawny kod pocztowy"
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Wpisz poprawny numer telefonu"
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Wpisz poprawny numer SoFi"
 
@@ -3005,15 +3440,15 @@
 msgid "Zuid-Holland"
 msgstr "Holandia Południowa"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Wpis poprawny numer norweskiego ubezpieczenia socjalnego."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "To pole musi zawierać 8 cyfr."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "To pole musi zawierać 11 cyfr."
 
@@ -3110,6 +3545,14 @@
 msgid "West Pomerania"
 msgstr "Zachodniopomorskie"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Wpisz kod pocztowy w formacie XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "Numery telefonów muszą mieć 9 cyfr lub zaczynać się od + albo 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Wpisz poprawny CIF."
@@ -3130,6 +3573,108 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Wpisz kod pocztowy w formacie XXXXXX."
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Wpisz poprawny szwedzki numer organizacji."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Wpis poprawny szwedzki numer identyfikacji osobistej."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Wpisz szwedzki kod pocztowy w formacie XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Sztokholm"
+
+# while Stockholm is translated, other administrative unit names are *not*
+# translated to Polish, according to Encyklopedia PWN
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Bańska Bystrzyca"
@@ -3762,19 +4307,44 @@
 msgid "Wales"
 msgstr "Walia"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Wpisz kod pocztowy w formacie XXXXX. lub XXXXX-XXXX."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Numery telefoniczne muszą być w formacie XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr "Wpisz poprawny numer U.S. Social Security w formacie XXX-XX-XXXX."
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Podaj stan lub terytorium USA."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Stan USA (dwie duże litery)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Numer telefonu"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+"Wprowadź poprawny numer CI w formacie X.XXX.XXX-X, XXXXXXX-X lub XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Wpisz poprawny numer CI."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Wpisz poprawny południowoafrykański numer ID"
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Wpisz poprawny południowoafrykański kod pocztowy"
 
@@ -3814,6 +4384,10 @@
 msgid "Western Cape"
 msgstr "Prowincja Przylądkowa Zachodnia"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "testowa wiadomość z opóźnioną ewaluacją"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "przekieruj z"
@@ -3874,62 +4448,223 @@
 msgid "sites"
 msgstr "strony"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Wpisz poprawną wartość."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Wpisz poprawny URL."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Ten odnośnik jest nieprawidłowy."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr "To pole może zawierać jedynie litery, cyfry, podkreślenia i myślniki."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Wprowadź poprawny adres IPv4."
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Wpisz tylko cyfry oddzielone przecinkami."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Upewnij się, że ta wartość jest %(limit_value)s (jest %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Upewnij się, że ta wartość jest mniejsza lub równa %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Upewnij się, że ta wartość jest większa lub równa %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Upewnij się, że ta wartość ma co najmniej %(limit_value)d znaków (ma długość "
+"%(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Upewnij się, że ta wartość ma co najwyżej %(limit_value)d znaków (ma długość "
+"%(show_value)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr ""
+"Wartości w %(field_name)s muszą być unikalne dla wyszukiwań %(lookup)s w %"
+"(date_field)s"
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(field_label)s już istnieje w %(model_name)s."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Wartość %r nie jest poprawnym wyborem."
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be null."
+msgstr "To pole nie może być puste."
+
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "To pole nie może być puste."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Pole typu: %(field_type)s"
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Liczba całkowita"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
 msgid "This value must be an integer."
 msgstr "Ta wartość musi być liczbą całkowitą."
 
-#: db/models/fields/__init__.py:388
+#: db/models/fields/__init__.py:490
 msgid "This value must be either True or False."
 msgstr ""
 "Ta wartość musi być wartością logiczną (True, False - prawda lub fałsz)."
 
-#: db/models/fields/__init__.py:427
-msgid "This field cannot be null."
-msgstr "To pole nie może być puste."
-
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Wpisz tylko cyfry oddzielone przecinkami."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Wartość logiczna (True, False - prawda lub fałsz)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Łańcuch (do %(max_length)s znaków)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Liczby całkowite rozdzielone przecinkami"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Data (bez godziny)"
+
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Proszę wpisać poprawną datę w formacie RRRR-MM-DD."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Niepoprawna data: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr ""
 "Wprowadź poprawną datę i godzinę w formacie YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Data (z godziną)"
+
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "Ta wartość musi być liczbą dziesiętną."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Liczba dziesiętna"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "Adres e-mail"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Ścieżka do pliku"
+
+#: db/models/fields/__init__.py:822
 msgid "This value must be a float."
 msgstr "Ta wartość musi być liczbą rzeczywistą."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "Liczba zmiennoprzecinkowa"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Duża liczba całkowita (8 bajtów)"
+
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr ""
 "Ta wartość musi być jedną z None (nic), True (prawda) lub False (fałsz)."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Wartość logiczna (True, False, None - prawda, fałsz lub nic)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Tekst"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Czas"
+
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Proszę wpisać poprawną godzinę w formacie HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "Tekst XML"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Model %(model)s o kluczu głównym %(pk)r nie istnieje."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Klucz obcy (typ określony przez pole powiązane)"
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr "Powiązanie jeden do jednego"
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr "Powiązanie wiele do wiele"
+
+#: db/models/fields/related.py:1000
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Przytrzymaj wciśnięty klawisz \"Ctrl\" lub \"Command\" na Mac'u aby "
 "zaznaczyć więcej niż jeden wybór."
 
-#: db/models/fields/related.py:894
+#: db/models/fields/related.py:1061
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3944,86 +4679,58 @@
 "Proszę podać poprawne identyfikatory %(self)s. Wartości %(value)r są "
 "niepoprawne."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "To pole jest wymagane."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Wpisz poprawną wartość."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Upewnij się, że ta wartość ma co najwyżej %(max)d znaków (ma długość %"
-"(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Upewnij się, że ta wartość ma co najmniej %(min)d znaków (ma długość %"
-"(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Wpisz liczbę całkowitą."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Upewnij się, że ta wartość jest mniejsza lub równa %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Upewnij się, że ta wartość jest większa lub równa %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Wpisz liczbę."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Upewnij się, że jest nie więcej niż %s cyfr."
 
-#: forms/fields.py:228
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Upewnij się, że jest nie więcej niż %s miejsc po przecinku."
 
-#: forms/fields.py:229
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Upewnij się, że jest nie więcej niż %s miejsc przed przecinkiem."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Wpisz poprawną datę."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Wpisz poprawną godzinę."
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Wpisz poprawną datę/godzinę."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "Nie wysłano żadnego pliku. Sprawdź typ kodowania formularza."
 
-#: forms/fields.py:448
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Żaden plik nie został przesłany."
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Wysłany plik jest pusty."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4031,7 +4738,7 @@
 "Upewnij się, że nazwa tego pliku ma co najwyżej %(max)d znaków (ma długość %"
 "(length)d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4039,60 +4746,31 @@
 "Wgraj poprawny plik graficzny. Ten, który został wgrany, nie jest obrazem, "
 "albo jest uszkodzony."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Wpisz poprawny URL."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Ten odnośnik jest nieprawidłowy."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr ""
 "Wybierz poprawną wartość. %(value)s nie jest jednym z dostępnych wyborów."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
 msgid "Enter a list of values."
 msgstr "Podaj listę wartości."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Wprowadź poprawny adres IPv4."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "To pole może zawierać jedynie litery, cyfry, podkreślenia i myślniki."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Porządek"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr ""
-"Wartości w %(field_name)s muszą być unikalne dla wyszukiwań %(lookup)s w %"
-"(date_field)s"
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(field_label)s już istnieje w %(model_name)s."
-
-#: forms/models.py:594
+#: forms/models.py:567
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Popraw zduplikowane dane w %(field)s."
 
-#: forms/models.py:598
+#: forms/models.py:571
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr "Popraw zduplikowane dane w %(field)s, które wymaga unikalności."
 
-#: forms/models.py:604
+#: forms/models.py:577
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
@@ -4101,33 +4779,33 @@
 "Popraw zduplikowane dane w %(field_name)s, które wymaga unikalności dla %"
 "(lookup)s w polu %(date_field)s."
 
-#: forms/models.py:612
+#: forms/models.py:585
 msgid "Please correct the duplicate values below."
 msgstr "Popraw poniższe zduplikowane wartości."
 
-#: forms/models.py:867
+#: forms/models.py:860
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr "Osadzony klucz obcy nie pasuje do klucza głównego obiektu rodzica."
 
-#: forms/models.py:930
+#: forms/models.py:926
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Wybierz poprawną wartość. Podana nie jest jednym z dostępnych wyborów."
 
-#: forms/models.py:1004
+#: forms/models.py:1008
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Wybierz poprawną wartość. %s nie jest jednym z dostępnych wyborów."
 
-#: forms/models.py:1006
+#: forms/models.py:1010
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" nie jest poprawną wartością klucza głównego."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "tak,nie,może"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
@@ -4135,17 +4813,17 @@
 msgstr[1] "%(size)d bajty"
 msgstr[2] "%(size)d bajtów"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4354,7 +5032,7 @@
 msgid "Dec."
 msgstr "Gru."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "lub"
 
@@ -4414,33 +5092,81 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
 msgstr "Y-m-d"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "Y-m-d H:i:s"
+
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
 msgstr "H:i:s"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
 msgstr "Y-m"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
 msgstr "m-d"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "%(verbose_name)s zostało pomyślnie utworzone."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "%(verbose_name)s zostało pomyślnie zmienione."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s zostało usunięte."
+
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "Jedno lub więcej %(fieldname)s w %(name)s: %(obj)s"
+
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "Jedno lub więcej %(fieldname)s w %(name)s:"
+
+#~ msgid ""
+#~ "<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
+#~ msgstr ""
+#~ "<span class=\"_acnt\">0</span> z %(total_count)s %(module_name)s wybrane"
+
+#~ msgid "Old password:"
+#~ msgstr "Stare hasło:"
+
+#~ msgid "Add user"
+#~ msgstr "Dodaj użytkownika"
+
+#~ msgid "Relation to parent model"
+#~ msgstr "Relacja do modelu rodzica"
+
+#~ msgid "Comment moderation queue"
+#~ msgstr "Kolejka moderacji komentarzy"
+
+#~ msgid "No comments to moderate"
+#~ msgstr "Żaden komentarz nie oczekuje na akceptację"
+
+#~ msgid "Email"
+#~ msgstr "E-mail"
+
+#~ msgid "Authenticated?"
+#~ msgstr "Zalogowany?"
+
+#~ msgid "IP Address"
+#~ msgstr "Adres IP"
+
+#~ msgid "Date posted"
+#~ msgstr "Data dodania"
+
+#~ msgid "yes"
+#~ msgstr "tak"
+
+#~ msgid "no"
+#~ msgstr "nie"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/pl/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'd-m-Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/pt/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/pt/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/pt/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -5,8 +5,8 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-23 09:34+0100\n"
-"PO-Revision-Date: 2009-07-23 10:43+0100\n"
+"POT-Creation-Date: 2010-05-01 21:26+0200\n"
+"PO-Revision-Date: 2010-03-09 10:45+0000\n"
 "Last-Translator: Nuno Mariz <nmariz@gmail.com>\n"
 "Language-Team: pt_PT <nmariz@gmail.com>\n"
 "MIME-Version: 1.0\n"
@@ -18,215 +18,247 @@
 msgstr "Árabe"
 
 #: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "Bengalês"
+msgid "Bulgarian"
+msgstr "Búlgaro"
 
 #: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Búlgaro"
+msgid "Bengali"
+msgstr "Bengalês"
 
 #: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr "Bósnio"
+
+#: conf/global_settings.py:48
 msgid "Catalan"
 msgstr "Catalão"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "Checo"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:50
 msgid "Welsh"
 msgstr "Galês"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:51
 msgid "Danish"
 msgstr "Dinamarquês"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "Alemão"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "Grego"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "Inglês"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
+msgid "British English"
+msgstr "Inglês Britânico"
+
+#: conf/global_settings.py:56
 msgid "Spanish"
 msgstr "Espanhol"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Estónio"
-
-#: conf/global_settings.py:56
-msgid "Argentinean Spanish"
-msgstr "Espanhol Argentino"
-
 #: conf/global_settings.py:57
-msgid "Basque"
-msgstr "Basco"
+msgid "Argentinean Spanish"
+msgstr "Espanhol Argentino"
 
 #: conf/global_settings.py:58
+msgid "Estonian"
+msgstr "Estónio"
+
+#: conf/global_settings.py:59
+msgid "Basque"
+msgstr "Basco"
+
+#: conf/global_settings.py:60
 msgid "Persian"
 msgstr "Persa"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:61
 msgid "Finnish"
 msgstr "Filandês"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:62
 msgid "French"
 msgstr "Francês"
 
-#: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Irlandês"
-
-#: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Galaciano"
-
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Húngaro"
+msgid "Frisian"
+msgstr "Frisão"
 
 #: conf/global_settings.py:64
-msgid "Hebrew"
-msgstr "Hebraico"
+msgid "Irish"
+msgstr "Irlandês"
 
 #: conf/global_settings.py:65
-msgid "Hindi"
-msgstr ""
+msgid "Galician"
+msgstr "Galaciano"
 
 #: conf/global_settings.py:66
-msgid "Croatian"
-msgstr "Croata"
+msgid "Hebrew"
+msgstr "Hebraico"
 
 #: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "Islandês"
+msgid "Hindi"
+msgstr "Hindi"
 
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "Italiano"
+msgid "Croatian"
+msgstr "Croata"
 
 #: conf/global_settings.py:69
-msgid "Japanese"
-msgstr "Japonês"
+msgid "Hungarian"
+msgstr "Húngaro"
 
 #: conf/global_settings.py:70
-msgid "Georgian"
-msgstr "Georgiano"
+msgid "Icelandic"
+msgstr "Islandês"
 
 #: conf/global_settings.py:71
-msgid "Korean"
-msgstr "Coreano"
+msgid "Italian"
+msgstr "Italiano"
 
 #: conf/global_settings.py:72
+msgid "Japanese"
+msgstr "Japonês"
+
+#: conf/global_settings.py:73
+msgid "Georgian"
+msgstr "Georgiano"
+
+#: conf/global_settings.py:74
 msgid "Khmer"
 msgstr "Khmer"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:75
 msgid "Kannada"
 msgstr "Canarês"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "Letão"
-
-#: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "Lituano"
-
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "Macedónio"
+msgid "Korean"
+msgstr "Coreano"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "Holandês"
+msgid "Lithuanian"
+msgstr "Lituano"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "Norueguês"
+msgid "Latvian"
+msgstr "Letão"
 
 #: conf/global_settings.py:79
+msgid "Macedonian"
+msgstr "Macedónio"
+
+#: conf/global_settings.py:80
+msgid "Dutch"
+msgstr "Holandês"
+
+#: conf/global_settings.py:81
+msgid "Norwegian"
+msgstr "Norueguês"
+
+#: conf/global_settings.py:82
+msgid "Norwegian Bokmal"
+msgstr "Norueguês (Bokmål)"
+
+#: conf/global_settings.py:83
+msgid "Norwegian Nynorsk"
+msgstr "Norueguês (Nynors)"
+
+#: conf/global_settings.py:84
 msgid "Polish"
 msgstr "Polaco"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:85
 msgid "Portuguese"
 msgstr "Português"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:86
 msgid "Brazilian Portuguese"
 msgstr "Português Brasileiro"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:87
 msgid "Romanian"
 msgstr "Romeno"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:88
 msgid "Russian"
 msgstr "Russo"
 
-#: conf/global_settings.py:84
-msgid "Slovak"
-msgstr "Eslovaco"
-
-#: conf/global_settings.py:85
-msgid "Slovenian"
-msgstr "Esloveno"
-
-#: conf/global_settings.py:86
-msgid "Serbian"
-msgstr "Sérvio"
-
-#: conf/global_settings.py:87
-msgid "Swedish"
-msgstr "Sueco"
-
-#: conf/global_settings.py:88
-msgid "Tamil"
-msgstr "Tamil"
-
 #: conf/global_settings.py:89
-msgid "Telugu"
-msgstr "Telugu"
+msgid "Slovak"
+msgstr "Eslovaco"
 
 #: conf/global_settings.py:90
-msgid "Thai"
-msgstr "Thai"
+msgid "Slovenian"
+msgstr "Esloveno"
 
 #: conf/global_settings.py:91
-msgid "Turkish"
-msgstr "Turco"
+msgid "Albanian"
+msgstr "Albanês"
 
 #: conf/global_settings.py:92
+msgid "Serbian"
+msgstr "Sérvio"
+
+#: conf/global_settings.py:93
+msgid "Serbian Latin"
+msgstr "Sérvio Latim"
+
+#: conf/global_settings.py:94
+msgid "Swedish"
+msgstr "Sueco"
+
+#: conf/global_settings.py:95
+msgid "Tamil"
+msgstr "Tamil"
+
+#: conf/global_settings.py:96
+msgid "Telugu"
+msgstr "Telugu"
+
+#: conf/global_settings.py:97
+msgid "Thai"
+msgstr "Thai"
+
+#: conf/global_settings.py:98
+msgid "Turkish"
+msgstr "Turco"
+
+#: conf/global_settings.py:99
 msgid "Ukrainian"
 msgstr "Ucraniano"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:100
+msgid "Vietnamese"
+msgstr "Vietnamita"
+
+#: conf/global_settings.py:101
 msgid "Simplified Chinese"
 msgstr "Chinês Simplificado"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:102
 msgid "Traditional Chinese"
 msgstr "Chinês Tradicional"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Foram removidos com sucesso %(count)d %(items)s."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
 msgid "Are you sure?"
 msgstr "Tem a certeza?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Remover %(verbose_name_plural)s seleccionados"
@@ -265,19 +297,19 @@
 msgid "This year"
 msgstr "Este ano"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Sim"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "Não"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "Acção:"
 
@@ -309,61 +341,60 @@
 msgid "log entries"
 msgstr "entradas de log"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
 msgid "None"
 msgstr "Nenhum"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Changed %s."
 msgstr "Foi modificado %s."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:573
 msgid "and"
 msgstr "e"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Foram adicionados %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Foram modificados %(list)s para %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:577
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Foram removidos %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:581
 msgid "No fields changed."
 msgstr "Nenhum campo foi modificado."
 
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
+#: contrib/admin/options.py:647
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "O(A) %(name)s \"%(obj)s\" foi adicionado(a) com sucesso."
 
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
 msgid "You may edit it again below."
 msgstr "Pode editá-lo(a) outra vez abaixo."
 
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
 #, python-format
 msgid "You may add another %s below."
 msgstr "Pode adicionar outro %s abaixo."
 
-#: contrib/admin/options.py:634
+#: contrib/admin/options.py:682
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "O(A) %(name)s \"%(obj)s\" foi modificado(a) com sucesso."
 
-#: contrib/admin/options.py:642
+#: contrib/admin/options.py:690
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -371,44 +402,68 @@
 "O(A) %(name)s \"%(obj)s\" foi adicionado(a) com sucesso. Pode voltar a "
 "editar novamente abaixo."
 
-#: contrib/admin/options.py:773
+#: contrib/admin/options.py:744
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Os itens devem ser seleccionados de forma a efectuar acções sobre eles. "
+"Nenhum item foi modificado."
+
+#: contrib/admin/options.py:762
+msgid "No action selected."
+msgstr "Nenhuma acção seleccionada."
+
+#: contrib/admin/options.py:842
 #, python-format
 msgid "Add %s"
 msgstr "Adicionar %s"
 
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
+#: contrib/admin/options.py:868 contrib/admin/options.py:1080
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "O object %(name)s com a chave primária %(key)r não existe."
 
-#: contrib/admin/options.py:861
+#: contrib/admin/options.py:933
 #, python-format
 msgid "Change %s"
 msgstr "Modificar %s"
 
-#: contrib/admin/options.py:905
+#: contrib/admin/options.py:978
 msgid "Database error"
 msgstr "Erro de base de dados"
 
-#: contrib/admin/options.py:941
+#: contrib/admin/options.py:1014
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s %(name)s foi modificado com sucesso."
 msgstr[1] "%(count)s %(name)s foram modificados com sucesso."
 
-#: contrib/admin/options.py:1020
+#: contrib/admin/options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s seleccionado"
+msgstr[1] "Todos %(total_count)s seleccionados"
+
+#: contrib/admin/options.py:1046
+#, fuzzy, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "de %(count)d seleccionado"
+
+#: contrib/admin/options.py:1093
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "O(A) %(name)s \"%(obj)s\" foi removido(a) com sucesso."
 
-#: contrib/admin/options.py:1057
+#: contrib/admin/options.py:1130
 #, python-format
 msgid "Change history: %s"
 msgstr "Histórico de modificações: %s"
 
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -416,11 +471,11 @@
 "Por favor introduza o utilizador e palavra-passe correctos. Note que ambos "
 "os casos diferenciam maiúsculas e minúsculas."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Por favor autentique-se novamente, porque a sua sessão expirou."
 
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -428,63 +483,53 @@
 "Aparentemente o seu browser não está configurado para aceitar cookies. Por "
 "favor active os cookies, carrege novamente a página e volte a tentar."
 
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Nomes de utilizador não podem conter o caracter '@'."
 
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr ""
 "O seu endereço de e-mail não é o seu nome de utilizador. Tente usar '%s'."
 
-#: contrib/admin/sites.py:367
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Administração do site"
 
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Entrar"
 
-#: contrib/admin/sites.py:426
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "Administração de %s"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Um ou mais %(fieldname)s em %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Um ou mais %(fieldname)s em %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Data:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Hora:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Actualmente:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Modificar:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Procurar"
 
-#: contrib/admin/widgets.py:235
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Adicionar Outro"
 
@@ -499,17 +544,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -546,34 +591,47 @@
 msgid "Go"
 msgstr "Ir"
 
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Seleccionar todos %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "Remover selecção"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:27
+#: contrib/admin/templates/admin/base.html:28
 msgid "Welcome,"
 msgstr "Bem-vindo,"
 
-#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Documentação"
 
-#: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Modificar palavra-passe"
 
-#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Sair"
 
@@ -585,41 +643,42 @@
 msgid "Django administration"
 msgstr "Administração do Django"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Adicionar"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "História"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Ver no site"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Por favor corrija o erro abaixo."
 msgstr[1] "Por favor corrija os erros abaixo."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "Adicionar %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Filtro"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Remover"
 
@@ -658,14 +717,19 @@
 "Deleting the %(object_name)s would result in deleting related objects, but "
 "your account doesn't have permission to delete the following types of "
 "objects:"
-msgstr "A remoção de %(object_name)s resultará na remoção de todos os objectos relacionados, mas a sua conta não tem permissões para remover os seguintes tipos de objectos:"
+msgstr ""
+"A remoção de %(object_name)s resultará na remoção de todos os objectos "
+"relacionados, mas a sua conta não tem permissões para remover os seguintes "
+"tipos de objectos:"
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:22
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
-msgstr "Tem a certeza que deseja remover os objectos %(object_name)s? Todos os seguintes objectos e seus itens relacionados serão removidos:"
+"the following objects and their related items will be deleted:"
+msgstr ""
+"Tem a certeza que deseja remover os objectos %(object_name)s? Todos os "
+"seguintes objectos e seus itens relacionados serão removidos:"
 
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
@@ -728,15 +792,9 @@
 msgstr "Utilizador"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Acção"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "N j, Y, P"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -782,7 +840,7 @@
 msgid "Save and continue editing"
 msgstr "Gravar e continuar a editar"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -790,34 +848,40 @@
 "Primeiro introduza o nome do utilizador e palavra-passe. Depois poderá "
 "editar mais opções do utilizador."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Utilizador"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Palavra-passe"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Palavra-passe (novamente)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Introduza a palavra-passe como acima, para verificação."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr ""
 "Introduza uma nova password para o utilizador <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Palavra-passe"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Palavra-passe (novamente)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Introduza a palavra-passe como acima, para verificação."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Adicionar outro %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Remover"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Remover?"
@@ -831,9 +895,9 @@
 msgstr "Entrar novamente"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Modificação da palavra-passe"
 
@@ -846,7 +910,7 @@
 msgid "Your password was changed."
 msgstr "A sua palavra-passe foi modificada."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -855,21 +919,17 @@
 "depois introduza a nova duas vezes para que possamos verificar se introduziu "
 "correctamente."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Palavra-passe antiga:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nova palavra-passe:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirmação da palavra-passe:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Palavra-passe antiga"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Nova palavra-passe"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Modificar a minha palavra-passe"
@@ -908,6 +968,14 @@
 "Por favor, introduza a sua nova palavra-passe duas vezes para verificarmos "
 "se está correcta."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Nova palavra-passe:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Confirmação da palavra-passe:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Palavra-passe reinicializada sem sucesso"
@@ -978,7 +1046,7 @@
 msgid "Reset my password"
 msgstr "Reinicializar a minha palavra-passe"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Todas as datas"
 
@@ -992,11 +1060,11 @@
 msgid "Select %s to change"
 msgstr "Seleccione %s para modificar"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "site"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "template"
 
@@ -1013,7 +1081,7 @@
 #: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
 #: contrib/admindocs/views.py:162
 msgid "view:"
-msgstr "ver:"
+msgstr "view:"
 
 #: contrib/admindocs/views.py:190
 #, python-format
@@ -1056,89 +1124,7 @@
 msgid "Fields on %s objects"
 msgstr "Campos nos objectos %s"
 
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Inteiro"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Boolean (Pode ser True ou False)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "String (até %(max_length)s)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Inteiros separados por virgula"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Data (sem hora)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Data (com hora)"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Número décimal"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "Endereço de e-mail"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Caminho do ficheiro"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Número em vírgula flutuante"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "Endereço IP"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Boolean (Pode ser True, False ou None)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Relação para o pai do model"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Número de telefone"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Texto"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Hora"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estado dos E.U.A (duas letras em maiúsculas)"
-
 #: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "Texto XML"
-
-#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s não parece ser um objecto urlpattern"
@@ -1212,66 +1198,63 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Tal como acima, mas abre a página de admin numa nova janela."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Informação pessoal"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Permissões"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Datas importantes"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Grupos"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Adicionar utilizador"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Palavra-passe modificada com sucesso."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Modificar a palavra-passe: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Obrigatório. 30 caracteres ou menos. Apenas caracteres alfanúmericos "
-"(letras, números ou underscores)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Este valor apenas poderá conter letras, números ou underscores."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Utilizador"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr ""
+"Obrigatório. 30 caracteres ou menos. Apenas letras, dígitos e @/./+/-/_."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr ""
+"Este valor apenas deverá conter letras, números e caracteres @/./+/-/_."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Confirmação da palavra-passe"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Já existe um utilizador com esse nome."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Os dois campos da palavra-passe não coincidem."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Esta conta não está activa."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1279,11 +1262,11 @@
 "Aparentemente que o seu browser não está configurado para aceitar cookies. "
 "Os cookies são necessários para poder entrar."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "E-mail"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1291,74 +1274,73 @@
 "Esse e-mail não tem nenhuma conta de utilizador associada. Tem a certeza que "
 "já se registou?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Palavra-passe reinicializada em %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Nova palavra-passe"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Confirmação da nova palavra-passe"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Palavra-passe antiga"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr ""
 "A sua palavra-passe antiga foi introduzida incorrectamente. Por favor tente "
 "novamente."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "nome"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "nome de código"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "permissão"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "permissões"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "grupo"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "grupos"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "utilizador"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Obrigatório. 30 caracteres ou menos. Apenas letras, números e caracteres @/./"
+"+/-/_."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "primeiro nome"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "último nome"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "endereço de e-mail"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "palavra-passe"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1366,19 +1348,19 @@
 "Use '[algo]$[salt]$[hexdigest]' ou use o <a href=\"password/\">formulário de "
 "modificação da palavra-passe</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "status de equipa"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Define se o utilizador pode usar a administração do site."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "activo"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1386,11 +1368,11 @@
 "Defina se este utilizador deva ser tratado como activo. Não seleccione em "
 "vez de remover as contas."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "Status de superuser"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
@@ -1398,15 +1380,15 @@
 "Define se este utilizador tem todas as permissões sem explicitamente as "
 "atribuir."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "última entrada"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "data de registo"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1414,39 +1396,77 @@
 "Em adição às permissões definidas manualmente, este utilizador também terá "
 "todas as permissões atribuídas a cada grupo a que partence."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "permissões do utilizador"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "utilizador"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "utilizadores"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "mensagem"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Saiu"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Introduza um endereço de e-mail válido."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Conteúdo"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metadata"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "marcado"
+msgstr[1] "marcados"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Marcar os comentários seleccionados"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "aprovado"
+msgstr[1] "aprovados"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Aprovar os comentários seleccionados"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "removido"
+msgstr[1] "removidos"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Remover os comentários seleccionados"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 comentário foi %(action)s com sucesso."
+msgstr[1] "%(count)s comentários foram %(action)s com sucesso."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1458,7 +1478,6 @@
 msgstr "Últimos comentários em %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Nome"
 
@@ -1466,25 +1485,29 @@
 msgid "Email address"
 msgstr "Endereço de e-mail"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Comentário"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Atenção à linguagem! A palavra %s não é permitida aqui."
 msgstr[1] "Atenção à linguagem! As palavras %s não são permitidas aqui."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr ""
 "Se não introduzir nada neste campo o seu comentário irá ser tratado como spam"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "tipo de conteúdo"
 
@@ -1513,6 +1536,10 @@
 msgid "date/time submitted"
 msgstr "data/hora de submissão"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "Endereço IP"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "é público"
@@ -1594,7 +1621,6 @@
 msgstr "Tem a certeza que deseja tornar este comentário público?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Aprovar"
 
@@ -1607,7 +1633,9 @@
 #: contrib/comments/templates/comments/flagged.html:7
 msgid ""
 "Thanks for taking the time to improve the quality of discussion on our site"
-msgstr "Obrigado por dedicar o seu tempo para melhorar a qualidade de discussão no nosso site"
+msgstr ""
+"Obrigado por dedicar o seu tempo para melhorar a qualidade de discussão no "
+"nosso site"
 
 #: contrib/comments/templates/comments/delete.html:4
 msgid "Remove a comment"
@@ -1617,11 +1645,6 @@
 msgid "Really remove this comment?"
 msgstr "Tem a certeza que deseja remover este comentário?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Remover"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Obrigado pela remoção"
@@ -1652,39 +1675,6 @@
 msgid "Preview"
 msgstr "Prever"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Fila de moderação de comentário"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Nenhum comentário para moderar"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Email"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Autenticado?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "Endereço IP"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Data de publicação"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "sim"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "não"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Obrigado por comentar"
@@ -1712,11 +1702,11 @@
 msgid "or make changes"
 msgstr "ou faça modificações"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "python model class name"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "tipos de conteúdos"
 
@@ -1731,7 +1721,8 @@
 "This value must contain only letters, numbers, underscores, dashes or "
 "slashes."
 msgstr ""
-"Este valor apenas poderá conter letras, números, underscores ou traços."
+"Este valor apenas poderá conter letras, números, underscores, hífens ou "
+"barras."
 
 #: contrib/flatpages/admin.py:22
 msgid "Advanced options"
@@ -1779,7 +1770,7 @@
 msgid "flat pages"
 msgstr "páginas planas"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1787,6 +1778,38 @@
 "Pedimos desculpa, mas o seu formulário expirou. Por favor continue a "
 "preencher o formulário a partir desta página."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr ""
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Não foi submetido nenhum valor do tipo geometria."
@@ -1803,7 +1826,9 @@
 msgid ""
 "An error occurred when transforming the geometry to the SRID of the geometry "
 "form field."
-msgstr "Ocorreu um erro na transformação da geometria para o SRID da geometria do campo do formulário."
+msgstr ""
+"Ocorreu um erro na transformação da geometria para o SRID da geometria do "
+"campo do formulário."
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
@@ -1890,25 +1915,25 @@
 msgid "yesterday"
 msgstr "ontem"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Introduza um código postal no formato NNNN ou ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Este campo apenas aceita números."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Este campo apenas aceita 7 ou 8 dígitos."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Introduza o CUIT no formato XX-XXXXXXXX-X ou XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "CUIT inválido."
 
@@ -1948,8 +1973,8 @@
 msgid "Vienna"
 msgstr ""
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Introduza um código postal no formato XXXX."
 
@@ -1959,19 +1984,19 @@
 "Introduza um código de segurança social austríaco válido no formato XXXX "
 "XXXXXX."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Introduza um código postal de 4 dígitos."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Introduza um código postal no formato XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Os números de telefone deverão ser no formato XXX-XXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
@@ -1979,27 +2004,27 @@
 "Seleccione um estado brazileiro válido. Esse estado não se encontra "
 "disponível."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Número de CPF inválido."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Este campo aceita no máximo 11 dígitos ou 14 caracteres."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Número CNPJ inválido."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "Este campo aceita no mínimo 14 dígitos"
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Introduza um código postal no formato XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr ""
 "Introduza um código de segurança social Canadiano válido no formato XXX-XXX-"
@@ -2109,7 +2134,7 @@
 msgid "Zurich"
 msgstr ""
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2117,15 +2142,15 @@
 "Introduza uma identificação Suíça ou número de passaporte no formato "
 "X1234567<0 ou 1234567890."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Introduza um RUT Chileno válido."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Introduza um RUT Chileno válido. O formato é XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "O RUT Chileno é inválido."
 
@@ -2185,23 +2210,25 @@
 msgid "Moravian-Silesian Region"
 msgstr ""
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Introduza um código postal no formato XXXXX ou XXX XX"
 
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Introduza um número de nascimento no formato XXXXXX/XXXX ou XXXXXXXXXX."
-
 #: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Parâmetro opcional inválido do Género, os valores válidos são 'f' e 'm'"
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr ""
+"Introduza um número de nascimento no formato XXXXXX/XXXX ou XXXXXXXXXX."
 
 #: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+"Parâmetro opcional inválido do Género, os valores válidos são 'f' e 'm'"
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Introduza um de número de nascimento válido."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Introduza um número de IC válido."
 
@@ -2269,12 +2296,12 @@
 msgid "Thuringia"
 msgstr ""
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Introduza um código postal no formato XXXXX."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2549,11 +2576,11 @@
 msgid "Valencian Community"
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Instruduza um código postal válido no formato 01XXX - 52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
@@ -2561,65 +2588,497 @@
 "Introduza um número de telefone válido num dos formatos 6XXXXXXXX, 8XXXXXXXX "
 "or 9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Por favor introduza um NIF, NIE, ou CIF válido."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Por favor introduza um NIF ou NIE válido."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Checksum inválido para o NIF."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Checksum inválido para o NIE."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Checksum inválido para o CIF."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr ""
 "Por favor introduza um número de conta bancária no formato XXXX-XXXX-XX-"
 "XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Checksum inválido para o número de conta bancária."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Introduza um número de segurança social Finlandês válido."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Os números de telefone deverão ser no formato 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Introduza um código postal válido."
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Introduza um número de telefone válido."
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Introduza um número de matrícula de veículo válido"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Introduza um número NIK/KTP válido"
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Introduza um código postal válido no formato XXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr ""
 "Introduza um número de identificação Islândica válida. O formato é XXXXXX-"
 "XXXX"
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "Número de identificação Islândica inválido."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Introduza um código postal válido."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Introduza um número de Segurança Social válido."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Introduza um de IVA válido."
 
@@ -2815,6 +3274,10 @@
 msgid "Okinawa"
 msgstr ""
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Introduza um número Civil ID Kuwaitiano válido"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr ""
@@ -2943,15 +3406,11 @@
 msgid "Zacatecas"
 msgstr ""
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Introduza um código postal válido."
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Introduza um número de telefone válido."
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Introduza um número SoFi válido."
 
@@ -3003,15 +3462,15 @@
 msgid "Zuid-Holland"
 msgstr ""
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Introduza um número de segurança social Norueguês válido."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Este campo requere 8 dígitos."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Este campo requere 11 dígitos."
 
@@ -3035,7 +3494,8 @@
 
 #: contrib/localflavor/pl/forms.py:109
 msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
-msgstr "O Número de Registo Nacional de Negócio (REGON) consiste em 9 ou 14 dígitos."
+msgstr ""
+"O Número de Registo Nacional de Negócio (REGON) consiste em 9 ou 14 dígitos."
 
 #: contrib/localflavor/pl/forms.py:110
 msgid "Wrong checksum for the National Business Register Number (REGON)."
@@ -3109,6 +3569,15 @@
 msgid "West Pomerania"
 msgstr ""
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Introduza um código postal no formato XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+"Os números de telefone devem conter 9 dígitos, ou começarem por + ou 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Introduza um CIF válido."
@@ -3129,6 +3598,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Introduza um código postal válido no formato XXXXXX"
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Introduza um número de organização Sueco válido."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Introduza um número de identificação pessoal válido."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Números de coordenação não são permitidos."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Introduza um código postal Sueco no formato XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr ""
@@ -3479,7 +4048,7 @@
 
 #: contrib/localflavor/uk/forms.py:21
 msgid "Enter a valid postcode."
-msgstr "Introduza um código postal válido."
+msgstr ""
 
 #: contrib/localflavor/uk/uk_regions.py:11
 msgid "Bedfordshire"
@@ -3761,22 +4330,47 @@
 msgid "Wales"
 msgstr ""
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Introduza o código postal no formato XXXXX or XXXXX-XXXX."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Os números de telefone deverão ser no formato XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr ""
 "Introduza o número de Segurança Social dos E.U. no formato XXX-XX-XXXX."
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Introduza um estado ou território do E.U.A.."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Estado dos E.U.A (duas letras em maiúsculas)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Número de telefone"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+"Introduza um número CI válido no formato X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Introduza um número CI válido."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
-msgstr "Introduza um número ID da Africa do Sul válido."
-
-#: contrib/localflavor/za/forms.py:54
+msgstr "Introduza um número ID da África do Sul válido"
+
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
-msgstr "Introduza um código postal da Africa do Sul válido."
+msgstr "Introduza um código postal da África do Sul válido"
 
 #: contrib/localflavor/za/za_provinces.py:4
 msgid "Eastern Cape"
@@ -3814,6 +4408,10 @@
 msgid "Western Cape"
 msgstr ""
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "mensagem lazy"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "redireccionar de"
@@ -3878,60 +4476,220 @@
 msgid "sites"
 msgstr "sites"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Este campo deverá ser inteiro."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Este valor deverá ser True ou False."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Introduza um valor válido."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Introduza um URL válido."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Este URL é link quebrado."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Este valor apenas poderá conter letras, números, undercores ou hífenes."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Introduza um endereço IPv4 válido."
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Introduza apenas números separados por vírgulas."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Garanta que este valor seja %(limit_value)s (tem %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Garanta que este valor seja menor ou igual a %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Garanta que este valor seja maior ou igual a %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Garanta que este valor tem no mínimo %(limit_value)d caracteres (tem %"
+"(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Garanta que este valor tem no máximo %(limit_value)d caracteres (tem %"
+"(show_value)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s deverá ser único para %(date_field)s %(lookup)s."
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s com este %(field_label)s já existe."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "O valor %r não é uma opção válida."
+
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Este campo não pode ser nulo."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Introduza apenas números separados por vírgulas."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Este campo não pode ser vazio."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Campo do tipo: %(field_type)s"
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Inteiro"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+msgid "This value must be an integer."
+msgstr "Este campo deverá ser inteiro."
+
+#: db/models/fields/__init__.py:490
+msgid "This value must be either True or False."
+msgstr "Este valor deverá ser True ou False."
+
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Boolean (Pode ser True ou False)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "String (até %(max_length)s)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Inteiros separados por virgula"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Data (sem hora)"
+
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Introduza uma data válida no formato AAAA-MM-DD."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Data inválida: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr ""
 "Introduza uma data/hora válida no formato YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Data (com hora)"
+
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "Este campo deverá ser um número decimal."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Número décimal"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "Endereço de e-mail"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Caminho do ficheiro"
+
+#: db/models/fields/__init__.py:822
 msgid "This value must be a float."
 msgstr "Este campo deverá ser número décimal."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "Número em vírgula flutuante"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Inteiro grande (8 byte)"
+
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr "Este valor deverá ser None, True ou False."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Boolean (Pode ser True, False ou None)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Texto"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Hora"
+
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Introduza uma hora válida no formato HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "Texto XML"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "O modelo %(model)s com a chave primária %(pk)r não existe."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Chave Estrangeira (tipo determinado pelo campo relacionado)"
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr "Relação de um-para-um"
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr "Relação de muitos-para-muitos"
+
+#: db/models/fields/related.py:1000
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Mantenha pressionado o \"Control\", or \"Command\" no Mac, para seleccionar "
 "mais do que um."
 
-#: db/models/fields/related.py:894
+#: db/models/fields/related.py:1061
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3942,91 +4700,67 @@
 "Por favor introduza IDs de %(self)s válidos. Os valores %(value)r são "
 "inválidos."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Este campo é obrigatório."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Introduza um valor válido."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Garanta que este valor tem no máximo %(max)d caracteres (tem %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Garanta que este valor tem no mínimo %(min)d caracteres (tem %(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Introduza um número inteiro."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Garanta que este valor seja menor ou igual a %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Garanta que este valor seja maior ou igual a %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Introduza um número."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
-msgstr "Garanta que não possua no total mais do que %s dígitos."
-
-#: forms/fields.py:228
+msgstr "Garanta que não contém no total mais do que %s dígitos."
+
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
-msgstr "Garanta que não possua mais do que %s casas décimais."
-
-#: forms/fields.py:229
+msgstr "Garanta que não contém mais do que %s casas décimais."
+
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Garanta que não possua mais do que %s digitos antes do ponto decimal."
-
-#: forms/fields.py:288 forms/fields.py:863
+msgstr "Garanta que não contém mais do que %s digitos antes do ponto decimal."
+
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Introduza uma data válida."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Introduza uma hora válida."
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Introduza uma data/hora válida."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr ""
 "Nenhum ficheiro foi submetido. Verifique o tipo de codificação do formulário."
 
-#: forms/fields.py:448
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Nenhum ficheiro submetido."
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "O ficheiro submetido encontra-se vazio."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
-msgstr "Garanta que este nome do ficheiro tem no máximo %(max)d caracteres (tem %(length)d)."
-
-#: forms/fields.py:483
+msgstr ""
+"Garanta que este nome do ficheiro tem no máximo %(max)d caracteres (tem %"
+"(length)d)."
+
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4034,112 +4768,89 @@
 "Introduza uma imagem válida. O ficheiro que introduziu ou não é uma imagem "
 "ou está corrompido."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Introduza um URL válido."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Este URL é link quebrado."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr ""
 "Seleccione uma opção válida. %(value)s não se encontra nas opções "
 "disponíveis."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
 msgid "Enter a list of values."
 msgstr "Introduza uma lista de valores."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Introduza um endereço IPv4 válido."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Este valor apenas poderá conter letras, números, undercores ou hífenes."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Ordem"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s deverá ser único para %(date_field)s %(lookup)s."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s com este %(field_label)s já existe."
-
-#: forms/models.py:594
+#: forms/models.py:567
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Por favor corrija os dados duplicados em %(field)s."
 
-#: forms/models.py:598
+#: forms/models.py:571
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
-msgstr "Por favor corrija os dados duplicados em %(field)s, que deverá ser único."
-
-#: forms/models.py:604
+msgstr ""
+"Por favor corrija os dados duplicados em %(field)s, que deverá ser único."
+
+#: forms/models.py:577
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
 "for the %(lookup)s in %(date_field)s."
-msgstr "Por favor corrija os dados duplicados em %(field_name)s que deverá ser único para o %(lookup)s em %(date_field)s.\""
-
-#: forms/models.py:612
+msgstr ""
+"Por favor corrija os dados duplicados em %(field_name)s que deverá ser único "
+"para o %(lookup)s em %(date_field)s.\""
+
+#: forms/models.py:585
 msgid "Please correct the duplicate values below."
 msgstr "Por favor corrija os valores duplicados abaixo."
 
-#: forms/models.py:867
+#: forms/models.py:860
 msgid "The inline foreign key did not match the parent instance primary key."
-msgstr "A chave estrangeira em linha não coincide com a chave primária na instância pai."
-
-#: forms/models.py:930
+msgstr ""
+"A chave estrangeira em linha não coincide com a chave primária na instância "
+"pai."
+
+#: forms/models.py:926
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr ""
 "Seleccione uma opção válida. Esse valor não se encontra opções disponíveis."
 
-#: forms/models.py:1004
+#: forms/models.py:1008
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr ""
 "Seleccione uma opção válida. %s não se encontra nas opções disponíveis."
 
-#: forms/models.py:1006
+#: forms/models.py:1010
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" não é um valor válido para uma chave primária."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "sim,não,talvez"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] ""
 msgstr[1] ""
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr ""
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr ""
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr ""
@@ -4348,7 +5059,7 @@
 msgid "Dec."
 msgstr "Dez."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "ou"
 
@@ -4402,383 +5113,37 @@
 msgid ", %(number)d %(type)s"
 msgstr ""
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:518
 msgid "DATE_FORMAT"
 msgstr "N j, Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:519
+msgid "DATETIME_FORMAT"
+msgstr "N j, Y, P"
+
+#: utils/translation/trans_real.py:520
 msgid "TIME_FORMAT"
 msgstr "P"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:541
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:542
 msgid "MONTH_DAY_FORMAT"
 msgstr "F j"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "O(A) %(verbose_name)s foi criado(a) com sucesso."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "O(A) %(verbose_name)s foi actualizado(a) com sucesso."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "O(A) %(verbose_name)s foi removido(a)."
-
-#~ msgid "headline"
-#~ msgstr "título"
-
-#~ msgid "rating #1"
-#~ msgstr "avaliação #1"
-
-#~ msgid "rating #2"
-#~ msgstr "avaliação #2"
-
-#~ msgid "rating #3"
-#~ msgstr "avaliação #3"
-
-#~ msgid "rating #4"
-#~ msgstr "avaliação #4"
-
-#~ msgid "rating #5"
-#~ msgstr "avaliação #5"
-
-#~ msgid "rating #6"
-#~ msgstr "avaliação #6"
-
-#~ msgid "rating #7"
-#~ msgstr "avaliação #7"
-
-#~ msgid "rating #8"
-#~ msgstr "avaliação #8"
-
-#~ msgid "is valid rating"
-#~ msgstr "é uma avaliação válida"
-
-#~ msgid "Content object"
-#~ msgstr "Objecto de conteúdo"
-
-#~ msgid "person's name"
-#~ msgstr "nome da pessoa"
-
-#~ msgid "ip address"
-#~ msgstr "endereço ip"
-
-#~ msgid "approved by staff"
-#~ msgstr "aprovado pela equipa"
-
-#~ msgid "free comments"
-#~ msgstr "comentários livres"
-
-#~ msgid "score"
-#~ msgstr "pontuação"
-
-#~ msgid "karma score"
-#~ msgstr "pontuação do karma"
-
-#~ msgid "karma scores"
-#~ msgstr "pontuações do karma"
-
-#~ msgid "%(score)d rating by %(user)s"
-#~ msgstr "Avaliação %(score)d por %(user)s"
-
-#~ msgid ""
-#~ "This comment was flagged by %(user)s:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr ""
-#~ "O utilizador %(user)s colocou uma flag neste comentário\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "flag date"
-#~ msgstr "data da flag"
-
-#~ msgid "user flag"
-#~ msgstr "flag do utilizador"
-
-#~ msgid "user flags"
-#~ msgstr "flags do utilizador"
-
-#~ msgid "Flag by %r"
-#~ msgstr "Flag por %r"
-
-#~ msgid "deletion date"
-#~ msgstr "data de remoção"
-
-#~ msgid "moderator deletion"
-#~ msgstr "remoção pelo moderador"
-
-#~ msgid "moderator deletions"
-#~ msgstr "remoções pelo moderador"
-
-#~ msgid "Moderator deletion by %r"
-#~ msgstr "Remoção de moderador %r"
-
-#~ msgid "Anonymous users cannot vote"
-#~ msgstr "Utilizadores anónimos não podem votar"
-
-#~ msgid "No voting for yourself"
-#~ msgstr "Não pode votar em si"
-
-#~ msgid ""
-#~ "This rating is required because you've entered at least one other rating."
-#~ msgstr ""
-#~ "Esta avaliação é obrigatória porque introduziu pelo menos uma outra "
-#~ "avaliação."
-
-#~ msgid ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comment:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgid_plural ""
-#~ "This comment was posted by a user who has posted fewer than %(count)s "
-#~ "comments:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[0] ""
-#~ "Este comentário foi colocado por um utilizador que efectuou menos de %"
-#~ "(count)s comentário:\n"
-#~ "\n"
-#~ "%(text)s"
-#~ msgstr[1] ""
-#~ "Este comentário foi colocado por um utilizador que efectuou menos de %"
-#~ "(count)s comentários:\n"
-#~ "\n"
-#~ "%(text)s"
-
-#~ msgid "Only POSTs are allowed"
-#~ msgstr "Apenas POSTs são autorizados"
-
-#~ msgid "One or more of the required fields wasn't submitted"
-#~ msgstr "Um ou mais campos obrigatórios não foram submetidos"
-
-#~ msgid "Somebody tampered with the comment form (security violation)"
-#~ msgstr "Alguém modificou o formulário de comentário (violação de segurança)"
-
-#~ msgid ""
-#~ "The comment form had an invalid 'target' parameter -- the object ID was "
-#~ "invalid"
-#~ msgstr ""
-#~ "O formulário de comentário teve um parâmetro 'target' inválido -- o ID do "
-#~ "objecto foi inválido"
-
-#~ msgid "The comment form didn't provide either 'preview' or 'post'"
-#~ msgstr "O formulário de comentário não forneceu nem 'preview' ou 'post'"
-
-#~ msgid "Forgotten your password?"
-#~ msgstr "Esqueceu-se da palavra-passe?"
-
-#~ msgid "Required"
-#~ msgstr "Obrigatório"
-
-#~ msgid "Post a photo"
-#~ msgstr "Colocar uma foto"
-
-#~ msgid "Your name:"
-#~ msgstr "O seu nome:"
-
-#~ msgid "Added %s."
-#~ msgstr "Foi adicionado %s"
-
-#~ msgid "Deleted %s."
-#~ msgstr "Foi removido %s."
-
-#~ msgid "DATE_WITH_TIME_FULL"
-#~ msgstr "N j, Y, P"
-
-#~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
-#~ msgstr "<a href=\"/password_reset/\">Esqueceu-se a sua palavra-passe?</a>"
-
-#~ msgid "Ordering"
-#~ msgstr "Ordenação"
-
-#~ msgid "Your new password is: %(new_password)s"
-#~ msgstr "A sua nova palavra-chave é: %(new_password)s"
-
-#~ msgid "Feel free to change this password by going to this page:"
-#~ msgstr ""
-#~ "Tenha a liberdade de modificar esta palavra-passe através desta página:"
-
-#~ msgid "Use '[algo]$[salt]$[hexdigest]'"
-#~ msgstr "Use '[algo]$[salt]$[hexdigest]'"
-
-#~ msgid "Uppercase letters are not allowed here."
-#~ msgstr "Letras em maiúsculas não são permitidas aqui."
-
-#~ msgid "Lowercase letters are not allowed here."
-#~ msgstr "Letras em minúsculas não são permitidas aqui."
-
-#~ msgid "Enter valid e-mail addresses separated by commas."
-#~ msgstr "Introduza endereços de e-mail válidos separados por vírgulas."
-
-#~ msgid "Empty values are not allowed here."
-#~ msgstr "Valores em branco não são permitidos aqui."
-
-#~ msgid "Non-numeric characters aren't allowed here."
-#~ msgstr "Caracteres não númericos não são permitidos aqui."
-
-#~ msgid "This value can't be comprised solely of digits."
-#~ msgstr "Este valor não pode ser constituido apenas por números."
-
-#~ msgid "Only alphabetical characters are allowed here."
-#~ msgstr "Apenas letras são válidas aqui."
-
-#~ msgid "Year must be 1900 or later."
-#~ msgstr "O ano deve ser 1900 ou superior."
-
-#~ msgid "The URL %s does not point to a valid image."
-#~ msgstr "O URL %s não aponta para uma imagem válida."
-
-#~ msgid "The URL %s does not point to a valid QuickTime video."
-#~ msgstr "O URL %s não aponta para um QuickTime video válido."
-
-#~ msgid "A valid URL is required."
-#~ msgstr "É obrigatório um URL válido"
-
-#~ msgid ""
-#~ "Valid HTML is required. Specific errors are:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "É obrigatório um HTML válido. Os erros específicos são:\n"
-#~ "%s"
-
-#~ msgid "Badly formed XML: %s"
-#~ msgstr "XML mal formatado: %s"
-
-#~ msgid "Enter a valid U.S. state abbreviation."
-#~ msgstr "Introduza uma abreviação de um estado dos E.U.A. válido."
-
-#~ msgid "This field must match the '%s' field."
-#~ msgstr "Este campo deve ser igual ao campo '%s'."
-
-#~ msgid "Please enter something for at least one field."
-#~ msgstr "Por favor preencha pelo menos um campo."
-
-#~ msgid "Please enter both fields or leave them both empty."
-#~ msgstr "Por favor preencha ambos os campos ou deixe ambos vazios."
-
-#~ msgid "This field must be given if %(field)s is not %(value)s"
-#~ msgstr "Este campo deve ser preenchido se %(field)s não é %(value)s"
-
-#~ msgid "Duplicate values are not allowed."
-#~ msgstr "Valores duplicados não são permitidos."
-
-#~ msgid "Please enter a valid decimal number with at most %s total digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s total digits."
-#~ msgstr[0] ""
-#~ "Por favor introduza um número décimal com um máximo de %s digito."
-#~ msgstr[1] ""
-#~ "Por favor introduza um número décimal com um máximo de %s digitos."
-
-#, fuzzy
-#~ msgid ""
-#~ "Please enter a valid decimal number with a whole part of at most %s digit."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with a whole part of at most %s "
-#~ "digits."
-#~ msgstr[0] ""
-#~ "Por favor introduza um número décimal com o máximo de % digito na parte "
-#~ "inteira."
-#~ msgstr[1] ""
-#~ "Por favor introduza um número décimal com o máximo de % digitos na parte "
-#~ "inteira."
-
-#~ msgid "Please enter a valid decimal number with at most %s decimal place."
-#~ msgid_plural ""
-#~ "Please enter a valid decimal number with at most %s decimal places."
-#~ msgstr[0] ""
-#~ "Por favor introduza um número décimal com o máximo de %s digito na parte "
-#~ "décimal."
-#~ msgstr[1] ""
-#~ "Por favor introduza um número décimal com o máximo de %s digitos na parte "
-#~ "décimal."
-
-#~ msgid "Make sure your uploaded file is at least %s bytes big."
-#~ msgstr "Verifique que o ficheiro introduzido tem pelo menos %s bytes."
-
-#~ msgid "Make sure your uploaded file is at most %s bytes big."
-#~ msgstr "Verifique se o ficheiro introduzido tem no máximo %s bytes."
-
-#~ msgid "The format for this field is wrong."
-#~ msgstr "O formato deste campo é errado."
-
-#~ msgid "Could not retrieve anything from %s."
-#~ msgstr "Não foi possível extrair nada de %s."
-
-#, fuzzy
-#~ msgid ""
-#~ "The URL %(url)s returned the invalid Content-Type header '%(contenttype)"
-#~ "s'."
-#~ msgstr ""
-#~ "O URL %(url)s devolveu um tipo de conteúdo inválido no header: '%s"
-#~ "(contenttype)s'."
-
-#~ msgid ""
-#~ "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts "
-#~ "with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Por favor feche a tag %(tag)s na linha %(line)s. (A linha começa por \"%"
-#~ "(start)s\".)"
-
-#~ msgid ""
-#~ "Some text starting on line %(line)s is not allowed in that context. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Algum texto começado na linha %(line)s não é permitido nesse contexto. (A "
-#~ "linha começa por \"%(start)s\".)"
-
-#~ msgid ""
-#~ "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with "
-#~ "\"%(start)s\".)"
-#~ msgstr ""
-#~ "\"%(attr)s\" na linha %(line)s é um atributo inválido. (A linha começa "
-#~ "por \"%(start)s\".)"
-
-#~ msgid ""
-#~ "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
-#~ "(start)s\".)"
-#~ msgstr ""
-#~ "\"<%(tag)s>\" na linha %(line)s é um tag inválida. (A linha começa por \"%"
-#~ "(start)s\".)"
-
-#~ msgid ""
-#~ "A tag on line %(line)s is missing one or more required attributes. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "Uma tag na linha %(line)s não tem um o mais atributos obrigatórios. (A "
-#~ "linha começa por \"%(start)s\".)"
-
-#~ msgid ""
-#~ "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
-#~ "starts with \"%(start)s\".)"
-#~ msgstr ""
-#~ "O atributo \"%(attr)s\" na linha %(line)s tem um valor inválido. (A linha "
-#~ "começa por \"%(start)s\".)"
-
-#~ msgid "Separate multiple IDs with commas."
-#~ msgstr "Separe múltiplos IDs através de vírgulas."
-
-#~ msgid "Ensure your text is less than %s character."
-#~ msgid_plural "Ensure your text is less than %s characters."
-#~ msgstr[0] "Verifique se o seu texto tem menos de %s caracter."
-#~ msgstr[1] "Verifique se o seu texto tem menos de %s caracteres."
-
-#~ msgid "Line breaks are not allowed here."
-#~ msgstr "Quebras de linha não são permitas aqui."
-
-#~ msgid "Enter a whole number between -32,768 and 32,767."
-#~ msgstr "Introduza um número entre -32,768 e 32,767."
-
-#~ msgid "Enter a whole number between 0 and 32,767."
-#~ msgstr "Introduza um número entre 0 e 32,767."
Binary file web/lib/django/conf/locale/pt/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/pt/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/pt/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-08-29 09:18+0100\n"
+"POT-Creation-Date: 2010-05-01 20:24+0200\n"
 "PO-Revision-Date: 2008-08-29 09:24+0100\n"
 "Last-Translator: Nuno Mariz <nmariz@gmail.com>\n"
 "Language-Team: pt_PT <nmariz@gmail.com>\n"
@@ -13,36 +13,43 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
 msgstr "Disponível %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "Escolher todos"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "Adicionar"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "Remover"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
 msgstr "Escolhido %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
 msgstr "Seleccione a(s) sua(s) escolha(s) e clique "
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
 msgstr "Limpar tudo"
 
+#: contrib/admin/media/js/actions.js:17
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] ""
+msgstr[1] ""
+
 #: contrib/admin/media/js/calendar.js:24
 #: contrib/admin/media/js/dateparse.js:32
 msgid ""
@@ -56,62 +63,63 @@
 msgid "S M T W T F S"
 msgstr "D S T Q Q S S"
 
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Mostrar"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Ocultar"
+
 #: contrib/admin/media/js/dateparse.js:33
 msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
 msgstr "Domingo Segunda Terça Quarta Quinta Sexta Sábado"
 
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
-msgid "Show"
-msgstr "Mostrar"
-
-#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
-msgid "Hide"
-msgstr "Ocultar"
-
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Now"
 msgstr "Agora"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
 msgid "Clock"
 msgstr "Relógio"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
 msgid "Choose a time"
 msgstr "Escolha a hora"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Midnight"
 msgstr "Meia-noite"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "6 a.m."
 msgstr "6 a.m."
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "Noon"
 msgstr "Meio-dia"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "Hoje"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "Calendário"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "Ontem"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "Amanhã"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/pt/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,35 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = r'j \de F \de Y'
+TIME_FORMAT = 'H:i:s'
+DATETIME_FORMAT = r'j \de F \de Y à\s H:i'
+YEAR_MONTH_FORMAT = r'F \de Y'
+MONTH_DAY_FORMAT = r'j \de F'
+SHORT_DATE_FORMAT = 'd/m/Y'
+SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+FIRST_DAY_OF_WEEK = 0  # Sunday
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%d/%m/%Y', '%d/%m/%y', # '2006-10-25', '25/10/2006', '25/10/06'
+    # '%d de %b de %Y', '%d de %b, %Y',   # '25 de Out de 2006', '25 Out, 2006'
+    # '%d de %B de %Y', '%d de %B, %Y',   # '25 de Outubro de 2006', '25 de Outubro, 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',        # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+    '%d/%m/%Y %H:%M:%S',     # '25/10/2006 14:30:59'
+    '%d/%m/%Y %H:%M',        # '25/10/2006 14:30'
+    '%d/%m/%Y',              # '25/10/2006'
+    '%d/%m/%y %H:%M:%S',     # '25/10/06 14:30:59'
+    '%d/%m/%y %H:%M',        # '25/10/06 14:30'
+    '%d/%m/%y',              # '25/10/06'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/pt_BR/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/pt_BR/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/pt_BR/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -5,8 +5,8 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: Grupo de Localização para o Português <django-l10n-portuguese@googlegroups.com>\n"
-"POT-Creation-Date: 2009-07-23 10:00-0300\n"
-"PO-Revision-Date: 2009-07-23 10:03-0300\n"
+"POT-Creation-Date: 2010-03-19 17:38-0300\n"
+"PO-Revision-Date: 2010-03-19 17:58-0300\n"
 "Last-Translator: Guilherme Gondim <semente@taurinus.org>\n"
 "Language-Team: Grupo de Localização para o Português <django-l10n-portuguese@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
@@ -19,218 +19,238 @@
 msgstr "Árabe"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "Búlgaro"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "Bengali"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Búlgaro"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "Catalão"
+msgid "Bosnian"
+msgstr "Bósnia"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "Catalão"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "Tcheco"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "Galês"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "Dinamarquês"
+msgid "Welsh"
+msgstr "Galês"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "Dinamarquês"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "Alemão"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "Grego"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "Inglês"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "Espanhol"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Estoniano"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "Espanhol Argentino"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "Estoniano"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "Basco"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
 msgid "Persian"
 msgstr "Persa"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
 msgid "Finnish"
 msgstr "Finlandês"
 
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "Francês"
-
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "Irlandês"
+msgid "French"
+msgstr "Francês"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "Galiciano"
+msgid "Frisian"
+msgstr "Frísia"
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Húngaro"
+msgid "Irish"
+msgstr "Irlandês"
 
 #: conf/global_settings.py:64
+msgid "Galician"
+msgstr "Galiciano"
+
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "Hebraico"
 
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "Hindi"
-
 #: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "Hindi"
+
+#: conf/global_settings.py:67
 msgid "Croatian"
 msgstr "Croata"
 
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "Islandês"
-
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "Italiano"
+msgid "Hungarian"
+msgstr "Húngaro"
 
 #: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "Islandês"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "Italiano"
+
+#: conf/global_settings.py:71
 msgid "Japanese"
 msgstr "Japonês"
 
-#: conf/global_settings.py:70
+#: conf/global_settings.py:72
 msgid "Georgian"
 msgstr "Georgiano"
 
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "Coreano"
-
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
 msgid "Khmer"
 msgstr "Khmer"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
 msgid "Kannada"
 msgstr "Canarês"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "Letão"
-
 #: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "Lituano"
+msgid "Korean"
+msgstr "Coreano"
 
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "Macedônio"
+msgid "Lithuanian"
+msgstr "Lituano"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "Neerlandês"
+msgid "Latvian"
+msgstr "Letão"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "Norueguês"
+msgid "Macedonian"
+msgstr "Macedônio"
 
 #: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "Neerlandês"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "Norueguês"
+
+#: conf/global_settings.py:81
 msgid "Polish"
 msgstr "Polonês"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:82
 msgid "Portuguese"
 msgstr "Português"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
 msgid "Brazilian Portuguese"
 msgstr "Português Brasileiro"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
 msgid "Romanian"
 msgstr "Romeno"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
 msgid "Russian"
 msgstr "Russo"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
 msgid "Slovak"
 msgstr "Eslovaco"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
 msgid "Slovenian"
 msgstr "Esloveno"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
+msgid "Albanian"
+msgstr "Albanesa"
+
+#: conf/global_settings.py:89
 msgid "Serbian"
 msgstr "Sérvio"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:90
+msgid "Serbian Latin"
+msgstr "Sérvio Latino"
+
+#: conf/global_settings.py:91
 msgid "Swedish"
 msgstr "Sueco"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:92
 msgid "Tamil"
 msgstr "Tâmil"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:93
 msgid "Telugu"
 msgstr "Telugu"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:94
 msgid "Thai"
 msgstr "Tailandês"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:95
 msgid "Turkish"
 msgstr "Turco"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:96
 msgid "Ukrainian"
 msgstr "Ucraniano"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "Vietnamita"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
 msgstr "Chinês Simplificado"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "Chinês Tradicional"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Removido %(count)d %(items)s com sucesso."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1027
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1101
 msgid "Are you sure?"
 msgstr "Tem certeza?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Remover %(verbose_name_plural)s selecionado"
+msgstr "Remover %(verbose_name_plural)s selecionados"
 
 #: contrib/admin/filterspecs.py:44
 #, python-format
@@ -266,19 +286,19 @@
 msgid "This year"
 msgstr "Este ano"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
 msgid "Yes"
 msgstr "Sim"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:470
 msgid "No"
 msgstr "Não"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:470
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:19
 msgid "Action:"
 msgstr "Ação:"
 
@@ -310,61 +330,60 @@
 msgid "log entries"
 msgstr "entradas de log"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:139 contrib/admin/options.py:154
 msgid "None"
 msgstr "Nenhum"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:558
 #, python-format
 msgid "Changed %s."
 msgstr "Modificado %s."
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:600 forms/models_flymake.py:388 forms/models_flymake.py:600
+#: contrib/admin/options.py:558 contrib/admin/options.py:568
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:840
+#: forms/models.py:556
 msgid "and"
 msgstr "e"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Adicionado %(name)s \"%(object)s\""
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:567
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Modificado %(list)s para %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Deletado %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:576
 msgid "No fields changed."
 msgstr "Nenhum campo modificado."
 
-#: contrib/admin/options.py:599 contrib/auth/admin.py:67
+#: contrib/admin/options.py:642
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "%(name)s \"%(obj)s\": adicionado com sucesso."
 
-#: contrib/admin/options.py:603 contrib/admin/options.py:636
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:646 contrib/admin/options.py:679
 msgid "You may edit it again below."
 msgstr "Você pode editar novamente abaixo."
 
-#: contrib/admin/options.py:613 contrib/admin/options.py:646
+#: contrib/admin/options.py:656 contrib/admin/options.py:689
 #, python-format
 msgid "You may add another %s below."
 msgstr "Você pode adicionar outro %s abaixo."
 
-#: contrib/admin/options.py:634
+#: contrib/admin/options.py:677
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "%(name)s \"%(obj)s\": modificado com sucesso."
 
-#: contrib/admin/options.py:642
+#: contrib/admin/options.py:685
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -372,44 +391,70 @@
 "%(name)s \"%(obj)s\": adicionado com sucesso. Você pode editar novamente "
 "abaixo."
 
-#: contrib/admin/options.py:773
+#: contrib/admin/options.py:743
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Os itens devem ser selecionados a fim de executar ações sobre eles. Nenhum "
+"item foi modificado."
+
+#: contrib/admin/options.py:761
+msgid "No action selected."
+msgstr "Nenhuma ação selecionada."
+
+#: contrib/admin/options.py:841
 #, python-format
 msgid "Add %s"
 msgstr "Adicionar %s"
 
-#: contrib/admin/options.py:804 contrib/admin/options.py:1005
+#: contrib/admin/options.py:867 contrib/admin/options.py:1081
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "Objeto %(name)s com chave primária %(key)r não existe."
 
-#: contrib/admin/options.py:861
+#: contrib/admin/options.py:932
 #, python-format
 msgid "Change %s"
 msgstr "Modificar %s"
 
-#: contrib/admin/options.py:905
+#: contrib/admin/options.py:977
 msgid "Database error"
 msgstr "Erro no banco de dados"
 
-#: contrib/admin/options.py:941
+#: contrib/admin/options.py:1013
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
 msgstr[0] "%(count)s %(name)s modificado com sucesso."
 msgstr[1] "%(count)s %(name)s modificados com sucesso."
 
-#: contrib/admin/options.py:1020
+#: contrib/admin/options.py:1040
+#, python-format
+msgid "of %(count)d selected"
+msgid_plural "of %(count)d selected"
+msgstr[0] "de %(count)d selecionado"
+msgstr[1] "de %(count)d selecionados"
+
+#: contrib/admin/options.py:1042
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s selecionado"
+msgstr[1] "Todos %(total_count)s selecionados"
+
+#: contrib/admin/options.py:1094
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "%(name)s \"%(obj)s\": excluído com sucesso."
 
-#: contrib/admin/options.py:1057
+#: contrib/admin/options.py:1131
 #, python-format
 msgid "Change history: %s"
 msgstr "Histórico de modificações: %s"
 
-#: contrib/admin/sites.py:21 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -417,11 +462,11 @@
 "Por favor, entre com um usuário e senha corretos. Note que ambos os campos "
 "diferenciam maiúsculas e minúsculas."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Por favor acesse novamente, pois sua sessão expirou."
 
-#: contrib/admin/sites.py:292 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -429,64 +474,54 @@
 "Parece que seu navegador não está configurado para aceitar cookies. Por "
 "favor habilite os cookies, recarregue esta página, e tente novamente."
 
-#: contrib/admin/sites.py:308 contrib/admin/sites.py:314
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Nomes de usuário não podem conter o caractere '@'."
 
-#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Seu endereço de e-mail não é seu nome de usuário. Tente usar '%s'"
 
-#: contrib/admin/sites.py:367
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Administração do Site"
 
-#: contrib/admin/sites.py:381 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Acessar"
 
-#: contrib/admin/sites.py:426
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "Administração de %s"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "1 ou mais %(fieldname)s em %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "1 ou mais %(fieldname)s em %(name)s:"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Data:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Hora:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Atualmente:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Modificar:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Olhar"
 
-#: contrib/admin/widgets.py:235
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
-msgstr "Adicionar outro"
+msgstr "Adicionar Outro(a)"
 
 #: contrib/admin/templates/admin/404.html:4
 #: contrib/admin/templates/admin/404.html:8
@@ -500,16 +535,16 @@
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
 #: contrib/admin/templates/admin/base.html:54
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:39
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -546,6 +581,19 @@
 msgid "Go"
 msgstr "Ir"
 
+#: contrib/admin/templates/admin/actions.html:10
+msgid "Click here to select the objects across all pages"
+msgstr "Clique aqui para selecionar os objetos de todas as páginas"
+
+#: contrib/admin/templates/admin/actions.html:10
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Selecionar todos %(total_count)s %(module_name)s"
+
+#: contrib/admin/templates/admin/actions.html:12
+msgid "Clear selection"
+msgstr "Limpar seleção"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
@@ -558,22 +606,22 @@
 
 #: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Documentação"
 
 #: contrib/admin/templates/admin/base.html:40
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Alterar senha"
 
 #: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Encerrar sessão"
 
@@ -585,41 +633,42 @@
 msgid "Django administration"
 msgstr "Administração do Django"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Adicionar"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Histórico"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Ver no site"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:68
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Por favor, corrija o erro abaixo."
 msgstr[1] "Por favor, corrija os erros abaixo."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:60
 #, python-format
 msgid "Add %(name)s"
 msgstr "Adicionar %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:79
 msgid "Filter"
 msgstr "Filtro"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:297
 msgid "Delete"
 msgstr "Apagar"
 
@@ -667,7 +716,7 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
 "Você tem certeza que quer remover os objetos %(object_name)s selecionados? "
 "Todos os seguintes objetos e seus itens relacionados serão removidos:"
@@ -733,15 +782,9 @@
 msgstr "Usuário"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Ação"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j \\de N \\de Y à\\s H:i"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -787,7 +830,7 @@
 msgid "Save and continue editing"
 msgstr "Salvar e continuar editando"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -795,33 +838,39 @@
 "Primeiro, informe um nome de usuário e senha. Depois você será capaz de "
 "editar mais opções do usuário."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Usuário"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Senha"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Senha (novamente)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Informe a mesma senha digitada acima, para verificação."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Informe uma nova senha para o usuário <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Senha"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Senha (novamente)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Informe a mesma senha digitada acima, para verificação."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:53
+#: contrib/admin/templates/admin/edit_inline/tabular.html:99
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Adicionar outro %(verbose_name)s"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:56
+#: contrib/admin/templates/admin/edit_inline/tabular.html:102
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Remover"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Apagar?"
@@ -835,9 +884,9 @@
 msgstr "Acessar novamente"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Alterar senha"
 
@@ -850,7 +899,7 @@
 msgid "Your password was changed."
 msgstr "Sua senha foi alterada."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -858,21 +907,17 @@
 "Por favor, informe sua senha antiga, por segurança, e então informe sua nova "
 "senha duas vezes para que possamos verificar se você digitou corretamente."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Senha antiga:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nova senha:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Confirme a senha:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Senha antiga"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Nova senha"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Alterar minha senha"
@@ -911,6 +956,14 @@
 "Por favor, informe sua nova senha duas vezes para que possamos verificar se "
 "você a digitou corretamente."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Nova senha:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Confirme a senha:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Recuperação de senha sem sucesso"
@@ -978,7 +1031,7 @@
 msgid "Reset my password"
 msgstr "Reinicializar minha senha"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:240
 msgid "All dates"
 msgstr "Todas as datas"
 
@@ -992,11 +1045,11 @@
 msgid "Select %s to change"
 msgstr "Selecione %s para modificar"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "site"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "template"
 
@@ -1056,89 +1109,7 @@
 msgid "Fields on %s objects"
 msgstr "Campos nos objetos %s"
 
-#: contrib/admindocs/views.py:334 contrib/admindocs/views.py:345
-#: contrib/admindocs/views.py:347 contrib/admindocs/views.py:353
-#: contrib/admindocs/views.py:354 contrib/admindocs/views.py:356
-msgid "Integer"
-msgstr "Inteiro"
-
-#: contrib/admindocs/views.py:335
-msgid "Boolean (Either True or False)"
-msgstr "Booleano (Verdadeiro ou Falso)"
-
-#: contrib/admindocs/views.py:336 contrib/admindocs/views.py:355
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "String (até %(max_length)s)"
-
-#: contrib/admindocs/views.py:337
-msgid "Comma-separated integers"
-msgstr "Inteiros separados por vírgula"
-
-#: contrib/admindocs/views.py:338
-msgid "Date (without time)"
-msgstr "Data (sem hora)"
-
-#: contrib/admindocs/views.py:339
-msgid "Date (with time)"
-msgstr "Data e hora"
-
-#: contrib/admindocs/views.py:340
-msgid "Decimal number"
-msgstr "Número decimal"
-
-#: contrib/admindocs/views.py:341
-msgid "E-mail address"
-msgstr "Endereço de e-mail"
-
-#: contrib/admindocs/views.py:342 contrib/admindocs/views.py:343
-#: contrib/admindocs/views.py:346
-msgid "File path"
-msgstr "Caminho de arquivo"
-
-#: contrib/admindocs/views.py:344
-msgid "Floating point number"
-msgstr "Número de ponto flutuante"
-
-#: contrib/admindocs/views.py:348 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "Endereço IP"
-
-#: contrib/admindocs/views.py:350
-msgid "Boolean (Either True, False or None)"
-msgstr "Booleano (Verdadeiro, Falso ou Nada)"
-
-#: contrib/admindocs/views.py:351
-msgid "Relation to parent model"
-msgstr "Relação com o modelo pai"
-
-#: contrib/admindocs/views.py:352
-msgid "Phone number"
-msgstr "Número de telefone"
-
-#: contrib/admindocs/views.py:357
-msgid "Text"
-msgstr "Texto"
-
-#: contrib/admindocs/views.py:358
-msgid "Time"
-msgstr "Hora"
-
-#: contrib/admindocs/views.py:359 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:360
-msgid "U.S. state (two uppercase letters)"
-msgstr "Estado dos EUA (duas letras maiúsculas)"
-
 #: contrib/admindocs/views.py:361
-msgid "XML text"
-msgstr "Texto XML"
-
-#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s não aparenta ser um objeto urlpattern"
@@ -1208,66 +1179,61 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Como acima, mas abre a página de administração em uma nova janela."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Informações pessoais"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Permissões"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Datas importantes"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Grupos"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Adicionar usuário"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Senha modificada com sucesso."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Alterar senha: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Obrigatório. 30 caracteres ou menos. Apenas caracteres alfanuméricos(letras, "
-"dígitos e sublinhados (_) )"
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Este valor deve conter apenas letras, números e sublinhados (_)."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Usuário"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr "Obrigatório. 30 caracteres ou menos. Somente letras, dígitos e @/./+/-/_."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Este valor deve conter apenas letras, números e os caracteres @/./+/-/_."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Confirmação de senha"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Um usuário com este nome de usuário já existe."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Os dois campos de senha não combinam."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Esta conta está inativa."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1275,105 +1241,102 @@
 "Seu navegador Web não parece estar com os cookies habilitados. Cookies são "
 "requeridos para acessar."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "E-mail"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
 msgstr ""
-"Este endereço de e-mail não está associado com uma conta de usuário.Você tem "
-"certeza que está registrado?"
-
-#: contrib/auth/forms.py:135
+"Este endereço de e-mail não está associado com uma conta de usuário. Você "
+"tem certeza que está registrado?"
+
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Recuperar senha em %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Nova senha"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Confirmação da nova senha"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Senha antiga"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr ""
 "A senha antiga foi digitada incorretamente. Por favor, informe a senha "
 "novamente."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "nome"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "apelido"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "permissão"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "permissões"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "grupo"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "grupos"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "usuário"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr "Obrigatório. 30 caracteres ou menos. Letras, números e os caracteres @/./+/-/_"
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "primeiro nome"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "último nome"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "endereço de e-mail"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "senha"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
 msgstr ""
 "Use '[algo]$[salt]$[hexdigest]' ou <a href=\"password/\"> Altere a senha</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "membro da equipe"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr "Indica que usuário consegue acessar este site de administração."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "ativo"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1381,11 +1344,11 @@
 "Indica que o usuário será tratado como ativo. Ao invés de excluir contas de "
 "usuário, desmarque isso."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "status de superusuário"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
@@ -1393,15 +1356,15 @@
 "Indica que este usuário tem todas as permissões sem atribuí-las "
 "explicitamente."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "último login"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "data de registro"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1409,39 +1372,77 @@
 "Em adição às permissões atribuídas manualmente, este usuário também terá "
 "todas as permissões dadas a cada grupo que participar."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "permissões do usuário"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "usuário"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "usuários"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "mensagem"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Sessão encerrada"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:416
 msgid "Enter a valid e-mail address."
 msgstr "Informe um endereço de email válido."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Conteúdo"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Meta-dados"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "marcado"
+msgstr[1] "marcados"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Marcar comentários selecionados"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "aprovado"
+msgstr[1] "aprovados"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Aprovar comentários selecionados"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "removido"
+msgstr[1] "removidos"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Remover comentários selecionados"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "1 comentários foi %(action)s com sucesso."
+msgstr[1] "%(count)s comentários foram %(action)s com sucesso."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1453,7 +1454,6 @@
 msgstr "Últimos comentários em %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Nome"
 
@@ -1461,26 +1461,30 @@
 msgid "Email address"
 msgstr "Endereço de e-mail"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1121
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Comentário"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Olha sua boca! A palavra %s não é permitida aqui."
 msgstr[1] "Olha sua boca! As palavras %s não são permitidas aqui."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr ""
 "Se você inserir qualquer coisa neste campo, seu comentário será tratado como "
 "spam"
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "tipo de conteúdo"
 
@@ -1509,6 +1513,10 @@
 msgid "date/time submitted"
 msgstr "data/hora de envio"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:916
+msgid "IP address"
+msgstr "Endereço IP"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "é público"
@@ -1592,7 +1600,6 @@
 msgstr "Realmente tornar este comentário público?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Aprovar"
 
@@ -1617,11 +1624,6 @@
 msgid "Really remove this comment?"
 msgstr "Realmente remover este comentário?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Remover"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Obrigado pela remoção"
@@ -1652,39 +1654,6 @@
 msgid "Preview"
 msgstr "Visualizar"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Fila de moderação de comentário"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Nenhum comentário para moderar"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Email"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Autenticado?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "Endereço IP"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Data de publicação"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "sim"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "não"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Obrigado por comentar"
@@ -1712,11 +1681,11 @@
 msgid "or make changes"
 msgstr "ou faça modificações"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "nome da classe model em python"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "tipos de conteúdo"
 
@@ -1778,7 +1747,7 @@
 msgid "flat pages"
 msgstr "páginas planas"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1786,6 +1755,38 @@
 "Desculpe, mas seu formulário expirou. Por favor, continue preenchendo o "
 "formulário desta página."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:269
+msgid "Point"
+msgstr "Ponto"
+
+#: contrib/gis/db/models/fields.py:273
+msgid "Line string"
+msgstr "Linha string"
+
+#: contrib/gis/db/models/fields.py:277
+msgid "Polygon"
+msgstr "Polígono"
+
+#: contrib/gis/db/models/fields.py:281
+msgid "Multi-point"
+msgstr "Multiponto"
+
+#: contrib/gis/db/models/fields.py:285
+msgid "Multi-line string"
+msgstr "Multilinha string"
+
+#: contrib/gis/db/models/fields.py:289
+msgid "Multi polygon"
+msgstr "Multipolígono"
+
+#: contrib/gis/db/models/fields.py:293
+msgid "Geometry collection"
+msgstr "Coleção geométrica"
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Nenhum valor geométrico fornecido."
@@ -1891,25 +1892,25 @@
 msgid "yesterday"
 msgstr "ontem"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Informe um código postal no formato NNNN ou ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Este campo requer somente números."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Este campo requer 7 ou 8 dígitos."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Informe um CUIT válido no formato XX-XXXXXXXX-X ou XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "CUIT inválido."
 
@@ -1949,8 +1950,8 @@
 msgid "Vienna"
 msgstr "Viena"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Informe um código postal no formato XXXX."
 
@@ -1959,19 +1960,19 @@
 msgstr ""
 "Informe um número de Seguro Social Austríaco válido no formato XXXX XXXXXX."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Informe um código postal de 4 dígitos."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Informe um código postal no formato XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Números de telefone devem estar no formato XX-XXXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
@@ -1979,27 +1980,27 @@
 "Selecione um estado brasileiro válido. O estado escolhido não é um dos "
 "estados disponíveis."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Número de CPF inválido."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Este campo requer no máximo 11 dígitos ou 14 caracteres."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Número de CNPJ inválido."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "Este campo requer ao menos 14 dígitos"
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "Informe um código postal no formato XXX XXX."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr ""
 "Informe um número de Canadian Social Insurance válido no formato XXX-XXX-XXX."
@@ -2108,7 +2109,7 @@
 msgid "Zurich"
 msgstr "Zurique"
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
@@ -2116,15 +2117,15 @@
 "Informe uma indentidade Suíça ou número de passaporte válido no formato "
 "X1234567<0 ou 1234567890."
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Informe um RUT chileno válido."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Informe um RUT chileno válido. O formato é XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "O RUT chileno não é válido."
 
@@ -2184,23 +2185,23 @@
 msgid "Moravian-Silesian Region"
 msgstr "Região de Morávia-Silésia"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Informe um código postal no formato XXXXX ou XXX XX."
 
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Informe um número de nascimento no formato XXXXXX/XXXX ou XXXXXXXXXX."
-
 #: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "Parâmetro opcional Gênero inválido, os valores válidos são 'f' e 'm'"
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr "Informe um número de nascimento no formato XXXXXX/XXXX ou XXXXXXXXXX."
 
 #: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr "Parâmetro opcional Gênero inválido, os valores válidos são 'f' e 'm'"
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr "Informe um número de nascimento válido."
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr "Informe um número IC válido."
 
@@ -2268,12 +2269,12 @@
 msgid "Thuringia"
 msgstr "Turíngia"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Informe um código postal no formato XXXXX."
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2548,11 +2549,11 @@
 msgid "Valencian Community"
 msgstr "Comunidade Valenciana"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "Informe um código postal válido no intervalo e formato 01XXX - 52XXX."
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
@@ -2560,63 +2561,495 @@
 "Informe um número de telefone válido em um destes formatos 6XXXXXXXX, "
 "8XXXXXXXX ou 9XXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr "Por favor, informe um NIF, NIE OU CIF válido."
 
-#: contrib/localflavor/es/forms.py:67
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Por favor, informe um NIF ou FIE válido."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "O NIF é incorreto."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "O NIE é incorreto."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "O CIF é incorreto."
 
-#: contrib/localflavor/es/forms.py:142
+#: contrib/localflavor/es/forms.py:143
 msgid ""
 "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
 msgstr ""
 "Por favor, informe um número de conta bancária válida no formato XXXX-XXXX-"
 "XX-XXXXXXXXXX."
 
-#: contrib/localflavor/es/forms.py:143
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Número de verificação de conta bancária incorreto."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Informe um número de seguro social finlandês válido."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Números de telefone devem estar no formato 0X XX XX XX XX."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Informe um código postal válido."
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Informe um número de telefone válido."
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Informe uma placa de licença de veículo válida."
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Informe um número NIK/KTP válido."
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Bali"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Banten"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Bengkulu"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Yogyakarta"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Jacarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Gorontalo"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Jambi"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Java Ocidental"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Java Central"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Java Oriental"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Kalimantan Ocicental"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Kalimantan do Sul"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Kalimantan Central"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Kalimantan Oriental"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Ilhas Bangka-Belitung"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Ilhas Riau"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Lampung"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Molucas"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Molucas do Norte"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Achém"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Sonda Ocidental"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Sonda Oriental"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Papua"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Papua Ocidental"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Riau"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "Celebes Ocidental"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "Celebes do Sul"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "Celebes Central"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "Celebes do Sudeste"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "Celebes do Norte"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "Sumatra Ocidental"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "Sumatra do Sul"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "Sumatra do Norte"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "Magelang"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "Surakarta - Solo"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "Madiun"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "Kediri"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "Tapanuli"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "Ilhas Bangka Belitung"
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "Bandung"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - Timor"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - Lombok"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "Papua e Papua Ocidental"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "Cirebon"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - Sumbawa"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - Flores"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - Sumba"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "Bogor"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "Pekalongan"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "Semarang"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "Pati"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "Surubaia"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "Madura"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "Malang"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "Jember"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "Banyumas"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "Governo Federal"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "Bojonegoro"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "Purwakarta"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "Sidoarjo"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "Garut"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "Armagh"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "Carlow"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "Cavan"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "Clare"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "Cork"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "Derry"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "Donegal"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "Down"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Dublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "Galway"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "Kerry"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "Kildare"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "Condado"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "Laois"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "Condado"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "Limerick"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "Longford"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "Louth"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Mayo"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "Meath"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "Monaghan"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "Offaly"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "Roscommon"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "Sligo"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "Tipperary"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "Tyrone"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "Waterford"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "Westmeath"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "Wexford"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "Condado"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Informe um código postal no formato XXXXXXX."
 
-#: contrib/localflavor/is_/forms.py:17
+#: contrib/localflavor/is_/forms.py:18
 msgid ""
 "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr "Informe um número de identificação islandês válido."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "O número de identificação islandês não é válido."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Informe um código postal válido."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Informe um número de Segurança Social válido."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Informe um número IVA válido."
 
@@ -2812,6 +3245,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Informe um ID Civil Kuwaitiano válido."
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2940,15 +3377,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Informe um código postal válido."
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Informe um número de telefone válido."
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Informe um número SoFi válido."
 
@@ -3000,15 +3433,15 @@
 msgid "Zuid-Holland"
 msgstr "Holanda do Sul"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Informe um número de segurança social norueguês válido."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Este campo requer 8 dígitos."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Este campo requer 11 dígitos."
 
@@ -3108,6 +3541,15 @@
 msgid "West Pomerania"
 msgstr "Pomerânia Ocidental"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Informe um código postal no formato XXXX-XXX."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+"Números de telefone precisam conter 9 dígios, ou começarem com + ou 00."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Informe um CIF válido."
@@ -3128,6 +3570,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "Informe um código postal no formato XXXXXX."
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Informe um número de organização sueco válido."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Informe um número sueco de identidade pessoal válido."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Números de coordenação não são permitidos."
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Informe um código postal sueco válido no formato XXXXX."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Estocolmo"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotlândia"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr "Banská Bystrica"
@@ -3760,20 +4302,45 @@
 msgid "Wales"
 msgstr "País de Gales"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "Informe um código postal no formato XXXXX ou XXXXX-XXXX."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Números de telefone devem estar no formato XXX-XXX-XXXX."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr ""
 "Informe um número de Seguro Social dos EUA válido no formato XXX-XX-XXXX."
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Insira um estado ou território dos E.U.A."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Estado dos E.U.A. (duas letras maiúsculas)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Número de telefone"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+"Informe um número CI válido no formato X.XXX.XXX-X,XXXXXXX-X ou XXXXXXXX."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Informe um número CI válido."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Informe um ID sul-africado válido."
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Informe um código postal sul-africado válido."
 
@@ -3813,6 +4380,10 @@
 msgid "Western Cape"
 msgstr "Cabo Ocidental"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "mensagem lazy"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "redirecionar de"
@@ -3877,60 +4448,221 @@
 msgid "sites"
 msgstr "sites"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Este valor deve ser um inteiro."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Este valor deve ser True ou False."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Informe um valor válido."
+
+#: core/validators.py:87 forms/fields.py:517
+msgid "Enter a valid URL."
+msgstr "Informe uma URL válida."
+
+#: core/validators.py:89 forms/fields.py:518
+msgid "This URL appears to be a broken link."
+msgstr "A URL %s aparenta ser um link quebrado."
+
+#: core/validators.py:123 forms/fields.py:861
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Insira um \"slug\" válido consistindo de letras, números, sublinhados (_) ou "
+"hífens."
+
+#: core/validators.py:126 forms/fields.py:854
+msgid "Enter a valid IPv4 address."
+msgstr "Informe um endereço IPv4 válido."
+
+#: core/validators.py:129 db/models/fields/__init__.py:598
+msgid "Enter only digits separated by commas."
+msgstr "Informe apenas dígitos separados por vírgulas."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Certifique-se de que o valor é %(limit_value)s (ele é %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:196 forms/fields.py:246
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Certifique-se que este valor seja menor ou igual a %(limit_value)s."
+
+#: core/validators.py:158 forms/fields.py:197 forms/fields.py:247
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Certifique-se que este valor seja maior ou igual a %(limit_value)s."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Certifique-se de que o valor tenha no mínimo %(limit_value)d caracteres (ele "
+"possui %(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Certifique-se de que o valor tenha no máximo %(limit_value)d caracteres (ele "
+"possui %(show_value)d)."
+
+#: db/models/base.py:818
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s deverá ser único para %(date_field)s %(lookup)s."
+
+#: db/models/base.py:833 db/models/base.py:841
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s com este %(field_label)s já existe."
+
+#: db/models/fields/__init__.py:62
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "O valor %r não é uma escolha válida."
+
+#: db/models/fields/__init__.py:63
 msgid "This field cannot be null."
 msgstr "Este campo não pode ser nulo."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Informe apenas dígitos separados por vírgulas."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be blank."
+msgstr "Este campo não pode estar em branco."
+
+#: db/models/fields/__init__.py:69
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Campo do tipo: %(field_type)s"
+
+#: db/models/fields/__init__.py:477 db/models/fields/__init__.py:878
+#: db/models/fields/__init__.py:981 db/models/fields/__init__.py:992
+#: db/models/fields/__init__.py:1019
+msgid "Integer"
+msgstr "Inteiro"
+
+#: db/models/fields/__init__.py:481 db/models/fields/__init__.py:876
+msgid "This value must be an integer."
+msgstr "Este valor deve ser um inteiro."
+
+#: db/models/fields/__init__.py:516
+msgid "This value must be either True or False."
+msgstr "Este valor deve ser True ou False."
+
+#: db/models/fields/__init__.py:518
+msgid "Boolean (Either True or False)"
+msgstr "Booleano (Verdadeiro ou Falso)"
+
+#: db/models/fields/__init__.py:565 db/models/fields/__init__.py:1002
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "String (até %(max_length)s)"
+
+#: db/models/fields/__init__.py:593
+msgid "Comma-separated integers"
+msgstr "Inteiros separados por vírgula"
+
+#: db/models/fields/__init__.py:607
+msgid "Date (without time)"
+msgstr "Data (sem hora)"
+
+#: db/models/fields/__init__.py:611
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Informe uma data válida no formato AAAA-MM-DD."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:612
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Data inválida: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:693
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr ""
 "Informe uma data/hora válida no formato YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:695
+msgid "Date (with time)"
+msgstr "Data e hora"
+
+#: db/models/fields/__init__.py:761
 msgid "This value must be a decimal number."
 msgstr "Este valor deve ser um número decimal."
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:763
+msgid "Decimal number"
+msgstr "Número decimal"
+
+#: db/models/fields/__init__.py:818
+msgid "E-mail address"
+msgstr "Endereço de e-mail"
+
+#: db/models/fields/__init__.py:825 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Caminho de arquivo"
+
+#: db/models/fields/__init__.py:848
 msgid "This value must be a float."
 msgstr "Este valor deve ser um ponto flutuante."
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:850
+msgid "Floating point number"
+msgstr "Número de ponto flutuante"
+
+#: db/models/fields/__init__.py:903
+msgid "Big (8 byte) integer"
+msgstr "Inteiro grande (8 byte)"
+
+#: db/models/fields/__init__.py:932
 msgid "This value must be either None, True or False."
 msgstr "Este valor deve ser None, True ou False."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:934
+msgid "Boolean (Either True, False or None)"
+msgstr "Booleano (Verdadeiro, Falso ou Nada)"
+
+#: db/models/fields/__init__.py:1025
+msgid "Text"
+msgstr "Texto"
+
+#: db/models/fields/__init__.py:1041
+msgid "Time"
+msgstr "Hora"
+
+#: db/models/fields/__init__.py:1045
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Informe uma hora válida no formato HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:816
+#: db/models/fields/__init__.py:1129
+msgid "XML text"
+msgstr "Texto XML"
+
+#: db/models/fields/related.py:755
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Model %(model)s com chave primária %(pk)r não existe."
+
+#: db/models/fields/related.py:757
+msgid "Foreign Key (type determined by related field)"
+msgstr "Chave Estrangeira (tipo determinado pelo campo relacionado)"
+
+#: db/models/fields/related.py:879
+msgid "One-to-one relationship"
+msgstr "Relacionamento um-para-um"
+
+#: db/models/fields/related.py:939
+msgid "Many-to-many relationship"
+msgstr "Relacionamento muitos-para-muitos"
+
+#: db/models/fields/related.py:959
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Mantenha pressionado \"Control\" (ou \"Command\" no Mac) para selecionar "
 "mais de uma opção."
 
-#: db/models/fields/related.py:894
+#: db/models/fields/related.py:1020
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3941,87 +4673,59 @@
 "Por favor, informe IDs válidos para %(self)s. Os valores %(value)r são "
 "inválidos."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Este campo é obrigatório."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Informe um valor válido."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Certifique-se de que o valor tenha no máximo %(max)d caracteres (ele possui %"
-"(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Certifique-se de que o valor tenha no mínimo %(min)d caracteres (ele possui %"
-"(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:195
 msgid "Enter a whole number."
 msgstr "Informe um número inteiro."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Certifique-se que este valor seja menor ou igual a %s."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Certifique-se que este valor seja maior ou igual a %s."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:225 forms/fields.py:245
 msgid "Enter a number."
 msgstr "Informe um número."
 
-#: forms/fields.py:227
+#: forms/fields.py:248
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Certifique-se de que não tenha mais de %s dígitos no total."
 
-#: forms/fields.py:228
+#: forms/fields.py:249
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Certifique-se de que não tenha mais de %s casa decimais."
 
-#: forms/fields.py:229
+#: forms/fields.py:250
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr ""
 "Certifique-se de que não tenha mais de %s dígitos antes do ponto decimal."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:311 forms/fields.py:826
 msgid "Enter a valid date."
 msgstr "Informe uma data válida."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:339 forms/fields.py:827
 msgid "Enter a valid time."
 msgstr "Informe uma hora válida."
 
-#: forms/fields.py:361
+#: forms/fields.py:365
 msgid "Enter a valid date/time."
 msgstr "Informe uma data/hora válida."
 
-#: forms/fields.py:447
+#: forms/fields.py:423
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "Nenhum arquivo enviado. Verifique o tipo de codificação do formulário."
 
-#: forms/fields.py:448
+#: forms/fields.py:424
 msgid "No file was submitted."
 msgstr "Não foi enviado nenhum arquivo."
 
-#: forms/fields.py:449
+#: forms/fields.py:425
 msgid "The submitted file is empty."
 msgstr "O arquivo enviado está vazio."
 
-#: forms/fields.py:450
+#: forms/fields.py:426
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4029,7 +4733,7 @@
 "Certifique-se de que o arquivo tenha no máximo %(max)d caracteres (ele "
 "possui %(length)d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:461
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4037,62 +4741,31 @@
 "Envie uma imagem válida. O arquivo enviado não é uma imagem ou está "
 "corrompido."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Informe uma URL válida."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "A URL %s aparenta ser um link quebrado."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:584 forms/fields.py:659
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Faça uma escolha válida. %(value)s não está disponível."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
-#: forms/models_flymake.py:1003
+#: forms/fields.py:660 forms/fields.py:722 forms/models.py:989
 msgid "Enter a list of values."
 msgstr "Informe uma lista de valores."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Informe um endereço IPv4 válido."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Insira um \"slug\" válido consistindo de letras, números, sublinhados (_) ou "
-"hífens."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:293 forms/formsets.py:295
 msgid "Order"
 msgstr "Ordem"
 
-#: forms/models.py:367 forms/models_flymake.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s deverá ser único para %(date_field)s %(lookup)s."
-
-#: forms/models.py:381 forms/models.py:389 forms/models_flymake.py:381
-#: forms/models_flymake.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s com este %(field_label)s já existe."
-
-#: forms/models.py:594 forms/models_flymake.py:594
+#: forms/models.py:550
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Por favor, corrija o valor duplicado para %(field)s."
 
-#: forms/models.py:598 forms/models_flymake.py:598
+#: forms/models.py:554
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr ""
 "Por favor, corrija o valor duplicado para %(field)s, o qual deve ser único"
 
-#: forms/models.py:604 forms/models_flymake.py:604
+#: forms/models.py:560
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
@@ -4101,52 +4774,52 @@
 "Por favor corrija os dados duplicados em %(field_name)s que deverá ser único "
 "para o %(lookup)s em %(date_field)s."
 
-#: forms/models.py:612 forms/models_flymake.py:612
+#: forms/models.py:568
 msgid "Please correct the duplicate values below."
 msgstr "Por favor, corrija os valores duplicados abaixo."
 
-#: forms/models.py:867 forms/models_flymake.py:867
+#: forms/models.py:842
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr ""
 "A chave estrangeira no inline não coincide com a chave primária na instância "
 "pai."
 
-#: forms/models.py:930 forms/models_flymake.py:930
+#: forms/models.py:908
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Faça uma escolha válida. Sua escolha não é uma das disponíveis."
 
-#: forms/models.py:1004 forms/models_flymake.py:1004
+#: forms/models.py:990
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Faça uma escolha válida. %s não está disponível."
 
-#: forms/models.py:1006 forms/models_flymake.py:1006
+#: forms/models.py:992
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "\"%s\" não é um valor válido para uma chave primária."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "sim,não,talvez"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d byte"
 msgstr[1] "%(size)d bytes"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4355,7 +5028,7 @@
 msgid "Dec."
 msgstr "Dez."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "ou"
 
@@ -4409,33 +5082,38 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
 msgstr "j \\de N \\de Y"
 
-#: utils/translation/trans_real.py:401
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j \\de N \\de Y à\\s H:i"
+
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
 msgstr "H:i"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F \\de Y"
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
 msgstr "j \\de F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "%(verbose_name)s: criado com sucesso."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "%(verbose_name)s: atualizado com sucesso."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s: excluído."
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/pt_BR/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,35 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = r'j \de N \de Y'
+TIME_FORMAT = 'H:i'
+DATETIME_FORMAT = r'j \de N \de Y à\s H:i'
+YEAR_MONTH_FORMAT = r'F \de Y'
+MONTH_DAY_FORMAT = r'j \de F'
+SHORT_DATE_FORMAT = 'd/m/Y'
+SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+FIRST_DAY_OF_WEEK = 0  # Sunday
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d', '%d/%m/%Y', '%d/%m/%y', # '2006-10-25', '25/10/2006', '25/10/06'
+    # '%d de %b de %Y', '%d de %b, %Y',   # '25 de Out de 2006', '25 Out, 2006'
+    # '%d de %B de %Y', '%d de %B, %Y',   # '25 de Outubro de 2006', '25 de Outubro, 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',        # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%d/%m/%Y %H:%M:%S',     # '25/10/2006 14:30:59'
+    '%d/%m/%Y %H:%M',        # '25/10/2006 14:30'
+    '%d/%m/%Y',              # '25/10/2006'
+    '%d/%m/%y %H:%M:%S',     # '25/10/06 14:30:59'
+    '%d/%m/%y %H:%M',        # '25/10/06 14:30'
+    '%d/%m/%y',              # '25/10/06'
+    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    '%Y-%m-%d',              # '2006-10-25'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/ro/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/ro/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/ro/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -17,19 +17,19 @@
 
 #: .\conf\global_settings.py:39
 msgid "Arabic"
-msgstr "Araba"
+msgstr "Arabă"
 
 #: .\conf\global_settings.py:40
 msgid "Bengali"
-msgstr "Bengaleza"
+msgstr "Bengaleză"
 
 #: .\conf\global_settings.py:41
 msgid "Bulgarian"
-msgstr "Bulgara"
+msgstr "Bulgară"
 
 #: .\conf\global_settings.py:42
 msgid "Catalan"
-msgstr "Catalana"
+msgstr "Catalană"
 
 #: .\conf\global_settings.py:43
 msgid "Czech"
@@ -37,11 +37,11 @@
 
 #: .\conf\global_settings.py:44
 msgid "Welsh"
-msgstr "Galeza"
+msgstr "Galeză"
 
 #: .\conf\global_settings.py:45
 msgid "Danish"
-msgstr "Daneza"
+msgstr "Daneză"
 
 #: .\conf\global_settings.py:46
 msgid "German"
@@ -49,7 +49,7 @@
 
 #: .\conf\global_settings.py:47
 msgid "Greek"
-msgstr "Greaca"
+msgstr "Greacă"
 
 #: .\conf\global_settings.py:48
 msgid "English"
@@ -61,19 +61,19 @@
 
 #: .\conf\global_settings.py:50
 msgid "Argentinean Spanish"
-msgstr "Spaniola argentiniana"
+msgstr "Spaniolă argentiniană"
 
 #: .\conf\global_settings.py:51
 msgid "Basque"
-msgstr "Basca"
+msgstr "Bască"
 
 #: .\conf\global_settings.py:52
 msgid "Persian"
-msgstr "Persana"
+msgstr "Persană"
 
 #: .\conf\global_settings.py:53
 msgid "Finnish"
-msgstr "Finlandeza"
+msgstr "Finlandeză"
 
 #: .\conf\global_settings.py:54
 msgid "French"
@@ -81,7 +81,7 @@
 
 #: .\conf\global_settings.py:55
 msgid "Irish"
-msgstr "Irlandeza"
+msgstr "Irlandeză"
 
 #: .\conf\global_settings.py:56
 msgid "Galician"
@@ -89,19 +89,19 @@
 
 #: .\conf\global_settings.py:57
 msgid "Hungarian"
-msgstr "Ungara"
+msgstr "Ungară"
 
 #: .\conf\global_settings.py:58
 msgid "Hebrew"
-msgstr "Ebraica"
+msgstr "Ebraică"
 
 #: .\conf\global_settings.py:59
 msgid "Croatian"
-msgstr "Croata"
+msgstr "Croată"
 
 #: .\conf\global_settings.py:60
 msgid "Icelandic"
-msgstr "Islandeza"
+msgstr "Islandeză"
 
 #: .\conf\global_settings.py:61
 msgid "Italian"
@@ -109,19 +109,19 @@
 
 #: .\conf\global_settings.py:62
 msgid "Japanese"
-msgstr "Japoneza"
+msgstr "Japoneză"
 
 #: .\conf\global_settings.py:63
 msgid "Georgian"
-msgstr "Georgiana"
+msgstr "Georgiană"
 
 #: .\conf\global_settings.py:64
 msgid "Korean"
-msgstr "Koreana"
+msgstr "Koreană"
 
 #: .\conf\global_settings.py:65
 msgid "Khmer"
-msgstr "Khmera"
+msgstr "Khmeră"
 
 #: .\conf\global_settings.py:66
 msgid "Kannada"
@@ -129,15 +129,15 @@
 
 #: .\conf\global_settings.py:67
 msgid "Latvian"
-msgstr "Letona"
+msgstr "Letonă"
 
 #: .\conf\global_settings.py:68
 msgid "Macedonian"
-msgstr "Macedoneana"
+msgstr "Macedoneană"
 
 #: .\conf\global_settings.py:69
 msgid "Dutch"
-msgstr "Olandeza"
+msgstr "Olandeză"
 
 #: .\conf\global_settings.py:70
 msgid "Norwegian"
@@ -145,19 +145,19 @@
 
 #: .\conf\global_settings.py:71
 msgid "Polish"
-msgstr "Poloneza"
+msgstr "Poloneză"
 
 #: .\conf\global_settings.py:72
 msgid "Portugese"
-msgstr "Portugheza"
+msgstr "Portugheză"
 
 #: .\conf\global_settings.py:73
 msgid "Brazilian Portuguese"
-msgstr "Portugheza braziliana"
+msgstr "Portugheză braziliană"
 
 #: .\conf\global_settings.py:74
 msgid "Romanian"
-msgstr "Romana"
+msgstr "Română"
 
 #: .\conf\global_settings.py:75
 msgid "Russian"
@@ -165,19 +165,19 @@
 
 #: .\conf\global_settings.py:76
 msgid "Slovak"
-msgstr "Slovaca"
+msgstr "Slovacă"
 
 #: .\conf\global_settings.py:77
 msgid "Slovenian"
-msgstr "Slovena"
+msgstr "Slovenă"
 
 #: .\conf\global_settings.py:78
 msgid "Serbian"
-msgstr "Sîrbă"
+msgstr "Sârbă"
 
 #: .\conf\global_settings.py:79
 msgid "Swedish"
-msgstr "Suedeza"
+msgstr "Suedeză"
 
 #: .\conf\global_settings.py:80
 msgid "Tamil"
@@ -189,11 +189,11 @@
 
 #: .\conf\global_settings.py:82
 msgid "Turkish"
-msgstr "Turca"
+msgstr "Turcă"
 
 #: .\conf\global_settings.py:83
 msgid "Ukrainian"
-msgstr "Ucraineana"
+msgstr "Ucraineană"
 
 #: .\conf\global_settings.py:84
 msgid "Simplified Chinese"
@@ -201,7 +201,7 @@
 
 #: .\conf\global_settings.py:85
 msgid "Traditional Chinese"
-msgstr "Chineza traditionala"
+msgstr "Chineză tradițională"
 
 #: .\contrib\admin\filterspecs.py:44
 #, python-format
@@ -209,7 +209,7 @@
 "<h3>By %s:</h3>\n"
 "<ul>\n"
 msgstr ""
-"<h3>Dupa %s:</h3>\n"
+"<h3>După %s:</h3>\n"
 "<ul>\n"
 
 #: .\contrib\admin\filterspecs.py:74
@@ -225,7 +225,7 @@
 
 #: .\contrib\admin\filterspecs.py:114
 msgid "Today"
-msgstr "Astazi"
+msgstr "Astăzi"
 
 #: .\contrib\admin\filterspecs.py:117
 msgid "Past 7 days"
@@ -325,7 +325,7 @@
 
 #: .\contrib\admin\templates\admin\500.html.py:10
 msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "A apărut o eroare. Este raportată către administrator via emailşi va fi fixată în scurt timp. Mulţumim pentru înţelegere."
+msgstr "A apărut o eroare. Este raportată către administrator via email şi va fi reparată în scurt timp. Mulţumim pentru înţelegere."
 
 #: .\contrib\admin\templates\admin\base.html.py:26
 msgid "Welcome,"
@@ -334,7 +334,7 @@
 #: .\contrib\admin\templates\admin\base.html.py:28
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
 msgid "Documentation"
-msgstr "Documentatie"
+msgstr "Documentație"
 
 #: .\contrib\admin\templates\admin\base.html.py:29
 #: .\contrib\admin\templates\admin\auth\user\change_password.html.py:14
@@ -367,18 +367,18 @@
 
 #: .\contrib\admin\templates\admin\change_form.html.py:21
 msgid "View on site"
-msgstr "Vizualizeaza pe site"
+msgstr "Vizualizează pe site"
 
 #: .\contrib\admin\templates\admin\change_form.html.py:31
 #: .\contrib\admin\templates\admin\auth\user\change_password.html.py:23
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
-msgstr[0] "Va rugam sa corectati eroarea de mai jos"
-msgstr[1] "Va rugam sa corectati erorile de mai jos"
+msgstr[0] "Vă rugăm să corectați eroarea de mai jos"
+msgstr[1] "Vă rugăm să corectați erorile de mai jos"
 
 #: .\contrib\admin\templates\admin\change_form.html.py:49
 msgid "Ordering"
-msgstr "Ordonate dupa"
+msgstr "Ordonate după"
 
 #: .\contrib\admin\templates\admin\change_form.html.py:52
 msgid "Order:"
@@ -392,12 +392,12 @@
 #: .\contrib\admin\templates\admin\delete_confirmation.html.py:8
 #: .\contrib\admin\templates\admin\submit_line.html.py:3
 msgid "Delete"
-msgstr "Sterge"
+msgstr "Șterge"
 
 #: .\contrib\admin\templates\admin\delete_confirmation.html.py:13
 #, python-format
 msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "Ştergînd %(object_name)s '%(escaped_object)s' va avea ca rezultat ştergerea şi a obiectelor ce au legătură, dar contul tău nu are permisiunea de a şterge următoarele tipuri de obiecte:"
+msgstr "Ştergerea %(object_name)s '%(escaped_object)s' ar cauza și ştergerea obiectelor asociate, dar contul tău nu are permisiunea de a şterge următoarele tipuri de obiecte:"
 
 #: .\contrib\admin\templates\admin\delete_confirmation.html.py:20
 #, python-format
@@ -406,12 +406,12 @@
 
 #: .\contrib\admin\templates\admin\delete_confirmation.html.py:25
 msgid "Yes, I'm sure"
-msgstr "Da, sînt sigur"
+msgstr "Da, sunt sigur"
 
 #: .\contrib\admin\templates\admin\filter.html.py:2
 #, python-format
 msgid " By %(filter_title)s "
-msgstr "Dupa %(filter_title)s "
+msgstr "După %(filter_title)s "
 
 #: .\contrib\admin\templates\admin\filters.html.py:4
 msgid "Filter"
@@ -420,7 +420,7 @@
 #: .\contrib\admin\templates\admin\index.html.py:17
 #, python-format
 msgid "Models available in the %(name)s application."
-msgstr "Modele disponibile in applicatia %(name)s"
+msgstr "Modele disponibile în aplicația %(name)s"
 
 #: .\contrib\admin\templates\admin\index.html.py:18
 #, python-format
@@ -437,11 +437,11 @@
 
 #: .\contrib\admin\templates\admin\index.html.py:52
 msgid "Recent Actions"
-msgstr "Acţiuni Recente"
+msgstr "Acţiuni recente"
 
 #: .\contrib\admin\templates\admin\index.html.py:53
 msgid "My Actions"
-msgstr "Acţiunile Mele"
+msgstr "Acţiunile mele"
 
 #: .\contrib\admin\templates\admin\index.html.py:57
 msgid "None available"
@@ -449,7 +449,7 @@
 
 #: .\contrib\admin\templates\admin\invalid_setup.html.py:8
 msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "Exista o problema cu baza de date. Verificati daca tabelele necesare din baza de date au fost create si verificati daca baza de date poate fi citita de utilizatorul potrivit."
+msgstr "Există o problema cu baza de date. Verificați dacă tabelele necesare din baza de date au fost create și verificați dacă baza de date poate fi citită de utilizatorul potrivit."
 
 #: .\contrib\admin\templates\admin\login.html.py:17
 #: .\contrib\comments\templates\comments\form.html.py:6
@@ -460,7 +460,7 @@
 #: .\contrib\admin\templates\admin\login.html.py:20
 #: .\contrib\comments\templates\comments\form.html.py:8
 msgid "Password:"
-msgstr "Parola:"
+msgstr "Parolă:"
 
 #: .\contrib\admin\templates\admin\login.html.py:25
 #: .\contrib\admin\views\decorators.py:31
@@ -485,11 +485,11 @@
 
 #: .\contrib\admin\templates\admin\object_history.html.py:35
 msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "Acest obiect nu are un istoric al schimbărilor. Probabil nu a fost adăugat prinintermediul acestui sit de administrare."
+msgstr "Acest obiect nu are un istoric al schimbărilor. Probabil nu a fost adăugat prin intermediul acestui sit de administrare."
 
 #: .\contrib\admin\templates\admin\pagination.html.py:10
 msgid "Show all"
-msgstr "Arata tot/toate"
+msgstr "Arată tot/toate"
 
 #: .\contrib\admin\templates\admin\search_form.html.py:8
 msgid "Go"
@@ -509,23 +509,23 @@
 
 #: .\contrib\admin\templates\admin\submit_line.html.py:4
 msgid "Save as new"
-msgstr "Salvati ca nou"
+msgstr "Salvați ca nou"
 
 #: .\contrib\admin\templates\admin\submit_line.html.py:5
 msgid "Save and add another"
-msgstr "Salvati si adaugati altul"
+msgstr "Salvați și adăugați altul"
 
 #: .\contrib\admin\templates\admin\submit_line.html.py:6
 msgid "Save and continue editing"
-msgstr "Salvati si continuati"
+msgstr "Salvați și continuați"
 
 #: .\contrib\admin\templates\admin\submit_line.html.py:7
 msgid "Save"
-msgstr "Salveaza"
+msgstr "Salvează"
 
 #: .\contrib\admin\templates\admin\auth\user\add_form.html.py:6
 msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "Intai introduceti un nume de utilizator si o parola. Apoi veti putea modifica mai multe optiuni de utilizator."
+msgstr "Introduceți mai întâi un nume de utilizator și o parolă. Apoi veți putea modifica mai multe opțiuni de utilizator."
 
 #: .\contrib\admin\templates\admin\auth\user\add_form.html.py:12
 msgid "Username"
@@ -534,30 +534,30 @@
 #: .\contrib\admin\templates\admin\auth\user\add_form.html.py:18
 #: .\contrib\admin\templates\admin\auth\user\change_password.html.py:33
 msgid "Password"
-msgstr "Parola"
+msgstr "Parolă"
 
 #: .\contrib\admin\templates\admin\auth\user\add_form.html.py:23
 #: .\contrib\admin\templates\admin\auth\user\change_password.html.py:38
 msgid "Password (again)"
-msgstr "Parola (repeta)"
+msgstr "Parolă (din nou)"
 
 #: .\contrib\admin\templates\admin\auth\user\add_form.html.py:24
 #: .\contrib\admin\templates\admin\auth\user\change_password.html.py:39
 msgid "Enter the same password as above, for verification."
-msgstr "Introduceti parola din nou pentru verificare."
+msgstr "Introduceți parola din nou pentru verificare."
 
 #: .\contrib\admin\templates\admin\auth\user\change_password.html.py:27
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "Introduceti o parola noua pentru utilizatorul <strong>%(username)s</strong>."
+msgstr "Introduceți o parolă nouă pentru utilizatorul <strong>%(username)s</strong>."
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:3
 msgid "Bookmarklets"
-msgstr ""
+msgstr "Bookmarklet-uri"
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:4
 msgid "Documentation bookmarklets"
-msgstr ""
+msgstr "Bookmarklet-uri documentație"
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:8
 msgid ""
@@ -569,42 +569,49 @@
 "as \"internal\" (talk to your system administrator if you aren't sure if\n"
 "your computer is \"internal\").</p>\n"
 msgstr ""
+"\n"
+"<p class=\"help\">Pentru a instala bookmarklet-uri, trage link-ul în bara de\n"
+"bookmark-uri, sau click dreapta pe link și adaugă la bookmark-uri. Acum poți\n"
+"selecta bookmarklet-ul din orice pagina a sitului. Este posibil ca unele din\n"
+"aceste bookmarklet-uri sunt accesibile doar de pe un computer desemnat ca\n"
+"\"intern\" (vorbește cu administratorul tău de sistem dacă nu ești sigur că\n"
+"al tău este \"intern\").</p>\n"
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:18
 msgid "Documentation for this page"
-msgstr "Documentatie pentru aceasta pagina"
+msgstr "Documentație pentru această pagină"
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:19
 msgid "Jumps you from any page to the documentation for the view that generates that page."
-msgstr "Te trimite de la orice pagina la documentatia pentru view-ul care genereaza acea pagina."
+msgstr "Te trimite de la orice pagină la documentația pentru view-ul care generează acea pagină."
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:21
 msgid "Show object ID"
-msgstr "Arata ID-ul obiectului"
+msgstr "Arată ID-ul obiectului"
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:22
 msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Arata tipul de continut si ID-ul unic pentru paginile care reprezinta un singur obiect."
+msgstr "Arată tipul de conținut și ID-ul unic pentru paginile ce reprezintă un singur obiect."
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:24
 msgid "Edit this object (current window)"
-msgstr "Modifica acest obiect (in aceasta fereastra)"
+msgstr "Modifică acest obiect (în fereastra curentă)"
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:25
 msgid "Jumps to the admin page for pages that represent a single object."
-msgstr "Sare la pagina de administrare pentru pagini care reprezinta un singur obiect."
+msgstr "Sare la pagina de administrare pentru pagini ce reprezintă un singur obiect."
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:27
 msgid "Edit this object (new window)"
-msgstr "Modifica acest obiect (intr-o fereastra noua)"
+msgstr "Modifică acest obiect (într-o fereastra nouă)"
 
 #: .\contrib\admin\templates\admin_doc\bookmarklets.html.py:28
 msgid "As above, but opens the admin page in a new window."
-msgstr "La fel ca deasupra, dar deschide pagina de administrare intr-o fereastra noua"
+msgstr "La fel ca mai sus, dar deschide pagina de administrare într-o fereastră nouă"
 
 #: .\contrib\admin\templates\registration\logged_out.html.py:8
 msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Mulţumesc pentru petrecerea folositoare a timpului cu saitul astăzi."
+msgstr "Mulţumesc pentru petrecerea folositoare a timpului cu situl astăzi."
 
 #: .\contrib\admin\templates\registration\logged_out.html.py:10
 msgid "Log in again"
@@ -628,7 +635,7 @@
 
 #: .\contrib\admin\templates\registration\password_change_form.html.py:11
 msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Introdu te rog vechea parolă, pentru motive de siguranţă, şi apoi tastează noua parolă de două ori aşa încît putem verifica dacă ai tastat corect."
+msgstr "Introdu te rog vechea parolă, pentru motive de siguranţă, şi apoi tastează noua parolă de două ori pentru a verifica dacă ai tastat corect."
 
 #: .\contrib\admin\templates\registration\password_change_form.html.py:16
 msgid "Old password:"
@@ -660,7 +667,7 @@
 
 #: .\contrib\admin\templates\registration\password_reset_done.html.py:12
 msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Am trimis o nouă parolă prin email la adresa furnizată. Ar trebuisă o primeşti în scurt timp."
+msgstr "Am trimis o nouă parolă prin email la adresa furnizată. Ar trebui să o primeşti în scurt timp."
 
 #: .\contrib\admin\templates\registration\password_reset_email.html.py:2
 msgid "You're receiving this e-mail because you requested a password reset"
@@ -678,15 +685,15 @@
 
 #: .\contrib\admin\templates\registration\password_reset_email.html.py:7
 msgid "Feel free to change this password by going to this page:"
-msgstr "Poţi schmiba această parolă vizitînd această pagină:"
+msgstr "Poţi schmiba această parolă vizitând această pagină:"
 
 #: .\contrib\admin\templates\registration\password_reset_email.html.py:11
 msgid "Your username, in case you've forgotten:"
-msgstr "Numele tău utilizator, în caz că ai uitat:"
+msgstr "Numele tău de utilizator, în caz că ai uitat:"
 
 #: .\contrib\admin\templates\registration\password_reset_email.html.py:13
 msgid "Thanks for using our site!"
-msgstr "Mulţumesc pentru folosirea saitului nostru!"
+msgstr "Mulţumesc pentru folosirea sitului nostru!"
 
 #: .\contrib\admin\templates\registration\password_reset_email.html.py:15
 #, python-format
@@ -734,7 +741,7 @@
 #: .\contrib\admin\views\main.py:271
 #: .\contrib\admin\views\main.py:356
 msgid "You may edit it again below."
-msgstr "Va puteti edita datele din nou mai jos."
+msgstr "Vă puteți edita datele din nou mai jos."
 
 #: .\contrib\admin\views\auth.py:31
 msgid "Add user"
@@ -752,24 +759,24 @@
 #: .\contrib\admin\views\decorators.py:17
 #: .\contrib\auth\forms.py:60
 msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "Va rugam sa introduceti username-ul si parola corecta. Aveti grija deoarececasutele sunt case sensitive."
+msgstr "Va rugăm să introduceți numele de utilizator și parola corecte. Aveți grijă deoarece căsuțele sunt case sensitive."
 
 #: .\contrib\admin\views\decorators.py:69
 msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved."
-msgstr "Va rugam sa va inregistrati din nou, deoarece sesiunea a expirat. Nu va faceti griji datele au fost salvate."
+msgstr "Vă rugăm să vă înregistrați din nou, deoarece sesiunea a expirat. Nu vă faceti griji: datele au fost salvate."
 
 #: .\contrib\admin\views\decorators.py:76
 msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "Se pare ca browserul dumneavostra nu este configurat sa accepte cookies. Va rugam sa va setati browserul sa accepte cookies, dati un reload la pagina si incercati din nou."
+msgstr "Se pare că browserul dumneavostră nu este configurat să accepte cookies. Vă rugăm să vă setați browserul să accepte cookies, dați un reload la pagină și încercați din nou."
 
 #: .\contrib\admin\views\decorators.py:90
 msgid "Usernames cannot contain the '@' character."
-msgstr "Username-ul nu are voie sa contina caracterul '@'."
+msgstr "Username-ul nu are voie să conțină caracterul '@'."
 
 #: .\contrib\admin\views\decorators.py:92
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr "Adresa ta de e-mail nu este numele tau de utilizator. Incearca '%s' in schimb."
+msgstr "Adresa ta de e-mail nu este numele tău de utilizator. Incearcă '%s' în schimb."
 
 #: .\contrib\admin\views\doc.py:48
 #: .\contrib\admin\views\doc.py:50
@@ -797,7 +804,7 @@
 #: .\contrib\admin\views\doc.py:173
 #, python-format
 msgid "Model %(name)r not found in app %(label)r"
-msgstr "Modelul %(name)r nu a fost gasit in aplicatia %(label)r"
+msgstr "Modelul %(name)r nu a fost gasit în aplicatia %(label)r"
 
 #: .\contrib\admin\views\doc.py:185
 #, python-format
@@ -824,12 +831,12 @@
 #: .\contrib\admin\views\doc.py:226
 #, python-format
 msgid "number of %s"
-msgstr "numarul de %s"
+msgstr "numărul de %s"
 
 #: .\contrib\admin\views\doc.py:231
 #, python-format
 msgid "Fields on %s objects"
-msgstr "Campuri in %s obiecte"
+msgstr "Campuri în %s obiecte"
 
 #: .\contrib\admin\views\doc.py:293
 #: .\contrib\admin\views\doc.py:304
@@ -852,7 +859,7 @@
 
 #: .\contrib\admin\views\doc.py:296
 msgid "Comma-separated integers"
-msgstr "Numere intregi separate de virgule"
+msgstr "Numere întregi separate de virgule"
 
 #: .\contrib\admin\views\doc.py:297
 msgid "Date (without time)"
@@ -864,7 +871,7 @@
 
 #: .\contrib\admin\views\doc.py:299
 msgid "Decimal number"
-msgstr "Numar zecimal"
+msgstr "Număr zecimal"
 
 #: .\contrib\admin\views\doc.py:300
 msgid "E-mail address"
@@ -878,7 +885,7 @@
 
 #: .\contrib\admin\views\doc.py:303
 msgid "Floating point number"
-msgstr "Numar cu virgula"
+msgstr "Număr cu virgula"
 
 #: .\contrib\admin\views\doc.py:307
 #: .\contrib\comments\models.py:89
@@ -895,7 +902,7 @@
 
 #: .\contrib\admin\views\doc.py:311
 msgid "Phone number"
-msgstr "Numar de telefon"
+msgstr "Număr de telefon"
 
 #: .\contrib\admin\views\doc.py:316
 msgid "Text"
@@ -931,7 +938,7 @@
 #: .\contrib\admin\views\main.py:365
 #, python-format
 msgid "You may add another %s below."
-msgstr "Mai puteti adauga un alt %s mai jos."
+msgstr "Mai puteți adauga un alt %s mai jos."
 
 #: .\contrib\admin\views\main.py:298
 #, python-format
@@ -941,7 +948,7 @@
 #: .\contrib\admin\views\main.py:344
 #, python-format
 msgid "Added %s."
-msgstr "Adaugat %s."
+msgstr "Am adăugat %s."
 
 #: .\contrib\admin\views\main.py:344
 #: .\contrib\admin\views\main.py:346
@@ -949,21 +956,21 @@
 #: .\core\validators.py:283
 #: .\db\models\manipulators.py:309
 msgid "and"
-msgstr "si"
+msgstr "și"
 
 #: .\contrib\admin\views\main.py:346
 #, python-format
 msgid "Changed %s."
-msgstr "Schimbă %s."
+msgstr "Am schimbat %s."
 
 #: .\contrib\admin\views\main.py:348
 #, python-format
 msgid "Deleted %s."
-msgstr "Am sters %s."
+msgstr "Am șters %s."
 
 #: .\contrib\admin\views\main.py:351
 msgid "No fields changed."
-msgstr "Nu s-a facut nicio schimbare."
+msgstr "Nici-un câmp nu a fost schimbat."
 
 #: .\contrib\admin\views\main.py:354
 #, python-format
@@ -973,7 +980,7 @@
 #: .\contrib\admin\views\main.py:362
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "%(name)s \"%(obj)s\" au fost adaugate cu succes. Le puteti edita mai jos."
+msgstr "%(name)s \"%(obj)s\" au fost adăugate cu succes. Le puteți edita mai jos."
 
 #: .\contrib\admin\views\main.py:400
 #, python-format
@@ -983,45 +990,45 @@
 #: .\contrib\admin\views\main.py:487
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Unul sau mai multe %(fieldname)s in %(name)s: %(obj)s"
+msgstr "Unul sau mai multe %(fieldname)s în %(name)s: %(obj)s"
 
 #: .\contrib\admin\views\main.py:492
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Unul sau mai multe %(fieldname)s in %(name)s:"
+msgstr "Unul sau mai multe %(fieldname)s în %(name)s:"
 
 #: .\contrib\admin\views\main.py:524
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "%(name)s \"%(obj)s\" au fost sterse cu succes."
+msgstr "%(name)s \"%(obj)s\" au fost șterse cu succes."
 
 #: .\contrib\admin\views\main.py:527
 msgid "Are you sure?"
-msgstr "Sunteti sigur?"
+msgstr "Sunteți sigur?"
 
 #: .\contrib\admin\views\main.py:549
 #, python-format
 msgid "Change history: %s"
-msgstr "Schimbari facute: %s"
+msgstr "Schimbări făcute: %s"
 
 #: .\contrib\admin\views\main.py:583
 #, python-format
 msgid "Select %s"
-msgstr "Selecteaza %s"
+msgstr "Selectează %s"
 
 #: .\contrib\admin\views\main.py:583
 #, python-format
 msgid "Select %s to change"
-msgstr "Selecteaza %s pentru schimbare"
+msgstr "Selectează %s pentru schimbare"
 
 #: .\contrib\admin\views\main.py:784
 msgid "Database error"
-msgstr "Erroare de baza de date"
+msgstr "Eroare de bază de date"
 
 #: .\contrib\auth\forms.py:17
 #: .\contrib\auth\forms.py:138
 msgid "The two password fields didn't match."
-msgstr "Cele doua campuri pentru parole nu au coincis."
+msgstr "Cele doua câmpuri pentru parole nu au coincis."
 
 #: .\contrib\auth\forms.py:25
 msgid "A user with that username already exists."
@@ -1029,7 +1036,7 @@
 
 #: .\contrib\auth\forms.py:53
 msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "Se pare ca browserul dumneavoastra nu suporta cookies. Aveti nevoie de un browser care suporta cookies ca sa va logati."
+msgstr "Se pare că browserul dumneavoastra nu suporta cookies. Aveti nevoie de un browser care suporta cookies ca să vă logati."
 
 #: .\contrib\auth\forms.py:62
 msgid "This account is inactive."
@@ -1037,20 +1044,20 @@
 
 #: .\contrib\auth\forms.py:84
 msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "Acea adresa de e-mail nu are un nume de utilizator asociat. Sunteti sigur ca v-ati inregistrat?"
+msgstr "Acea adresa de e-mail nu are un nume de utilizator asociat. Sunteți sigur că v-ați înregistrat?"
 
 #: .\contrib\auth\forms.py:107
 #, python-format
 msgid "Password reset on %s"
-msgstr "Parola resetata pe %s"
+msgstr "Parola resetată pe %s"
 
 #: .\contrib\auth\forms.py:117
 msgid "The two 'new password' fields didn't match."
-msgstr "Cele doua campuri 'parola noua' nu au coincis."
+msgstr "Cele două câmpuri 'parola noua' nu au coincis."
 
 #: .\contrib\auth\forms.py:124
 msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Parola veche a dumneavoastra a fost introdusa incorect. Va rugam introduceti-o din nou."
+msgstr "Parola dumneavoastră veche a fost introdusă incorect. Vă rugăm să o introduceți din nou."
 
 #: .\contrib\auth\models.py:73
 #: .\contrib\auth\models.py:93
@@ -1085,7 +1092,7 @@
 
 #: .\contrib\auth\models.py:131
 msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr "Necesar. 30 de caractere sau mai putin. Doar caractere alfanumerice (litere, cifre, liniute de subliniere)."
+msgstr "Necesar. 30 de caractere sau mai puțin. Doar caractere alfanumerice (litere, cifre, liniuțe de subliniere)."
 
 #: .\contrib\auth\models.py:132
 msgid "first name"
@@ -1097,15 +1104,15 @@
 
 #: .\contrib\auth\models.py:134
 msgid "e-mail address"
-msgstr "adresa email"
+msgstr "adresă email"
 
 #: .\contrib\auth\models.py:135
 msgid "password"
-msgstr "parola"
+msgstr "parolă"
 
 #: .\contrib\auth\models.py:135
 msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
-msgstr "Folositi '[algo]$[salt]$[hexdigest]' sau folositi <a href=\"password/\">formularul de schimbare a parolei</a>."
+msgstr "Folosiți '[algo]$[salt]$[hexdigest]' sau folosiți <a href=\"password/\">formularul de schimbare a parolei</a>."
 
 #: .\contrib\auth\models.py:136
 msgid "staff status"
@@ -1113,7 +1120,7 @@
 
 #: .\contrib\auth\models.py:136
 msgid "Designates whether the user can log into this admin site."
-msgstr "Decide cînd utilizatorul se poate loga în acest sit de adminstrare."
+msgstr "Decide când utilizatorul se poate loga în acest sit de adminstrare."
 
 #: .\contrib\auth\models.py:137
 msgid "active"
@@ -1121,7 +1128,7 @@
 
 #: .\contrib\auth\models.py:137
 msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
-msgstr "Indica daca acest user va fi tratat ca activ sau nu. Deselecteaza-l in loc de a sterge conturi."
+msgstr "Indică dacă acest utilizator va fi tratat ca activ sau nu. Deselectează-l în loc de a șterge conturi."
 
 #: .\contrib\auth\models.py:138
 msgid "superuser status"
@@ -1129,7 +1136,7 @@
 
 #: .\contrib\auth\models.py:138
 msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "Indica daca acest user are toate permisiile fara a le selecta explicit."
+msgstr "Indică daca acest user are toate permisiunile fără a le selecta explicit."
 
 #: .\contrib\auth\models.py:139
 msgid "last login"
@@ -1182,7 +1189,7 @@
 #: .\contrib\comments\models.py:71
 #: .\contrib\comments\models.py:176
 msgid "object ID"
-msgstr "id obiect"
+msgstr "ID obiect"
 
 #: .\contrib\comments\models.py:72
 msgid "headline"
@@ -1233,7 +1240,7 @@
 #: .\contrib\comments\models.py:87
 #: .\contrib\comments\models.py:179
 msgid "date/time submitted"
-msgstr "data/ora crearii"
+msgstr "data/ora creării"
 
 #: .\contrib\comments\models.py:88
 #: .\contrib\comments\models.py:180
@@ -1242,11 +1249,11 @@
 
 #: .\contrib\comments\models.py:90
 msgid "is removed"
-msgstr "sters"
+msgstr "șters"
 
 #: .\contrib\comments\models.py:90
 msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "Bifeaza aceasta casuta daca comentariul nu este adecvat. Un mesaj de tipul \"Acest comentariu a fost sters\" va fi afisat in schimb."
+msgstr "Bifează această casuța dacă comentariul nu este adecvat. Un mesaj de tipul \"Acest comentariu a fost șters\" va fi afișat în schimb."
 
 #: .\contrib\comments\models.py:96
 msgid "comments"
@@ -1255,7 +1262,7 @@
 #: .\contrib\comments\models.py:140
 #: .\contrib\comments\models.py:222
 msgid "Content object"
-msgstr "Obiect-referinta"
+msgstr "Obiect comentariu"
 
 #: .\contrib\comments\models.py:168
 #, python-format
@@ -1282,15 +1289,15 @@
 
 #: .\contrib\comments\models.py:183
 msgid "approved by staff"
-msgstr "aprobat de echipa"
+msgstr "aprobat de echipă"
 
 #: .\contrib\comments\models.py:187
 msgid "free comment"
-msgstr "permite comentariu fara inregistrare"
+msgstr "permite comentariu fara înregistrare"
 
 #: .\contrib\comments\models.py:188
 msgid "free comments"
-msgstr "permite comentarii fara inregistrare"
+msgstr "permite comentarii fara înregistrare"
 
 #: .\contrib\comments\models.py:250
 msgid "score"
@@ -1313,7 +1320,7 @@
 #: .\contrib\comments\models.py:260
 #, fuzzy, python-format
 msgid "%(score)d rating by %(user)s"
-msgstr "Punctaj %(score)d atribuit de catre %(user)s"
+msgstr "Punctaj %(score)d atribuit de către %(user)s"
 
 #: .\contrib\comments\models.py:277
 #, python-format
@@ -1328,17 +1335,17 @@
 
 #: .\contrib\comments\models.py:285
 msgid "flag date"
-msgstr "data marcarii"
+msgstr "data marcării"
 
 #: .\contrib\comments\models.py:289
 #, fuzzy
 msgid "user flag"
-msgstr "stegulet de utilizator"
+msgstr "steguleț de utilizator"
 
 #: .\contrib\comments\models.py:290
 #, fuzzy
 msgid "user flags"
-msgstr "stegulete de utilizatori"
+msgstr "stegulețe de utilizatori"
 
 #: .\contrib\comments\models.py:294
 #, python-format
@@ -1347,20 +1354,20 @@
 
 #: .\contrib\comments\models.py:300
 msgid "deletion date"
-msgstr "data stergerii"
+msgstr "data ștergerii"
 
 #: .\contrib\comments\models.py:303
 msgid "moderator deletion"
-msgstr "sters de moderator"
+msgstr "șters de moderator"
 
 #: .\contrib\comments\models.py:304
 msgid "moderator deletions"
-msgstr "sterse de moderator"
+msgstr "șterse de moderator"
 
 #: .\contrib\comments\models.py:308
 #, python-format
 msgid "Moderator deletion by %r"
-msgstr "Sters de moderatorul %r"
+msgstr "Șters de moderatorul %r"
 
 #: .\contrib\comments\templates\comments\form.html.py:8
 msgid "Forgotten your password?"
@@ -1378,11 +1385,11 @@
 #: .\contrib\comments\templates\comments\form.html.py:12
 #: .\contrib\comments\templates\comments\form.html.py:23
 msgid "Optional"
-msgstr "Optional"
+msgstr "Opțional"
 
 #: .\contrib\comments\templates\comments\form.html.py:23
 msgid "Post a photo"
-msgstr "Adauga o poza"
+msgstr "Adaugă o poză"
 
 #: .\contrib\comments\templates\comments\form.html.py:28
 #: .\contrib\comments\templates\comments\freeform.html.py:5
@@ -1396,11 +1403,11 @@
 
 #: .\contrib\comments\templates\comments\freeform.html.py:4
 msgid "Your name:"
-msgstr "numele dumneavoastra"
+msgstr "numele dumneavoastră"
 
 #: .\contrib\comments\views\comments.py:28
 msgid "This rating is required because you've entered at least one other rating."
-msgstr "Acest rating este necesar deoarece ai introdus cel putin un alt rating."
+msgstr "Acest rating este necesar deoarece ai introdus cel puțin un alt rating."
 
 #: .\contrib\comments\views\comments.py:112
 #, python-format
@@ -1413,11 +1420,11 @@
 "\n"
 "%(text)s"
 msgstr[0] ""
-"Acest comentariu a fost postat de un utilizator care a postat mai putin de %(count)s comentariu:\n"
+"Acest comentariu a fost postat de un utilizator care a postat mai puțin de %(count)s comentariu:\n"
 "\n"
 "%(text)s"
 msgstr[1] ""
-"Acest comentariu a fost postat de un utilizator care a postat mai putin de %(count)s comentarii:\n"
+"Acest comentariu a fost postat de un utilizator care a postat mai puțin de %(count)s comentarii:\n"
 "\n"
 "%(text)s"
 
@@ -1435,27 +1442,27 @@
 #: .\contrib\comments\views\comments.py:190
 #: .\contrib\comments\views\comments.py:283
 msgid "Only POSTs are allowed"
-msgstr "Doar postarile sunt permise"
+msgstr "Doar postările sunt permise"
 
 #: .\contrib\comments\views\comments.py:194
 #: .\contrib\comments\views\comments.py:287
 msgid "One or more of the required fields wasn't submitted"
-msgstr "Unul sau mai multe campuri necesare nu a fost completat"
+msgstr "Unul sau mai multe câmpuri necesare nu au fost completate"
 
 #: .\contrib\comments\views\comments.py:198
 #: .\contrib\comments\views\comments.py:289
 msgid "Somebody tampered with the comment form (security violation)"
-msgstr "Cineva a modificat formularul de comentarii (incalcare a securitatii)"
+msgstr "Cineva a modificat formularul de comentarii (încălcare a securității)"
 
 #: .\contrib\comments\views\comments.py:208
 #: .\contrib\comments\views\comments.py:295
 msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid"
-msgstr "Formularul de comentariu a avut un parametru 'tinta' invalid -- ID-ul obiectului a fost invalid"
+msgstr "Formularul de comentariu a avut un parametru 'țintă' invalid -- ID-ul obiectului a fost invalid"
 
 #: .\contrib\comments\views\comments.py:259
 #: .\contrib\comments\views\comments.py:324
 msgid "The comment form didn't provide either 'preview' or 'post'"
-msgstr "Formularul de comentariu nu specifica nici 'previzualizare' nici 'postare'"
+msgstr "Formularul de comentariu nu specifică nici 'previzualizare' nici 'postare'"
 
 #: .\contrib\comments\views\karma.py:21
 msgid "Anonymous users cannot vote"
@@ -1467,12 +1474,12 @@
 
 #: .\contrib\comments\views\karma.py:27
 msgid "No voting for yourself"
-msgstr "Nu poti vota pentru tine"
+msgstr "Nu poți vota pentru tine"
 
 #: .\contrib\contenttypes\models.py:67
 #, fuzzy
 msgid "python model class name"
-msgstr "nume clasa model python"
+msgstr "nume clasă model python"
 
 #: .\contrib\contenttypes\models.py:71
 msgid "content type"
@@ -1480,11 +1487,11 @@
 
 #: .\contrib\contenttypes\models.py:72
 msgid "content types"
-msgstr "tipuri conţinute"
+msgstr "tipuri conţinut"
 
 #: .\contrib\flatpages\models.py:9
 msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Exemplu: '/about/contact'. Asiguraţi-vă că aveţi slash-uri la început şi la sfîrşit."
+msgstr "Exemplu: '/despre/contact'. Asiguraţi-vă că aveţi slash-uri la început şi la sfârşit."
 
 #: .\contrib\flatpages\models.py:10
 msgid "title"
@@ -1524,7 +1531,7 @@
 
 #: .\contrib\flatpages\models.py:27
 msgid "Advanced options"
-msgstr "Optiuni avansate"
+msgstr "Opțiuni avansate"
 
 #: .\contrib\humanize\templatetags\humanize.py:19
 msgid "th"
@@ -1577,7 +1584,7 @@
 
 #: .\contrib\humanize\templatetags\humanize.py:73
 msgid "four"
-msgstr "patry"
+msgstr "patru"
 
 #: .\contrib\humanize\templatetags\humanize.py:73
 msgid "five"
@@ -1585,11 +1592,11 @@
 
 #: .\contrib\humanize\templatetags\humanize.py:73
 msgid "six"
-msgstr "sase"
+msgstr "șase"
 
 #: .\contrib\humanize\templatetags\humanize.py:73
 msgid "seven"
-msgstr "sapte"
+msgstr "șapte"
 
 #: .\contrib\humanize\templatetags\humanize.py:73
 msgid "eight"
@@ -1597,15 +1604,15 @@
 
 #: .\contrib\humanize\templatetags\humanize.py:73
 msgid "nine"
-msgstr "noua"
+msgstr "nouă"
 
 #: .\contrib\humanize\templatetags\humanize.py:93
 msgid "today"
-msgstr "astazi"
+msgstr "astăzi"
 
 #: .\contrib\humanize\templatetags\humanize.py:95
 msgid "tomorrow"
-msgstr "maine"
+msgstr "mâine"
 
 #: .\contrib\humanize\templatetags\humanize.py:97
 msgid "yesterday"
@@ -1613,7 +1620,7 @@
 
 #: .\contrib\localflavor\ar\forms.py:27
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
-msgstr "Introduceti un cod postal valid de forma NNNN sau ANNNNAAA."
+msgstr "Introduceți un cod poștal valid de forma NNNN sau ANNNNAAA."
 
 #: .\contrib\localflavor\ar\forms.py:49
 #: .\contrib\localflavor\br\forms.py:96
@@ -1621,15 +1628,15 @@
 #: .\contrib\localflavor\pe\forms.py:23
 #: .\contrib\localflavor\pe\forms.py:51
 msgid "This field requires only numbers."
-msgstr "Acest camp accepta doar numere."
+msgstr "Acest câmp acceptă doar numere."
 
 #: .\contrib\localflavor\ar\forms.py:50
 msgid "This field requires 7 or 8 digits."
-msgstr "Acest camp are nevoie de 7 sau 8 cifre."
+msgstr "Acest câmp are nevoie de 7 sau 8 cifre."
 
 #: .\contrib\localflavor\ar\forms.py:79
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
-msgstr "Introduceti un CUIT valid de forma XX-XXXXXXXX-X sau XXXXXXXXXXXX."
+msgstr "Introduceți un CUIT valid de forma XX-XXXXXXXX-X sau XXXXXXXXXXXX."
 
 #: .\contrib\localflavor\ar\forms.py:80
 msgid "Invalid CUIT."
@@ -1637,43 +1644,43 @@
 
 #: .\contrib\localflavor\au\forms.py:16
 msgid "Enter a 4 digit post code."
-msgstr "Introduceti un cod postal de 4 cifre."
+msgstr "Introduceți un cod poștal de 4 cifre."
 
 #: .\contrib\localflavor\br\forms.py:21
 msgid "Enter a zip code in the format XXXXX-XXX."
-msgstr "Adaugati un cod postal de forma XXXXX-XXX."
+msgstr "Adăugați un cod poștal de forma XXXXX-XXX."
 
 #: .\contrib\localflavor\br\forms.py:30
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
-msgstr "Numerele de telefon trebuie să fie in format XXX-XXX-XXXX."
+msgstr "Numerele de telefon trebuie să fie în format XXX-XXX-XXXX."
 
 #: .\contrib\localflavor\br\forms.py:58
 msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "Selectati un stat brazilian valid. Acest stat nu se afla printre statele disponibile."
+msgstr "Selectați un stat brazilian valid. Acest stat nu se află printre statele disponibile."
 
 #: .\contrib\localflavor\br\forms.py:94
 msgid "Invalid CPF number."
-msgstr "Numar CPF invalid."
+msgstr "Număr CPF invalid."
 
 #: .\contrib\localflavor\br\forms.py:95
 msgid "This field requires at most 11 digits or 14 characters."
-msgstr "Acest camp are nevoie de cel mult 11 cifre sau 14 caractere."
+msgstr "Acest câmp are nevoie de cel mult 11 cifre sau 14 caractere."
 
 #: .\contrib\localflavor\br\forms.py:134
 msgid "Invalid CNPJ number."
-msgstr "Numar CNPJ invalid."
+msgstr "Număr CNPJ invalid."
 
 #: .\contrib\localflavor\br\forms.py:136
 msgid "This field requires at least 14 digits"
-msgstr "Acest camd are nevoie de cel putin 14 cifre."
+msgstr "Acest câmp are nevoie de cel puțin 14 cifre."
 
 #: .\contrib\localflavor\ca\forms.py:17
 msgid "Enter a postal code in the format XXX XXX."
-msgstr "Introduceti un cod postal de forma XXX XXX."
+msgstr "Introduceți un cod poștal de forma XXX XXX."
 
 #: .\contrib\localflavor\ca\forms.py:88
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Introduceti un numar canadia de asigurare sociala valid de forma XXX-XXX-XXX."
+msgstr "Introduceți un număr canadian de asigurare socială valid de forma XXX-XXX-XXX."
 
 #: .\contrib\localflavor\ch\ch_states.py:5
 msgid "Aargau"
@@ -1782,19 +1789,19 @@
 #: .\contrib\localflavor\ch\forms.py:16
 #: .\contrib\localflavor\no\forms.py:12
 msgid "Enter a zip code in the format XXXX."
-msgstr "Introduceti un cod postal de forma XXXX."
+msgstr "Introduceți un cod poștal de forma XXXX."
 
 #: .\contrib\localflavor\ch\forms.py:64
 msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr "Introduceti un numar elvetian de identitate sau pasaport, valid, de forma X1234567<0 sau 1234567890."
+msgstr "Introduceți un număr elvetian de identitate sau pașaport, valid, de forma X1234567<0 sau 1234567890."
 
 #: .\contrib\localflavor\cl\forms.py:29
 msgid "Enter a valid Chilean RUT."
-msgstr "Introduceti RUT chilian valid."
+msgstr "Introduceți RUT chilian valid."
 
 #: .\contrib\localflavor\cl\forms.py:30
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr "Introduceti un RUT chilian valid. Formatul este XX.XXX.XXX-X."
+msgstr "Introduceți un RUT chilian valid. Formatul este XX.XXX.XXX-X."
 
 #: .\contrib\localflavor\cl\forms.py:31
 msgid "The Chilean RUT is not valid."
@@ -1868,11 +1875,11 @@
 #: .\contrib\localflavor\fi\forms.py:12
 #: .\contrib\localflavor\fr\forms.py:15
 msgid "Enter a zip code in the format XXXXX."
-msgstr "Introduceti un cod postal de forma XXXXX."
+msgstr "Introduceți un cod poștal de forma XXXXX."
 
 #: .\contrib\localflavor\de\forms.py:41
 msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "Introduceti un numar german de identitate valid, de forma XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
+msgstr "Introduceți un număr german de identitate valid, de forma XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
 
 #: .\contrib\localflavor\es\es_provinces.py:5
 msgid "Arava"
@@ -2115,7 +2122,7 @@
 
 #: .\contrib\localflavor\es\es_regions.py:13
 msgid "Castile and Leon"
-msgstr "Castilia si Leon"
+msgstr "Castilia și Leon"
 
 #: .\contrib\localflavor\es\es_regions.py:14
 msgid "Catalonia"
@@ -2135,7 +2142,7 @@
 
 #: .\contrib\localflavor\es\es_regions.py:20
 msgid "Foral Community of Navarre"
-msgstr "Comunitatea Forala Navara"
+msgstr "Comunitatea Forală Navara"
 
 #: .\contrib\localflavor\es\es_regions.py:21
 msgid "Valencian Community"
@@ -2143,11 +2150,11 @@
 
 #: .\contrib\localflavor\es\forms.py:19
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr "Introduceti un cod postal valid in intervalul si de forma 01XXX - 52XXX."
+msgstr "Introduceți un cod poștal valid în intervalul și de forma 01XXX - 52XXX."
 
 #: .\contrib\localflavor\es\forms.py:39
 msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr "Introduceti un numa de telefon valid intr-unul dintre formatele 6XXXXXXXX, 8XXXXXXXX sau 9XXXXXXXX."
+msgstr "Introduceți un număr de telefon valid într-unul dintre formatele 6XXXXXXXX, 8XXXXXXXX sau 9XXXXXXXX."
 
 #: .\contrib\localflavor\es\forms.py:66
 msgid "Please enter a valid NIF, NIE, or CIF."
@@ -2155,59 +2162,59 @@
 
 #: .\contrib\localflavor\es\forms.py:67
 msgid "Please enter a valid NIF or NIE."
-msgstr "Introduceti va rog un NIF sau NIE valid."
+msgstr "Introduceți vă rog un NIF sau NIE valid."
 
 #: .\contrib\localflavor\es\forms.py:68
 msgid "Invalid checksum for NIF."
-msgstr "Suma de control invalda pentru NIF."
+msgstr "Sumă de control invalidă pentru NIF."
 
 #: .\contrib\localflavor\es\forms.py:69
 msgid "Invalid checksum for NIE."
-msgstr "Suma de control invalida pentru NIE."
+msgstr "Sumă de control invalidă pentru NIE."
 
 #: .\contrib\localflavor\es\forms.py:70
 msgid "Invalid checksum for CIF."
-msgstr "Suma de control invalida pentru CIF."
+msgstr "Sumă de control invalidă pentru CIF."
 
 #: .\contrib\localflavor\es\forms.py:142
 msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Introduceti un numar de cont bancar valid de forma XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr "Introduceți un număr de cont bancar valid de forma XXXX-XXXX-XX-XXXXXXXXXX."
 
 #: .\contrib\localflavor\es\forms.py:143
 msgid "Invalid checksum for bank account number."
-msgstr "Suma de control invalida pentru numarul de cont bancar."
+msgstr "Sumă de control invalidă pentru numărul de cont bancar."
 
 #: .\contrib\localflavor\fi\forms.py:28
 msgid "Enter a valid Finnish social security number."
-msgstr "Introduceti un numar finlandez de securitate sociala valid."
+msgstr "Introduceți un număr finlandez de securitate socială valid."
 
 #: .\contrib\localflavor\in_\forms.py:14
 msgid "Enter a zip code in the format XXXXXXX."
-msgstr "Introduceti un cod postal de forma XXXXXXX."
+msgstr "Introduceți un cod poștal de forma XXXXXXX."
 
 #: .\contrib\localflavor\is_\forms.py:17
 msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr "Introduceti un numa islandez de autentificare valid. Formatul este XXXXXX-XXXX."
+msgstr "Introduceți un număr islandez de autentificare valid. Formatul este XXXXXX-XXXX."
 
 #: .\contrib\localflavor\is_\forms.py:18
 msgid "The Icelandic identification number is not valid."
-msgstr "Numarul islandez de identificare nu este valid."
+msgstr "Numărul islandez de identificare nu este valid."
 
 #: .\contrib\localflavor\it\forms.py:14
 msgid "Enter a valid zip code."
-msgstr "Introduceti un cod postal valid."
+msgstr "Introduceți un cod poștal valid."
 
 #: .\contrib\localflavor\it\forms.py:43
 msgid "Enter a valid Social Security number."
-msgstr "Introduceti un numar de securitate sociala valid."
+msgstr "Introduceți un număr de securitate socială valid."
 
 #: .\contrib\localflavor\it\forms.py:68
 msgid "Enter a valid VAT number."
-msgstr "Introduceti un numar VAT valid."
+msgstr "Introduceți un număr TVA valid."
 
 #: .\contrib\localflavor\jp\forms.py:17
 msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
-msgstr "Introduceti un cod postal de forma XXXXXXX sau XXX-XXXX."
+msgstr "Introduceți un cod poștal de forma XXXXXXX sau XXX-XXXX."
 
 #: .\contrib\localflavor\jp\jp_prefectures.py:4
 msgid "Hokkaido"
@@ -2527,15 +2534,15 @@
 
 #: .\contrib\localflavor\nl\forms.py:21
 msgid "Enter a valid postal code"
-msgstr "Introduceti un cod postal valid"
+msgstr "Introduceți un cod poștal valid"
 
 #: .\contrib\localflavor\nl\forms.py:52
 msgid "Enter a valid phone number"
-msgstr "Introduceţi un număr îde telefon valid"
+msgstr "Introduceţi un număr de telefon valid"
 
 #: .\contrib\localflavor\nl\forms.py:78
 msgid "Enter a valid SoFi number"
-msgstr "Introduceti un numar SoFi valid"
+msgstr "Introduceți un număr SoFi valid"
 
 #: .\contrib\localflavor\nl\nl_provinces.py:4
 msgid "Drente"
@@ -2587,47 +2594,47 @@
 
 #: .\contrib\localflavor\no\forms.py:33
 msgid "Enter a valid Norwegian social security number."
-msgstr "Introduceti un numar norvegian de securitate sociala valid."
+msgstr "Introduceți un număr norvegian de securitate socială valid."
 
 #: .\contrib\localflavor\pe\forms.py:24
 msgid "This field requires 8 digits."
-msgstr "Acest camp are nevoie de 8 cifre."
+msgstr "Acest câmp are nevoie de 8 cifre."
 
 #: .\contrib\localflavor\pe\forms.py:52
 msgid "This field requires 11 digits."
-msgstr "Acest camp are nevoie de 11 cifre."
+msgstr "Acest câmp are nevoie de 11 cifre."
 
 #: .\contrib\localflavor\pl\forms.py:39
 msgid "National Identification Number consists of 11 digits."
-msgstr "Numarul National de Identificare contine 11 cifre."
+msgstr "Numărul Național de Identificare conține 11 cifre."
 
 #: .\contrib\localflavor\pl\forms.py:40
 msgid "Wrong checksum for the National Identification Number."
-msgstr "Suma de control gresita pentru Numarul National de Identificare."
+msgstr "Sumă de control greșită pentru Numărul Național de Identificare."
 
 #: .\contrib\localflavor\pl\forms.py:72
 msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "Introduceti un numar de taxa(NIP) de forma XXX-XXX-XX-XX sau XX-XX-XXX-XXX."
+msgstr "Introduceți un număr de taxă(NIP) de forma XXX-XXX-XX-XX sau XX-XX-XXX-XXX."
 
 #: .\contrib\localflavor\pl\forms.py:73
 msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Suma de control gresita pentru Numarul de Taxa (NIP)."
+msgstr "Sumă de control greșită pentru Numărul de Taxa (NIP)."
 
 #: .\contrib\localflavor\pl\forms.py:112
 msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr "Numarul National din Registrul pentru Afaceri (REGON) contine 7 sau 9 cifre."
+msgstr "Numărul National din Registrul pentru Afaceri (REGON) contine 7 sau 9 cifre."
 
 #: .\contrib\localflavor\pl\forms.py:113
 msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr "Suma de control gresita pentru Numarul National din Registrul pentru Afaceri (REGON)."
+msgstr "Suma de control gresita pentru Numărul National din Registrul pentru Afaceri (REGON)."
 
 #: .\contrib\localflavor\pl\forms.py:156
 msgid "Enter a postal code in the format XX-XXX."
-msgstr "Introduceti un cod postal de forma XX-XXX."
+msgstr "Introduceți un cod poștal de forma XX-XXX."
 
 #: .\contrib\localflavor\pl\pl_voivodeships.py:8
 msgid "Lower Silesia"
-msgstr "Silezia Inferioara"
+msgstr "Silezia Inferioară"
 
 #: .\contrib\localflavor\pl\pl_voivodeships.py:9
 msgid "Kuyavia-Pomerania"
@@ -2647,7 +2654,7 @@
 
 #: .\contrib\localflavor\pl\pl_voivodeships.py:13
 msgid "Lesser Poland"
-msgstr "Polonia Mica"
+msgstr "Polonia Mică"
 
 #: .\contrib\localflavor\pl\pl_voivodeships.py:14
 msgid "Masovia"
@@ -2687,11 +2694,11 @@
 
 #: .\contrib\localflavor\pl\pl_voivodeships.py:23
 msgid "West Pomerania"
-msgstr "Pomerania Occidentala"
+msgstr "Pomerania Occidentală"
 
 #: .\contrib\localflavor\sk\forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "Introduceti un cod postal de forma XXXXX or XXX XX."
+msgstr "Introduceți un cod poștal de forma XXXXX or XXX XX."
 
 #: .\contrib\localflavor\sk\sk_districts.py:8
 msgid "Banska Bystrica"
@@ -3043,7 +3050,7 @@
 
 #: .\contrib\localflavor\uk\forms.py:21
 msgid "Enter a valid postcode."
-msgstr "Introduceti un cod postal valid."
+msgstr "Introduceți un cod poștal valid."
 
 #: .\contrib\localflavor\uk\uk_regions.py:11
 msgid "Bedfordshire"
@@ -3059,7 +3066,7 @@
 
 #: .\contrib\localflavor\uk\uk_regions.py:15
 msgid "Cornwall and Isles of Scilly"
-msgstr "Cornwall si Insulele Scilly"
+msgstr "Cornwall și Insulele Scilly"
 
 #: .\contrib\localflavor\uk\uk_regions.py:16
 msgid "Cumbria"
@@ -3179,7 +3186,7 @@
 
 #: .\contrib\localflavor\uk\uk_regions.py:45
 msgid "Tyne and Wear"
-msgstr "Tyne si Wear"
+msgstr "Tyne și Wear"
 
 #: .\contrib\localflavor\uk\uk_regions.py:46
 msgid "Warwickshire"
@@ -3271,7 +3278,7 @@
 
 #: .\contrib\localflavor\uk\uk_regions.py:77
 msgid "Dumfries and Galloway"
-msgstr "Dumfries si Galloway"
+msgstr "Dumfries și Galloway"
 
 #: .\contrib\localflavor\uk\uk_regions.py:78
 msgid "Fife"
@@ -3323,23 +3330,23 @@
 
 #: .\contrib\localflavor\uk\uk_regions.py:93
 msgid "Wales"
-msgstr "Tara Galilor"
+msgstr "Țara Galilor"
 
 #: .\contrib\localflavor\us\forms.py:16
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
-msgstr "Introduceti un cod postal de forma XXXXX or XXXXX-XXXX."
+msgstr "Introduceți un cod poștal de forma XXXXX or XXXXX-XXXX."
 
 #: .\contrib\localflavor\us\forms.py:54
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "Introduceti un numar SUA de Securitate Sociala de forma XXX-XX-XXXX format."
+msgstr "Introduceți un număr SUA de Securitate Sociala de forma XXX-XX-XXXX format."
 
 #: .\contrib\localflavor\za\forms.py:20
 msgid "Enter a valid South African ID number"
-msgstr "Introduceti un ID sud african valid"
+msgstr "Introduceți un ID sud african valid"
 
 #: .\contrib\localflavor\za\forms.py:54
 msgid "Enter a valid South African postal code"
-msgstr "Introduceti un cod postal sud african valid"
+msgstr "Introduceți un cod poștal sud african valid"
 
 #: .\contrib\localflavor\za\za_provinces.py:4
 msgid "Eastern Cape"
@@ -3383,7 +3390,7 @@
 
 #: .\contrib\redirects\models.py:8
 msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "Aceasta ar trebui să fie o cale absolută, excluzînd numele de domeniu. Exemplu: '/evenimente/cautare/'."
+msgstr "Aceasta ar trebui să fie o cale absolută, excluzând numele de domeniu. Exemplu: '/evenimente/cautare/'."
 
 #: .\contrib\redirects\models.py:9
 msgid "redirect to"
@@ -3391,7 +3398,7 @@
 
 #: .\contrib\redirects\models.py:10
 msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "Aceasta poate fi o cale absolută (ca mai sus) sau un URL începînd cu 'http://'."
+msgstr "Aceasta poate fi o cale absolută (ca mai sus) sau un URL începând cu 'http://'."
 
 #: .\contrib\redirects\models.py:13
 msgid "redirect"
@@ -3443,7 +3450,7 @@
 
 #: .\core\validators.py:76
 msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "Această valoare trebuie să conţină numai litere, numere, liniuţe de subliniere, slash-uri si dash-uri."
+msgstr "Această valoare trebuie să conţină numai litere, numere, liniuţe de subliniere, slash-uri și dash-uri."
 
 #: .\core\validators.py:80
 msgid "This value must contain only letters, numbers, underscores or hyphens."
@@ -3451,11 +3458,11 @@
 
 #: .\core\validators.py:84
 msgid "Uppercase letters are not allowed here."
-msgstr "Literele mari nu sînt permise aici."
+msgstr "Literele mari nu sunt permise aici."
 
 #: .\core\validators.py:88
 msgid "Lowercase letters are not allowed here."
-msgstr "Literele mici nu sînt permise aici."
+msgstr "Literele mici nu sunt permise aici."
 
 #: .\core\validators.py:95
 msgid "Enter only digits separated by commas."
@@ -3471,11 +3478,11 @@
 
 #: .\core\validators.py:115
 msgid "Empty values are not allowed here."
-msgstr "Valorile vide nu sînt permise aici."
+msgstr "Valorile vide nu sunt permise aici."
 
 #: .\core\validators.py:119
 msgid "Non-numeric characters aren't allowed here."
-msgstr "Caracterele ne-numerice nu sînt permise aici."
+msgstr "Caracterele ne-numerice nu sunt permise aici."
 
 #: .\core\validators.py:123
 msgid "This value can't be comprised solely of digits."
@@ -3488,11 +3495,11 @@
 
 #: .\core\validators.py:132
 msgid "Only alphabetical characters are allowed here."
-msgstr "Numai caractere alfabetice sînt permise aici."
+msgstr "Numai caractere alfabetice sunt permise aici."
 
 #: .\core\validators.py:147
 msgid "Year must be 1900 or later."
-msgstr "Anul trebuie sa fie 1900 sau posterior."
+msgstr "Anul trebuie să fie 1900 sau posterior."
 
 #: .\core\validators.py:151
 #, python-format
@@ -3502,7 +3509,7 @@
 #: .\core\validators.py:156
 #: .\db\models\fields\__init__.py:527
 msgid "Enter a valid date in YYYY-MM-DD format."
-msgstr "Introduceţi o dată validă in format: AAAA-LL-ZZ."
+msgstr "Introduceţi o dată validă în format: AAAA-LL-ZZ."
 
 #: .\core\validators.py:161
 msgid "Enter a valid time in HH:MM format."
@@ -3537,7 +3544,7 @@
 #: .\core\validators.py:204
 #, python-format
 msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
-msgstr "Numerele de telefon trebuie să fie in format XXX-XXX-XXXX. \"%s\" e invalid."
+msgstr "Numerele de telefon trebuie să fie în format XXX-XXX-XXXX. \"%s\" e invalid."
 
 #: .\core\validators.py:212
 #, python-format
@@ -3554,7 +3561,7 @@
 "Valid HTML is required. Specific errors are:\n"
 "%s"
 msgstr ""
-"E necesar cod HTML valid. Erorile specifice sînt:\n"
+"E necesar cod HTML valid. Erorile specifice sunt:\n"
 "%s"
 
 #: .\core\validators.py:237
@@ -3581,46 +3588,46 @@
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
-msgstr[0] "Îngrijiţi-vă limbajul! Cuvîntul %s nu este permis aici."
-msgstr[1] "Îngrijiţi-vă limbajul! Cuvintele %s nu sînt permise aici."
+msgstr[0] "Îngrijiţi-vă limbajul! Cuvântul %s nu este permis aici."
+msgstr[1] "Îngrijiţi-vă limbajul! Cuvintele %s nu sunt permise aici."
 
 #: .\core\validators.py:288
 #, python-format
 msgid "This field must match the '%s' field."
-msgstr "Acest camp trebuie sa fie identic cu '%s'."
+msgstr "Acest câmp trebuie să fie identic cu '%s'."
 
 #: .\core\validators.py:307
 msgid "Please enter something for at least one field."
-msgstr "Va rog completati cel putin un camp."
+msgstr "Vă rog completați cel puțin un câmp."
 
 #: .\core\validators.py:316
 #: .\core\validators.py:327
 msgid "Please enter both fields or leave them both empty."
-msgstr "Vă rog comletaţi ambele cîmpuri sau lăsaţi-le goale pe ambele."
+msgstr "Vă rog completaţi ambele câmpuri sau lăsaţi-le goale pe ambele."
 
 #: .\core\validators.py:335
 #, python-format
 msgid "This field must be given if %(field)s is %(value)s"
-msgstr "Acest cîmp e necesar dacă %(field)s este %(value)s"
+msgstr "Acest câmp e necesar dacă %(field)s este %(value)s"
 
 #: .\core\validators.py:348
 #, python-format
 msgid "This field must be given if %(field)s is not %(value)s"
-msgstr "Acest cîmp e necesar dacă %(field)s nu este %(value)s"
+msgstr "Acest câmp e necesar dacă %(field)s nu este %(value)s"
 
 #: .\core\validators.py:367
 msgid "Duplicate values are not allowed."
-msgstr "Valorile duplicate nu sînt permise."
+msgstr "Valorile duplicate nu sunt permise."
 
 #: .\core\validators.py:382
 #, python-format
 msgid "This value must be between %(lower)s and %(upper)s."
-msgstr "Aceasta valoare trebuie sa fie cuprinsa intre %(lower)s si %(upper)s."
+msgstr "Această valoare trebuie să fie cuprinsa între %(lower)s și %(upper)s."
 
 #: .\core\validators.py:384
 #, python-format
 msgid "This value must be at least %s."
-msgstr "Această valoare trebuie să fie cel putin %s."
+msgstr "Această valoare trebuie să fie cel puțin %s."
 
 #: .\core\validators.py:386
 #, python-format
@@ -3647,8 +3654,8 @@
 #, python-format
 msgid "Please enter a valid decimal number with a whole part of at most %s digit."
 msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] "Vă rog introduceţi un număr zecimal valid cu partea intreaga cel mult %s cifră."
-msgstr[1] "Vă rog introduceţi un număr zecimal valid cu partea intreaga cel mult %s cifre."
+msgstr[0] "Vă rog introduceţi un număr zecimal valid cu partea întreagă de cel mult %s cifră."
+msgstr[1] "Vă rog introduceţi un număr zecimal valid cu partea întreagă de cel mult %s cifre."
 
 #: .\core\validators.py:450
 #, python-format
@@ -3659,12 +3666,12 @@
 
 #: .\core\validators.py:458
 msgid "Please enter a valid floating point number."
-msgstr "Vă rog introduceţi un număr cu virgula valid."
+msgstr "Vă rog introduceţi un număr cu virgulă valid."
 
 #: .\core\validators.py:467
 #, python-format
 msgid "Make sure your uploaded file is at least %s bytes big."
-msgstr "Asigură-te că fişierul încărcact are cel puţin %s octeţi."
+msgstr "Asigură-te că fişierul încărcat are cel puţin %s octeţi."
 
 #: .\core\validators.py:468
 #, python-format
@@ -3673,11 +3680,11 @@
 
 #: .\core\validators.py:485
 msgid "The format for this field is wrong."
-msgstr "Formatul acestui cîmp este invalid."
+msgstr "Formatul acestui câmp este invalid."
 
 #: .\core\validators.py:500
 msgid "This field is invalid."
-msgstr "Cîmpul este invalid."
+msgstr "Câmpul este invalid."
 
 #: .\core\validators.py:536
 #, python-format
@@ -3697,12 +3704,12 @@
 #: .\core\validators.py:576
 #, python-format
 msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)"
-msgstr "Textul începînd cu linia %(line)s nu e permis în acest context. (Linia începînd cu \"%(start)s\".)"
+msgstr "Textul începând cu linia %(line)s nu e permis în acest context. (Linia începând cu \"%(start)s\".)"
 
 #: .\core\validators.py:581
 #, python-format
 msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)"
-msgstr "\"%(attr)s\" în linia %(line)s e un atribut invalid. (Linia începînd cu \"%(start)s\".)"
+msgstr "\"%(attr)s\" în linia %(line)s e un atribut invalid. (Linia începând cu \"%(start)s\".)"
 
 #: .\core\validators.py:586
 #, python-format
@@ -3722,12 +3729,12 @@
 #: .\db\models\manipulators.py:308
 #, python-format
 msgid "%(object)s with this %(type)s already exists for the given %(field)s."
-msgstr "%(object)s de acest tip %(type)s exista deja pentru %(field)s dat."
+msgstr "%(object)s de acest tip %(type)s există deja pentru %(field)s dat."
 
 #: .\db\models\fields\__init__.py:52
 #, python-format
 msgid "%(optname)s with this %(fieldname)s already exists."
-msgstr "%(optname)s cu acest %(fieldname)s exista deja."
+msgstr "%(optname)s cu acest %(fieldname)s există deja."
 
 #: .\db\models\fields\__init__.py:161
 #: .\db\models\fields\__init__.py:327
@@ -3736,36 +3743,36 @@
 #: .\newforms\fields.py:46
 #: .\oldforms\__init__.py:374
 msgid "This field is required."
-msgstr "Campul acesta trebuie completat obligatoriu."
+msgstr "Acest câmp este obligatoriu."
 
 #: .\db\models\fields\__init__.py:427
 msgid "This value must be an integer."
-msgstr "Această valoare trebuie să fie un numar intreg"
+msgstr "Această valoare trebuie să fie un număr intreg."
 
 #: .\db\models\fields\__init__.py:466
 msgid "This value must be either True or False."
-msgstr "Această valoare trebuie să fie ori falsa ori adevarata"
+msgstr "Această valoare trebuie să fie ori falsă ori adevarată."
 
 #: .\db\models\fields\__init__.py:490
 msgid "This field cannot be null."
-msgstr "Cîmpul nu poate fi gol"
+msgstr "Câmpul nu poate fi gol"
 
 #: .\db\models\fields\__init__.py:668
 msgid "This value must be a decimal number."
-msgstr "Această valoare trebuie să fie un numar zecimal."
+msgstr "Această valoare trebuie să fie un număr zecimal."
 
 #: .\db\models\fields\__init__.py:779
 msgid "Enter a valid filename."
-msgstr "Introduceti un nume de fisier valid."
+msgstr "Introduceți un nume de fișier valid."
 
 #: .\db\models\fields\__init__.py:960
 msgid "This value must be either None, True or False."
-msgstr "Această valoare trebuie să fie falsa, adevarata sau nici una."
+msgstr "Această valoare trebuie să fie falsă, adevarată sau nici una."
 
 #: .\db\models\fields\related.py:93
 #, python-format
 msgid "Please enter a valid %s."
-msgstr "Introduceti va rog un %s valid."
+msgstr "Introduceți vă rog un %s valid."
 
 #: .\db\models\fields\related.py:701
 msgid "Separate multiple IDs with commas."
@@ -3773,42 +3780,42 @@
 
 #: .\db\models\fields\related.py:703
 msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr " Ţine apăsat \"Control\", sau \"Command\" pe un Mac, pentru a selectie multipla."
+msgstr " Ţine apăsat \"Control\", sau \"Command\" pe un Mac, pentru selecție multiplă."
 
 #: .\db\models\fields\related.py:750
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Introduceti un ID valid pentru %(self)s. Valoarea %(value)r nu este valida."
-msgstr[1] "Introduceti ID-uri valide pentru %(self)s. Valorile %(value)r nu sunt valide."
+msgstr[0] "Introduceți un ID valid pentru %(self)s. Valoarea %(value)r nu este validă."
+msgstr[1] "Introduceți ID-uri valide pentru %(self)s. Valorile %(value)r nu sunt valide."
 
 #: .\newforms\fields.py:47
 msgid "Enter a valid value."
-msgstr "Introduceti o valoare valida."
+msgstr "Introduceți o valoare validă."
 
 #: .\newforms\fields.py:124
 #, python-format
 msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Asigurati-va ca aceasta valoare are cel mult %(max)d caractere (are %(length)d)."
+msgstr "Asigurați-vă că această valoare are cel mult %(max)d caractere (are %(length)d)."
 
 #: .\newforms\fields.py:125
 #, python-format
 msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "Asigurati-va ca aceasta valoare are cel putin %(min)d caractere (are %(length)d)."
+msgstr "Asigurați-vă că această valoare are cel puțin %(min)d caractere (are %(length)d)."
 
 #: .\newforms\fields.py:153
 #: .\newforms\fields.py:182
 #: .\newforms\fields.py:211
 #, python-format
 msgid "Ensure this value is less than or equal to %s."
-msgstr "Asigurati-va ca aceasta valoare este mai mica sau egala cu %s."
+msgstr "Asigurați-vă că această valoare este mai mică sau egală cu %s."
 
 #: .\newforms\fields.py:154
 #: .\newforms\fields.py:183
 #: .\newforms\fields.py:212
 #, python-format
 msgid "Ensure this value is greater than or equal to %s."
-msgstr "Asigurati-va ca aceasta valoare este mai mare sau egala cu %s."
+msgstr "Asigurați-vă că aceasta valoare este mai mare sau egală cu %s."
 
 #: .\newforms\fields.py:181
 #: .\newforms\fields.py:210
@@ -3818,44 +3825,44 @@
 #: .\newforms\fields.py:213
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
-msgstr "Asigurati-va ca nu exista mai mult de %s cifre in total."
+msgstr "Asigurați-vă că nu exista mai mult de %s cifre în total."
 
 #: .\newforms\fields.py:214
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
-msgstr "Asigurati-va ca nu exista mai mult de %s spatii zecimale."
+msgstr "Asigurați-vă că nu exista mai mult de %s spații zecimale."
 
 #: .\newforms\fields.py:215
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr "Asigurati-va ca nu exista mai mult de %s cifre inainte de virgula."
+msgstr "Asigurați-vă că nu exista mai mult de %s cifre înainte de virgulă."
 
 #: .\newforms\fields.py:263
 #: .\newforms\fields.py:751
 msgid "Enter a valid date."
-msgstr "Introduceti o data valida."
+msgstr "Introduceți o dată validă."
 
 #: .\newforms\fields.py:296
 #: .\newforms\fields.py:752
 msgid "Enter a valid time."
-msgstr "Introduceti o ora valida."
+msgstr "Introduceți o oră validă."
 
 #: .\newforms\fields.py:335
 msgid "Enter a valid date/time."
-msgstr "Introduceti o data/ora valida."
+msgstr "Introduceți o dată/oră validă."
 
 #: .\newforms\fields.py:434
 msgid "No file was submitted."
-msgstr "Nici un fisier nu a fost trimis."
+msgstr "Nici un fișier nu a fost trimis."
 
 #: .\newforms\fields.py:435
 #: .\oldforms\__init__.py:689
 msgid "The submitted file is empty."
-msgstr "Fisierul uploadat este gol"
+msgstr "Fișierul uploadat este gol"
 
 #: .\newforms\fields.py:497
 msgid "Enter a valid URL."
-msgstr "Introduceti un URL valid."
+msgstr "Introduceți un URL valid."
 
 #: .\newforms\fields.py:498
 msgid "This URL appears to be a broken link."
@@ -3864,49 +3871,49 @@
 #: .\newforms\fields.py:560
 #: .\newforms\models.py:299
 msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Selectati o optiune valida. Aceasta optiune nu face parte din optiunile disponibile."
+msgstr "Selectați o opțiune validă. Această opțiune nu face parte din opțiunile disponibile."
 
 #: .\newforms\fields.py:599
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
-msgstr "Selectati o optiune valida. %(value)s nu face parte din optiunile disponibile."
+msgstr "Selectați o opțiune validă. %(value)s nu face parte din opțiunile disponibile."
 
 #: .\newforms\fields.py:600
 #: .\newforms\fields.py:662
 #: .\newforms\models.py:371
 msgid "Enter a list of values."
-msgstr "Introduceti o lista de valori."
+msgstr "Introduceți o listă de valori."
 
 #: .\newforms\fields.py:780
 msgid "Enter a valid IPv4 address."
-msgstr "Introduceţi o adresă IPv4 valida."
+msgstr "Introduceţi o adresă IPv4 validă."
 
 #: .\newforms\models.py:372
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
-msgstr "Selectati o optiune valida. %s nu face parte din optiunile disponibile."
+msgstr "Selectați o opțiune validă. %s nu face parte din opțiunile disponibile."
 
 #: .\oldforms\__init__.py:409
 #, python-format
 msgid "Ensure your text is less than %s character."
 msgid_plural "Ensure your text is less than %s characters."
-msgstr[0] "Asigurati-va ca textul dumneavoastra are mai putin de %s caracter."
-msgstr[1] "Asigurati-va ca textul dumneavoastra are mai putin de %s caractere."
+msgstr[0] "Asigurați-va că textul dumneavoastră are mai puțin de %s caracter."
+msgstr[1] "Asigurați-va că textul dumneavoastră are mai puțin de %s caractere."
 
 #: .\oldforms\__init__.py:414
 msgid "Line breaks are not allowed here."
-msgstr "Randurile noi nu sînt permise aici."
+msgstr "Randurile noi nu sunt permise aici."
 
 #: .\oldforms\__init__.py:512
 #: .\oldforms\__init__.py:586
 #: .\oldforms\__init__.py:625
 #, python-format
 msgid "Select a valid choice; '%(data)s' is not in %(choices)s."
-msgstr "Selectati o optiune valida. '%(data)s' nu face parte din %(choices)s."
+msgstr "Selectați o opțiune validă. '%(data)s' nu face parte din %(choices)s."
 
 #: .\oldforms\__init__.py:745
 msgid "Enter a whole number between -32,768 and 32,767."
-msgstr "Introduceţi un număr întreg cu valoare intre -32,768 si 32,767."
+msgstr "Introduceţi un număr întreg cu valoare intre -32,768 și 32,767."
 
 #: .\oldforms\__init__.py:755
 msgid "Enter a positive number."
@@ -3914,7 +3921,7 @@
 
 #: .\oldforms\__init__.py:765
 msgid "Enter a whole number between 0 and 32,767."
-msgstr "Introduceţi un număr întreg cu valoare intre 0 si 32,767."
+msgstr "Introduceţi un număr întreg cu valoare intre 0 și 32,767."
 
 #: .\template\defaultfilters.py:698
 msgid "yes,no,maybe"
@@ -3960,11 +3967,11 @@
 
 #: .\utils\dateformat.py:97
 msgid "midnight"
-msgstr "miezul noptii"
+msgstr "miezul nopții"
 
 #: .\utils\dateformat.py:99
 msgid "noon"
-msgstr "amiaza"
+msgstr "amiază"
 
 #: .\utils\dates.py:6
 msgid "Monday"
@@ -3988,7 +3995,7 @@
 
 #: .\utils\dates.py:7
 msgid "Saturday"
-msgstr "Sîmbătă"
+msgstr "Sâmbătă"
 
 #: .\utils\dates.py:7
 msgid "Sunday"
@@ -4016,7 +4023,7 @@
 
 #: .\utils\dates.py:11
 msgid "Sat"
-msgstr "Sam"
+msgstr "Sâm"
 
 #: .\utils\dates.py:11
 msgid "Sun"
@@ -4164,14 +4171,14 @@
 #: .\utils\timesince.py:22
 msgid "month"
 msgid_plural "months"
-msgstr[0] "luna"
+msgstr[0] "lună"
 msgstr[1] "luni"
 
 #: .\utils\timesince.py:23
 msgid "week"
 msgid_plural "weeks"
-msgstr[0] "saptamana"
-msgstr[1] "saptamani"
+msgstr[0] "săptămână"
+msgstr[1] "săptămâni"
 
 #: .\utils\timesince.py:24
 msgid "day"
@@ -4182,7 +4189,7 @@
 #: .\utils\timesince.py:25
 msgid "hour"
 msgid_plural "hours"
-msgstr[0] "ora"
+msgstr[0] "oră"
 msgstr[1] "ore"
 
 #: .\utils\timesince.py:26
@@ -4238,7 +4245,7 @@
 #: .\views\generic\create_update.py:184
 #, python-format
 msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s a fost sters."
+msgstr "%(verbose_name)s a fost șters."
 
 #~ msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
 #~ msgstr "Ai <a href=\"/password_reset/\">uitat parola</a>?"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/ro/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'H:i:s'
+DATETIME_FORMAT = 'j F Y, H:i:s'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'd.m.Y'
+SHORT_DATETIME_FORMAT = 'd.m.Y, H:i:s'
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/ru/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/ru/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/ru/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -770,7 +770,7 @@
 #, python-format
 msgid "1 result"
 msgid_plural "%(counter)s results"
-msgstr[0] "1 результат"
+msgstr[0] "%(counter)s результат"
 msgstr[1] "%(counter)s результата"
 msgstr[2] "%(counter)s результатов"
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/ru/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y г.'
+TIME_FORMAT = 'G:i:s'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'd.m.Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/sk/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/sk/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/sk/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -5,8 +5,8 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-20 20:16+0100\n"
-"PO-Revision-Date: 2009-03-18 19:18+0100\n"
+"POT-Creation-Date: 2009-09-17 11:59+0200\n"
+"PO-Revision-Date: 2009-09-17 12:25+0100\n"
 "Last-Translator: Marian Andre <django@andre.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
 "MIME-Version: 1.0\n"
@@ -218,6 +218,21 @@
 msgid "Traditional Chinese"
 msgstr "čínsky (tradične)"
 
+#: contrib/admin/actions.py:60
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr "Úspešne zmazaných %(count)d %(items)s."
+
+#: contrib/admin/actions.py:67
+#: contrib/admin/options.py:1027
+msgid "Are you sure?"
+msgstr "Ste si istý?"
+
+#: contrib/admin/actions.py:85
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr "Zmazať označené %(verbose_name_plural)s"
+
 #: contrib/admin/filterspecs.py:44
 #, python-format
 msgid ""
@@ -227,43 +242,52 @@
 "<h3>Od %s:</h3>\n"
 "<ul>\n"
 
-#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:91
-#: contrib/admin/filterspecs.py:146 contrib/admin/filterspecs.py:172
+#: contrib/admin/filterspecs.py:75
+#: contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147
+#: contrib/admin/filterspecs.py:173
 msgid "All"
 msgstr "Všetko"
 
-#: contrib/admin/filterspecs.py:112
+#: contrib/admin/filterspecs.py:113
 msgid "Any date"
 msgstr "Ľubovoľný dátum"
 
-#: contrib/admin/filterspecs.py:113
+#: contrib/admin/filterspecs.py:114
 msgid "Today"
 msgstr "Dnes"
 
-#: contrib/admin/filterspecs.py:116
+#: contrib/admin/filterspecs.py:117
 msgid "Past 7 days"
 msgstr "Posledných 7 dní"
 
-#: contrib/admin/filterspecs.py:118
+#: contrib/admin/filterspecs.py:119
 msgid "This month"
 msgstr "Tento mesiac"
 
-#: contrib/admin/filterspecs.py:120
+#: contrib/admin/filterspecs.py:121
 msgid "This year"
 msgstr "Tento rok"
 
-#: contrib/admin/filterspecs.py:146 forms/widgets.py:390
+#: contrib/admin/filterspecs.py:147
+#: forms/widgets.py:435
 msgid "Yes"
 msgstr "Áno"
 
-#: contrib/admin/filterspecs.py:146 forms/widgets.py:390
+#: contrib/admin/filterspecs.py:147
+#: forms/widgets.py:435
 msgid "No"
 msgstr "Nie"
 
-#: contrib/admin/filterspecs.py:153 forms/widgets.py:390
+#: contrib/admin/filterspecs.py:154
+#: forms/widgets.py:435
 msgid "Unknown"
 msgstr "Neznámy"
 
+#: contrib/admin/helpers.py:14
+msgid "Action:"
+msgstr "Akcia:"
+
 #: contrib/admin/models.py:19
 msgid "action time"
 msgstr "čas udalosti"
@@ -292,87 +316,92 @@
 msgid "log entries"
 msgstr "položky záznamu"
 
-#: contrib/admin/options.py:130 contrib/admin/options.py:144
+#: contrib/admin/options.py:133
+#: contrib/admin/options.py:147
 msgid "None"
 msgstr "Žiadne"
 
-#: contrib/admin/options.py:400
+#: contrib/admin/options.py:519
 #, python-format
 msgid "Changed %s."
 msgstr "Zmenené %s."
 
-#: contrib/admin/options.py:400 contrib/admin/options.py:410
-#: contrib/comments/templates/comments/preview.html:15 forms/models.py:296
+#: contrib/admin/options.py:519
+#: contrib/admin/options.py:529
+#: contrib/comments/templates/comments/preview.html:16
+#: forms/models.py:388
+#: forms/models.py:600
 msgid "and"
 msgstr "a"
 
-#: contrib/admin/options.py:405
+#: contrib/admin/options.py:524
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Pridaný %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:409
+#: contrib/admin/options.py:528
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Zmenený %(list)s pre %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:414
+#: contrib/admin/options.py:533
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Zmazaný %(name)s \"%(object)s\"."
 
-#: contrib/admin/options.py:418
+#: contrib/admin/options.py:537
 msgid "No fields changed."
 msgstr "Polia nezmenené."
 
-#: contrib/admin/options.py:479 contrib/auth/admin.py:67
+#: contrib/admin/options.py:599
+#: contrib/auth/admin.py:67
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "Objekt %(name)s \"%(obj)s\" bol úspešne pridaný."
 
-#: contrib/admin/options.py:483 contrib/admin/options.py:516
+#: contrib/admin/options.py:603
+#: contrib/admin/options.py:636
 #: contrib/auth/admin.py:75
 msgid "You may edit it again below."
 msgstr "Nižšie to môžete znova upraviť."
 
-#: contrib/admin/options.py:493 contrib/admin/options.py:526
+#: contrib/admin/options.py:613
+#: contrib/admin/options.py:646
 #, python-format
 msgid "You may add another %s below."
 msgstr "Nižšie môžete pridať ďalšie %s."
 
-#: contrib/admin/options.py:514
+#: contrib/admin/options.py:634
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "Objekt %(name)s \"%(obj)s\" bol úspešne zmenený."
 
-#: contrib/admin/options.py:522
+#: contrib/admin/options.py:642
 #, python-format
-msgid ""
-"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr ""
-"Objekt %(name)s \"%(obj)s\" bol úspešne pridaný. Ďalšie zmeny môžete urobiť "
-"nižšie."
-
-#: contrib/admin/options.py:601
+msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr "Objekt %(name)s \"%(obj)s\" bol úspešne pridaný. Ďalšie zmeny môžete urobiť nižšie."
+
+#: contrib/admin/options.py:773
 #, python-format
 msgid "Add %s"
 msgstr "Pridať %s"
 
-#: contrib/admin/options.py:632 contrib/admin/options.py:802
+#: contrib/admin/options.py:804
+#: contrib/admin/options.py:1005
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "Objekt %(name)s s primárnym kľúčom %(key)r neexistuje."
 
-#: contrib/admin/options.py:689
+#: contrib/admin/options.py:861
 #, python-format
 msgid "Change %s"
 msgstr "Zmeniť %s"
 
-#: contrib/admin/options.py:721
+#: contrib/admin/options.py:905
 msgid "Database error"
 msgstr "Chyba databázy"
 
-#: contrib/admin/options.py:749
+#: contrib/admin/options.py:941
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
@@ -380,99 +409,91 @@
 msgstr[1] "%(count)s %(name)s bol úspešne zmenený."
 msgstr[2] "%(count)s %(name)s boli úspešne zmenené."
 
-#: contrib/admin/options.py:817
+#: contrib/admin/options.py:1020
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "Objekt %(name)s \"%(obj)s\" bol úspešne vymazaný."
 
-#: contrib/admin/options.py:824
-msgid "Are you sure?"
-msgstr "Ste si istý?"
-
-#: contrib/admin/options.py:853
+#: contrib/admin/options.py:1057
 #, python-format
 msgid "Change history: %s"
 msgstr "Zmeniť históriu: %s"
 
-#: contrib/admin/sites.py:15 contrib/admin/views/decorators.py:14
+#: contrib/admin/sites.py:21
+#: contrib/admin/views/decorators.py:14
 #: contrib/auth/forms.py:80
-msgid ""
-"Please enter a correct username and password. Note that both fields are case-"
-"sensitive."
-msgstr ""
-"Prosím, zadajte správne používateľské meno a heslo. Rešpektujte malé a veľké "
-"písmená."
-
-#: contrib/admin/sites.py:243 contrib/admin/views/decorators.py:40
+msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
+msgstr "Prosím, zadajte správne používateľské meno a heslo. Rešpektujte malé a veľké písmená."
+
+#: contrib/admin/sites.py:285
+#: contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Vaše prihlásenie vypršalo. Prosím, prihláste sa znovu."
 
-#: contrib/admin/sites.py:250 contrib/admin/views/decorators.py:47
-msgid ""
-"Looks like your browser isn't configured to accept cookies. Please enable "
-"cookies, reload this page, and try again."
-msgstr ""
-"Zdá sa, že váš prehliadač nemá povolené cookies. Prosím, povoľte cookies, "
-"znova načítajte túto stránku a skúste to znova."
-
-#: contrib/admin/sites.py:266 contrib/admin/sites.py:272
+#: contrib/admin/sites.py:292
+#: contrib/admin/views/decorators.py:47
+msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
+msgstr "Zdá sa, že váš prehliadač nemá povolené cookies. Prosím, povoľte cookies, znova načítajte túto stránku a skúste to znova."
+
+#: contrib/admin/sites.py:308
+#: contrib/admin/sites.py:314
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Používateľské mená nemožu obsahovať znak '@'."
 
-#: contrib/admin/sites.py:269 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:311
+#: contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
-msgstr ""
-"Vaša e-mail adresa nie je vašim používateľským menom. Skúste namiesto toho "
-"použiť '%s'."
-
-#: contrib/admin/sites.py:329
+msgstr "Vaša e-mail adresa nie je vašim používateľským menom. Skúste namiesto toho použiť '%s'."
+
+#: contrib/admin/sites.py:367
 msgid "Site administration"
 msgstr "Správa stránky"
 
-#: contrib/admin/sites.py:342 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:381
+#: contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Prihlásenie"
 
-#: contrib/admin/sites.py:389
+#: contrib/admin/sites.py:426
 #, python-format
 msgid "%s administration"
 msgstr "%s správa"
 
-#: contrib/admin/util.py:144
+#: contrib/admin/util.py:168
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
 msgstr "Jeden alebo viac %(fieldname)s v %(name)s: %(obj)s"
 
-#: contrib/admin/util.py:149
+#: contrib/admin/util.py:173
 #, python-format
 msgid "One or more %(fieldname)s in %(name)s:"
 msgstr "Jeden alebo viac %(fieldname)s v %(name)s:"
 
-#: contrib/admin/widgets.py:70
+#: contrib/admin/widgets.py:72
 msgid "Date:"
 msgstr "Dátum:"
 
-#: contrib/admin/widgets.py:70
+#: contrib/admin/widgets.py:72
 msgid "Time:"
 msgstr "Čas:"
 
-#: contrib/admin/widgets.py:94
+#: contrib/admin/widgets.py:96
 msgid "Currently:"
 msgstr "Aktuálne:"
 
-#: contrib/admin/widgets.py:94
+#: contrib/admin/widgets.py:96
 msgid "Change:"
 msgstr "Zmeniť:"
 
-#: contrib/admin/widgets.py:123
+#: contrib/admin/widgets.py:125
 msgid "Lookup"
 msgstr "Vyhľadanie"
 
-#: contrib/admin/widgets.py:230
+#: contrib/admin/widgets.py:237
 msgid "Add Another"
 msgstr "Pridať ďalší"
 
@@ -487,10 +508,11 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:33
+#: contrib/admin/templates/admin/base.html:54
 #: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:20
+#: contrib/admin/templates/admin/change_list.html:25
 #: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
 #: contrib/admin/templates/admin/auth/user/change_password.html:10
@@ -518,12 +540,16 @@
 msgstr "Chyba servera <em>(500)</em>"
 
 #: contrib/admin/templates/admin/500.html:10
-msgid ""
-"There's been an error. It's been reported to the site administrators via e-"
-"mail and should be fixed shortly. Thanks for your patience."
-msgstr ""
-"Vyskytla sa chyba. Bola oznámená správcovi stránky e-mailom a mala by byť "
-"čoskoro opravená.Ďakujeme za pochopenie."
+msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
+msgstr "Vyskytla sa chyba. Bola oznámená správcovi stránky e-mailom a mala by byť čoskoro opravená.Ďakujeme za pochopenie."
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr "Spustiť označenú akciu"
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr "Ísť"
 
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
@@ -531,26 +557,26 @@
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:27
 msgid "Welcome,"
 msgstr "Vitajte,"
 
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Dokumentácia"
 
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:14
+#: contrib/admin/templates/admin/auth/user/change_password.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 msgid "Change password"
 msgstr "Zmeniť heslo"
 
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
 #: contrib/admin/templates/registration/password_change_form.html:3
 msgid "Log out"
@@ -576,57 +602,63 @@
 
 #: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Pozrieť na stránke"
 
 #: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:49
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
+#: contrib/admin/templates/admin/change_list.html:54
+#: contrib/admin/templates/admin/auth/user/change_password.html:23
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Prosím, opravte chyby uvedené nižšie."
 msgstr[1] "Prosím, opravte chybu uvedenú nižšie."
 msgstr[2] "Prosím, opravte chyby uvedené nižšie."
 
-#: contrib/admin/templates/admin/change_list.html:41
+#: contrib/admin/templates/admin/change_list.html:46
 #, python-format
 msgid "Add %(name)s"
 msgstr "Pridať %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:60
+#: contrib/admin/templates/admin/change_list.html:65
 msgid "Filter"
 msgstr "Filtrovať"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:251
+#: contrib/admin/templates/admin/submit_line.html:4
+#: forms/formsets.py:275
 msgid "Delete"
 msgstr "Odstrániť"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:16
 #, python-format
-msgid ""
-"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
-"related objects, but your account doesn't have permission to delete the "
-"following types of objects:"
-msgstr ""
-"Odstránenie objektu %(object_name)s '%(escaped_object)s' by malo za následok "
-"aj odstránenie súvisiacich objektov, avšak váš účet nemá oprávnenie na "
-"odstránenie nasledujúcich typov objektov:"
+msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
+msgstr "Odstránenie objektu %(object_name)s '%(escaped_object)s' by malo za následok aj odstránenie súvisiacich objektov, avšak váš účet nemá oprávnenie na odstránenie nasledujúcich typov objektov:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:23
 #, python-format
-msgid ""
-"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
-"All of the following related items will be deleted:"
-msgstr ""
-"Ste si istý, že chcete odstrániť objekt %(object_name)s \"%(escaped_object)s"
-"\"? Všetky nasledujúce súvisiace objekty budú odstránené:"
+msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
+msgstr "Ste si istý, že chcete odstrániť objekt %(object_name)s \"%(escaped_object)s\"? Všetky nasledujúce súvisiace objekty budú odstránené:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
 msgid "Yes, I'm sure"
 msgstr "Áno, som si istý"
 
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+msgid "Delete multiple objects"
+msgstr "Zmazať viacero objektov"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
+msgid "Deleting the %(object_name)s would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
+msgstr "Odstránenie objektu %(object_name)s by malo za následok aj odstránenie súvisiacich objektov, avšak váš účet nemá oprávnenie na odstránenie nasledujúcich typov objektov:"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, python-format
+msgid "Are you sure you want to delete the selected %(object_name)s objects? All of the following objects and their related items will be deleted:"
+msgstr "Ste si istý, že chcete odstrániť objekty %(object_name)s? Budú odstránené nasledujúce objekty a položky s nimi súvisiace:"
+
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
 msgid " By %(filter_title)s "
@@ -657,15 +689,13 @@
 msgid "None available"
 msgstr "Nedostupné"
 
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr "Neznámy obsah"
+
 #: contrib/admin/templates/admin/invalid_setup.html:7
-msgid ""
-"Something's wrong with your database installation. Make sure the appropriate "
-"database tables have been created, and make sure the database is readable by "
-"the appropriate user."
-msgstr ""
-"Niečo nie je v poriadku s vašou inštaláciou databázy. Uistite sa, že boli "
-"vytvorené potrebné databázové tabuľky a taktiež skontrolujte, či príslušný "
-"používateľ môže databázu čítať."
+msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
+msgstr "Niečo nie je v poriadku s vašou inštaláciou databázy. Uistite sa, že boli vytvorené potrebné databázové tabuľky a taktiež skontrolujte, či príslušný používateľ môže databázu čítať."
 
 #: contrib/admin/templates/admin/login.html:19
 msgid "Username:"
@@ -694,20 +724,21 @@
 msgstr "j. F Y o G:i"
 
 #: contrib/admin/templates/admin/object_history.html:38
-msgid ""
-"This object doesn't have a change history. It probably wasn't added via this "
-"admin site."
-msgstr ""
-"Tento objekt nemá históriu zmien. Pravdepodobne nebol pridaný "
-"prostredníctvom tejto správcovskej stránky."
+msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
+msgstr "Tento objekt nemá históriu zmien. Pravdepodobne nebol pridaný prostredníctvom tejto správcovskej stránky."
 
 #: contrib/admin/templates/admin/pagination.html:10
 msgid "Show all"
 msgstr "Zobraziť všetky"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Uložiť"
+
 #: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Ísť"
+msgid "Search"
+msgstr "Vyhľadávanie"
 
 #: contrib/admin/templates/admin/search_form.html:10
 #, python-format
@@ -722,10 +753,6 @@
 msgid "%(full_result_count)s total"
 msgstr "%(full_result_count)s spolu"
 
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Uložiť"
-
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
 msgstr "Uložiť ako nový"
@@ -739,36 +766,36 @@
 msgstr "Uložiť a pokračovať v úpravách"
 
 #: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid ""
-"First, enter a username and password. Then, you'll be able to edit more user "
-"options."
-msgstr ""
-"Najskôr zadajte používateľské meno a heslo. Potom budete môcť upraviť viac "
-"používateľských nastavení."
+msgid "First, enter a username and password. Then, you'll be able to edit more user options."
+msgstr "Najskôr zadajte používateľské meno a heslo. Potom budete môcť upraviť viac používateľských nastavení."
 
 #: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
+#: contrib/auth/forms.py:14
+#: contrib/auth/forms.py:47
+#: contrib/auth/forms.py:59
 msgid "Username"
 msgstr "Používateľské meno"
 
 #: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
+#: contrib/auth/forms.py:17
+#: contrib/auth/forms.py:60
+#: contrib/auth/forms.py:185
 msgid "Password"
 msgstr "Heslo"
 
 #: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
+#: contrib/admin/templates/admin/auth/user/change_password.html:40
 #: contrib/auth/forms.py:186
 msgid "Password (again)"
 msgstr "Heslo (znova)"
 
 #: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
 msgid "Enter the same password as above, for verification."
 msgstr "Kvôli overeniu zadajte rovnaké heslo ako vyššie."
 
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
+#: contrib/admin/templates/admin/auth/user/change_password.html:27
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Zadajte nové heslo pre používateľa <strong>%(username)s</strong>."
@@ -802,12 +829,8 @@
 msgstr "Vaše heslo bolo zmenené."
 
 #: contrib/admin/templates/registration/password_change_form.html:12
-msgid ""
-"Please enter your old password, for security's sake, and then enter your new "
-"password twice so we can verify you typed it in correctly."
-msgstr ""
-"Z bezpečnostných dôvodov zadajte staré heslo a potom nové heslo dvakrát, aby "
-"sme mohli overiť, že ste ho zadali správne."
+msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
+msgstr "Z bezpečnostných dôvodov zadajte staré heslo a potom nové heslo dvakrát, aby sme mohli overiť, že ste ho zadali správne."
 
 #: contrib/admin/templates/registration/password_change_form.html:17
 msgid "Old password:"
@@ -855,23 +878,16 @@
 msgstr "Zadajte nové heslo"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid ""
-"Please enter your new password twice so we can verify you typed it in "
-"correctly."
-msgstr ""
-"Zadajte nové heslo dvakrát, aby sme mohli overiť, že ste ho zadali správne."
+msgid "Please enter your new password twice so we can verify you typed it in correctly."
+msgstr "Zadajte nové heslo dvakrát, aby sme mohli overiť, že ste ho zadali správne."
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Obnova hesla sa nepodarila"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used.  Please request a new password reset."
-msgstr ""
-"Odkaz na obnovenie hesla je neplatný, pretože pravdepodobne už bol raz "
-"použitý. Požiadajte znovu o obnovu hesla, prosím."
+msgid "The password reset link was invalid, possibly because it has already been used.  Please request a new password reset."
+msgstr "Odkaz na obnovenie hesla je neplatný, pretože pravdepodobne už bol raz použitý. Požiadajte znovu o obnovu hesla, prosím."
 
 #: contrib/admin/templates/registration/password_reset_done.html:6
 #: contrib/admin/templates/registration/password_reset_done.html:10
@@ -879,17 +895,12 @@
 msgstr "Obnovenie hesla úspešné"
 
 #: contrib/admin/templates/registration/password_reset_done.html:12
-msgid ""
-"We've e-mailed you instructions for setting your password to the e-mail "
-"address you submitted. You should be receiving it shortly."
-msgstr ""
-"Poslali sme vám e-mailom návod na nastavenie vášho hesla na mailovú adresu, "
-"ktorú ste zadali.Mali by ste ho zakrátko dostať."
+msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
+msgstr "Poslali sme vám e-mailom návod na nastavenie vášho hesla na mailovú adresu, ktorú ste zadali.Mali by ste ho zakrátko dostať."
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
-msgstr ""
-"Dostávate túto elektronickú poštu, pretože ste si vyžiadali obnovenie hesla."
+msgstr "Dostávate túto elektronickú poštu, pretože ste si vyžiadali obnovenie hesla."
 
 #: contrib/admin/templates/registration/password_reset_email.html:3
 #, python-format
@@ -914,12 +925,8 @@
 msgstr "Tím %(site_name)s"
 
 #: contrib/admin/templates/registration/password_reset_form.html:12
-msgid ""
-"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
-"instructions for setting a new one."
-msgstr ""
-"Zabudli ste svoje heslo? Zadajte svoju e-mail adresu a my Vám pošleme "
-"inštrukcie pre nastavenie nového."
+msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
+msgstr "Zabudli ste svoje heslo? Zadajte svoju e-mail adresu a my Vám pošleme inštrukcie pre nastavenie nového."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
@@ -943,7 +950,8 @@
 msgid "Select %s to change"
 msgstr "Vybrať \"%s\" na úpravu"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:37
+#: contrib/sites/models.py:38
 msgid "site"
 msgstr "stránka"
 
@@ -951,144 +959,162 @@
 msgid "template"
 msgstr "šablóna"
 
-#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
+#: contrib/admindocs/views.py:61
+#: contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "značka:"
 
-#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
+#: contrib/admindocs/views.py:94
+#: contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "filter:"
 
-#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
+#: contrib/admindocs/views.py:158
+#: contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "pohľad:"
 
-#: contrib/admindocs/views.py:187
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "Aplikácia %r nenájdená"
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "Model %(model_name)r sa nenachádza v aplikácii %(app_label)r"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "súvisiaci objekt `%(app_label)s.%(data_type)s`"
 
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:209
+#: contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233
+#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261
+#: contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "model:"
 
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:224
+#: contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "súvisiace objekty `%(app_label)s.%(object_name)s`"
 
-#: contrib/admindocs/views.py:242
+#: contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "všetky %s"
 
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:233
+#: contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "počet %s"
 
-#: contrib/admindocs/views.py:252
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "Polia objektov %s"
 
-#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
+#: contrib/admindocs/views.py:334
+#: contrib/admindocs/views.py:345
+#: contrib/admindocs/views.py:347
+#: contrib/admindocs/views.py:353
+#: contrib/admindocs/views.py:354
+#: contrib/admindocs/views.py:356
 msgid "Integer"
 msgstr "Celé číslo"
 
-#: contrib/admindocs/views.py:316
+#: contrib/admindocs/views.py:335
 msgid "Boolean (Either True or False)"
 msgstr "Logická hodnota (buď True alebo False)"
 
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
+#: contrib/admindocs/views.py:336
+#: contrib/admindocs/views.py:355
 #, python-format
 msgid "String (up to %(max_length)s)"
 msgstr "Reťazec (až do %(max_length)s)"
 
-#: contrib/admindocs/views.py:318
+#: contrib/admindocs/views.py:337
 msgid "Comma-separated integers"
 msgstr "Celé čísla oddelené čiarkou"
 
-#: contrib/admindocs/views.py:319
+#: contrib/admindocs/views.py:338
 msgid "Date (without time)"
 msgstr "Dátum (bez času)"
 
-#: contrib/admindocs/views.py:320
+#: contrib/admindocs/views.py:339
 msgid "Date (with time)"
 msgstr "Dátum (a čas)"
 
-#: contrib/admindocs/views.py:321
+#: contrib/admindocs/views.py:340
 msgid "Decimal number"
 msgstr "Desatinné číslo"
 
-#: contrib/admindocs/views.py:322
+#: contrib/admindocs/views.py:341
 msgid "E-mail address"
 msgstr "E-mail adresa"
 
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
+#: contrib/admindocs/views.py:342
+#: contrib/admindocs/views.py:343
+#: contrib/admindocs/views.py:346
 msgid "File path"
 msgstr "Cesta k súboru"
 
-#: contrib/admindocs/views.py:325
+#: contrib/admindocs/views.py:344
 msgid "Floating point number"
 msgstr "Číslo s plávajúcou desatinnou čiarkou"
 
-#: contrib/admindocs/views.py:329 contrib/comments/models.py:58
+#: contrib/admindocs/views.py:348
+#: contrib/comments/models.py:60
 msgid "IP address"
 msgstr "IP adresa"
 
-#: contrib/admindocs/views.py:331
+#: contrib/admindocs/views.py:350
 msgid "Boolean (Either True, False or None)"
 msgstr "Logická hodnota (buď True, False alebo None)"
 
-#: contrib/admindocs/views.py:332
+#: contrib/admindocs/views.py:351
 msgid "Relation to parent model"
 msgstr "Vzťah k nadradenému modelu"
 
-#: contrib/admindocs/views.py:333
+#: contrib/admindocs/views.py:352
 msgid "Phone number"
 msgstr "Telefónne číslo"
 
-#: contrib/admindocs/views.py:338
+#: contrib/admindocs/views.py:357
 msgid "Text"
 msgstr "Text"
 
-#: contrib/admindocs/views.py:339
+#: contrib/admindocs/views.py:358
 msgid "Time"
 msgstr "Čas"
 
-#: contrib/admindocs/views.py:340 contrib/comments/forms.py:19
+#: contrib/admindocs/views.py:359
+#: contrib/comments/forms.py:95
 #: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
+#: contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7
 msgid "URL"
 msgstr "URL"
 
-#: contrib/admindocs/views.py:341
+#: contrib/admindocs/views.py:360
 msgid "U.S. state (two uppercase letters)"
 msgstr "Štát USA (dve veľké písmená)"
 
-#: contrib/admindocs/views.py:342
+#: contrib/admindocs/views.py:361
 msgid "XML text"
 msgstr "XML text"
 
-#: contrib/admindocs/views.py:368
+#: contrib/admindocs/views.py:387
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s nevyzerá ako urlpattern objekt"
@@ -1113,36 +1139,24 @@
 msgstr ""
 "\n"
 "<p class=\"help\">Ak chete nainštalovať záložky, pretiahnite odkaz do\n"
-"nástrojovej lišty so záložkami, alebo kliknite pravým tlačidlom myši na "
-"odkaz a pridajte ho do záložiek.\n"
-"Následne môžete záložky použiť na stránkach. Poznamenávame, že použitie "
-"niektorých záložiek vyžaduje, aby bol váš počítač \"interný\" (ak si nie ste "
-"istý, že váš počítač je \"interný\", oslovte svojho systémového správcu).</"
-"p>\n"
+"nástrojovej lišty so záložkami, alebo kliknite pravým tlačidlom myši na odkaz a pridajte ho do záložiek.\n"
+"Následne môžete záložky použiť na stránkach. Poznamenávame, že použitie niektorých záložiek vyžaduje, aby bol váš počítač \"interný\" (ak si nie ste istý, že váš počítač je \"interný\", oslovte svojho systémového správcu).</p>\n"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
 msgid "Documentation for this page"
 msgstr "Dokumentácia k tejto stránke"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid ""
-"Jumps you from any page to the documentation for the view that generates "
-"that page."
-msgstr ""
-"Nasmeruje vás z ľubovoľnej stránky do dokumentácie, kde je popísané, ako sa "
-"táto stránka generuje."
+msgid "Jumps you from any page to the documentation for the view that generates that page."
+msgstr "Nasmeruje vás z ľubovoľnej stránky do dokumentácie, kde je popísané, ako sa táto stránka generuje."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
 msgid "Show object ID"
 msgstr "Zobraziť identifikátor objektu"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid ""
-"Shows the content-type and unique ID for pages that represent a single "
-"object."
-msgstr ""
-"Zobrazí content-type a jedinečný identifikátor pre stránky, ktoré "
-"reprezentujú samostatný objekt."
+msgid "Shows the content-type and unique ID for pages that represent a single object."
+msgstr "Zobrazí content-type a jedinečný identifikátor pre stránky, ktoré reprezentujú samostatný objekt."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
 msgid "Edit this object (current window)"
@@ -1150,8 +1164,7 @@
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
 msgid "Jumps to the admin page for pages that represent a single object."
-msgstr ""
-"Skočí na stránku správy pre stránky, ktoré reprezentujú samostatný objekt."
+msgstr "Skočí na stránku správy pre stránky, ktoré reprezentujú samostatný objekt."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
 msgid "Edit this object (new window)"
@@ -1190,16 +1203,14 @@
 msgid "Change password: %s"
 msgstr "Zmeniť heslo: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:127
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
-msgstr ""
-"Povinné. 30 znakov alebo menej. Len alfanumerické znaky (písmená, čísla a "
-"podčiarkovníky)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
+#: contrib/auth/forms.py:15
+#: contrib/auth/forms.py:48
+#: contrib/auth/models.py:128
+msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
+msgstr "Povinné. 30 znakov alebo menej. Len alfanumerické znaky (písmená, čísla a podčiarkovníky)."
+
+#: contrib/auth/forms.py:16
+#: contrib/auth/forms.py:49
 msgid "This value must contain only letters, numbers and underscores."
 msgstr "Táto hodnota môže obsahovať len písmená, číslice a podčiarkovníky."
 
@@ -1211,7 +1222,8 @@
 msgid "A user with that username already exists."
 msgstr "Používateľ s takým používateľským menom už existuje."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
+#: contrib/auth/forms.py:36
+#: contrib/auth/forms.py:155
 #: contrib/auth/forms.py:197
 msgid "The two password fields didn't match."
 msgstr "Pole hesla a jeho potvrdenie sa nezhodujú."
@@ -1221,23 +1233,16 @@
 msgstr "Tento účet je neaktívny."
 
 #: contrib/auth/forms.py:87
-msgid ""
-"Your Web browser doesn't appear to have cookies enabled. Cookies are "
-"required for logging in."
-msgstr ""
-"Váš prehliadač nemá povolené cookies. Cookies sú potrebné pre prihlásenie."
+msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
+msgstr "Váš prehliadač nemá povolené cookies. Cookies sú potrebné pre prihlásenie."
 
 #: contrib/auth/forms.py:100
 msgid "E-mail"
 msgstr "E-mail"
 
 #: contrib/auth/forms.py:109
-msgid ""
-"That e-mail address doesn't have an associated user account. Are you sure "
-"you've registered?"
-msgstr ""
-"Táto e-mail adresa nemá priradený žiadny používateľský účet. Ste si istý, že "
-"ste sa zaregistrovali?"
+msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
+msgstr "Táto e-mail adresa nemá priradený žiadny používateľský účet. Ste si istý, že ste sa zaregistrovali?"
 
 #: contrib/auth/forms.py:135
 #, python-format
@@ -1260,7 +1265,8 @@
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr "Nezadali ste správne svoje staré heslo. Napíšte ho znovu, prosím."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:63
+#: contrib/auth/models.py:86
 msgid "name"
 msgstr "meno"
 
@@ -1272,7 +1278,8 @@
 msgid "permission"
 msgstr "oprávnenie"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:69
+#: contrib/auth/models.py:87
 msgid "permissions"
 msgstr "oprávnenia"
 
@@ -1280,106 +1287,95 @@
 msgid "group"
 msgstr "skupina"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:137
+#: contrib/auth/models.py:91
+#: contrib/auth/models.py:138
 msgid "groups"
 msgstr "skupiny"
 
-#: contrib/auth/models.py:127
-msgid "username"
-msgstr "používateľské meno"
-
 #: contrib/auth/models.py:128
-msgid "first name"
-msgstr "krstné meno"
+msgid "username"
+msgstr "používateľské meno"
 
 #: contrib/auth/models.py:129
+msgid "first name"
+msgstr "krstné meno"
+
+#: contrib/auth/models.py:130
 msgid "last name"
 msgstr "priezvisko"
 
-#: contrib/auth/models.py:130
-msgid "e-mail address"
-msgstr "e-mail adresa"
-
 #: contrib/auth/models.py:131
+msgid "e-mail address"
+msgstr "e-mail adresa"
+
+#: contrib/auth/models.py:132
 msgid "password"
 msgstr "heslo"
 
-#: contrib/auth/models.py:131
-msgid ""
-"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
-"password form</a>."
-msgstr ""
-"Použite '[algo]$[salt]$[hexdigest]' alebo <a href=\"password/\">formulár na "
-"zmenu hesla</a>."
-
 #: contrib/auth/models.py:132
+msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
+msgstr "Použite '[algo]$[salt]$[hexdigest]' alebo <a href=\"password/\">formulár na zmenu hesla</a>."
+
+#: contrib/auth/models.py:133
 msgid "staff status"
 msgstr "postavenie zamestnanca"
 
-#: contrib/auth/models.py:132
-msgid "Designates whether the user can log into this admin site."
-msgstr "Určuje, či sa používateľ môže prihlásiť do správy stránok."
-
-#: contrib/auth/models.py:133
-msgid "active"
-msgstr "aktívny"
-
 #: contrib/auth/models.py:133
-msgid ""
-"Designates whether this user should be treated as active. Unselect this "
-"instead of deleting accounts."
-msgstr ""
-"Určuje, či je účet aktívny. Odškrtnite, ak chcete vypnúť používateľský účet."
+msgid "Designates whether the user can log into this admin site."
+msgstr "Určuje, či sa používateľ môže prihlásiť do správy stránok."
 
 #: contrib/auth/models.py:134
-msgid "superuser status"
-msgstr "stav superpoužívateľa"
+msgid "active"
+msgstr "aktívny"
 
 #: contrib/auth/models.py:134
-msgid ""
-"Designates that this user has all permissions without explicitly assigning "
-"them."
-msgstr ""
-"Určuje, či používateľ získava automaticky všetky práva aj bez priameho "
-"priradenia."
+msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
+msgstr "Určuje, či je účet aktívny. Odškrtnite, ak chcete vypnúť používateľský účet."
+
+#: contrib/auth/models.py:135
+msgid "superuser status"
+msgstr "stav superpoužívateľa"
 
 #: contrib/auth/models.py:135
+msgid "Designates that this user has all permissions without explicitly assigning them."
+msgstr "Určuje, či používateľ získava automaticky všetky práva aj bez priameho priradenia."
+
+#: contrib/auth/models.py:136
 msgid "last login"
 msgstr "naposledy prihlásený"
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:137
 msgid "date joined"
 msgstr "dátum registrácie"
 
-#: contrib/auth/models.py:138
-msgid ""
-"In addition to the permissions manually assigned, this user will also get "
-"all permissions granted to each group he/she is in."
-msgstr ""
-"Okrem ručne zadaných práv bude mať používateľ aj všetky práva prislúchajúce "
-"skupinám, v ktorých sa nachádza."
-
 #: contrib/auth/models.py:139
+msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
+msgstr "Okrem ručne zadaných práv bude mať používateľ aj všetky práva prislúchajúce skupinám, v ktorých sa nachádza."
+
+#: contrib/auth/models.py:140
 msgid "user permissions"
 msgstr "používateľské práva"
 
-#: contrib/auth/models.py:143
+#: contrib/auth/models.py:144
+#: contrib/comments/models.py:50
+#: contrib/comments/models.py:168
 msgid "user"
 msgstr "používateľ"
 
-#: contrib/auth/models.py:144
+#: contrib/auth/models.py:145
 msgid "users"
 msgstr "používatelia"
 
-#: contrib/auth/models.py:300
+#: contrib/auth/models.py:301
 msgid "message"
 msgstr "správa"
 
-#: contrib/auth/views.py:50
+#: contrib/auth/views.py:56
 msgid "Logged out"
 msgstr "Odhlásený"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:428
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Zadajte platnú e-mail adresu."
 
@@ -1391,27 +1387,31 @@
 msgid "Metadata"
 msgstr "Metaúdaje"
 
-#: contrib/comments/forms.py:17
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr "%(site_name)s komentáre"
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr "Najnovšie komentáre na %(site_name)s"
+
+#: contrib/comments/forms.py:93
 #: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Meno"
 
-#: contrib/comments/forms.py:18
+#: contrib/comments/forms.py:94
 msgid "Email address"
 msgstr "E-mail adresa"
 
-#: contrib/comments/forms.py:20
+#: contrib/comments/forms.py:96
 #: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Komentár"
 
-#: contrib/comments/forms.py:23
-msgid ""
-"If you enter anything in this field your comment will be treated as spam"
-msgstr ""
-"Ak ste do tohoto poľa čokoľvek zadali, váš komentár bude považovaný za spam"
-
-#: contrib/comments/forms.py:146
+#: contrib/comments/forms.py:173
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
@@ -1419,69 +1419,70 @@
 msgstr[1] "Vyjadrujte sa slušne! Slovo %s tu nie je dovolené používať."
 msgstr[2] "Vyjadrujte sa slušne! Slová %s tu nie je dovolené používať."
 
-#: contrib/comments/models.py:23
+#: contrib/comments/forms.py:180
+msgid "If you enter anything in this field your comment will be treated as spam"
+msgstr "Ak ste do tohoto poľa čokoľvek zadali, váš komentár bude považovaný za spam"
+
+#: contrib/comments/models.py:22
+#: contrib/contenttypes/models.py:74
+msgid "content type"
+msgstr "typ obsahu"
+
+#: contrib/comments/models.py:24
 msgid "object ID"
 msgstr "identifikátor objektu"
 
-#: contrib/comments/models.py:50
-msgid "user's name"
-msgstr "meno používateľa"
-
-#: contrib/comments/models.py:51
-msgid "user's email address"
-msgstr "e-mail adresa používateľa"
-
 #: contrib/comments/models.py:52
+msgid "user's name"
+msgstr "meno používateľa"
+
+#: contrib/comments/models.py:53
+msgid "user's email address"
+msgstr "e-mail adresa používateľa"
+
+#: contrib/comments/models.py:54
 msgid "user's URL"
 msgstr "URL používateľa"
 
-#: contrib/comments/models.py:54
+#: contrib/comments/models.py:56
+#: contrib/comments/models.py:76
+#: contrib/comments/models.py:169
 msgid "comment"
 msgstr "komentár"
 
-#: contrib/comments/models.py:57
+#: contrib/comments/models.py:59
 msgid "date/time submitted"
 msgstr "dátum a čas odoslania"
 
-#: contrib/comments/models.py:59
+#: contrib/comments/models.py:61
 msgid "is public"
 msgstr "je verejný"
 
-#: contrib/comments/models.py:60
-msgid ""
-"Uncheck this box to make the comment effectively disappear from the site."
-msgstr ""
-"Ak chcete, aby komentár zmizol zo stránky, zrušte zaškrtnutie tohoto políčka."
-
 #: contrib/comments/models.py:62
+msgid "Uncheck this box to make the comment effectively disappear from the site."
+msgstr "Ak chcete, aby komentár zmizol zo stránky, zrušte zaškrtnutie tohoto políčka."
+
+#: contrib/comments/models.py:64
 msgid "is removed"
 msgstr "je odstránený"
 
-#: contrib/comments/models.py:63
-msgid ""
-"Check this box if the comment is inappropriate. A \"This comment has been "
-"removed\" message will be displayed instead."
-msgstr ""
-"Zaškrtnite toto pole, ak je komentár nevhodný. Namiesto neho sa zobrazí "
-"správa \"Tento komenár bol odstránený\"."
-
-#: contrib/comments/models.py:115
-msgid ""
-"This comment was posted by an authenticated user and thus the name is read-"
-"only."
-msgstr ""
-"Tento komentár je od autentifikovaného používateľa a preto je jeho meno len "
-"na čítanie."
-
-#: contrib/comments/models.py:124
-msgid ""
-"This comment was posted by an authenticated user and thus the email is read-"
-"only."
-msgstr ""
-"Tento komentár je od autentifikovaného používateľa a preto je jeho e-mail "
-"len na čítanie."
-
-#: contrib/comments/models.py:149
+#: contrib/comments/models.py:65
+msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
+msgstr "Zaškrtnite toto pole, ak je komentár nevhodný. Namiesto neho sa zobrazí správa \"Tento komenár bol odstránený\"."
+
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr "komentáre"
+
+#: contrib/comments/models.py:119
+msgid "This comment was posted by an authenticated user and thus the name is read-only."
+msgstr "Tento komentár je od autentifikovaného používateľa a preto je jeho meno len na čítanie."
+
+#: contrib/comments/models.py:128
+msgid "This comment was posted by an authenticated user and thus the email is read-only."
+msgstr "Tento komentár je od autentifikovaného používateľa a preto je jeho e-mail len na čítanie."
+
+#: contrib/comments/models.py:153
 #, python-format
 msgid ""
 "Posted by %(user)s at %(date)s\n"
@@ -1496,6 +1497,22 @@
 "\n"
 "http://%(domain)s%(url)s"
 
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr "príznak"
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr "dátum"
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr "komentárový príznak"
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr "komentárové príznaky"
+
 #: contrib/comments/templates/comments/approve.html:4
 msgid "Approve a comment"
 msgstr "Povoliť komentár"
@@ -1516,10 +1533,8 @@
 #: contrib/comments/templates/comments/approved.html:7
 #: contrib/comments/templates/comments/deleted.html:7
 #: contrib/comments/templates/comments/flagged.html:7
-msgid ""
-"Thanks for taking the time to improve the quality of discussion on our site"
-msgstr ""
-"Ďakujeme za čas, ktorý ste venovali zvýšniu kvality diskusie na našej stránke"
+msgid "Thanks for taking the time to improve the quality of discussion on our site"
+msgstr "Ďakujeme za čas, ktorý ste venovali zvýšniu kvality diskusie na našej stránke"
 
 #: contrib/comments/templates/comments/delete.html:4
 msgid "Remove a comment"
@@ -1554,13 +1569,13 @@
 msgid "Thanks for flagging"
 msgstr "Ďakujeme za označenie"
 
-#: contrib/comments/templates/comments/form.html:16
-#: contrib/comments/templates/comments/preview.html:31
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
 msgid "Post"
 msgstr "Poslať"
 
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
 msgid "Preview"
 msgstr "Náhľad"
 
@@ -1606,50 +1621,40 @@
 msgstr "Ďakujeme za váš komentár"
 
 #: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:12
+#: contrib/comments/templates/comments/preview.html:13
 msgid "Preview your comment"
 msgstr "Náhľad komentára"
 
-#: contrib/comments/templates/comments/preview.html:10
+#: contrib/comments/templates/comments/preview.html:11
 msgid "Please correct the error below"
 msgid_plural "Please correct the errors below"
 msgstr[0] "Opravte, prosím, chyby uvedené nižšie"
 msgstr[1] "Opravte, prosím, chybu uvedenú nižšie"
 msgstr[2] "Opravte, prosím, chyby uvedené nižšie"
 
-#: contrib/comments/templates/comments/preview.html:15
+#: contrib/comments/templates/comments/preview.html:16
 msgid "Post your comment"
 msgstr "Poslať váš komentár"
 
-#: contrib/comments/templates/comments/preview.html:15
+#: contrib/comments/templates/comments/preview.html:16
 msgid "or make changes"
 msgstr "alebo urobiť zmeny"
 
-#: contrib/contenttypes/models.py:67
+#: contrib/contenttypes/models.py:70
 msgid "python model class name"
 msgstr "pythonovské meno triedy modelu"
 
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "typ obsahu"
-
-#: contrib/contenttypes/models.py:72
+#: contrib/contenttypes/models.py:75
 msgid "content types"
 msgstr "typy obsahu"
 
 #: contrib/flatpages/admin.py:9
-msgid ""
-"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr ""
-"Príklad: '/about/contact/'. Uistite sa, že máte lomky na začiatku a na konci."
+msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Príklad: '/about/contact/'. Uistite sa, že máte lomky na začiatku a na konci."
 
 #: contrib/flatpages/admin.py:11
-msgid ""
-"This value must contain only letters, numbers, underscores, dashes or "
-"slashes."
-msgstr ""
-"Táto hodnota môže obsahovať len písmená, číslice, podčiarkovniky, pomlčky a "
-"lomky."
+msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
+msgstr "Táto hodnota môže obsahovať len písmená, číslice, podčiarkovniky, pomlčky a lomky."
 
 #: contrib/flatpages/admin.py:22
 msgid "Advanced options"
@@ -1672,12 +1677,8 @@
 msgstr "názov šablóny"
 
 #: contrib/flatpages/models.py:12
-msgid ""
-"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
-"will use 'flatpages/default.html'."
-msgstr ""
-"Príklad: 'flatpages/contact_page.html'. Ak nič nenapíšete, systém použije "
-"'flatpages/default.html'."
+msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
+msgstr "Príklad: 'flatpages/contact_page.html'. Ak nič nenapíšete, systém použije 'flatpages/default.html'."
 
 #: contrib/flatpages/models.py:13
 msgid "registration required"
@@ -1685,9 +1686,7 @@
 
 #: contrib/flatpages/models.py:13
 msgid "If this is checked, only logged-in users will be able to view the page."
-msgstr ""
-"Ak je toto zaškrtnuté, stránku budú môcť prezerať len prihlásení "
-"používatelia."
+msgstr "Ak je toto zaškrtnuté, stránku budú môcť prezerať len prihlásení používatelia."
 
 #: contrib/flatpages/models.py:18
 msgid "flat page"
@@ -1698,25 +1697,25 @@
 msgstr "statické stránky"
 
 #: contrib/formtools/wizard.py:130
-msgid ""
-"We apologize, but your form has expired. Please continue filling out the "
-"form from this page."
-msgstr ""
-"Ospravedlňujeme sa, ale platnosť formulára vypršala. Prosím, pokračujte vo "
-"vypĺňaní z tejto stránky."
-
-#: contrib/gis/forms/fields.py:14
+msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
+msgstr "Ospravedlňujeme sa, ale platnosť formulára vypršala. Prosím, pokračujte vo vypĺňaní z tejto stránky."
+
+#: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Nie je zadaná žiadna geometrická hodnota."
 
-#: contrib/gis/forms/fields.py:15
+#: contrib/gis/forms/fields.py:18
 msgid "Invalid geometry value."
 msgstr "Chybná geometrická hodnota."
 
-#: contrib/gis/forms/fields.py:16
+#: contrib/gis/forms/fields.py:19
 msgid "Invalid geometry type."
 msgstr "Chybný geometrický typ."
 
+#: contrib/gis/forms/fields.py:20
+msgid "An error occurred when transforming the geometry to the SRID of the geometry form field."
+msgstr "Nastala chyba pri prevode geometrie do SRID z formulárového poľa."
+
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
 msgstr "th"
@@ -1809,8 +1808,10 @@
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Zadajte poštové smerovacie číslo v tvare NNNN alebo ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
+#: contrib/localflavor/ar/forms.py:49
+#: contrib/localflavor/br/forms.py:96
+#: contrib/localflavor/br/forms.py:135
+#: contrib/localflavor/pe/forms.py:23
 #: contrib/localflavor/pe/forms.py:51
 msgid "This field requires only numbers."
 msgstr "Toto pole môže obsahovať len čísla."
@@ -1863,15 +1864,15 @@
 msgid "Vienna"
 msgstr "Viedeň"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
+#: contrib/localflavor/at/forms.py:20
+#: contrib/localflavor/ch/forms.py:16
 #: contrib/localflavor/no/forms.py:12
 msgid "Enter a zip code in the format XXXX."
 msgstr "Zadajte poštové smerovacie číslo v tvare XXXX."
 
 #: contrib/localflavor/at/forms.py:48
 msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr ""
-"Zadajte platné rakúske číslo sociálneho poistenia vo formáte XXXX XXXXXX."
+msgstr "Zadajte platné rakúske číslo sociálneho poistenia vo formáte XXXX XXXXXX."
 
 #: contrib/localflavor/au/forms.py:16
 msgid "Enter a 4 digit post code."
@@ -1886,11 +1887,8 @@
 msgstr "Telefónne čísla musia byť vo formáte XX-XXXX-XXXX."
 
 #: contrib/localflavor/br/forms.py:58
-msgid ""
-"Select a valid brazilian state. That state is not one of the available "
-"states."
-msgstr ""
-"Vyberte platný brazílsky štát. Tento štát nepatrí medzi existujúce štáty."
+msgid "Select a valid brazilian state. That state is not one of the available states."
+msgstr "Vyberte platný brazílsky štát. Tento štát nepatrí medzi existujúce štáty."
 
 #: contrib/localflavor/br/forms.py:94
 msgid "Invalid CPF number."
@@ -1914,8 +1912,7 @@
 
 #: contrib/localflavor/ca/forms.py:88
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr ""
-"Zadajte platné číslo kanadského sociálneho poistenia vo formáte XXX-XXX-XX."
+msgstr "Zadajte platné číslo kanadského sociálneho poistenia vo formáte XXX-XXX-XX."
 
 #: contrib/localflavor/ch/ch_states.py:5
 msgid "Aargau"
@@ -2022,12 +2019,8 @@
 msgstr "Zurich"
 
 #: contrib/localflavor/ch/forms.py:64
-msgid ""
-"Enter a valid Swiss identity or passport card number in X1234567<0 or "
-"1234567890 format."
-msgstr ""
-"Vložte platné švajčiarske číslo občianskeho preukazu alebo pasu vo formáte "
-"X1234567<0 alebo 1234567890."
+msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
+msgstr "Vložte platné švajčiarske číslo občianskeho preukazu alebo pasu vo formáte X1234567<0 alebo 1234567890."
 
 #: contrib/localflavor/cl/forms.py:29
 msgid "Enter a valid Chilean RUT."
@@ -2097,7 +2090,8 @@
 msgid "Moravian-Silesian Region"
 msgstr "Moravskosliezsky kraj"
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:27
+#: contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr "Zadajte poštové smerovacie číslo v tvare XXXXX alebo XXX XX."
 
@@ -2181,18 +2175,15 @@
 msgid "Thuringia"
 msgstr "Thuringia"
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
+#: contrib/localflavor/de/forms.py:14
+#: contrib/localflavor/fi/forms.py:12
 #: contrib/localflavor/fr/forms.py:15
 msgid "Enter a zip code in the format XXXXX."
 msgstr "Vložte poštové smerovacie číslo v tvare XXXXX."
 
 #: contrib/localflavor/de/forms.py:41
-msgid ""
-"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
-"format."
-msgstr ""
-"Vložte platné nemecké číslo občianskeho preukazu vo formáte XXXXXXXXXXX-"
-"XXXXXXX-XXXXXXX-X."
+msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
+msgstr "Vložte platné nemecké číslo občianskeho preukazu vo formáte XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
 
 #: contrib/localflavor/es/es_provinces.py:5
 msgid "Arava"
@@ -2463,15 +2454,11 @@
 
 #: contrib/localflavor/es/forms.py:19
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
-msgstr ""
-"Zadajte platné poštové smerovacie číslo v rozmedzí a v tvare 01XXX - 52XXX."
+msgstr "Zadajte platné poštové smerovacie číslo v rozmedzí a v tvare 01XXX - 52XXX."
 
 #: contrib/localflavor/es/forms.py:39
-msgid ""
-"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
-"9XXXXXXXX."
-msgstr ""
-"Zadajte platné telefónne číslo v tvare 6XXXXXXXX, 8XXXXXXXX alebo 9XXXXXXXX."
+msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
+msgstr "Zadajte platné telefónne číslo v tvare 6XXXXXXXX, 8XXXXXXXX alebo 9XXXXXXXX."
 
 #: contrib/localflavor/es/forms.py:66
 msgid "Please enter a valid NIF, NIE, or CIF."
@@ -2494,10 +2481,8 @@
 msgstr "Neplatný kontrolný súčet pre CIF."
 
 #: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-"Zadajte, prosím, platné číslo bankového účtu v tvare XXXX-XXXX-XX-XXXXXXXXXX."
+msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr "Zadajte, prosím, platné číslo bankového účtu v tvare XXXX-XXXX-XX-XXXXXXXXXX."
 
 #: contrib/localflavor/es/forms.py:143
 msgid "Invalid checksum for bank account number."
@@ -2507,13 +2492,16 @@
 msgid "Enter a valid Finnish social security number."
 msgstr "Vložte platné fínske číslo sociálneho poistenia."
 
+#: contrib/localflavor/fr/forms.py:30
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Telefónne čísla musia mať formát 0X XX XX XX XX."
+
 #: contrib/localflavor/in_/forms.py:14
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "Vložte poštové smerovacie číslo v tvare XXXXXXX."
 
 #: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr "Zadajte platné islandské identifikačné číslo. Formát je XXXXXX-XXXX."
 
 #: contrib/localflavor/is_/forms.py:18
@@ -2933,27 +2921,22 @@
 msgstr "Nesprávny kontrolný súčet pre národné identifikačné číslo."
 
 #: contrib/localflavor/pl/forms.py:71
-msgid ""
-"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr ""
-"Zadajte platné daňové číselné pole (NIP) v tvare XXX-XXX-XX-XX alebo XX-XX-"
-"XXX-XXX."
+msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr "Zadajte platné daňové číselné pole (NIP) v tvare XXX-XXX-XX-XX alebo XX-XX-XXX-XXX."
 
 #: contrib/localflavor/pl/forms.py:72
 msgid "Wrong checksum for the Tax Number (NIP)."
 msgstr "Nesprávny kontrolný súčet pre daňové číslo (NIP)."
 
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr ""
-"Číslo národného obchodného registra (REGON) sa skladá zo 7 alebo z 9 číslic."
-
-#: contrib/localflavor/pl/forms.py:112
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr "Číslo národného obchodného registra (REGON) sa skladá z 9 alebo zo 14 číslic."
+
+#: contrib/localflavor/pl/forms.py:110
 msgid "Wrong checksum for the National Business Register Number (REGON)."
-msgstr ""
-"Nesprávny kontrolný súčet pre číslo národného obchodného registra (REGON)."
-
-#: contrib/localflavor/pl/forms.py:155
+msgstr "Nesprávny kontrolný súčet pre číslo národného obchodného registra (REGON)."
+
+#: contrib/localflavor/pl/forms.py:148
 msgid "Enter a postal code in the format XX-XXX."
 msgstr "Vložte poštové smerovacie číslo v tvare XX-XXX."
 
@@ -3730,24 +3713,16 @@
 msgstr "presmerovať z"
 
 #: contrib/redirects/models.py:8
-msgid ""
-"This should be an absolute path, excluding the domain name. Example: '/"
-"events/search/'."
-msgstr ""
-"Tu by sa mala použiť absolútna cesta bez názvu domény. Napríklad: '/events/"
-"search/'."
+msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
+msgstr "Tu by sa mala použiť absolútna cesta bez názvu domény. Napríklad: '/events/search/'."
 
 #: contrib/redirects/models.py:9
 msgid "redirect to"
 msgstr "presmerovať na"
 
 #: contrib/redirects/models.py:10
-msgid ""
-"This can be either an absolute path (as above) or a full URL starting with "
-"'http://'."
-msgstr ""
-"Toto môže byť buď absolútna cesta (ako vyššie) alebo úplné URL začínajúce na "
-"'http://'."
+msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
+msgstr "Toto môže byť buď absolútna cesta (ako vyššie) alebo úplné URL začínajúce na 'http://'."
 
 #: contrib/redirects/models.py:13
 msgid "redirect"
@@ -3789,128 +3764,129 @@
 msgid "sites"
 msgstr "weby"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:700
+#: db/models/fields/__init__.py:356
+#: db/models/fields/__init__.py:710
 msgid "This value must be an integer."
 msgstr "Táto hodnota musí byť celé číslo."
 
-#: db/models/fields/__init__.py:387
+#: db/models/fields/__init__.py:388
 msgid "This value must be either True or False."
 msgstr "Táto hodnota musí byť True alebo False."
 
-#: db/models/fields/__init__.py:420
+#: db/models/fields/__init__.py:427
 msgid "This field cannot be null."
 msgstr "Toto pole nemôže byť prázdne."
 
-#: db/models/fields/__init__.py:436
+#: db/models/fields/__init__.py:443
 msgid "Enter only digits separated by commas."
 msgstr "Zadajte len číslice oddelené čiarkami."
 
-#: db/models/fields/__init__.py:467
+#: db/models/fields/__init__.py:474
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Zadajte platný dátum vo formáte RRRR-MM-DD."
 
-#: db/models/fields/__init__.py:476
+#: db/models/fields/__init__.py:483
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Neplatný dátum: %s"
 
-#: db/models/fields/__init__.py:540 db/models/fields/__init__.py:558
+#: db/models/fields/__init__.py:547
+#: db/models/fields/__init__.py:565
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr "Zadajte platný dátum a čas vo formáte RRRR-MM-DD HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/__init__.py:594
+#: db/models/fields/__init__.py:601
 msgid "This value must be a decimal number."
 msgstr "Táto hodnota musí byť desiatkové číslo."
 
-#: db/models/fields/__init__.py:676
+#: db/models/fields/__init__.py:686
 msgid "This value must be a float."
 msgstr "Táto hodnota musí byť číslo s plávajúcou desatinnou čiarkou."
 
-#: db/models/fields/__init__.py:736
+#: db/models/fields/__init__.py:746
 msgid "This value must be either None, True or False."
 msgstr "Táto hodnota musí byť buď None, True alebo False."
 
-#: db/models/fields/__init__.py:839 db/models/fields/__init__.py:853
+#: db/models/fields/__init__.py:849
+#: db/models/fields/__init__.py:863
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Zadajte platný čas vo formáte HH:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:779
-msgid ""
-"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr ""
-"Ak chcete vybrať viac ako jednu položku, podržte \"Control\", alebo \"Command"
-"\" na počítači Mac."
-
-#: db/models/fields/related.py:857
+#: db/models/fields/related.py:816
+msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Ak chcete vybrať viac ako jednu položku, podržte \"Control\", alebo \"Command\" na počítači Mac."
+
+#: db/models/fields/related.py:894
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
-"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
-"Prosím, zadajte platný identifikátor %(self)s. Hodnoty %(value)r sú neplatné."
-msgstr[1] ""
-"Prosím, zadajte platný identifikátor %(self)s. Hodnota %(value)r je neplatná."
-msgstr[2] ""
-"Prosím, zadajte platný identifikátor %(self)s. Hodnoty %(value)r sú neplatné."
+msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "Prosím, zadajte platný identifikátor %(self)s. Hodnoty %(value)r sú neplatné."
+msgstr[1] "Prosím, zadajte platný identifikátor %(self)s. Hodnota %(value)r je neplatná."
+msgstr[2] "Prosím, zadajte platný identifikátor %(self)s. Hodnoty %(value)r sú neplatné."
+
+#: forms/fields.py:53
+msgid "This field is required."
+msgstr "Toto pole je povinné."
 
 #: forms/fields.py:54
-msgid "This field is required."
-msgstr "Toto pole je povinné."
-
-#: forms/fields.py:55
 msgid "Enter a valid value."
 msgstr "Zadajte platnú hodnotu."
 
+#: forms/fields.py:137
+#, python-format
+msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
+msgstr "Uistite sa, že táto hodnota má najviac %(max)d znakov (má %(length)d)."
+
 #: forms/fields.py:138
 #, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Uistite sa, že táto hodnota má najviac %(max)d znakov (má %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
 msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Uistite sa, že zadaná hodnota má najmenej %(min)d znakov (má %(length)d)."
+msgstr "Uistite sa, že zadaná hodnota má najmenej %(min)d znakov (má %(length)d)."
+
+#: forms/fields.py:165
+msgid "Enter a whole number."
+msgstr "Zadajte celé číslo."
 
 #: forms/fields.py:166
-msgid "Enter a whole number."
-msgstr "Zadajte celé číslo."
-
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
+#: forms/fields.py:195
+#: forms/fields.py:224
 #, python-format
 msgid "Ensure this value is less than or equal to %s."
 msgstr "Uistite sa, že táto hodnota je menšia alebo rovná %s."
 
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
+#: forms/fields.py:167
+#: forms/fields.py:196
+#: forms/fields.py:225
 #, python-format
 msgid "Ensure this value is greater than or equal to %s."
 msgstr "Uistite sa, že hodnota je väčšia alebo rovná %s."
 
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:194
+#: forms/fields.py:223
 msgid "Enter a number."
 msgstr "Zadajte číslo."
 
-#: forms/fields.py:227
+#: forms/fields.py:226
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Uistite sa, že nie je zadaných celkovo viac ako %s číslic."
 
-#: forms/fields.py:228
+#: forms/fields.py:227
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Uistite sa, že nie je zadaných viac ako %s desatinných miest."
 
-#: forms/fields.py:229
+#: forms/fields.py:228
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
-msgstr ""
-"Uistite sa, že nie je zadaných viac ako %s číslic pred desatinnou čiarkou."
-
-#: forms/fields.py:287 forms/fields.py:849
+msgstr "Uistite sa, že nie je zadaných viac ako %s číslic pred desatinnou čiarkou."
+
+#: forms/fields.py:287
+#: forms/fields.py:862
 msgid "Enter a valid date."
 msgstr "Zadajte platný dátum."
 
-#: forms/fields.py:321 forms/fields.py:850
+#: forms/fields.py:321
+#: forms/fields.py:863
 msgid "Enter a valid time."
 msgstr "Zadajte platný čas."
 
@@ -3930,71 +3906,101 @@
 msgid "The submitted file is empty."
 msgstr "Odoslaný súbor je prázdny."
 
-#: forms/fields.py:477
-msgid ""
-"Upload a valid image. The file you uploaded was either not an image or a "
-"corrupted image."
-msgstr ""
-"Nahrajte platný obrázok. Súbor, ktorý ste odoslali nebol obrázok alebo bol "
-"poškodený."
-
-#: forms/fields.py:538
+#: forms/fields.py:449
+#, python-format
+msgid "Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr "Uistite sa, že názov súboru má najviac %(max)d znakov (má %(length)d)."
+
+#: forms/fields.py:482
+msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
+msgstr "Nahrajte platný obrázok. Súbor, ktorý ste odoslali nebol obrázok alebo bol poškodený."
+
+#: forms/fields.py:543
 msgid "Enter a valid URL."
 msgstr "Zadajte platnú URL adresu."
 
-#: forms/fields.py:539
+#: forms/fields.py:544
 msgid "This URL appears to be a broken link."
 msgstr "Toto URL je chybný odkaz."
 
-#: forms/fields.py:618 forms/fields.py:696
+#: forms/fields.py:624
+#: forms/fields.py:702
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Vyberte platnú voľbu. %(value)s nepatrí medzi dostupné možnosti."
 
-#: forms/fields.py:697 forms/fields.py:758 forms/models.py:729
+#: forms/fields.py:703
+#: forms/fields.py:764
+#: forms/models.py:1003
 msgid "Enter a list of values."
 msgstr "Vložte zoznam hodnôt."
 
-#: forms/fields.py:878
+#: forms/fields.py:891
 msgid "Enter a valid IPv4 address."
 msgstr "Zadajte platnú IPv4 adresu."
 
-#: forms/fields.py:888
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Zadajte platný 'slug' pozostávajúci z písmen, čísel, podčiarkovníkov alebo "
-"pomlčiek."
-
-#: forms/formsets.py:247 forms/formsets.py:249
+#: forms/fields.py:901
+msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr "Zadajte platný 'slug' pozostávajúci z písmen, čísel, podčiarkovníkov alebo pomlčiek."
+
+#: forms/formsets.py:271
+#: forms/formsets.py:273
 msgid "Order"
 msgstr "Poradie"
 
-#: forms/models.py:289 forms/models.py:298
+#: forms/models.py:367
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s musí byť unikátne pre %(date_field)s %(lookup)s."
+
+#: forms/models.py:381
+#: forms/models.py:389
 #, python-format
 msgid "%(model_name)s with this %(field_label)s already exists."
 msgstr "%(model_name)s s týmto %(field_label)s už existuje."
 
-#: forms/models.py:602
+#: forms/models.py:594
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Prosím, opravte duplicitné dáta pre %(field)s."
+
+#: forms/models.py:598
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr "Dáta pre %(field)s musia byť unikátne, prosím, opravte duplikáty."
+
+#: forms/models.py:604
+#, python-format
+msgid "Please correct the duplicate data for %(field_name)s which must be unique for the %(lookup)s in %(date_field)s."
+msgstr "Dáta pre %(field_name)s musia byť unikátne pre %(lookup)s v %(date_field)s, prosím, opravte duplikáty."
+
+#: forms/models.py:612
+msgid "Please correct the duplicate values below."
+msgstr "Prosím, opravte nižšie uvedené duplicitné hodnoty. "
+
+#: forms/models.py:867
 msgid "The inline foreign key did not match the parent instance primary key."
-msgstr ""
-"Vnorený cudzí kľúč sa nezhoduje s nadradenou inštanciou primárnho kľúča."
-
-#: forms/models.py:659
+msgstr "Vnorený cudzí kľúč sa nezhoduje s nadradenou inštanciou primárnho kľúča."
+
+#: forms/models.py:930
 msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr ""
-"Vyberte platnú možnosť. Vybraná položka nepatrí medzi dostupné možnosti."
-
-#: forms/models.py:730
+msgstr "Vyberte platnú možnosť. Vybraná položka nepatrí medzi dostupné možnosti."
+
+#: forms/models.py:1004
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Vyberte platnú možnost. %s nepatrí medzi dostupné možnosti."
 
-#: template/defaultfilters.py:751
+#: forms/models.py:1006
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr "\"%s\" nie je platná hodnota pre primárny kľúč."
+
+#: template/defaultfilters.py:767
 msgid "yes,no,maybe"
 msgstr "áno,nie,možno"
 
-#: template/defaultfilters.py:782
+#: template/defaultfilters.py:798
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
@@ -4002,42 +4008,42 @@
 msgstr[1] "%(size)d bajt"
 msgstr[2] "%(size)d bajty"
 
-#: template/defaultfilters.py:784
+#: template/defaultfilters.py:800
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:786
+#: template/defaultfilters.py:802
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:787
+#: template/defaultfilters.py:803
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
 
-#: utils/dateformat.py:41
+#: utils/dateformat.py:42
 msgid "p.m."
 msgstr "popoludní"
 
-#: utils/dateformat.py:42
+#: utils/dateformat.py:43
 msgid "a.m."
 msgstr "dopoludnia"
 
-#: utils/dateformat.py:47
+#: utils/dateformat.py:48
 msgid "PM"
 msgstr "popoludní"
 
-#: utils/dateformat.py:48
+#: utils/dateformat.py:49
 msgid "AM"
 msgstr "dopoludnia"
 
-#: utils/dateformat.py:97
+#: utils/dateformat.py:98
 msgid "midnight"
 msgstr "polnoc"
 
-#: utils/dateformat.py:99
+#: utils/dateformat.py:100
 msgid "noon"
 msgstr "poludnie"
 
@@ -4105,23 +4111,28 @@
 msgid "February"
 msgstr "február"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "March"
 msgstr "marec"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "April"
 msgstr "apríl"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "May"
 msgstr "máj"
 
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
 msgid "June"
 msgstr "jún"
 
-#: utils/dates.py:19 utils/dates.py:31
+#: utils/dates.py:19
+#: utils/dates.py:31
 msgid "July"
 msgstr "júl"
 
@@ -4267,16 +4278,16 @@
 msgstr[1] "minúta"
 msgstr[2] "minúty"
 
-#: utils/timesince.py:43
+#: utils/timesince.py:45
 msgid "minutes"
 msgstr "minúty"
 
-#: utils/timesince.py:48
+#: utils/timesince.py:50
 #, python-format
 msgid "%(number)d %(type)s"
 msgstr "%(number)d %(type)s"
 
-#: utils/timesince.py:54
+#: utils/timesince.py:56
 #, python-format
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
@@ -4311,3 +4322,4 @@
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "Objekt %(verbose_name)s bol zmazaný."
+
Binary file web/lib/django/conf/locale/sk/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/sk/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/sk/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -5,7 +5,7 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-20 20:16+0100\n"
+"POT-Creation-Date: 2009-09-17 12:00+0200\n"
 "PO-Revision-Date: 2009-03-15 17:23+0100\n"
 "Last-Translator: Marian Andre <django@andre.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/sk/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j. F Y'
+TIME_FORMAT = 'G:i:s'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'j.n.Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/sl/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'd. F Y'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'j. M. Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/sq/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/sq/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,5011 @@
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-01-27 22:39-0800\n"
+"PO-Revision-Date: 2010-01-27 23:01+0200\n"
+"Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr ""
+
+#: forms/models.py:964
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr ""
+
+#: contrib/admin/options.py:1006
+#, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] ""
+msgstr[1] ""
+
+#: db/models/base.py:775
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr ""
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr ""
+
+#: db/models/base.py:790 db/models/base.py:798
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "Ka tashmë një %(model_name)s me këtë %(field_label)s."
+
+#: contrib/admin/templates/admin/app_index.html:10
+#: contrib/admin/templates/admin/index.html:19
+#, python-format
+msgid "%(name)s"
+msgstr ""
+
+#: contrib/admin/options.py:860 contrib/admin/options.py:1072
+#, python-format
+msgid "%(name)s object with primary key %(key)r does not exist."
+msgstr ""
+
+#: utils/timesince.py:50
+#, python-format
+msgid "%(number)d %(type)s"
+msgstr ""
+
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr ""
+
+#: template/defaultfilters.py:806
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:54
+#, python-format
+msgid "%(value).1f billion"
+msgid_plural "%(value).1f billion"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:51
+#, python-format
+msgid "%(value).1f million"
+msgid_plural "%(value).1f million"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:57
+#, python-format
+msgid "%(value).1f trillion"
+msgid_plural "%(value).1f trillion"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/defaultfilters.py:811
+#, python-format
+msgid "%.1f GB"
+msgstr ""
+
+#: template/defaultfilters.py:808
+#, python-format
+msgid "%.1f KB"
+msgstr ""
+
+#: template/defaultfilters.py:810
+#, python-format
+msgid "%.1f MB"
+msgstr ""
+
+#: contrib/admin/sites.py:447
+#, python-format
+msgid "%s administration"
+msgstr ""
+
+#: contrib/admindocs/views.py:361
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr ""
+
+#: utils/timesince.py:56
+#, python-format
+msgid ", %(number)d %(type)s"
+msgstr ""
+
+#: contrib/comments/admin.py:60
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/filterspecs.py:44
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:7
+#, python-format
+msgid ""
+"<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:19
+msgid "A Coruna"
+msgstr ""
+
+#: contrib/auth/forms.py:31
+msgid "A user with that username already exists."
+msgstr ""
+
+#: utils/dateformat.py:49
+msgid "AM"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:5
+msgid "Aargau"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:24
+msgid "Action"
+msgstr ""
+
+#: contrib/admin/helpers.py:19
+msgid "Action:"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/index.html:29
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_list.html:57
+#, python-format
+msgid "Add %(name)s"
+msgstr ""
+
+#: contrib/admin/options.py:834
+#, python-format
+msgid "Add %s"
+msgstr ""
+
+#: contrib/admin/widgets.py:238
+msgid "Add Another"
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:33
+#: contrib/admin/templates/admin/edit_inline/tabular.html:78
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr ""
+
+#: contrib/admin/options.py:561
+#, python-format
+msgid "Added %(name)s \"%(object)s\"."
+msgstr ""
+
+#: contrib/flatpages/admin.py:22
+msgid "Advanced options"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:12
+msgid "Aguascalientes"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:26
+msgid "Aichi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:8
+msgid "Akita"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:7
+msgid "Alacant"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:6
+msgid "Albacete"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
+msgid "All"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "All %(total_count)s %(module_name)s selected"
+msgstr ""
+
+#: contrib/admin/templatetags/admin_list.py:240
+msgid "All dates"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:8
+msgid "Almeria"
+msgstr ""
+
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:5
+msgid "Andalusia"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:113
+msgid "Any date"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:5
+msgid "Aomori"
+msgstr ""
+
+#: contrib/admindocs/views.py:190
+#, python-format
+msgid "App %r not found"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:7
+msgid "Appenzell Ausserrhoden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:6
+msgid "Appenzell Innerrhoden"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:12
+msgid "Approve"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:4
+msgid "Approve a comment"
+msgstr ""
+
+#: contrib/comments/admin.py:44
+msgid "Approve selected comments"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "April"
+msgstr ""
+
+#: conf/global_settings.py:44
+msgid "Arabic"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:6
+msgid "Aragon"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:5
+msgid "Arava"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:23
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, python-format
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: contrib/admin/actions.py:67 contrib/admin/options.py:1094
+msgid "Are you sure?"
+msgstr ""
+
+#: conf/global_settings.py:56
+msgid "Argentinean Spanish"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
+msgid "As above, but opens the admin page in a new window."
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:37
+msgid "Asturias"
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Aug."
+msgstr ""
+
+#: utils/dates.py:19
+msgid "August"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:9
+msgid "Avila"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:10
+msgid "Badajoz"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:5
+msgid "Baden-Wuerttemberg"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:13
+msgid "Baja California"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:14
+msgid "Baja California Sur"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:8
+msgid "Balearic Islands"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:11
+msgid "Banovce nad Bebravou"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:8
+msgid "Banska Bystrica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:8
+msgid "Banska Bystrica region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:9
+msgid "Banska Stiavnica"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:12
+msgid "Barcelona"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:10
+msgid "Bardejov"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:9
+msgid "Basel-Land"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:8
+msgid "Basel-Stadt"
+msgstr ""
+
+#: conf/global_settings.py:58
+msgid "Basque"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:9
+msgid "Basque Country"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:6
+msgid "Bavaria"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:11
+msgid "Bedfordshire"
+msgstr ""
+
+#: conf/global_settings.py:46
+msgid "Bengali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:7
+msgid "Berlin"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:10
+msgid "Berne"
+msgstr ""
+
+#: db/models/fields/__init__.py:892
+msgid "Big (8 byte) integer"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:52
+msgid "Bizkaia"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr ""
+
+#: db/models/fields/__init__.py:512
+msgid "Boolean (Either True or False)"
+msgstr ""
+
+#: db/models/fields/__init__.py:923
+msgid "Boolean (Either True, False or None)"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:75
+msgid "Borders"
+msgstr ""
+
+#: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:8
+msgid "Brandenburg"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:13
+msgid "Bratislava I"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:14
+msgid "Bratislava II"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:15
+msgid "Bratislava III"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:16
+msgid "Bratislava IV"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:17
+msgid "Bratislava V"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:9
+msgid "Bratislava region"
+msgstr ""
+
+#: conf/global_settings.py:83
+msgid "Brazilian Portuguese"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:9
+msgid "Bremen"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:12
+msgid "Brezno"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:12
+msgid "Buckinghamshire"
+msgstr ""
+
+#: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:5
+msgid "Burgenland"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:13
+msgid "Burgos"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:18
+msgid "Bytca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:14
+msgid "Caceres"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:19
+msgid "Cadca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:15
+msgid "Cadiz"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:15
+msgid "Campeche"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:10
+msgid "Canary Islands"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:43
+#: contrib/localflavor/es/es_regions.py:11
+msgid "Cantabria"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:6
+msgid "Carinthia"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:12
+msgid "Carlsbad Region"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:16
+msgid "Castello"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:13
+msgid "Castile and Leon"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:12
+msgid "Castile-La Mancha"
+msgstr ""
+
+#: conf/global_settings.py:48
+msgid "Catalan"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:14
+msgid "Catalonia"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:9
+msgid "Central Bohemian Region"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:76
+msgid "Central Scotland"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:55
+msgid "Ceuta"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:35
+msgid "Change"
+msgstr ""
+
+#: contrib/admin/options.py:925
+#, python-format
+msgid "Change %s"
+msgstr ""
+
+#: contrib/admin/options.py:1124
+#, python-format
+msgid "Change history: %s"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:43
+#: contrib/admin/templates/registration/password_reset_confirm.html:21
+msgid "Change my password"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Change password"
+msgstr ""
+
+#: contrib/auth/admin.py:121
+#, python-format
+msgid "Change password: %s"
+msgstr ""
+
+#: contrib/admin/widgets.py:96
+msgid "Change:"
+msgstr ""
+
+#: contrib/admin/options.py:565
+#, python-format
+msgid "Changed %(list)s for %(name)s \"%(object)s\"."
+msgstr ""
+
+#: contrib/admin/options.py:556
+#, python-format
+msgid "Changed %s."
+msgstr ""
+
+#: contrib/comments/models.py:65
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:14
+msgid "Cheshire"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:17
+msgid "Chiapas"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:15
+msgid "Chiba"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:16
+msgid "Chihuahua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:17
+msgid "Ciudad Real"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:16
+msgid "Clear selection"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:14
+msgid "Click here to select all objects across all pages"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:64
+msgid "Clwyd"
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:18
+msgid "Coahuila"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:19
+msgid "Colima"
+msgstr ""
+
+#: db/models/fields/__init__.py:582
+msgid "Comma-separated integers"
+msgstr ""
+
+#: contrib/comments/forms.py:96
+msgid "Comment"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr ""
+
+#: contrib/comments/admin.py:12
+msgid "Content"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:18
+msgid "Cordoba"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:15
+msgid "Cornwall and Isles of Scilly"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:55
+msgid "County Antrim"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:56
+msgid "County Armagh"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:57
+msgid "County Down"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:58
+msgid "County Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:59
+msgid "County Londonderry"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:60
+msgid "County Tyrone"
+msgstr ""
+
+#: conf/global_settings.py:67
+msgid "Croatian"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:20
+msgid "Cuenca"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:16
+msgid "Cumbria"
+msgstr ""
+
+#: contrib/admin/widgets.py:96
+msgid "Currently:"
+msgstr ""
+
+#: conf/global_settings.py:49
+msgid "Czech"
+msgstr ""
+
+#: utils/translation/trans_real.py:531
+msgid "DATETIME_FORMAT"
+msgstr ""
+
+#: utils/translation/trans_real.py:530
+msgid "DATE_FORMAT"
+msgstr "N j, Y"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr ""
+
+#: conf/global_settings.py:51
+msgid "Danish"
+msgstr ""
+
+#: contrib/admin/options.py:970
+msgid "Database error"
+msgstr ""
+
+#: db/models/fields/__init__.py:684
+msgid "Date (with time)"
+msgstr ""
+
+#: db/models/fields/__init__.py:596
+msgid "Date (without time)"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:22
+msgid "Date/time"
+msgstr ""
+
+#: contrib/admin/widgets.py:72
+msgid "Date:"
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Dec."
+msgstr ""
+
+#: utils/dates.py:20
+msgid "December"
+msgstr ""
+
+#: db/models/fields/__init__.py:752
+msgid "Decimal number"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:10
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:291
+msgid "Delete"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+msgid "Delete multiple objects"
+msgstr ""
+
+#: contrib/admin/actions.py:85
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/tabular.html:15
+msgid "Delete?"
+msgstr ""
+
+#: contrib/admin/options.py:570
+#, python-format
+msgid "Deleted %(name)s \"%(object)s\"."
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:16
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:17
+msgid "Derbyshire"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: contrib/auth/models.py:187
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+
+#: contrib/auth/models.py:185
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+
+#: contrib/auth/models.py:186
+msgid ""
+"Designates whether this user should be treated as active. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:20
+msgid "Detva"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:18
+msgid "Devon"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:20
+msgid "Distrito Federal"
+msgstr ""
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr ""
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
+msgid "Documentation bookmarklets"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
+msgid "Documentation for this page"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:21
+msgid "Dolny Kubin"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:19
+msgid "Dorset"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:4
+msgid "Drenthe"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:77
+msgid "Dumfries and Galloway"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:22
+msgid "Dunajska Streda"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:21
+msgid "Durango"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:20
+msgid "Durham"
+msgstr ""
+
+#: conf/global_settings.py:79
+msgid "Dutch"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:65
+msgid "Dyfed"
+msgstr ""
+
+#: contrib/auth/forms.py:101
+msgid "E-mail"
+msgstr ""
+
+#: db/models/fields/__init__.py:807
+msgid "E-mail address"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:21
+msgid "East Sussex"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:4
+msgid "Eastern Cape"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
+msgid "Edit this object (current window)"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
+msgid "Edit this object (new window)"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:41
+msgid "Ehime"
+msgstr ""
+
+#: contrib/comments/forms.py:94
+msgid "Email address"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:90
+msgid "England"
+msgstr ""
+
+#: conf/global_settings.py:54
+msgid "English"
+msgstr ""
+
+#: forms/fields.py:251
+#, python-format
+msgid "Ensure that there are no more than %s decimal places."
+msgstr "Sigurohuni që nuk ka më shumë se %s vende dhjetore."
+
+#: forms/fields.py:252
+#, python-format
+msgid "Ensure that there are no more than %s digits before the decimal point."
+msgstr "Sigurohuni që nuk ka më tepër se %s shifra para presjes dhjetore."
+
+#: forms/fields.py:250
+#, python-format
+msgid "Ensure that there are no more than %s digits in total."
+msgstr "Sigurohuni që nuk ka më  tepër se %s shifra gjithsej."
+
+#: forms/fields.py:424
+#, python-format
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+
+#: core/validators.py:129
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+
+#: core/validators.py:135
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+
+#: core/validators.py:100
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+
+#: core/validators.py:123 forms/fields.py:197 forms/fields.py:249
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr ""
+
+#: core/validators.py:118 forms/fields.py:196 forms/fields.py:248
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr ""
+
+#: contrib/localflavor/au/forms.py:17
+msgid "Enter a 4 digit post code."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:48
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr ""
+
+#: forms/fields.py:653 forms/fields.py:715 forms/models.py:961
+msgid "Enter a list of values."
+msgstr "Jepni një listë vlerash."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr ""
+
+#: forms/fields.py:225 forms/fields.py:247
+msgid "Enter a number."
+msgstr "Jepni një numër."
+
+#: contrib/localflavor/ar/forms.py:28
+msgid "Enter a postal code in the format NNNN or ANNNNAAA."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:148
+msgid "Enter a postal code in the format XX-XXX."
+msgstr ""
+
+#: contrib/localflavor/ca/forms.py:25
+msgid "Enter a postal code in the format XXX XXX."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
+msgid "Enter a postal code in the format XXXXX or XXX XX."
+msgstr ""
+
+#: contrib/localflavor/jp/forms.py:16
+msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:71
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr ""
+
+#: core/validators.py:88 forms/fields.py:854
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Jepni një 'slug' të vlefshëm, të përbërë nga shkronja, numra, nëvija ose "
+"vija në mes."
+
+#: contrib/localflavor/at/forms.py:48
+msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:19
+msgid "Enter a valid CIF."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:56
+msgid "Enter a valid CNP."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:80
+msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/ca/forms.py:96
+msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:30
+msgid "Enter a valid Chilean RUT."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr ""
+
+#: contrib/localflavor/fi/forms.py:29
+msgid "Enter a valid Finnish social security number."
+msgstr ""
+
+#: contrib/localflavor/de/forms.py:42
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:141
+msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:107
+msgid "Enter a valid IC number."
+msgstr ""
+
+#: core/validators.py:91 forms/fields.py:847
+msgid "Enter a valid IPv4 address."
+msgstr "Jepni një vendndodhje të vlefshme IPv4."
+
+#: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr ""
+
+#: contrib/localflavor/no/forms.py:34
+msgid "Enter a valid Norwegian social security number."
+msgstr ""
+
+#: contrib/localflavor/nl/forms.py:79
+msgid "Enter a valid SoFi number"
+msgstr ""
+
+#: contrib/localflavor/it/forms.py:44
+msgid "Enter a valid Social Security number."
+msgstr ""
+
+#: contrib/localflavor/za/forms.py:21
+msgid "Enter a valid South African ID number"
+msgstr ""
+
+#: contrib/localflavor/za/forms.py:55
+msgid "Enter a valid South African postal code"
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr ""
+
+#: contrib/localflavor/ch/forms.py:65
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:55
+msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+msgstr ""
+
+#: core/validators.py:69 forms/fields.py:510
+msgid "Enter a valid URL."
+msgstr "Jepni një URL të vlefshme."
+
+#: contrib/localflavor/it/forms.py:69
+msgid "Enter a valid VAT number."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:50
+msgid "Enter a valid birth number."
+msgstr ""
+
+#: db/models/fields/__init__.py:600
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Jepni një datë të vlefshme në formatin YYYY-MM-DD."
+
+#: forms/fields.py:309 forms/fields.py:819
+msgid "Enter a valid date."
+msgstr "Jepni një datë të vlefshme."
+
+#: db/models/fields/__init__.py:682
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
+msgstr ""
+"Jepni një datë/kohë të vlefshme, në formatin YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
+
+#: forms/fields.py:363
+msgid "Enter a valid date/time."
+msgstr "Jepni një datë/kohë të vlefshme."
+
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:85 forms/fields.py:414
+msgid "Enter a valid e-mail address."
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:40
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr ""
+
+#: contrib/localflavor/nl/forms.py:22
+msgid "Enter a valid postal code"
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:194
+msgid "Enter a valid postal code in the format XXXXXX"
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:20
+msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
+msgstr ""
+
+#: contrib/localflavor/uk/forms.py:21
+msgid "Enter a valid postcode."
+msgstr ""
+
+#: db/models/fields/__init__.py:1027
+msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
+msgstr "Jepni një kohë të vlefshme, në formatin HH:MM[:ss[.uuuuuu]]."
+
+#: forms/fields.py:337 forms/fields.py:820
+msgid "Enter a valid time."
+msgstr "Jepni një kohë të vlefshme."
+
+#: core/validators.py:19 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Jepni vlerë të vlefshme."
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr ""
+
+#: contrib/localflavor/it/forms.py:15
+msgid "Enter a valid zip code."
+msgstr ""
+
+#: forms/fields.py:195
+msgid "Enter a whole number."
+msgstr "Jepni një numër të tërë."
+
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
+msgid "Enter a zip code in the format XXXX."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:22
+msgid "Enter a zip code in the format XXXXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
+msgid "Enter a zip code in the format XXXXX."
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
+msgid "Enter a zip code in the format XXXXXXX."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:12
+msgid "Enter new password"
+msgstr ""
+
+#: core/validators.py:94 db/models/fields/__init__.py:587
+msgid "Enter only digits separated by commas."
+msgstr "Jepni vetëm shifra të ndara nga presje."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:22
+msgid "Essex"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:26
+msgid "Estado de México"
+msgstr ""
+
+#: conf/global_settings.py:57
+msgid "Estonian"
+msgstr ""
+
+#: contrib/flatpages/admin.py:9
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+
+#: contrib/flatpages/models.py:12
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:15
+msgid "Extremadura"
+msgstr ""
+
+#: utils/dates.py:31
+msgid "Feb."
+msgstr ""
+
+#: utils/dates.py:18
+msgid "February"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr ""
+
+#: db/models/fields/__init__.py:72
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr ""
+
+#: contrib/admindocs/views.py:271
+#, python-format
+msgid "Fields on %s objects"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:78
+msgid "Fife"
+msgstr ""
+
+#: db/models/fields/__init__.py:814 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_list.html:76
+msgid "Filter"
+msgstr ""
+
+#: conf/global_settings.py:60
+msgid "Finnish"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:12
+msgid "Flag"
+msgstr ""
+
+#: contrib/comments/admin.py:40
+msgid "Flag selected comments"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:4
+msgid "Flag this comment"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:5
+msgid "Flevoland"
+msgstr ""
+
+#: db/models/fields/__init__.py:839
+msgid "Floating point number"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:20
+msgid "Foral Community of Navarre"
+msgstr ""
+
+#: db/models/fields/related.py:757
+msgid "Foreign Key (type determined by related field)"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:5
+msgid "Free State"
+msgstr ""
+
+#: conf/global_settings.py:61
+msgid "French"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Fri"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:11
+msgid "Fribourg"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:6
+msgid "Friesland"
+msgstr ""
+
+#: conf/global_settings.py:62
+msgid "Frisian"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:23
+msgid "Fukui"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:43
+msgid "Fukuoka"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:10
+msgid "Fukushima"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:23
+msgid "Galanta"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:16
+msgid "Galicia"
+msgstr ""
+
+#: conf/global_settings.py:64
+msgid "Galician"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:6
+msgid "Gauteng"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:7
+msgid "Gelderland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:24
+msgid "Gelnica"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:12
+msgid "Geneva"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:293
+msgid "Geometry collection"
+msgstr ""
+
+#: conf/global_settings.py:72
+msgid "Georgian"
+msgstr ""
+
+#: conf/global_settings.py:52
+msgid "German"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:24
+msgid "Gifu"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:21
+msgid "Girona"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:13
+msgid "Glarus"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:23
+msgid "Gloucestershire"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:79
+msgid "Grampian"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:22
+msgid "Granada"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:14
+msgid "Graubuenden"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:24
+msgid "Greater London"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:25
+msgid "Greater Manchester"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:22
+msgid "Greater Poland"
+msgstr ""
+
+#: conf/global_settings.py:53
+msgid "Greek"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:8
+msgid "Groningen"
+msgstr ""
+
+#: contrib/auth/admin.py:29
+msgid "Groups"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:23
+msgid "Guadalajara"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:23
+msgid "Guanajuato"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:22
+msgid "Guerrero"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:24
+msgid "Guipuzkoa"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:13
+msgid "Gunma"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:66
+msgid "Gwent"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:67
+msgid "Gwynedd"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:10
+msgid "Hamburg"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:26
+msgid "Hampshire"
+msgstr ""
+
+#: conf/global_settings.py:65
+msgid "Hebrew"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:27
+msgid "Hertfordshire"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:11
+msgid "Hessen"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:24
+msgid "Hidalgo"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:80
+msgid "Highland"
+msgstr ""
+
+#: conf/global_settings.py:66
+msgid "Hindi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:37
+msgid "Hiroshima"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:28
+#: contrib/admin/templates/admin/object_history.html:10
+msgid "History"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:25
+msgid "Hlohovec"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:4
+msgid "Hokkaido"
+msgstr ""
+
+#: db/models/fields/related.py:959
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"Mbani të shtypur \"Control\", ose \"Command\" në Mac, për të përzgjedhur më "
+"shumë se një."
+
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/app_index.html:8
+#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:36
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/object_history.html:6
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Home"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:15
+msgid "Hradec Region"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:25
+msgid "Huelva"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:26
+msgid "Huesca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:26
+msgid "Humenne"
+msgstr ""
+
+#: conf/global_settings.py:68
+msgid "Hungarian"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:31
+msgid "Hyogo"
+msgstr ""
+
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:905
+msgid "IP address"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:11
+msgid "Ibaraki"
+msgstr ""
+
+#: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr ""
+
+#: contrib/flatpages/models.py:13
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+
+#: contrib/comments/forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:27
+msgid "Ilava"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:11
+msgid "Illes Balears"
+msgstr ""
+
+#: contrib/auth/admin.py:28
+msgid "Important dates"
+msgstr ""
+
+#: contrib/auth/models.py:191
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+
+#: db/models/fields/__init__.py:471 db/models/fields/__init__.py:867
+#: db/models/fields/__init__.py:963 db/models/fields/__init__.py:974
+#: db/models/fields/__init__.py:1001
+msgid "Integer"
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:135
+msgid "Invalid CNPJ number."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:95
+msgid "Invalid CPF number."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:81
+msgid "Invalid CUIT."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:71
+msgid "Invalid checksum for CIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:69
+msgid "Invalid checksum for NIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:144
+msgid "Invalid checksum for bank account number."
+msgstr ""
+
+#: db/models/fields/__init__.py:601
+#, python-format
+msgid "Invalid date: %s"
+msgstr "Datë e pavlefshme: %s"
+
+#: contrib/gis/forms/fields.py:19
+msgid "Invalid geometry type."
+msgstr ""
+
+#: contrib/gis/forms/fields.py:18
+msgid "Invalid geometry value."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+
+#: conf/global_settings.py:63
+msgid "Irish"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:22
+msgid "Ishikawa"
+msgstr ""
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr ""
+
+#: contrib/admin/options.py:736
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:6
+msgid "Iwate"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:27
+msgid "Jaen"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:25
+msgid "Jalisco"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: utils/dates.py:31
+msgid "Jan."
+msgstr ""
+
+#: utils/dates.py:18
+msgid "January"
+msgstr ""
+
+#: conf/global_settings.py:71
+msgid "Japanese"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: utils/dates.py:19 utils/dates.py:31
+msgid "July"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "June"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:15
+msgid "Jura"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:40
+msgid "Kagawa"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:49
+msgid "Kagoshima"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:17
+msgid "Kanagawa"
+msgstr ""
+
+#: conf/global_settings.py:74
+msgid "Kannada"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:28
+msgid "Kent"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:28
+msgid "Kezmarok"
+msgstr ""
+
+#: conf/global_settings.py:73
+msgid "Khmer"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:42
+msgid "Kochi"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:29
+msgid "Komarno"
+msgstr ""
+
+#: conf/global_settings.py:75
+msgid "Korean"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:34
+msgid "Kosice - okolie"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:30
+msgid "Kosice I"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:31
+msgid "Kosice II"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:32
+msgid "Kosice III"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:33
+msgid "Kosice IV"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:10
+msgid "Kosice region"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:35
+msgid "Krupina"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:46
+msgid "Kumamoto"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:9
+msgid "Kuyavia-Pomerania"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:7
+msgid "KwaZulu-Natal"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:29
+msgid "Kyoto"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:36
+msgid "Kysucke Nove Mesto"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:30
+#: contrib/localflavor/es/es_regions.py:17
+msgid "La Rioja"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:29
+msgid "Lancashire"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:39
+msgid "Las Palmas"
+msgstr ""
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr ""
+
+#: conf/global_settings.py:77
+msgid "Latvian"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:30
+msgid "Leicestershire"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:28
+msgid "Leon"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:13
+msgid "Lesser Poland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:37
+msgid "Levice"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:38
+msgid "Levoca"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:14
+msgid "Liberec Region"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:9
+msgid "Limburg"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:8
+msgid "Limpopo"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:31
+msgid "Lincolnshire"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:273
+msgid "Line string"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:39
+msgid "Liptovsky Mikulas"
+msgstr ""
+
+#: conf/global_settings.py:76
+msgid "Lithuanian"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:29
+msgid "Lleida"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:12
+msgid "Lodz"
+msgstr ""
+
+#: contrib/admin/sites.py:402 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/templates/registration/password_reset_complete.html:14
+#: contrib/admin/views/decorators.py:20
+msgid "Log in"
+msgstr ""
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Log out"
+msgstr ""
+
+#: contrib/auth/views.py:60
+msgid "Logged out"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/admin/sites.py:313 contrib/admin/views/decorators.py:47
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+
+#: contrib/admin/widgets.py:126
+msgid "Lookup"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:81
+msgid "Lothian"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:7
+msgid "Lower Austria"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:13
+msgid "Lower Saxony"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:8
+msgid "Lower Silesia"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:10
+msgid "Lublin"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:11
+msgid "Lubusz"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:40
+msgid "Lucenec"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:16
+msgid "Lucerne"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:31
+msgid "Lugo"
+msgstr ""
+
+#: utils/translation/trans_real.py:554
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
+
+#: conf/global_settings.py:78
+msgid "Macedonian"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:32
+#: contrib/localflavor/es/es_regions.py:18
+msgid "Madrid"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:41
+msgid "Malacky"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:33
+msgid "Malaga"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: db/models/fields/related.py:939
+msgid "Many-to-many relationship"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "March"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:42
+msgid "Martin"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:14
+msgid "Masovia"
+msgstr ""
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "May"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:12
+msgid "Mecklenburg-Western Pomerania"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:43
+msgid "Medzilaborce"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:56
+msgid "Melilla"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:32
+msgid "Merseyside"
+msgstr ""
+
+#: contrib/comments/admin.py:15
+msgid "Metadata"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:44
+msgid "Michalovce"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:27
+msgid "Michoacán"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:68
+msgid "Mid Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:27
+msgid "Mie"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:7
+msgid "Miyagi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:48
+msgid "Miyazaki"
+msgstr ""
+
+#: db/models/fields/related.py:755
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr ""
+
+#: contrib/admindocs/views.py:197
+#, python-format
+msgid "Model %(model_name)r not found in app %(app_label)r"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Mon"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:21
+msgid "Moravian-Silesian Region"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:28
+msgid "Morelos"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:9
+msgid "Mpumalanga"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:289
+msgid "Multi polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:285
+msgid "Multi-line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:281
+msgid "Multi-point"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:34
+msgid "Murcia"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:54
+msgid "My Actions"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:45
+msgid "Myjava"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:19
+msgid "Nagano"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:45
+msgid "Nagasaki"
+msgstr ""
+
+#: contrib/comments/forms.py:93
+msgid "Name"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:46
+msgid "Namestovo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:32
+msgid "Nara"
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:38
+msgid "National Identification Number consists of 11 digits."
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:35
+msgid "Navarre"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:29
+msgid "Nayarit"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:17
+msgid "Neuchatel"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr ""
+
+#: contrib/auth/forms.py:145
+msgid "New password confirmation"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:18
+msgid "Nidwalden"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:20
+msgid "Niigata"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:47
+msgid "Nitra"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:11
+msgid "Nitra region"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
+msgid "No"
+msgstr ""
+
+#: contrib/admin/options.py:754
+msgid "No action selected."
+msgstr ""
+
+#: contrib/admin/options.py:574
+msgid "No fields changed."
+msgstr ""
+
+#: forms/fields.py:422
+msgid "No file was submitted."
+msgstr "Nuk u parashtrua kartelë."
+
+#: forms/fields.py:421
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+"Nuk u parashtrua ndonjë kartelë. Kontrolloni llojin e kodimit te forma."
+
+#: contrib/gis/forms/fields.py:17
+msgid "No geometry value provided."
+msgstr ""
+
+#: contrib/admin/options.py:137 contrib/admin/options.py:152
+msgid "None"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:58
+msgid "None available"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:10
+msgid "Noord-Brabant"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:11
+msgid "Noord-Holland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:33
+msgid "Norfolk"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:14
+msgid "North Rhine-Westphalia"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:11
+msgid "North West"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:34
+msgid "North Yorkshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:35
+msgid "Northamptonshire"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:10
+msgid "Northern Cape"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:91
+msgid "Northern Ireland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:36
+msgid "Northumberland"
+msgstr ""
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:37
+msgid "Nottinghamshire"
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Nov."
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:48
+msgid "Nove Mesto nad Vahom"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:49
+msgid "Nove Zamky"
+msgstr ""
+
+#: utils/dates.py:19
+msgid "November"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:30
+msgid "Nuevo León"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:31
+msgid "Oaxaca"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:19
+msgid "Obwalden"
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Oct."
+msgstr ""
+
+#: utils/dates.py:19
+msgid "October"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:47
+msgid "Oita"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:36
+msgid "Okayama"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:50
+msgid "Okinawa"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:19
+msgid "Olomouc Region"
+msgstr ""
+
+#: contrib/admin/util.py:175
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr ""
+
+#: contrib/admin/util.py:170
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr ""
+
+#: db/models/fields/related.py:879
+msgid "One-to-one relationship"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:15
+msgid "Opole"
+msgstr ""
+
+#: forms/formsets.py:287 forms/formsets.py:289
+msgid "Order"
+msgstr "Rend"
+
+#: contrib/localflavor/uk/uk_regions.py:82
+msgid "Orkney Islands"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:30
+msgid "Osaka"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:36
+msgid "Ourense"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:12
+msgid "Overijssel"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:38
+msgid "Oxfordshire"
+msgstr ""
+
+#: utils/dateformat.py:48
+msgid "PM"
+msgstr ""
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:38
+msgid "Palencia"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:16
+msgid "Pardubice Region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:50
+msgid "Partizanske"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr ""
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "Password change"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr ""
+
+#: contrib/auth/admin.py:111
+msgid "Password changed successfully."
+msgstr ""
+
+#: contrib/auth/forms.py:18
+msgid "Password confirmation"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_form.html:10
+msgid "Password reset"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_complete.html:6
+#: contrib/admin/templates/registration/password_reset_complete.html:10
+msgid "Password reset complete"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+msgid "Password reset confirmation"
+msgstr ""
+
+#: contrib/auth/forms.py:136
+#, python-format
+msgid "Password reset on %s"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:26
+msgid "Password reset unsuccessful"
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Password:"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:117
+msgid "Past 7 days"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/auth/admin.py:27
+msgid "Permissions"
+msgstr ""
+
+#: conf/global_settings.py:59
+msgid "Persian"
+msgstr ""
+
+#: contrib/auth/admin.py:26
+msgid "Personal info"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:51
+msgid "Pezinok"
+msgstr ""
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr ""
+
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:31
+msgid "Phone numbers must be in XX-XXXX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:171
+msgid "Phone numbers must be in XXXX-XXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:52
+msgid "Piestany"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:11
+msgid "Pilsen Region"
+msgstr ""
+
+#: forms/models.py:542
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+
+#: forms/models.py:538
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr ""
+
+#: forms/models.py:548
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+
+#: forms/models.py:556
+msgid "Please correct the duplicate values below."
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:11
+msgid "Please correct the error below"
+msgid_plural "Please correct the errors below"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:68
+msgid "Please enter a valid NIF or NIE."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:67
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr ""
+
+#: db/models/fields/related.py:1020
+#, python-format
+msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] ""
+"Ju lutem, jepni ID-ra %(self)s të vlefshme. Vlera %(value)r është e "
+"pavlefshme."
+msgstr[1] ""
+"Ju lutem, jepni ID-ra %(self)s të vlefshme. Vlerat %(value)r janë të "
+"pavlefshme"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:14
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+msgid "Please go to the following page and choose a new password:"
+msgstr ""
+
+#: contrib/admin/sites.py:306 contrib/admin/views/decorators.py:40
+msgid "Please log in again, because your session has expired."
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:17
+msgid "Podlasie"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:269
+msgid "Point"
+msgstr ""
+
+#: conf/global_settings.py:81
+msgid "Polish"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:53
+msgid "Poltar"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:277
+msgid "Polygon"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:18
+msgid "Pomerania"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:40
+msgid "Pontevedra"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:54
+msgid "Poprad"
+msgstr ""
+
+#: conf/global_settings.py:82
+msgid "Portuguese"
+msgstr ""
+
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
+msgid "Post"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "Post your comment"
+msgstr ""
+
+#: contrib/comments/models.py:153
+#, python-format
+msgid ""
+"Posted by %(user)s at %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:55
+msgid "Povazska Bystrica"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:69
+msgid "Powys"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:8
+msgid "Prague"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:56
+msgid "Presov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:12
+msgid "Presov region"
+msgstr ""
+
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
+msgid "Preview"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:4
+#: contrib/comments/templates/comments/preview.html:13
+msgid "Preview your comment"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:57
+msgid "Prievidza"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:7
+msgid "Principality of Asturias"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:58
+msgid "Puchov"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:32
+msgid "Puebla"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:33
+msgid "Querétaro"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:34
+msgid "Quintana Roo"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:7
+msgid "Really flag this comment?"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:7
+msgid "Really make this comment public?"
+msgstr ""
+
+#: contrib/comments/templates/comments/delete.html:7
+msgid "Really remove this comment?"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "Recent Actions"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:19
+msgid "Region of Murcia"
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:36
+#: contrib/admin/templates/admin/edit_inline/tabular.html:81
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr ""
+
+#: contrib/comments/templates/comments/delete.html:4
+msgid "Remove a comment"
+msgstr ""
+
+#: contrib/comments/admin.py:48
+msgid "Remove selected comments"
+msgstr ""
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+#: contrib/auth/models.py:180
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:59
+msgid "Revuca"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:15
+msgid "Rhineland-Palatinate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:60
+msgid "Rimavska Sobota"
+msgstr ""
+
+#: conf/global_settings.py:84
+msgid "Romanian"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:61
+msgid "Roznava"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr ""
+
+#: conf/global_settings.py:85
+msgid "Russian"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:62
+msgid "Ruzomberok"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:16
+msgid "Saarland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:63
+msgid "Sabinov"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:44
+msgid "Saga"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:14
+msgid "Saitama"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:73
+msgid "Sala"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:41
+msgid "Salamanca"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:9
+msgid "Salzburg"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:36
+msgid "San Luis Potosí"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:42
+msgid "Santa Cruz de Tenerife"
+msgstr ""
+
+#: utils/dates.py:11
+msgid "Sat"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr ""
+
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr ""
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and add another"
+msgstr ""
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save and continue editing"
+msgstr ""
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save as new"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:17
+msgid "Saxony"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:18
+msgid "Saxony-Anhalt"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:20
+msgid "Schaffhausen"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:19
+msgid "Schleswig-Holstein"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:21
+msgid "Schwyz"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:92
+msgid "Scotland"
+msgstr ""
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Search"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:44
+msgid "Segovia"
+msgstr ""
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s"
+msgstr ""
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s to change"
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:59
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
+msgstr ""
+
+#: forms/fields.py:577 forms/fields.py:652
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr ""
+"Përzgjidhni një zgjedhje të vlefshme. %(value)s nuk është nga zgjedhjet e "
+"mundshme."
+
+#: forms/models.py:962
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr ""
+"Përzgjidhni një zgjedhje të vlefshme. %s nuk është një nga zgjedhjet e "
+"mundshme."
+
+#: forms/models.py:886
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+"Përzgjidhni një zgjedhje të vlefshme. Ajo zgjedhje nuk është një nga "
+"zgjedhjet e mundshme."
+
+#: contrib/admin/templates/admin/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:64
+msgid "Senec"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:65
+msgid "Senica"
+msgstr ""
+
+#: utils/dates.py:32
+msgid "Sept."
+msgstr ""
+
+#: utils/dates.py:19
+msgid "September"
+msgstr ""
+
+#: conf/global_settings.py:88
+msgid "Serbian"
+msgstr ""
+
+#: conf/global_settings.py:89
+msgid "Serbian Latin"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:45
+msgid "Seville"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:83
+msgid "Shetland Islands"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:28
+msgid "Shiga"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:35
+msgid "Shimane"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:25
+msgid "Shizuoka"
+msgstr ""
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
+msgid "Show object ID"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:39
+msgid "Shropshire"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:19
+msgid "Silesia"
+msgstr ""
+
+#: conf/global_settings.py:96
+msgid "Simplified Chinese"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:35
+msgid "Sinaloa"
+msgstr ""
+
+#: contrib/admin/sites.py:388
+msgid "Site administration"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:66
+msgid "Skalica"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: conf/global_settings.py:86
+msgid "Slovak"
+msgstr ""
+
+#: conf/global_settings.py:87
+msgid "Slovenian"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:67
+msgid "Snina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:68
+msgid "Sobrance"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:22
+msgid "Solothurn"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:40
+msgid "Somerset"
+msgstr ""
+
+#: contrib/admin/templates/admin/invalid_setup.html:7
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:37
+msgid "Sonora"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:46
+msgid "Soria"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:10
+msgid "South Bohemian Region"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:70
+msgid "South Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:18
+msgid "South Moravian Region"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:41
+msgid "South Yorkshire"
+msgstr ""
+
+#: conf/global_settings.py:55
+msgid "Spanish"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:69
+msgid "Spisska Nova Ves"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:23
+msgid "St. Gallen"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:42
+msgid "Staffordshire"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:70
+msgid "Stara Lubovna"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:84
+msgid "Strathclyde"
+msgstr ""
+
+#: db/models/fields/__init__.py:554 db/models/fields/__init__.py:984
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:71
+msgid "Stropkov"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:10
+msgid "Styria"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:16
+msgid "Subcarpatia"
+msgstr ""
+
+#: contrib/admin/actions.py:60
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:43
+msgid "Suffolk"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: utils/dates.py:11
+msgid "Sun"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:44
+msgid "Surrey"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:72
+msgid "Svidnik"
+msgstr ""
+
+#: conf/global_settings.py:90
+msgid "Swedish"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:20
+msgid "Swietokrzyskie"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr ""
+
+#: utils/translation/trans_real.py:532
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: contrib/localflavor/mx/mx_states.py:38
+msgid "Tabasco"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:39
+msgid "Tamaulipas"
+msgstr ""
+
+#: conf/global_settings.py:91
+msgid "Tamil"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:47
+msgid "Tarragona"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:85
+msgid "Tayside"
+msgstr ""
+
+#: conf/global_settings.py:92
+msgid "Telugu"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:48
+msgid "Teruel"
+msgstr ""
+
+#: db/models/fields/__init__.py:1007
+msgid "Text"
+msgstr ""
+
+#: conf/global_settings.py:93
+msgid "Thai"
+msgstr ""
+
+#: contrib/comments/templates/comments/posted.html:7
+msgid "Thank you for your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/approved.html:4
+msgid "Thanks for approving"
+msgstr ""
+
+#: contrib/comments/templates/comments/posted.html:4
+msgid "Thanks for commenting"
+msgstr ""
+
+#: contrib/comments/templates/comments/flagged.html:4
+msgid "Thanks for flagging"
+msgstr ""
+
+#: contrib/comments/templates/comments/deleted.html:4
+msgid "Thanks for removing"
+msgstr ""
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr ""
+
+#: contrib/comments/templates/comments/approved.html:7
+#: contrib/comments/templates/comments/deleted.html:7
+#: contrib/comments/templates/comments/flagged.html:7
+msgid ""
+"Thanks for taking the time to improve the quality of discussion on our site"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Thanks for using our site!"
+msgstr ""
+
+#: contrib/auth/forms.py:110
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+
+#: contrib/admin/options.py:640
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr ""
+
+#: contrib/admin/options.py:683
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+
+#: contrib/admin/options.py:675
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr ""
+
+#: contrib/admin/options.py:1087
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+#, python-format
+msgid "The %(site_name)s team"
+msgstr ""
+
+#: views/generic/create_update.py:115
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s u krijua me sukses."
+
+#: views/generic/create_update.py:201
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s u fshi."
+
+#: views/generic/create_update.py:158
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s u përditësua me sukses."
+
+#: contrib/localflavor/cl/forms.py:32
+msgid "The Chilean RUT is not valid."
+msgstr ""
+
+#: contrib/localflavor/is_/forms.py:19
+msgid "The Icelandic identification number is not valid."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: forms/models.py:820
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:28
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used.  Please request a new password reset."
+msgstr ""
+
+#: forms/fields.py:423
+msgid "The submitted file is empty."
+msgstr "Kartela e parashtruar është bosh."
+
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
+msgid "The two password fields didn't match."
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+
+#: core/validators.py:71 forms/fields.py:511
+msgid "This URL appears to be a broken link."
+msgstr "Kjo URL duket se është lidhje e dëmtuar."
+
+#: contrib/auth/forms.py:83
+msgid "This account is inactive."
+msgstr ""
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+
+#: contrib/comments/models.py:128
+msgid ""
+"This comment was posted by an authenticated user and thus the email is read-"
+"only."
+msgstr ""
+
+#: contrib/comments/models.py:119
+msgid ""
+"This comment was posted by an authenticated user and thus the name is read-"
+"only."
+msgstr ""
+
+#: db/models/fields/__init__.py:67
+msgid "This field cannot be blank."
+msgstr ""
+
+#: db/models/fields/__init__.py:66
+msgid "This field cannot be null."
+msgstr "Kjo fushë nuk mund të jetë bosh."
+
+#: forms/fields.py:65
+msgid "This field is required."
+msgstr "Kjo fushë është e domosdoshme."
+
+#: contrib/localflavor/pe/forms.py:53
+msgid "This field requires 11 digits."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:51
+msgid "This field requires 7 or 8 digits."
+msgstr ""
+
+#: contrib/localflavor/pe/forms.py:25
+msgid "This field requires 8 digits."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:137
+msgid "This field requires at least 14 digits"
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:96
+msgid "This field requires at most 11 digits or 14 characters."
+msgstr ""
+
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
+msgid "This field requires only numbers."
+msgstr ""
+
+#: contrib/admin/filterspecs.py:119
+msgid "This month"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:38
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+
+#: db/models/fields/__init__.py:750
+msgid "This value must be a decimal number."
+msgstr "Kjo vlerë duhet të jetë një numër dhjetor."
+
+#: db/models/fields/__init__.py:837 db/models/fields/__init__.py:865
+msgid "This value must be a float."
+msgstr ""
+
+#: db/models/fields/__init__.py:475
+msgid "This value must be an integer."
+msgstr "Kjo vlerë duhet të jetë numër i plotë."
+
+#: db/models/fields/__init__.py:921
+msgid "This value must be either None, True or False."
+msgstr "Kjo vlerë duhet të jetë None, True ose False."
+
+#: db/models/fields/__init__.py:510
+msgid "This value must be either True or False."
+msgstr "Kjo vlerë duhet të jetë True ose False."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value must contain only letters, numbers and underscores."
+msgstr ""
+
+#: contrib/flatpages/admin.py:11
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+
+#: contrib/admin/filterspecs.py:121
+msgid "This year"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Thu"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:24
+msgid "Thurgau"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:20
+msgid "Thuringia"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:25
+msgid "Ticino"
+msgstr ""
+
+#: db/models/fields/__init__.py:1023
+msgid "Time"
+msgstr ""
+
+#: contrib/admin/widgets.py:72
+msgid "Time:"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:40
+msgid "Tlaxcala"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:12
+msgid "Tochigi"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:114
+msgid "Today"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:39
+msgid "Tokushima"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:16
+msgid "Tokyo"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:49
+msgid "Toledo"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:74
+msgid "Topolcany"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:34
+msgid "Tottori"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:21
+msgid "Toyama"
+msgstr ""
+
+#: conf/global_settings.py:97
+msgid "Traditional Chinese"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:75
+msgid "Trebisov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:76
+msgid "Trencin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:13
+msgid "Trencin region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:77
+msgid "Trnava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:14
+msgid "Trnava region"
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Tue"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:78
+msgid "Turcianske Teplice"
+msgstr ""
+
+#: conf/global_settings.py:94
+msgid "Turkish"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:79
+msgid "Tvrdosin"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:45
+msgid "Tyne and Wear"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:11
+msgid "Tyrol"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr ""
+
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1103
+msgid "URL"
+msgstr ""
+
+#: conf/global_settings.py:95
+msgid "Ukrainian"
+msgstr ""
+
+#: contrib/comments/models.py:62
+msgid ""
+"Uncheck this box to make the comment effectively disappear from the site."
+msgstr ""
+
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
+msgid "Unknown"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr ""
+
+#: forms/fields.py:459
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Ngarkoni një figurë të vlefshme. Kartela që ngarkuat ose nuk qe figurë, ose "
+"qe figurë e dëmtuar."
+
+#: contrib/localflavor/at/at_states.py:8
+msgid "Upper Austria"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:26
+msgid "Uri"
+msgstr ""
+
+#: contrib/auth/models.py:184
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:23
+msgid "User"
+msgstr ""
+
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:19
+msgid "Username:"
+msgstr ""
+
+#: contrib/admin/sites.py:329 contrib/admin/sites.py:335
+#: contrib/admin/views/decorators.py:66
+msgid "Usernames cannot contain the '@' character."
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:13
+msgid "Usti Region"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:13
+msgid "Utrecht"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:27
+msgid "Valais"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:50
+msgid "Valencia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:21
+msgid "Valencian Community"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:51
+msgid "Valladolid"
+msgstr ""
+
+#: db/models/fields/__init__.py:65
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:28
+msgid "Vaud"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:80
+msgid "Velky Krtis"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:41
+msgid "Veracruz"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:13
+msgid "Vienna"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
+msgid "View on site"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:12
+msgid "Vorarlberg"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:81
+msgid "Vranov nad Toplou"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:17
+msgid "Vysocina Region"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:33
+msgid "Wakayama"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:93
+msgid "Wales"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:21
+msgid "Warmia-Masuria"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:46
+msgid "Warwickshire"
+msgstr ""
+
+#: contrib/comments/forms.py:175
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/formtools/wizard.py:132
+msgid ""
+"We apologize, but your form has expired. Please continue filling out the "
+"form from this page."
+msgstr ""
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+
+#: utils/dates.py:10
+msgid "Wed"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:27
+msgid "Welcome,"
+msgstr ""
+
+#: conf/global_settings.py:50
+msgid "Welsh"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:71
+msgid "West Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:47
+msgid "West Midlands"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:23
+msgid "West Pomerania"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:48
+msgid "West Sussex"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:49
+msgid "West Yorkshire"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:12
+msgid "Western Cape"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:86
+msgid "Western Isles"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:50
+msgid "Wiltshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:51
+msgid "Worcestershire"
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:110
+msgid "Wrong checksum for the National Business Register Number (REGON)."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:39
+msgid "Wrong checksum for the National Identification Number."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:72
+msgid "Wrong checksum for the Tax Number (NIP)."
+msgstr ""
+
+#: db/models/fields/__init__.py:1111
+msgid "XML text"
+msgstr ""
+
+#: utils/translation/trans_real.py:553
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: contrib/localflavor/jp/jp_prefectures.py:9
+msgid "Yamagata"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:38
+msgid "Yamaguchi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:18
+msgid "Yamanashi"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
+msgid "Yes"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:45
+msgid "You don't have permission to edit anything."
+msgstr ""
+
+#: contrib/admin/options.py:654 contrib/admin/options.py:687
+#, python-format
+msgid "You may add another %s below."
+msgstr ""
+
+#: contrib/admin/options.py:644 contrib/admin/options.py:677
+msgid "You may edit it again below."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr ""
+
+#: contrib/auth/forms.py:88
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+
+#: contrib/admin/sites.py:332 contrib/admin/views/decorators.py:62
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr ""
+
+#: contrib/auth/forms.py:178
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_complete.html:12
+msgid "Your password has been set.  You may go ahead and log in now."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:9
+msgid "Your username, in case you've forgotten:"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:42
+msgid "Yucatán"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:43
+msgid "Zacatecas"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:53
+msgid "Zamora"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:54
+msgid "Zaragoza"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:84
+msgid "Zarnovica"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:14
+msgid "Zeeland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:85
+msgid "Ziar nad Hronom"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:86
+msgid "Zilina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:15
+msgid "Zilina region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:82
+msgid "Zlate Moravce"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:20
+msgid "Zlin Region"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:29
+msgid "Zug"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:15
+msgid "Zuid-Holland"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:30
+msgid "Zurich"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:83
+msgid "Zvolen"
+msgstr ""
+
+#: utils/dateformat.py:43
+msgid "a.m."
+msgstr ""
+
+#: contrib/admin/models.py:24
+msgid "action flag"
+msgstr ""
+
+#: contrib/admin/models.py:19
+msgid "action time"
+msgstr ""
+
+#: contrib/auth/models.py:186
+msgid "active"
+msgstr ""
+
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
+#, python-format
+msgid "all %s"
+msgstr ""
+
+#: contrib/admin/options.py:556 contrib/admin/options.py:566
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:797
+#: forms/models.py:544
+msgid "and"
+msgstr ""
+
+#: contrib/comments/admin.py:43
+msgid "approved"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "apr"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "aug"
+msgstr ""
+
+#: contrib/admin/models.py:25
+msgid "change message"
+msgstr ""
+
+#: contrib/auth/models.py:68
+msgid "codename"
+msgstr ""
+
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
+msgid "comment"
+msgstr ""
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr ""
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr ""
+
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr ""
+
+#: contrib/flatpages/models.py:9
+msgid "content"
+msgstr ""
+
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
+msgid "content type"
+msgstr ""
+
+#: contrib/contenttypes/models.py:82
+msgid "content types"
+msgstr ""
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr ""
+
+#: contrib/auth/models.py:189
+msgid "date joined"
+msgstr ""
+
+#: contrib/comments/models.py:59
+msgid "date/time submitted"
+msgstr ""
+
+#: utils/timesince.py:24
+msgid "day"
+msgid_plural "days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/dates.py:24
+msgid "dec"
+msgstr ""
+
+#: contrib/sites/models.py:33
+msgid "display name"
+msgstr ""
+
+#: contrib/sites/models.py:32
+msgid "domain name"
+msgstr ""
+
+#: contrib/auth/models.py:183
+msgid "e-mail address"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "eight"
+msgstr ""
+
+#: contrib/flatpages/models.py:10
+msgid "enable comments"
+msgstr ""
+
+#: contrib/sessions/models.py:48
+msgid "expire date"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "feb"
+msgstr ""
+
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
+msgid "filter:"
+msgstr ""
+
+#: contrib/auth/models.py:181
+msgid "first name"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "five"
+msgstr ""
+
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr ""
+
+#: contrib/comments/admin.py:39
+msgid "flagged"
+msgstr ""
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr ""
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "four"
+msgstr ""
+
+#: contrib/auth/models.py:98
+msgid "group"
+msgstr ""
+
+#: contrib/auth/models.py:99 contrib/auth/models.py:190
+msgid "groups"
+msgstr ""
+
+#: utils/timesince.py:25
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/models.py:61
+msgid "is public"
+msgstr ""
+
+#: contrib/comments/models.py:64
+msgid "is removed"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "jan"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "jul"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "jun"
+msgstr ""
+
+#: contrib/auth/models.py:188
+msgid "last login"
+msgstr ""
+
+#: contrib/auth/models.py:182
+msgid "last name"
+msgstr ""
+
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr ""
+
+#: contrib/admin/models.py:29
+msgid "log entries"
+msgstr ""
+
+#: contrib/admin/models.py:28
+msgid "log entry"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "mar"
+msgstr ""
+
+#: utils/dates.py:23
+msgid "may"
+msgstr ""
+
+#: contrib/auth/models.py:367
+msgid "message"
+msgstr ""
+
+#: utils/dateformat.py:98
+msgid "midnight"
+msgstr ""
+
+#: utils/timesince.py:26
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:45
+msgid "minutes"
+msgstr ""
+
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
+msgid "model:"
+msgstr ""
+
+#: utils/timesince.py:22
+msgid "month"
+msgid_plural "months"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
+msgid "name"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "nd"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "nine"
+msgstr ""
+
+#: utils/dateformat.py:100
+msgid "noon"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "nov"
+msgstr ""
+
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
+#, python-format
+msgid "number of %s"
+msgstr ""
+
+#: contrib/comments/models.py:24
+msgid "object ID"
+msgstr ""
+
+#: contrib/admin/models.py:22
+msgid "object id"
+msgstr ""
+
+#: contrib/admin/models.py:23
+msgid "object repr"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "oct"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "one"
+msgstr ""
+
+#: utils/text.py:128
+msgid "or"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "or make changes"
+msgstr ""
+
+#: utils/dateformat.py:42
+msgid "p.m."
+msgstr ""
+
+#: contrib/auth/models.py:184
+msgid "password"
+msgstr ""
+
+#: contrib/auth/models.py:72
+msgid "permission"
+msgstr ""
+
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
+msgid "permissions"
+msgstr ""
+
+#: contrib/contenttypes/models.py:77
+msgid "python model class name"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "rd"
+msgstr ""
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr ""
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr ""
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr ""
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr ""
+
+#: contrib/flatpages/models.py:13
+msgid "registration required"
+msgstr ""
+
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
+#, python-format
+msgid "related `%(app_label)s.%(object_name)s` objects"
+msgstr ""
+
+#: contrib/comments/admin.py:47
+msgid "removed"
+msgstr ""
+
+#: utils/dates.py:24
+msgid "sep"
+msgstr ""
+
+#: contrib/sessions/models.py:53
+msgid "session"
+msgstr ""
+
+#: contrib/sessions/models.py:47
+msgid "session data"
+msgstr ""
+
+#: contrib/sessions/models.py:45
+msgid "session key"
+msgstr ""
+
+#: contrib/sessions/models.py:54
+msgid "sessions"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "seven"
+msgstr ""
+
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
+msgid "site"
+msgstr ""
+
+#: contrib/sites/models.py:39
+msgid "sites"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "six"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "st"
+msgstr ""
+
+#: contrib/auth/models.py:185
+msgid "staff status"
+msgstr ""
+
+#: contrib/auth/models.py:187
+msgid "superuser status"
+msgstr ""
+
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
+msgid "tag:"
+msgstr ""
+
+#: contrib/admin/views/template.py:40
+msgid "template"
+msgstr ""
+
+#: contrib/flatpages/models.py:11
+msgid "template name"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "th"
+msgstr ""
+
+#: contrib/admindocs/views.py:209
+#, python-format
+msgid "the related `%(app_label)s.%(data_type)s` object"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "three"
+msgstr ""
+
+#: contrib/flatpages/models.py:8
+msgid "title"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:93
+msgid "today"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:95
+msgid "tomorrow"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "two"
+msgstr ""
+
+#: contrib/auth/models.py:196 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
+msgid "user"
+msgstr ""
+
+#: contrib/auth/models.py:192
+msgid "user permissions"
+msgstr ""
+
+#: contrib/comments/models.py:54
+msgid "user's URL"
+msgstr ""
+
+#: contrib/comments/models.py:53
+msgid "user's email address"
+msgstr ""
+
+#: contrib/comments/models.py:52
+msgid "user's name"
+msgstr ""
+
+#: contrib/auth/models.py:180
+msgid "username"
+msgstr ""
+
+#: contrib/auth/models.py:197
+msgid "users"
+msgstr ""
+
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
+msgid "view:"
+msgstr ""
+
+#: utils/timesince.py:23
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:21
+msgid "year"
+msgid_plural "years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/defaultfilters.py:775
+msgid "yes,no,maybe"
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:97
+msgid "yesterday"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#~ msgid ""
+#~ "Ensure this value has at least %(min)d characters (it has %(length)d)."
+#~ msgstr ""
+#~ "Sigurohuni që kjo vlerë ka të paktën %(min)d shenja (ka gjatësinë %"
+#~ "(length)d)."
+
+#~ msgid ""
+#~ "Ensure this value has at most %(max)d characters (it has %(length)d)."
+#~ msgstr ""
+#~ "Sigurohuni që kjo vlerë ka e shumta %(max)d shenja (ka gjatësinë %(length)"
+#~ "d)."
+
+#~ msgid "Ensure this value is greater than or equal to %s."
+#~ msgstr "Sigurohuni që vlera është më e madhe ose e barabartë me %s."
+
+#~ msgid "Ensure this value is less than or equal to %s."
+#~ msgstr "Sigurohuni që vlera është më e vogël ose e barabartë me %s."
Binary file web/lib/django/conf/locale/sq/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/sq/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,119 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-01-27 22:39-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:24
+#: contrib/admin/media/js/dateparse.js:32
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr ""
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Now"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+msgid "Clock"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "Midnight"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "6 a.m."
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
+msgid "Noon"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:89
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
+msgid "Cancel"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:129
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:178
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+msgid "Calendar"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:176
+msgid "Yesterday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
+msgid "Tomorrow"
+msgstr ""
Binary file web/lib/django/conf/locale/sr/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/sr/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/sr/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -4,8 +4,8 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-08 22:50+0200\n"
-"PO-Revision-Date: 2009-04-01 18:38+0200\n"
+"POT-Creation-Date: 2010-04-16 00:03+0200\n"
+"PO-Revision-Date: 2010-03-23 23:39+0100\n"
 "Last-Translator: Janos Guljas <janos@janos.in.rs>\n"
 "Language-Team: Branko Vukelic <bg.branko@gmail.com> & Janos Guljas "
 "<janos@janos.in.rs> & Nesh <djnesh@gmail.com> & Petar <petar.maric@gmail."
@@ -21,215 +21,235 @@
 msgstr "арапски"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "бугарски"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "бенгалски"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "бугарски"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "каталонски"
+msgid "Bosnian"
+msgstr "босански"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "каталонски"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "чешки"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "велшки"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "дански"
+msgid "Welsh"
+msgstr "велшки"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "дански"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "немачки"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "грчки"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "енглески"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "шпански"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "естонски"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "аргентински шпански"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "естонски"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "баскијски"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
 msgid "Persian"
 msgstr "персијски"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
 msgid "Finnish"
 msgstr "фински"
 
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "француски"
-
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "ирски"
+msgid "French"
+msgstr "француски"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "галски"
+msgid "Frisian"
+msgstr "фризијски"
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "мађарски"
+msgid "Irish"
+msgstr "ирски"
 
 #: conf/global_settings.py:64
+msgid "Galician"
+msgstr "галски"
+
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "хебрејски"
 
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "хинду"
-
 #: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "хинду"
+
+#: conf/global_settings.py:67
 msgid "Croatian"
 msgstr "хрватски"
 
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "исландски"
-
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "италијански"
+msgid "Hungarian"
+msgstr "мађарски"
 
 #: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "исландски"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "италијански"
+
+#: conf/global_settings.py:71
 msgid "Japanese"
 msgstr "јапански"
 
-#: conf/global_settings.py:70
+#: conf/global_settings.py:72
 msgid "Georgian"
 msgstr "грузијски"
 
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "корејски"
-
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
 msgid "Khmer"
 msgstr "камбодијски"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
 msgid "Kannada"
 msgstr "канада"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "латвијски"
-
 #: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "литвански"
+msgid "Korean"
+msgstr "корејски"
 
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "македонски"
+msgid "Lithuanian"
+msgstr "литвански"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "холандски"
+msgid "Latvian"
+msgstr "латвијски"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "норвешки"
+msgid "Macedonian"
+msgstr "македонски"
 
 #: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "холандски"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "норвешки"
+
+#: conf/global_settings.py:81
 msgid "Polish"
 msgstr "пољски"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:82
 msgid "Portuguese"
 msgstr "португалски"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
 msgid "Brazilian Portuguese"
 msgstr "бразилски португалски"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
 msgid "Romanian"
 msgstr "румунски"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
 msgid "Russian"
 msgstr "руски"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
 msgid "Slovak"
 msgstr "словачки"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
 msgid "Slovenian"
 msgstr "словеначки"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
+msgid "Albanian"
+msgstr "албански"
+
+#: conf/global_settings.py:89
 msgid "Serbian"
 msgstr "српски"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:90
+msgid "Serbian Latin"
+msgstr "српски (латиница)"
+
+#: conf/global_settings.py:91
 msgid "Swedish"
 msgstr "шведски"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:92
 msgid "Tamil"
 msgstr "тамилски"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:93
 msgid "Telugu"
 msgstr "телугу"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:94
 msgid "Thai"
 msgstr "тајландски"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:95
 msgid "Turkish"
 msgstr "турски"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:96
 msgid "Ukrainian"
 msgstr "украјински"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "вијетнамски"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
 msgstr "новокинески"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "старокинески"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Успешно обрисано: %(count)d %(items)s."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1025
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1097
 msgid "Are you sure?"
 msgstr "Да ли сте сигурни?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Бриши означене објекте класе %(verbose_name_plural)s"
@@ -268,19 +288,19 @@
 msgid "This year"
 msgstr "Ова година"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Да"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "Не"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Непознато"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "Радња:"
 
@@ -312,61 +332,60 @@
 msgid "log entries"
 msgstr "записи у логовима"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:140 contrib/admin/options.py:155
 msgid "None"
 msgstr "Ништа"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:560
 #, python-format
 msgid "Changed %s."
 msgstr "Измењена поља %s"
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:587
+#: contrib/admin/options.py:560 contrib/admin/options.py:570
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:840
+#: forms/models.py:562
 msgid "and"
 msgstr "и"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:565
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Сачуван објекат „%(object)s“ класе %(name)s."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:569
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Измењена поља %(list)s објеката „%(object)s“ класе %(name)s ."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:574
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Обрисан објекат „%(object)s“ класе %(name)s."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:578
 msgid "No fields changed."
 msgstr "Без измена у пољима."
 
-#: contrib/admin/options.py:598 contrib/auth/admin.py:67
+#: contrib/admin/options.py:644
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "Објекат „%(obj)s“ класе %(name)s сачуван је успешно."
 
-#: contrib/admin/options.py:602 contrib/admin/options.py:635
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:648 contrib/admin/options.py:681
 msgid "You may edit it again below."
 msgstr "Доле можете поново уносити измене."
 
-#: contrib/admin/options.py:612 contrib/admin/options.py:645
+#: contrib/admin/options.py:658 contrib/admin/options.py:691
 #, python-format
 msgid "You may add another %s below."
 msgstr "Доле можете додати нови објекат класе %s"
 
-#: contrib/admin/options.py:633
+#: contrib/admin/options.py:679
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "Објекат „%(obj)s“ класе %(name)s измењен је успешно."
 
-#: contrib/admin/options.py:641
+#: contrib/admin/options.py:687
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -374,26 +393,38 @@
 "Објекат „%(obj)s“ класе %(name)s додат је успешно. Доле можете унети додатне "
 "измене."
 
-#: contrib/admin/options.py:772
+#: contrib/admin/options.py:741
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Потребно је изабрати објекте да би се извршила акција над њима. Ниједан "
+"објекат није промењен."
+
+#: contrib/admin/options.py:759
+msgid "No action selected."
+msgstr "Није изабрана ниједна акција."
+
+#: contrib/admin/options.py:839
 #, python-format
 msgid "Add %s"
 msgstr "Додај објекат класе %s"
 
-#: contrib/admin/options.py:803 contrib/admin/options.py:1003
+#: contrib/admin/options.py:865 contrib/admin/options.py:1077
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "Објекат класе %(name)s са примарним кључем %(key)r не постоји."
 
-#: contrib/admin/options.py:860
+#: contrib/admin/options.py:930
 #, python-format
 msgid "Change %s"
 msgstr "Измени објекат класе %s"
 
-#: contrib/admin/options.py:904
+#: contrib/admin/options.py:975
 msgid "Database error"
 msgstr "Грешка у бази података"
 
-#: contrib/admin/options.py:940
+#: contrib/admin/options.py:1011
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
@@ -401,18 +432,31 @@
 msgstr[1] "%(count)s објеката класе %(name)s измењени су успешно."
 msgstr[2] "%(count)s објекта класе %(name)s измењено је успешно."
 
-#: contrib/admin/options.py:1018
+#: contrib/admin/options.py:1038
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s изабран"
+msgstr[1] "%(total_count)s изабрано"
+msgstr[2] "%(total_count)s изабраних"
+
+#: contrib/admin/options.py:1043
+#, fuzzy, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "од %(count)d изабран"
+
+#: contrib/admin/options.py:1090
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "Објекат „%(obj)s“ класе %(name)s обрисан је успешно."
 
-#: contrib/admin/options.py:1054
+#: contrib/admin/options.py:1127
 #, python-format
 msgid "Change history: %s"
 msgstr "Историјат измена: %s"
 
-#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -420,11 +464,11 @@
 "Унесите тачно корисничко име и лозинку. Пазите на разлику између малих и "
 "великих слова у оба поља"
 
-#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Пријавите се поново пошто је ваша сесија истекла."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -432,62 +476,52 @@
 "Изгледа да ваш браузер није подешен да прима колачиће. Укључите колачиће, "
 "освежите ову страницу и пробајте поново."
 
-#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Корисничка имена не смеју садржати знак „@“."
 
-#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Ваша имејл адреса није ваше корисничко име. Пробајте са „%s“."
 
-#: contrib/admin/sites.py:360
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Администрација система"
 
-#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Пријава"
 
-#: contrib/admin/sites.py:417
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "Администрација %s"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Једно или више поља %(fieldname)s у %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Једно или више поља %(fieldname)s у %(name)s"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Датум:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Време:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Тренутно:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Измена:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Претражи"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Додај још један"
 
@@ -502,17 +536,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -549,34 +583,47 @@
 msgid "Go"
 msgstr "Почни"
 
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr "Изабери све објекте на овој страници."
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Изабери све %(module_name)s од %(total_count)s укупно."
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "Поништи избор"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:27
 msgid "Welcome,"
 msgstr "Добродошли,"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Документација"
 
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Промена лозинке"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Одјава"
 
@@ -588,42 +635,43 @@
 msgid "Django administration"
 msgstr "Django администрација"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Додај"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Историјат"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Преглед на сајту"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Исправите грешку доле."
 msgstr[1] "Исправите грешке доле."
 msgstr[2] "Исправите грешке доле."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "Додај објекат класе %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Филтер"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Обриши"
 
@@ -671,7 +719,7 @@
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
 "Да сигурни да желите да обришете одабране %(object_name)s? Следећи објекти "
 "који су у вези са овим објектом ће такође бити обрисани:"
@@ -736,15 +784,9 @@
 msgstr "Корисник"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Радња"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j. N. Y. G:i T"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -757,6 +799,11 @@
 msgid "Show all"
 msgstr "Прикажи све"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Сачувај"
+
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Search"
 msgstr "Претрага"
@@ -774,10 +821,6 @@
 msgid "%(full_result_count)s total"
 msgstr "укупно %(full_result_count)s"
 
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Сачувај"
-
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
 msgstr "Сачувај као нови"
@@ -790,7 +833,7 @@
 msgid "Save and continue editing"
 msgstr "Сачувај и настави са изменама"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -798,33 +841,39 @@
 "Прво унесите корисничко име и лозинку. Потом ћете моћи да мењате још "
 "корисничких подешавања."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Корисник"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Лозинка"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Лозинка (поновите)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Ради провере тачности поново унесите лозинку коју сте унели горе."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Унесите нову лозинку за корисника <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Лозинка"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Лозинка (поновите)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Ради провере тачности поново унесите лозинку коју сте унели горе."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Додај још један објекат класе %(verbose_name)s."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Обриши"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Брисање?"
@@ -838,9 +887,9 @@
 msgstr "Поновна пријава"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Измена лозинке"
 
@@ -853,7 +902,7 @@
 msgid "Your password was changed."
 msgstr "Ваша лозинка је измењена."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -861,21 +910,17 @@
 "Из безбедносних разлога прво унесите своју стару лозинку, а нову затим "
 "унесите два пута да бисмо могли да проверимо да ли сте је правилно унели."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Стара лозинка:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Нова лозинка:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Потврда лозинке:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Стара лозинка"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Нова лозинка"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Измени моју лозинку"
@@ -914,6 +959,14 @@
 "Унесите нову лозинку два пута како бисмо могли да проверимо да ли сте је "
 "правилно унели."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Нова лозинка:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Потврда лозинке:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Ресетовање лозинке неуспешно"
@@ -981,7 +1034,7 @@
 msgid "Reset my password"
 msgstr "Ресетуј моју лозинку"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Сви датуми"
 
@@ -995,158 +1048,77 @@
 msgid "Select %s to change"
 msgstr "Одабери објекат класе %s за измену"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "сајт"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "темплејт"
 
-#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "таг:"
 
-#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "филтер:"
 
-#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "вју:"
 
-#: contrib/admindocs/views.py:187
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "Апликација %r није пронађена"
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "Модел %(model_name)r није пронађен у апликацији %(app_label)r"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "повезани објекти класе `%(app_label)s.%(data_type)s`"
 
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "модел:"
 
 # WARN: possible breakage in future
 # This string is interpolated in strings below, which can cause breakage in
 # future releases.
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "класе `%(app_label)s.%(object_name)s`"
 
 # WARN: possible breakage in future
-#: contrib/admindocs/views.py:242
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "сви повезани објекти %s"
 
 # WARN: possible breakage in future
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "број повезаних објеката %s"
 
 # WARN: possible breakage in future
-#: contrib/admindocs/views.py:252
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "Поља у повезаним објектима %s"
 
-#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
-msgid "Integer"
-msgstr "Цео број"
-
-#: contrib/admindocs/views.py:316
-msgid "Boolean (Either True or False)"
-msgstr "Булова вредност (True или False)"
-
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Стринг (највише %(max_length)s знакова)"
-
-#: contrib/admindocs/views.py:318
-msgid "Comma-separated integers"
-msgstr "Цели бројеви раздвојени запетама"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (without time)"
-msgstr "Датум (без времена)"
-
-#: contrib/admindocs/views.py:320
-msgid "Date (with time)"
-msgstr "Датум (са временом)"
-
-#: contrib/admindocs/views.py:321
-msgid "Decimal number"
-msgstr "Децимални број"
-
-#: contrib/admindocs/views.py:322
-msgid "E-mail address"
-msgstr "Имејл адреса"
-
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
-msgid "File path"
-msgstr "Путања фајла"
-
-#: contrib/admindocs/views.py:325
-msgid "Floating point number"
-msgstr "Број са покреном запетом"
-
-#: contrib/admindocs/views.py:329 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "IP адреса"
-
-#: contrib/admindocs/views.py:331
-msgid "Boolean (Either True, False or None)"
-msgstr "Булова вредност (True, False или None)"
-
-#: contrib/admindocs/views.py:332
-msgid "Relation to parent model"
-msgstr "Веза са родитељским моделом"
-
-#: contrib/admindocs/views.py:333
-msgid "Phone number"
-msgstr "Број телефона"
-
-#: contrib/admindocs/views.py:338
-msgid "Text"
-msgstr "Текст"
-
-#: contrib/admindocs/views.py:339
-msgid "Time"
-msgstr "Време"
-
-#: contrib/admindocs/views.py:340 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:341
-msgid "U.S. state (two uppercase letters)"
-msgstr "Држава у САД (два велика слова)"
-
-#: contrib/admindocs/views.py:342
-msgid "XML text"
-msgstr "XML текст"
-
-#: contrib/admindocs/views.py:368
+#: contrib/admindocs/views.py:361
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s не изгледа као urlpattern објекат"
@@ -1219,66 +1191,63 @@
 msgstr ""
 "Исто као претходни, али отвара администрациону страницу у новом прозору."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Лични подаци"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Дозволе"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Важни датуми"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Групе"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Додај корисника"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Лозинка успешно измењена."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Измени лозинку: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Корисник"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
 msgstr ""
 "Неопходно. Највише 30 словних места. Само алфанумерички знаци (слова, бројке "
-"и доња црта)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Ова вредност може садржати само слова, бројке и доње црте."
+"и @/./+/-/_)."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Ова вредност може садржати само слова, бројке и @/./+/-/_."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Потврда лозинке"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Корисник са тим корисничким именом већ постоји."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Два поља за лозинке се нису поклопила."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Овај налог је неактиван."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
@@ -1286,11 +1255,11 @@
 "Изгледа да су колачићи искључени у вашем браузеру. Они морају бити укључени "
 "да би сте се пријавили."
 
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "Имејл адреса"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1298,72 +1267,71 @@
 "Та имејл адреса није у вези ни са једним налогом. Да ли сте сигурни да сте "
 "се већ регистровали?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Ресетовање лозинке на %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Нова лозинка"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Потврда нове лозинке"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Стара лозинка"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr "Ваша стара лознка није правилно унесена. Унесите је поново."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "име"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "шифра дозволе"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "дозвола"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "дозволе"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "група"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "групе"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "корисничко име"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Неопходно. Највише 30 словних места. Само алфанумерички знаци (слова, бројке "
+"и @/./+/-/_)."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "име"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "презиме"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "имејл адреса"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "лозинка"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1371,20 +1339,20 @@
 "Користите '[algo]$[salt]$[hexdigest]' или <a href=\"password/\">формулар за "
 "унос лозинке</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "статус члана посаде"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr ""
 "Означава да ли корисник може да се пријави на овај сајт за администрацију."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "активан"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1392,26 +1360,26 @@
 "Означава да ли се корисник сматра активним. Деселектујте ово уместо да "
 "бришете налог."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "статус администратора"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
 msgstr ""
 "Означава да ли корисник има све дозволе без додељивања појединачних дозвола."
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "последња пријава"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "датум регистрације"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1419,39 +1387,81 @@
 "Поред ручно додељених дозвола, овај корисник ће имати и дозволе додељене "
 "гурпама којима припада."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "корисничке дозволе"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "корисник"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "корисници"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "порука"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Одјављен"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Унесите важећу имејл адресу."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Садржај"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Метаподаци"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "означен"
+msgstr[1] "означена"
+msgstr[2] "означених"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Означавање изабраних коментара"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "одобрен"
+msgstr[1] "одобрена"
+msgstr[2] "одобрених"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Одобрење изабраних коментара"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "уклоњен"
+msgstr[1] "уклоњена"
+msgstr[2] "уклоњених"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Обриши изабране коментаре"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "Над једним коментаром је успешно урађено: %(action)s."
+msgstr[1] "Над %(count)s коментара је успешно урађено: %(action)s."
+msgstr[2] "Над %(count)s коментара је успешно урађено: %(action)s."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1463,7 +1473,6 @@
 msgstr "Скорији коментари на сајту %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Име"
 
@@ -1471,12 +1480,16 @@
 msgid "Email address"
 msgstr "Имејл адреса"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1114
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Коментари"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
@@ -1484,12 +1497,12 @@
 msgstr[1] "Пази на језик! Речи „%s“ овде нису дозвољене."
 msgstr[2] "Пази на језик! Речи „%s“ овде нису дозвољене."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr "Ако ишта унесете у ово поље, Ваш коментар ће се сматрати спамом."
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "тип садржаја"
 
@@ -1518,6 +1531,10 @@
 msgid "date/time submitted"
 msgstr "датум/време постављања"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:909
+msgid "IP address"
+msgstr "IP адреса"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "јавно"
@@ -1600,7 +1617,6 @@
 msgstr "Да ли заиста желите да означите овај коментар јавним?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Одобри"
 
@@ -1623,11 +1639,6 @@
 msgid "Really remove this comment?"
 msgstr "Да ли заиста желите да обришете овај коментар?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Обриши"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Хвала што користите наш сајт!"
@@ -1658,39 +1669,6 @@
 msgid "Preview"
 msgstr "Преглед"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Коментари који чекају на одобрење"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Нема коментара на чекању"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Имејл адреса"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Пријављен?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP адреса"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Датум постављања"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "да"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "не"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Хвала на коментару"
@@ -1719,11 +1697,11 @@
 msgid "or make changes"
 msgstr "или изврши измене"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "име python класе модела"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "типови садржаја"
 
@@ -1787,7 +1765,7 @@
 msgid "flat pages"
 msgstr "флет странице"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1795,6 +1773,39 @@
 "Жао нам је, али Ваша сесија је истекла. Попуњавање формулара наставите на "
 "овој страници."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+"Основно „GIS“ поље које мапира тип геометрије по „OpenGIS“ спецификацији."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Тачка"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Линија"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Полигон"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Више тачака"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Више линија"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Више полигона"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Колекција геопметријских облика"
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Нисте задали параметре за геометрију."
@@ -1811,7 +1822,7 @@
 msgid ""
 "An error occurred when transforming the geometry to the SRID of the geometry "
 "form field."
-msgstr ""
+msgstr "Грешка се десила током трансформације геометрије на „SRID“ тип поља."
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
@@ -1901,25 +1912,25 @@
 msgid "yesterday"
 msgstr "јуче"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Унесите поштански број у формату НННН или АННННААА."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Ово поље мора садржати само бројке."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Ово поље мора садржати 7 или 8 цифара"
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Унестие важећи CUIT у формату XX-XXXXXXXX-X or XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "Неважећи CUIT"
 
@@ -1959,8 +1970,8 @@
 msgid "Vienna"
 msgstr "Беч"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Унесите поштански број у формату XXXX."
 
@@ -1969,45 +1980,45 @@
 msgstr ""
 "Унесите важећи аустријски број социјалног осигурања у формату XXXX XXXXXX."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Унесите четвороцифрени поштански број"
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Унесите поштански број у формату XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Број телефона мора бити у формату XX-XXXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
 msgstr "Одаберите постојећу бразилску државу. Та држава није међу понуђенима."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Неважећи CPF број"
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr ""
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr ""
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr ""
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr ""
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr ""
 
@@ -2115,21 +2126,21 @@
 msgid "Zurich"
 msgstr ""
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
 msgstr ""
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr ""
 
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
 #: contrib/localflavor/cl/forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr ""
 
@@ -2189,23 +2200,23 @@
 msgid "Moravian-Silesian Region"
 msgstr ""
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr ""
 
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
 #: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
 msgstr ""
 
 #: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr ""
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr ""
 
@@ -2273,12 +2284,12 @@
 msgid "Thuringia"
 msgstr ""
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr ""
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2551,71 +2562,503 @@
 msgid "Valencian Community"
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
 #: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
+msgid "Please enter a valid NIF or NIE."
 msgstr ""
 
 #: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
+msgid "Invalid checksum for NIF."
 msgstr ""
 
 #: contrib/localflavor/es/forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
 #: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr ""
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr ""
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr ""
 
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
 #: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr ""
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr ""
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr ""
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr ""
 
@@ -2811,6 +3254,10 @@
 msgid "Okinawa"
 msgstr ""
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr ""
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr ""
@@ -2939,15 +3386,11 @@
 msgid "Zacatecas"
 msgstr ""
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr ""
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr ""
 
@@ -2999,15 +3442,15 @@
 msgid "Zuid-Holland"
 msgstr ""
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr ""
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr ""
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr ""
 
@@ -3104,6 +3547,14 @@
 msgid "West Pomerania"
 msgstr ""
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr ""
@@ -3124,6 +3575,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr ""
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr ""
@@ -3756,19 +4307,43 @@
 msgid "Wales"
 msgstr ""
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr ""
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr ""
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr ""
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Држава у САД (два велика слова)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Број телефона"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr ""
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr ""
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr ""
 
@@ -3808,6 +4383,10 @@
 msgid "Western Cape"
 msgstr ""
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "порука"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "преусмерен са"
@@ -3872,59 +4451,220 @@
 msgid "sites"
 msgstr "сајтови"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Ова вредност мора бити целобројна."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Ова вредност мора бити True или False."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Унесите исправну вредност."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Унесите исправан URL."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Овај URL изгледа не води никуда."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Унесите исрпаван „слаг“, који се састоји од слова, бројки, доњих црта или "
+"циртица."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Унесите исправну IPv4 адресу."
+
+#: core/validators.py:129 db/models/fields/__init__.py:585
+msgid "Enter only digits separated by commas."
+msgstr "Унесите само бројке раздвојене запетама."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Ово поље мора да буде %(limit_value)s (тренутно има %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Ова вредност мора да буде мања од %(limit_value)s. или тачно толико."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Ова вредност мора бити већа од %(limit_value)s или тачно толико."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Ово поље мора садржати најмање %(limit_value)d словних места (тренутно има %"
+"(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Ово поље мора садржати највише %(limit_value)d словних места (тренутно има %"
+"(show_value)d)."
+
+#: db/models/base.py:818
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s мора да буде јединствен за %(date_field)s %(lookup)s."
+
+#: db/models/base.py:833 db/models/base.py:841
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s са овом вредношћу %(field_label)s већ постоји."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Вредност %r није дозвољена."
+
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Ово поље не може остати празно."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Унесите само бројке раздвојене запетама."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Ово поље не може остати празно."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Поње типа: %(field_type)s"
+
+#: db/models/fields/__init__.py:464 db/models/fields/__init__.py:865
+#: db/models/fields/__init__.py:974 db/models/fields/__init__.py:985
+#: db/models/fields/__init__.py:1012
+msgid "Integer"
+msgstr "Цео број"
+
+#: db/models/fields/__init__.py:468 db/models/fields/__init__.py:863
+msgid "This value must be an integer."
+msgstr "Ова вредност мора бити целобројна."
+
+#: db/models/fields/__init__.py:503
+msgid "This value must be either True or False."
+msgstr "Ова вредност мора бити True или False."
+
+#: db/models/fields/__init__.py:505
+msgid "Boolean (Either True or False)"
+msgstr "Булова вредност (True или False)"
+
+#: db/models/fields/__init__.py:552 db/models/fields/__init__.py:995
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Стринг (највише %(max_length)s знакова)"
+
+#: db/models/fields/__init__.py:580
+msgid "Comma-separated integers"
+msgstr "Цели бројеви раздвојени запетама"
+
+#: db/models/fields/__init__.py:594
+msgid "Date (without time)"
+msgstr "Датум (без времена)"
+
+#: db/models/fields/__init__.py:598
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Унесите исправан датум у формату ГГГГ-ММ-ДД."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:599
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Неисправан датум: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:680
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr "Унесите исправан датум/време у формату ГГГГ-ММ-ДД ЧЧ:ММ[:сс[.уууууу]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:682
+msgid "Date (with time)"
+msgstr "Датум (са временом)"
+
+#: db/models/fields/__init__.py:748
 msgid "This value must be a decimal number."
 msgstr "Ова вредност мора бити децимални број"
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:750
+msgid "Decimal number"
+msgstr "Децимални број"
+
+#: db/models/fields/__init__.py:805
+msgid "E-mail address"
+msgstr "Имејл адреса"
+
+#: db/models/fields/__init__.py:812 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Путања фајла"
+
+#: db/models/fields/__init__.py:835
 msgid "This value must be a float."
 msgstr "Ова вредност мора бити број са клизећом запетом"
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:837
+msgid "Floating point number"
+msgstr "Број са покреном запетом"
+
+#: db/models/fields/__init__.py:896
+msgid "Big (8 byte) integer"
+msgstr "Велики цео број"
+
+#: db/models/fields/__init__.py:925
 msgid "This value must be either None, True or False."
 msgstr "Ова вредност мора бити или None, или True, или False."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:927
+msgid "Boolean (Either True, False or None)"
+msgstr "Булова вредност (True, False или None)"
+
+#: db/models/fields/__init__.py:1018
+msgid "Text"
+msgstr "Текст"
+
+#: db/models/fields/__init__.py:1034
+msgid "Time"
+msgstr "Време"
+
+#: db/models/fields/__init__.py:1038
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Унесите исправно време у формату ЧЧ:ММ[:сс[.уууууу]]."
 
-#: db/models/fields/related.py:792
+#: db/models/fields/__init__.py:1122
+msgid "XML text"
+msgstr "XML текст"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Објекат класе %(model)s са примарним кључем %(pk)r не постоји."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Страни кључ (тип одређује референтно поље)"
+
+#: db/models/fields/related.py:923
+msgid "One-to-one relationship"
+msgstr "Релација један на један"
+
+#: db/models/fields/related.py:983
+msgid "Many-to-many relationship"
+msgstr "Релација више на више"
+
+#: db/models/fields/related.py:1003
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Држите „Control“, или „Command“ на Mac-у да бисте обележили више од једне "
 "ставке."
 
-#: db/models/fields/related.py:870
+#: db/models/fields/related.py:1064
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3933,86 +4673,58 @@
 msgstr[1] "Унесите исправан %(self)s IDs. Вредности %(value)r су неисправне."
 msgstr[2] "Унесите исправан %(self)s IDs. Вредности %(value)r су неисправне."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Ово поље се мора попунити."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Унесите исправну вредност."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Ово поље мора садржати највише %(max)d словних места (тренутно има %(length)"
-"d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Ово поље мора садржати најмање %(min)d словних места (тренутно има %(length)"
-"d."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Унесите цео број."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Ова вредност мора да буде мања од %s или тачно толико."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Ова вредност мора бити већа од %s или тачно толико."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Унесите број."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Не сме бити укупно више од %s цифара. Проверите."
 
-#: forms/fields.py:228
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Не сме бити укупно више од %s децималних места. Проверите."
 
-#: forms/fields.py:229
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Не сме бити укупно више од %s цифара пре запете. Проверите."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Унесите исправан датум."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Унесите исправно време"
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Унесите исправан датум/време."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "Фајл није пребачен. Проверите тип енкодирања формулара."
 
-#: forms/fields.py:448
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Фајл није пребачен."
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Пребачен фајл је празан."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4020,7 +4732,7 @@
 "Назив фајла мора да садржи бар %(max)d словних места (тренутно има %(length)"
 "d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4028,61 +4740,32 @@
 "Пребаците исправан фајл. Фајл који је пребачен или није слика, или је "
 "оштећен."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Унесите исправан URL."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Овај URL изгледа не води никуда."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr ""
 "%(value)s није међу понуђеним вредностима. Одаберите једну од понуђених."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:962
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:995
 msgid "Enter a list of values."
 msgstr "Унесите листу вредности."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Унесите исправну IPv4 адресу."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Унесите исрпаван „слаг“, који се састоји од слова, бројки, доњих црта или "
-"циртица."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Редослед"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s мора да буде јединствен за %(date_field)s %(lookup)s."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s са овом вредношћу %(field_label)s већ постоји."
-
-#: forms/models.py:581
+#: forms/models.py:556
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Исправите дуплиран садржај за поља: %(field)s."
 
-#: forms/models.py:585
+#: forms/models.py:560
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr ""
 "Исправите дуплиран садржај за поља: %(field)s, који мора да буде јединствен."
 
-#: forms/models.py:591
+#: forms/models.py:566
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
@@ -4091,33 +4774,33 @@
 "Исправите дуплиран садржај за поља: %(field_name)s, који мора да буде "
 "јединствен за %(lookup)s у %(date_field)s."
 
-#: forms/models.py:599
+#: forms/models.py:574
 msgid "Please correct the duplicate values below."
 msgstr "Исправите дуплиране вредности доле."
 
-#: forms/models.py:837
+#: forms/models.py:848
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr "Страни кључ се није поклопио са инстанцом родитељског кључа."
 
-#: forms/models.py:892
+#: forms/models.py:914
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Одабрана вредност није међу понуђенима. Одаберите једну од понуђених."
 
-#: forms/models.py:963
+#: forms/models.py:996
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "%s није међу понуђеним вредностима. Одаберите једну од понуђених."
 
-#: forms/models.py:965
+#: forms/models.py:998
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "„%s“ није исправна вредност за примарни кључ."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "да,не,можда"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
@@ -4125,17 +4808,17 @@
 msgstr[1] "%(size)d бајта"
 msgstr[2] "%(size)d бајтова"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4344,7 +5027,7 @@
 msgid "Dec."
 msgstr "дец."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "или"
 
@@ -4404,33 +5087,37 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
-msgstr "j. N Y."
-
-#: utils/translation/trans_real.py:401
+msgstr "j. F Y."
+
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j. F Y. H:i Т"
+
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
 msgstr "G:i"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y."
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
 msgstr "j. F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "%(verbose_name)s је успешно креиран."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "%(verbose_name)s је успешно ажуриран."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s је обрисан."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/sr/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,44 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j. F Y.'
+TIME_FORMAT = 'H:i'
+DATETIME_FORMAT = 'j. F Y. H:i'
+YEAR_MONTH_FORMAT = 'F Y.'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'j.m.Y.'
+SHORT_DATETIME_FORMAT = 'j.m.Y. H:i'
+FIRST_DAY_OF_WEEK = 1
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d',                     # '2006-10-25'
+    '%d.%m.%Y.', '%d.%m.%y.',       # '25.10.2006.', '25.10.06.'
+    '%d. %m. %Y.', '%d. %m. %y.',   # '25. 10. 2006.', '25. 10. 06.'
+    # '%d. %b %y.', '%d. %B %y.',     # '25. Oct 06.', '25. October 06.'
+    # '%d. %b \'%y.', '%d. %B \'%y.', # '25. Oct '06.', '25. October '06.'
+    # '%d. %b %Y.', '%d. %B %Y.',     # '25. Oct 2006.', '25. October 2006.'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',        # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',      # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',         # '2006-10-25 14:30'
+    '%Y-%m-%d',               # '2006-10-25'
+    '%d.%m.%Y. %H:%M:%S',     # '25.10.2006. 14:30:59'
+    '%d.%m.%Y. %H:%M',        # '25.10.2006. 14:30'
+    '%d.%m.%Y.',              # '25.10.2006.'
+    '%d.%m.%y. %H:%M:%S',     # '25.10.06. 14:30:59'
+    '%d.%m.%y. %H:%M',        # '25.10.06. 14:30'
+    '%d.%m.%y.',              # '25.10.06.'
+    '%d. %m. %Y. %H:%M:%S',   # '25. 10. 2006. 14:30:59'
+    '%d. %m. %Y. %H:%M',      # '25. 10. 2006. 14:30'
+    '%d. %m. %Y.',            # '25. 10. 2006.'
+    '%d. %m. %y. %H:%M:%S',   # '25. 10. 06. 14:30:59'
+    '%d. %m. %y. %H:%M',      # '25. 10. 06. 14:30'
+    '%d. %m. %y.',            # '25. 10. 06.'
+)
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/sr_Latn/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/sr_Latn/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -4,8 +4,8 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-05-08 22:50+0200\n"
-"PO-Revision-Date: 2009-04-01 18:38+0200\n"
+"POT-Creation-Date: 2010-04-16 00:11+0200\n"
+"PO-Revision-Date: 2010-03-23 23:49+0100\n"
 "Last-Translator: Janos Guljas <janos@janos.in.rs>\n"
 "Language-Team: Branko Vukelic <bg.branko@gmail.com> & Janos Guljas "
 "<janos@janos.in.rs> & Nesh <djnesh@gmail.com> & Petar <petar.maric@gmail."
@@ -21,215 +21,235 @@
 msgstr "arapski"
 
 #: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "bugarski"
+
+#: conf/global_settings.py:46
 msgid "Bengali"
 msgstr "bengalski"
 
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "bugarski"
-
 #: conf/global_settings.py:47
-msgid "Catalan"
-msgstr "katalonski"
+msgid "Bosnian"
+msgstr "bosanski"
 
 #: conf/global_settings.py:48
+msgid "Catalan"
+msgstr "katalonski"
+
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "češki"
 
-#: conf/global_settings.py:49
-msgid "Welsh"
-msgstr "velški"
-
 #: conf/global_settings.py:50
-msgid "Danish"
-msgstr "danski"
+msgid "Welsh"
+msgstr "velški"
 
 #: conf/global_settings.py:51
+msgid "Danish"
+msgstr "danski"
+
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "nemački"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "grčki"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "engleski"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
 msgid "Spanish"
 msgstr "španski"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "estonski"
-
 #: conf/global_settings.py:56
 msgid "Argentinean Spanish"
 msgstr "argentinski španski"
 
 #: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "estonski"
+
+#: conf/global_settings.py:58
 msgid "Basque"
 msgstr "baskijski"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
 msgid "Persian"
 msgstr "persijski"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
 msgid "Finnish"
 msgstr "finski"
 
-#: conf/global_settings.py:60
-msgid "French"
-msgstr "francuski"
-
 #: conf/global_settings.py:61
-msgid "Irish"
-msgstr "irski"
+msgid "French"
+msgstr "francuski"
 
 #: conf/global_settings.py:62
-msgid "Galician"
-msgstr "galski"
+msgid "Frisian"
+msgstr "frizijski"
 
 #: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "mađarski"
+msgid "Irish"
+msgstr "irski"
 
 #: conf/global_settings.py:64
+msgid "Galician"
+msgstr "galski"
+
+#: conf/global_settings.py:65
 msgid "Hebrew"
 msgstr "hebrejski"
 
-#: conf/global_settings.py:65
-msgid "Hindi"
-msgstr "hindu"
-
 #: conf/global_settings.py:66
+msgid "Hindi"
+msgstr "hindu"
+
+#: conf/global_settings.py:67
 msgid "Croatian"
 msgstr "hrvatski"
 
-#: conf/global_settings.py:67
-msgid "Icelandic"
-msgstr "islandski"
-
 #: conf/global_settings.py:68
-msgid "Italian"
-msgstr "italijanski"
+msgid "Hungarian"
+msgstr "mađarski"
 
 #: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "islandski"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "italijanski"
+
+#: conf/global_settings.py:71
 msgid "Japanese"
 msgstr "japanski"
 
-#: conf/global_settings.py:70
+#: conf/global_settings.py:72
 msgid "Georgian"
 msgstr "gruzijski"
 
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "korejski"
-
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
 msgid "Khmer"
 msgstr "kambodijski"
 
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
 msgid "Kannada"
 msgstr "kanada"
 
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "latvijski"
-
 #: conf/global_settings.py:75
-msgid "Lithuanian"
-msgstr "litvanski"
+msgid "Korean"
+msgstr "korejski"
 
 #: conf/global_settings.py:76
-msgid "Macedonian"
-msgstr "makedonski"
+msgid "Lithuanian"
+msgstr "litvanski"
 
 #: conf/global_settings.py:77
-msgid "Dutch"
-msgstr "holandski"
+msgid "Latvian"
+msgstr "latvijski"
 
 #: conf/global_settings.py:78
-msgid "Norwegian"
-msgstr "norveški"
+msgid "Macedonian"
+msgstr "makedonski"
 
 #: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "holandski"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "norveški"
+
+#: conf/global_settings.py:81
 msgid "Polish"
 msgstr "poljski"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:82
 msgid "Portuguese"
 msgstr "portugalski"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
 msgid "Brazilian Portuguese"
 msgstr "brazilski portugalski"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
 msgid "Romanian"
 msgstr "rumunski"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
 msgid "Russian"
 msgstr "ruski"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
 msgid "Slovak"
 msgstr "slovački"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
 msgid "Slovenian"
 msgstr "slovenački"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
+msgid "Albanian"
+msgstr "albanski"
+
+#: conf/global_settings.py:89
 msgid "Serbian"
 msgstr "srpski"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:90
+msgid "Serbian Latin"
+msgstr "srpski (latinica)"
+
+#: conf/global_settings.py:91
 msgid "Swedish"
 msgstr "švedski"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:92
 msgid "Tamil"
 msgstr "tamilski"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:93
 msgid "Telugu"
 msgstr "telugu"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:94
 msgid "Thai"
 msgstr "tajlandski"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:95
 msgid "Turkish"
 msgstr "turski"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:96
 msgid "Ukrainian"
 msgstr "ukrajinski"
 
-#: conf/global_settings.py:93
+#: conf/global_settings.py:97
+msgid "Vietnamese"
+msgstr "vijetnamski"
+
+#: conf/global_settings.py:98
 msgid "Simplified Chinese"
 msgstr "novokineski"
 
-#: conf/global_settings.py:94
+#: conf/global_settings.py:99
 msgid "Traditional Chinese"
 msgstr "starokineski"
 
-#: contrib/admin/actions.py:60
+#: contrib/admin/actions.py:52
 #, python-format
 msgid "Successfully deleted %(count)d %(items)s."
 msgstr "Uspešno obrisano: %(count)d %(items)s."
 
-#: contrib/admin/actions.py:67 contrib/admin/options.py:1025
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1097
 msgid "Are you sure?"
 msgstr "Da li ste sigurni?"
 
-#: contrib/admin/actions.py:85
+#: contrib/admin/actions.py:77
 #, python-format
 msgid "Delete selected %(verbose_name_plural)s"
 msgstr "Briši označene objekte klase %(verbose_name_plural)s"
@@ -268,19 +288,19 @@
 msgid "This year"
 msgstr "Ova godina"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Da"
 
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "Ne"
 
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Nepoznato"
 
-#: contrib/admin/helpers.py:14
+#: contrib/admin/helpers.py:20
 msgid "Action:"
 msgstr "Radnja:"
 
@@ -312,61 +332,60 @@
 msgid "log entries"
 msgstr "zapisi u logovima"
 
-#: contrib/admin/options.py:133 contrib/admin/options.py:147
+#: contrib/admin/options.py:140 contrib/admin/options.py:155
 msgid "None"
 msgstr "Ništa"
 
-#: contrib/admin/options.py:519
+#: contrib/admin/options.py:560
 #, python-format
 msgid "Changed %s."
 msgstr "Izmenjena polja %s"
 
-#: contrib/admin/options.py:519 contrib/admin/options.py:529
-#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
-#: forms/models.py:587
+#: contrib/admin/options.py:560 contrib/admin/options.py:570
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:840
+#: forms/models.py:562
 msgid "and"
 msgstr "i"
 
-#: contrib/admin/options.py:524
+#: contrib/admin/options.py:565
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "Sačuvan objekat „%(object)s“ klase %(name)s."
 
-#: contrib/admin/options.py:528
+#: contrib/admin/options.py:569
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "Izmenjena polja %(list)s objekata „%(object)s“ klase %(name)s ."
 
-#: contrib/admin/options.py:533
+#: contrib/admin/options.py:574
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "Obrisan objekat „%(object)s“ klase %(name)s."
 
-#: contrib/admin/options.py:537
+#: contrib/admin/options.py:578
 msgid "No fields changed."
 msgstr "Bez izmena u poljima."
 
-#: contrib/admin/options.py:598 contrib/auth/admin.py:67
+#: contrib/admin/options.py:644
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "Objekat „%(obj)s“ klase %(name)s sačuvan je uspešno."
 
-#: contrib/admin/options.py:602 contrib/admin/options.py:635
-#: contrib/auth/admin.py:75
+#: contrib/admin/options.py:648 contrib/admin/options.py:681
 msgid "You may edit it again below."
 msgstr "Dole možete ponovo unositi izmene."
 
-#: contrib/admin/options.py:612 contrib/admin/options.py:645
+#: contrib/admin/options.py:658 contrib/admin/options.py:691
 #, python-format
 msgid "You may add another %s below."
 msgstr "Dole možete dodati novi objekat klase %s"
 
-#: contrib/admin/options.py:633
+#: contrib/admin/options.py:679
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "Objekat „%(obj)s“ klase %(name)s izmenjen je uspešno."
 
-#: contrib/admin/options.py:641
+#: contrib/admin/options.py:687
 #, python-format
 msgid ""
 "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -374,26 +393,38 @@
 "Objekat „%(obj)s“ klase %(name)s dodat je uspešno. Dole možete uneti dodatne "
 "izmene."
 
-#: contrib/admin/options.py:772
+#: contrib/admin/options.py:741
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"Potrebno je izabrati objekte da bi se izvršila akcija nad njima. Nijedan "
+"objekat nije promenjen."
+
+#: contrib/admin/options.py:759
+msgid "No action selected."
+msgstr "Nije izabrana nijedna akcija."
+
+#: contrib/admin/options.py:839
 #, python-format
 msgid "Add %s"
 msgstr "Dodaj objekat klase %s"
 
-#: contrib/admin/options.py:803 contrib/admin/options.py:1003
+#: contrib/admin/options.py:865 contrib/admin/options.py:1077
 #, python-format
 msgid "%(name)s object with primary key %(key)r does not exist."
 msgstr "Objekat klase %(name)s sa primarnim ključem %(key)r ne postoji."
 
-#: contrib/admin/options.py:860
+#: contrib/admin/options.py:930
 #, python-format
 msgid "Change %s"
 msgstr "Izmeni objekat klase %s"
 
-#: contrib/admin/options.py:904
+#: contrib/admin/options.py:975
 msgid "Database error"
 msgstr "Greška u bazi podataka"
 
-#: contrib/admin/options.py:940
+#: contrib/admin/options.py:1011
 #, python-format
 msgid "%(count)s %(name)s was changed successfully."
 msgid_plural "%(count)s %(name)s were changed successfully."
@@ -401,18 +432,31 @@
 msgstr[1] "%(count)s objekata klase %(name)s izmenjeni su uspešno."
 msgstr[2] "%(count)s objekta klase %(name)s izmenjeno je uspešno."
 
-#: contrib/admin/options.py:1018
+#: contrib/admin/options.py:1038
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s izabran"
+msgstr[1] "%(total_count)s izabrano"
+msgstr[2] "%(total_count)s izabranih"
+
+#: contrib/admin/options.py:1043
+#, fuzzy, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "od %(count)d izabran"
+
+#: contrib/admin/options.py:1090
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "Objekat „%(obj)s“ klase %(name)s obrisan je uspešno."
 
-#: contrib/admin/options.py:1054
+#: contrib/admin/options.py:1127
 #, python-format
 msgid "Change history: %s"
 msgstr "Istorijat izmena: %s"
 
-#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
 msgid ""
 "Please enter a correct username and password. Note that both fields are case-"
 "sensitive."
@@ -420,11 +464,11 @@
 "Unesite tačno korisničko ime i lozinku. Pazite na razliku između malih i "
 "velikih slova u oba polja"
 
-#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Prijavite se ponovo pošto je vaša sesija istekla."
 
-#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
 msgid ""
 "Looks like your browser isn't configured to accept cookies. Please enable "
 "cookies, reload this page, and try again."
@@ -432,62 +476,52 @@
 "Izgleda da vaš brauzer nije podešen da prima kolačiće. Uključite kolačiće, "
 "osvežite ovu stranicu i probajte ponovo."
 
-#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Korisnička imena ne smeju sadržati znak „@“."
 
-#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "Vaša imejl adresa nije vaše korisničko ime. Probajte sa „%s“."
 
-#: contrib/admin/sites.py:360
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Administracija sistema"
 
-#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Prijava"
 
-#: contrib/admin/sites.py:417
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "Administracija %s"
 
-#: contrib/admin/util.py:168
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "Jedno ili više polja %(fieldname)s u %(name)s: %(obj)s"
-
-#: contrib/admin/util.py:173
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "Jedno ili više polja %(fieldname)s u %(name)s"
-
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Datum:"
 
-#: contrib/admin/widgets.py:71
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Vreme:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Trenutno:"
 
-#: contrib/admin/widgets.py:95
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Izmena:"
 
-#: contrib/admin/widgets.py:124
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Pretraži"
 
-#: contrib/admin/widgets.py:236
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Dodaj još jedan"
 
@@ -502,17 +536,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:31
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:25
+#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -549,34 +583,47 @@
 msgid "Go"
 msgstr "Počni"
 
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr "Izaberi sve objekte na ovoj stranici."
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Izaberi sve %(module_name)s od %(total_count)s ukupno."
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "Poništi izbor"
+
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
 #, python-format
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:27
 msgid "Welcome,"
 msgstr "Dobrodošli,"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:32
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Dokumentacija"
 
-#: contrib/admin/templates/admin/base.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:14
-#: contrib/admin/templates/admin/auth/user/change_password.html:47
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
 msgstr "Promena lozinke"
 
-#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/base.html:47
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Odjava"
 
@@ -588,42 +635,43 @@
 msgid "Django administration"
 msgstr "Django administracija"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
 msgstr "Dodaj"
 
-#: contrib/admin/templates/admin/change_form.html:27
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Istorijat"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:27
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Pregled na sajtu"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:54
-#: contrib/admin/templates/admin/auth/user/change_password.html:23
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
 msgstr[0] "Ispravite grešku dole."
 msgstr[1] "Ispravite greške dole."
 msgstr[2] "Ispravite greške dole."
 
-#: contrib/admin/templates/admin/change_list.html:46
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
 msgstr "Dodaj objekat klase %(name)s"
 
-#: contrib/admin/templates/admin/change_list.html:65
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Filter"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Obriši"
 
@@ -634,9 +682,9 @@
 "related objects, but your account doesn't have permission to delete the "
 "following types of objects:"
 msgstr ""
-"Uklanjanje %(object_name)s „%(escaped_object)s“ povlači uklanjanje svih objekata "
-"koji su povezani sa ovim objektom, ali vaš nalog nema dozvole za brisanje "
-"sledećih tipova objekata:"
+"Uklanjanje %(object_name)s „%(escaped_object)s“ povlači uklanjanje svih "
+"objekata koji su povezani sa ovim objektom, ali vaš nalog nema dozvole za "
+"brisanje sledećih tipova objekata:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:23
 #, python-format
@@ -663,15 +711,15 @@
 "your account doesn't have permission to delete the following types of "
 "objects:"
 msgstr ""
-"Uklanjanje %(object_name)s povlači uklanjanje svih objekata koji su povezani sa "
-"ovim objektom, ali vaš nalog nema dozvole za brisanje sledećih tipova "
+"Uklanjanje %(object_name)s povlači uklanjanje svih objekata koji su povezani "
+"sa ovim objektom, ali vaš nalog nema dozvole za brisanje sledećih tipova "
 "objekata:"
 
 #: contrib/admin/templates/admin/delete_selected_confirmation.html:22
 #, python-format
 msgid ""
 "Are you sure you want to delete the selected %(object_name)s objects? All of "
-"the following objects and it's related items will be deleted:"
+"the following objects and their related items will be deleted:"
 msgstr ""
 "Da sigurni da želite da obrišete odabrane %(object_name)s? Sledeći objekti "
 "koji su u vezi sa ovim objektom će takođe biti obrisani:"
@@ -736,15 +784,9 @@
 msgstr "Korisnik"
 
 #: contrib/admin/templates/admin/object_history.html:24
-#: contrib/comments/templates/comments/moderation_queue.html:33
 msgid "Action"
 msgstr "Radnja"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:400
-msgid "DATETIME_FORMAT"
-msgstr "j. N. Y. G:i T"
-
 #: contrib/admin/templates/admin/object_history.html:38
 msgid ""
 "This object doesn't have a change history. It probably wasn't added via this "
@@ -757,6 +799,11 @@
 msgid "Show all"
 msgstr "Prikaži sve"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Sačuvaj"
+
 #: contrib/admin/templates/admin/search_form.html:8
 msgid "Search"
 msgstr "Pretraga"
@@ -774,10 +821,6 @@
 msgid "%(full_result_count)s total"
 msgstr "ukupno %(full_result_count)s"
 
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Sačuvaj"
-
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
 msgstr "Sačuvaj kao novi"
@@ -790,7 +833,7 @@
 msgid "Save and continue editing"
 msgstr "Sačuvaj i nastavi sa izmenama"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
 msgid ""
 "First, enter a username and password. Then, you'll be able to edit more user "
 "options."
@@ -798,33 +841,39 @@
 "Prvo unesite korisničko ime i lozinku. Potom ćete moći da menjate još "
 "korisničkih podešavanja."
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:47 contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Korisnik"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:34
-#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
-msgid "Password"
-msgstr "Lozinka"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-#: contrib/auth/forms.py:186
-msgid "Password (again)"
-msgstr "Lozinka (ponovite)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
-msgid "Enter the same password as above, for verification."
-msgstr "Radi provere tačnosti ponovo unesite lozinku koju ste uneli gore."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
 msgstr "Unesite novu lozinku za korisnika <strong>%(username)s</strong>."
 
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Lozinka"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Lozinka (ponovite)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Radi provere tačnosti ponovo unesite lozinku koju ste uneli gore."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Dodaj još jedan objekat klase %(verbose_name)s."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Obriši"
+
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
 msgstr "Brisanje?"
@@ -838,9 +887,9 @@
 msgstr "Ponovna prijava"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
 msgstr "Izmena lozinke"
 
@@ -853,7 +902,7 @@
 msgid "Your password was changed."
 msgstr "Vaša lozinka je izmenjena."
 
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: contrib/admin/templates/registration/password_change_form.html:21
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
@@ -861,21 +910,17 @@
 "Iz bezbednosnih razloga prvo unesite svoju staru lozinku, a novu zatim "
 "unesite dva puta da bismo mogli da proverimo da li ste je pravilno uneli."
 
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Stara lozinka:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Nova lozinka:"
-
-#: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Potvrda lozinke:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Stara lozinka"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Nova lozinka"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
 msgstr "Izmeni moju lozinku"
@@ -914,6 +959,14 @@
 "Unesite novu lozinku dva puta kako bismo mogli da proverimo da li ste je "
 "pravilno uneli."
 
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Nova lozinka:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Potvrda lozinke:"
+
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
 msgstr "Resetovanje lozinke neuspešno"
@@ -936,8 +989,8 @@
 "We've e-mailed you instructions for setting your password to the e-mail "
 "address you submitted. You should be receiving it shortly."
 msgstr ""
-"Poslali smo uputstva za postavljanje nove lozinke na imejl adresu koju ste nam "
-"dali. Uputstva ćete dobiti uskoro."
+"Poslali smo uputstva za postavljanje nove lozinke na imejl adresu koju ste "
+"nam dali. Uputstva ćete dobiti uskoro."
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
@@ -981,7 +1034,7 @@
 msgid "Reset my password"
 msgstr "Resetuj moju lozinku"
 
-#: contrib/admin/templatetags/admin_list.py:299
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Svi datumi"
 
@@ -995,158 +1048,77 @@
 msgid "Select %s to change"
 msgstr "Odaberi objekat klase %s za izmenu"
 
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "sajt"
 
-#: contrib/admin/views/template.py:39
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "templejt"
 
-#: contrib/admindocs/views.py:58 contrib/admindocs/views.py:60
-#: contrib/admindocs/views.py:62
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "tag:"
 
-#: contrib/admindocs/views.py:91 contrib/admindocs/views.py:93
-#: contrib/admindocs/views.py:95
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "filter:"
 
-#: contrib/admindocs/views.py:155 contrib/admindocs/views.py:157
-#: contrib/admindocs/views.py:159
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
 msgstr "vju:"
 
-#: contrib/admindocs/views.py:187
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "Aplikacija %r nije pronađena"
 
-#: contrib/admindocs/views.py:194
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r"
 
-#: contrib/admindocs/views.py:206
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "povezani objekti klase `%(app_label)s.%(data_type)s`"
 
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "model:"
 
 # WARN: possible breakage in future
 # This string is interpolated in strings below, which can cause breakage in
 # future releases.
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "klase `%(app_label)s.%(object_name)s`"
 
 # WARN: possible breakage in future
-#: contrib/admindocs/views.py:242
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "svi povezani objekti %s"
 
 # WARN: possible breakage in future
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "broj povezanih objekata %s"
 
 # WARN: possible breakage in future
-#: contrib/admindocs/views.py:252
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "Polja u povezanim objektima %s"
 
-#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
-msgid "Integer"
-msgstr "Ceo broj"
-
-#: contrib/admindocs/views.py:316
-msgid "Boolean (Either True or False)"
-msgstr "Bulova vrednost (True ili False)"
-
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "String (najviše %(max_length)s znakova)"
-
-#: contrib/admindocs/views.py:318
-msgid "Comma-separated integers"
-msgstr "Celi brojevi razdvojeni zapetama"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (without time)"
-msgstr "Datum (bez vremena)"
-
-#: contrib/admindocs/views.py:320
-msgid "Date (with time)"
-msgstr "Datum (sa vremenom)"
-
-#: contrib/admindocs/views.py:321
-msgid "Decimal number"
-msgstr "Decimalni broj"
-
-#: contrib/admindocs/views.py:322
-msgid "E-mail address"
-msgstr "Imejl adresa"
-
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
-msgid "File path"
-msgstr "Putanja fajla"
-
-#: contrib/admindocs/views.py:325
-msgid "Floating point number"
-msgstr "Broj sa pokrenom zapetom"
-
-#: contrib/admindocs/views.py:329 contrib/comments/models.py:60
-msgid "IP address"
-msgstr "IP adresa"
-
-#: contrib/admindocs/views.py:331
-msgid "Boolean (Either True, False or None)"
-msgstr "Bulova vrednost (True, False ili None)"
-
-#: contrib/admindocs/views.py:332
-msgid "Relation to parent model"
-msgstr "Veza sa roditeljskim modelom"
-
-#: contrib/admindocs/views.py:333
-msgid "Phone number"
-msgstr "Broj telefona"
-
-#: contrib/admindocs/views.py:338
-msgid "Text"
-msgstr "Tekst"
-
-#: contrib/admindocs/views.py:339
-msgid "Time"
-msgstr "Vreme"
-
-#: contrib/admindocs/views.py:340 contrib/comments/forms.py:95
-#: contrib/comments/templates/comments/moderation_queue.html:37
-#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:341
-msgid "U.S. state (two uppercase letters)"
-msgstr "Država u SAD (dva velika slova)"
-
-#: contrib/admindocs/views.py:342
-msgid "XML text"
-msgstr "XML tekst"
-
-#: contrib/admindocs/views.py:368
+#: contrib/admindocs/views.py:361
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s ne izgleda kao urlpattern objekat"
@@ -1219,78 +1191,75 @@
 msgstr ""
 "Isto kao prethodni, ali otvara administracionu stranicu u novom prozoru."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Lični podaci"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "Dozvole"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Važni datumi"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Grupe"
 
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Dodaj korisnika"
-
-#: contrib/auth/admin.py:106
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
 msgstr "Lozinka uspešno izmenjena."
 
-#: contrib/auth/admin.py:112
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
 msgstr "Izmeni lozinku: %s"
 
-#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:128
-msgid ""
-"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
-"digits and underscores)."
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Korisnik"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
 msgstr ""
 "Neophodno. Najviše 30 slovnih mesta. Samo alfanumerički znaci (slova, brojke "
-"i donja crta)."
-
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Ova vrednost može sadržati samo slova, brojke i donje crte."
+"i @/./+/-/_)."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Ova vrednost može sadržati samo slova, brojke i @/./+/-/_."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
 msgstr "Potvrda lozinke"
 
-#: contrib/auth/forms.py:30
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Korisnik sa tim korisničkim imenom već postoji."
 
-#: contrib/auth/forms.py:36 contrib/auth/forms.py:155
-#: contrib/auth/forms.py:197
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
 msgstr "Dva polja za lozinke se nisu poklopila."
 
-#: contrib/auth/forms.py:82
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Ovaj nalog je neaktivan."
 
-#: contrib/auth/forms.py:87
+#: contrib/auth/forms.py:88
 msgid ""
 "Your Web browser doesn't appear to have cookies enabled. Cookies are "
 "required for logging in."
 msgstr ""
-"Izgleda da su kolačići isključeni u vašem brauzeru. Oni moraju biti uključeni "
-"da bi ste se prijavili."
-
-#: contrib/auth/forms.py:100
+"Izgleda da su kolačići isključeni u vašem brauzeru. Oni moraju biti "
+"uključeni da bi ste se prijavili."
+
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "Imejl adresa"
 
-#: contrib/auth/forms.py:109
+#: contrib/auth/forms.py:110
 msgid ""
 "That e-mail address doesn't have an associated user account. Are you sure "
 "you've registered?"
@@ -1298,72 +1267,71 @@
 "Ta imejl adresa nije u vezi ni sa jednim nalogom. Da li ste sigurni da ste "
 "se već registrovali?"
 
-#: contrib/auth/forms.py:135
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
 msgstr "Resetovanje lozinke na %s"
 
-#: contrib/auth/forms.py:143
-msgid "New password"
-msgstr "Nova lozinka"
-
-#: contrib/auth/forms.py:144
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
 msgstr "Potvrda nove lozinke"
 
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Stara lozinka"
-
-#: contrib/auth/forms.py:177
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
 msgstr "Vaša stara loznka nije pravilno unesena. Unesite je ponovo."
 
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
 msgid "name"
 msgstr "ime"
 
-#: contrib/auth/models.py:65
+#: contrib/auth/models.py:68
 msgid "codename"
 msgstr "šifra dozvole"
 
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:72
 msgid "permission"
 msgstr "dozvola"
 
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "dozvole"
 
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "grupa"
 
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "grupe"
 
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "korisničko ime"
 
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Neophodno. Najviše 30 slovnih mesta. Samo alfanumerički znaci (slova, brojke "
+"i @/./+/-/_)."
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "ime"
 
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "prezime"
 
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "imejl adresa"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid "password"
 msgstr "lozinka"
 
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:200
 msgid ""
 "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
 "password form</a>."
@@ -1371,20 +1339,20 @@
 "Koristite '[algo]$[salt]$[hexdigest]' ili <a href=\"password/\">formular za "
 "unos lozinke</a>."
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "staff status"
 msgstr "status člana posade"
 
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
 msgstr ""
 "Označava da li korisnik može da se prijavi na ovaj sajt za administraciju."
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "aktivan"
 
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:202
 msgid ""
 "Designates whether this user should be treated as active. Unselect this "
 "instead of deleting accounts."
@@ -1392,26 +1360,27 @@
 "Označava da li se korisnik smatra aktivnim. Deselektujte ovo umesto da "
 "brišete nalog."
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid "superuser status"
 msgstr "status administratora"
 
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:203
 msgid ""
 "Designates that this user has all permissions without explicitly assigning "
 "them."
 msgstr ""
-"Označava da li korisnik ima sve dozvole bez dodeljivanja pojedinačnih dozvola."
-
-#: contrib/auth/models.py:136
+"Označava da li korisnik ima sve dozvole bez dodeljivanja pojedinačnih "
+"dozvola."
+
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "poslednja prijava"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "datum registracije"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:207
 msgid ""
 "In addition to the permissions manually assigned, this user will also get "
 "all permissions granted to each group he/she is in."
@@ -1419,39 +1388,81 @@
 "Pored ručno dodeljenih dozvola, ovaj korisnik će imati i dozvole dodeljene "
 "gurpama kojima pripada."
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "korisničke dozvole"
 
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
 #: contrib/comments/models.py:168
 msgid "user"
 msgstr "korisnik"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "korisnici"
 
-#: contrib/auth/models.py:301
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "poruka"
 
-#: contrib/auth/views.py:56
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Odjavljen"
 
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:429
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Unesite važeću imejl adresu."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "Sadržaj"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Metapodaci"
 
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "označen"
+msgstr[1] "označena"
+msgstr[2] "označenih"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Označavanje izabranih komentara"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "odobren"
+msgstr[1] "odobrena"
+msgstr[2] "odobrenih"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Odobrenje izabranih komentara"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "uklonjen"
+msgstr[1] "uklonjena"
+msgstr[2] "uklonjenih"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Obriši izabrane komentare"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "Nad jednim komentarom je uspešno urađeno: %(action)s."
+msgstr[1] "Nad %(count)s komentara je uspešno urađeno: %(action)s."
+msgstr[2] "Nad %(count)s komentara je uspešno urađeno: %(action)s."
+
 #: contrib/comments/feeds.py:13
 #, python-format
 msgid "%(site_name)s comments"
@@ -1463,7 +1474,6 @@
 msgstr "Skoriji komentari na sajtu %(site_name)s"
 
 #: contrib/comments/forms.py:93
-#: contrib/comments/templates/comments/moderation_queue.html:34
 msgid "Name"
 msgstr "Ime"
 
@@ -1471,12 +1481,16 @@
 msgid "Email address"
 msgstr "Imejl adresa"
 
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1114
+msgid "URL"
+msgstr "URL"
+
 #: contrib/comments/forms.py:96
-#: contrib/comments/templates/comments/moderation_queue.html:35
 msgid "Comment"
 msgstr "Komentari"
 
-#: contrib/comments/forms.py:173
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
@@ -1484,12 +1498,12 @@
 msgstr[1] "Pazi na jezik! Reči „%s“ ovde nisu dozvoljene."
 msgstr[2] "Pazi na jezik! Reči „%s“ ovde nisu dozvoljene."
 
-#: contrib/comments/forms.py:180
+#: contrib/comments/forms.py:182
 msgid ""
 "If you enter anything in this field your comment will be treated as spam"
 msgstr "Ako išta unesete u ovo polje, Vaš komentar će se smatrati spamom."
 
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
 msgid "content type"
 msgstr "tip sadržaja"
 
@@ -1518,6 +1532,10 @@
 msgid "date/time submitted"
 msgstr "datum/vreme postavljanja"
 
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:909
+msgid "IP address"
+msgstr "IP adresa"
+
 #: contrib/comments/models.py:61
 msgid "is public"
 msgstr "javno"
@@ -1537,8 +1555,8 @@
 "Check this box if the comment is inappropriate. A \"This comment has been "
 "removed\" message will be displayed instead."
 msgstr ""
-"Obeležite ovu kućicu ako je komentar neprikladan. Poruka o uklanjanju će biti "
-"prikazana umesto komentara."
+"Obeležite ovu kućicu ako je komentar neprikladan. Poruka o uklanjanju će "
+"biti prikazana umesto komentara."
 
 #: contrib/comments/models.py:77
 msgid "comments"
@@ -1557,8 +1575,8 @@
 "This comment was posted by an authenticated user and thus the email is read-"
 "only."
 msgstr ""
-"Ovaj komentar je postavio prijavljen korisnik i zato je polje sa imejl adresom "
-"zaključano."
+"Ovaj komentar je postavio prijavljen korisnik i zato je polje sa imejl "
+"adresom zaključano."
 
 #: contrib/comments/models.py:153
 #, python-format
@@ -1600,7 +1618,6 @@
 msgstr "Da li zaista želite da označite ovaj komentar javnim?"
 
 #: contrib/comments/templates/comments/approve.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:49
 msgid "Approve"
 msgstr "Odobri"
 
@@ -1623,11 +1640,6 @@
 msgid "Really remove this comment?"
 msgstr "Da li zaista želite da obrišete ovaj komentar?"
 
-#: contrib/comments/templates/comments/delete.html:12
-#: contrib/comments/templates/comments/moderation_queue.html:53
-msgid "Remove"
-msgstr "Obriši"
-
 #: contrib/comments/templates/comments/deleted.html:4
 msgid "Thanks for removing"
 msgstr "Hvala što koristite naš sajt!"
@@ -1658,39 +1670,6 @@
 msgid "Preview"
 msgstr "Pregled"
 
-#: contrib/comments/templates/comments/moderation_queue.html:4
-#: contrib/comments/templates/comments/moderation_queue.html:19
-msgid "Comment moderation queue"
-msgstr "Komentari koji čekaju na odobrenje"
-
-#: contrib/comments/templates/comments/moderation_queue.html:26
-msgid "No comments to moderate"
-msgstr "Nema komentara na čekanju"
-
-#: contrib/comments/templates/comments/moderation_queue.html:36
-msgid "Email"
-msgstr "Imejl adresa"
-
-#: contrib/comments/templates/comments/moderation_queue.html:38
-msgid "Authenticated?"
-msgstr "Prijavljen?"
-
-#: contrib/comments/templates/comments/moderation_queue.html:39
-msgid "IP Address"
-msgstr "IP adresa"
-
-#: contrib/comments/templates/comments/moderation_queue.html:40
-msgid "Date posted"
-msgstr "Datum postavljanja"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "yes"
-msgstr "da"
-
-#: contrib/comments/templates/comments/moderation_queue.html:63
-msgid "no"
-msgstr "ne"
-
 #: contrib/comments/templates/comments/posted.html:4
 msgid "Thanks for commenting"
 msgstr "Hvala na komentaru"
@@ -1719,11 +1698,11 @@
 msgid "or make changes"
 msgstr "ili izvrši izmene"
 
-#: contrib/contenttypes/models.py:70
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "ime python klase modela"
 
-#: contrib/contenttypes/models.py:75
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "tipovi sadržaja"
 
@@ -1777,7 +1756,8 @@
 #: contrib/flatpages/models.py:13
 msgid "If this is checked, only logged-in users will be able to view the page."
 msgstr ""
-"Ako je ovo obeleženo, samo će prijavljeni korisnici moći da vide ovu stranicu."
+"Ako je ovo obeleženo, samo će prijavljeni korisnici moći da vide ovu "
+"stranicu."
 
 #: contrib/flatpages/models.py:18
 msgid "flat page"
@@ -1787,7 +1767,7 @@
 msgid "flat pages"
 msgstr "flet stranice"
 
-#: contrib/formtools/wizard.py:130
+#: contrib/formtools/wizard.py:140
 msgid ""
 "We apologize, but your form has expired. Please continue filling out the "
 "form from this page."
@@ -1795,6 +1775,39 @@
 "Žao nam je, ali Vaša sesija je istekla. Popunjavanje formulara nastavite na "
 "ovoj stranici."
 
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+"Osnovno „GIS“ polje koje mapira tip geometrije po „OpenGIS“ specifikaciji."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Tačka"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Linija"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Poligon"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Više tačaka"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Više linija"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Više poligona"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Kolekcija geopmetrijskih oblika"
+
 #: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Niste zadali parametre za geometriju."
@@ -1811,7 +1824,7 @@
 msgid ""
 "An error occurred when transforming the geometry to the SRID of the geometry "
 "form field."
-msgstr ""
+msgstr "Greška se desila tokom transformacije geometrije na „SRID“ tip polja."
 
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
@@ -1901,25 +1914,25 @@
 msgid "yesterday"
 msgstr "juče"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "Unesite poštanski broj u formatu NNNN ili ANNNNAAA."
 
-#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Ovo polje mora sadržati samo brojke."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Ovo polje mora sadržati 7 ili 8 cifara"
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "Unestie važeći CUIT u formatu XX-XXXXXXXX-X or XXXXXXXXXXXX."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "Nevažeći CUIT"
 
@@ -1959,8 +1972,8 @@
 msgid "Vienna"
 msgstr "Beč"
 
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "Unesite poštanski broj u formatu XXXX."
 
@@ -1969,45 +1982,45 @@
 msgstr ""
 "Unesite važeći austrijski broj socijalnog osiguranja u formatu XXXX XXXXXX."
 
-#: contrib/localflavor/au/forms.py:16
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "Unesite četvorocifreni poštanski broj"
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "Unesite poštanski broj u formatu XXXXX-XXX."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Broj telefona mora biti u formatu XX-XXXX-XXXX."
 
-#: contrib/localflavor/br/forms.py:58
+#: contrib/localflavor/br/forms.py:59
 msgid ""
 "Select a valid brazilian state. That state is not one of the available "
 "states."
 msgstr "Odaberite postojeću brazilsku državu. Ta država nije među ponuđenima."
 
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Nevažeći CPF broj"
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr ""
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr ""
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr ""
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr ""
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
 msgstr ""
 
@@ -2115,21 +2128,21 @@
 msgid "Zurich"
 msgstr ""
 
-#: contrib/localflavor/ch/forms.py:64
+#: contrib/localflavor/ch/forms.py:65
 msgid ""
 "Enter a valid Swiss identity or passport card number in X1234567<0 or "
 "1234567890 format."
 msgstr ""
 
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr ""
 
-#: contrib/localflavor/cl/forms.py:30
-msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
-
 #: contrib/localflavor/cl/forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr ""
 
@@ -2189,23 +2202,23 @@
 msgid "Moravian-Silesian Region"
 msgstr ""
 
-#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
 msgid "Enter a postal code in the format XXXXX or XXX XX."
 msgstr ""
 
-#: contrib/localflavor/cz/forms.py:47
-msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr ""
-
 #: contrib/localflavor/cz/forms.py:48
-msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
 msgstr ""
 
 #: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:50
 msgid "Enter a valid birth number."
 msgstr ""
 
-#: contrib/localflavor/cz/forms.py:106
+#: contrib/localflavor/cz/forms.py:107
 msgid "Enter a valid IC number."
 msgstr ""
 
@@ -2273,12 +2286,12 @@
 msgid "Thuringia"
 msgstr ""
 
-#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr ""
 
-#: contrib/localflavor/de/forms.py:41
+#: contrib/localflavor/de/forms.py:42
 msgid ""
 "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
 "format."
@@ -2551,71 +2564,503 @@
 msgid "Valencian Community"
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:39
+#: contrib/localflavor/es/forms.py:40
 msgid ""
 "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
 "9XXXXXXXX."
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:66
+#: contrib/localflavor/es/forms.py:67
 msgid "Please enter a valid NIF, NIE, or CIF."
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:67
-msgid "Please enter a valid NIF or NIE."
-msgstr ""
-
 #: contrib/localflavor/es/forms.py:68
-msgid "Invalid checksum for NIF."
+msgid "Please enter a valid NIF or NIE."
 msgstr ""
 
 #: contrib/localflavor/es/forms.py:69
-msgid "Invalid checksum for NIE."
+msgid "Invalid checksum for NIF."
 msgstr ""
 
 #: contrib/localflavor/es/forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr ""
 
-#: contrib/localflavor/es/forms.py:142
-msgid ""
-"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr ""
-
 #: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr ""
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr ""
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr ""
 
-#: contrib/localflavor/is_/forms.py:17
-msgid ""
-"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
-msgstr ""
-
 #: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr ""
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr ""
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr ""
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr ""
 
@@ -2811,6 +3256,10 @@
 msgid "Okinawa"
 msgstr ""
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr ""
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr ""
@@ -2939,15 +3388,11 @@
 msgid "Zacatecas"
 msgstr ""
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr ""
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr ""
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr ""
 
@@ -2999,15 +3444,15 @@
 msgid "Zuid-Holland"
 msgstr ""
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr ""
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr ""
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr ""
 
@@ -3104,6 +3549,14 @@
 msgid "West Pomerania"
 msgstr ""
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr ""
@@ -3124,6 +3577,106 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr ""
 
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
 msgstr ""
@@ -3756,19 +4309,43 @@
 msgid "Wales"
 msgstr ""
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr ""
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
 msgstr ""
 
-#: contrib/localflavor/za/forms.py:20
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr ""
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Država u SAD (dva velika slova)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Broj telefona"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr ""
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr ""
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr ""
 
@@ -3808,6 +4385,10 @@
 msgid "Western Cape"
 msgstr ""
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "poruka"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "preusmeren sa"
@@ -3872,59 +4453,220 @@
 msgid "sites"
 msgstr "sajtovi"
 
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
-msgid "This value must be an integer."
-msgstr "Ova vrednost mora biti celobrojna."
-
-#: db/models/fields/__init__.py:388
-msgid "This value must be either True or False."
-msgstr "Ova vrednost mora biti True ili False."
-
-#: db/models/fields/__init__.py:427
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Unesite ispravnu vrednost."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Unesite ispravan URL."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Ovaj URL izgleda ne vodi nikuda."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+"Unesite isrpavan „slag“, koji se sastoji od slova, brojki, donjih crta ili "
+"cirtica."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Unesite ispravnu IPv4 adresu."
+
+#: core/validators.py:129 db/models/fields/__init__.py:585
+msgid "Enter only digits separated by commas."
+msgstr "Unesite samo brojke razdvojene zapetama."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr "Ovo polje mora da bude %(limit_value)s (trenutno ima %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr "Ova vrednost mora da bude manja od %(limit_value)s. ili tačno toliko."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr "Ova vrednost mora biti veća od %(limit_value)s ili tačno toliko."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Ovo polje mora sadržati najmanje %(limit_value)d slovnih mesta (trenutno ima "
+"%(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Ovo polje mora sadržati najviše %(limit_value)d slovnih mesta (trenutno ima %"
+"(show_value)d)."
+
+#: db/models/base.py:818
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "%(field_name)s mora da bude jedinstven za %(date_field)s %(lookup)s."
+
+#: db/models/base.py:833 db/models/base.py:841
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s sa ovom vrednošću %(field_label)s već postoji."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "Vrednost %r nije dozvoljena."
+
+#: db/models/fields/__init__.py:64
 msgid "This field cannot be null."
 msgstr "Ovo polje ne može ostati prazno."
 
-#: db/models/fields/__init__.py:443
-msgid "Enter only digits separated by commas."
-msgstr "Unesite samo brojke razdvojene zapetama."
-
-#: db/models/fields/__init__.py:474
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Ovo polje ne može ostati prazno."
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Ponje tipa: %(field_type)s"
+
+#: db/models/fields/__init__.py:464 db/models/fields/__init__.py:865
+#: db/models/fields/__init__.py:974 db/models/fields/__init__.py:985
+#: db/models/fields/__init__.py:1012
+msgid "Integer"
+msgstr "Ceo broj"
+
+#: db/models/fields/__init__.py:468 db/models/fields/__init__.py:863
+msgid "This value must be an integer."
+msgstr "Ova vrednost mora biti celobrojna."
+
+#: db/models/fields/__init__.py:503
+msgid "This value must be either True or False."
+msgstr "Ova vrednost mora biti True ili False."
+
+#: db/models/fields/__init__.py:505
+msgid "Boolean (Either True or False)"
+msgstr "Bulova vrednost (True ili False)"
+
+#: db/models/fields/__init__.py:552 db/models/fields/__init__.py:995
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "String (najviše %(max_length)s znakova)"
+
+#: db/models/fields/__init__.py:580
+msgid "Comma-separated integers"
+msgstr "Celi brojevi razdvojeni zapetama"
+
+#: db/models/fields/__init__.py:594
+msgid "Date (without time)"
+msgstr "Datum (bez vremena)"
+
+#: db/models/fields/__init__.py:598
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "Unesite ispravan datum u formatu GGGG-MM-DD."
 
-#: db/models/fields/__init__.py:483
+#: db/models/fields/__init__.py:599
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Neispravan datum: %s"
 
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: db/models/fields/__init__.py:680
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
 msgstr "Unesite ispravan datum/vreme u formatu GGGG-MM-DD ČČ:MM[:ss[.uuuuuu]."
 
-#: db/models/fields/__init__.py:601
+#: db/models/fields/__init__.py:682
+msgid "Date (with time)"
+msgstr "Datum (sa vremenom)"
+
+#: db/models/fields/__init__.py:748
 msgid "This value must be a decimal number."
 msgstr "Ova vrednost mora biti decimalni broj"
 
-#: db/models/fields/__init__.py:686
+#: db/models/fields/__init__.py:750
+msgid "Decimal number"
+msgstr "Decimalni broj"
+
+#: db/models/fields/__init__.py:805
+msgid "E-mail address"
+msgstr "Imejl adresa"
+
+#: db/models/fields/__init__.py:812 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Putanja fajla"
+
+#: db/models/fields/__init__.py:835
 msgid "This value must be a float."
 msgstr "Ova vrednost mora biti broj sa klizećom zapetom"
 
-#: db/models/fields/__init__.py:746
+#: db/models/fields/__init__.py:837
+msgid "Floating point number"
+msgstr "Broj sa pokrenom zapetom"
+
+#: db/models/fields/__init__.py:896
+msgid "Big (8 byte) integer"
+msgstr "Veliki ceo broj"
+
+#: db/models/fields/__init__.py:925
 msgid "This value must be either None, True or False."
 msgstr "Ova vrednost mora biti ili None, ili True, ili False."
 
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: db/models/fields/__init__.py:927
+msgid "Boolean (Either True, False or None)"
+msgstr "Bulova vrednost (True, False ili None)"
+
+#: db/models/fields/__init__.py:1018
+msgid "Text"
+msgstr "Tekst"
+
+#: db/models/fields/__init__.py:1034
+msgid "Time"
+msgstr "Vreme"
+
+#: db/models/fields/__init__.py:1038
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "Unesite ispravno vreme u formatu ČČ:MM[:ss[.uuuuuu]]."
 
-#: db/models/fields/related.py:792
+#: db/models/fields/__init__.py:1122
+msgid "XML text"
+msgstr "XML tekst"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Objekat klase %(model)s sa primarnim ključem %(pk)r ne postoji."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Strani ključ (tip određuje referentno polje)"
+
+#: db/models/fields/related.py:923
+msgid "One-to-one relationship"
+msgstr "Relacija jedan na jedan"
+
+#: db/models/fields/related.py:983
+msgid "Many-to-many relationship"
+msgstr "Relacija više na više"
+
+#: db/models/fields/related.py:1003
 msgid ""
 "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
 msgstr ""
 "Držite „Control“, ili „Command“ na Mac-u da biste obeležili više od jedne "
 "stavke."
 
-#: db/models/fields/related.py:870
+#: db/models/fields/related.py:1064
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
 msgid_plural ""
@@ -3933,86 +4675,58 @@
 msgstr[1] "Unesite ispravan %(self)s IDs. Vrednosti %(value)r su neispravne."
 msgstr[2] "Unesite ispravan %(self)s IDs. Vrednosti %(value)r su neispravne."
 
-#: forms/fields.py:54
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Ovo polje se mora popuniti."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Unesite ispravnu vrednost."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr ""
-"Ovo polje mora sadržati najviše %(max)d slovnih mesta (trenutno ima %(length)"
-"d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr ""
-"Ovo polje mora sadržati najmanje %(min)d slovnih mesta (trenutno ima %(length)"
-"d."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Unesite ceo broj."
 
-#: forms/fields.py:167 forms/fields.py:196 forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Ova vrednost mora da bude manja od %s ili tačno toliko."
-
-#: forms/fields.py:168 forms/fields.py:197 forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Ova vrednost mora biti veća od %s ili tačno toliko."
-
-#: forms/fields.py:195 forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Unesite broj."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Ne sme biti ukupno više od %s cifara. Proverite."
 
-#: forms/fields.py:228
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "Ne sme biti ukupno više od %s decimalnih mesta. Proverite."
 
-#: forms/fields.py:229
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Ne sme biti ukupno više od %s cifara pre zapete. Proverite."
 
-#: forms/fields.py:288 forms/fields.py:863
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Unesite ispravan datum."
 
-#: forms/fields.py:322 forms/fields.py:864
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Unesite ispravno vreme"
 
-#: forms/fields.py:361
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Unesite ispravan datum/vreme."
 
-#: forms/fields.py:447
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "Fajl nije prebačen. Proverite tip enkodiranja formulara."
 
-#: forms/fields.py:448
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Fajl nije prebačen."
 
-#: forms/fields.py:449
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Prebačen fajl je prazan."
 
-#: forms/fields.py:450
+#: forms/fields.py:438
 #, python-format
 msgid ""
 "Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4020,7 +4734,7 @@
 "Naziv fajla mora da sadrži bar %(max)d slovnih mesta (trenutno ima %(length)"
 "d)."
 
-#: forms/fields.py:483
+#: forms/fields.py:473
 msgid ""
 "Upload a valid image. The file you uploaded was either not an image or a "
 "corrupted image."
@@ -4028,61 +4742,32 @@
 "Prebacite ispravan fajl. Fajl koji je prebačen ili nije slika, ili je "
 "oštećen."
 
-#: forms/fields.py:544
-msgid "Enter a valid URL."
-msgstr "Unesite ispravan URL."
-
-#: forms/fields.py:545
-msgid "This URL appears to be a broken link."
-msgstr "Ovaj URL izgleda ne vodi nikuda."
-
-#: forms/fields.py:625 forms/fields.py:703
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr ""
 "%(value)s nije među ponuđenim vrednostima. Odaberite jednu od ponuđenih."
 
-#: forms/fields.py:704 forms/fields.py:765 forms/models.py:962
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:995
 msgid "Enter a list of values."
 msgstr "Unesite listu vrednosti."
 
-#: forms/fields.py:892
-msgid "Enter a valid IPv4 address."
-msgstr "Unesite ispravnu IPv4 adresu."
-
-#: forms/fields.py:902
-msgid ""
-"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr ""
-"Unesite isrpavan „slag“, koji se sastoji od slova, brojki, donjih crta ili "
-"cirtica."
-
-#: forms/formsets.py:271 forms/formsets.py:273
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Redosled"
 
-#: forms/models.py:367
-#, python-format
-msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
-msgstr "%(field_name)s mora da bude jedinstven za %(date_field)s %(lookup)s."
-
-#: forms/models.py:381 forms/models.py:389
-#, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(model_name)s sa ovom vrednošću %(field_label)s već postoji."
-
-#: forms/models.py:581
+#: forms/models.py:556
 #, python-format
 msgid "Please correct the duplicate data for %(field)s."
 msgstr "Ispravite dupliran sadržaj za polja: %(field)s."
 
-#: forms/models.py:585
+#: forms/models.py:560
 #, python-format
 msgid "Please correct the duplicate data for %(field)s, which must be unique."
 msgstr ""
 "Ispravite dupliran sadržaj za polja: %(field)s, koji mora da bude jedinstven."
 
-#: forms/models.py:591
+#: forms/models.py:566
 #, python-format
 msgid ""
 "Please correct the duplicate data for %(field_name)s which must be unique "
@@ -4091,33 +4776,33 @@
 "Ispravite dupliran sadržaj za polja: %(field_name)s, koji mora da bude "
 "jedinstven za %(lookup)s u %(date_field)s."
 
-#: forms/models.py:599
+#: forms/models.py:574
 msgid "Please correct the duplicate values below."
 msgstr "Ispravite duplirane vrednosti dole."
 
-#: forms/models.py:837
+#: forms/models.py:848
 msgid "The inline foreign key did not match the parent instance primary key."
 msgstr "Strani ključ se nije poklopio sa instancom roditeljskog ključa."
 
-#: forms/models.py:892
+#: forms/models.py:914
 msgid "Select a valid choice. That choice is not one of the available choices."
 msgstr "Odabrana vrednost nije među ponuđenima. Odaberite jednu od ponuđenih."
 
-#: forms/models.py:963
+#: forms/models.py:996
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "%s nije među ponuđenim vrednostima. Odaberite jednu od ponuđenih."
 
-#: forms/models.py:965
+#: forms/models.py:998
 #, python-format
 msgid "\"%s\" is not a valid value for a primary key."
 msgstr "„%s“ nije ispravna vrednost za primarni ključ."
 
-#: template/defaultfilters.py:767
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "da,ne,možda"
 
-#: template/defaultfilters.py:798
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
@@ -4125,17 +4810,17 @@
 msgstr[1] "%(size)d bajta"
 msgstr[2] "%(size)d bajtova"
 
-#: template/defaultfilters.py:800
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:802
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:803
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
@@ -4344,7 +5029,7 @@
 msgid "Dec."
 msgstr "dec."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "ili"
 
@@ -4404,33 +5089,37 @@
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:399
+#: utils/translation/trans_real.py:512
 msgid "DATE_FORMAT"
-msgstr "j. N Y."
-
-#: utils/translation/trans_real.py:401
+msgstr "j. F Y."
+
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "j. F Y. H:i T"
+
+#: utils/translation/trans_real.py:514
 msgid "TIME_FORMAT"
 msgstr "G:i"
 
-#: utils/translation/trans_real.py:417
+#: utils/translation/trans_real.py:535
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y."
 
-#: utils/translation/trans_real.py:418
+#: utils/translation/trans_real.py:536
 msgid "MONTH_DAY_FORMAT"
 msgstr "j. F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "%(verbose_name)s je uspešno kreiran."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "%(verbose_name)s je uspešno ažuriran."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s je obrisan."
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/sr_Latn/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,44 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j. F Y.'
+TIME_FORMAT = 'H:i'
+DATETIME_FORMAT = 'j. F Y. H:i'
+YEAR_MONTH_FORMAT = 'F Y.'
+MONTH_DAY_FORMAT = 'j. F'
+SHORT_DATE_FORMAT = 'j.m.Y.'
+SHORT_DATETIME_FORMAT = 'j.m.Y. H:i'
+FIRST_DAY_OF_WEEK = 1
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d',                     # '2006-10-25'
+    '%d.%m.%Y.', '%d.%m.%y.',       # '25.10.2006.', '25.10.06.'
+    '%d. %m. %Y.', '%d. %m. %y.',   # '25. 10. 2006.', '25. 10. 06.'
+    # '%d. %b %y.', '%d. %B %y.',     # '25. Oct 06.', '25. October 06.'
+    # '%d. %b \'%y.', '%d. %B \'%y.', # '25. Oct '06.', '25. October '06.'
+    # '%d. %b %Y.', '%d. %B %Y.',     # '25. Oct 2006.', '25. October 2006.'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S',     # '14:30:59'
+    '%H:%M',        # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%M:%S',      # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',         # '2006-10-25 14:30'
+    '%Y-%m-%d',               # '2006-10-25'
+    '%d.%m.%Y. %H:%M:%S',     # '25.10.2006. 14:30:59'
+    '%d.%m.%Y. %H:%M',        # '25.10.2006. 14:30'
+    '%d.%m.%Y.',              # '25.10.2006.'
+    '%d.%m.%y. %H:%M:%S',     # '25.10.06. 14:30:59'
+    '%d.%m.%y. %H:%M',        # '25.10.06. 14:30'
+    '%d.%m.%y.',              # '25.10.06.'
+    '%d. %m. %Y. %H:%M:%S',   # '25. 10. 2006. 14:30:59'
+    '%d. %m. %Y. %H:%M',      # '25. 10. 2006. 14:30'
+    '%d. %m. %Y.',            # '25. 10. 2006.'
+    '%d. %m. %y. %H:%M:%S',   # '25. 10. 06. 14:30:59'
+    '%d. %m. %y. %H:%M',      # '25. 10. 06. 14:30'
+    '%d. %m. %y.',            # '25. 10. 06.'
+)
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/sv/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/sv/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/sv/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -8,7 +8,7 @@
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-05-01 18:23+0200\n"
 "PO-Revision-Date: 2008-05-26 11:15+0200\n"
-"Last-Translator: Ludvig Ericson <ludvig.ericson@gmail.com>\n"
+"Last-Translator: Mikko Hellsing <mikko@aino.se>\n"
 "Language-Team: Django I18N <Django-I18N@googlegroups.com>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -4131,107 +4131,107 @@
 
 #: utils/dates.py:6
 msgid "Monday"
-msgstr "Måndag"
+msgstr "måndag"
 
 #: utils/dates.py:6
 msgid "Tuesday"
-msgstr "Tisdag"
+msgstr "tisdag"
 
 #: utils/dates.py:6
 msgid "Wednesday"
-msgstr "Onsdag"
+msgstr "onsdag"
 
 #: utils/dates.py:6
 msgid "Thursday"
-msgstr "Torsdag"
+msgstr "torsdag"
 
 #: utils/dates.py:6
 msgid "Friday"
-msgstr "Fredag"
+msgstr "fredag"
 
 #: utils/dates.py:7
 msgid "Saturday"
-msgstr "Lördag"
+msgstr "lördag"
 
 #: utils/dates.py:7
 msgid "Sunday"
-msgstr "Söndag"
+msgstr "söndag"
 
 #: utils/dates.py:10
 msgid "Mon"
-msgstr "Mån"
+msgstr "mån"
 
 #: utils/dates.py:10
 msgid "Tue"
-msgstr "Tis"
+msgstr "tis"
 
 #: utils/dates.py:10
 msgid "Wed"
-msgstr "Ons"
+msgstr "ons"
 
 #: utils/dates.py:10
 msgid "Thu"
-msgstr "Tors"
+msgstr "tors"
 
 #: utils/dates.py:10
 msgid "Fri"
-msgstr "Fre"
+msgstr "fre"
 
 #: utils/dates.py:11
 msgid "Sat"
-msgstr "Lör"
+msgstr "lör"
 
 #: utils/dates.py:11
 msgid "Sun"
-msgstr "Sön"
+msgstr "sön"
 
 #: utils/dates.py:18
 msgid "January"
-msgstr "Januari"
+msgstr "januari"
 
 #: utils/dates.py:18
 msgid "February"
-msgstr "Februari"
+msgstr "februari"
 
 #: utils/dates.py:18 utils/dates.py:31
 msgid "March"
-msgstr "Mars"
+msgstr "mars"
 
 #: utils/dates.py:18 utils/dates.py:31
 msgid "April"
-msgstr "April"
+msgstr "april"
 
 #: utils/dates.py:18 utils/dates.py:31
 msgid "May"
-msgstr "Maj"
+msgstr "maj"
 
 #: utils/dates.py:18 utils/dates.py:31
 msgid "June"
-msgstr "Juni"
+msgstr "juni"
 
 #: utils/dates.py:19 utils/dates.py:31
 msgid "July"
-msgstr "Juli"
+msgstr "juli"
 
 #: utils/dates.py:19
 msgid "August"
-msgstr "Augusti"
+msgstr "augusti"
 
 #: utils/dates.py:19
 msgid "September"
-msgstr "September"
+msgstr "september"
 
 #: utils/dates.py:19
 msgid "October"
-msgstr "Oktober"
+msgstr "oktober"
 
 #: utils/dates.py:19
 msgid "November"
-msgstr "November"
+msgstr "november"
 
 #: utils/dates.py:20
 msgid "December"
-msgstr "December"
+msgstr "december"
 
 #: utils/dates.py:23
 msgid "jan"
@@ -4283,31 +4283,31 @@
 
 #: utils/dates.py:31
 msgid "Jan."
-msgstr "Jan."
+msgstr "jan."
 
 #: utils/dates.py:31
 msgid "Feb."
-msgstr "Feb."
+msgstr "feb."
 
 #: utils/dates.py:32
 msgid "Aug."
-msgstr "Aug."
+msgstr "aug."
 
 #: utils/dates.py:32
 msgid "Sept."
-msgstr "Sept."
+msgstr "sept."
 
 #: utils/dates.py:32
 msgid "Oct."
-msgstr "Okt."
+msgstr "okt."
 
 #: utils/dates.py:32
 msgid "Nov."
-msgstr "Nov."
+msgstr "nov."
 
 #: utils/dates.py:32
 msgid "Dec."
-msgstr "Dec."
+msgstr "dec."
 
 #: utils/text.py:128
 msgid "or"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/sv/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,24 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'H:i'
+DATETIME_FORMAT = 'j F Y H:i'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'Y-m-d'
+SHORT_DATETIME_FORMAT = 'Y-m-d H:i'
+FIRST_DAY_OF_WEEK = 1
+DATE_INPUT_FORMATS = (
+    '%Y-%m-%d',                     # '2006-10-25'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%i',                        # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%Y-%m-%d %H:%i',               # '2006-10-25 14:30'
+)
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ' '
+NUMBER_GROUPING = 3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/ta/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F, Y'
+TIME_FORMAT = 'g:i:s A'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j M, Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+# DECIMAL_SEPARATOR = 
+# THOUSAND_SEPARATOR = 
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/te/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'g:i:s A'
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j M Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+# DECIMAL_SEPARATOR = 
+# THOUSAND_SEPARATOR = 
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/th/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y'
+TIME_FORMAT = 'G:i:s'
+DATETIME_FORMAT = 'j F Y, G:i:s'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j M Y'
+SHORT_DATETIME_FORMAT = 'j M Y, G:i:s'
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = '.'
+THOUSAND_SEPARATOR = ','
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/tr/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/tr/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/tr/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -5,8 +5,8 @@
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-09-03 09:44+0300\n"
-"PO-Revision-Date: 2008-09-03 09:41+0200\n"
+"POT-Creation-Date: 2010-05-02 01:05+0300\n"
+"PO-Revision-Date: 2010-05-02 01:06+0300\n"
 "Last-Translator: Metin Amiroff <amiroff@gmail.com>\n"
 "Language-Team: Turkish <bahadir@pardus.org.tr>\n"
 "MIME-Version: 1.0\n"
@@ -20,210 +20,262 @@
 msgstr "Arapça"
 
 #: conf/global_settings.py:45
-msgid "Bengali"
-msgstr "Bengali Dili"
+msgid "Bulgarian"
+msgstr "Bulgarca"
 
 #: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "Bulgarca"
+msgid "Bengali"
+msgstr "Bengali Dili"
 
 #: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr "Boşnakça"
+
+#: conf/global_settings.py:48
 msgid "Catalan"
 msgstr "Katalanca"
 
-#: conf/global_settings.py:48
+#: conf/global_settings.py:49
 msgid "Czech"
 msgstr "Çekçe"
 
-#: conf/global_settings.py:49
+#: conf/global_settings.py:50
 msgid "Welsh"
 msgstr "Galce"
 
-#: conf/global_settings.py:50
+#: conf/global_settings.py:51
 msgid "Danish"
 msgstr "Danca"
 
-#: conf/global_settings.py:51
+#: conf/global_settings.py:52
 msgid "German"
 msgstr "Almanca"
 
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
 msgid "Greek"
 msgstr "Yunanca"
 
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
 msgid "English"
 msgstr "İngilizce"
 
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
+msgid "British English"
+msgstr "İngiltere İngilizce"
+
+#: conf/global_settings.py:56
 msgid "Spanish"
 msgstr "İspanyolca"
 
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "Estonca"
-
-#: conf/global_settings.py:56
+#: conf/global_settings.py:57
 msgid "Argentinean Spanish"
 msgstr "Arjantin İspanyolcası"
 
-#: conf/global_settings.py:57
+#: conf/global_settings.py:58
+msgid "Estonian"
+msgstr "Estonca"
+
+#: conf/global_settings.py:59
 msgid "Basque"
 msgstr "Baskça"
 
-#: conf/global_settings.py:58
+#: conf/global_settings.py:60
 msgid "Persian"
 msgstr "Farsça"
 
-#: conf/global_settings.py:59
+#: conf/global_settings.py:61
 msgid "Finnish"
 msgstr "Fince"
 
-#: conf/global_settings.py:60
+#: conf/global_settings.py:62
 msgid "French"
 msgstr "Fransızca"
 
-#: conf/global_settings.py:61
+#: conf/global_settings.py:63
+msgid "Frisian"
+msgstr "Frisce"
+
+#: conf/global_settings.py:64
 msgid "Irish"
 msgstr "İrlandaca"
 
-#: conf/global_settings.py:62
+#: conf/global_settings.py:65
 msgid "Galician"
 msgstr "Galler Dili"
 
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "Macarca"
-
-#: conf/global_settings.py:64
+#: conf/global_settings.py:66
 msgid "Hebrew"
 msgstr "İbranice"
 
-#: conf/global_settings.py:65
+#: conf/global_settings.py:67
+msgid "Hindi"
+msgstr "Hinduca"
+
+#: conf/global_settings.py:68
 msgid "Croatian"
 msgstr "Hırvatça"
 
-#: conf/global_settings.py:66
+#: conf/global_settings.py:69
+msgid "Hungarian"
+msgstr "Macarca"
+
+#: conf/global_settings.py:70
 msgid "Icelandic"
 msgstr "İzlanda dili"
 
-#: conf/global_settings.py:67
+#: conf/global_settings.py:71
 msgid "Italian"
 msgstr "İtalyanca"
 
-#: conf/global_settings.py:68
+#: conf/global_settings.py:72
 msgid "Japanese"
 msgstr "Japonca"
 
-#: conf/global_settings.py:69
+#: conf/global_settings.py:73
 msgid "Georgian"
 msgstr "Gürcüce"
 
-#: conf/global_settings.py:70
-msgid "Korean"
-msgstr "Korece"
-
-#: conf/global_settings.py:71
+#: conf/global_settings.py:74
 msgid "Khmer"
 msgstr "Kamboçyaca"
 
-#: conf/global_settings.py:72
+#: conf/global_settings.py:75
 msgid "Kannada"
 msgstr "Kannada Dili"
 
-#: conf/global_settings.py:73
-msgid "Latvian"
-msgstr "Leton Dili"
-
-#: conf/global_settings.py:74
+#: conf/global_settings.py:76
+msgid "Korean"
+msgstr "Korece"
+
+#: conf/global_settings.py:77
 msgid "Lithuanian"
 msgstr "Litovca"
 
-#: conf/global_settings.py:75
+#: conf/global_settings.py:78
+msgid "Latvian"
+msgstr "Leton Dili"
+
+#: conf/global_settings.py:79
 msgid "Macedonian"
 msgstr "Makedonca"
 
-#: conf/global_settings.py:76
+#: conf/global_settings.py:80
 msgid "Dutch"
 msgstr "Flamanca"
 
-#: conf/global_settings.py:77
+#: conf/global_settings.py:81
 msgid "Norwegian"
 msgstr "Norveç Dili"
 
-#: conf/global_settings.py:78
+#: conf/global_settings.py:82
+msgid "Norwegian Bokmal"
+msgstr "Norveçce (Bokmal)"
+
+#: conf/global_settings.py:83
+msgid "Norwegian Nynorsk"
+msgstr "Norveçce (Nynorsk)"
+
+#: conf/global_settings.py:84
 msgid "Polish"
 msgstr "Lehçe"
 
-#: conf/global_settings.py:79
-msgid "Portugese"
+#: conf/global_settings.py:85
+msgid "Portuguese"
 msgstr "Portekizce"
 
-#: conf/global_settings.py:80
+#: conf/global_settings.py:86
 msgid "Brazilian Portuguese"
 msgstr "Brezilya Portekizcesi"
 
-#: conf/global_settings.py:81
+#: conf/global_settings.py:87
 msgid "Romanian"
 msgstr "Romence"
 
-#: conf/global_settings.py:82
+#: conf/global_settings.py:88
 msgid "Russian"
 msgstr "Rusça"
 
-#: conf/global_settings.py:83
+#: conf/global_settings.py:89
 msgid "Slovak"
 msgstr "Slovakça"
 
-#: conf/global_settings.py:84
+#: conf/global_settings.py:90
 msgid "Slovenian"
 msgstr "Slovence"
 
-#: conf/global_settings.py:85
+#: conf/global_settings.py:91
+msgid "Albanian"
+msgstr "Arnavutça"
+
+#: conf/global_settings.py:92
 msgid "Serbian"
 msgstr "Sırpça"
 
-#: conf/global_settings.py:86
+#: conf/global_settings.py:93
+msgid "Serbian Latin"
+msgstr "Sırp Latini"
+
+#: conf/global_settings.py:94
 msgid "Swedish"
 msgstr "İsveççe"
 
-#: conf/global_settings.py:87
+#: conf/global_settings.py:95
 msgid "Tamil"
 msgstr "Tamilce"
 
-#: conf/global_settings.py:88
+#: conf/global_settings.py:96
 msgid "Telugu"
 msgstr "Telugu Dili"
 
-#: conf/global_settings.py:89
+#: conf/global_settings.py:97
+msgid "Thai"
+msgstr "Tayca"
+
+#: conf/global_settings.py:98
 msgid "Turkish"
 msgstr "Türkçe"
 
-#: conf/global_settings.py:90
+#: conf/global_settings.py:99
 msgid "Ukrainian"
 msgstr "Ukraynaca"
 
-#: conf/global_settings.py:91
+#: conf/global_settings.py:100
+msgid "Vietnamese"
+msgstr "Vyetnamca"
+
+#: conf/global_settings.py:101
 msgid "Simplified Chinese"
 msgstr "Basiteştirilmiş Çince"
 
-#: conf/global_settings.py:92
+#: conf/global_settings.py:102
 msgid "Traditional Chinese"
 msgstr "Geleneksel Çince"
 
+#: contrib/admin/actions.py:52
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr "%(count)d adet %(items)s başarıyla silindi."
+
+#: contrib/admin/actions.py:59 contrib/admin/options.py:1100
+msgid "Are you sure?"
+msgstr "Emin misiniz?"
+
+#: contrib/admin/actions.py:77
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr "Seçili %(verbose_name_plural)s nesnelerini sil"
+
 #: contrib/admin/filterspecs.py:44
 #, python-format
 msgid ""
 "<h3>By %s:</h3>\n"
 "<ul>\n"
 msgstr ""
-"<h3>%s nesnesine göre:</h3>\n"
+"<h3>%s alanına göre:</h3>\n"
 "<ul>\n"
 
-#: contrib/admin/filterspecs.py:74
-#: contrib/admin/filterspecs.py:92
-#: contrib/admin/filterspecs.py:147
-#: contrib/admin/filterspecs.py:173
+#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
 msgid "All"
 msgstr "Tümü"
 
@@ -247,21 +299,22 @@
 msgid "This year"
 msgstr "Bu yıl"
 
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:391
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "Yes"
 msgstr "Evet"
 
-#: contrib/admin/filterspecs.py:147
-#: forms/widgets.py:391
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
 msgid "No"
 msgstr "Hayır"
 
-#: contrib/admin/filterspecs.py:154
-#: forms/widgets.py:391
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
 msgid "Unknown"
 msgstr "Bilinmiyor"
 
+#: contrib/admin/helpers.py:20
+msgid "Action:"
+msgstr "İşlem:"
+
 #: contrib/admin/models.py:19
 msgid "action time"
 msgstr "işlem zamanı"
@@ -284,178 +337,197 @@
 
 #: contrib/admin/models.py:28
 msgid "log entry"
-msgstr "girişi kaydet"
+msgstr "log kaydı"
 
 #: contrib/admin/models.py:29
 msgid "log entries"
-msgstr "girişleri kaydet"
-
-#: contrib/admin/options.py:60
-#: contrib/admin/options.py:121
+msgstr "log kayıtları"
+
+#: contrib/admin/options.py:142 contrib/admin/options.py:157
 msgid "None"
 msgstr "Hiç biri"
 
-#: contrib/admin/options.py:338
+#: contrib/admin/options.py:563
 #, python-format
 msgid "Changed %s."
 msgstr "%s değiştirildi."
 
-#: contrib/admin/options.py:338
-#: contrib/admin/options.py:348
-#: forms/models.py:275
+#: contrib/admin/options.py:563 contrib/admin/options.py:573
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:844
+#: forms/models.py:573
 msgid "and"
 msgstr "ve"
 
-#: contrib/admin/options.py:343
+#: contrib/admin/options.py:568
 #, python-format
 msgid "Added %(name)s \"%(object)s\"."
 msgstr "%(name)s \"%(object)s\" eklenmiştir."
 
-#: contrib/admin/options.py:347
+#: contrib/admin/options.py:572
 #, python-format
 msgid "Changed %(list)s for %(name)s \"%(object)s\"."
 msgstr "%(list)s %(name)s \"%(object)s\" ile değiştirildi."
 
-#: contrib/admin/options.py:352
+#: contrib/admin/options.py:577
 #, python-format
 msgid "Deleted %(name)s \"%(object)s\"."
 msgstr "%(name)s \"%(object)s\" silinmiştir."
 
-#: contrib/admin/options.py:356
+#: contrib/admin/options.py:581
 msgid "No fields changed."
 msgstr "Hiçbir alan değiştirilmedi."
 
-#: contrib/admin/options.py:417
-#: contrib/auth/admin.py:51
+#: contrib/admin/options.py:647
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was added successfully."
 msgstr "\"%(obj)s\" isimli %(name)s eklendi."
 
-#: contrib/admin/options.py:421
-#: contrib/admin/options.py:454
-#: contrib/auth/admin.py:59
+#: contrib/admin/options.py:651 contrib/admin/options.py:684
 msgid "You may edit it again below."
 msgstr "Tekrar düzenleyebilirsiniz."
 
-#: contrib/admin/options.py:431
-#: contrib/admin/options.py:464
+#: contrib/admin/options.py:661 contrib/admin/options.py:694
 #, python-format
 msgid "You may add another %s below."
 msgstr "Yeni bir %s ekleyebilirsiniz."
 
-#: contrib/admin/options.py:452
+#: contrib/admin/options.py:682
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was changed successfully."
 msgstr "\"%(obj)s\" isimli %(name)s değiştirildi."
 
-#: contrib/admin/options.py:460
+#: contrib/admin/options.py:690
 #, python-format
-msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
-msgstr "\"%(obj)s\" isimli %(name)s eklendi. Aşağıda tekrar düzenleyebilirsiniz."
-
-#: contrib/admin/options.py:536
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+"\"%(obj)s\" isimli %(name)s eklendi. Aşağıda tekrar düzenleyebilirsiniz."
+
+#: contrib/admin/options.py:744
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+"İşlemlerin uygulanabilmesi için bir veya daha fazla nesne seçilmelidir. "
+"Herhangi bir değişiklik gerçekleştirilmedi."
+
+#: contrib/admin/options.py:762
+msgid "No action selected."
+msgstr "İşlem seçimi yapılmamış. Lütfen bir işlem seçiniz."
+
+#: contrib/admin/options.py:842
 #, python-format
 msgid "Add %s"
 msgstr "%s ekle"
 
-#: contrib/admin/options.py:614
+#: contrib/admin/options.py:868 contrib/admin/options.py:1080
+#, python-format
+msgid "%(name)s object with primary key %(key)r does not exist."
+msgstr "%(key)r birincil anahtarına sahip %(name)s nesnesi mevcut değil."
+
+#: contrib/admin/options.py:933
 #, python-format
 msgid "Change %s"
 msgstr "%s değiştir"
 
-#: contrib/admin/options.py:646
+#: contrib/admin/options.py:978
 msgid "Database error"
 msgstr "Veritabanı hatası"
 
-#: contrib/admin/options.py:696
+#: contrib/admin/options.py:1014
+#, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] "%(count)s adet %(name)s başarıyla değiştirildi."
+
+#: contrib/admin/options.py:1041
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "Toplam %(total_count)s nesne seçili"
+
+#: contrib/admin/options.py:1046
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "%(cnt)s nesne arasından seçim yapılmamış"
+
+#: contrib/admin/options.py:1093
 #, python-format
 msgid "The %(name)s \"%(obj)s\" was deleted successfully."
 msgstr "\"%(obj)s\" isimli %(name)s silindi."
 
-#: contrib/admin/options.py:703
-msgid "Are you sure?"
-msgstr "Emin misiniz?"
-
-#: contrib/admin/options.py:732
+#: contrib/admin/options.py:1130
 #, python-format
 msgid "Change history: %s"
 msgstr "%s için değişiklik geçmişi:"
 
-#: contrib/admin/sites.py:16
-#: contrib/admin/views/decorators.py:14
-#: contrib/auth/forms.py:80
-msgid "Please enter a correct username and password. Note that both fields are case-sensitive."
-msgstr "Lütfen geçerli bir kullanıcı adı ve parola girin. Tüm alanlar büyük/küçük harf duyarlıdır."
-
-#: contrib/admin/sites.py:227
-#: contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr ""
+"Lütfen geçerli bir kullanıcı adı ve şifre girin. Tüm alanlar büyük/küçük "
+"harf duyarlıdır."
+
+#: contrib/admin/sites.py:311 contrib/admin/views/decorators.py:40
 msgid "Please log in again, because your session has expired."
 msgstr "Oturumunuzun süresi geçti. Lütfen tekrar giriş yapın."
 
-#: contrib/admin/sites.py:234
-#: contrib/admin/views/decorators.py:47
-msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again."
-msgstr "Görünüşe göre tarayıcınız çerezleri kabul etmiyor. Çerez kullanımını aktif hale getirin ve sayfayı yeniden yükleyin."
-
-#: contrib/admin/sites.py:250
-#: contrib/admin/sites.py:256
+#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:47
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+"Görünüşe göre tarayıcınız çerezleri kabul etmiyor. Çerez kullanımını aktif "
+"hale getirin ve sayfayı yeniden yükleyin."
+
+#: contrib/admin/sites.py:334 contrib/admin/sites.py:340
 #: contrib/admin/views/decorators.py:66
 msgid "Usernames cannot contain the '@' character."
 msgstr "Kullanıcı isminde '@' karakteri bulunamaz."
 
-#: contrib/admin/sites.py:253
-#: contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:337 contrib/admin/views/decorators.py:62
 #, python-format
 msgid "Your e-mail address is not your username. Try '%s' instead."
 msgstr "E-posta adresiniz kullanıcı adınız değil. '%s' kullanın."
 
-#: contrib/admin/sites.py:313
+#: contrib/admin/sites.py:393
 msgid "Site administration"
 msgstr "Site yönetimi"
 
-#: contrib/admin/sites.py:326
-#: contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:407 contrib/admin/templates/admin/login.html:26
 #: contrib/admin/templates/registration/password_reset_complete.html:14
 #: contrib/admin/views/decorators.py:20
 msgid "Log in"
 msgstr "Giriş yap"
 
-#: contrib/admin/sites.py:373
+#: contrib/admin/sites.py:452
 #, python-format
 msgid "%s administration"
 msgstr "%s yönetimi"
 
-#: contrib/admin/util.py:138
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
-msgstr "%(name)s içinde bir ya da daha fazla %(fieldname)s: %(obj)s"
-
-#: contrib/admin/util.py:143
-#, python-format
-msgid "One or more %(fieldname)s in %(name)s:"
-msgstr "%(name)s içinde bir ya da daha fazla %(fieldname)s:"
-
-#: contrib/admin/widgets.py:70
+#: contrib/admin/widgets.py:75
 msgid "Date:"
 msgstr "Tarih:"
 
-#: contrib/admin/widgets.py:70
+#: contrib/admin/widgets.py:75
 msgid "Time:"
 msgstr "Saat:"
 
-#: contrib/admin/widgets.py:94
+#: contrib/admin/widgets.py:99
 msgid "Currently:"
 msgstr "Geçerli:"
 
-#: contrib/admin/widgets.py:94
+#: contrib/admin/widgets.py:99
 msgid "Change:"
 msgstr "Değiştir:"
 
-#: contrib/admin/widgets.py:121
+#: contrib/admin/widgets.py:129
 msgid "Lookup"
 msgstr "Arama"
 
-#: contrib/admin/widgets.py:228
+#: contrib/admin/widgets.py:244
 msgid "Add Another"
 msgstr "Yenisini Ekle"
 
@@ -470,16 +542,17 @@
 
 #: contrib/admin/templates/admin/500.html:4
 #: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:30
-#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:8
+#: contrib/admin/templates/admin/base.html:55
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:42
 #: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
 #: contrib/admin/templates/admin/invalid_setup.html:4
 #: contrib/admin/templates/admin/object_history.html:6
-#: contrib/admin/templates/admin/auth/user/change_password.html:10
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
 #: contrib/admin/templates/registration/logged_out.html:4
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 #: contrib/admin/templates/registration/password_reset_done.html:4
@@ -501,8 +574,33 @@
 msgstr "Sunucu Hatası <em>(500)</em>"
 
 #: contrib/admin/templates/admin/500.html:10
-msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience."
-msgstr "Bir hata oluştu. Hata, e-psota ile site yöneticisine bildirildi ve kısa süre içinde çözülecktir. Sabrınız için teşekkürler."
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"Bir hata oluştu. Hata, e-psota ile site yöneticisine bildirildi ve kısa süre "
+"içinde çözülecktir. Sabrınız için teşekkürler."
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr "Seçili işlemi uygula"
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr "Git"
+
+#: contrib/admin/templates/admin/actions.html:11
+msgid "Click here to select the objects across all pages"
+msgstr "Tüm sayfalardaki nesneleri seçmek için buraya tıklayınız"
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Tüm %(total_count)s %(module_name)s nesnelerini seç"
+
+#: contrib/admin/templates/admin/actions.html:13
+msgid "Clear selection"
+msgstr "Seçimi kaldır"
 
 #: contrib/admin/templates/admin/app_index.html:10
 #: contrib/admin/templates/admin/index.html:19
@@ -510,28 +608,28 @@
 msgid "%(name)s"
 msgstr "%(name)s"
 
-#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/base.html:28
 msgid "Welcome,"
 msgstr "Hoşgeldiniz,"
 
-#: contrib/admin/templates/admin/base.html:25
+#: contrib/admin/templates/admin/base.html:33
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
 msgid "Documentation"
 msgstr "Dokümantasyon"
 
-#: contrib/admin/templates/admin/base.html:25
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
+#: contrib/admin/templates/admin/base.html:41
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Change password"
-msgstr "Parola değiştir"
-
-#: contrib/admin/templates/admin/base.html:25
+msgstr "Şifre değiştir"
+
+#: contrib/admin/templates/admin/base.html:48
 #: contrib/admin/templates/registration/password_change_done.html:3
-#: contrib/admin/templates/registration/password_change_form.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
 msgid "Log out"
 msgstr "Çık"
 
@@ -543,62 +641,96 @@
 msgid "Django administration"
 msgstr "Django yönetimi"
 
-#: contrib/admin/templates/admin/change_form.html:20
+#: contrib/admin/templates/admin/change_form.html:21
 #: contrib/admin/templates/admin/index.html:29
 msgid "Add"
-msgstr "Ekleme"
-
-#: contrib/admin/templates/admin/change_form.html:27
+msgstr "Yeni"
+
+#: contrib/admin/templates/admin/change_form.html:28
 #: contrib/admin/templates/admin/object_history.html:10
 msgid "History"
 msgstr "Geçmiş"
 
-#: contrib/admin/templates/admin/change_form.html:28
-#: contrib/admin/templates/admin/edit_inline/stacked.html:13
-#: contrib/admin/templates/admin/edit_inline/tabular.html:25
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
 msgid "View on site"
 msgstr "Sitede görüntüle"
 
-#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:71
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
 msgid "Please correct the error below."
 msgid_plural "Please correct the errors below."
-msgstr[0] "Lütfen aşağıdaki hatayı düzeltin."
-msgstr[1] "Lütfen aşağıdaki hataları düzeltin."
-
-#: contrib/admin/templates/admin/change_list.html:16
+msgstr[0] "Lütfen aşağıdaki hataları düzeltin."
+
+#: contrib/admin/templates/admin/change_list.html:63
 #, python-format
 msgid "Add %(name)s"
-msgstr "%(name)s Ekle"
-
-#: contrib/admin/templates/admin/change_list.html:26
+msgstr "Yeni %(name)s"
+
+#: contrib/admin/templates/admin/change_list.html:82
 msgid "Filter"
 msgstr "Filtrele"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4
-#: forms/formsets.py:246
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
 msgid "Delete"
 msgstr "Sil"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:16
 #, python-format
-msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:"
-msgstr "'%(escaped_object)s' isimli %(object_name)s nesnesini silmek, bağlantılı nesnelerin silinmesini gerektiriyor, ancak aşağıdaki nesneleri silme yetkiniz yok."
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+"'%(escaped_object)s' isimli %(object_name)s nesnesini silmek, bağlantılı "
+"nesnelerin silinmesini gerektiriyor, ancak aşağıdaki nesneleri silme "
+"yetkiniz yok."
 
 #: contrib/admin/templates/admin/delete_confirmation.html:23
 #, python-format
-msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:"
-msgstr "\"%(escaped_object)s\" isimli %(object_name)s nesnesini silmek istediğinizden emin misiniz? Aşağıdaki bağlantılı öğeler silinecek:"
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+"\"%(escaped_object)s\" isimli %(object_name)s nesnesini silmek "
+"istediğinizden emin misiniz? Aşağıdaki bağlantılı öğeler silinecek:"
 
 #: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
 msgid "Yes, I'm sure"
 msgstr "Evet, eminim"
 
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+msgid "Delete multiple objects"
+msgstr "Birden fazla nesneyi sil"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+"%(object_name)s isimli nesneyi silmek, bağlantılı nesnelerin silinmesini "
+"gerektiriyor, fakat aşağıdaki nesneleri silme yetkiniz yok:"
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, python-format
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+"%(object_name)s nesnelerini silmek istediğinizden emin misiniz? Aşağıdaki  "
+"nesneler ve bağlantılı öğeleri de silinecektir:"
+
 #: contrib/admin/templates/admin/filter.html:2
 #, python-format
 msgid " By %(filter_title)s "
-msgstr " %(filter_title)s nesnesine göre "
+msgstr " %(filter_title)s durumuna göre "
 
 #: contrib/admin/templates/admin/index.html:18
 #, python-format
@@ -607,7 +739,7 @@
 
 #: contrib/admin/templates/admin/index.html:35
 msgid "Change"
-msgstr "Değiştirme"
+msgstr "Düzenle"
 
 #: contrib/admin/templates/admin/index.html:45
 msgid "You don't have permission to edit anything."
@@ -615,7 +747,7 @@
 
 #: contrib/admin/templates/admin/index.html:53
 msgid "Recent Actions"
-msgstr "Geçmiş İşlemler"
+msgstr "İşlem Geçmişi"
 
 #: contrib/admin/templates/admin/index.html:54
 msgid "My Actions"
@@ -623,11 +755,21 @@
 
 #: contrib/admin/templates/admin/index.html:58
 msgid "None available"
-msgstr "Hiç yok"
+msgstr "İşlem geçmişi bulunamadı"
+
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr "Bilinmeyen içerik"
 
 #: contrib/admin/templates/admin/invalid_setup.html:7
-msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user."
-msgstr "Veritabanı kurulumu ile ilgili bir problem var. İlgili veritabanı tablolarının kurulu olduğundan ve veritabanının ilgili kullanıcı tarafından okunabilir olduğundan emin olun."
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+"Veritabanı kurulumu ile ilgili bir problem var. İlgili veritabanı "
+"tablolarının kurulu olduğundan ve veritabanının ilgili kullanıcı tarafından "
+"okunabilir olduğundan emin olun."
 
 #: contrib/admin/templates/admin/login.html:19
 msgid "Username:"
@@ -635,7 +777,7 @@
 
 #: contrib/admin/templates/admin/login.html:22
 msgid "Password:"
-msgstr "Parola:"
+msgstr "Şifre:"
 
 #: contrib/admin/templates/admin/object_history.html:22
 msgid "Date/time"
@@ -649,39 +791,38 @@
 msgid "Action"
 msgstr "İşlem"
 
-#: contrib/admin/templates/admin/object_history.html:30
-#: utils/translation/trans_real.py:404
-msgid "DATETIME_FORMAT"
-msgstr "j F Y, H:i"
-
 #: contrib/admin/templates/admin/object_history.html:38
-msgid "This object doesn't have a change history. It probably wasn't added via this admin site."
-msgstr "Bu nesnenin işlem geçmişi yok. Muhtemelen yönetici sayfası dışında bir yerden eklendi."
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Bu nesnenin işlem geçmişi yok. Muhtemelen yönetici sayfası dışında bir "
+"yerden eklendi."
 
 #: contrib/admin/templates/admin/pagination.html:10
 msgid "Show all"
 msgstr "Tümünü göster"
 
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Kaydet"
+
 #: contrib/admin/templates/admin/search_form.html:8
-msgid "Go"
-msgstr "Git"
+msgid "Search"
+msgstr "Ara"
 
 #: contrib/admin/templates/admin/search_form.html:10
 #, python-format
 msgid "1 result"
 msgid_plural "%(counter)s results"
-msgstr[0] "1 sonuç"
-msgstr[1] "%(counter)s sonuç"
+msgstr[0] "%(counter)s sonuç"
 
 #: contrib/admin/templates/admin/search_form.html:10
 #, python-format
 msgid "%(full_result_count)s total"
 msgstr "toplam %(full_result_count)s"
 
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Kaydet"
-
 #: contrib/admin/templates/admin/submit_line.html:5
 msgid "Save as new"
 msgstr "Yeni olarak kaydet"
@@ -694,40 +835,46 @@
 msgid "Save and continue editing"
 msgstr "Kaydet ve düzenlemeye devam et"
 
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
-msgid "First, enter a username and password. Then, you'll be able to edit more user options."
-msgstr "Önce bir kullanıcı adı ve parola girin. Daha sonra daha fazla bilgi girebilirsiniz."
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:13
-#: contrib/auth/forms.py:14
-#: contrib/auth/forms.py:47
-#: contrib/auth/forms.py:59
-msgid "Username"
-msgstr "Kullanıcı adı"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
-#: contrib/auth/forms.py:17
-#: contrib/auth/forms.py:60
-#: contrib/auth/forms.py:184
-msgid "Password"
-msgstr "Parola"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
-#: contrib/auth/forms.py:185
-msgid "Password (again)"
-msgstr "Parola (tekrar)"
-
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
-msgid "Enter the same password as above, for verification."
-msgstr "Onaylamak için, yukarıdaki parolanın aynısını girin."
-
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+"Önce bir kullanıcı adı ve şifre girin. Daha sonra daha fazla bilgi "
+"girebilirsiniz."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
 #, python-format
 msgid "Enter a new password for the user <strong>%(username)s</strong>."
-msgstr "<strong>%(username)s</strong> için yeni parola girin."
+msgstr "<strong>%(username)s</strong> için yeni şifre girin."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Şifre"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Şifre (tekrar)"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Onaylamak için, yukarıdaki şifrenin aynısını girin."
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:64
+#: contrib/admin/templates/admin/edit_inline/tabular.html:110
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr "Yeni bir %(verbose_name)s ekle"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:67
+#: contrib/admin/templates/admin/edit_inline/tabular.html:113
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr "Sil"
 
 #: contrib/admin/templates/admin/edit_inline/tabular.html:15
 msgid "Delete?"
@@ -742,43 +889,43 @@
 msgstr "Tekrar giriş yap"
 
 #: contrib/admin/templates/registration/password_change_done.html:4
-#: contrib/admin/templates/registration/password_change_form.html:4
-#: contrib/admin/templates/registration/password_change_form.html:6
-#: contrib/admin/templates/registration/password_change_form.html:10
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
 msgid "Password change"
-msgstr "Parola değişimi"
+msgstr "Şifre değişimi"
 
 #: contrib/admin/templates/registration/password_change_done.html:6
 #: contrib/admin/templates/registration/password_change_done.html:10
 msgid "Password change successful"
-msgstr "Parola değişimi başarılı"
+msgstr "Şifre değişimi başarılı"
 
 #: contrib/admin/templates/registration/password_change_done.html:12
 msgid "Your password was changed."
-msgstr "Parolanız değiştirildi."
-
-#: contrib/admin/templates/registration/password_change_form.html:12
-msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly."
-msgstr "Güvenliğiniz için, lütfen eski parolanızı girin, sonra da yeni parolanızı iki kere girin ve böylece doğru yazdığınızdan emin olun."
-
-#: contrib/admin/templates/registration/password_change_form.html:17
-msgid "Old password:"
-msgstr "Eski parola:"
-
-#: contrib/admin/templates/registration/password_change_form.html:19
-#: contrib/admin/templates/registration/password_reset_confirm.html:18
-msgid "New password:"
-msgstr "Yeni parola:"
+msgstr "Şifreniz değiştirildi."
 
 #: contrib/admin/templates/registration/password_change_form.html:21
-#: contrib/admin/templates/registration/password_reset_confirm.html:20
-msgid "Confirm password:"
-msgstr "Parolayı onayla:"
-
-#: contrib/admin/templates/registration/password_change_form.html:23
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Güvenliğiniz için, lütfen eski şifrenizi girin, sonra yeni şifrenizi iki "
+"kere girerek doğru yazdığınızdan emin olun."
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Eski şifre"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Yeni şifre"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
 #: contrib/admin/templates/registration/password_reset_confirm.html:21
 msgid "Change my password"
-msgstr "Parolamı değiştir"
+msgstr "Şifremi değiştir"
 
 #: contrib/admin/templates/registration/password_reset_complete.html:4
 #: contrib/admin/templates/registration/password_reset_confirm.html:6
@@ -787,12 +934,12 @@
 #: contrib/admin/templates/registration/password_reset_form.html:6
 #: contrib/admin/templates/registration/password_reset_form.html:10
 msgid "Password reset"
-msgstr "Parolayı sıfırla"
+msgstr "Şifreyi sıfırla"
 
 #: contrib/admin/templates/registration/password_reset_complete.html:6
 #: contrib/admin/templates/registration/password_reset_complete.html:10
 msgid "Password reset complete"
-msgstr "Parola sıfırlama tamamlandı"
+msgstr "Şifre sıfırlama tamamlandı"
 
 #: contrib/admin/templates/registration/password_reset_complete.html:12
 msgid "Your password has been set.  You may go ahead and log in now."
@@ -800,32 +947,52 @@
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:4
 msgid "Password reset confirmation"
-msgstr "Parola sıfırlama onayı"
+msgstr "Şifre sıfırlama onayı"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:12
 msgid "Enter new password"
-msgstr "Yeni parolayı girin"
+msgstr "Yeni şifreyi girin"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:14
-msgid "Please enter your new password twice so we can verify you typed it in correctly."
-msgstr "Lütfen yeni parolanızı iki kere girin, böylece doğru yazdığınızdan emin olun."
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+"Lütfen yeni şifrenizi iki kere girin, böylece doğru yazdığınızdan emin olun."
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Yeni şifre:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Şifreyi onayla:"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:26
 msgid "Password reset unsuccessful"
-msgstr "Parola sıfırlaması başarısız oldu"
+msgstr "Şifre sıfırlaması başarısız oldu"
 
 #: contrib/admin/templates/registration/password_reset_confirm.html:28
-msgid "The password reset link was invalid, possibly because it has already been used.  Please request a new password reset."
-msgstr "Parola sıfırlama linki geçersiz bulunmuştur, büyük ihtimalle daha önce kullanılmış olduğu içindir. Lütfen yeni bir parola sıfırlama talebinde bulunun."
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used.  Please request a new password reset."
+msgstr ""
+"Şifre sıfırlama linki geçersiz bulunmuştur, büyük ihtimalle daha önce "
+"kullanılmış olduğu içindir. Lütfen yeni bir şifre sıfırlama talebinde "
+"bulunun."
 
 #: contrib/admin/templates/registration/password_reset_done.html:6
 #: contrib/admin/templates/registration/password_reset_done.html:10
 msgid "Password reset successful"
-msgstr "Parola başarıyla sıfırlandı"
+msgstr "Şifre başarıyla sıfırlandı"
 
 #: contrib/admin/templates/registration/password_reset_done.html:12
-msgid "We've e-mailed you instructions for setting your password to the e-mail address you submitted. You should be receiving it shortly."
-msgstr "Yeni parolanızı alabilmeniz için gereken talimatları belirtmiş olduğunuz e-posta adresinize gönderilmiştir, kısa süre içinde size ulaşacaktır."
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"Yeni şifrenizi alabilmeniz için gereken talimatları belirtmiş olduğunuz e-"
+"posta adresinize gönderilmiştir, kısa süre içinde size ulaşacaktır."
 
 #: contrib/admin/templates/registration/password_reset_email.html:2
 msgid "You're receiving this e-mail because you requested a password reset"
@@ -834,7 +1001,9 @@
 #: contrib/admin/templates/registration/password_reset_email.html:3
 #, python-format
 msgid "for your user account at %(site_name)s"
-msgstr "%(site_name)s adresindeki kullanıcı hesabınız için parola sıfırlama talebinde bulundunuz."
+msgstr ""
+"%(site_name)s adresindeki kullanıcı hesabınız için şifre sıfırlama talebinde "
+"bulundunuz."
 
 #: contrib/admin/templates/registration/password_reset_email.html:5
 msgid "Please go to the following page and choose a new password:"
@@ -854,8 +1023,12 @@
 msgstr "%(site_name)s Ekibi"
 
 #: contrib/admin/templates/registration/password_reset_form.html:12
-msgid "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one."
-msgstr "Parolanızı mı unuttunuz? E-posta adresinizi aşağıya girin, yenisini almanız için gereken talimatları e-posta adresinize gönderelim."
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+"Şifrenizi mı unuttunuz? E-posta adresinizi aşağıya girin, yenisini almanız "
+"için gereken talimatları e-posta adresinize gönderilsin."
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "E-mail address:"
@@ -863,181 +1036,87 @@
 
 #: contrib/admin/templates/registration/password_reset_form.html:16
 msgid "Reset my password"
-msgstr "Parolamı sıfırla"
-
-#: contrib/admin/templatetags/admin_list.py:288
+msgstr "Şifremi sıfırla"
+
+#: contrib/admin/templatetags/admin_list.py:239
 msgid "All dates"
 msgstr "Tüm tarihler"
 
-#: contrib/admin/views/main.py:69
+#: contrib/admin/views/main.py:70
 #, python-format
 msgid "Select %s"
 msgstr "%s seç"
 
-#: contrib/admin/views/main.py:69
+#: contrib/admin/views/main.py:70
 #, python-format
 msgid "Select %s to change"
 msgstr "Değiştirilecek %s nesnesini seçin"
 
-#: contrib/admin/views/template.py:36
-#: contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
 msgid "site"
 msgstr "site"
 
-#: contrib/admin/views/template.py:38
+#: contrib/admin/views/template.py:40
 msgid "template"
 msgstr "şablon"
 
-#: contrib/admindocs/views.py:57
-#: contrib/admindocs/views.py:59
-#: contrib/admindocs/views.py:61
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
 msgid "tag:"
 msgstr "etiket:"
 
-#: contrib/admindocs/views.py:90
-#: contrib/admindocs/views.py:92
-#: contrib/admindocs/views.py:94
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
 msgid "filter:"
 msgstr "filtre:"
 
-#: contrib/admindocs/views.py:154
-#: contrib/admindocs/views.py:156
-#: contrib/admindocs/views.py:158
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
 msgid "view:"
-msgstr "view:"
-
-#: contrib/admindocs/views.py:186
+msgstr "görünüm:"
+
+#: contrib/admindocs/views.py:190
 #, python-format
 msgid "App %r not found"
 msgstr "%r uygulaması bulunamadı"
 
-#: contrib/admindocs/views.py:193
+#: contrib/admindocs/views.py:197
 #, python-format
 msgid "Model %(model_name)r not found in app %(app_label)r"
 msgstr "%(app_label)r uygulamasında %(model_name)r modeli bulunamadı"
 
-#: contrib/admindocs/views.py:205
+#: contrib/admindocs/views.py:209
 #, python-format
 msgid "the related `%(app_label)s.%(data_type)s` object"
 msgstr "İlgili `%(app_label)s.%(data_type)s` nesnesi"
 
-#: contrib/admindocs/views.py:205
-#: contrib/admindocs/views.py:227
-#: contrib/admindocs/views.py:241
-#: contrib/admindocs/views.py:246
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
 msgid "model:"
 msgstr "model:"
 
-#: contrib/admindocs/views.py:236
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
 #, python-format
 msgid "related `%(app_label)s.%(object_name)s` objects"
 msgstr "ilgili `%(app_label)s.%(object_name)s` nesneleri"
 
-#: contrib/admindocs/views.py:241
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
 #, python-format
 msgid "all %s"
 msgstr "tüm %s"
 
-#: contrib/admindocs/views.py:246
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
 #, python-format
 msgid "number of %s"
 msgstr "%s sayısı"
 
-#: contrib/admindocs/views.py:251
+#: contrib/admindocs/views.py:271
 #, python-format
 msgid "Fields on %s objects"
 msgstr "%s nesnesindeki alanlar"
 
-#: contrib/admindocs/views.py:314
-#: contrib/admindocs/views.py:325
-#: contrib/admindocs/views.py:327
-#: contrib/admindocs/views.py:333
-#: contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:336
-msgid "Integer"
-msgstr "Tamsayı"
-
-#: contrib/admindocs/views.py:315
-msgid "Boolean (Either True or False)"
-msgstr "Mantıksal (True ya da False)"
-
-#: contrib/admindocs/views.py:316
-#: contrib/admindocs/views.py:335
-#, python-format
-msgid "String (up to %(max_length)s)"
-msgstr "Karakter disizi (en fazla %(max_length)s)"
-
-#: contrib/admindocs/views.py:317
-msgid "Comma-separated integers"
-msgstr "Virgülle ayrılmış tamsayılar"
-
-#: contrib/admindocs/views.py:318
-msgid "Date (without time)"
-msgstr "Tarih (saat yok)"
-
-#: contrib/admindocs/views.py:319
-msgid "Date (with time)"
-msgstr "Tarih (saat var)"
-
-#: contrib/admindocs/views.py:320
-msgid "Decimal number"
-msgstr "Ondalık sayı:"
-
-#: contrib/admindocs/views.py:321
-msgid "E-mail address"
-msgstr "E-posta adresi"
-
-#: contrib/admindocs/views.py:322
-#: contrib/admindocs/views.py:323
-#: contrib/admindocs/views.py:326
-msgid "File path"
-msgstr "Dosya yolu"
-
-#: contrib/admindocs/views.py:324
-msgid "Floating point number"
-msgstr "Floating point rakamı"
-
-#: contrib/admindocs/views.py:328
-#: contrib/comments/models.py:58
-msgid "IP address"
-msgstr "IP adresi"
-
-#: contrib/admindocs/views.py:330
-msgid "Boolean (Either True, False or None)"
-msgstr "Mantıksal (True, False, ya da None)"
-
-#: contrib/admindocs/views.py:331
-msgid "Relation to parent model"
-msgstr "Ana modelle ilişki"
-
-#: contrib/admindocs/views.py:332
-msgid "Phone number"
-msgstr "Telefon numarası"
-
-#: contrib/admindocs/views.py:337
-msgid "Text"
-msgstr "Metin"
-
-#: contrib/admindocs/views.py:338
-msgid "Time"
-msgstr "Saat"
-
-#: contrib/admindocs/views.py:339
-#: contrib/comments/forms.py:22
-#: contrib/flatpages/admin.py:8
-#: contrib/flatpages/models.py:7
-msgid "URL"
-msgstr "URL"
-
-#: contrib/admindocs/views.py:340
-msgid "U.S. state (two uppercase letters)"
-msgstr "Şehir Kodu (iki karakter)"
-
-#: contrib/admindocs/views.py:341
-msgid "XML text"
-msgstr "XML metni"
-
-#: contrib/admindocs/views.py:367
+#: contrib/admindocs/views.py:361
 #, python-format
 msgid "%s does not appear to be a urlpattern object"
 msgstr "%s geçerli bir adres kalıbı değil"
@@ -1061,9 +1140,12 @@
 "your computer is \"internal\").</p>\n"
 msgstr ""
 "\n"
-"<p class=\"help\">Kısayolları kullanabilmek için, bağlantıyı tarayıcınızdaki araç\n"
-"çubuğuna sürükleyin, ya da sağ tıklayıp sık kullanılan adresler listenize ekleyin. \n"
-"Bazı kısayollar, uygulamayı çalıştıran sunucu ile aynı adreste bulunan istemciler \n"
+"<p class=\"help\">Kısayolları kullanabilmek için, bağlantıyı tarayıcınızdaki "
+"araç\n"
+"çubuğuna sürükleyin, ya da sağ tıklayıp sık kullanılan adresler listenize "
+"ekleyin. \n"
+"Bazı kısayollar, uygulamayı çalıştıran sunucu ile aynı adreste bulunan "
+"istemciler \n"
 "tarafından kullanılabilir.</p>\n"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
@@ -1071,7 +1153,9 @@
 msgstr "Bu sayfa için dokümantasyon"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
-msgid "Jumps you from any page to the documentation for the view that generates that page."
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
 msgstr "Sizi, bu sayfayı üreten betiğin dokümantasyonuna yönlendirir."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
@@ -1079,8 +1163,11 @@
 msgstr "Nesne numarasını göster"
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
-msgid "Shows the content-type and unique ID for pages that represent a single object."
-msgstr "Tek bir nesneyi temsil eden sayfaların içerik türünü ve numarasını gösterir."
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+"Tek bir nesneyi temsil eden sayfaların içerik türünü ve numarasını gösterir."
 
 #: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
 msgid "Edit this object (current window)"
@@ -1098,290 +1185,383 @@
 msgid "As above, but opens the admin page in a new window."
 msgstr "Yukarıdaki gibi, ancak yönetim sayfasını yeni bir pencerede açar."
 
-#: contrib/auth/admin.py:21
+#: contrib/auth/admin.py:29
 msgid "Personal info"
 msgstr "Kişisel bilgiler"
 
-#: contrib/auth/admin.py:22
+#: contrib/auth/admin.py:30
 msgid "Permissions"
 msgstr "İzinler"
 
-#: contrib/auth/admin.py:23
+#: contrib/auth/admin.py:31
 msgid "Important dates"
 msgstr "Önemli tarihler"
 
-#: contrib/auth/admin.py:24
+#: contrib/auth/admin.py:32
 msgid "Groups"
 msgstr "Gruplar"
 
-#: contrib/auth/admin.py:64
-msgid "Add user"
-msgstr "Kullanıcı ekle"
-
-#: contrib/auth/admin.py:90
+#: contrib/auth/admin.py:114
 msgid "Password changed successfully."
-msgstr "Parola başarı ile değiştirildi."
-
-#: contrib/auth/admin.py:96
+msgstr "Şifre başarı ile değiştirildi."
+
+#: contrib/auth/admin.py:124
 #, python-format
 msgid "Change password: %s"
-msgstr "Parola değiştir: %s"
-
-#: contrib/auth/forms.py:15
-#: contrib/auth/forms.py:48
-#: contrib/auth/models.py:136
-msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."
-msgstr "Zorunlu alan. 30 karakter ya da da az olmalı. Alfanumerik (harf, rakam ve alt çizgi) karakterler kullanılabilir."
-
-#: contrib/auth/forms.py:16
-#: contrib/auth/forms.py:49
-msgid "This value must contain only letters, numbers and underscores."
-msgstr "Bu değer sadece karakter, rakam ve altçizgiden oluşabilir."
+msgstr "Şifre değiştir: %s"
+
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Kullanıcı adı"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
+msgstr ""
+"Zorunlu alan. 30 karakter ya da az olmalı. Harf, rakam ve @/./+/-/_ "
+"karakterleri kullanılabilir."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Bu değer sadece harf, rakam ve @/./+/-/_ karakterlerini içerebilir."
 
 #: contrib/auth/forms.py:18
 msgid "Password confirmation"
-msgstr "Parola onayı"
-
-#: contrib/auth/forms.py:30
+msgstr "Şifre onayı"
+
+#: contrib/auth/forms.py:31
 msgid "A user with that username already exists."
 msgstr "Bu isimde bir kullanıcı zaten mevcuttur."
 
-#: contrib/auth/forms.py:36
-#: contrib/auth/forms.py:154
-#: contrib/auth/forms.py:196
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
 msgid "The two password fields didn't match."
-msgstr "İki parola alanı uyuşmuyor."
-
-#: contrib/auth/forms.py:82
+msgstr "İki şifre alanı uyuşmuyor."
+
+#: contrib/auth/forms.py:83
 msgid "This account is inactive."
 msgstr "Bu hesap aktif değil."
 
-#: contrib/auth/forms.py:87
-msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."
-msgstr "Web tarayıcınızın çerezleri desteklemediği görülüyor. Çerezler giriş için gerekli."
-
-#: contrib/auth/forms.py:100
+#: contrib/auth/forms.py:88
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+"Web tarayıcınızın çerezleri desteklemediği görülüyor. Çerezler giriş için "
+"gerekli."
+
+#: contrib/auth/forms.py:101
 msgid "E-mail"
 msgstr "E-posta adresi"
 
-#: contrib/auth/forms.py:109
-msgid "That e-mail address doesn't have an associated user account. Are you sure you've registered?"
-msgstr "Bu e-posta hesabıyla ilişkili kullanıcı bulunmuyor. Kayıtlı olduğunuzdan emin misiniz?"
-
-#: contrib/auth/forms.py:134
+#: contrib/auth/forms.py:110
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Bu e-posta hesabıyla ilişkili kullanıcı bulunmuyor. Kayıtlı olduğunuzdan "
+"emin misiniz?"
+
+#: contrib/auth/forms.py:136
 #, python-format
 msgid "Password reset on %s"
-msgstr "%s sitesindeki hesabınızın parolasının sıfırlanması"
-
-#: contrib/auth/forms.py:142
-msgid "New password"
-msgstr "Yeni parola"
-
-#: contrib/auth/forms.py:143
+msgstr "%s sitesindeki hesabınızın şifresinin sıfırlanması"
+
+#: contrib/auth/forms.py:145
 msgid "New password confirmation"
-msgstr "Yeni parola tekrarı"
-
-#: contrib/auth/forms.py:168
-msgid "Old password"
-msgstr "Eski parola"
-
-#: contrib/auth/forms.py:176
+msgstr "Yeni şifre tekrarı"
+
+#: contrib/auth/forms.py:178
 msgid "Your old password was entered incorrectly. Please enter it again."
-msgstr "Eski parolanız hatalı. Lütfen tekrar girin."
+msgstr "Eski şifreniz hatalı. Lütfen tekrar girin."
+
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
+msgid "name"
+msgstr "isim"
+
+#: contrib/auth/models.py:68
+msgid "codename"
+msgstr "takma ad"
 
 #: contrib/auth/models.py:72
-#: contrib/auth/models.py:95
-msgid "name"
-msgstr "isim"
-
-#: contrib/auth/models.py:74
-msgid "codename"
-msgstr "takma ad"
-
-#: contrib/auth/models.py:77
 msgid "permission"
 msgstr "izin"
 
-#: contrib/auth/models.py:78
-#: contrib/auth/models.py:96
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
 msgid "permissions"
 msgstr "izinler"
 
-#: contrib/auth/models.py:99
+#: contrib/auth/models.py:98
 msgid "group"
 msgstr "grup"
 
-#: contrib/auth/models.py:100
-#: contrib/auth/models.py:146
+#: contrib/auth/models.py:99 contrib/auth/models.py:206
 msgid "groups"
 msgstr "gruplar"
 
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:196
 msgid "username"
 msgstr "kullanıcı adı"
 
-#: contrib/auth/models.py:137
+#: contrib/auth/models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Zorunlu alan. 30 karakter ya da az olmalı. Harf, rakam ve @/./+/-/_ "
+"karakterleri kullanılabilir"
+
+#: contrib/auth/models.py:197
 msgid "first name"
 msgstr "isim"
 
-#: contrib/auth/models.py:138
+#: contrib/auth/models.py:198
 msgid "last name"
 msgstr "soyisim"
 
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:199
 msgid "e-mail address"
 msgstr "e-posta adresi"
 
-#: contrib/auth/models.py:140
+#: contrib/auth/models.py:200
 msgid "password"
-msgstr "parola"
-
-#: contrib/auth/models.py:140
-msgid "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change password form</a>."
+msgstr "şifre"
+
+#: contrib/auth/models.py:200
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
 msgstr ""
-"'[algo]$[salt]$[hexdigest]' yazın ya da <a href=\"password/\">parola\n"
+"'[algo]$[salt]$[hexdigest]' yazın ya da <a href=\"password/\">şifre\n"
 "değiştir formunu kullanın</a>."
 
-#: contrib/auth/models.py:141
+#: contrib/auth/models.py:201
 msgid "staff status"
-msgstr "yönetici modu"
-
-#: contrib/auth/models.py:141
+msgstr "yönetici"
+
+#: contrib/auth/models.py:201
 msgid "Designates whether the user can log into this admin site."
-msgstr "Kullanıcının yönetici sayfasına girip giremeyeceğini belirler."
-
-#: contrib/auth/models.py:142
+msgstr "Kullanıcının yönetim (admin) paneline girip giremeyeceğini belirler."
+
+#: contrib/auth/models.py:202
 msgid "active"
 msgstr "aktif"
 
-#: contrib/auth/models.py:142
-msgid "Designates whether this user should be treated as active. Unselect this instead of deleting accounts."
-msgstr "Kullanıcının aktif olup olmadığını belirler. Kullanıcı hesabı silmek yerine bu işareti kaldırın."
-
-#: contrib/auth/models.py:143
+#: contrib/auth/models.py:202
+msgid ""
+"Designates whether this user should be treated as active. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+"Kullanıcının aktif olup olmadığını belirler. Kullanıcı hesabını silmek "
+"yerine bu işareti kaldırın."
+
+#: contrib/auth/models.py:203
 msgid "superuser status"
-msgstr "süper kullanıcı modu"
-
-#: contrib/auth/models.py:143
-msgid "Designates that this user has all permissions without explicitly assigning them."
-msgstr "Kullanıcının tek tek hak atamasına gerek kalmadan tüm haklara sahip olup olamayacağını belirler."
-
-#: contrib/auth/models.py:144
+msgstr "süper kullanıcı"
+
+#: contrib/auth/models.py:203
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+"Kullanıcıya ayrı ayrı izin atamasına gerek kalmadan tüm hakların verilip "
+"verilmeyeceğini belirler."
+
+#: contrib/auth/models.py:204
 msgid "last login"
 msgstr "son ziyaret"
 
-#: contrib/auth/models.py:145
+#: contrib/auth/models.py:205
 msgid "date joined"
 msgstr "kayıt tarihi"
 
-#: contrib/auth/models.py:147
-msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."
-msgstr "Özel olarak atanmış hakların yanı sıra, kullanıcının üyesi olduğu grupların hakları alır."
-
-#: contrib/auth/models.py:148
+#: contrib/auth/models.py:207
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"Özel olarak atanmış hakların yanı sıra, kullanıcı, üyesi olduğu grupların "
+"haklarını da alır."
+
+#: contrib/auth/models.py:208
 msgid "user permissions"
 msgstr "kullanıcı izinleri"
 
-#: contrib/auth/models.py:152
+#: contrib/auth/models.py:212 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
 msgid "user"
 msgstr "kullanıcı"
 
-#: contrib/auth/models.py:153
+#: contrib/auth/models.py:213
 msgid "users"
 msgstr "kullanıcılar"
 
-#: contrib/auth/models.py:308
+#: contrib/auth/models.py:394
 msgid "message"
 msgstr "mesaj"
 
-#: contrib/auth/views.py:50
+#: contrib/auth/views.py:79
 msgid "Logged out"
 msgstr "Çıkış yapıldı"
 
 #: contrib/auth/management/commands/createsuperuser.py:23
-#: forms/fields.py:428
+#: core/validators.py:120 forms/fields.py:428
 msgid "Enter a valid e-mail address."
 msgstr "Geçerli bir e-posta adresi girin."
 
-#: contrib/comments/admin.py:11
+#: contrib/comments/admin.py:12
 msgid "Content"
 msgstr "İçerik"
 
-#: contrib/comments/admin.py:14
+#: contrib/comments/admin.py:15
 msgid "Metadata"
 msgstr "Meta bilgi"
 
-#: contrib/comments/forms.py:20
+#: contrib/comments/admin.py:40
+msgid "flagged"
+msgid_plural "flagged"
+msgstr[0] "işaretli"
+
+#: contrib/comments/admin.py:41
+msgid "Flag selected comments"
+msgstr "Seçili yorumları işaretle"
+
+#: contrib/comments/admin.py:45
+msgid "approved"
+msgid_plural "approved"
+msgstr[0] "onaylandı"
+
+#: contrib/comments/admin.py:46
+msgid "Approve selected comments"
+msgstr "Seçili yorumları onayla"
+
+#: contrib/comments/admin.py:50
+msgid "removed"
+msgid_plural "removed"
+msgstr[0] "silinmiş"
+
+#: contrib/comments/admin.py:51
+msgid "Remove selected comments"
+msgstr "Seçili yorumları sil"
+
+#: contrib/comments/admin.py:63
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] "%(count)s adet yorum başarıyla %(action)s."
+
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr "%(site_name)s sitesine ait yorumlar"
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr "%(site_name)s sitesindeki son yorumlar"
+
+#: contrib/comments/forms.py:93
 msgid "Name"
 msgstr "İsim"
 
-#: contrib/comments/forms.py:21
+#: contrib/comments/forms.py:94
 msgid "Email address"
 msgstr "E-posta adresi"
 
-#: contrib/comments/forms.py:23
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1101
+msgid "URL"
+msgstr "URL"
+
+#: contrib/comments/forms.py:96
 msgid "Comment"
 msgstr "Yorum"
 
-#: contrib/comments/forms.py:26
-msgid "If you enter anything in this field your comment will be treated as spam"
-msgstr "Eğer bu alana herhangi bir şey girerseniz, yorumunuz spam olarak kabul edilecektir"
-
-#: contrib/comments/forms.py:126
+#: contrib/comments/forms.py:175
 #, python-format
 msgid "Watch your mouth! The word %s is not allowed here."
 msgid_plural "Watch your mouth! The words %s are not allowed here."
 msgstr[0] "Söylediğinize dikkat edin! %s kelimeleri burada kullanılamaz."
 
-#: contrib/comments/models.py:23
+#: contrib/comments/forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr ""
+"Eğer bu alana herhangi bir şey girerseniz, yorumunuz spam olarak kabul "
+"edilecektir"
+
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
+msgid "content type"
+msgstr "içerik türü"
+
+#: contrib/comments/models.py:24
 msgid "object ID"
 msgstr "nesne no"
 
-#: contrib/comments/models.py:50
+#: contrib/comments/models.py:52
 msgid "user's name"
 msgstr "kullanıcının adı"
 
-#: contrib/comments/models.py:51
+#: contrib/comments/models.py:53
 msgid "user's email address"
 msgstr "kullanıcının e-posta adresi"
 
-#: contrib/comments/models.py:52
+#: contrib/comments/models.py:54
 msgid "user's URL"
 msgstr "kullanıcının URL'si"
 
-#: contrib/comments/models.py:54
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
 msgid "comment"
 msgstr "yorum"
 
-#: contrib/comments/models.py:57
-msgid "date/time submitted"
-msgstr "gönderim tarihi/saati"
-
 #: contrib/comments/models.py:59
+msgid "date/time submitted"
+msgstr "gönderim tarihi/saati"
+
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+msgid "IP address"
+msgstr "IP adresi"
+
+#: contrib/comments/models.py:61
 msgid "is public"
 msgstr "görünürlük"
 
-#: contrib/comments/models.py:60
-msgid "Uncheck this box to make the comment effectively disappear from the site."
+#: contrib/comments/models.py:62
+msgid ""
+"Uncheck this box to make the comment effectively disappear from the site."
 msgstr "Yorumu site üzerinden kaldırmak için bu kutucuğun seçimini kaldırın."
 
-#: contrib/comments/models.py:62
+#: contrib/comments/models.py:64
 msgid "is removed"
 msgstr "silinmiş"
 
-#: contrib/comments/models.py:63
-msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead."
-msgstr "Yorum uygunsuz ise bu işareti kaldırın. \"Yorum silindi\" uyarısı görüntülenecek."
-
-#: contrib/comments/models.py:115
-msgid "This comment was posted by an authenticated user and thus the name is read-only."
-msgstr "Bu yorum kayıtlı kullanıcı tarafından yazıldığı için başlığı salt okunurdur."
-
-#: contrib/comments/models.py:124
-msgid "This comment was posted by an authenticated user and thus the email is read-only."
-msgstr "Bu yorum kayıtlı kullanıcı tarafından yazıldığı için e-posta adresi salt okunurdur."
-
-#: contrib/comments/models.py:149
+#: contrib/comments/models.py:65
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+"Yorum uygunsuz ise bu işareti kaldırın. \"Yorum silindi\" uyarısı "
+"görüntülenecek."
+
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr "yorumlar"
+
+#: contrib/comments/models.py:119
+msgid ""
+"This comment was posted by an authenticated user and thus the name is read-"
+"only."
+msgstr ""
+"Bu yorum kayıtlı kullanıcı tarafından yazıldığı için başlığı salt okunurdur."
+
+#: contrib/comments/models.py:128
+msgid ""
+"This comment was posted by an authenticated user and thus the email is read-"
+"only."
+msgstr ""
+"Bu yorum kayıtlı kullanıcı tarafından yazıldığı için e-posta adresi salt "
+"okunurdur."
+
+#: contrib/comments/models.py:153
 #, python-format
 msgid ""
 "Posted by %(user)s at %(date)s\n"
@@ -1396,25 +1576,132 @@
 "\n"
 "http://%(domain)s%(url)s"
 
-#: contrib/contenttypes/models.py:67
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr "işaret"
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr "tarih"
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr "yorum işareti"
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr "yorum işaretleri"
+
+#: contrib/comments/templates/comments/approve.html:4
+msgid "Approve a comment"
+msgstr "Yorumu onayla"
+
+#: contrib/comments/templates/comments/approve.html:7
+msgid "Really make this comment public?"
+msgstr "Bu yorum gerçekten umuma açılsın mı?"
+
+#: contrib/comments/templates/comments/approve.html:12
+msgid "Approve"
+msgstr "Onayla"
+
+#: contrib/comments/templates/comments/approved.html:4
+msgid "Thanks for approving"
+msgstr "Onayınız için teşekkürler"
+
+#: contrib/comments/templates/comments/approved.html:7
+#: contrib/comments/templates/comments/deleted.html:7
+#: contrib/comments/templates/comments/flagged.html:7
+msgid ""
+"Thanks for taking the time to improve the quality of discussion on our site"
+msgstr ""
+"Sitemizdeki tartışma kalitesini yükseltmek amacıyla ayırdığınız zaman için "
+"teşekkür ederiz."
+
+#: contrib/comments/templates/comments/delete.html:4
+msgid "Remove a comment"
+msgstr "Yorumu sil"
+
+#: contrib/comments/templates/comments/delete.html:7
+msgid "Really remove this comment?"
+msgstr "Yorum silinsin mi?"
+
+#: contrib/comments/templates/comments/deleted.html:4
+msgid "Thanks for removing"
+msgstr "Sildiğiniz için teşekkürler"
+
+#: contrib/comments/templates/comments/flag.html:4
+msgid "Flag this comment"
+msgstr "Bu yorumu işlaretle"
+
+#: contrib/comments/templates/comments/flag.html:7
+msgid "Really flag this comment?"
+msgstr "Yorum işaretlensin mi?"
+
+#: contrib/comments/templates/comments/flag.html:12
+msgid "Flag"
+msgstr "İşaret"
+
+#: contrib/comments/templates/comments/flagged.html:4
+msgid "Thanks for flagging"
+msgstr "İşaretlediğiniz için teşekkürler"
+
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
+msgid "Post"
+msgstr "Gönderi"
+
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
+msgid "Preview"
+msgstr "Önizleme"
+
+#: contrib/comments/templates/comments/posted.html:4
+msgid "Thanks for commenting"
+msgstr "Yorumunuz için teşekkürler"
+
+#: contrib/comments/templates/comments/posted.html:7
+msgid "Thank you for your comment"
+msgstr "Yorumunuz için teşekkür ederiz"
+
+#: contrib/comments/templates/comments/preview.html:4
+#: contrib/comments/templates/comments/preview.html:13
+msgid "Preview your comment"
+msgstr "Yorumunuzun önüzlemesini görün"
+
+#: contrib/comments/templates/comments/preview.html:11
+msgid "Please correct the error below"
+msgid_plural "Please correct the errors below"
+msgstr[0] "Lütfen aşağıdaki hataları düzeltin"
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "Post your comment"
+msgstr "Yorumunuzu gönderin"
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "or make changes"
+msgstr "veya düzenleme yapmak"
+
+#: contrib/contenttypes/models.py:77
 msgid "python model class name"
 msgstr "python model sınıf adı"
 
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "içerik türü"
-
-#: contrib/contenttypes/models.py:72
+#: contrib/contenttypes/models.py:82
 msgid "content types"
 msgstr "içerik türleri"
 
 #: contrib/flatpages/admin.py:9
-msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
-msgstr "Örnek: '/about/contact/'. Başında ve sonunda bölü işareti olduğundan emin olun."
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Örnek: '/about/contact/'. Başında ve sonunda bölü işareti olduğundan emin "
+"olun."
 
 #: contrib/flatpages/admin.py:11
-msgid "This value must contain only letters, numbers, underscores, dashes or slashes."
-msgstr "Bu değer sadece harf, rakam, altçizgi, bölü ve ters bölüden oluşabilir."
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Bu değer sadece harf, rakam, altçizgi, bölü ve ters bölüden oluşabilir."
 
 #: contrib/flatpages/admin.py:22
 msgid "Advanced options"
@@ -1437,8 +1724,12 @@
 msgstr "şablon adı"
 
 #: contrib/flatpages/models.py:12
-msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'."
-msgstr "Örnek: 'flatpages/contact_page.html'. Eğer birşey yazılmazsa, sistem otomatik olarak 'flatpages/default.html' kullanacak."
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+"Örnek: 'flatpages/contact_page.html'. Eğer birşey yazılmazsa, sistem "
+"otomatik olarak 'flatpages/default.html' kullanacak."
 
 #: contrib/flatpages/models.py:13
 msgid "registration required"
@@ -1456,22 +1747,67 @@
 msgid "flat pages"
 msgstr "düz sayfalar"
 
-#: contrib/formtools/wizard.py:130
-msgid "We apologize, but your form has expired. Please continue filling out the form from this page."
-msgstr "Özür dileriz, form bilgileriniz zaman aşımına uğramış. Lütfen formu bu sayfada doldurmaya devam edin."
-
-#: contrib/gis/forms/fields.py:14
+#: contrib/formtools/wizard.py:140
+msgid ""
+"We apologize, but your form has expired. Please continue filling out the "
+"form from this page."
+msgstr ""
+"Özür dileriz, form bilgileriniz zaman aşımına uğramış. Lütfen formu bu "
+"sayfada doldurmaya devam edin."
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+"Taban GIS alanı -- OpenGIS Spesifikasyonu Geometri türüne eşleşmektedir."
+
+#: contrib/gis/db/models/fields.py:270
+msgid "Point"
+msgstr "Nokta"
+
+#: contrib/gis/db/models/fields.py:274
+msgid "Line string"
+msgstr "Satır dizisi"
+
+#: contrib/gis/db/models/fields.py:278
+msgid "Polygon"
+msgstr "Poligon"
+
+#: contrib/gis/db/models/fields.py:282
+msgid "Multi-point"
+msgstr "Çok noktalı"
+
+#: contrib/gis/db/models/fields.py:286
+msgid "Multi-line string"
+msgstr "Çok satırlı metin"
+
+#: contrib/gis/db/models/fields.py:290
+msgid "Multi polygon"
+msgstr "Çoklu poligon"
+
+#: contrib/gis/db/models/fields.py:294
+msgid "Geometry collection"
+msgstr "Geometri kolleksiyonu"
+
+#: contrib/gis/forms/fields.py:17
 msgid "No geometry value provided."
 msgstr "Hiçbir geometri değeri verilmemiştir."
 
-#: contrib/gis/forms/fields.py:15
+#: contrib/gis/forms/fields.py:18
 msgid "Invalid geometry value."
 msgstr "Geçersiz geometri değeri."
 
-#: contrib/gis/forms/fields.py:16
+#: contrib/gis/forms/fields.py:19
 msgid "Invalid geometry type."
 msgstr "Geçersiz geometri türü."
 
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+"Geometri verisi geometri form alanının SRID değerine dönüştürülürken hata "
+"oluştu."
+
 #: contrib/humanize/templatetags/humanize.py:19
 msgid "th"
 msgstr "."
@@ -1493,21 +1829,18 @@
 msgid "%(value).1f million"
 msgid_plural "%(value).1f million"
 msgstr[0] "%(value).1f milyon"
-msgstr[1] "%(value).1f milyon"
 
 #: contrib/humanize/templatetags/humanize.py:54
 #, python-format
 msgid "%(value).1f billion"
 msgid_plural "%(value).1f billion"
 msgstr[0] "%(value).1f milyar"
-msgstr[1] "%(value).1f milyar"
 
 #: contrib/humanize/templatetags/humanize.py:57
 #, python-format
 msgid "%(value).1f trillion"
 msgid_plural "%(value).1f trillion"
 msgstr[0] "%(value).1f trilyon"
-msgstr[1] "%(value).1f trilyon"
 
 #: contrib/humanize/templatetags/humanize.py:73
 msgid "one"
@@ -1557,27 +1890,25 @@
 msgid "yesterday"
 msgstr "dün"
 
-#: contrib/localflavor/ar/forms.py:27
+#: contrib/localflavor/ar/forms.py:28
 msgid "Enter a postal code in the format NNNN or ANNNNAAA."
 msgstr "NNNN ya da ANNNNAAA formatında bir posta kodu yazın."
 
-#: contrib/localflavor/ar/forms.py:49
-#: contrib/localflavor/br/forms.py:96
-#: contrib/localflavor/br/forms.py:135
-#: contrib/localflavor/pe/forms.py:23
-#: contrib/localflavor/pe/forms.py:51
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
 msgid "This field requires only numbers."
 msgstr "Bu alan sadece rakam gerektirmektedir."
 
-#: contrib/localflavor/ar/forms.py:50
+#: contrib/localflavor/ar/forms.py:51
 msgid "This field requires 7 or 8 digits."
 msgstr "Bu alan 7 veya 8 rakam gerektirmektedir."
 
-#: contrib/localflavor/ar/forms.py:79
+#: contrib/localflavor/ar/forms.py:80
 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
 msgstr "XX-XXXXXXXX-X ya da XXXXXXXXXXXX formatında bir CUIT girin."
 
-#: contrib/localflavor/ar/forms.py:80
+#: contrib/localflavor/ar/forms.py:81
 msgid "Invalid CUIT."
 msgstr "Geçersiz CUIT."
 
@@ -1617,55 +1948,62 @@
 msgid "Vienna"
 msgstr "Vyana"
 
-#: contrib/localflavor/at/forms.py:20
-#: contrib/localflavor/ch/forms.py:16
-#: contrib/localflavor/no/forms.py:12
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
 msgid "Enter a zip code in the format XXXX."
 msgstr "XXXX formatında posta kodu girin."
 
 #: contrib/localflavor/at/forms.py:48
 msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
-msgstr "Lütfen XXXX XXXXXX formatında geçerli bir Avusturya Sosyal Güvenlik Numarası giriniz."
-
-#: contrib/localflavor/au/forms.py:16
+msgstr ""
+"Lütfen XXXX XXXXXX formatında geçerli bir Avusturya Sosyal Güvenlik Numarası "
+"giriniz."
+
+#: contrib/localflavor/au/forms.py:17
 msgid "Enter a 4 digit post code."
 msgstr "4 rakamlı posta kodu girin."
 
-#: contrib/localflavor/br/forms.py:21
+#: contrib/localflavor/br/forms.py:22
 msgid "Enter a zip code in the format XXXXX-XXX."
 msgstr "XXXXX-XXX formatında posta kodu girin."
 
-#: contrib/localflavor/br/forms.py:30
+#: contrib/localflavor/br/forms.py:31
 msgid "Phone numbers must be in XX-XXXX-XXXX format."
 msgstr "Telefon numaraları XX-XXXX-XXXX formatında olmalıdır."
 
-#: contrib/localflavor/br/forms.py:58
-msgid "Select a valid brazilian state. That state is not one of the available states."
-msgstr "Lütfen geçerli bir Brezilya bölgesi seçin. Seçilen bölge mevcutlar arasında yoktur."
-
-#: contrib/localflavor/br/forms.py:94
+#: contrib/localflavor/br/forms.py:59
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
+msgstr ""
+"Lütfen geçerli bir Brezilya bölgesi seçin. Seçilen bölge mevcutlar arasında "
+"yoktur."
+
+#: contrib/localflavor/br/forms.py:95
 msgid "Invalid CPF number."
 msgstr "Geçersiz CPF numarası."
 
-#: contrib/localflavor/br/forms.py:95
+#: contrib/localflavor/br/forms.py:96
 msgid "This field requires at most 11 digits or 14 characters."
 msgstr "Bu en fazla 11 rakam veya 14 karakter gerektirmektedir."
 
-#: contrib/localflavor/br/forms.py:134
+#: contrib/localflavor/br/forms.py:135
 msgid "Invalid CNPJ number."
 msgstr "Geçersiz CNPJ numarası."
 
-#: contrib/localflavor/br/forms.py:136
+#: contrib/localflavor/br/forms.py:137
 msgid "This field requires at least 14 digits"
 msgstr "Bu alan en az 14 rakam gerektirmektedir"
 
-#: contrib/localflavor/ca/forms.py:17
+#: contrib/localflavor/ca/forms.py:25
 msgid "Enter a postal code in the format XXX XXX."
 msgstr "XXX XXX formatında posta kodunu girin."
 
-#: contrib/localflavor/ca/forms.py:88
+#: contrib/localflavor/ca/forms.py:96
 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
-msgstr "Lütfen XXX-XXX-XXX formatında geçerli bir Kanada Sosyal Güvenlik Numarası girin."
+msgstr ""
+"Lütfen XXX-XXX-XXX formatında geçerli bir Kanada Sosyal Güvenlik Numarası "
+"girin."
 
 #: contrib/localflavor/ch/ch_states.py:5
 msgid "Aargau"
@@ -1771,22 +2109,104 @@
 msgid "Zurich"
 msgstr "Zürih"
 
-#: contrib/localflavor/ch/forms.py:64
-msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
-msgstr "Lütfen X1234567<0 veya 1234567890 formatında geçerli bir İsviçre kimlik veya pasaport numarası giriniz."
-
-#: contrib/localflavor/cl/forms.py:29
+#: contrib/localflavor/ch/forms.py:65
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr ""
+"Lütfen X1234567<0 veya 1234567890 formatında geçerli bir İsviçre kimlik veya "
+"pasaport numarası giriniz."
+
+#: contrib/localflavor/cl/forms.py:30
 msgid "Enter a valid Chilean RUT."
 msgstr "Geçerli bir Şili RUT numarası girin."
 
-#: contrib/localflavor/cl/forms.py:30
+#: contrib/localflavor/cl/forms.py:31
 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
 msgstr "Geçerli bir Şili RUT numarası girin. Format: XX.XXX.XXX-X."
 
-#: contrib/localflavor/cl/forms.py:31
+#: contrib/localflavor/cl/forms.py:32
 msgid "The Chilean RUT is not valid."
 msgstr "Şili  RUT numarası geçersizdir."
 
+#: contrib/localflavor/cz/cz_regions.py:8
+msgid "Prague"
+msgstr "Prag"
+
+#: contrib/localflavor/cz/cz_regions.py:9
+msgid "Central Bohemian Region"
+msgstr "Merkezi Bohemia Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:10
+msgid "South Bohemian Region"
+msgstr "Güney Bohemia Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:11
+msgid "Pilsen Region"
+msgstr "Pilsen Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:12
+msgid "Carlsbad Region"
+msgstr "Carlsbad Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:13
+msgid "Usti Region"
+msgstr "Usti Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:14
+msgid "Liberec Region"
+msgstr "Liberec Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:15
+msgid "Hradec Region"
+msgstr "Hradec Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:16
+msgid "Pardubice Region"
+msgstr "Pardubice Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:17
+msgid "Vysocina Region"
+msgstr "Vysocina Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:18
+msgid "South Moravian Region"
+msgstr "South Moravian Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:19
+msgid "Olomouc Region"
+msgstr "Olomouc Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:20
+msgid "Zlin Region"
+msgstr "Zlin Bölgesi"
+
+#: contrib/localflavor/cz/cz_regions.py:21
+msgid "Moravian-Silesian Region"
+msgstr "Moravian-Silesian Bölgesi"
+
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
+msgid "Enter a postal code in the format XXXXX or XXX XX."
+msgstr "XXXXX ya da XXX XX formatında bir posta kodu girin."
+
+#: contrib/localflavor/cz/forms.py:48
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr ""
+"XXXXXX/XXXX veya XXXXXXXXXX formatında geçerli bir doğum numarası girin."
+
+#: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+"Geçersiz isteğe bağlı Cinsiyet parametresi, geçerli değerler 'f' ve 'm'dir"
+
+#: contrib/localflavor/cz/forms.py:50
+msgid "Enter a valid birth number."
+msgstr "Geçerli bir doğum numarası girin."
+
+#: contrib/localflavor/cz/forms.py:107
+msgid "Enter a valid IC number."
+msgstr "Geçerli bir IC numarası girin."
+
 #: contrib/localflavor/de/de_states.py:5
 msgid "Baden-Wuerttemberg"
 msgstr "Baden-Wuerttemberg"
@@ -1851,15 +2271,18 @@
 msgid "Thuringia"
 msgstr "Thuringia"
 
-#: contrib/localflavor/de/forms.py:14
-#: contrib/localflavor/fi/forms.py:12
-#: contrib/localflavor/fr/forms.py:15
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
 msgid "Enter a zip code in the format XXXXX."
 msgstr "XXXXX formatında posta kodu girin."
 
-#: contrib/localflavor/de/forms.py:41
-msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
-msgstr "Lütfen XXXXXXXXXXX-XXXXXXX-XXXXXXX-X formatında geçerli bir Alman kimlik numarası giriniz."
+#: contrib/localflavor/de/forms.py:42
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr ""
+"Lütfen XXXXXXXXXXX-XXXXXXX-XXXXXXX-X formatında geçerli bir Alman kimlik "
+"numarası giriniz."
 
 #: contrib/localflavor/es/es_provinces.py:5
 msgid "Arava"
@@ -2128,67 +2551,507 @@
 msgid "Valencian Community"
 msgstr "Valencian Community"
 
-#: contrib/localflavor/es/forms.py:19
+#: contrib/localflavor/es/forms.py:20
 msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
 msgstr "01XXX - 52XXX aralığında ve formatında geçerli bir posta kodu girin."
 
-#: contrib/localflavor/es/forms.py:39
-msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
-msgstr "6XXXXXXXX, 8XXXXXXXX ya da 9XXXXXXXX formatlarından birisine uyan geçerli bir posta kodu girin."
-
-#: contrib/localflavor/es/forms.py:66
-msgid "Please enter a valid NIF, NIE, or CIF."
-msgstr "Lütfen geçerli bir NIF, NIE ya da CIF girin."
+#: contrib/localflavor/es/forms.py:40
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+"6XXXXXXXX, 8XXXXXXXX ya da 9XXXXXXXX formatlarından birisine uyan geçerli "
+"bir posta kodu girin."
 
 #: contrib/localflavor/es/forms.py:67
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr "Lütfen geçerli bir NIF, NIE ya da CIF girin."
+
+#: contrib/localflavor/es/forms.py:68
 msgid "Please enter a valid NIF or NIE."
 msgstr "Lütfen geçerli bir NIF ya da NIE girin."
 
-#: contrib/localflavor/es/forms.py:68
+#: contrib/localflavor/es/forms.py:69
 msgid "Invalid checksum for NIF."
 msgstr "Yanlış NIF sağlama toplamı."
 
-#: contrib/localflavor/es/forms.py:69
+#: contrib/localflavor/es/forms.py:70
 msgid "Invalid checksum for NIE."
 msgstr "Yanlış NIE sağlama toplamı."
 
-#: contrib/localflavor/es/forms.py:70
+#: contrib/localflavor/es/forms.py:71
 msgid "Invalid checksum for CIF."
 msgstr "Yanlış CIF sağlama toplamı."
 
-#: contrib/localflavor/es/forms.py:142
-msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
-msgstr "Lütfen XXXX-XXXX-XX-XXXXXXXXXX formatında geçerli bir banka hesabı numarası girin."
-
 #: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr ""
+"Lütfen XXXX-XXXX-XX-XXXXXXXXXX formatında geçerli bir banka hesabı numarası "
+"girin."
+
+#: contrib/localflavor/es/forms.py:144
 msgid "Invalid checksum for bank account number."
 msgstr "Banka hesabı numarası için geçersiz sağlama toplamı."
 
-#: contrib/localflavor/fi/forms.py:28
+#: contrib/localflavor/fi/forms.py:29
 msgid "Enter a valid Finnish social security number."
 msgstr "Geçerli bir Finlandiya sosyal güvenlik numarası girin."
 
-#: contrib/localflavor/in_/forms.py:14
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr "Telefon numaraları 0X XX XX XX XX formatında olmalıdır."
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr "Geçerli bir posta kodu girin"
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Geçerli bir telefon numarası girin"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Geçerli bir araç plaka numarası girin"
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Geçerli bir NIK/KTP numarası girin"
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr "Bali"
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr "Banten"
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr "Bengkulu"
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr "Yogyakarta"
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr "Jakarta"
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr "Gorontalo"
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr "Jambi"
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr "Jawa Barat"
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr "Jawa Tengah"
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr "Jawa Timur"
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr "Kalimantan Barat"
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr "Kalimantan Selatan"
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr "Kalimantan Tengah"
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr "Kalimantan Timur"
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr "Kepulauan Bangka-Belitung"
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr "Kepulauan Riau"
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr "Lampung"
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr "Maluku"
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr "Maluku Utara"
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr "Nanggroe Aceh Darussalam"
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr "Nusa Tenggara Barat"
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr "Nusa Tenggara Timur"
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr "Papua"
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr "Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr "Riau"
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr "Sulawesi Barat"
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr "Sulawesi Selatan"
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr "Sulawesi Tengah"
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr "Sulawesi Tenggara"
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr "Sulawesi Utara"
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr "Sumatera Barat"
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr "Sumatera Selatan"
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr "Sumatera Utara"
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr "Magelang"
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr "Surakarta - Solo"
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr "Madiun"
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr "Kediri"
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr "Tapanuli"
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr "Kepulauan Bangka Belitung"
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr "Corps Consulate"
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr "Corps Diplomatic"
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr "Bandung"
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr "Sulawesi Utara Daratan"
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr "NTT - Timor"
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr "Sulawesi Utara Kepulauan"
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr "NTB - Lombok"
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr "Papua dan Papua Barat"
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr "Cirebon"
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr "NTB - Sumbawa"
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr "NTT - Flores"
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr "NTT - Sumba"
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr "Bogor"
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr "Pekalongan"
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr "Semarang"
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr "Pati"
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr "Surabaya"
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr "Madura"
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr "Malang"
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr "Jember"
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr "Banyumas"
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr "Federal Hükümet"
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr "Bojonegoro"
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr "Purwakarta"
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr "Sidoarjo"
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr "Garut"
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr "Antrim"
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr "Armagh"
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr "Carlow"
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr "Cavan"
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr "Clare"
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr "Cork"
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr "Derry"
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr "Donegal"
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr "Down"
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr "Dublin"
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr "Fermanagh"
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr "Galway"
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr "Kerry"
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr "Kildare"
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr "Kilkenny"
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr "Laois"
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr "Leitrim"
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr "Limerick"
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr "Longford"
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr "Louth"
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr "Mayo"
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr "Meath"
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr "Monaghan"
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr "Offaly"
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr "Roscommon"
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr "Sligo"
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr "Tipperary"
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr "Tyrone"
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr "Waterford"
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr "Westmeath"
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr "Wexford"
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr "Wicklow"
+
+#: contrib/localflavor/in_/forms.py:15
 msgid "Enter a zip code in the format XXXXXXX."
 msgstr "XXXXXXX formatında bir posta kodu girin."
 
-#: contrib/localflavor/is_/forms.py:17
-msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+#: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
 msgstr "Geçerli bir İzlanda kimlik numarası girin. Format: XXXXXX-XXXX."
 
-#: contrib/localflavor/is_/forms.py:18
+#: contrib/localflavor/is_/forms.py:19
 msgid "The Icelandic identification number is not valid."
 msgstr "Geçersiz İzlanda kimlik numarası."
 
-#: contrib/localflavor/it/forms.py:14
+#: contrib/localflavor/it/forms.py:15
 msgid "Enter a valid zip code."
 msgstr "Geçerli bir posta kodu girin."
 
-#: contrib/localflavor/it/forms.py:43
+#: contrib/localflavor/it/forms.py:44
 msgid "Enter a valid Social Security number."
 msgstr "Geçerli bir Sosyal Güvenlik numarası girin."
 
-#: contrib/localflavor/it/forms.py:68
+#: contrib/localflavor/it/forms.py:69
 msgid "Enter a valid VAT number."
 msgstr "Geçerli bir VAT girin."
 
@@ -2384,6 +3247,10 @@
 msgid "Okinawa"
 msgstr "Okinawa"
 
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Geçerli bir Kuveyt kimlik numarası girin"
+
 #: contrib/localflavor/mx/mx_states.py:12
 msgid "Aguascalientes"
 msgstr "Aguascalientes"
@@ -2512,15 +3379,11 @@
 msgid "Zacatecas"
 msgstr "Zacatecas"
 
-#: contrib/localflavor/nl/forms.py:21
+#: contrib/localflavor/nl/forms.py:22
 msgid "Enter a valid postal code"
 msgstr "Geçerli bir posta kodu girin"
 
-#: contrib/localflavor/nl/forms.py:52
-msgid "Enter a valid phone number"
-msgstr "Geçerli bir telefon numarası girin"
-
-#: contrib/localflavor/nl/forms.py:78
+#: contrib/localflavor/nl/forms.py:79
 msgid "Enter a valid SoFi number"
 msgstr "Geçerli bir SoFi numarası girin"
 
@@ -2572,15 +3435,15 @@
 msgid "Zuid-Holland"
 msgstr "Zuid-Holland"
 
-#: contrib/localflavor/no/forms.py:33
+#: contrib/localflavor/no/forms.py:34
 msgid "Enter a valid Norwegian social security number."
 msgstr "Geçerli bir Norveç Sosyal Güvenlik numarası girin."
 
-#: contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:25
 msgid "This field requires 8 digits."
 msgstr "Bu alan 8 rakam gerektirmektedir."
 
-#: contrib/localflavor/pe/forms.py:52
+#: contrib/localflavor/pe/forms.py:53
 msgid "This field requires 11 digits."
 msgstr "Bu alan 11 rakam gerektirmektedir."
 
@@ -2593,22 +3456,25 @@
 msgstr "Ulusal Kimlik Numarası için geçersiz sağlama toplamı."
 
 #: contrib/localflavor/pl/forms.py:71
-msgid "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
-msgstr "XXX-XXX-XX-XX or XX-XX-XXX-XXX formatında geçerli bir vergi numarası (NIP) girin."
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr ""
+"XXX-XXX-XX-XX or XX-XX-XXX-XXX formatında geçerli bir vergi numarası (NIP) "
+"girin."
 
 #: contrib/localflavor/pl/forms.py:72
 msgid "Wrong checksum for the Tax Number (NIP)."
 msgstr "Vergi Numarası (NIP) için geçersiz sağlama toplamı."
 
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
-msgstr "Ulusal İş Kayıt Numarası (REGON) 7 veya 9 rakamdan oluşmaktadır."
-
-#: contrib/localflavor/pl/forms.py:112
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr "Ulusal İş Kayıt Numarası (REGON) 9 veya 17 rakamdan oluşmaktadır."
+
+#: contrib/localflavor/pl/forms.py:110
 msgid "Wrong checksum for the National Business Register Number (REGON)."
 msgstr "Ulusal İş Kayıt Numarası (REGON) için geçersiz sağlama toplamı."
 
-#: contrib/localflavor/pl/forms.py:155
+#: contrib/localflavor/pl/forms.py:148
 msgid "Enter a postal code in the format XX-XXX."
 msgstr "XX-XXX formatında bir posta kodu girin."
 
@@ -2676,6 +3542,15 @@
 msgid "West Pomerania"
 msgstr "Batı Pomerania"
 
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "XXXX-XXX formatında posta kodu girin."
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+"Telefon numaraları 9 rakamdan oluşmalı, veyahut + veya 00 ile başlamalıdır."
+
 #: contrib/localflavor/ro/forms.py:19
 msgid "Enter a valid CIF."
 msgstr "Geçerli bir CIF girin."
@@ -2696,9 +3571,105 @@
 msgid "Enter a valid postal code in the format XXXXXX"
 msgstr "XXXXXX formatında bir posta kodu girin."
 
-#: contrib/localflavor/sk/forms.py:30
-msgid "Enter a postal code in the format XXXXX or XXX XX."
-msgstr "XXXXX ya da XXX XX formatında bir posta kodu girin."
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Geçerli bir İsveç organizasyon numarası girin."
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Geçerli bir İsveç kimlik numarası girin."
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "Kordinat numaralarına izin verilmemektedir"
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "XXXXX formatında geçerli bir İsveç posta kodu girin."
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr "Stockholm"
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr "Västerbotten"
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr "Norrbotten"
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr "Uppsala"
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr "Södermanland"
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr "Östergötland"
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr "Jönköping"
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr "Kronoberg"
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr "Kalmar"
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr "Gotland"
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr "Blekinge"
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr "Skåne"
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr "Halland"
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr "Västra Götaland"
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr "Värmland"
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr "Örebro"
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr "Västmanland"
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr "Dalarna"
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr "Gävleborg"
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr "Västernorrland"
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr "Jämtland"
 
 #: contrib/localflavor/sk/sk_districts.py:8
 msgid "Banska Bystrica"
@@ -3332,19 +4303,44 @@
 msgid "Wales"
 msgstr "Wales"
 
-#: contrib/localflavor/us/forms.py:16
+#: contrib/localflavor/us/forms.py:17
 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
 msgstr "XXXXX ya da XXXXX-XXXX biçiminde bir posta kodu yazın."
 
-#: contrib/localflavor/us/forms.py:54
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Telefon numaraları XXX-XXX-XXXX formatında olmalıdır."
+
+#: contrib/localflavor/us/forms.py:55
 msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
-msgstr "XXX-XX-XXXX formatında geçerli bir A.B.D. Sosyal Güvenlik Numarası giriniz."
-
-#: contrib/localflavor/za/forms.py:20
+msgstr ""
+"XXX-XX-XXXX formatında geçerli bir A.B.D. Sosyal Güvenlik Numarası giriniz."
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "ABD devlet veya bölge adı girin."
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Şehir Kodu (iki karakter)"
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Telefon numarası"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr "X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX formatında geçerli bir CI girin."
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Geçerli bir CI numarası girin."
+
+#: contrib/localflavor/za/forms.py:21
 msgid "Enter a valid South African ID number"
 msgstr "Geçerli bir Güney Afrika Cumhuriyeti kimlik numarası girin"
 
-#: contrib/localflavor/za/forms.py:54
+#: contrib/localflavor/za/forms.py:55
 msgid "Enter a valid South African postal code"
 msgstr "Geçerli bir Güney Afrika Cumhuriyeti posta kodu girin"
 
@@ -3384,21 +4380,33 @@
 msgid "Western Cape"
 msgstr "Batı Cape"
 
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr "tembel mesaj"
+
 #: contrib/redirects/models.py:7
 msgid "redirect from"
 msgstr "eski adres"
 
 #: contrib/redirects/models.py:8
-msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'."
-msgstr "Buraya tam dosya yolu, alan adı kullanılmadan yazılmalı. Örnek: '/events/search/'."
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Buraya tam dosya yolu, alan adı kullanılmadan yazılmalı. Örnek: '/events/"
+"search/'."
 
 #: contrib/redirects/models.py:9
 msgid "redirect to"
 msgstr "yeni adres"
 
 #: contrib/redirects/models.py:10
-msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'."
-msgstr "Buraya tam dosya yolu (yukarıdaki gibi), ya da 'http://' ile başlayan tam adres yazılmalı."
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Buraya tam dosya yolu (yukarıdaki gibi), ya da 'http://' ile başlayan tam "
+"adres yazılmalı."
 
 #: contrib/redirects/models.py:13
 msgid "redirect"
@@ -3440,241 +4448,404 @@
 msgid "sites"
 msgstr "siteler"
 
-#: db/models/fields/__init__.py:348
-#: db/models/fields/__init__.py:683
+#: core/validators.py:20 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Geçerli bir değer girin."
+
+#: core/validators.py:87 forms/fields.py:529
+msgid "Enter a valid URL."
+msgstr "Geçerli bir URL girin."
+
+#: core/validators.py:89 forms/fields.py:530
+msgid "This URL appears to be a broken link."
+msgstr "Bu URL geçersiz bir link gibi duruyor."
+
+#: core/validators.py:123 forms/fields.py:873
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr "Lütfen sadece harf, rakam, altçizgi veya çizgiden oluşan değer girin."
+
+#: core/validators.py:126 forms/fields.py:866
+msgid "Enter a valid IPv4 address."
+msgstr "Geçerli bir IPv4 adresi girin."
+
+#: core/validators.py:129 db/models/fields/__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Sadece virgülle ayrılmış sayılar girin."
+
+#: core/validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+"Bu değerin en az %(limit_value)s karakterden oluştuğundan emin olun (şu anki "
+"karakter sayısı: %(show_value)s)."
+
+#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr ""
+"Bu değerin %(limit_value)s karakterden az veya eşit olduğundan emin olun."
+
+#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr ""
+"Bu değerin %(limit_value)s karakterden çok veya eşit olduğundan emin olun."
+
+#: core/validators.py:164
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Bu değerin en az %(limit_value)d karakterden oluştuğundan emin olun (şu anki "
+"karakter sayısı: %(show_value)d)."
+
+#: core/validators.py:170
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+"Bu değerin en fazla %(limit_value)d karakterden oluştuğundan emin olun (şu "
+"anki karakter sayısı: %(show_value)d)."
+
+#: db/models/base.py:822
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr ""
+"%(field_name)s değeri %(date_field)s alanı %(lookup)s işlemi için tek "
+"olmalıdır."
+
+#: db/models/base.py:837 db/models/base.py:845
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(field_label)s alanına sahip %(model_name)s zaten mevcuttur."
+
+#: db/models/fields/__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "%r değerli geçerli bir seçim değil."
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be null."
+msgstr "Bu alan boş bırakılamaz."
+
+#: db/models/fields/__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Bu alan boş bırakılamaz. "
+
+#: db/models/fields/__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Alan türü: %(field_type)s"
+
+#: db/models/fields/__init__.py:451 db/models/fields/__init__.py:852
+#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
+#: db/models/fields/__init__.py:999
+msgid "Integer"
+msgstr "Tamsayı"
+
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
 msgid "This value must be an integer."
 msgstr "Bu değer tamsayı olmalı."
 
-#: db/models/fields/__init__.py:379
+#: db/models/fields/__init__.py:490
 msgid "This value must be either True or False."
 msgstr "Bu değer True ya da False olabilir."
 
-#: db/models/fields/__init__.py:412
-msgid "This field cannot be null."
-msgstr "Bu alan boş bırakılamaz."
-
-#: db/models/fields/__init__.py:428
-msgid "Enter only digits separated by commas."
-msgstr "Sadece virgülle ayrılmış sayılar girin."
-
-#: db/models/fields/__init__.py:459
+#: db/models/fields/__init__.py:492
+msgid "Boolean (Either True or False)"
+msgstr "Mantıksal (True ya da False)"
+
+#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Karakter disizi (en fazla %(max_length)s)"
+
+#: db/models/fields/__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Virgülle ayrılmış tamsayılar"
+
+#: db/models/fields/__init__.py:581
+msgid "Date (without time)"
+msgstr "Tarih (saat yok)"
+
+#: db/models/fields/__init__.py:585
 msgid "Enter a valid date in YYYY-MM-DD format."
 msgstr "YYYY-AA-GG formatında tarih girin."
 
-#: db/models/fields/__init__.py:468
+#: db/models/fields/__init__.py:586
 #, python-format
 msgid "Invalid date: %s"
 msgstr "Geçersiz tarih: %s"
 
-#: db/models/fields/__init__.py:532
-#: db/models/fields/__init__.py:550
+#: db/models/fields/__init__.py:667
 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
-msgstr "YYYY-MM-DD HH:MM[:ss[.uuuuuu]] formatında geçerli bir tarih ve saat girin."
-
-#: db/models/fields/__init__.py:586
+msgstr ""
+"YYYY-MM-DD HH:MM[:ss[.uuuuuu]] formatında geçerli bir tarih ve saat girin."
+
+#: db/models/fields/__init__.py:669
+msgid "Date (with time)"
+msgstr "Tarih (saat var)"
+
+#: db/models/fields/__init__.py:735
 msgid "This value must be a decimal number."
 msgstr "Bu değer ondalık sayı olmalıdır."
 
-#: db/models/fields/__init__.py:719
+#: db/models/fields/__init__.py:737
+msgid "Decimal number"
+msgstr "Ondalık sayı:"
+
+#: db/models/fields/__init__.py:792
+msgid "E-mail address"
+msgstr "E-posta adresi"
+
+#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Dosya yolu"
+
+#: db/models/fields/__init__.py:822
+msgid "This value must be a float."
+msgstr "Bu değer ondalık sayı olmalı."
+
+#: db/models/fields/__init__.py:824
+msgid "Floating point number"
+msgstr "Floating point rakamı"
+
+#: db/models/fields/__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Büyük (8 bayt) integer"
+
+#: db/models/fields/__init__.py:912
 msgid "This value must be either None, True or False."
 msgstr "Bu değer None, True ya da False olabilir."
 
-#: db/models/fields/__init__.py:817
-#: db/models/fields/__init__.py:831
+#: db/models/fields/__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Mantıksal (True, False, ya da None)"
+
+#: db/models/fields/__init__.py:1005
+msgid "Text"
+msgstr "Metin"
+
+#: db/models/fields/__init__.py:1021
+msgid "Time"
+msgstr "Saat"
+
+#: db/models/fields/__init__.py:1025
 msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
 msgstr "HH:MM[:ss[.uuuuuu]] formatında geçerli bir saat girin."
 
-#: db/models/fields/related.py:761
-msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
-msgstr "\"Ctrl\" ve Mac'de \"Command\" tuşunu basılı tutarak birden fazla seçimde bulunabilirsiniz."
-
-#: db/models/fields/related.py:838
+#: db/models/fields/__init__.py:1109
+msgid "XML text"
+msgstr "XML metni"
+
+#: db/models/fields/related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "Birincil anahtarı %(pk)r olan %(model)s mevcut değil."
+
+#: db/models/fields/related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Yabancı Anahtar (türü ilişkili alana göre belirlenir)"
+
+#: db/models/fields/related.py:918
+msgid "One-to-one relationship"
+msgstr "Bire-bir ilişki"
+
+#: db/models/fields/related.py:980
+msgid "Many-to-many relationship"
+msgstr "Çoğa-çok ilişki"
+
+#: db/models/fields/related.py:1000
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"\"Ctrl\" (Mac'de \"Command\") tuşunu basılı tutularak birden fazla seçim "
+"yapılabilir."
+
+#: db/models/fields/related.py:1061
 #, python-format
 msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] "Lütfen geçerli bir %(self)s numarası girin. %(value)r değeri geçersiz."
-msgstr[1] "Lütfen geçerli %(self)s numaraları girin. %(value)r değerleri geçersiz."
-
-#: forms/fields.py:54
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] ""
+"Lütfen geçerli %(self)s ID'ler giriniz. %(value)r değeri geçersizdir."
+
+#: forms/fields.py:65
 msgid "This field is required."
 msgstr "Bu alan zorunludur."
 
-#: forms/fields.py:55
-msgid "Enter a valid value."
-msgstr "Geçerli bir değer girin."
-
-#: forms/fields.py:138
-#, python-format
-msgid "Ensure this value has at most %(max)d characters (it has %(length)d)."
-msgstr "Bu değerin en fazla %(max)d karakterden oluştuğundan emin olun (şu anki karakter sayısı: %(length)d)."
-
-#: forms/fields.py:139
-#, python-format
-msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
-msgstr "Bu değerin en az %(min)d karakterden oluştuğundan emin olun (şu anki karakter sayısı: %(length)d)."
-
-#: forms/fields.py:166
+#: forms/fields.py:204
 msgid "Enter a whole number."
 msgstr "Tam sayı girin."
 
-#: forms/fields.py:167
-#: forms/fields.py:196
-#: forms/fields.py:225
-#, python-format
-msgid "Ensure this value is less than or equal to %s."
-msgstr "Bu değerin %s karakterden az veya eşit olduğundan emin ol."
-
-#: forms/fields.py:168
-#: forms/fields.py:197
-#: forms/fields.py:226
-#, python-format
-msgid "Ensure this value is greater than or equal to %s."
-msgstr "Bu değerin %s karakterden çok veya eşit olduğundan emin ol."
-
-#: forms/fields.py:195
-#: forms/fields.py:224
+#: forms/fields.py:235 forms/fields.py:256
 msgid "Enter a number."
 msgstr "Bir sayı girin."
 
-#: forms/fields.py:227
+#: forms/fields.py:259
 #, python-format
 msgid "Ensure that there are no more than %s digits in total."
 msgstr "Toplamda en fazla %s sayının olduğundan emin olun."
 
-#: forms/fields.py:228
+#: forms/fields.py:260
 #, python-format
 msgid "Ensure that there are no more than %s decimal places."
 msgstr "En fazla %s onluk yerin olduğundan emin olun."
 
-#: forms/fields.py:229
+#: forms/fields.py:261
 #, python-format
 msgid "Ensure that there are no more than %s digits before the decimal point."
 msgstr "Onluk kısımdan önce en fazla %s sayı olduğundan emin olun."
 
-#: forms/fields.py:287
-#: forms/fields.py:848
+#: forms/fields.py:323 forms/fields.py:838
 msgid "Enter a valid date."
 msgstr "Geçerli bir tarih girin."
 
-#: forms/fields.py:321
-#: forms/fields.py:849
+#: forms/fields.py:351 forms/fields.py:839
 msgid "Enter a valid time."
 msgstr "Geçerli bir zaman girin."
 
-#: forms/fields.py:360
+#: forms/fields.py:377
 msgid "Enter a valid date/time."
 msgstr "Geçerli bir tarih/zaman girin."
 
-#: forms/fields.py:446
+#: forms/fields.py:435
 msgid "No file was submitted. Check the encoding type on the form."
 msgstr "Dosya gönderilmedi. Formdaki kodlama türünü kontrol edin."
 
-#: forms/fields.py:447
+#: forms/fields.py:436
 msgid "No file was submitted."
 msgstr "Hiçbir dosya gönderilmedi."
 
-#: forms/fields.py:448
+#: forms/fields.py:437
 msgid "The submitted file is empty."
 msgstr "Gönderilen dosya boş."
 
-#: forms/fields.py:477
-msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
-msgstr "Geçerli bir resim girin. Gönderdiğiniz dosya resim değil, ya da bozuk bir dosya."
-
-#: forms/fields.py:538
-msgid "Enter a valid URL."
-msgstr "Geçerli bir URL girin."
-
-#: forms/fields.py:539
-msgid "This URL appears to be a broken link."
-msgstr "Bu URL geçersiz bir link gibi duruyor."
-
-#: forms/fields.py:618
-#: forms/fields.py:696
+#: forms/fields.py:438
+#, python-format
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+"Bu dosya adının en fazla %(max)d karakterden oluştuğundan emin olun (şu anki "
+"karakter sayısı: %(length)d)."
+
+#: forms/fields.py:473
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Geçerli bir resim girin. Gönderdiğiniz dosya resim değil, ya da bozuk bir "
+"dosya."
+
+#: forms/fields.py:596 forms/fields.py:671
 #, python-format
 msgid "Select a valid choice. %(value)s is not one of the available choices."
 msgstr "Geçerli bir seçimde bulunun; %(value)s mevcut değerlerden biri değil."
 
-#: forms/fields.py:697
-#: forms/fields.py:758
-#: forms/models.py:654
+#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1007
 msgid "Enter a list of values."
 msgstr "Değer listesi giriniz."
 
-#: forms/fields.py:877
-msgid "Enter a valid IPv4 address."
-msgstr "Geçerli bir IPv4 adresi girin."
-
-#: forms/fields.py:887
-msgid "Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
-msgstr "Lütfen sadece harf, rakam, altçizgi veya çizgiden oluşan değer girin."
-
-#: forms/formsets.py:242
-#: forms/formsets.py:244
+#: forms/formsets.py:298 forms/formsets.py:300
 msgid "Order"
 msgstr "Sıralama"
 
-#: forms/models.py:268
-#: forms/models.py:277
+#: forms/models.py:567
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Lütfen %(field)s alanları için mükerrer kayıt problemini düzeltin."
+
+#: forms/models.py:571
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+"Lütfen %(field)s alanı için mükerrer verileri düzeltin, bunlar eşsiz "
+"olmalıdır."
+
+#: forms/models.py:577
 #, python-format
-msgid "%(model_name)s with this %(field_label)s already exists."
-msgstr "%(field_label)s alanına sahip %(model_name)s zaten mevcuttur."
-
-#: forms/models.py:584
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+"Lütfen %(field_name)s alanı için mükerrer verileri düzeltin, bunlar %"
+"(date_field)s alanı %(lookup)s sorgulamaları için eşsiz olmalıdır."
+
+#: forms/models.py:585
+msgid "Please correct the duplicate values below."
+msgstr "Lütfen aşağıdaki mükerrer kayıtları düzeltin."
+
+#: forms/models.py:860
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr ""
+"İçeride belirtilmiş yabancı anahtar ebeveyin nesnenin birincil anahtarı ile "
+"uyuşmadı."
+
+#: forms/models.py:926
 msgid "Select a valid choice. That choice is not one of the available choices."
-msgstr "Geçerli bir seçimde bulunun; seçiminiz mevcut değerlerden birisi değil."
-
-#: forms/models.py:655
+msgstr ""
+"Geçerli bir seçimde bulunun; seçiminiz mevcut değerlerden birisi değil."
+
+#: forms/models.py:1008
 #, python-format
 msgid "Select a valid choice. %s is not one of the available choices."
 msgstr "Geçerli bir seçimde bulunun; %s mevcut değerlerden biri değil."
 
-#: template/defaultfilters.py:706
+#: forms/models.py:1010
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr "\"%s\" birincil anahtar için geçerli bir değer değil."
+
+#: template/defaultfilters.py:781
 msgid "yes,no,maybe"
 msgstr "evet,hayır,olabilir"
 
-#: template/defaultfilters.py:737
+#: template/defaultfilters.py:812
 #, python-format
 msgid "%(size)d byte"
 msgid_plural "%(size)d bytes"
 msgstr[0] "%(size)d bayt"
 
-#: template/defaultfilters.py:739
+#: template/defaultfilters.py:814
 #, python-format
 msgid "%.1f KB"
 msgstr "%.1f KB"
 
-#: template/defaultfilters.py:741
+#: template/defaultfilters.py:816
 #, python-format
 msgid "%.1f MB"
 msgstr "%.1f MB"
 
-#: template/defaultfilters.py:742
+#: template/defaultfilters.py:817
 #, python-format
 msgid "%.1f GB"
 msgstr "%.1f GB"
 
-#: utils/dateformat.py:41
+#: utils/dateformat.py:42
 msgid "p.m."
 msgstr "ö.s."
 
-#: utils/dateformat.py:42
+#: utils/dateformat.py:43
 msgid "a.m."
 msgstr "ö.ö."
 
-#: utils/dateformat.py:47
+#: utils/dateformat.py:48
 msgid "PM"
 msgstr "ÖS"
 
-#: utils/dateformat.py:48
+#: utils/dateformat.py:49
 msgid "AM"
 msgstr "ÖÖ"
 
-#: utils/dateformat.py:97
+#: utils/dateformat.py:98
 msgid "midnight"
 msgstr "gece yarısı"
 
-#: utils/dateformat.py:99
+#: utils/dateformat.py:100
 msgid "noon"
 msgstr "öğlen"
 
@@ -3742,28 +4913,23 @@
 msgid "February"
 msgstr "Şubat"
 
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
 msgid "March"
 msgstr "Mart"
 
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
 msgid "April"
 msgstr "Nisan"
 
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
 msgid "May"
 msgstr "Mayıs"
 
-#: utils/dates.py:18
-#: utils/dates.py:31
+#: utils/dates.py:18 utils/dates.py:31
 msgid "June"
 msgstr "Haziran"
 
-#: utils/dates.py:19
-#: utils/dates.py:31
+#: utils/dates.py:19 utils/dates.py:31
 msgid "July"
 msgstr "Temmuz"
 
@@ -3863,7 +5029,7 @@
 msgid "Dec."
 msgstr "Ara."
 
-#: utils/text.py:128
+#: utils/text.py:130
 msgid "or"
 msgstr "ya da"
 
@@ -3871,80 +5037,77 @@
 msgid "year"
 msgid_plural "years"
 msgstr[0] "yıl"
-msgstr[1] "yıl"
 
 #: utils/timesince.py:22
 msgid "month"
 msgid_plural "months"
 msgstr[0] "ay"
-msgstr[1] "ay"
 
 #: utils/timesince.py:23
 msgid "week"
 msgid_plural "weeks"
 msgstr[0] "hafta"
-msgstr[1] "hafta"
 
 #: utils/timesince.py:24
 msgid "day"
 msgid_plural "days"
 msgstr[0] "gün"
-msgstr[1] "gün"
 
 #: utils/timesince.py:25
 msgid "hour"
 msgid_plural "hours"
 msgstr[0] "saat"
-msgstr[1] "saat"
 
 #: utils/timesince.py:26
 msgid "minute"
 msgid_plural "minutes"
 msgstr[0] "dakika"
-msgstr[1] "dakika"
-
-#: utils/timesince.py:43
+
+#: utils/timesince.py:45
 msgid "minutes"
 msgstr "dakika"
 
-#: utils/timesince.py:48
+#: utils/timesince.py:50
 #, python-format
 msgid "%(number)d %(type)s"
 msgstr "%(number)d %(type)s"
 
-#: utils/timesince.py:54
+#: utils/timesince.py:56
 #, python-format
 msgid ", %(number)d %(type)s"
 msgstr ", %(number)d %(type)s"
 
-#: utils/translation/trans_real.py:403
+#: utils/translation/trans_real.py:518
 msgid "DATE_FORMAT"
 msgstr "j F Y"
 
-#: utils/translation/trans_real.py:405
+#: utils/translation/trans_real.py:519
+msgid "DATETIME_FORMAT"
+msgstr "j F Y, H:i"
+
+#: utils/translation/trans_real.py:520
 msgid "TIME_FORMAT"
 msgstr "H:i"
 
-#: utils/translation/trans_real.py:421
+#: utils/translation/trans_real.py:541
 msgid "YEAR_MONTH_FORMAT"
 msgstr "F Y"
 
-#: utils/translation/trans_real.py:422
+#: utils/translation/trans_real.py:542
 msgid "MONTH_DAY_FORMAT"
 msgstr "j F"
 
-#: views/generic/create_update.py:114
+#: views/generic/create_update.py:115
 #, python-format
 msgid "The %(verbose_name)s was created successfully."
 msgstr "%(verbose_name)s başarıyla oluşturuldu."
 
-#: views/generic/create_update.py:156
+#: views/generic/create_update.py:158
 #, python-format
 msgid "The %(verbose_name)s was updated successfully."
 msgstr "%(verbose_name)s başarıyla güncellendi."
 
-#: views/generic/create_update.py:198
+#: views/generic/create_update.py:201
 #, python-format
 msgid "The %(verbose_name)s was deleted."
 msgstr "%(verbose_name)s silindi."
-
Binary file web/lib/django/conf/locale/tr/LC_MESSAGES/djangojs.mo has changed
--- a/web/lib/django/conf/locale/tr/LC_MESSAGES/djangojs.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/tr/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -1,113 +1,123 @@
 # This file is distributed under the same license as the Django package.
-#
+# Metin Amiroff <amiroff@gmail.com>, 2010.
 msgid ""
 msgstr ""
 "Project-Id-Version: Django\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-09-30 01:31+0300\n"
-"PO-Revision-Date: 2006-09-30 01:31+0300\n"
-"Last-Translator: Bahadır Kandemir <bahadir@pardus.org.tr>\n"
+"POT-Creation-Date: 2010-05-02 01:10+0300\n"
+"PO-Revision-Date: 2010-05-02 01:13+0300\n"
+"Last-Translator: Metin Amiroff <amiroff@gmail.com>\n"
 "Language-Team: Bahadır Kandemir <bahadir@pardus.org.tr>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: contrib/admin/media/js/SelectFilter2.js:37
 #, perl-format
 msgid "Available %s"
-msgstr "Mevcut %s"
+msgstr "Toplam %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: contrib/admin/media/js/SelectFilter2.js:45
 msgid "Choose all"
 msgstr "Hepsini seç"
 
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: contrib/admin/media/js/SelectFilter2.js:50
 msgid "Add"
 msgstr "Ekle"
 
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: contrib/admin/media/js/SelectFilter2.js:52
 msgid "Remove"
 msgstr "Kaldır"
 
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: contrib/admin/media/js/SelectFilter2.js:57
 #, perl-format
 msgid "Chosen %s"
 msgstr "Seçilen %s"
 
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: contrib/admin/media/js/SelectFilter2.js:58
 msgid "Select your choice(s) and click "
-msgstr "Seçiminizi yapın ve tıklayın "
+msgstr "Seçiminizi yapın ve yandaki düğmenin aynısına tıklayın "
 
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: contrib/admin/media/js/SelectFilter2.js:63
 msgid "Clear all"
 msgstr "Hepsini temizle"
 
-#: contrib/admin/media/js/dateparse.js:26
+#: contrib/admin/media/js/actions.js:17
+#: contrib/admin/media/js/actions.min.js:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] "%(sel)s / %(cnt)s seçili"
+
 #: contrib/admin/media/js/calendar.js:24
+#: contrib/admin/media/js/dateparse.js:32
 msgid ""
 "January February March April May June July August September October November "
 "December"
-msgstr "Ocak Şubat Mart Nisan Mayıs Haziran Temmuz Ağustos Eylül Ekim Kasım "
-"Aralık"
-
-#: contrib/admin/media/js/dateparse.js:27
-msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
-msgstr "Pazar Pazartesi Salı Çarşamba Perşembe Cuma Cumartesi"
+msgstr ""
+"Ocak Şubat Mart Nisan Mayıs Haziran Temmuz Ağustos Eylül Ekim Kasım Aralık"
 
 #: contrib/admin/media/js/calendar.js:25
 msgid "S M T W T F S"
 msgstr "P P S Ç P C C"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Göster"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Gizle"
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Pazar Pazartesi Salı Çarşamba Perşembe Cuma Cumartesi"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:49
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
 msgid "Now"
 msgstr "Şimdi"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:53
 msgid "Clock"
 msgstr "Saat"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80
 msgid "Choose a time"
 msgstr "Saat seçin"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
 msgid "Midnight"
 msgstr "Geceyarısı"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
 msgid "6 a.m."
 msgstr "Sabah 6"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
 msgid "Noon"
 msgstr "Öğle"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:91
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
 msgid "Cancel"
 msgstr "İptal"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
 msgid "Today"
 msgstr "Bugün"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
 msgid "Calendar"
 msgstr "Takvim"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
 msgid "Yesterday"
 msgstr "Dün"
 
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
 msgid "Tomorrow"
 msgstr "Yarın"
-
-msgid "Show"
-msgstr "Göster"
-
-msgid "Hide"
-msgstr "Gizle"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/tr/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,32 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'd F Y'
+TIME_FORMAT = 'H:i:s'
+DATETIME_FORMAT = 'd F Y H:i:s'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'd F'
+SHORT_DATE_FORMAT = 'd M Y'
+SHORT_DATETIME_FORMAT = 'd M Y H:i:s'
+FIRST_DAY_OF_WEEK = 1 # Pazartesi
+DATE_INPUT_FORMATS = (
+    '%d/%m/%Y', '%d/%m/%y',     # '25/10/2006', '25/10/06'
+    '%Y-%m-%d', '%y-%m-%d',     # '2006-10-25', '06-10-25'
+    # '%d %B %Y', '%d %b. %Y',  # '25 Ekim 2006', '25 Eki. 2006'
+)
+TIME_INPUT_FORMATS = (
+    '%H:%M:%S', # '14:30:59'
+    '%H:%M',    # '14:30'
+)
+DATETIME_INPUT_FORMATS = (
+    '%d/%m/%Y %H:%M:%S',    # '25/10/2006 14:30:59'
+    '%d/%m/%Y %H:%M',       # '25/10/2006 14:30'
+    '%d/%m/%Y',             # '25/10/2006'
+    '%Y-%m-%d %H:%M:%S',    # '2006-10-25 14:30:59'
+    '%Y-%m-%d %H:%M',       # '2006-10-25 14:30'
+    '%Y-%m-%d',             # '2006-10-25'
+)
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+NUMBER_GROUPING = 3
Binary file web/lib/django/conf/locale/uk/LC_MESSAGES/django.mo has changed
--- a/web/lib/django/conf/locale/uk/LC_MESSAGES/django.po	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/locale/uk/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -4185,7 +4185,7 @@
 #: .\forms\fields.py:139 .\newforms\fields.py:125
 msgid "Ensure this value has at least %(min)d characters (it has %(length)d)."
 msgstr ""
-"Переконайтеся, що це значення має не менще %(max)d символів (зараз %(length)"
+"Переконайтеся, що це значення має не менще %(min)d символів (зараз %(length)"
 "d)."
 
 #: .\forms\fields.py:167 .\forms\fields.py:196 .\forms\fields.py:225
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/uk/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = 'j F Y р.'
+TIME_FORMAT = 'H:i:s'
+# DATETIME_FORMAT = 
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'j M Y'
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = ' '
+# NUMBER_GROUPING = 
Binary file web/lib/django/conf/locale/vi/LC_MESSAGES/django.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/vi/LC_MESSAGES/django.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,5058 @@
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-02-21 13:49+0100\n"
+"PO-Revision-Date: 2010-02-07 16:11+0700\n"
+"Last-Translator: Hung. NGUYEN Manh <loveleeyoungae@yahoo.com>\n"
+"Language-Team: Vietnamese <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: conf/global_settings.py:44
+msgid "Arabic"
+msgstr "Tiếng Ả Rập"
+
+#: conf/global_settings.py:45
+msgid "Bulgarian"
+msgstr "Tiếng Bun-ga-ri"
+
+#: conf/global_settings.py:46
+msgid "Bengali"
+msgstr ""
+
+#: conf/global_settings.py:47
+msgid "Bosnian"
+msgstr ""
+
+#: conf/global_settings.py:48
+msgid "Catalan"
+msgstr ""
+
+#: conf/global_settings.py:49
+msgid "Czech"
+msgstr "Séc"
+
+#: conf/global_settings.py:50
+msgid "Welsh"
+msgstr "Xứ Wales"
+
+#: conf/global_settings.py:51
+msgid "Danish"
+msgstr "Tiếng Đan Mạch"
+
+#: conf/global_settings.py:52
+msgid "German"
+msgstr "Tiếng Đức"
+
+#: conf/global_settings.py:53
+msgid "Greek"
+msgstr "Tiếng Hy Lạp"
+
+#: conf/global_settings.py:54
+msgid "English"
+msgstr "Tiếng Anh"
+
+#: conf/global_settings.py:55
+msgid "Spanish"
+msgstr "Tiếng Tây Ban Nha"
+
+#: conf/global_settings.py:56
+msgid "Argentinean Spanish"
+msgstr ""
+
+#: conf/global_settings.py:57
+msgid "Estonian"
+msgstr "Tiếng Estonia"
+
+#: conf/global_settings.py:58
+msgid "Basque"
+msgstr "Tiếng Baxcơ"
+
+#: conf/global_settings.py:59
+msgid "Persian"
+msgstr "Tiếng Ba Tư"
+
+#: conf/global_settings.py:60
+msgid "Finnish"
+msgstr "Tiếng Phần Lan"
+
+#: conf/global_settings.py:61
+msgid "French"
+msgstr "Tiếng Pháp"
+
+#: conf/global_settings.py:62
+msgid "Frisian"
+msgstr ""
+
+#: conf/global_settings.py:63
+msgid "Irish"
+msgstr "Tiếng Ai-len"
+
+#: conf/global_settings.py:64
+msgid "Galician"
+msgstr "Tiếng Pháp cổ"
+
+#: conf/global_settings.py:65
+msgid "Hebrew"
+msgstr "Tiếng Do Thái cổ"
+
+#: conf/global_settings.py:66
+msgid "Hindi"
+msgstr ""
+
+#: conf/global_settings.py:67
+msgid "Croatian"
+msgstr "Tiếng Croatia"
+
+#: conf/global_settings.py:68
+msgid "Hungarian"
+msgstr "Tiếng Hung-ga-ri"
+
+#: conf/global_settings.py:69
+msgid "Icelandic"
+msgstr "Tiếng Aixơlen"
+
+#: conf/global_settings.py:70
+msgid "Italian"
+msgstr "Tiếng Ý"
+
+#: conf/global_settings.py:71
+msgid "Japanese"
+msgstr "Tiếng Nhật Bản"
+
+#: conf/global_settings.py:72
+msgid "Georgian"
+msgstr ""
+
+#: conf/global_settings.py:73
+msgid "Khmer"
+msgstr "Tiếng Khơ-me"
+
+#: conf/global_settings.py:74
+msgid "Kannada"
+msgstr "Tiếng Kannada"
+
+#: conf/global_settings.py:75
+msgid "Korean"
+msgstr "Tiếng Hàn Quốc"
+
+#: conf/global_settings.py:76
+msgid "Lithuanian"
+msgstr "Tiếng Lat-vi"
+
+#: conf/global_settings.py:77
+msgid "Latvian"
+msgstr "Ngôn ngữ vùng Bantic"
+
+#: conf/global_settings.py:78
+msgid "Macedonian"
+msgstr "Tiếng Maxêđôni"
+
+#: conf/global_settings.py:79
+msgid "Dutch"
+msgstr "Tiếng Hà Lan"
+
+#: conf/global_settings.py:80
+msgid "Norwegian"
+msgstr "Tiếng Nauy"
+
+#: conf/global_settings.py:81
+msgid "Polish"
+msgstr "Tiếng Ba lan"
+
+#: conf/global_settings.py:82
+msgid "Portuguese"
+msgstr ""
+
+#: conf/global_settings.py:83
+msgid "Brazilian Portuguese"
+msgstr ""
+
+#: conf/global_settings.py:84
+msgid "Romanian"
+msgstr "Tiếng Ru-ma-ni"
+
+#: conf/global_settings.py:85
+msgid "Russian"
+msgstr "Tiếng Nga"
+
+#: conf/global_settings.py:86
+msgid "Slovak"
+msgstr "Ngôn ngữ Slô-vac"
+
+#: conf/global_settings.py:87
+msgid "Slovenian"
+msgstr "Tiếng Slôven"
+
+#: conf/global_settings.py:88
+msgid "Albanian"
+msgstr ""
+
+#: conf/global_settings.py:89
+msgid "Serbian"
+msgstr "Tiếng Xéc-bi"
+
+#: conf/global_settings.py:90
+msgid "Serbian Latin"
+msgstr ""
+
+#: conf/global_settings.py:91
+msgid "Swedish"
+msgstr "Tiếng Thụy Điển"
+
+#: conf/global_settings.py:92
+msgid "Tamil"
+msgstr "Tiếng Ta-min"
+
+#: conf/global_settings.py:93
+msgid "Telugu"
+msgstr ""
+
+#: conf/global_settings.py:94
+msgid "Thai"
+msgstr ""
+
+#: conf/global_settings.py:95
+msgid "Turkish"
+msgstr "Tiếng Thổ Nhĩ Kỳ"
+
+#: conf/global_settings.py:96
+msgid "Ukrainian"
+msgstr "Tiếng Ukraina"
+
+#: conf/global_settings.py:97
+#, fuzzy
+msgid "Vietnamese"
+msgstr "Thành phố Viên"
+
+#: conf/global_settings.py:98
+msgid "Simplified Chinese"
+msgstr "Tiếng Trung Hoa giản thể"
+
+#: conf/global_settings.py:99
+msgid "Traditional Chinese"
+msgstr "Tiếng Trung Hoa truyền thống"
+
+#: contrib/admin/actions.py:60
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr ""
+
+#: contrib/admin/actions.py:67 contrib/admin/options.py:1096
+msgid "Are you sure?"
+msgstr "Bạn có chắc chắn không?"
+
+#: contrib/admin/actions.py:85
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:44
+#, python-format
+msgid ""
+"<h3>By %s:</h3>\n"
+"<ul>\n"
+msgstr ""
+
+#: contrib/admin/filterspecs.py:75 contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173
+msgid "All"
+msgstr "Tất cả"
+
+#: contrib/admin/filterspecs.py:113
+msgid "Any date"
+msgstr "Bất kì ngày nào"
+
+#: contrib/admin/filterspecs.py:114
+msgid "Today"
+msgstr "Hôm nay"
+
+#: contrib/admin/filterspecs.py:117
+msgid "Past 7 days"
+msgstr "7 ngày về trước"
+
+#: contrib/admin/filterspecs.py:119
+msgid "This month"
+msgstr "Tháng này"
+
+#: contrib/admin/filterspecs.py:121
+msgid "This year"
+msgstr "Năm nay"
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
+msgid "Yes"
+msgstr "Có"
+
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
+msgid "No"
+msgstr "Không"
+
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
+msgid "Unknown"
+msgstr "Chưa xác định"
+
+#: contrib/admin/helpers.py:19
+msgid "Action:"
+msgstr ""
+
+#: contrib/admin/models.py:19
+msgid "action time"
+msgstr "Thời gian tác động"
+
+#: contrib/admin/models.py:22
+msgid "object id"
+msgstr ""
+
+#: contrib/admin/models.py:23
+msgid "object repr"
+msgstr ""
+
+#: contrib/admin/models.py:24
+msgid "action flag"
+msgstr ""
+
+#: contrib/admin/models.py:25
+msgid "change message"
+msgstr "Thay đổi tin nhắn"
+
+#: contrib/admin/models.py:28
+msgid "log entry"
+msgstr ""
+
+#: contrib/admin/models.py:29
+msgid "log entries"
+msgstr ""
+
+#: contrib/admin/options.py:139 contrib/admin/options.py:154
+msgid "None"
+msgstr "Không"
+
+#: contrib/admin/options.py:558
+#, python-format
+msgid "Changed %s."
+msgstr "%s đã được thay đổi."
+
+#: contrib/admin/options.py:558 contrib/admin/options.py:568
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:797
+#: forms/models.py:544
+msgid "and"
+msgstr "và"
+
+#: contrib/admin/options.py:563
+#, python-format
+msgid "Added %(name)s \"%(object)s\"."
+msgstr "%(name)s \"%(object)s\" đã được thêm vào."
+
+#: contrib/admin/options.py:567
+#, python-format
+msgid "Changed %(list)s for %(name)s \"%(object)s\"."
+msgstr "%(list)s for %(name)s \"%(object)s\" đã được thay đổi."
+
+#: contrib/admin/options.py:572
+#, python-format
+msgid "Deleted %(name)s \"%(object)s\"."
+msgstr "%(name)s \"%(object)s\" đã bị xóa."
+
+#: contrib/admin/options.py:576
+msgid "No fields changed."
+msgstr "Không có trường nào thay đổi"
+
+#: contrib/admin/options.py:642
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was added successfully."
+msgstr "%(name)s \"%(obj)s\" được thêm vào thành công."
+
+#: contrib/admin/options.py:646 contrib/admin/options.py:679
+msgid "You may edit it again below."
+msgstr "Bạn có thể sửa lại dưới đây."
+
+#: contrib/admin/options.py:656 contrib/admin/options.py:689
+#, python-format
+msgid "You may add another %s below."
+msgstr "Bạn có thể thêm vào %s dưới đây."
+
+#: contrib/admin/options.py:677
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was changed successfully."
+msgstr "%(name)s \"%(obj)s\" đã được thay đổi thành công."
+
+#: contrib/admin/options.py:685
+#, python-format
+msgid ""
+"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
+msgstr ""
+"%(name)s \"%(obj)s\" đã được thêm vào thành công. Bạn có thể sửa lại dưới "
+"đây."
+
+#: contrib/admin/options.py:738
+msgid ""
+"Items must be selected in order to perform actions on them. No items have "
+"been changed."
+msgstr ""
+
+#: contrib/admin/options.py:756
+msgid "No action selected."
+msgstr ""
+
+#: contrib/admin/options.py:836
+#, python-format
+msgid "Add %s"
+msgstr "Thêm %s"
+
+#: contrib/admin/options.py:862 contrib/admin/options.py:1074
+#, python-format
+msgid "%(name)s object with primary key %(key)r does not exist."
+msgstr ""
+
+#: contrib/admin/options.py:927
+#, python-format
+msgid "Change %s"
+msgstr "Thay đổi %s"
+
+#: contrib/admin/options.py:972
+msgid "Database error"
+msgstr "Cơ sở dữ liệu bị lỗi"
+
+#: contrib/admin/options.py:1008
+#, python-format
+msgid "%(count)s %(name)s was changed successfully."
+msgid_plural "%(count)s %(name)s were changed successfully."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/admin/options.py:1089
+#, python-format
+msgid "The %(name)s \"%(obj)s\" was deleted successfully."
+msgstr "%(name)s \"%(obj)s\" đã được xóa thành công."
+
+#: contrib/admin/options.py:1126
+#, python-format
+msgid "Change history: %s"
+msgstr "Thay đổi bản ghi: %s"
+
+#: contrib/admin/sites.py:22 contrib/admin/views/decorators.py:14
+#: contrib/auth/forms.py:81
+msgid ""
+"Please enter a correct username and password. Note that both fields are case-"
+"sensitive."
+msgstr "Hãy nhập đúng tên đăng nhập và mật khẩu. Chú ý chữ hoa, chữ thường."
+
+#: contrib/admin/sites.py:310 contrib/admin/views/decorators.py:40
+msgid "Please log in again, because your session has expired."
+msgstr "Hãy đăng nhập lại vì giao dịch của bạn đã hết hiệu lực"
+
+#: contrib/admin/sites.py:317 contrib/admin/views/decorators.py:47
+msgid ""
+"Looks like your browser isn't configured to accept cookies. Please enable "
+"cookies, reload this page, and try again."
+msgstr ""
+
+#: contrib/admin/sites.py:333 contrib/admin/sites.py:339
+#: contrib/admin/views/decorators.py:66
+msgid "Usernames cannot contain the '@' character."
+msgstr "Tên đăng nhập không thể chứa kí tự '@'."
+
+#: contrib/admin/sites.py:336 contrib/admin/views/decorators.py:62
+#, python-format
+msgid "Your e-mail address is not your username. Try '%s' instead."
+msgstr "Địa chỉ email của bạn không phải là tên đăng nhập. Hãy thử '%s'."
+
+#: contrib/admin/sites.py:392
+msgid "Site administration"
+msgstr "Site quản trị hệ thống."
+
+#: contrib/admin/sites.py:406 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/templates/registration/password_reset_complete.html:14
+#: contrib/admin/views/decorators.py:20
+msgid "Log in"
+msgstr "Đăng nhập"
+
+#: contrib/admin/sites.py:451
+#, python-format
+msgid "%s administration"
+msgstr "%s quản trị"
+
+#: contrib/admin/util.py:170
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+msgstr "Một hoặc nhiều hơn %(fieldname)s trong %(name)s: %(obj)s"
+
+#: contrib/admin/util.py:175
+#, python-format
+msgid "One or more %(fieldname)s in %(name)s:"
+msgstr "Một hoặc nhiều hơn %(fieldname)s trong %(name)s:"
+
+#: contrib/admin/widgets.py:75
+msgid "Date:"
+msgstr "Ngày:"
+
+#: contrib/admin/widgets.py:75
+msgid "Time:"
+msgstr "Giờ:"
+
+#: contrib/admin/widgets.py:99
+msgid "Currently:"
+msgstr "Hiện tại:"
+
+#: contrib/admin/widgets.py:99
+msgid "Change:"
+msgstr "Thay đổi:"
+
+#: contrib/admin/widgets.py:129
+msgid "Lookup"
+msgstr "Tìm"
+
+#: contrib/admin/widgets.py:241
+msgid "Add Another"
+msgstr "Thêm vào"
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Không tìm thấy trang nào"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Xin lỗi bạn! Trang mà bạn yêu cầu không tìm thấy."
+
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/app_index.html:8
+#: contrib/admin/templates/admin/base.html:54
+#: contrib/admin/templates/admin/change_form.html:18
+#: contrib/admin/templates/admin/change_list.html:39
+#: contrib/admin/templates/admin/delete_confirmation.html:6
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
+#: contrib/admin/templates/admin/invalid_setup.html:4
+#: contrib/admin/templates/admin/object_history.html:6
+#: contrib/admin/templates/admin/auth/user/change_password.html:11
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Home"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Lỗi máy chủ"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Lỗi máy chủ (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Lỗi máy chủ <em>(500)</em>"
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"Xảy ra lỗi. Lỗi này sẽ được gửi tới quản trị hệ thống qua email và sẽ sớm "
+"được sửa chữa. Xin cảm ơn về sựu kiên nhẫn của bạn."
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Run the selected action"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:4
+msgid "Go"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:7
+#, python-format
+msgid ""
+"<span class=\"_acnt\">0</span> of %(total_count)s %(module_name)s selected"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:11
+#, python-format
+msgid "All %(total_count)s %(module_name)s selected"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:14
+msgid "Click here to select all objects across all pages"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:14
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/actions.html:16
+msgid "Clear selection"
+msgstr ""
+
+#: contrib/admin/templates/admin/app_index.html:10
+#: contrib/admin/templates/admin/index.html:19
+#, python-format
+msgid "%(name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:27
+msgid "Welcome,"
+msgstr "Chào mừng bạn,"
+
+#: contrib/admin/templates/admin/base.html:32
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Documentation"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:15
+#: contrib/admin/templates/admin/auth/user/change_password.html:48
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Change password"
+msgstr "Thay đổi mật khẩu"
+
+#: contrib/admin/templates/admin/base.html:47
+#: contrib/admin/templates/registration/password_change_done.html:3
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Log out"
+msgstr "Thoát"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:21
+#: contrib/admin/templates/admin/index.html:29
+msgid "Add"
+msgstr "Thêm vào"
+
+#: contrib/admin/templates/admin/change_form.html:28
+#: contrib/admin/templates/admin/object_history.html:10
+msgid "History"
+msgstr "Bản ghi nhớ"
+
+#: contrib/admin/templates/admin/change_form.html:29
+#: contrib/admin/templates/admin/edit_inline/stacked.html:9
+#: contrib/admin/templates/admin/edit_inline/tabular.html:28
+msgid "View on site"
+msgstr ""
+
+#: contrib/admin/templates/admin/change_form.html:39
+#: contrib/admin/templates/admin/change_list.html:68
+#: contrib/admin/templates/admin/auth/user/change_password.html:24
+#: contrib/admin/templates/registration/password_change_form.html:15
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] "Hãy sửa lỗi sai dưới đây"
+msgstr[1] "Hãy sửa lại những lỗi sai dưới đây"
+
+#: contrib/admin/templates/admin/change_list.html:60
+#, python-format
+msgid "Add %(name)s"
+msgstr "Thêm vào %(name)s"
+
+#: contrib/admin/templates/admin/change_list.html:79
+msgid "Filter"
+msgstr "Bộ lọc"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:10
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:294
+msgid "Delete"
+msgstr "Xóa"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:16
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
+"related objects, but your account doesn't have permission to delete the "
+"following types of objects:"
+msgstr ""
+"Xóa %(object_name)s '%(escaped_object)s' sẽ làm mất những dữ liệu có liên "
+"quan. Tài khoản của bạn không được cấp quyển xóa những dữ liệu đi kèm theo."
+
+#: contrib/admin/templates/admin/delete_confirmation.html:23
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? "
+"All of the following related items will be deleted:"
+msgstr ""
+"Bạn có chắc là muốn xóa %(object_name)s \"%(escaped_object)s\"?Tất cả những "
+"dữ liệu đi kèm dưới đây cũng sẽ bị mất:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:28
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:33
+msgid "Yes, I'm sure"
+msgstr "Có, tôi chắc chắn."
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+msgid "Delete multiple objects"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#, python-format
+msgid ""
+"Deleting the %(object_name)s would result in deleting related objects, but "
+"your account doesn't have permission to delete the following types of "
+"objects:"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#, python-format
+msgid ""
+"Are you sure you want to delete the selected %(object_name)s objects? All of "
+"the following objects and their related items will be deleted:"
+msgstr ""
+
+#: contrib/admin/templates/admin/filter.html:2
+#, python-format
+msgid " By %(filter_title)s "
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:18
+#, python-format
+msgid "Models available in the %(name)s application."
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:35
+msgid "Change"
+msgstr "Thay đổi"
+
+#: contrib/admin/templates/admin/index.html:45
+msgid "You don't have permission to edit anything."
+msgstr "Bạn không được cấp quyền chỉnh sửa bất cứ cái gì."
+
+#: contrib/admin/templates/admin/index.html:53
+msgid "Recent Actions"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:54
+msgid "My Actions"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:58
+msgid "None available"
+msgstr "Không có gì tồn tại"
+
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr ""
+
+#: contrib/admin/templates/admin/invalid_setup.html:7
+msgid ""
+"Something's wrong with your database installation. Make sure the appropriate "
+"database tables have been created, and make sure the database is readable by "
+"the appropriate user."
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:19
+msgid "Username:"
+msgstr "Tên đăng nhập:"
+
+#: contrib/admin/templates/admin/login.html:22
+msgid "Password:"
+msgstr "Mật khẩu:"
+
+#: contrib/admin/templates/admin/object_history.html:22
+msgid "Date/time"
+msgstr "Ngày/giờ"
+
+#: contrib/admin/templates/admin/object_history.html:23
+msgid "User"
+msgstr "Người dùng"
+
+#: contrib/admin/templates/admin/object_history.html:24
+msgid "Action"
+msgstr "Hành động"
+
+#: contrib/admin/templates/admin/object_history.html:38
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+
+#: contrib/admin/templates/admin/pagination.html:10
+msgid "Show all"
+msgstr "Hiện tất cả"
+
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Lưu lại"
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Search"
+msgstr ""
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "1 result"
+msgid_plural "%(counter)s results"
+msgstr[0] "Một kết quả"
+msgstr[1] "%(counter)s kết quả"
+
+#: contrib/admin/templates/admin/search_form.html:10
+#, python-format
+msgid "%(full_result_count)s total"
+msgstr ""
+
+#: contrib/admin/templates/admin/submit_line.html:5
+msgid "Save as new"
+msgstr "Lưu mới"
+
+#: contrib/admin/templates/admin/submit_line.html:6
+msgid "Save and add another"
+msgstr "Lưu và thêm vào"
+
+#: contrib/admin/templates/admin/submit_line.html:7
+msgid "Save and continue editing"
+msgstr "Lưu và tiếp tục chỉnh sửa"
+
+#: contrib/admin/templates/admin/auth/user/add_form.html:5
+msgid ""
+"First, enter a username and password. Then, you'll be able to edit more user "
+"options."
+msgstr ""
+"Đầu tiên, điền tên đăng nhập và mật khẩu. Sau đó mới có thể chỉnh sửa thêm "
+"nhiều user khác."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:28
+#, python-format
+msgid "Enter a new password for the user <strong>%(username)s</strong>."
+msgstr "Hãy nhập mật khẩu mới cho người sử dụng <strong>%(username)s</strong>."
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:35
+#: contrib/auth/forms.py:17 contrib/auth/forms.py:61 contrib/auth/forms.py:186
+msgid "Password"
+msgstr "Mật khẩu"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: contrib/admin/templates/registration/password_change_form.html:37
+#: contrib/auth/forms.py:187
+msgid "Password (again)"
+msgstr "Nhập lại mật khẩu"
+
+#: contrib/admin/templates/admin/auth/user/change_password.html:42
+#: contrib/auth/forms.py:19
+msgid "Enter the same password as above, for verification."
+msgstr "Nhập dãy mật mã trên để xác minh lại"
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:53
+#: contrib/admin/templates/admin/edit_inline/tabular.html:99
+#, python-format
+msgid "Add another %(verbose_name)s"
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/stacked.html:56
+#: contrib/admin/templates/admin/edit_inline/tabular.html:102
+#: contrib/comments/templates/comments/delete.html:12
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/templates/admin/edit_inline/tabular.html:15
+msgid "Delete?"
+msgstr "Bạn muốn xóa?"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Cảm ơn bạn đã dành thời gian với website này"
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Đăng nhập lại"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:5
+#: contrib/admin/templates/registration/password_change_form.html:7
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "Password change"
+msgstr "Thay đổi mật khẩu"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Mật khẩu được thay đổi thành công"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Mật khẩu của bạn đã được thay đổi"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Hãy nhập lại mật khẩu cũ và sau đó nhập mật khẩu mới hai lần để chúng tôi có "
+"thể kiểm tra lại xem bạn đã gõ chính xác hay chưa."
+
+#: contrib/admin/templates/registration/password_change_form.html:27
+#: contrib/auth/forms.py:170
+msgid "Old password"
+msgstr "Mật khẩu cũ"
+
+#: contrib/admin/templates/registration/password_change_form.html:32
+#: contrib/auth/forms.py:144
+msgid "New password"
+msgstr "Mật khẩu mới"
+
+#: contrib/admin/templates/registration/password_change_form.html:43
+#: contrib/admin/templates/registration/password_reset_confirm.html:21
+msgid "Change my password"
+msgstr "Thay đổi mật khẩu"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:4
+#: contrib/admin/templates/registration/password_reset_confirm.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_form.html:10
+msgid "Password reset"
+msgstr "Lập lại mật khẩu"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:6
+#: contrib/admin/templates/registration/password_reset_complete.html:10
+msgid "Password reset complete"
+msgstr "Hoàn thành việc lập lại mật khẩu"
+
+#: contrib/admin/templates/registration/password_reset_complete.html:12
+msgid "Your password has been set.  You may go ahead and log in now."
+msgstr "Mật khẩu của bạn đã được lập lại. Bạn hãy thử đăng nhập."
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:4
+msgid "Password reset confirmation"
+msgstr "Xác nhận việc lập lại mật khẩu"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:12
+msgid "Enter new password"
+msgstr "Nhập mật khẩu mới"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:14
+msgid ""
+"Please enter your new password twice so we can verify you typed it in "
+"correctly."
+msgstr ""
+"Hãy nhập mật khẩu mới hai lần để chúng tôi có thể kiểm tra xem bạn đã gõ "
+"chính xác chưa"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:18
+msgid "New password:"
+msgstr "Mật khẩu mới"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:20
+msgid "Confirm password:"
+msgstr "Nhập lại mật khẩu:"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:26
+msgid "Password reset unsuccessful"
+msgstr "Lập lại mật khẩu không thành công"
+
+#: contrib/admin/templates/registration/password_reset_confirm.html:28
+msgid ""
+"The password reset link was invalid, possibly because it has already been "
+"used.  Please request a new password reset."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Lấy lại mật khẩu thành công"
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed you instructions for setting your password to the e-mail "
+"address you submitted. You should be receiving it shortly."
+msgstr ""
+"Chúng tôi vừa gửi cho bạn những hướng dẫn để bạn lập lại mất khẩu tới địa "
+"chỉ email bạn đã đăng kí. Bạn sẽ nhận được nó trong chốc lát."
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Bạn nhận được email này vì bạn đã yêu cầu lập lại mật khẩu"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "cho tài khoản của bạn ở %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+msgid "Please go to the following page and choose a new password:"
+msgstr "Hãy vào đường link dưới đây và chọn một mật khẩu mới"
+
+#: contrib/admin/templates/registration/password_reset_email.html:9
+msgid "Your username, in case you've forgotten:"
+msgstr "Tên đăng nhập của bạn(nếu bạn có quên nó):"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Thanks for using our site!"
+msgstr "Cảm ơn bạn đã sử dụng website của chúng tôi!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+#, python-format
+msgid "The %(site_name)s team"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll e-mail "
+"instructions for setting a new one."
+msgstr ""
+"Quên mật khẩu? Nhập địa chỉ email của bạn vào bên dưới, chúng tôi sẽ gửi "
+"những hướng dẫn để làm lại mật khẩu mới."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Địa chỉ email:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Làm lại mật khẩu"
+
+#: contrib/admin/templatetags/admin_list.py:240
+msgid "All dates"
+msgstr "Tất cả các ngày"
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s"
+msgstr "Chọn %s"
+
+#: contrib/admin/views/main.py:70
+#, python-format
+msgid "Select %s to change"
+msgstr "Chọn %s để thay đổi"
+
+#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
+msgid "site"
+msgstr ""
+
+#: contrib/admin/views/template.py:40
+msgid "template"
+msgstr "Mẫu"
+
+#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: contrib/admindocs/views.py:65
+msgid "tag:"
+msgstr "Nhãn:"
+
+#: contrib/admindocs/views.py:94 contrib/admindocs/views.py:96
+#: contrib/admindocs/views.py:98
+msgid "filter:"
+msgstr "Lọc:"
+
+#: contrib/admindocs/views.py:158 contrib/admindocs/views.py:160
+#: contrib/admindocs/views.py:162
+msgid "view:"
+msgstr "Xem:"
+
+#: contrib/admindocs/views.py:190
+#, python-format
+msgid "App %r not found"
+msgstr "Ứng dụng %r không tìm thấy"
+
+#: contrib/admindocs/views.py:197
+#, python-format
+msgid "Model %(model_name)r not found in app %(app_label)r"
+msgstr "Mẫu %(model_name)r không tìm thấy trong ứng dụng %(app_label)r"
+
+#: contrib/admindocs/views.py:209
+#, python-format
+msgid "the related `%(app_label)s.%(data_type)s` object"
+msgstr ""
+
+#: contrib/admindocs/views.py:209 contrib/admindocs/views.py:228
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:261 contrib/admindocs/views.py:266
+msgid "model:"
+msgstr "mẫu:"
+
+#: contrib/admindocs/views.py:224 contrib/admindocs/views.py:256
+#, python-format
+msgid "related `%(app_label)s.%(object_name)s` objects"
+msgstr "liên quan tới đối tượng `%(app_label)s.%(object_name)s`"
+
+#: contrib/admindocs/views.py:228 contrib/admindocs/views.py:261
+#, python-format
+msgid "all %s"
+msgstr "Tất cả %s"
+
+#: contrib/admindocs/views.py:233 contrib/admindocs/views.py:266
+#, python-format
+msgid "number of %s"
+msgstr "số của %s"
+
+#: contrib/admindocs/views.py:271
+#, python-format
+msgid "Fields on %s objects"
+msgstr ""
+
+#: contrib/admindocs/views.py:361
+#, python-format
+msgid "%s does not appear to be a urlpattern object"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
+msgid "Bookmarklets"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
+msgid "Documentation bookmarklets"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
+msgid ""
+"\n"
+"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
+"toolbar, or right-click the link and add it to your bookmarks. Now you can\n"
+"select the bookmarklet from any page in the site.  Note that some of these\n"
+"bookmarklets require you to be viewing the site from a computer designated\n"
+"as \"internal\" (talk to your system administrator if you aren't sure if\n"
+"your computer is \"internal\").</p>\n"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
+msgid "Documentation for this page"
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
+msgid ""
+"Jumps you from any page to the documentation for the view that generates "
+"that page."
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
+msgid "Show object ID"
+msgstr "Hiện ID"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
+msgid ""
+"Shows the content-type and unique ID for pages that represent a single "
+"object."
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
+msgid "Edit this object (current window)"
+msgstr "Sửa lại đối tượng này (ở cửa sổ hiện tại)"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
+msgid "Jumps to the admin page for pages that represent a single object."
+msgstr ""
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:27
+msgid "Edit this object (new window)"
+msgstr "Sửa lại đối tượng này (trong cửa sổ mới)"
+
+#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
+msgid "As above, but opens the admin page in a new window."
+msgstr "Như trên nhưng mở trang quản trị ở một cửa sổ mới."
+
+#: contrib/auth/admin.py:29
+msgid "Personal info"
+msgstr "Thông tin cá nhân"
+
+#: contrib/auth/admin.py:30
+msgid "Permissions"
+msgstr ""
+
+#: contrib/auth/admin.py:31
+msgid "Important dates"
+msgstr "Những ngày quan trọng"
+
+#: contrib/auth/admin.py:32
+msgid "Groups"
+msgstr "Các nhóm"
+
+#: contrib/auth/admin.py:114
+msgid "Password changed successfully."
+msgstr "Mật khẩu thay đổi thành công"
+
+#: contrib/auth/admin.py:124
+#, python-format
+msgid "Change password: %s"
+msgstr "Thay đổi mật khẩu: %s"
+
+#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+msgid "Username"
+msgstr "Tên đăng nhập"
+
+#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
+#: contrib/auth/models.py:180
+msgid ""
+"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
+"digits and underscores)."
+msgstr ""
+"Nhập nhiều nhất là 30 ký tự. Chỉ sử dụng kiểu ký tự là chữ, con số hoặc dấu "
+"gạch dưới."
+
+#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Giá trị này chỉ chứa chữ cái, số và dấu gạch dưới"
+
+#: contrib/auth/forms.py:18
+msgid "Password confirmation"
+msgstr "Xác nhận mật khẩu"
+
+#: contrib/auth/forms.py:31
+msgid "A user with that username already exists."
+msgstr "Tên đăng nhập đã được sử dụng"
+
+#: contrib/auth/forms.py:37 contrib/auth/forms.py:156
+#: contrib/auth/forms.py:198
+msgid "The two password fields didn't match."
+msgstr "Hai trường mật khẩu không giống nhau"
+
+#: contrib/auth/forms.py:83
+msgid "This account is inactive."
+msgstr "Tài khoản này chưa được kích hoạt."
+
+#: contrib/auth/forms.py:88
+msgid ""
+"Your Web browser doesn't appear to have cookies enabled. Cookies are "
+"required for logging in."
+msgstr ""
+
+#: contrib/auth/forms.py:101
+msgid "E-mail"
+msgstr "E-mail"
+
+#: contrib/auth/forms.py:110
+msgid ""
+"That e-mail address doesn't have an associated user account. Are you sure "
+"you've registered?"
+msgstr ""
+"Không tìm thấy địa chỉ email này trong các tài khoản đã có. Bạn có chắc là "
+"đã đăng kí không?"
+
+#: contrib/auth/forms.py:136
+#, python-format
+msgid "Password reset on %s"
+msgstr ""
+
+#: contrib/auth/forms.py:145
+msgid "New password confirmation"
+msgstr "Xác nhận mật khẩu mới"
+
+#: contrib/auth/forms.py:178
+msgid "Your old password was entered incorrectly. Please enter it again."
+msgstr "Mật khẩu cũ không chính xác. Hãy nhập lại lần nữa"
+
+#: contrib/auth/models.py:66 contrib/auth/models.py:94
+msgid "name"
+msgstr "Tên"
+
+#: contrib/auth/models.py:68
+msgid "codename"
+msgstr ""
+
+#: contrib/auth/models.py:72
+msgid "permission"
+msgstr ""
+
+#: contrib/auth/models.py:73 contrib/auth/models.py:95
+msgid "permissions"
+msgstr ""
+
+#: contrib/auth/models.py:98
+msgid "group"
+msgstr "Nhóm"
+
+#: contrib/auth/models.py:99 contrib/auth/models.py:190
+msgid "groups"
+msgstr "Các nhóm"
+
+#: contrib/auth/models.py:180
+msgid "username"
+msgstr "Tên đăng nhập"
+
+#: contrib/auth/models.py:181
+msgid "first name"
+msgstr "Tên"
+
+#: contrib/auth/models.py:182
+msgid "last name"
+msgstr "Họ"
+
+#: contrib/auth/models.py:183
+msgid "e-mail address"
+msgstr "Địa chỉ email"
+
+#: contrib/auth/models.py:184
+msgid "password"
+msgstr "Mật khẩu"
+
+#: contrib/auth/models.py:184
+msgid ""
+"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
+"password form</a>."
+msgstr ""
+
+#: contrib/auth/models.py:185
+msgid "staff status"
+msgstr ""
+
+#: contrib/auth/models.py:185
+msgid "Designates whether the user can log into this admin site."
+msgstr "Chỉ định người dùng nào được phép truy cập vào trang admin."
+
+#: contrib/auth/models.py:186
+msgid "active"
+msgstr "Kích hoạt"
+
+#: contrib/auth/models.py:186
+msgid ""
+"Designates whether this user should be treated as active. Unselect this "
+"instead of deleting accounts."
+msgstr ""
+
+#: contrib/auth/models.py:187
+msgid "superuser status"
+msgstr ""
+
+#: contrib/auth/models.py:187
+msgid ""
+"Designates that this user has all permissions without explicitly assigning "
+"them."
+msgstr ""
+
+#: contrib/auth/models.py:188
+msgid "last login"
+msgstr "Lần cuối đăng nhập"
+
+#: contrib/auth/models.py:189
+msgid "date joined"
+msgstr "Ngày tham gia"
+
+#: contrib/auth/models.py:191
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"Bên cạnh các quyền đã mặc định khi đăng kí, người dùng sẽ được cấp thêm các "
+"quyền của các nhóm mà người đó tham gia vào."
+
+#: contrib/auth/models.py:192
+msgid "user permissions"
+msgstr "quyền của người sử dụng"
+
+#: contrib/auth/models.py:196 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
+msgid "user"
+msgstr "Người dùng"
+
+#: contrib/auth/models.py:197
+msgid "users"
+msgstr ""
+
+#: contrib/auth/models.py:367
+msgid "message"
+msgstr "Tin nhắn"
+
+#: contrib/auth/views.py:60
+msgid "Logged out"
+msgstr "Đã thoát"
+
+#: contrib/auth/management/commands/createsuperuser.py:23
+#: core/validators.py:85 forms/fields.py:414
+msgid "Enter a valid e-mail address."
+msgstr "Hãy nhập địa chỉ email hợp lệ."
+
+#: contrib/comments/admin.py:12
+msgid "Content"
+msgstr "Nội dung"
+
+#: contrib/comments/admin.py:15
+msgid "Metadata"
+msgstr "Siêu dữ liệu"
+
+#: contrib/comments/admin.py:39
+msgid "flagged"
+msgstr ""
+
+#: contrib/comments/admin.py:40
+msgid "Flag selected comments"
+msgstr ""
+
+#: contrib/comments/admin.py:43
+msgid "approved"
+msgstr ""
+
+#: contrib/comments/admin.py:44
+msgid "Approve selected comments"
+msgstr ""
+
+#: contrib/comments/admin.py:47
+msgid "removed"
+msgstr ""
+
+#: contrib/comments/admin.py:48
+msgid "Remove selected comments"
+msgstr ""
+
+#: contrib/comments/admin.py:60
+#, python-format
+msgid "1 comment was successfully %(action)s."
+msgid_plural "%(count)s comments were successfully %(action)s."
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr ""
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr ""
+
+#: contrib/comments/forms.py:93
+msgid "Name"
+msgstr "Tên"
+
+#: contrib/comments/forms.py:94
+msgid "Email address"
+msgstr "Địa chỉ email"
+
+#: contrib/comments/forms.py:95 contrib/flatpages/admin.py:8
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1107
+msgid "URL"
+msgstr "Đường dẫn URL"
+
+#: contrib/comments/forms.py:96
+msgid "Comment"
+msgstr "Bình luận"
+
+#: contrib/comments/forms.py:175
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Hãy cẩn thận! Từ %s không đc phép sử dụng ở đây."
+msgstr[1] "Hãy cẩn thận! Cụm từ %s không được sử dụng ở đây."
+
+#: contrib/comments/forms.py:182
+msgid ""
+"If you enter anything in this field your comment will be treated as spam"
+msgstr "Bất kì bình luận nào bạn nhập vào đây cũng sẽ bị coi là thư rác"
+
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:81
+msgid "content type"
+msgstr "kiểu nội dung"
+
+#: contrib/comments/models.py:24
+msgid "object ID"
+msgstr ""
+
+#: contrib/comments/models.py:52
+msgid "user's name"
+msgstr "Tên người sử dụng"
+
+#: contrib/comments/models.py:53
+msgid "user's email address"
+msgstr "Địa chỉ email của người sử dụng"
+
+#: contrib/comments/models.py:54
+msgid "user's URL"
+msgstr "Đường dẫn URL của người sử dụng"
+
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
+msgid "comment"
+msgstr "Bình luận"
+
+#: contrib/comments/models.py:59
+msgid "date/time submitted"
+msgstr "Ngày/giờ đã đăng kí"
+
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:909
+msgid "IP address"
+msgstr "Địa chỉ IP"
+
+#: contrib/comments/models.py:61
+msgid "is public"
+msgstr ""
+
+#: contrib/comments/models.py:62
+msgid ""
+"Uncheck this box to make the comment effectively disappear from the site."
+msgstr "Không đánh dấu vào hộp này để gỡ bình luận ra khỏi Site"
+
+#: contrib/comments/models.py:64
+msgid "is removed"
+msgstr "Bị xóa"
+
+#: contrib/comments/models.py:65
+msgid ""
+"Check this box if the comment is inappropriate. A \"This comment has been "
+"removed\" message will be displayed instead."
+msgstr ""
+"Đánh dấu vào hộp này nếu bình luận không thích hợp. Tin nhắn \"Bình luận đã "
+"bị xóa\" sẽ thay thế vào đó."
+
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr ""
+
+#: contrib/comments/models.py:119
+msgid ""
+"This comment was posted by an authenticated user and thus the name is read-"
+"only."
+msgstr ""
+
+#: contrib/comments/models.py:128
+msgid ""
+"This comment was posted by an authenticated user and thus the email is read-"
+"only."
+msgstr ""
+
+#: contrib/comments/models.py:153
+#, python-format
+msgid ""
+"Posted by %(user)s at %(date)s\n"
+"\n"
+"%(comment)s\n"
+"\n"
+"http://%(domain)s%(url)s"
+msgstr ""
+
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr ""
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr ""
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr ""
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:4
+msgid "Approve a comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:7
+msgid "Really make this comment public?"
+msgstr ""
+
+#: contrib/comments/templates/comments/approve.html:12
+msgid "Approve"
+msgstr ""
+
+#: contrib/comments/templates/comments/approved.html:4
+msgid "Thanks for approving"
+msgstr ""
+
+#: contrib/comments/templates/comments/approved.html:7
+#: contrib/comments/templates/comments/deleted.html:7
+#: contrib/comments/templates/comments/flagged.html:7
+msgid ""
+"Thanks for taking the time to improve the quality of discussion on our site"
+msgstr ""
+
+#: contrib/comments/templates/comments/delete.html:4
+msgid "Remove a comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/delete.html:7
+msgid "Really remove this comment?"
+msgstr ""
+
+#: contrib/comments/templates/comments/deleted.html:4
+msgid "Thanks for removing"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:4
+msgid "Flag this comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:7
+msgid "Really flag this comment?"
+msgstr ""
+
+#: contrib/comments/templates/comments/flag.html:12
+msgid "Flag"
+msgstr ""
+
+#: contrib/comments/templates/comments/flagged.html:4
+msgid "Thanks for flagging"
+msgstr ""
+
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
+msgid "Post"
+msgstr ""
+
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
+msgid "Preview"
+msgstr ""
+
+#: contrib/comments/templates/comments/posted.html:4
+msgid "Thanks for commenting"
+msgstr ""
+
+#: contrib/comments/templates/comments/posted.html:7
+msgid "Thank you for your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:4
+#: contrib/comments/templates/comments/preview.html:13
+msgid "Preview your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:11
+msgid "Please correct the error below"
+msgid_plural "Please correct the errors below"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "Post your comment"
+msgstr ""
+
+#: contrib/comments/templates/comments/preview.html:16
+msgid "or make changes"
+msgstr ""
+
+#: contrib/contenttypes/models.py:77
+msgid "python model class name"
+msgstr ""
+
+#: contrib/contenttypes/models.py:82
+msgid "content types"
+msgstr "kiểu nội dung"
+
+#: contrib/flatpages/admin.py:9
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+
+#: contrib/flatpages/admin.py:11
+msgid ""
+"This value must contain only letters, numbers, underscores, dashes or "
+"slashes."
+msgstr ""
+"Giá trị này chỉ có thể bao gồm chữ cái, chữ số, dấu gạch dưới, gạch ngang "
+"hoặc gạch chéo."
+
+#: contrib/flatpages/admin.py:22
+msgid "Advanced options"
+msgstr "Các lựa chọn "
+
+#: contrib/flatpages/models.py:8
+msgid "title"
+msgstr "tiêu đề"
+
+#: contrib/flatpages/models.py:9
+msgid "content"
+msgstr "nội dung"
+
+#: contrib/flatpages/models.py:10
+msgid "enable comments"
+msgstr "mở bình luận"
+
+#: contrib/flatpages/models.py:11
+msgid "template name"
+msgstr "tên mẫu"
+
+#: contrib/flatpages/models.py:12
+msgid ""
+"Example: 'flatpages/contact_page.html'. If this isn't provided, the system "
+"will use 'flatpages/default.html'."
+msgstr ""
+
+#: contrib/flatpages/models.py:13
+msgid "registration required"
+msgstr "Bạn cần phải cần đăng kí"
+
+#: contrib/flatpages/models.py:13
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"Nếu bạn đánh dấu vào đây, chỉ những tài khoản đã đăng nhập mới có thể xem "
+"được trang này."
+
+#: contrib/flatpages/models.py:18
+msgid "flat page"
+msgstr ""
+
+#: contrib/flatpages/models.py:19
+msgid "flat pages"
+msgstr ""
+
+#: contrib/formtools/wizard.py:134
+msgid ""
+"We apologize, but your form has expired. Please continue filling out the "
+"form from this page."
+msgstr ""
+"Xin lỗi, form mà bạn điền đã hết hiệu lực. Hãy điền vào form lấy từ trang "
+"này."
+
+#: contrib/gis/db/models/fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:269
+msgid "Point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:273
+msgid "Line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:277
+msgid "Polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:281
+msgid "Multi-point"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:285
+msgid "Multi-line string"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:289
+msgid "Multi polygon"
+msgstr ""
+
+#: contrib/gis/db/models/fields.py:293
+msgid "Geometry collection"
+msgstr ""
+
+#: contrib/gis/forms/fields.py:17
+msgid "No geometry value provided."
+msgstr ""
+
+#: contrib/gis/forms/fields.py:18
+msgid "Invalid geometry value."
+msgstr ""
+
+#: contrib/gis/forms/fields.py:19
+msgid "Invalid geometry type."
+msgstr ""
+
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "th"
+msgstr "th"
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "st"
+msgstr "st"
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "nd"
+msgstr "nd"
+
+#: contrib/humanize/templatetags/humanize.py:19
+msgid "rd"
+msgstr "rd"
+
+#: contrib/humanize/templatetags/humanize.py:51
+#, python-format
+msgid "%(value).1f million"
+msgid_plural "%(value).1f million"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:54
+#, python-format
+msgid "%(value).1f billion"
+msgid_plural "%(value).1f billion"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:57
+#, python-format
+msgid "%(value).1f trillion"
+msgid_plural "%(value).1f trillion"
+msgstr[0] ""
+msgstr[1] ""
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "one"
+msgstr "Một"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "two"
+msgstr "Hai"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "three"
+msgstr "Ba"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "four"
+msgstr "Bốn"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "five"
+msgstr "Năm"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "six"
+msgstr "Sáu"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "seven"
+msgstr "Bảy"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "eight"
+msgstr "Tám"
+
+#: contrib/humanize/templatetags/humanize.py:73
+msgid "nine"
+msgstr "Chín"
+
+#: contrib/humanize/templatetags/humanize.py:93
+msgid "today"
+msgstr "Hôm nay"
+
+#: contrib/humanize/templatetags/humanize.py:95
+msgid "tomorrow"
+msgstr "Ngày mai"
+
+#: contrib/humanize/templatetags/humanize.py:97
+msgid "yesterday"
+msgstr "Hôm qua"
+
+#: contrib/localflavor/ar/forms.py:28
+msgid "Enter a postal code in the format NNNN or ANNNNAAA."
+msgstr "Hãy nhập mã bưu điện theo mẫu NNNN hoặc ANNNNAAA."
+
+#: contrib/localflavor/ar/forms.py:50 contrib/localflavor/br/forms.py:97
+#: contrib/localflavor/br/forms.py:136 contrib/localflavor/pe/forms.py:24
+#: contrib/localflavor/pe/forms.py:52
+msgid "This field requires only numbers."
+msgstr "Điền một chữ số duy nhất."
+
+#: contrib/localflavor/ar/forms.py:51
+msgid "This field requires 7 or 8 digits."
+msgstr "Bạn cần điền 7 hoặc 8 chữ số."
+
+#: contrib/localflavor/ar/forms.py:80
+msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format."
+msgstr "Hãy nhập CUIT hợp lệ theo dạng XX-XXXXXXXX-X hoặc XXXXXXXXXXXX."
+
+#: contrib/localflavor/ar/forms.py:81
+msgid "Invalid CUIT."
+msgstr "CUIT không hợp lệ."
+
+#: contrib/localflavor/at/at_states.py:5
+msgid "Burgenland"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:6
+msgid "Carinthia"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:7
+msgid "Lower Austria"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:8
+msgid "Upper Austria"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:9
+msgid "Salzburg"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:10
+msgid "Styria"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:11
+msgid "Tyrol"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:12
+msgid "Vorarlberg"
+msgstr ""
+
+#: contrib/localflavor/at/at_states.py:13
+msgid "Vienna"
+msgstr "Thành phố Viên"
+
+#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: contrib/localflavor/no/forms.py:13
+msgid "Enter a zip code in the format XXXX."
+msgstr "Hãy nhập mã bưu điện theo dạng XXXX."
+
+#: contrib/localflavor/at/forms.py:48
+msgid "Enter a valid Austrian Social Security Number in XXXX XXXXXX format."
+msgstr "Hãy nhập số an sinh xã hội của nước Áo theo dạng XXXX XXXXXX."
+
+#: contrib/localflavor/au/forms.py:17
+msgid "Enter a 4 digit post code."
+msgstr "Hãy nhập 4 số của mã bưu điện."
+
+#: contrib/localflavor/br/forms.py:22
+msgid "Enter a zip code in the format XXXXX-XXX."
+msgstr "Hãy nhập mã bưu điện theo dạng XXXXX-XXX."
+
+#: contrib/localflavor/br/forms.py:31
+msgid "Phone numbers must be in XX-XXXX-XXXX format."
+msgstr "Số điện thoại phải dưới dạng XX-XXXX-XXXX."
+
+#: contrib/localflavor/br/forms.py:59
+msgid ""
+"Select a valid brazilian state. That state is not one of the available "
+"states."
+msgstr ""
+
+#: contrib/localflavor/br/forms.py:95
+msgid "Invalid CPF number."
+msgstr "Số CPF không hợp lệ."
+
+#: contrib/localflavor/br/forms.py:96
+msgid "This field requires at most 11 digits or 14 characters."
+msgstr "Điền nhiều nhất là 11 chữ số hoặc 14 kí tự."
+
+#: contrib/localflavor/br/forms.py:135
+msgid "Invalid CNPJ number."
+msgstr "Số CNPJ không hợp lệ."
+
+#: contrib/localflavor/br/forms.py:137
+msgid "This field requires at least 14 digits"
+msgstr "Bạn phải cần điền ít nhất là 14 chữ số."
+
+#: contrib/localflavor/ca/forms.py:25
+msgid "Enter a postal code in the format XXX XXX."
+msgstr "Hãy nhập mã bưu điện theo dạng XXX XXX."
+
+#: contrib/localflavor/ca/forms.py:96
+msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format."
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:5
+msgid "Aargau"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:6
+msgid "Appenzell Innerrhoden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:7
+msgid "Appenzell Ausserrhoden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:8
+msgid "Basel-Stadt"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:9
+msgid "Basel-Land"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:10
+msgid "Berne"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:11
+msgid "Fribourg"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:12
+msgid "Geneva"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:13
+msgid "Glarus"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:14
+msgid "Graubuenden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:15
+msgid "Jura"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:16
+msgid "Lucerne"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:17
+msgid "Neuchatel"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:18
+msgid "Nidwalden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:19
+msgid "Obwalden"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:20
+msgid "Schaffhausen"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:21
+msgid "Schwyz"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:22
+msgid "Solothurn"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:23
+msgid "St. Gallen"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:24
+msgid "Thurgau"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:25
+msgid "Ticino"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:26
+msgid "Uri"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:27
+msgid "Valais"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:28
+msgid "Vaud"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:29
+msgid "Zug"
+msgstr ""
+
+#: contrib/localflavor/ch/ch_states.py:30
+msgid "Zurich"
+msgstr "Thành phố Zurich"
+
+#: contrib/localflavor/ch/forms.py:65
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:30
+msgid "Enter a valid Chilean RUT."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:31
+msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr ""
+
+#: contrib/localflavor/cl/forms.py:32
+msgid "The Chilean RUT is not valid."
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:8
+msgid "Prague"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:9
+msgid "Central Bohemian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:10
+msgid "South Bohemian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:11
+msgid "Pilsen Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:12
+msgid "Carlsbad Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:13
+msgid "Usti Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:14
+msgid "Liberec Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:15
+msgid "Hradec Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:16
+msgid "Pardubice Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:17
+msgid "Vysocina Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:18
+msgid "South Moravian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:19
+msgid "Olomouc Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:20
+msgid "Zlin Region"
+msgstr ""
+
+#: contrib/localflavor/cz/cz_regions.py:21
+msgid "Moravian-Silesian Region"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
+msgid "Enter a postal code in the format XXXXX or XXX XX."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:48
+msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:49
+msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:50
+msgid "Enter a valid birth number."
+msgstr ""
+
+#: contrib/localflavor/cz/forms.py:107
+msgid "Enter a valid IC number."
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:5
+msgid "Baden-Wuerttemberg"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:6
+msgid "Bavaria"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:7
+msgid "Berlin"
+msgstr "Berlin"
+
+#: contrib/localflavor/de/de_states.py:8
+msgid "Brandenburg"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:9
+msgid "Bremen"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:10
+msgid "Hamburg"
+msgstr "Hamburg"
+
+#: contrib/localflavor/de/de_states.py:11
+msgid "Hessen"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:12
+msgid "Mecklenburg-Western Pomerania"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:13
+msgid "Lower Saxony"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:14
+msgid "North Rhine-Westphalia"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:15
+msgid "Rhineland-Palatinate"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:16
+msgid "Saarland"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:17
+msgid "Saxony"
+msgstr "Bang Saxony"
+
+#: contrib/localflavor/de/de_states.py:18
+msgid "Saxony-Anhalt"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:19
+msgid "Schleswig-Holstein"
+msgstr ""
+
+#: contrib/localflavor/de/de_states.py:20
+msgid "Thuringia"
+msgstr ""
+
+#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: contrib/localflavor/fr/forms.py:16
+msgid "Enter a zip code in the format XXXXX."
+msgstr "Hãy nhập mã bưu điện theo mẫu XXXXX."
+
+#: contrib/localflavor/de/forms.py:42
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:5
+msgid "Arava"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:6
+msgid "Albacete"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:7
+msgid "Alacant"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:8
+msgid "Almeria"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:9
+msgid "Avila"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:10
+msgid "Badajoz"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:11
+msgid "Illes Balears"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:12
+msgid "Barcelona"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:13
+msgid "Burgos"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:14
+msgid "Caceres"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:15
+msgid "Cadiz"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:16
+msgid "Castello"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:17
+msgid "Ciudad Real"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:18
+msgid "Cordoba"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:19
+msgid "A Coruna"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:20
+msgid "Cuenca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:21
+msgid "Girona"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:22
+msgid "Granada"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:23
+msgid "Guadalajara"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:24
+msgid "Guipuzkoa"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:25
+msgid "Huelva"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:26
+msgid "Huesca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:27
+msgid "Jaen"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:28
+msgid "Leon"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:29
+msgid "Lleida"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:30
+#: contrib/localflavor/es/es_regions.py:17
+msgid "La Rioja"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:31
+msgid "Lugo"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:32
+#: contrib/localflavor/es/es_regions.py:18
+msgid "Madrid"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:33
+msgid "Malaga"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:34
+msgid "Murcia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:35
+msgid "Navarre"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:36
+msgid "Ourense"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:37
+msgid "Asturias"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:38
+msgid "Palencia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:39
+msgid "Las Palmas"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:40
+msgid "Pontevedra"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:41
+msgid "Salamanca"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:42
+msgid "Santa Cruz de Tenerife"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:43
+#: contrib/localflavor/es/es_regions.py:11
+msgid "Cantabria"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:44
+msgid "Segovia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:45
+msgid "Seville"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:46
+msgid "Soria"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:47
+msgid "Tarragona"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:48
+msgid "Teruel"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:49
+msgid "Toledo"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:50
+msgid "Valencia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:51
+msgid "Valladolid"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:52
+msgid "Bizkaia"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:53
+msgid "Zamora"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:54
+msgid "Zaragoza"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:55
+msgid "Ceuta"
+msgstr ""
+
+#: contrib/localflavor/es/es_provinces.py:56
+msgid "Melilla"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:5
+msgid "Andalusia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:6
+msgid "Aragon"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:7
+msgid "Principality of Asturias"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:8
+msgid "Balearic Islands"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:9
+msgid "Basque Country"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:10
+msgid "Canary Islands"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:12
+msgid "Castile-La Mancha"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:13
+msgid "Castile and Leon"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:14
+msgid "Catalonia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:15
+msgid "Extremadura"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:16
+msgid "Galicia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:19
+msgid "Region of Murcia"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:20
+msgid "Foral Community of Navarre"
+msgstr ""
+
+#: contrib/localflavor/es/es_regions.py:21
+msgid "Valencian Community"
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:20
+msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
+msgstr "Hãy nhập mã số bưu điện hợp lệ theo dạng 01XXX - 52XXX."
+
+#: contrib/localflavor/es/forms.py:40
+msgid ""
+"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
+"9XXXXXXXX."
+msgstr ""
+"Hãy nhập số điện thoại hợp lệ theo dạng 6XXXXXXXX, 8XXXXXXXX hoặc 9XXXXXXXX."
+
+#: contrib/localflavor/es/forms.py:67
+msgid "Please enter a valid NIF, NIE, or CIF."
+msgstr "Hãy nhập NIF, NIE, hoặc CIF hợp lệ."
+
+#: contrib/localflavor/es/forms.py:68
+msgid "Please enter a valid NIF or NIE."
+msgstr "Hãy nhập NIF hoặc NIE hợp lệ."
+
+#: contrib/localflavor/es/forms.py:69
+msgid "Invalid checksum for NIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:70
+msgid "Invalid checksum for NIE."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:71
+msgid "Invalid checksum for CIF."
+msgstr ""
+
+#: contrib/localflavor/es/forms.py:143
+msgid ""
+"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
+msgstr "Hãy nhập số tài khoản ngân hàng theo dạng XXXX-XXXX-XX-XXXXXXXXXX."
+
+#: contrib/localflavor/es/forms.py:144
+msgid "Invalid checksum for bank account number."
+msgstr ""
+
+#: contrib/localflavor/fi/forms.py:29
+msgid "Enter a valid Finnish social security number."
+msgstr ""
+
+#: contrib/localflavor/fr/forms.py:31
+msgid "Phone numbers must be in 0X XX XX XX XX format."
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:28
+msgid "Enter a valid post code"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Hãy nhập số điện thoại có hiệu lực"
+
+#: contrib/localflavor/id/forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr ""
+
+#: contrib/localflavor/id/forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:9
+#: contrib/localflavor/id/id_choices.py:73
+msgid "Bali"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:10
+#: contrib/localflavor/id/id_choices.py:45
+msgid "Banten"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:11
+#: contrib/localflavor/id/id_choices.py:54
+msgid "Bengkulu"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:12
+#: contrib/localflavor/id/id_choices.py:47
+msgid "Yogyakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:13
+#: contrib/localflavor/id/id_choices.py:51
+msgid "Jakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:14
+#: contrib/localflavor/id/id_choices.py:75
+msgid "Gorontalo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:15
+#: contrib/localflavor/id/id_choices.py:57
+msgid "Jambi"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:16
+msgid "Jawa Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:17
+msgid "Jawa Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:18
+msgid "Jawa Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:19
+#: contrib/localflavor/id/id_choices.py:88
+msgid "Kalimantan Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:20
+#: contrib/localflavor/id/id_choices.py:66
+msgid "Kalimantan Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:21
+#: contrib/localflavor/id/id_choices.py:89
+msgid "Kalimantan Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:22
+#: contrib/localflavor/id/id_choices.py:90
+msgid "Kalimantan Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:23
+msgid "Kepulauan Bangka-Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:24
+#: contrib/localflavor/id/id_choices.py:62
+msgid "Kepulauan Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:25
+#: contrib/localflavor/id/id_choices.py:55
+msgid "Lampung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:26
+#: contrib/localflavor/id/id_choices.py:70
+msgid "Maluku"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:27
+#: contrib/localflavor/id/id_choices.py:71
+msgid "Maluku Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:28
+#: contrib/localflavor/id/id_choices.py:59
+msgid "Nanggroe Aceh Darussalam"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:29
+msgid "Nusa Tenggara Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:30
+msgid "Nusa Tenggara Timur"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:31
+msgid "Papua"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:32
+msgid "Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:33
+#: contrib/localflavor/id/id_choices.py:60
+msgid "Riau"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:34
+#: contrib/localflavor/id/id_choices.py:68
+msgid "Sulawesi Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:35
+#: contrib/localflavor/id/id_choices.py:69
+msgid "Sulawesi Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:36
+#: contrib/localflavor/id/id_choices.py:76
+msgid "Sulawesi Tengah"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:37
+#: contrib/localflavor/id/id_choices.py:79
+msgid "Sulawesi Tenggara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:38
+msgid "Sulawesi Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:39
+#: contrib/localflavor/id/id_choices.py:52
+msgid "Sumatera Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:40
+#: contrib/localflavor/id/id_choices.py:56
+msgid "Sumatera Selatan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:41
+#: contrib/localflavor/id/id_choices.py:58
+msgid "Sumatera Utara"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:46
+msgid "Magelang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:48
+msgid "Surakarta - Solo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:49
+msgid "Madiun"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:50
+msgid "Kediri"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:53
+msgid "Tapanuli"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:61
+msgid "Kepulauan Bangka Belitung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:63
+msgid "Corps Consulate"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:64
+msgid "Corps Diplomatic"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:65
+msgid "Bandung"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:67
+msgid "Sulawesi Utara Daratan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:72
+msgid "NTT - Timor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:74
+msgid "Sulawesi Utara Kepulauan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:77
+msgid "NTB - Lombok"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:78
+msgid "Papua dan Papua Barat"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:80
+msgid "Cirebon"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:81
+msgid "NTB - Sumbawa"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:82
+msgid "NTT - Flores"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:83
+msgid "NTT - Sumba"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:84
+msgid "Bogor"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:85
+msgid "Pekalongan"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:86
+msgid "Semarang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:87
+msgid "Pati"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:91
+msgid "Surabaya"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:92
+msgid "Madura"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:93
+msgid "Malang"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:94
+msgid "Jember"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:95
+msgid "Banyumas"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:96
+msgid "Federal Government"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:97
+msgid "Bojonegoro"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:98
+msgid "Purwakarta"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:99
+msgid "Sidoarjo"
+msgstr ""
+
+#: contrib/localflavor/id/id_choices.py:100
+msgid "Garut"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:8
+msgid "Antrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:9
+msgid "Armagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:10
+msgid "Carlow"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:11
+msgid "Cavan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:12
+msgid "Clare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:13
+msgid "Cork"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:14
+msgid "Derry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:15
+msgid "Donegal"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:16
+msgid "Down"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:17
+msgid "Dublin"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:18
+msgid "Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:19
+msgid "Galway"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:20
+msgid "Kerry"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:21
+msgid "Kildare"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:22
+msgid "Kilkenny"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:23
+msgid "Laois"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:24
+msgid "Leitrim"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:25
+msgid "Limerick"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:26
+msgid "Longford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:27
+msgid "Louth"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:28
+msgid "Mayo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:29
+msgid "Meath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:30
+msgid "Monaghan"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:31
+msgid "Offaly"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:32
+msgid "Roscommon"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:33
+msgid "Sligo"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:34
+msgid "Tipperary"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:35
+msgid "Tyrone"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:36
+msgid "Waterford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:37
+msgid "Westmeath"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:38
+msgid "Wexford"
+msgstr ""
+
+#: contrib/localflavor/ie/ie_counties.py:39
+msgid "Wicklow"
+msgstr ""
+
+#: contrib/localflavor/in_/forms.py:15
+msgid "Enter a zip code in the format XXXXXXX."
+msgstr "Hãy nhập mã bưu điện theo dạng XXXXXXX."
+
+#: contrib/localflavor/is_/forms.py:18
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr ""
+
+#: contrib/localflavor/is_/forms.py:19
+msgid "The Icelandic identification number is not valid."
+msgstr ""
+
+#: contrib/localflavor/it/forms.py:15
+msgid "Enter a valid zip code."
+msgstr "Hãy nhập mã bưu điện hợp lệ."
+
+#: contrib/localflavor/it/forms.py:44
+msgid "Enter a valid Social Security number."
+msgstr "Hãy nhập số Bảo hiểm Xã hội hợp lệ."
+
+#: contrib/localflavor/it/forms.py:69
+msgid "Enter a valid VAT number."
+msgstr "Hãy nhập số VAT hợp lệ."
+
+#: contrib/localflavor/jp/forms.py:16
+msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
+msgstr "Hãy nhập mã bưu điện theo dạng XXXXXXX hoặc XXX-XXXX."
+
+#: contrib/localflavor/jp/jp_prefectures.py:4
+msgid "Hokkaido"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:5
+msgid "Aomori"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:6
+msgid "Iwate"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:7
+msgid "Miyagi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:8
+msgid "Akita"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:9
+msgid "Yamagata"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:10
+msgid "Fukushima"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:11
+msgid "Ibaraki"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:12
+msgid "Tochigi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:13
+msgid "Gunma"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:14
+msgid "Saitama"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:15
+msgid "Chiba"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:16
+msgid "Tokyo"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:17
+msgid "Kanagawa"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:18
+msgid "Yamanashi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:19
+msgid "Nagano"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:20
+msgid "Niigata"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:21
+msgid "Toyama"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:22
+msgid "Ishikawa"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:23
+msgid "Fukui"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:24
+msgid "Gifu"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:25
+msgid "Shizuoka"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:26
+msgid "Aichi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:27
+msgid "Mie"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:28
+msgid "Shiga"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:29
+msgid "Kyoto"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:30
+msgid "Osaka"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:31
+msgid "Hyogo"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:32
+msgid "Nara"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:33
+msgid "Wakayama"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:34
+msgid "Tottori"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:35
+msgid "Shimane"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:36
+msgid "Okayama"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:37
+msgid "Hiroshima"
+msgstr "Thành phố Hirosima"
+
+#: contrib/localflavor/jp/jp_prefectures.py:38
+msgid "Yamaguchi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:39
+msgid "Tokushima"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:40
+msgid "Kagawa"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:41
+msgid "Ehime"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:42
+msgid "Kochi"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:43
+msgid "Fukuoka"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:44
+msgid "Saga"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:45
+msgid "Nagasaki"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:46
+msgid "Kumamoto"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:47
+msgid "Oita"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:48
+msgid "Miyazaki"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:49
+msgid "Kagoshima"
+msgstr ""
+
+#: contrib/localflavor/jp/jp_prefectures.py:50
+msgid "Okinawa"
+msgstr "Thành phố Okinawa"
+
+#: contrib/localflavor/kw/forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:12
+msgid "Aguascalientes"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:13
+msgid "Baja California"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:14
+msgid "Baja California Sur"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:15
+msgid "Campeche"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:16
+msgid "Chihuahua"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:17
+msgid "Chiapas"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:18
+msgid "Coahuila"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:19
+msgid "Colima"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:20
+msgid "Distrito Federal"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:21
+msgid "Durango"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:22
+msgid "Guerrero"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:23
+msgid "Guanajuato"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:24
+msgid "Hidalgo"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:25
+msgid "Jalisco"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:26
+msgid "Estado de México"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:27
+msgid "Michoacán"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:28
+msgid "Morelos"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:29
+msgid "Nayarit"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:30
+msgid "Nuevo León"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:31
+msgid "Oaxaca"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:32
+msgid "Puebla"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:33
+msgid "Querétaro"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:34
+msgid "Quintana Roo"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:35
+msgid "Sinaloa"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:36
+msgid "San Luis Potosí"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:37
+msgid "Sonora"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:38
+msgid "Tabasco"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:39
+msgid "Tamaulipas"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:40
+msgid "Tlaxcala"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:41
+msgid "Veracruz"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:42
+msgid "Yucatán"
+msgstr ""
+
+#: contrib/localflavor/mx/mx_states.py:43
+msgid "Zacatecas"
+msgstr ""
+
+#: contrib/localflavor/nl/forms.py:22
+msgid "Enter a valid postal code"
+msgstr "Hãy nhập mã bưu điện có hiệu lực"
+
+#: contrib/localflavor/nl/forms.py:79
+msgid "Enter a valid SoFi number"
+msgstr "Hãy nhập số SoFi hợp lệ"
+
+#: contrib/localflavor/nl/nl_provinces.py:4
+msgid "Drenthe"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:5
+msgid "Flevoland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:6
+msgid "Friesland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:7
+msgid "Gelderland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:8
+msgid "Groningen"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:9
+msgid "Limburg"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:10
+msgid "Noord-Brabant"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:11
+msgid "Noord-Holland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:12
+msgid "Overijssel"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:13
+msgid "Utrecht"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:14
+msgid "Zeeland"
+msgstr ""
+
+#: contrib/localflavor/nl/nl_provinces.py:15
+msgid "Zuid-Holland"
+msgstr ""
+
+#: contrib/localflavor/no/forms.py:34
+msgid "Enter a valid Norwegian social security number."
+msgstr "Hãy nhập số an sinh xã hội có hiệu lực"
+
+#: contrib/localflavor/pe/forms.py:25
+msgid "This field requires 8 digits."
+msgstr "Bạn cần điền 8 chữ số."
+
+#: contrib/localflavor/pe/forms.py:53
+msgid "This field requires 11 digits."
+msgstr "Bạn cần điền 11 chữ số."
+
+#: contrib/localflavor/pl/forms.py:38
+msgid "National Identification Number consists of 11 digits."
+msgstr "Số CMTND gồm 11 chữ số"
+
+#: contrib/localflavor/pl/forms.py:39
+msgid "Wrong checksum for the National Identification Number."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:71
+msgid ""
+"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX."
+msgstr "Hãy nhập mã số thuế theo mẫu XXX-XXX-XX-XX hoặc XX-XX-XXX-XXX"
+
+#: contrib/localflavor/pl/forms.py:72
+msgid "Wrong checksum for the Tax Number (NIP)."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:110
+msgid "Wrong checksum for the National Business Register Number (REGON)."
+msgstr ""
+
+#: contrib/localflavor/pl/forms.py:148
+msgid "Enter a postal code in the format XX-XXX."
+msgstr "Hãy nhập mã bưu điện theo mẫu XX-XXX"
+
+#: contrib/localflavor/pl/pl_voivodeships.py:8
+msgid "Lower Silesia"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:9
+msgid "Kuyavia-Pomerania"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:10
+msgid "Lublin"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:11
+msgid "Lubusz"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:12
+msgid "Lodz"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:13
+msgid "Lesser Poland"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:14
+msgid "Masovia"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:15
+msgid "Opole"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:16
+msgid "Subcarpatia"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:17
+msgid "Podlasie"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:18
+msgid "Pomerania"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:19
+msgid "Silesia"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:20
+msgid "Swietokrzyskie"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:21
+msgid "Warmia-Masuria"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:22
+msgid "Greater Poland"
+msgstr ""
+
+#: contrib/localflavor/pl/pl_voivodeships.py:23
+msgid "West Pomerania"
+msgstr ""
+
+#: contrib/localflavor/pt/forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr ""
+
+#: contrib/localflavor/pt/forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:19
+msgid "Enter a valid CIF."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:56
+msgid "Enter a valid CNP."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:141
+msgid "Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format"
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:171
+msgid "Phone numbers must be in XXXX-XXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/ro/forms.py:194
+msgid "Enter a valid postal code in the format XXXXXX"
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr ""
+
+#: contrib/localflavor/se/forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:15
+msgid "Stockholm"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:16
+msgid "Västerbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:17
+msgid "Norrbotten"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:18
+msgid "Uppsala"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:19
+msgid "Södermanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:20
+msgid "Östergötland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:21
+msgid "Jönköping"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:22
+msgid "Kronoberg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:23
+msgid "Kalmar"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:24
+msgid "Gotland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:25
+msgid "Blekinge"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:26
+msgid "Skåne"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:27
+msgid "Halland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:28
+msgid "Västra Götaland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:29
+msgid "Värmland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:30
+msgid "Örebro"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:31
+msgid "Västmanland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:32
+msgid "Dalarna"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:33
+msgid "Gävleborg"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:34
+msgid "Västernorrland"
+msgstr ""
+
+#: contrib/localflavor/se/se_counties.py:35
+msgid "Jämtland"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:8
+msgid "Banska Bystrica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:9
+msgid "Banska Stiavnica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:10
+msgid "Bardejov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:11
+msgid "Banovce nad Bebravou"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:12
+msgid "Brezno"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:13
+msgid "Bratislava I"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:14
+msgid "Bratislava II"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:15
+msgid "Bratislava III"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:16
+msgid "Bratislava IV"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:17
+msgid "Bratislava V"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:18
+msgid "Bytca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:19
+msgid "Cadca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:20
+msgid "Detva"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:21
+msgid "Dolny Kubin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:22
+msgid "Dunajska Streda"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:23
+msgid "Galanta"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:24
+msgid "Gelnica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:25
+msgid "Hlohovec"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:26
+msgid "Humenne"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:27
+msgid "Ilava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:28
+msgid "Kezmarok"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:29
+msgid "Komarno"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:30
+msgid "Kosice I"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:31
+msgid "Kosice II"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:32
+msgid "Kosice III"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:33
+msgid "Kosice IV"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:34
+msgid "Kosice - okolie"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:35
+msgid "Krupina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:36
+msgid "Kysucke Nove Mesto"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:37
+msgid "Levice"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:38
+msgid "Levoca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:39
+msgid "Liptovsky Mikulas"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:40
+msgid "Lucenec"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:41
+msgid "Malacky"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:42
+msgid "Martin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:43
+msgid "Medzilaborce"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:44
+msgid "Michalovce"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:45
+msgid "Myjava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:46
+msgid "Namestovo"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:47
+msgid "Nitra"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:48
+msgid "Nove Mesto nad Vahom"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:49
+msgid "Nove Zamky"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:50
+msgid "Partizanske"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:51
+msgid "Pezinok"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:52
+msgid "Piestany"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:53
+msgid "Poltar"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:54
+msgid "Poprad"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:55
+msgid "Povazska Bystrica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:56
+msgid "Presov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:57
+msgid "Prievidza"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:58
+msgid "Puchov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:59
+msgid "Revuca"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:60
+msgid "Rimavska Sobota"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:61
+msgid "Roznava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:62
+msgid "Ruzomberok"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:63
+msgid "Sabinov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:64
+msgid "Senec"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:65
+msgid "Senica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:66
+msgid "Skalica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:67
+msgid "Snina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:68
+msgid "Sobrance"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:69
+msgid "Spisska Nova Ves"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:70
+msgid "Stara Lubovna"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:71
+msgid "Stropkov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:72
+msgid "Svidnik"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:73
+msgid "Sala"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:74
+msgid "Topolcany"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:75
+msgid "Trebisov"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:76
+msgid "Trencin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:77
+msgid "Trnava"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:78
+msgid "Turcianske Teplice"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:79
+msgid "Tvrdosin"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:80
+msgid "Velky Krtis"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:81
+msgid "Vranov nad Toplou"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:82
+msgid "Zlate Moravce"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:83
+msgid "Zvolen"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:84
+msgid "Zarnovica"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:85
+msgid "Ziar nad Hronom"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_districts.py:86
+msgid "Zilina"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:8
+msgid "Banska Bystrica region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:9
+msgid "Bratislava region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:10
+msgid "Kosice region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:11
+msgid "Nitra region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:12
+msgid "Presov region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:13
+msgid "Trencin region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:14
+msgid "Trnava region"
+msgstr ""
+
+#: contrib/localflavor/sk/sk_regions.py:15
+msgid "Zilina region"
+msgstr ""
+
+#: contrib/localflavor/uk/forms.py:21
+msgid "Enter a valid postcode."
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:11
+msgid "Bedfordshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:12
+msgid "Buckinghamshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:14
+msgid "Cheshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:15
+msgid "Cornwall and Isles of Scilly"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:16
+msgid "Cumbria"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:17
+msgid "Derbyshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:18
+msgid "Devon"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:19
+msgid "Dorset"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:20
+msgid "Durham"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:21
+msgid "East Sussex"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:22
+msgid "Essex"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:23
+msgid "Gloucestershire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:24
+msgid "Greater London"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:25
+msgid "Greater Manchester"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:26
+msgid "Hampshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:27
+msgid "Hertfordshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:28
+msgid "Kent"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:29
+msgid "Lancashire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:30
+msgid "Leicestershire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:31
+msgid "Lincolnshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:32
+msgid "Merseyside"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:33
+msgid "Norfolk"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:34
+msgid "North Yorkshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:35
+msgid "Northamptonshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:36
+msgid "Northumberland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:37
+msgid "Nottinghamshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:38
+msgid "Oxfordshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:39
+msgid "Shropshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:40
+msgid "Somerset"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:41
+msgid "South Yorkshire"
+msgstr "Vùng South Yorkshire"
+
+#: contrib/localflavor/uk/uk_regions.py:42
+msgid "Staffordshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:43
+msgid "Suffolk"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:44
+msgid "Surrey"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:45
+msgid "Tyne and Wear"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:46
+msgid "Warwickshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:47
+msgid "West Midlands"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:48
+msgid "West Sussex"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:49
+msgid "West Yorkshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:50
+msgid "Wiltshire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:51
+msgid "Worcestershire"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:55
+msgid "County Antrim"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:56
+msgid "County Armagh"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:57
+msgid "County Down"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:58
+msgid "County Fermanagh"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:59
+msgid "County Londonderry"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:60
+msgid "County Tyrone"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:64
+msgid "Clwyd"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:65
+msgid "Dyfed"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:66
+msgid "Gwent"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:67
+msgid "Gwynedd"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:68
+msgid "Mid Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:69
+msgid "Powys"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:70
+msgid "South Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:71
+msgid "West Glamorgan"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:75
+msgid "Borders"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:76
+msgid "Central Scotland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:77
+msgid "Dumfries and Galloway"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:78
+msgid "Fife"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:79
+msgid "Grampian"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:80
+msgid "Highland"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:81
+msgid "Lothian"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:82
+msgid "Orkney Islands"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:83
+msgid "Shetland Islands"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:84
+msgid "Strathclyde"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:85
+msgid "Tayside"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:86
+msgid "Western Isles"
+msgstr ""
+
+#: contrib/localflavor/uk/uk_regions.py:90
+msgid "England"
+msgstr "Nước Anh"
+
+#: contrib/localflavor/uk/uk_regions.py:91
+msgid "Northern Ireland"
+msgstr "Bắc Ai-len"
+
+#: contrib/localflavor/uk/uk_regions.py:92
+msgid "Scotland"
+msgstr "Sccotland"
+
+#: contrib/localflavor/uk/uk_regions.py:93
+msgid "Wales"
+msgstr "Xứ Wale"
+
+#: contrib/localflavor/us/forms.py:17
+msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
+msgstr "Hãy nhập mã bưu điện theo mẫu XXXXX hoặc XXXXX-XXXX"
+
+#: contrib/localflavor/us/forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr ""
+
+#: contrib/localflavor/us/forms.py:55
+msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+msgstr "Hãy nhập số an sinh xã hội dưới dạng XXX-XX-XXXX"
+
+#: contrib/localflavor/us/forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr ""
+
+#: contrib/localflavor/us/models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr ""
+
+#: contrib/localflavor/us/models.py:17
+msgid "Phone number"
+msgstr "Số điện thoại"
+
+#: contrib/localflavor/uy/forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+
+#: contrib/localflavor/uy/forms.py:30
+msgid "Enter a valid CI number."
+msgstr ""
+
+#: contrib/localflavor/za/forms.py:21
+msgid "Enter a valid South African ID number"
+msgstr ""
+
+#: contrib/localflavor/za/forms.py:55
+msgid "Enter a valid South African postal code"
+msgstr "Hãy nhập mã bưu điện Nam Phi có hiệu lực"
+
+#: contrib/localflavor/za/za_provinces.py:4
+msgid "Eastern Cape"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:5
+msgid "Free State"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:6
+msgid "Gauteng"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:7
+msgid "KwaZulu-Natal"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:8
+msgid "Limpopo"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:9
+msgid "Mpumalanga"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:10
+msgid "Northern Cape"
+msgstr ""
+
+#: contrib/localflavor/za/za_provinces.py:11
+msgid "North West"
+msgstr "Tây Bắc"
+
+#: contrib/localflavor/za/za_provinces.py:12
+msgid "Western Cape"
+msgstr ""
+
+#: contrib/messages/tests/base.py:101
+msgid "lazy message"
+msgstr ""
+
+#: contrib/redirects/models.py:7
+msgid "redirect from"
+msgstr "Chuyển hướng từ"
+
+#: contrib/redirects/models.py:8
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Đây phải là đường dẫn tuyệt đối, không bao gồm tên miền. Ví dụ: '/events/"
+"search/'."
+
+#: contrib/redirects/models.py:9
+msgid "redirect to"
+msgstr "Chuyển hướng tới"
+
+#: contrib/redirects/models.py:10
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Đây có thể là đường dẫn tuyệt đối hoặc địa chỉ đầy đủ bắt đầu với 'http://'"
+
+#: contrib/redirects/models.py:13
+msgid "redirect"
+msgstr "Chuyển hướng"
+
+#: contrib/redirects/models.py:14
+msgid "redirects"
+msgstr "Chuyển hướng"
+
+#: contrib/sessions/models.py:45
+msgid "session key"
+msgstr ""
+
+#: contrib/sessions/models.py:47
+msgid "session data"
+msgstr ""
+
+#: contrib/sessions/models.py:48
+msgid "expire date"
+msgstr "Ngày hết hạn"
+
+#: contrib/sessions/models.py:53
+msgid "session"
+msgstr ""
+
+#: contrib/sessions/models.py:54
+msgid "sessions"
+msgstr ""
+
+#: contrib/sites/models.py:32
+msgid "domain name"
+msgstr "Tên miền"
+
+#: contrib/sites/models.py:33
+msgid "display name"
+msgstr "Tên hiển thị"
+
+#: contrib/sites/models.py:39
+msgid "sites"
+msgstr ""
+
+#: core/validators.py:19 forms/fields.py:66
+msgid "Enter a valid value."
+msgstr "Nhập một giá trị hợp lệ."
+
+#: core/validators.py:69 forms/fields.py:515
+msgid "Enter a valid URL."
+msgstr "Nhập một URL hợp lệ."
+
+#: core/validators.py:71 forms/fields.py:516
+msgid "This URL appears to be a broken link."
+msgstr "URL này có vẻ là một liên kết bị đứt gãy."
+
+#: core/validators.py:88 forms/fields.py:859
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr "Nhập một 'slug' hợp lệ gồm chữ cái, số, gạch dưới và gạch nối."
+
+#: core/validators.py:91 forms/fields.py:852
+msgid "Enter a valid IPv4 address."
+msgstr "Nhập một địa chỉ IPv4 hợp lệ."
+
+#: core/validators.py:94 db/models/fields/__init__.py:591
+msgid "Enter only digits separated by commas."
+msgstr "Chỉ nhập chữ số, cách nhau bằng dấu phẩy."
+
+#: core/validators.py:100
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+
+#: core/validators.py:118 forms/fields.py:196 forms/fields.py:248
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr ""
+
+#: core/validators.py:123 forms/fields.py:197 forms/fields.py:249
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr ""
+
+#: core/validators.py:129
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+
+#: core/validators.py:135
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d characters (it has %"
+"(show_value)d)."
+msgstr ""
+
+#: db/models/base.py:775
+#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr ""
+
+#: db/models/base.py:790 db/models/base.py:798
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model_name)s có %(field_label)s đã tồn tại."
+
+#: db/models/fields/__init__.py:62
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr ""
+
+#: db/models/fields/__init__.py:63
+msgid "This field cannot be null."
+msgstr "Trường này không thể để trống."
+
+#: db/models/fields/__init__.py:64
+msgid "This field cannot be blank."
+msgstr ""
+
+#: db/models/fields/__init__.py:69
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr ""
+
+#: db/models/fields/__init__.py:475 db/models/fields/__init__.py:871
+#: db/models/fields/__init__.py:967 db/models/fields/__init__.py:978
+#: db/models/fields/__init__.py:1005
+msgid "Integer"
+msgstr "Số nguyên"
+
+#: db/models/fields/__init__.py:479
+msgid "This value must be an integer."
+msgstr "Giá trị này phải là số nguyên."
+
+#: db/models/fields/__init__.py:514
+msgid "This value must be either True or False."
+msgstr "Giá trị này phải là True hoặc False."
+
+#: db/models/fields/__init__.py:516
+msgid "Boolean (Either True or False)"
+msgstr "Luận lý (hoặc là Đúng hoặc là Sai)"
+
+#: db/models/fields/__init__.py:558 db/models/fields/__init__.py:988
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr ""
+
+#: db/models/fields/__init__.py:586
+msgid "Comma-separated integers"
+msgstr "Các số nguyên được phân cách bằng dấu phẩy"
+
+#: db/models/fields/__init__.py:600
+msgid "Date (without time)"
+msgstr "Ngày (không có giờ)"
+
+#: db/models/fields/__init__.py:604
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Nhập một ngày hợp lệ theo dạng YYYY-MM-DD."
+
+#: db/models/fields/__init__.py:605
+#, python-format
+msgid "Invalid date: %s"
+msgstr "Ngày không hợp lệ: %s"
+
+#: db/models/fields/__init__.py:686
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
+msgstr ""
+"Nhập một ngày/thời gian hợp lệ theo dạng YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:688
+msgid "Date (with time)"
+msgstr "Ngày (có giờ)"
+
+#: db/models/fields/__init__.py:754
+msgid "This value must be a decimal number."
+msgstr "Giá trị này phải là số thập phân."
+
+#: db/models/fields/__init__.py:756
+msgid "Decimal number"
+msgstr "Số thập phân"
+
+#: db/models/fields/__init__.py:811
+msgid "E-mail address"
+msgstr "Địa chỉ email"
+
+#: db/models/fields/__init__.py:818 db/models/fields/files.py:220
+#: db/models/fields/files.py:331
+msgid "File path"
+msgstr "Đường dẫn tắt tới file"
+
+#: db/models/fields/__init__.py:841 db/models/fields/__init__.py:869
+msgid "This value must be a float."
+msgstr ""
+
+#: db/models/fields/__init__.py:843
+msgid "Floating point number"
+msgstr "Giá trị dấu chấm động"
+
+#: db/models/fields/__init__.py:896
+msgid "Big (8 byte) integer"
+msgstr ""
+
+#: db/models/fields/__init__.py:925
+msgid "This value must be either None, True or False."
+msgstr "Giá trị này phải là None, True hoặc False."
+
+#: db/models/fields/__init__.py:927
+msgid "Boolean (Either True, False or None)"
+msgstr "Luận lý (Có thể Đúng, Sai hoặc Không cái nào đúng)"
+
+#: db/models/fields/__init__.py:1011
+msgid "Text"
+msgstr "Đoạn văn"
+
+#: db/models/fields/__init__.py:1027
+msgid "Time"
+msgstr "Giờ"
+
+#: db/models/fields/__init__.py:1031
+msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
+msgstr "Nhập một thời gian hợp lệ theo dạng HH:MM[:ss[.uuuuuu]]."
+
+#: db/models/fields/__init__.py:1115
+msgid "XML text"
+msgstr ""
+
+#: db/models/fields/related.py:755
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr ""
+
+#: db/models/fields/related.py:757
+msgid "Foreign Key (type determined by related field)"
+msgstr ""
+
+#: db/models/fields/related.py:879
+msgid "One-to-one relationship"
+msgstr ""
+
+#: db/models/fields/related.py:939
+msgid "Many-to-many relationship"
+msgstr ""
+
+#: db/models/fields/related.py:959
+msgid ""
+"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr "Giữ \"Control\", hoặc \"Command\" trên Mac, để chọn nhiều hơn một."
+
+#: db/models/fields/related.py:1020
+#, python-format
+msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
+msgid_plural ""
+"Please enter valid %(self)s IDs. The values %(value)r are invalid."
+msgstr[0] "Hãy nhập một ID %(self)s hợp lệ. Giá trị %(value)r không hợp lệ."
+msgstr[1] "Hãy nhập một ID %(self)s hợp lệ. Giá trị %(value)r không hợp lệ."
+
+#: forms/fields.py:65
+msgid "This field is required."
+msgstr "Trường này là bắt buộc."
+
+#: forms/fields.py:195
+msgid "Enter a whole number."
+msgstr "Nhập một số tổng thể."
+
+#: forms/fields.py:225 forms/fields.py:247
+msgid "Enter a number."
+msgstr "Nhập một số."
+
+#: forms/fields.py:250
+#, python-format
+msgid "Ensure that there are no more than %s digits in total."
+msgstr "Hãy chắc chắn rằng tổng cộng không nhiều hơn %s chữ số."
+
+#: forms/fields.py:251
+#, python-format
+msgid "Ensure that there are no more than %s decimal places."
+msgstr "Hãy chắc chắn rằng không có nhiều hơn %s chữ số thập phân."
+
+#: forms/fields.py:252
+#, python-format
+msgid "Ensure that there are no more than %s digits before the decimal point."
+msgstr ""
+"Hãy chắc chắn rằng không có nhiều hơn %s chữ số trước dấu phẩy thập phân."
+
+#: forms/fields.py:309 forms/fields.py:824
+msgid "Enter a valid date."
+msgstr "Nhập một ngày hợp lệ."
+
+#: forms/fields.py:337 forms/fields.py:825
+msgid "Enter a valid time."
+msgstr "Nhập một thời gian hợp lệ."
+
+#: forms/fields.py:363
+msgid "Enter a valid date/time."
+msgstr "Nhập một ngày/thời gian hợp lệ."
+
+#: forms/fields.py:421
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr "Không có tập tin nào được gửi. Hãy kiểm tra kiểu mã hóa của biểu mẫu."
+
+#: forms/fields.py:422
+msgid "No file was submitted."
+msgstr "Không có tập tin nào được gửi."
+
+#: forms/fields.py:423
+msgid "The submitted file is empty."
+msgstr "Tập tin được gửi là rỗng."
+
+#: forms/fields.py:424
+#, python-format
+msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+
+#: forms/fields.py:459
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Hãy tải lên một hình ảnh hợp lệ. Tập tin mà bạn đã tải không phải là hình "
+"ảnh hoặc đã bị hư hỏng."
+
+#: forms/fields.py:582 forms/fields.py:657
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr ""
+"Hãy chọn một lựa chọn hợp lệ. %(value)s không phải là một trong các lựa chọn "
+"khả thi."
+
+#: forms/fields.py:658 forms/fields.py:720 forms/models.py:961
+msgid "Enter a list of values."
+msgstr "Nhập một danh sách giá trị."
+
+#: forms/formsets.py:290 forms/formsets.py:292
+msgid "Order"
+msgstr "Thứ tự"
+
+#: forms/models.py:538
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr ""
+
+#: forms/models.py:542
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+
+#: forms/models.py:548
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+
+#: forms/models.py:556
+msgid "Please correct the duplicate values below."
+msgstr ""
+
+#: forms/models.py:820
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr ""
+
+#: forms/models.py:886
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+"Hãy chọn một lựa chọn hợp lệ. Lựa chọn đó không phải là một trong các lựa "
+"chọn khả thi."
+
+#: forms/models.py:962
+#, python-format
+msgid "Select a valid choice. %s is not one of the available choices."
+msgstr ""
+"Hãy chọn một lựa chọn hợp lệ. %s không phải là một trong các lựa chọn khả "
+"thi."
+
+#: forms/models.py:964
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr ""
+
+#: template/defaultfilters.py:775
+msgid "yes,no,maybe"
+msgstr "Có, Không, Có thể"
+
+#: template/defaultfilters.py:806
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: template/defaultfilters.py:808
+#, python-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: template/defaultfilters.py:810
+#, python-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: template/defaultfilters.py:811
+#, python-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#: utils/dateformat.py:42
+msgid "p.m."
+msgstr "p.m."
+
+#: utils/dateformat.py:43
+msgid "a.m."
+msgstr "a.m."
+
+#: utils/dateformat.py:48
+msgid "PM"
+msgstr "chiều"
+
+#: utils/dateformat.py:49
+msgid "AM"
+msgstr "sáng"
+
+#: utils/dateformat.py:98
+msgid "midnight"
+msgstr "Nửa đêm"
+
+#: utils/dateformat.py:100
+msgid "noon"
+msgstr "Buổi trưa"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Thứ 2"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Thứ 3"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Thứ 4"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Thứ 5"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Thứ 6"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Thứ 7"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Chủ nhật"
+
+#: utils/dates.py:10
+msgid "Mon"
+msgstr "Thứ 2"
+
+#: utils/dates.py:10
+msgid "Tue"
+msgstr "Thứ 3"
+
+#: utils/dates.py:10
+msgid "Wed"
+msgstr "Thứ 4"
+
+#: utils/dates.py:10
+msgid "Thu"
+msgstr "Thứ 5"
+
+#: utils/dates.py:10
+msgid "Fri"
+msgstr "Thứ 6"
+
+#: utils/dates.py:11
+msgid "Sat"
+msgstr "Thứ 7"
+
+#: utils/dates.py:11
+msgid "Sun"
+msgstr "Chủ nhật"
+
+#: utils/dates.py:18
+msgid "January"
+msgstr "Tháng 1"
+
+#: utils/dates.py:18
+msgid "February"
+msgstr "Tháng 2"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "March"
+msgstr "Tháng 3"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "April"
+msgstr "Tháng 4"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "May"
+msgstr "Tháng 5"
+
+#: utils/dates.py:18 utils/dates.py:31
+msgid "June"
+msgstr "Tháng 6"
+
+#: utils/dates.py:19 utils/dates.py:31
+msgid "July"
+msgstr "Tháng 7"
+
+#: utils/dates.py:19
+msgid "August"
+msgstr "Tháng 8"
+
+#: utils/dates.py:19
+msgid "September"
+msgstr "Tháng 9"
+
+#: utils/dates.py:19
+msgid "October"
+msgstr "Tháng 10"
+
+#: utils/dates.py:19
+msgid "November"
+msgstr "Tháng 11"
+
+#: utils/dates.py:20
+msgid "December"
+msgstr "Tháng 12"
+
+#: utils/dates.py:23
+msgid "jan"
+msgstr "Tháng 1"
+
+#: utils/dates.py:23
+msgid "feb"
+msgstr "Tháng 2"
+
+#: utils/dates.py:23
+msgid "mar"
+msgstr "Tháng 3"
+
+#: utils/dates.py:23
+msgid "apr"
+msgstr "Tháng 4"
+
+#: utils/dates.py:23
+msgid "may"
+msgstr "Tháng 5"
+
+#: utils/dates.py:23
+msgid "jun"
+msgstr "Tháng 6"
+
+#: utils/dates.py:24
+msgid "jul"
+msgstr "Tháng 7"
+
+#: utils/dates.py:24
+msgid "aug"
+msgstr "Tháng 8"
+
+#: utils/dates.py:24
+msgid "sep"
+msgstr "Tháng 9"
+
+#: utils/dates.py:24
+msgid "oct"
+msgstr "Tháng 10"
+
+#: utils/dates.py:24
+msgid "nov"
+msgstr "Tháng 11"
+
+#: utils/dates.py:24
+msgid "dec"
+msgstr "Tháng 12"
+
+#: utils/dates.py:31
+msgid "Jan."
+msgstr "Tháng 1"
+
+#: utils/dates.py:31
+msgid "Feb."
+msgstr "Tháng 2"
+
+#: utils/dates.py:32
+msgid "Aug."
+msgstr "Tháng 8"
+
+#: utils/dates.py:32
+msgid "Sept."
+msgstr "Tháng 9"
+
+#: utils/dates.py:32
+msgid "Oct."
+msgstr "Tháng 10"
+
+#: utils/dates.py:32
+msgid "Nov."
+msgstr "Tháng 11"
+
+#: utils/dates.py:32
+msgid "Dec."
+msgstr "Tháng 12"
+
+#: utils/text.py:130
+msgid "or"
+msgstr "hoặc"
+
+#: utils/timesince.py:21
+msgid "year"
+msgid_plural "years"
+msgstr[0] "năm"
+msgstr[1] "năm"
+
+#: utils/timesince.py:22
+msgid "month"
+msgid_plural "months"
+msgstr[0] "tháng"
+msgstr[1] "tháng"
+
+#: utils/timesince.py:23
+msgid "week"
+msgid_plural "weeks"
+msgstr[0] "tuần"
+msgstr[1] "tuần"
+
+#: utils/timesince.py:24
+msgid "day"
+msgid_plural "days"
+msgstr[0] "ngày"
+msgstr[1] "ngày"
+
+#: utils/timesince.py:25
+msgid "hour"
+msgid_plural "hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/timesince.py:26
+msgid "minute"
+msgid_plural "minutes"
+msgstr[0] "phút"
+msgstr[1] "phút"
+
+#: utils/timesince.py:45
+msgid "minutes"
+msgstr "phút"
+
+#: utils/timesince.py:50
+#, python-format
+msgid "%(number)d %(type)s"
+msgstr ""
+
+#: utils/timesince.py:56
+#, python-format
+msgid ", %(number)d %(type)s"
+msgstr ""
+
+#: utils/translation/trans_real.py:512
+msgid "DATE_FORMAT"
+msgstr "N j, Y"
+
+#: utils/translation/trans_real.py:513
+msgid "DATETIME_FORMAT"
+msgstr "N j, Y, P"
+
+#: utils/translation/trans_real.py:514
+msgid "TIME_FORMAT"
+msgstr "P"
+
+#: utils/translation/trans_real.py:535
+msgid "YEAR_MONTH_FORMAT"
+msgstr "F Y"
+
+#: utils/translation/trans_real.py:536
+msgid "MONTH_DAY_FORMAT"
+msgstr "F j"
+
+#: views/generic/create_update.py:115
+#, python-format
+msgid "The %(verbose_name)s was created successfully."
+msgstr "%(verbose_name)s đã được tạo thành công."
+
+#: views/generic/create_update.py:158
+#, python-format
+msgid "The %(verbose_name)s was updated successfully."
+msgstr "%(verbose_name)s đã được cập nhật thành công."
+
+#: views/generic/create_update.py:201
+#, python-format
+msgid "The %(verbose_name)s was deleted."
+msgstr "%(verbose_name)s đã bị xóa."
+
+#~ msgid ""
+#~ "Ensure this value has at most %(max)d characters (it has %(length)d)."
+#~ msgstr ""
+#~ "Hãy chắc chắn rằng giá trị này có nhiều nhất %(max)d kí tự (nó có %"
+#~ "(length)d)."
+
+#~ msgid ""
+#~ "Ensure this value has at least %(min)d characters (it has %(length)d)."
+#~ msgstr ""
+#~ "Hãy chắc chắn rằng giá trị này có ít nhất %(min)d kí tự (nó có %(length)"
+#~ "d)."
+
+#~ msgid "Ensure this value is less than or equal to %s."
+#~ msgstr "Hãy chắc chắn rằng giá trị này nhỏ hơn hoặc bằng %s."
+
+#~ msgid "Ensure this value is greater than or equal to %s."
+#~ msgstr "Hãy chắc chắn rằng giá trị này lớn hơn hoặc bằng %s."
+
+#~ msgid "Portugese"
+#~ msgstr "Tiếng Bồ Đào Nha"
+
+#~ msgid "Old password:"
+#~ msgstr "Mật khẩu cũ"
+
+#~ msgid "Add user"
+#~ msgstr "Thêm người sử dụng khác"
Binary file web/lib/django/conf/locale/vi/LC_MESSAGES/djangojs.mo has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/vi/LC_MESSAGES/djangojs.po	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,115 @@
+# This file is distributed under the same license as the Django package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-02-21 13:49+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:37
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:45
+msgid "Choose all"
+msgstr "Chọn tất cả"
+
+#: contrib/admin/media/js/SelectFilter2.js:50
+msgid "Add"
+msgstr "Thêm"
+
+#: contrib/admin/media/js/SelectFilter2.js:52
+msgid "Remove"
+msgstr "Xóa"
+
+#: contrib/admin/media/js/SelectFilter2.js:57
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:58
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:63
+msgid "Clear all"
+msgstr "Xóa tất cả"
+
+#: contrib/admin/media/js/calendar.js:24
+#: contrib/admin/media/js/dateparse.js:32
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/collapse.js:9 contrib/admin/media/js/collapse.js:21
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Show"
+msgstr "Hiện ra"
+
+#: contrib/admin/media/js/collapse.js:16
+#: contrib/admin/media/js/collapse.min.js:1
+msgid "Hide"
+msgstr "Dấu đi"
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:50
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:85
+msgid "Now"
+msgstr "Bây giờ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:54
+msgid "Clock"
+msgstr "Đồng hồ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Choose a time"
+msgstr "Chọn giờ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:86
+msgid "Midnight"
+msgstr "Nửa đêm"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87
+msgid "6 a.m."
+msgstr "6 giờ sáng"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+msgid "Noon"
+msgstr "Buổi trưa"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:92
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:188
+msgid "Cancel"
+msgstr "Hủy bỏ"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:133
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:182
+msgid "Today"
+msgstr "Hôm nay"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:137
+msgid "Calendar"
+msgstr "Lịch"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:180
+msgid "Yesterday"
+msgstr "Hôm qua"
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:184
+msgid "Tomorrow"
+msgstr "Ngày mai"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/vi/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+DATE_FORMAT = r'\N\gà\y d \t\há\n\g n \nă\m Y'
+TIME_FORMAT = 'H:i:s'
+DATETIME_FORMAT = r'H:i:s \N\gà\y d \t\há\n\g n \nă\m Y'
+YEAR_MONTH_FORMAT = 'F Y'
+MONTH_DAY_FORMAT = 'j F'
+SHORT_DATE_FORMAT = 'd-m-Y'
+SHORT_DATETIME_FORMAT = 'H:i:s d-m-Y'
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/zh_CN/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+# DATE_FORMAT = 
+# TIME_FORMAT = 
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+# MONTH_DAY_FORMAT = 
+# SHORT_DATE_FORMAT = 
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+# DECIMAL_SEPARATOR = 
+# THOUSAND_SEPARATOR = 
+# NUMBER_GROUPING = 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/conf/locale/zh_TW/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+# -*- encoding: utf-8 -*-
+# This file is distributed under the same license as the Django package.
+#
+
+# DATE_FORMAT = 
+# TIME_FORMAT = 
+# DATETIME_FORMAT = 
+# YEAR_MONTH_FORMAT = 
+# MONTH_DAY_FORMAT = 
+# SHORT_DATE_FORMAT = 
+# SHORT_DATETIME_FORMAT = 
+# FIRST_DAY_OF_WEEK = 
+# DATE_INPUT_FORMATS = 
+# TIME_INPUT_FORMATS = 
+# DATETIME_INPUT_FORMATS = 
+# DECIMAL_SEPARATOR = 
+# THOUSAND_SEPARATOR = 
+# NUMBER_GROUPING = 
--- a/web/lib/django/conf/project_template/settings.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/conf/project_template/settings.py	Tue May 25 02:43:45 2010 +0200
@@ -9,16 +9,22 @@
 
 MANAGERS = ADMINS
 
-DATABASE_ENGINE = ''           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
-DATABASE_NAME = ''             # Or path to database file if using sqlite3.
-DATABASE_USER = ''             # Not used with sqlite3.
-DATABASE_PASSWORD = ''         # Not used with sqlite3.
-DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
-DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+        'NAME': '',                      # Or path to database file if using sqlite3.
+        'USER': '',                      # Not used with sqlite3.
+        'PASSWORD': '',                  # Not used with sqlite3.
+        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
+        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
+    }
+}
 
 # Local time zone for this installation. Choices can be found here:
 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
 # although not all choices may be available on all operating systems.
+# On Unix systems, a value of None will cause Django to use the same
+# timezone as the operating system.
 # If running in a Windows environment this must be set to the same as your
 # system time zone.
 TIME_ZONE = 'America/Chicago'
@@ -33,6 +39,10 @@
 # to load the internationalization machinery.
 USE_I18N = True
 
+# If you set this to False, Django will not format dates, numbers and
+# calendars according to the current locale
+USE_L10N = True
+
 # Absolute path to the directory that holds media.
 # Example: "/home/media/media.lawrence.com/"
 MEDIA_ROOT = ''
@@ -52,15 +62,17 @@
 
 # List of callables that know how to import templates from various sources.
 TEMPLATE_LOADERS = (
-    'django.template.loaders.filesystem.load_template_source',
-    'django.template.loaders.app_directories.load_template_source',
-#     'django.template.loaders.eggs.load_template_source',
+    'django.template.loaders.filesystem.Loader',
+    'django.template.loaders.app_directories.Loader',
+#     'django.template.loaders.eggs.Loader',
 )
 
 MIDDLEWARE_CLASSES = (
     'django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
 )
 
 ROOT_URLCONF = '{{ project_name }}.urls'
@@ -76,4 +88,7 @@
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.sites',
+    'django.contrib.messages',
+    # Uncomment the next line to enable the admin:
+    # 'django.contrib.admin',
 )
--- a/web/lib/django/contrib/admin/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -2,11 +2,7 @@
 from django.contrib.admin.options import ModelAdmin, HORIZONTAL, VERTICAL
 from django.contrib.admin.options import StackedInline, TabularInline
 from django.contrib.admin.sites import AdminSite, site
-from django.utils.importlib import import_module
 
-# A flag to tell us if autodiscover is running.  autodiscover will set this to
-# True while running, and False when it finishes.
-LOADING = False
 
 def autodiscover():
     """
@@ -14,45 +10,27 @@
     not present. This forces an import on them to register any admin bits they
     may want.
     """
-    # Bail out if autodiscover didn't finish loading from a previous call so
-    # that we avoid running autodiscover again when the URLconf is loaded by
-    # the exception handler to resolve the handler500 view.  This prevents an
-    # admin.py module with errors from re-registering models and raising a
-    # spurious AlreadyRegistered exception (see #8245).
-    global LOADING
-    if LOADING:
-        return
-    LOADING = True
 
-    import imp
+    import copy
     from django.conf import settings
+    from django.utils.importlib import import_module
+    from django.utils.module_loading import module_has_submodule
 
     for app in settings.INSTALLED_APPS:
-        # For each app, we need to look for an admin.py inside that app's
-        # package. We can't use os.path here -- recall that modules may be
-        # imported different ways (think zip files) -- so we need to get
-        # the app's __path__ and look for admin.py on that path.
-
-        # Step 1: find out the app's __path__ Import errors here will (and
-        # should) bubble up, but a missing __path__ (which is legal, but weird)
-        # fails silently -- apps that do weird things with __path__ might
-        # need to roll their own admin registration.
+        mod = import_module(app)
+        # Attempt to import the app's admin module.
         try:
-            app_path = import_module(app).__path__
-        except AttributeError:
-            continue
+            before_import_registry = copy.copy(site._registry)
+            import_module('%s.admin' % app)
+        except:
+            # Reset the model registry to the state before the last import as
+            # this import will have to reoccur on the next request and this
+            # could raise NotRegistered and AlreadyRegistered exceptions
+            # (see #8245).
+            site._registry = before_import_registry
 
-        # Step 2: use imp.find_module to find the app's admin.py. For some
-        # reason imp.find_module raises ImportError if the app can't be found
-        # but doesn't actually try to import the module. So skip this app if
-        # its admin.py doesn't exist
-        try:
-            imp.find_module('admin', app_path)
-        except ImportError:
-            continue
-
-        # Step 3: import the app's admin file. If this has errors we want them
-        # to bubble up.
-        import_module("%s.admin" % app)
-    # autodiscover was successful, reset loading flag.
-    LOADING = False
+            # Decide whether to bubble up this error. If the app just
+            # doesn't have an admin module, we can ignore the error
+            # attempting to import it, otherwise we want it to bubble up.
+            if module_has_submodule(mod, 'admin'):
+                raise
--- a/web/lib/django/contrib/admin/actions.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/actions.py	Tue May 25 02:43:45 2010 +0200
@@ -12,10 +12,6 @@
 from django.utils.safestring import mark_safe
 from django.utils.text import capfirst
 from django.utils.translation import ugettext_lazy, ugettext as _
-try:
-    set
-except NameError:
-    from sets import Set as set     # Python 2.3 fallback
 
 def delete_selected(modeladmin, request, queryset):
     """
@@ -36,15 +32,7 @@
 
     # Populate deletable_objects, a data structure of all related objects that
     # will also be deleted.
-
-    # deletable_objects must be a list if we want to use '|unordered_list' in the template
-    deletable_objects = []
-    perms_needed = set()
-    i = 0
-    for obj in queryset:
-        deletable_objects.append([mark_safe(u'%s: <a href="%s/">%s</a>' % (escape(force_unicode(capfirst(opts.verbose_name))), obj.pk, escape(obj))), []])
-        get_deleted_objects(deletable_objects[i], perms_needed, request.user, obj, opts, 1, modeladmin.admin_site, levels_to_root=2)
-        i=i+1
+    deletable_objects, perms_needed = get_deleted_objects(queryset, opts, request.user, modeladmin.admin_site, levels_to_root=2)
 
     # The user has already confirmed the deletion.
     # Do the deletion and return a None to display the change list view again.
@@ -66,7 +54,7 @@
     context = {
         "title": _("Are you sure?"),
         "object_name": force_unicode(opts.verbose_name),
-        "deletable_objects": deletable_objects,
+        "deletable_objects": [deletable_objects],
         'queryset': queryset,
         "perms_lacking": perms_needed,
         "opts": opts,
@@ -76,7 +64,7 @@
     }
 
     # Display the confirmation page
-    return render_to_response(modeladmin.delete_confirmation_template or [
+    return render_to_response(modeladmin.delete_selected_confirmation_template or [
         "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.object_name.lower()),
         "admin/%s/delete_selected_confirmation.html" % app_label,
         "admin/delete_selected_confirmation.html"
--- a/web/lib/django/contrib/admin/helpers.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/helpers.py	Tue May 25 02:43:45 2010 +0200
@@ -1,31 +1,47 @@
-
 from django import forms
 from django.conf import settings
-from django.utils.html import escape
+from django.contrib.admin.util import flatten_fieldsets, lookup_field
+from django.contrib.admin.util import display_for_field, label_for_field
+from django.contrib.contenttypes.models import ContentType
+from django.core.exceptions import ObjectDoesNotExist
+from django.db.models.fields import FieldDoesNotExist
+from django.db.models.fields.related import ManyToManyRel
+from django.forms.util import flatatt
+from django.template.defaultfilters import capfirst
+from django.utils.encoding import force_unicode, smart_unicode
+from django.utils.html import escape, conditional_escape
 from django.utils.safestring import mark_safe
-from django.utils.encoding import force_unicode
-from django.contrib.admin.util import flatten_fieldsets
-from django.contrib.contenttypes.models import ContentType
 from django.utils.translation import ugettext_lazy as _
 
+
 ACTION_CHECKBOX_NAME = '_selected_action'
 
 class ActionForm(forms.Form):
     action = forms.ChoiceField(label=_('Action:'))
+    select_across = forms.BooleanField(label='', required=False, initial=0,
+        widget=forms.HiddenInput({'class': 'select-across'}))
 
 checkbox = forms.CheckboxInput({'class': 'action-select'}, lambda value: False)
 
 class AdminForm(object):
-    def __init__(self, form, fieldsets, prepopulated_fields):
+    def __init__(self, form, fieldsets, prepopulated_fields, readonly_fields=None, model_admin=None):
         self.form, self.fieldsets = form, normalize_fieldsets(fieldsets)
         self.prepopulated_fields = [{
             'field': form[field_name],
             'dependencies': [form[f] for f in dependencies]
         } for field_name, dependencies in prepopulated_fields.items()]
+        self.model_admin = model_admin
+        if readonly_fields is None:
+            readonly_fields = ()
+        self.readonly_fields = readonly_fields
 
     def __iter__(self):
         for name, options in self.fieldsets:
-            yield Fieldset(self.form, name, **options)
+            yield Fieldset(self.form, name,
+                readonly_fields=self.readonly_fields,
+                model_admin=self.model_admin,
+                **options
+            )
 
     def first_field(self):
         try:
@@ -49,36 +65,48 @@
     media = property(_media)
 
 class Fieldset(object):
-    def __init__(self, form, name=None, fields=(), classes=(), description=None):
+    def __init__(self, form, name=None, readonly_fields=(), fields=(), classes=(),
+      description=None, model_admin=None):
         self.form = form
         self.name, self.fields = name, fields
         self.classes = u' '.join(classes)
         self.description = description
+        self.model_admin = model_admin
+        self.readonly_fields = readonly_fields
 
     def _media(self):
         if 'collapse' in self.classes:
-            return forms.Media(js=['%sjs/admin/CollapsedFieldsets.js' % settings.ADMIN_MEDIA_PREFIX])
+            js = ['js/jquery.min.js', 'js/jquery.init.js', 'js/collapse.min.js']
+            return forms.Media(js=['%s%s' % (settings.ADMIN_MEDIA_PREFIX, url) for url in js])
         return forms.Media()
     media = property(_media)
 
     def __iter__(self):
         for field in self.fields:
-            yield Fieldline(self.form, field)
+            yield Fieldline(self.form, field, self.readonly_fields, model_admin=self.model_admin)
 
 class Fieldline(object):
-    def __init__(self, form, field):
+    def __init__(self, form, field, readonly_fields=None, model_admin=None):
         self.form = form # A django.forms.Form instance
-        if isinstance(field, basestring):
+        if not hasattr(field, "__iter__"):
             self.fields = [field]
         else:
             self.fields = field
+        self.model_admin = model_admin
+        if readonly_fields is None:
+            readonly_fields = ()
+        self.readonly_fields = readonly_fields
 
     def __iter__(self):
         for i, field in enumerate(self.fields):
-            yield AdminField(self.form, field, is_first=(i == 0))
+            if field in self.readonly_fields:
+                yield AdminReadonlyField(self.form, field, is_first=(i == 0),
+                    model_admin=self.model_admin)
+            else:
+                yield AdminField(self.form, field, is_first=(i == 0))
 
     def errors(self):
-        return mark_safe(u'\n'.join([self.form[f].errors.as_ul() for f in self.fields]).strip('\n'))
+        return mark_safe(u'\n'.join([self.form[f].errors.as_ul() for f in self.fields if f not in self.readonly_fields]).strip('\n'))
 
 class AdminField(object):
     def __init__(self, form, field, is_first):
@@ -100,27 +128,105 @@
         attrs = classes and {'class': u' '.join(classes)} or {}
         return self.field.label_tag(contents=contents, attrs=attrs)
 
+class AdminReadonlyField(object):
+    def __init__(self, form, field, is_first, model_admin=None):
+        label = label_for_field(field, form._meta.model, model_admin)
+        # Make self.field look a little bit like a field. This means that
+        # {{ field.name }} must be a useful class name to identify the field.
+        # For convenience, store other field-related data here too.
+        if callable(field):
+            class_name = field.__name__ != '<lambda>' and field.__name__ or ''
+        else:
+            class_name = field
+        self.field = {
+            'name': class_name,
+            'label': label,
+            'field': field,
+        }
+        self.form = form
+        self.model_admin = model_admin
+        self.is_first = is_first
+        self.is_checkbox = False
+        self.is_readonly = True
+
+    def label_tag(self):
+        attrs = {}
+        if not self.is_first:
+            attrs["class"] = "inline"
+        label = self.field['label']
+        contents = capfirst(force_unicode(escape(label))) + u":"
+        return mark_safe('<label%(attrs)s>%(contents)s</label>' % {
+            "attrs": flatatt(attrs),
+            "contents": contents,
+        })
+
+    def contents(self):
+        from django.contrib.admin.templatetags.admin_list import _boolean_icon
+        from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE
+        field, obj, model_admin = self.field['field'], self.form.instance, self.model_admin
+        try:
+            f, attr, value = lookup_field(field, obj, model_admin)
+        except (AttributeError, ValueError, ObjectDoesNotExist):
+            result_repr = EMPTY_CHANGELIST_VALUE
+        else:
+            if f is None:
+                boolean = getattr(attr, "boolean", False)
+                if boolean:
+                    result_repr = _boolean_icon(value)
+                else:
+                    result_repr = smart_unicode(value)
+                    if getattr(attr, "allow_tags", False):
+                        result_repr = mark_safe(result_repr)
+            else:
+                if value is None:
+                    result_repr = EMPTY_CHANGELIST_VALUE
+                elif isinstance(f.rel, ManyToManyRel):
+                    result_repr = ", ".join(map(unicode, value.all()))
+                else:
+                    result_repr = display_for_field(value, f)
+        return conditional_escape(result_repr)
+
 class InlineAdminFormSet(object):
     """
     A wrapper around an inline formset for use in the admin system.
     """
-    def __init__(self, inline, formset, fieldsets):
+    def __init__(self, inline, formset, fieldsets, readonly_fields=None, model_admin=None):
         self.opts = inline
         self.formset = formset
         self.fieldsets = fieldsets
+        self.model_admin = model_admin
+        if readonly_fields is None:
+            readonly_fields = ()
+        self.readonly_fields = readonly_fields
 
     def __iter__(self):
         for form, original in zip(self.formset.initial_forms, self.formset.get_queryset()):
-            yield InlineAdminForm(self.formset, form, self.fieldsets, self.opts.prepopulated_fields, original)
+            yield InlineAdminForm(self.formset, form, self.fieldsets,
+                self.opts.prepopulated_fields, original, self.readonly_fields,
+                model_admin=self.model_admin)
         for form in self.formset.extra_forms:
-            yield InlineAdminForm(self.formset, form, self.fieldsets, self.opts.prepopulated_fields, None)
+            yield InlineAdminForm(self.formset, form, self.fieldsets,
+                self.opts.prepopulated_fields, None, self.readonly_fields,
+                model_admin=self.model_admin)
+        yield InlineAdminForm(self.formset, self.formset.empty_form,
+            self.fieldsets, self.opts.prepopulated_fields, None,
+            self.readonly_fields, model_admin=self.model_admin)
 
     def fields(self):
         fk = getattr(self.formset, "fk", None)
-        for field_name in flatten_fieldsets(self.fieldsets):
-            if fk and fk.name == field_name:
+        for i, field in enumerate(flatten_fieldsets(self.fieldsets)):
+            if fk and fk.name == field:
                 continue
-            yield self.formset.form.base_fields[field_name]
+            if field in self.readonly_fields:
+                yield {
+                    'label': label_for_field(field, self.opts.model, self.model_admin),
+                    'widget': {
+                        'is_hidden': False
+                    },
+                    'required': False
+                }
+            else:
+                yield self.formset.form.base_fields[field]
 
     def _media(self):
         media = self.opts.media + self.formset.media
@@ -133,17 +239,21 @@
     """
     A wrapper around an inline form for use in the admin system.
     """
-    def __init__(self, formset, form, fieldsets, prepopulated_fields, original):
+    def __init__(self, formset, form, fieldsets, prepopulated_fields, original,
+      readonly_fields=None, model_admin=None):
         self.formset = formset
+        self.model_admin = model_admin
         self.original = original
         if original is not None:
             self.original_content_type_id = ContentType.objects.get_for_model(original).pk
         self.show_url = original and hasattr(original, 'get_absolute_url')
-        super(InlineAdminForm, self).__init__(form, fieldsets, prepopulated_fields)
+        super(InlineAdminForm, self).__init__(form, fieldsets, prepopulated_fields,
+            readonly_fields, model_admin)
 
     def __iter__(self):
         for name, options in self.fieldsets:
-            yield InlineFieldset(self.formset, self.form, name, **options)
+            yield InlineFieldset(self.formset, self.form, name,
+                self.readonly_fields, model_admin=self.model_admin, **options)
 
     def has_auto_field(self):
         if self.form._meta.model._meta.has_auto_field:
@@ -194,7 +304,8 @@
         for field in self.fields:
             if fk and fk.name == field:
                 continue
-            yield Fieldline(self.form, field)
+            yield Fieldline(self.form, field, self.readonly_fields,
+                model_admin=self.model_admin)
 
 class AdminErrorList(forms.util.ErrorList):
     """
@@ -228,4 +339,3 @@
             del data_dict[key]
             data_dict[str(key)] = value
     return data_dict
-
--- a/web/lib/django/contrib/admin/media/css/base.css	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/css/base.css	Tue May 25 02:43:45 2010 +0200
@@ -344,7 +344,7 @@
 
 /* FORM DEFAULTS */
 
-input, textarea, select {
+input, textarea, select, .form-row p {
     margin: 2px 0;
     padding: 2px 3px;
     vertical-align: middle;
@@ -365,7 +365,7 @@
 
 .button, input[type=submit], input[type=button], .submit-row input {
     background: white url(../img/admin/nav-bg.gif) bottom repeat-x;
-    padding: 3px;
+    padding: 3px 5px;
     color: black;
     border: 1px solid #bbb;
     border-color: #ddd #aaa #aaa #ddd;
--- a/web/lib/django/contrib/admin/media/css/changelists.css	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/css/changelists.css	Tue May 25 02:43:45 2010 +0200
@@ -53,7 +53,7 @@
     vertical-align: middle;
 }
 
-#changelist table thead th:first-child {
+#changelist table thead th.action-checkbox-column {
     width: 1.5em;
     text-align: center;
 }
@@ -244,6 +244,21 @@
     background: white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x;
 }
 
+#changelist .actions.selected {
+    background: #fffccf;
+    border-top: 1px solid #fffee8;
+    border-bottom: 1px solid #edecd6;
+}
+
+#changelist .actions span.all,
+#changelist .actions span.action-counter,
+#changelist .actions span.clear,
+#changelist .actions span.question {
+    font-size: 11px;
+    margin: 0 0.5em;
+    display: none;
+}
+
 #changelist .actions:last-child {
     border-bottom: none;
 }
--- a/web/lib/django/contrib/admin/media/css/forms.css	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/css/forms.css	Tue May 25 02:43:45 2010 +0200
@@ -67,6 +67,12 @@
     width: 8em;
 }
 
+.aligned ul label {
+    display: inline;
+    float: none;
+    width: auto;
+}
+
 .colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField {
     width: 350px;
 }
@@ -140,7 +146,6 @@
 }
 
 fieldset.collapsed .collapse-toggle {
-    padding: 3px 5px !important;
     background: transparent;
     display: inline !important;
 }
@@ -247,10 +252,7 @@
 }
 
 .inline-related h3 span.delete {
-    padding-left: 20px;
-    position: absolute;
-    top: 2px;
-    right: 10px;
+    float: right;
 }
 
 .inline-related h3 span.delete label {
@@ -274,6 +276,11 @@
     color: #fff;
 }
 
+.inline-group .tabular fieldset.module {
+    border: none;
+    border-bottom: 1px solid #ddd;
+}
+
 .inline-related.tabular fieldset.module table {
     width: 100%;
 }
@@ -320,8 +327,28 @@
     padding: 0 5px;
 }
 
-.inline-group ul.tools a.add {
+.inline-group div.add-row,
+.inline-group .tabular tr.add-row td {
+    color: #666;
+    padding: 3px 5px;
+    border-bottom: 1px solid #ddd;
+    background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
+}
+
+.inline-group .tabular tr.add-row td {
+    padding: 4px 5px 3px;
+    border-bottom: none;
+}
+
+.inline-group ul.tools a.add,
+.inline-group div.add-row a,
+.inline-group .tabular tr.add-row td a {
     background: url(../img/admin/icon_addlink.gif) 0 50% no-repeat;
     padding-left: 14px;
+    font-size: 11px;
+    outline: 0; /* Remove dotted border around link */
 }
 
+.empty-form {
+    display: none;
+}
--- a/web/lib/django/contrib/admin/media/css/ie.css	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/css/ie.css	Tue May 25 02:43:45 2010 +0200
@@ -48,4 +48,10 @@
 
 .change-list .filtered {
     _height: 400px;
+}
+
+/* IE doesn't know alpha transparency in PNGs */
+
+.inline-deletelink {
+    background: transparent url(../img/admin/inline-delete-8bit.png) no-repeat;
 }
\ No newline at end of file
--- a/web/lib/django/contrib/admin/media/css/rtl.css	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/css/rtl.css	Tue May 25 02:43:45 2010 +0200
@@ -112,6 +112,13 @@
     margin-right: -10px;
 }
 
+.filtered .actions {
+    border-left:1px solid #DDDDDD;
+    margin-left:160px !important;
+    border-right: 0 none;
+    margin-right:0 !important;
+}
+
 /* FORMS */
 
 .aligned label {
@@ -187,6 +194,10 @@
     text-align: right;
 }
 
+.inline-deletelink {
+    float: left;
+}
+
 /* MISC */
 
 .inline-related h2 {
--- a/web/lib/django/contrib/admin/media/css/widgets.css	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/css/widgets.css	Tue May 25 02:43:45 2010 +0200
@@ -416,13 +416,13 @@
 /* EDIT INLINE */
 
 .inline-deletelink {
-    display: block;
+    float: right;
     text-indent: -9999px;
     background: transparent url(../img/admin/inline-delete.png) no-repeat;
     width: 15px;
     height: 15px;
-    margin: 0.4em 0;
     border: 0px none;
+    outline: 0; /* Remove dotted border around link */
 }
 
 .inline-deletelink:hover {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/LICENSE-JQUERY.txt	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,20 @@
+Copyright (c) 2010 John Resig, http://jquery.com/
+ 
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+ 
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+ 
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
--- a/web/lib/django/contrib/admin/media/js/SelectFilter2.js	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/js/SelectFilter2.js	Tue May 25 02:43:45 2010 +0200
@@ -16,6 +16,10 @@
 
 var SelectFilter = {
     init: function(field_id, field_name, is_stacked, admin_media_prefix) {
+        if (field_id.match(/__prefix__/)){
+            // Don't intialize on empty forms.
+            return;
+        }
         var from_box = document.getElementById(field_id);
         from_box.id += '_from'; // change its ID
         from_box.className = 'filtered';
--- a/web/lib/django/contrib/admin/media/js/actions.js	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/js/actions.js	Tue May 25 02:43:45 2010 +0200
@@ -1,39 +1,139 @@
-var Actions = {
-    init: function() {
-        var selectAll = document.getElementById('action-toggle');
-        if (selectAll) {
-            selectAll.style.display = 'inline';
-            addEvent(selectAll, 'click', function() {
-                Actions.checker(selectAll.checked);
-            });
-        }
-        var changelistTable = document.getElementsBySelector('#changelist table')[0];
-        if (changelistTable) {
-            addEvent(changelistTable, 'click', function(e) {
-                if (!e) { var e = window.event; }
-                var target = e.target ? e.target : e.srcElement;
-                if (target.nodeType == 3) { target = target.parentNode; }
-                if (target.className == 'action-select') {
-                    var tr = target.parentNode.parentNode;
-                    Actions.toggleRow(tr, target.checked);
-                }
-            });
-        }
-    },
-    toggleRow: function(tr, checked) {
-        if (checked && tr.className.indexOf('selected') == -1) {
-            tr.className += ' selected';
-        } else if (!checked) {
-            tr.className = tr.className.replace(' selected', '');
-        }  
-    },
-    checker: function(checked) {
-        var actionCheckboxes = document.getElementsBySelector('tr input.action-select');
-        for(var i = 0; i < actionCheckboxes.length; i++) {
-            actionCheckboxes[i].checked = checked;
-            Actions.toggleRow(actionCheckboxes[i].parentNode.parentNode, checked);
-        }
-    }
-};
-
-addEvent(window, 'load', Actions.init);
+(function($) {
+	$.fn.actions = function(opts) {
+		var options = $.extend({}, $.fn.actions.defaults, opts);
+		var actionCheckboxes = $(this);
+		var list_editable_changed = false;
+		checker = function(checked) {
+			if (checked) {
+				showQuestion();
+			} else {
+				reset();
+			}
+			$(actionCheckboxes).attr("checked", checked)
+				.parent().parent().toggleClass(options.selectedClass, checked);
+		}
+		updateCounter = function() {
+			var sel = $(actionCheckboxes).filter(":checked").length;
+			$(options.counterContainer).html(interpolate(
+			ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
+				sel: sel,
+				cnt: _actions_icnt
+			}, true));
+			$(options.allToggle).attr("checked", function() {
+				if (sel == actionCheckboxes.length) {
+					value = true;
+					showQuestion();
+				} else {
+					value = false;
+					clearAcross();
+				}
+				return value;
+			});
+		}
+		showQuestion = function() {
+			$(options.acrossClears).hide();
+			$(options.acrossQuestions).show();
+			$(options.allContainer).hide();
+		}
+		showClear = function() {
+			$(options.acrossClears).show();
+			$(options.acrossQuestions).hide();
+			$(options.actionContainer).toggleClass(options.selectedClass);
+			$(options.allContainer).show();
+			$(options.counterContainer).hide();
+		}
+		reset = function() {
+			$(options.acrossClears).hide();
+			$(options.acrossQuestions).hide();
+			$(options.allContainer).hide();
+			$(options.counterContainer).show();
+		}
+		clearAcross = function() {
+			reset();
+			$(options.acrossInput).val(0);
+			$(options.actionContainer).removeClass(options.selectedClass);
+		}
+		// Show counter by default
+		$(options.counterContainer).show();
+		// Check state of checkboxes and reinit state if needed
+		$(this).filter(":checked").each(function(i) {
+			$(this).parent().parent().toggleClass(options.selectedClass);
+			updateCounter();
+			if ($(options.acrossInput).val() == 1) {
+				showClear();
+			}
+		});
+		$(options.allToggle).show().click(function() {
+			checker($(this).attr("checked"));
+			updateCounter();
+		});
+		$("div.actions span.question a").click(function(event) {
+			event.preventDefault();
+			$(options.acrossInput).val(1);
+			showClear();
+		});
+		$("div.actions span.clear a").click(function(event) {
+			event.preventDefault();
+			$(options.allToggle).attr("checked", false);
+			clearAcross();
+			checker(0);
+			updateCounter();
+		});
+		lastChecked = null;
+		$(actionCheckboxes).click(function(event) {
+			if (!event) { var event = window.event; }
+			var target = event.target ? event.target : event.srcElement;
+			if (lastChecked && $.data(lastChecked) != $.data(target) && event.shiftKey == true) {
+				var inrange = false;
+				$(lastChecked).attr("checked", target.checked)
+					.parent().parent().toggleClass(options.selectedClass, target.checked);
+				$(actionCheckboxes).each(function() {
+					if ($.data(this) == $.data(lastChecked) || $.data(this) == $.data(target)) {
+						inrange = (inrange) ? false : true;
+					}
+					if (inrange) {
+						$(this).attr("checked", target.checked)
+							.parent().parent().toggleClass(options.selectedClass, target.checked);
+					}
+				});
+			}
+			$(target).parent().parent().toggleClass(options.selectedClass, target.checked);
+			lastChecked = target;
+			updateCounter();
+		});
+		$('form#changelist-form table#result_list tr').find('td:gt(0) :input').change(function() {
+			list_editable_changed = true;
+		});
+		$('form#changelist-form button[name="index"]').click(function(event) {
+			if (list_editable_changed) {
+				return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
+			}
+		});
+		$('form#changelist-form input[name="_save"]').click(function(event) {
+			var action_changed = false;
+			$('div.actions select option:selected').each(function() {
+				if ($(this).val()) {
+					action_changed = true;
+				}
+			});
+			if (action_changed) {
+				if (list_editable_changed) {
+					return confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action."));
+				} else {
+					return confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."));
+				}
+			}
+		});
+	}
+	/* Setup plugin defaults */
+	$.fn.actions.defaults = {
+		actionContainer: "div.actions",
+		counterContainer: "span.action-counter",
+		allContainer: "div.actions span.all",
+		acrossInput: "div.actions input.select-across",
+		acrossQuestions: "div.actions span.question",
+		acrossClears: "div.actions span.clear",
+		allToggle: "#action-toggle",
+		selectedClass: "selected"
+	}
+})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/actions.min.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,7 @@
+(function(a){a.fn.actions=function(h){var b=a.extend({},a.fn.actions.defaults,h),e=a(this),f=false;checker=function(c){c?showQuestion():reset();a(e).attr("checked",c).parent().parent().toggleClass(b.selectedClass,c)};updateCounter=function(){var c=a(e).filter(":checked").length;a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:_actions_icnt},true));a(b.allToggle).attr("checked",function(){if(c==e.length){value=true;showQuestion()}else{value=
+false;clearAcross()}return value})};showQuestion=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()};showClear=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()};reset=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()};clearAcross=function(){reset();a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)};
+a(b.counterContainer).show();a(this).filter(":checked").each(function(){a(this).parent().parent().toggleClass(b.selectedClass);updateCounter();a(b.acrossInput).val()==1&&showClear()});a(b.allToggle).show().click(function(){checker(a(this).attr("checked"));updateCounter()});a("div.actions span.question a").click(function(c){c.preventDefault();a(b.acrossInput).val(1);showClear()});a("div.actions span.clear a").click(function(c){c.preventDefault();a(b.allToggle).attr("checked",false);clearAcross();checker(0);
+updateCounter()});lastChecked=null;a(e).click(function(c){if(!c)c=window.event;var d=c.target?c.target:c.srcElement;if(lastChecked&&a.data(lastChecked)!=a.data(d)&&c.shiftKey==true){var g=false;a(lastChecked).attr("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(e).each(function(){if(a.data(this)==a.data(lastChecked)||a.data(this)==a.data(d))g=g?false:true;g&&a(this).attr("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,
+d.checked);lastChecked=d;updateCounter()});a("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function(){f=true});a('form#changelist-form button[name="index"]').click(function(){if(f)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').click(function(){var c=false;a("div.actions select option:selected").each(function(){if(a(this).val())c=
+true});if(c)return f?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",
+acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"}})(django.jQuery);
--- a/web/lib/django/contrib/admin/media/js/admin/CollapsedFieldsets.js	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-// Finds all fieldsets with class="collapse", collapses them, and gives each
-// one a "Show" link that uncollapses it. The "Show" link becomes a "Hide"
-// link when the fieldset is visible.
-
-function findForm(node) {
-    // returns the node of the form containing the given node
-    if (node.tagName.toLowerCase() != 'form') {
-        return findForm(node.parentNode);
-    }
-    return node;
-}
-
-var CollapsedFieldsets = {
-    collapse_re: /\bcollapse\b/,   // Class of fieldsets that should be dealt with.
-    collapsed_re: /\bcollapsed\b/, // Class that fieldsets get when they're hidden.
-    collapsed_class: 'collapsed',
-    init: function() {
-        var fieldsets = document.getElementsByTagName('fieldset');
-        var collapsed_seen = false;
-        for (var i = 0, fs; fs = fieldsets[i]; i++) {
-            // Collapse this fieldset if it has the correct class, and if it
-            // doesn't have any errors. (Collapsing shouldn't apply in the case
-            // of error messages.)
-            if (fs.className.match(CollapsedFieldsets.collapse_re) && !CollapsedFieldsets.fieldset_has_errors(fs)) {
-                collapsed_seen = true;
-                // Give it an additional class, used by CSS to hide it.
-                fs.className += ' ' + CollapsedFieldsets.collapsed_class;
-                // (<a id="fieldsetcollapser3" class="collapse-toggle" href="#">Show</a>)
-                var collapse_link = document.createElement('a');
-                collapse_link.className = 'collapse-toggle';
-                collapse_link.id = 'fieldsetcollapser' + i;
-                collapse_link.onclick = new Function('CollapsedFieldsets.show('+i+'); return false;');
-                collapse_link.href = '#';
-                collapse_link.innerHTML = gettext('Show');
-                var h2 = fs.getElementsByTagName('h2')[0];
-                h2.appendChild(document.createTextNode(' ('));
-                h2.appendChild(collapse_link);
-                h2.appendChild(document.createTextNode(')'));
-            }
-        }
-        if (collapsed_seen) {
-            // Expand all collapsed fieldsets when form is submitted.
-            addEvent(findForm(document.getElementsByTagName('fieldset')[0]), 'submit', function() { CollapsedFieldsets.uncollapse_all(); });
-        }
-    },
-    fieldset_has_errors: function(fs) {
-        // Returns true if any fields in the fieldset have validation errors.
-        var divs = fs.getElementsByTagName('div');
-        for (var i=0; i<divs.length; i++) {
-            if (divs[i].className.match(/\berrors\b/)) {
-                return true;
-            }
-        }
-        return false;
-    },
-    show: function(fieldset_index) {
-        var fs = document.getElementsByTagName('fieldset')[fieldset_index];
-        // Remove the class name that causes the "display: none".
-        fs.className = fs.className.replace(CollapsedFieldsets.collapsed_re, '');
-        // Toggle the "Show" link to a "Hide" link
-        var collapse_link = document.getElementById('fieldsetcollapser' + fieldset_index);
-        collapse_link.onclick = new Function('CollapsedFieldsets.hide('+fieldset_index+'); return false;');
-        collapse_link.innerHTML = gettext('Hide');
-    },
-    hide: function(fieldset_index) {
-        var fs = document.getElementsByTagName('fieldset')[fieldset_index];
-        // Add the class name that causes the "display: none".
-        fs.className += ' ' + CollapsedFieldsets.collapsed_class;
-        // Toggle the "Hide" link to a "Show" link
-        var collapse_link = document.getElementById('fieldsetcollapser' + fieldset_index);
-        collapse_link.onclick = new Function('CollapsedFieldsets.show('+fieldset_index+'); return false;');
-        collapse_link.innerHTML = gettext('Show');
-    },
-
-    uncollapse_all: function() {
-        var fieldsets = document.getElementsByTagName('fieldset');
-        for (var i=0; i<fieldsets.length; i++) {
-            if (fieldsets[i].className.match(CollapsedFieldsets.collapsed_re)) {
-                CollapsedFieldsets.show(i);
-            }
-        }
-    }
-}
-
-addEvent(window, 'load', CollapsedFieldsets.init);
--- a/web/lib/django/contrib/admin/media/js/admin/DateTimeShortcuts.js	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/js/admin/DateTimeShortcuts.js	Tue May 25 02:43:45 2010 +0200
@@ -11,17 +11,17 @@
     calendarLinkName: 'calendarlink',// name of the link that is used to toggle
     clockDivName: 'clockbox',        // name of clock <div> that gets toggled
     clockLinkName: 'clocklink',      // name of the link that is used to toggle
+    shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts
     admin_media_prefix: '',
     init: function() {
-        // Deduce admin_media_prefix by looking at the <script>s in the
-        // current document and finding the URL of *this* module.
-        var scripts = document.getElementsByTagName('script');
-        for (var i=0; i<scripts.length; i++) {
-            if (scripts[i].src.match(/DateTimeShortcuts/)) {
-                var idx = scripts[i].src.indexOf('js/admin/DateTimeShortcuts');
-                DateTimeShortcuts.admin_media_prefix = scripts[i].src.substring(0, idx);
-                break;
-            }
+        // Get admin_media_prefix by grabbing it off the window object. It's
+        // set in the admin/base.html template, so if it's not there, someone's
+        // overridden the template. In that case, we'll set a clearly-invalid
+        // value in the hopes that someone will examine HTTP requests and see it.
+        if (window.__admin_media_prefix__ != undefined) {
+            DateTimeShortcuts.admin_media_prefix = window.__admin_media_prefix__;
+        } else {
+            DateTimeShortcuts.admin_media_prefix = '/missing-admin-media-prefix/';
         }
 
         var inputs = document.getElementsByTagName('input');
@@ -42,9 +42,10 @@
 
         // Shortcut links (clock icon and "Now" link)
         var shortcuts_span = document.createElement('span');
+        shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
         inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
         var now_link = document.createElement('a');
-        now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinuteSecond());");
+        now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + get_format('TIME_INPUT_FORMATS')[0] + "'));");
         now_link.appendChild(document.createTextNode(gettext('Now')));
         var clock_link = document.createElement('a');
         clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');');
@@ -80,10 +81,11 @@
         quickElement('h2', clock_box, gettext('Choose a time'));
         time_list = quickElement('ul', clock_box, '');
         time_list.className = 'timelist';
-        quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinuteSecond());")
-        quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '00:00:00');")
-        quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '06:00:00');")
-        quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '12:00:00');")
+        time_format = get_format('TIME_INPUT_FORMATS')[0];
+        quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + time_format + "'));");
+        quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,0,0,0,0).strftime('" + time_format + "'));");
+        quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,6,0,0,0).strftime('" + time_format + "'));");
+        quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,12,0,0,0).strftime('" + time_format + "'));");
 
         cancel_p = quickElement('p', clock_box, '');
         cancel_p.className = 'calendar-cancel';
@@ -117,6 +119,7 @@
     },
     handleClockQuicklink: function(num, val) {
        DateTimeShortcuts.clockInputs[num].value = val;
+       DateTimeShortcuts.clockInputs[num].focus();
        DateTimeShortcuts.dismissClock(num);
     },
     // Add calendar widget to a given field.
@@ -127,6 +130,7 @@
 
         // Shortcut links (calendar icon and "Today" link)
         var shortcuts_span = document.createElement('span');
+        shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
         inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
         var today_link = document.createElement('a');
         today_link.setAttribute('href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);');
@@ -195,20 +199,19 @@
     openCalendar: function(num) {
         var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1+num)
         var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName+num)
-	var inp = DateTimeShortcuts.calendarInputs[num];
+        var inp = DateTimeShortcuts.calendarInputs[num];
 
-	// Determine if the current value in the input has a valid date.
-	// If so, draw the calendar with that date's year and month.
-	if (inp.value) {
-	    var date_parts = inp.value.split('-');
-	    var year = date_parts[0];
-	    var month = parseFloat(date_parts[1]);
-	    if (year.match(/\d\d\d\d/) && month >= 1 && month <= 12) {
-		DateTimeShortcuts.calendars[num].drawDate(month, year);
-	    }
-	}
+        // Determine if the current value in the input has a valid date.
+        // If so, draw the calendar with that date's year and month.
+        if (inp.value) {
+            var date_parts = inp.value.split('-');
+            var year = date_parts[0];
+            var month = parseFloat(date_parts[1]);
+            if (year.match(/\d\d\d\d/) && month >= 1 && month <= 12) {
+                DateTimeShortcuts.calendars[num].drawDate(month, year);
+            }
+        }
 
-    
         // Recalculate the clockbox position
         // is it left-to-right or right-to-left layout ?
         if (getStyle(document.body,'direction')!='rtl') {
@@ -237,12 +240,28 @@
         DateTimeShortcuts.calendars[num].drawNextMonth();
     },
     handleCalendarCallback: function(num) {
-        return "function(y, m, d) { DateTimeShortcuts.calendarInputs["+num+"].value = y+'-'+(m<10?'0':'')+m+'-'+(d<10?'0':'')+d; document.getElementById(DateTimeShortcuts.calendarDivName1+"+num+").style.display='none';}";
+        format = get_format('DATE_INPUT_FORMATS')[0];
+        // the format needs to be escaped a little
+        format = format.replace('\\', '\\\\');
+        format = format.replace('\r', '\\r');
+        format = format.replace('\n', '\\n');
+        format = format.replace('\t', '\\t');
+        format = format.replace("'", "\\'");
+        return ["function(y, m, d) { DateTimeShortcuts.calendarInputs[",
+               num,
+               "].value = new Date(y, m-1, d).strftime('",
+               format,
+               "');DateTimeShortcuts.calendarInputs[",
+               num,
+               "].focus();document.getElementById(DateTimeShortcuts.calendarDivName1+",
+               num,
+               ").style.display='none';}"].join('');
     },
     handleCalendarQuickLink: function(num, offset) {
        var d = new Date();
        d.setDate(d.getDate() + offset)
-       DateTimeShortcuts.calendarInputs[num].value = d.getISODate();
+       DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]);
+       DateTimeShortcuts.calendarInputs[num].focus();
        DateTimeShortcuts.dismissCalendar(num);
     },
     cancelEventPropagation: function(e) {
--- a/web/lib/django/contrib/admin/media/js/calendar.js	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/js/calendar.js	Tue May 25 02:43:45 2010 +0200
@@ -25,6 +25,7 @@
 var CalendarNamespace = {
     monthsOfYear: gettext('January February March April May June July August September October November December').split(' '),
     daysOfWeek: gettext('S M T W T F S').split(' '),
+    firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')),
     isLeapYear: function(year) {
         return (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0));
     },
@@ -45,6 +46,12 @@
         return days;
     },
     draw: function(month, year, div_id, callback) { // month = 1-12, year = 1-9999
+        var today = new Date();
+        var todayDay = today.getDate();
+        var todayMonth = today.getMonth()+1;
+        var todayYear = today.getFullYear();
+        var todayClass = '';
+
         month = parseInt(month);
         year = parseInt(year);
         var calDiv = document.getElementById(div_id);
@@ -56,10 +63,10 @@
         // Draw days-of-week header
         var tableRow = quickElement('tr', tableBody);
         for (var i = 0; i < 7; i++) {
-            quickElement('th', tableRow, CalendarNamespace.daysOfWeek[i]);
+            quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]);
         }
 
-        var startingPos = new Date(year, month-1, 1).getDay();
+        var startingPos = new Date(year, month-1, 1 - CalendarNamespace.firstDayOfWeek).getDay();
         var days = CalendarNamespace.getDaysInMonth(month, year);
 
         // Draw blanks before first of month
@@ -75,7 +82,13 @@
             if (i%7 == 0 && currentDay != 1) {
                 tableRow = quickElement('tr', tableBody);
             }
-            var cell = quickElement('td', tableRow, '');
+            if ((currentDay==todayDay) && (month==todayMonth) && (year==todayYear)) {
+                todayClass='today';
+            } else {
+                todayClass='';
+            }
+            var cell = quickElement('td', tableRow, '', 'class', todayClass);
+
             quickElement('a', cell, currentDay, 'href', 'javascript:void(' + callback + '('+year+','+month+','+currentDay+'));');
             currentDay++;
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/collapse.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,27 @@
+(function($) {
+	$(document).ready(function() {
+		// Add anchor tag for Show/Hide link
+		$("fieldset.collapse").each(function(i, elem) {
+			// Don't hide if fields in this fieldset have errors
+			if ( $(elem).find("div.errors").length == 0 ) {
+				$(elem).addClass("collapsed");
+				$(elem).find("h2").first().append(' (<a id="fieldsetcollapser' +
+					i +'" class="collapse-toggle" href="#">' + gettext("Show") +
+					'</a>)');
+			}
+		});
+		// Add toggle to anchor tag
+		$("fieldset.collapse a.collapse-toggle").toggle(
+			function() { // Show
+				$(this).text(gettext("Hide"));
+				$(this).closest("fieldset").removeClass("collapsed");
+				return false;
+			},
+			function() { // Hide
+				$(this).text(gettext("Show"));
+				$(this).closest("fieldset").addClass("collapsed");
+				return false;
+			}
+		);
+	});
+})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/collapse.min.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,2 @@
+(function(a){a(document).ready(function(){a("fieldset.collapse").each(function(c,b){if(a(b).find("div.errors").length==0){a(b).addClass("collapsed");a(b).find("h2").first().append(' (<a id="fieldsetcollapser'+c+'" class="collapse-toggle" href="#">'+gettext("Show")+"</a>)")}});a("fieldset.collapse a.collapse-toggle").toggle(function(){a(this).text(gettext("Hide"));a(this).closest("fieldset").removeClass("collapsed");return false},function(){a(this).text(gettext("Show"));a(this).closest("fieldset").addClass("collapsed");
+return false})})})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/compress.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+import os
+import optparse
+import subprocess
+import sys
+
+here = os.path.dirname(__file__)
+
+def main():
+    usage = "usage: %prog [file1..fileN]"
+    description = """With no file paths given this script will automatically
+compress all jQuery-based files of the admin app. Requires the Google Closure
+Compiler library and Java version 6 or later."""
+    parser = optparse.OptionParser(usage, description=description)
+    parser.add_option("-c", dest="compiler", default="~/bin/compiler.jar",
+                      help="path to Closure Compiler jar file")
+    parser.add_option("-v", "--verbose",
+                      action="store_true", dest="verbose")
+    parser.add_option("-q", "--quiet",
+                      action="store_false", dest="verbose")
+    (options, args) = parser.parse_args()
+
+    compiler = os.path.expanduser(options.compiler)
+    if not os.path.exists(compiler):
+        sys.exit("Google Closure compiler jar file %s not found. Please use the -c option to specify the path." % compiler)
+
+    if not args:
+        if options.verbose:
+            sys.stdout.write("No filenames given; defaulting to admin scripts\n")
+        args = [os.path.join(here, f) for f in [
+            "actions.js", "collapse.js", "inlines.js", "prepopulate.js"]]
+
+    for arg in args:
+        if not arg.endswith(".js"):
+            arg = arg + ".js"
+        to_compress = os.path.expanduser(arg)
+        if os.path.exists(to_compress):
+            to_compress_min = "%s.min.js" % "".join(arg.rsplit(".js"))
+            cmd = "java -jar %s --js %s --js_output_file %s" % (compiler, to_compress, to_compress_min)
+            if options.verbose:
+                sys.stdout.write("Running: %s\n" % cmd)
+            subprocess.call(cmd.split())
+        else:
+            sys.stdout.write("File %s not found. Sure it exists?\n" % to_compress)
+
+if __name__ == '__main__':
+    main()
--- a/web/lib/django/contrib/admin/media/js/core.js	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/media/js/core.js	Tue May 25 02:43:45 2010 +0200
@@ -115,6 +115,10 @@
     return (y < 38) ? y + 2000 : y + 1900;
 }
 
+Date.prototype.getTwelveHours = function() {
+    return (this.getHours() <= 12) ? this.getHours() : 24 - this.getHours();
+}
+
 Date.prototype.getTwoDigitMonth = function() {
     return (this.getMonth() < 9) ? '0' + (this.getMonth()+1) : (this.getMonth()+1);
 }
@@ -123,6 +127,10 @@
     return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate();
 }
 
+Date.prototype.getTwoDigitTwelveHour = function() {
+    return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours();
+}
+
 Date.prototype.getTwoDigitHour = function() {
     return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours();
 }
@@ -147,6 +155,37 @@
     return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond();
 }
 
+Date.prototype.strftime = function(format) {
+    var fields = {
+        c: this.toString(),
+        d: this.getTwoDigitDate(),
+        H: this.getTwoDigitHour(),
+        I: this.getTwoDigitTwelveHour(),
+        m: this.getTwoDigitMonth(),
+        M: this.getTwoDigitMinute(),
+        p: (this.getHours() >= 12) ? 'PM' : 'AM',
+        S: this.getTwoDigitSecond(),
+        w: '0' + this.getDay(),
+        x: this.toLocaleDateString(),
+        X: this.toLocaleTimeString(),
+        y: ('' + this.getFullYear()).substr(2, 4),
+        Y: '' + this.getFullYear(),
+        '%' : '%'
+    };
+    var result = '', i = 0;
+    while (i < format.length) {
+        if (format.charAt(i) === '%') {
+            result = result + fields[format.charAt(i + 1)];
+            ++i;
+        }
+        else {
+            result = result + format.charAt(i);
+        }
+        ++i;
+    }
+    return result;
+}
+
 // ----------------------------------------------------------------------------
 // String object extensions
 // ----------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/inlines.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,148 @@
+/**
+ * Django admin inlines
+ *
+ * Based on jQuery Formset 1.1
+ * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com)
+ * @requires jQuery 1.2.6 or later
+ *
+ * Copyright (c) 2009, Stanislaus Madueke
+ * All rights reserved.
+ *
+ * Spiced up with Code from Zain Memon's GSoC project 2009
+ * and modified for Django by Jannis Leidel
+ *
+ * Licensed under the New BSD License
+ * See: http://www.opensource.org/licenses/bsd-license.php
+ */
+(function($) {
+	$.fn.formset = function(opts) {
+		var options = $.extend({}, $.fn.formset.defaults, opts);
+		var updateElementIndex = function(el, prefix, ndx) {
+			var id_regex = new RegExp("(" + prefix + "-\\d+)");
+			var replacement = prefix + "-" + ndx;
+			if ($(el).attr("for")) {
+				$(el).attr("for", $(el).attr("for").replace(id_regex, replacement));
+			}
+			if (el.id) {
+				el.id = el.id.replace(id_regex, replacement);
+			}
+			if (el.name) {
+				el.name = el.name.replace(id_regex, replacement);
+			}
+		};
+		var totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").attr("autocomplete", "off");
+		var maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").attr("autocomplete", "off");
+		// only show the add button if we are allowed to add more items,
+        // note that max_num = None translates to a blank string.
+		var showAddButton = maxForms.val() == '' || (maxForms.val()-totalForms.val()) > 0;
+		$(this).each(function(i) {
+			$(this).not("." + options.emptyCssClass).addClass(options.formCssClass);
+		});
+		if ($(this).length && showAddButton) {
+			var addButton;
+			if ($(this).attr("tagName") == "TR") {
+				// If forms are laid out as table rows, insert the
+				// "add" button in a new table row:
+				var numCols = this.eq(0).children().length;
+				$(this).parent().append('<tr class="' + options.addCssClass + '"><td colspan="' + numCols + '"><a href="javascript:void(0)">' + options.addText + "</a></tr>");
+				addButton = $(this).parent().find("tr:last a");
+			} else {
+				// Otherwise, insert it immediately after the last form:
+				$(this).filter(":last").after('<div class="' + options.addCssClass + '"><a href="javascript:void(0)">' + options.addText + "</a></div>");
+				addButton = $(this).filter(":last").next().find("a");
+			}
+			addButton.click(function() {
+				var totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS");
+				var nextIndex = parseInt(totalForms.val());
+				var template = $("#" + options.prefix + "-empty");
+				var row = template.clone(true);
+				row.removeClass(options.emptyCssClass)
+				    .addClass(options.formCssClass)
+				    .attr("id", options.prefix + "-" + nextIndex)
+				    .insertBefore($(template));
+				row.find("*")
+				    .filter(function() {
+				        var el = $(this);
+				        return el.attr("id") && el.attr("id").search(/__prefix__/) >= 0;
+				    }).each(function() {
+				        var el = $(this);
+				        el.attr("id", el.attr("id").replace(/__prefix__/g, nextIndex));
+				    })
+				    .end()
+				    .filter(function() {
+				        var el = $(this);
+				        return el.attr("name") && el.attr("name").search(/__prefix__/) >= 0;
+				    }).each(function() {
+				        var el = $(this);
+				        el.attr("name", el.attr("name").replace(/__prefix__/g, nextIndex));
+				    });
+				if (row.is("tr")) {
+					// If the forms are laid out in table rows, insert
+					// the remove button into the last table cell:
+					row.children(":last").append('<div><a class="' + options.deleteCssClass +'" href="javascript:void(0)">' + options.deleteText + "</a></div>");
+				} else if (row.is("ul") || row.is("ol")) {
+					// If they're laid out as an ordered/unordered list,
+					// insert an <li> after the last list item:
+					row.append('<li><a class="' + options.deleteCssClass +'" href="javascript:void(0)">' + options.deleteText + "</a></li>");
+				} else {
+					// Otherwise, just insert the remove button as the
+					// last child element of the form's container:
+					row.children(":first").append('<span><a class="' + options.deleteCssClass + '" href="javascript:void(0)">' + options.deleteText + "</a></span>");
+				}
+				row.find("input,select,textarea,label,a").each(function() {
+					updateElementIndex(this, options.prefix, totalForms.val());
+				});
+				// Update number of total forms
+				$(totalForms).val(nextIndex + 1);
+				// Hide add button in case we've hit the max, except we want to add infinitely
+				if ((maxForms.val() != '') && (maxForms.val() <= totalForms.val())) {
+					addButton.parent().hide();
+				}
+				// The delete button of each row triggers a bunch of other things
+				row.find("a." + options.deleteCssClass).click(function() {
+					// Remove the parent form containing this button:
+					var row = $(this).parents("." + options.formCssClass);
+					row.remove();
+					// If a post-delete callback was provided, call it with the deleted form:
+					if (options.removed) {
+						options.removed(row);
+					}
+					// Update the TOTAL_FORMS form count.
+					var forms = $("." + options.formCssClass);
+					$("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length);
+					// Show add button again once we drop below max
+					if ((maxForms.val() == '') || (maxForms.val() >= forms.length)) {
+						addButton.parent().show();
+					}
+					// Also, update names and ids for all remaining form controls
+					// so they remain in sequence:
+					for (var i=0, formCount=forms.length; i<formCount; i++)
+					{
+						$(forms.get(i)).find("input,select,textarea,label,a").each(function() {
+							updateElementIndex(this, options.prefix, i);
+						});
+					}
+					return false;
+				});
+				// If a post-add callback was supplied, call it with the added form:
+				if (options.added) {
+					options.added(row);
+				}
+				return false;
+			});
+		}
+		return this;
+	}
+	/* Setup plugin defaults */
+	$.fn.formset.defaults = {
+		prefix: "form",					// The form prefix for your django formset
+		addText: "add another",			// Text for the add link
+		deleteText: "remove",			// Text for the delete link
+		addCssClass: "add-row",			// CSS class applied to the add link
+		deleteCssClass: "delete-row",	// CSS class applied to the delete link
+		emptyCssClass: "empty-row",		// CSS class applied to the empty row
+		formCssClass: "dynamic-form",	// CSS class applied to each form in a formset
+		added: null,					// Function called each time a new form is added
+		removed: null					// Function called each time a form is deleted
+	}
+})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/inlines.min.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,6 @@
+(function(a){a.fn.formset=function(g){var b=a.extend({},a.fn.formset.defaults,g),l=function(e,f,j){var d=new RegExp("("+f+"-\\d+)");f=f+"-"+j;a(e).attr("for")&&a(e).attr("for",a(e).attr("for").replace(d,f));if(e.id)e.id=e.id.replace(d,f);if(e.name)e.name=e.name.replace(d,f)};g=a("#id_"+b.prefix+"-TOTAL_FORMS").attr("autocomplete","off");var h=a("#id_"+b.prefix+"-MAX_NUM_FORMS").attr("autocomplete","off");g=h.val()==""||h.val()-g.val()>0;a(this).each(function(){a(this).not("."+b.emptyCssClass).addClass(b.formCssClass)});
+if(a(this).length&&g){var i;if(a(this).attr("tagName")=="TR"){g=this.eq(0).children().length;a(this).parent().append('<tr class="'+b.addCssClass+'"><td colspan="'+g+'"><a href="javascript:void(0)">'+b.addText+"</a></tr>");i=a(this).parent().find("tr:last a")}else{a(this).filter(":last").after('<div class="'+b.addCssClass+'"><a href="javascript:void(0)">'+b.addText+"</a></div>");i=a(this).filter(":last").next().find("a")}i.click(function(){var e=a("#id_"+b.prefix+"-TOTAL_FORMS"),f=parseInt(e.val()),
+j=a("#"+b.prefix+"-empty"),d=j.clone(true);d.removeClass(b.emptyCssClass).addClass(b.formCssClass).attr("id",b.prefix+"-"+f).insertBefore(a(j));d.find("*").filter(function(){var c=a(this);return c.attr("id")&&c.attr("id").search(/__prefix__/)>=0}).each(function(){var c=a(this);c.attr("id",c.attr("id").replace(/__prefix__/g,f))}).end().filter(function(){var c=a(this);return c.attr("name")&&c.attr("name").search(/__prefix__/)>=0}).each(function(){var c=a(this);c.attr("name",c.attr("name").replace(/__prefix__/g,
+f))});if(d.is("tr"))d.children(":last").append('<div><a class="'+b.deleteCssClass+'" href="javascript:void(0)">'+b.deleteText+"</a></div>");else d.is("ul")||d.is("ol")?d.append('<li><a class="'+b.deleteCssClass+'" href="javascript:void(0)">'+b.deleteText+"</a></li>"):d.children(":first").append('<span><a class="'+b.deleteCssClass+'" href="javascript:void(0)">'+b.deleteText+"</a></span>");d.find("input,select,textarea,label,a").each(function(){l(this,b.prefix,e.val())});a(e).val(f+1);h.val()!=""&&
+h.val()<=e.val()&&i.parent().hide();d.find("a."+b.deleteCssClass).click(function(){var c=a(this).parents("."+b.formCssClass);c.remove();b.removed&&b.removed(c);c=a("."+b.formCssClass);a("#id_"+b.prefix+"-TOTAL_FORMS").val(c.length);if(h.val()==""||h.val()>=c.length)i.parent().show();for(var k=0,m=c.length;k<m;k++)a(c.get(k)).find("input,select,textarea,label,a").each(function(){l(this,b.prefix,k)});return false});b.added&&b.added(d);return false})}return this};a.fn.formset.defaults={prefix:"form",
+addText:"add another",deleteText:"remove",addCssClass:"add-row",deleteCssClass:"delete-row",emptyCssClass:"empty-row",formCssClass:"dynamic-form",added:null,removed:null}})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/jquery.init.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,4 @@
+// Puts the included jQuery into our own namespace
+var django = {
+    "jQuery": jQuery.noConflict(true)
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/jquery.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,6240 @@
+/*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+(function( window, undefined ) {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// A simple way to check for HTML strings or ID strings
+	// (both of which we optimize for)
+	quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,
+
+	// Is it a simple selector
+	isSimple = /^.[^:#\[\.,]*$/,
+
+	// Check if a string has a non-whitespace character in it
+	rnotwhite = /\S/,
+
+	// Used for trimming whitespace
+	rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+	// Keep a UserAgent string for use with jQuery.browser
+	userAgent = navigator.userAgent,
+
+	// For matching the engine and version of the browser
+	browserMatch,
+	
+	// Has the ready events already been bound?
+	readyBound = false,
+	
+	// The functions to execute on DOM ready
+	readyList = [],
+
+	// The ready event handler
+	DOMContentLoaded,
+
+	// Save a reference to some core methods
+	toString = Object.prototype.toString,
+	hasOwnProperty = Object.prototype.hasOwnProperty,
+	push = Array.prototype.push,
+	slice = Array.prototype.slice,
+	indexOf = Array.prototype.indexOf;
+
+jQuery.fn = jQuery.prototype = {
+	init: function( selector, context ) {
+		var match, elem, ret, doc;
+
+		// Handle $(""), $(null), or $(undefined)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle $(DOMElement)
+		if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+		}
+		
+		// The body element only exists once, optimize finding it
+		if ( selector === "body" && !context ) {
+			this.context = document;
+			this[0] = document.body;
+			this.selector = "body";
+			this.length = 1;
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			// Are we dealing with HTML string or an ID?
+			match = quickExpr.exec( selector );
+
+			// Verify a match, and that no context was specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					doc = (context ? context.ownerDocument || context : document);
+
+					// If a single string is passed in and it's a single tag
+					// just do a createElement and skip the rest
+					ret = rsingleTag.exec( selector );
+
+					if ( ret ) {
+						if ( jQuery.isPlainObject( context ) ) {
+							selector = [ document.createElement( ret[1] ) ];
+							jQuery.fn.attr.call( selector, context, true );
+
+						} else {
+							selector = [ doc.createElement( ret[1] ) ];
+						}
+
+					} else {
+						ret = buildFragment( [ match[1] ], [ doc ] );
+						selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
+					}
+					
+					return jQuery.merge( this, selector );
+					
+				// HANDLE: $("#id")
+				} else {
+					elem = document.getElementById( match[2] );
+
+					if ( elem ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $("TAG")
+			} else if ( !context && /^\w+$/.test( selector ) ) {
+				this.selector = selector;
+				this.context = document;
+				selector = document.getElementsByTagName( selector );
+				return jQuery.merge( this, selector );
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return (context || rootjQuery).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return jQuery( context ).find( selector );
+			}
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if (selector.selector !== undefined) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The current version of jQuery being used
+	jquery: "1.4.2",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return slice.call( this, 0 );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems, name, selector ) {
+		// Build a new jQuery matched element set
+		var ret = jQuery();
+
+		if ( jQuery.isArray( elems ) ) {
+			push.apply( ret, elems );
+		
+		} else {
+			jQuery.merge( ret, elems );
+		}
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		ret.context = this.context;
+
+		if ( name === "find" ) {
+			ret.selector = this.selector + (this.selector ? " " : "") + selector;
+		} else if ( name ) {
+			ret.selector = this.selector + "." + name + "(" + selector + ")";
+		}
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+	
+	ready: function( fn ) {
+		// Attach the listeners
+		jQuery.bindReady();
+
+		// If the DOM is already ready
+		if ( jQuery.isReady ) {
+			// Execute the function immediately
+			fn.call( document, jQuery );
+
+		// Otherwise, remember the function for later
+		} else if ( readyList ) {
+			// Add the function to the wait list
+			readyList.push( fn );
+		}
+
+		return this;
+	},
+	
+	eq: function( i ) {
+		return i === -1 ?
+			this.slice( i ) :
+			this.slice( i, +i + 1 );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ),
+			"slice", slice.call(arguments).join(",") );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+	
+	end: function() {
+		return this.prevObject || jQuery(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	// copy reference to target object
+	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging object literal values or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
+					var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
+						: jQuery.isArray(copy) ? [] : {};
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		window.$ = _$;
+
+		if ( deep ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+	
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+	
+	// Handle when the DOM is ready
+	ready: function() {
+		// Make sure that the DOM is not already loaded
+		if ( !jQuery.isReady ) {
+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+			if ( !document.body ) {
+				return setTimeout( jQuery.ready, 13 );
+			}
+
+			// Remember that the DOM is ready
+			jQuery.isReady = true;
+
+			// If there are functions bound, to execute
+			if ( readyList ) {
+				// Execute all of them
+				var fn, i = 0;
+				while ( (fn = readyList[ i++ ]) ) {
+					fn.call( document, jQuery );
+				}
+
+				// Reset the list of functions
+				readyList = null;
+			}
+
+			// Trigger any bound ready events
+			if ( jQuery.fn.triggerHandler ) {
+				jQuery( document ).triggerHandler( "ready" );
+			}
+		}
+	},
+	
+	bindReady: function() {
+		if ( readyBound ) {
+			return;
+		}
+
+		readyBound = true;
+
+		// Catch cases where $(document).ready() is called after the
+		// browser event has already occurred.
+		if ( document.readyState === "complete" ) {
+			return jQuery.ready();
+		}
+
+		// Mozilla, Opera and webkit nightlies currently support this event
+		if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+			
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", jQuery.ready, false );
+
+		// If IE event model is used
+		} else if ( document.attachEvent ) {
+			// ensure firing before onload,
+			// maybe late but safe also for iframes
+			document.attachEvent("onreadystatechange", DOMContentLoaded);
+			
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", jQuery.ready );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var toplevel = false;
+
+			try {
+				toplevel = window.frameElement == null;
+			} catch(e) {}
+
+			if ( document.documentElement.doScroll && toplevel ) {
+				doScrollCheck();
+			}
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return toString.call(obj) === "[object Function]";
+	},
+
+	isArray: function( obj ) {
+		return toString.call(obj) === "[object Array]";
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {
+			return false;
+		}
+		
+		// Not own constructor property must be Object
+		if ( obj.constructor
+			&& !hasOwnProperty.call(obj, "constructor")
+			&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
+			return false;
+		}
+		
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+	
+		var key;
+		for ( key in obj ) {}
+		
+		return key === undefined || hasOwnProperty.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		for ( var name in obj ) {
+			return false;
+		}
+		return true;
+	},
+	
+	error: function( msg ) {
+		throw msg;
+	},
+	
+	parseJSON: function( data ) {
+		if ( typeof data !== "string" || !data ) {
+			return null;
+		}
+
+		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+		data = jQuery.trim( data );
+		
+		// Make sure the incoming data is actual JSON
+		// Logic borrowed from http://json.org/json2.js
+		if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
+			.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
+			.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
+
+			// Try to use the native JSON parser first
+			return window.JSON && window.JSON.parse ?
+				window.JSON.parse( data ) :
+				(new Function("return " + data))();
+
+		} else {
+			jQuery.error( "Invalid JSON: " + data );
+		}
+	},
+
+	noop: function() {},
+
+	// Evalulates a script in a global context
+	globalEval: function( data ) {
+		if ( data && rnotwhite.test(data) ) {
+			// Inspired by code by Andrea Giammarchi
+			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+			var head = document.getElementsByTagName("head")[0] || document.documentElement,
+				script = document.createElement("script");
+
+			script.type = "text/javascript";
+
+			if ( jQuery.support.scriptEval ) {
+				script.appendChild( document.createTextNode( data ) );
+			} else {
+				script.text = data;
+			}
+
+			// Use insertBefore instead of appendChild to circumvent an IE6 bug.
+			// This arises when a base node is used (#2709).
+			head.insertBefore( script, head.firstChild );
+			head.removeChild( script );
+		}
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+	},
+
+	// args is for internal usage only
+	each: function( object, callback, args ) {
+		var name, i = 0,
+			length = object.length,
+			isObj = length === undefined || jQuery.isFunction(object);
+
+		if ( args ) {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.apply( object[ name ], args ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.apply( object[ i++ ], args ) === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( var value = object[0];
+					i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
+			}
+		}
+
+		return object;
+	},
+
+	trim: function( text ) {
+		return (text || "").replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( array, results ) {
+		var ret = results || [];
+
+		if ( array != null ) {
+			// The window, strings (and functions) also have 'length'
+			// The extra typeof function check is to prevent crashes
+			// in Safari 2 (See: #3039)
+			if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {
+				push.call( ret, array );
+			} else {
+				jQuery.merge( ret, array );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, array ) {
+		if ( array.indexOf ) {
+			return array.indexOf( elem );
+		}
+
+		for ( var i = 0, length = array.length; i < length; i++ ) {
+			if ( array[ i ] === elem ) {
+				return i;
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var i = first.length, j = 0;
+
+		if ( typeof second.length === "number" ) {
+			for ( var l = second.length; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+		
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var ret = [];
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			if ( !inv !== !callback( elems[ i ], i ) ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var ret = [], value;
+
+		// Go through the array, translating each of the items to their
+		// new value (or values).
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			value = callback( elems[ i ], i, arg );
+
+			if ( value != null ) {
+				ret[ ret.length ] = value;
+			}
+		}
+
+		return ret.concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	proxy: function( fn, proxy, thisObject ) {
+		if ( arguments.length === 2 ) {
+			if ( typeof proxy === "string" ) {
+				thisObject = fn;
+				fn = thisObject[ proxy ];
+				proxy = undefined;
+
+			} else if ( proxy && !jQuery.isFunction( proxy ) ) {
+				thisObject = proxy;
+				proxy = undefined;
+			}
+		}
+
+		if ( !proxy && fn ) {
+			proxy = function() {
+				return fn.apply( thisObject || this, arguments );
+			};
+		}
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		if ( fn ) {
+			proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+		}
+
+		// So proxy can be declared as an argument
+		return proxy;
+	},
+
+	// Use of jQuery.browser is frowned upon.
+	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+	uaMatch: function( ua ) {
+		ua = ua.toLowerCase();
+
+		var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+			/(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||
+			/(msie) ([\w.]+)/.exec( ua ) ||
+			!/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) ||
+		  	[];
+
+		return { browser: match[1] || "", version: match[2] || "0" };
+	},
+
+	browser: {}
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+	jQuery.browser[ browserMatch.browser ] = true;
+	jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+	jQuery.browser.safari = true;
+}
+
+if ( indexOf ) {
+	jQuery.inArray = function( elem, array ) {
+		return indexOf.call( array, elem );
+	};
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+	DOMContentLoaded = function() {
+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+		jQuery.ready();
+	};
+
+} else if ( document.attachEvent ) {
+	DOMContentLoaded = function() {
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( document.readyState === "complete" ) {
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	};
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+	if ( jQuery.isReady ) {
+		return;
+	}
+
+	try {
+		// If IE is used, use the trick by Diego Perini
+		// http://javascript.nwbox.com/IEContentLoaded/
+		document.documentElement.doScroll("left");
+	} catch( error ) {
+		setTimeout( doScrollCheck, 1 );
+		return;
+	}
+
+	// and execute any waiting functions
+	jQuery.ready();
+}
+
+function evalScript( i, elem ) {
+	if ( elem.src ) {
+		jQuery.ajax({
+			url: elem.src,
+			async: false,
+			dataType: "script"
+		});
+	} else {
+		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+	}
+
+	if ( elem.parentNode ) {
+		elem.parentNode.removeChild( elem );
+	}
+}
+
+// Mutifunctional method to get and set values to a collection
+// The value/s can be optionally by executed if its a function
+function access( elems, key, value, exec, fn, pass ) {
+	var length = elems.length;
+	
+	// Setting many attributes
+	if ( typeof key === "object" ) {
+		for ( var k in key ) {
+			access( elems, k, key[k], exec, fn, value );
+		}
+		return elems;
+	}
+	
+	// Setting one attribute
+	if ( value !== undefined ) {
+		// Optionally, function values get executed if exec is true
+		exec = !pass && exec && jQuery.isFunction(value);
+		
+		for ( var i = 0; i < length; i++ ) {
+			fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+		}
+		
+		return elems;
+	}
+	
+	// Getting an attribute
+	return length ? fn( elems[0], key ) : undefined;
+}
+
+function now() {
+	return (new Date).getTime();
+}
+(function() {
+
+	jQuery.support = {};
+
+	var root = document.documentElement,
+		script = document.createElement("script"),
+		div = document.createElement("div"),
+		id = "script" + now();
+
+	div.style.display = "none";
+	div.innerHTML = "   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+	var all = div.getElementsByTagName("*"),
+		a = div.getElementsByTagName("a")[0];
+
+	// Can't get basic test support
+	if ( !all || !all.length || !a ) {
+		return;
+	}
+
+	jQuery.support = {
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: div.firstChild.nodeType === 3,
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText insted)
+		style: /red/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: a.getAttribute("href") === "/a",
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.55$/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Make sure that if no value is specified for a checkbox
+		// that it defaults to "on".
+		// (WebKit defaults to "" instead)
+		checkOn: div.getElementsByTagName("input")[0].value === "on",
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,
+
+		parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
+
+		// Will be defined later
+		deleteExpando: true,
+		checkClone: false,
+		scriptEval: false,
+		noCloneEvent: true,
+		boxModel: null
+	};
+
+	script.type = "text/javascript";
+	try {
+		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
+	} catch(e) {}
+
+	root.insertBefore( script, root.firstChild );
+
+	// Make sure that the execution of code works by injecting a script
+	// tag with appendChild/createTextNode
+	// (IE doesn't support this, fails, and uses .text instead)
+	if ( window[ id ] ) {
+		jQuery.support.scriptEval = true;
+		delete window[ id ];
+	}
+
+	// Test to see if it's possible to delete an expando from an element
+	// Fails in Internet Explorer
+	try {
+		delete script.test;
+	
+	} catch(e) {
+		jQuery.support.deleteExpando = false;
+	}
+
+	root.removeChild( script );
+
+	if ( div.attachEvent && div.fireEvent ) {
+		div.attachEvent("onclick", function click() {
+			// Cloning a node shouldn't copy over any
+			// bound event handlers (IE does this)
+			jQuery.support.noCloneEvent = false;
+			div.detachEvent("onclick", click);
+		});
+		div.cloneNode(true).fireEvent("onclick");
+	}
+
+	div = document.createElement("div");
+	div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
+
+	var fragment = document.createDocumentFragment();
+	fragment.appendChild( div.firstChild );
+
+	// WebKit doesn't clone checked state correctly in fragments
+	jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
+
+	// Figure out if the W3C box model works as expected
+	// document.body must exist before we can do this
+	jQuery(function() {
+		var div = document.createElement("div");
+		div.style.width = div.style.paddingLeft = "1px";
+
+		document.body.appendChild( div );
+		jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
+		document.body.removeChild( div ).style.display = 'none';
+
+		div = null;
+	});
+
+	// Technique from Juriy Zaytsev
+	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+	var eventSupported = function( eventName ) { 
+		var el = document.createElement("div"); 
+		eventName = "on" + eventName; 
+
+		var isSupported = (eventName in el); 
+		if ( !isSupported ) { 
+			el.setAttribute(eventName, "return;"); 
+			isSupported = typeof el[eventName] === "function"; 
+		} 
+		el = null; 
+
+		return isSupported; 
+	};
+	
+	jQuery.support.submitBubbles = eventSupported("submit");
+	jQuery.support.changeBubbles = eventSupported("change");
+
+	// release memory in IE
+	root = script = div = all = a = null;
+})();
+
+jQuery.props = {
+	"for": "htmlFor",
+	"class": "className",
+	readonly: "readOnly",
+	maxlength: "maxLength",
+	cellspacing: "cellSpacing",
+	rowspan: "rowSpan",
+	colspan: "colSpan",
+	tabindex: "tabIndex",
+	usemap: "useMap",
+	frameborder: "frameBorder"
+};
+var expando = "jQuery" + now(), uuid = 0, windowData = {};
+
+jQuery.extend({
+	cache: {},
+	
+	expando:expando,
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		"object": true,
+		"applet": true
+	},
+
+	data: function( elem, name, data ) {
+		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+			return;
+		}
+
+		elem = elem == window ?
+			windowData :
+			elem;
+
+		var id = elem[ expando ], cache = jQuery.cache, thisCache;
+
+		if ( !id && typeof name === "string" && data === undefined ) {
+			return null;
+		}
+
+		// Compute a unique ID for the element
+		if ( !id ) { 
+			id = ++uuid;
+		}
+
+		// Avoid generating a new cache unless none exists and we
+		// want to manipulate it.
+		if ( typeof name === "object" ) {
+			elem[ expando ] = id;
+			thisCache = cache[ id ] = jQuery.extend(true, {}, name);
+
+		} else if ( !cache[ id ] ) {
+			elem[ expando ] = id;
+			cache[ id ] = {};
+		}
+
+		thisCache = cache[ id ];
+
+		// Prevent overriding the named cache with undefined values
+		if ( data !== undefined ) {
+			thisCache[ name ] = data;
+		}
+
+		return typeof name === "string" ? thisCache[ name ] : thisCache;
+	},
+
+	removeData: function( elem, name ) {
+		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+			return;
+		}
+
+		elem = elem == window ?
+			windowData :
+			elem;
+
+		var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
+
+		// If we want to remove a specific section of the element's data
+		if ( name ) {
+			if ( thisCache ) {
+				// Remove the section of cache data
+				delete thisCache[ name ];
+
+				// If we've removed all the data, remove the element's cache
+				if ( jQuery.isEmptyObject(thisCache) ) {
+					jQuery.removeData( elem );
+				}
+			}
+
+		// Otherwise, we want to remove all of the element's data
+		} else {
+			if ( jQuery.support.deleteExpando ) {
+				delete elem[ jQuery.expando ];
+
+			} else if ( elem.removeAttribute ) {
+				elem.removeAttribute( jQuery.expando );
+			}
+
+			// Completely remove the data cache
+			delete cache[ id ];
+		}
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		if ( typeof key === "undefined" && this.length ) {
+			return jQuery.data( this[0] );
+
+		} else if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		var parts = key.split(".");
+		parts[1] = parts[1] ? "." + parts[1] : "";
+
+		if ( value === undefined ) {
+			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+			if ( data === undefined && this.length ) {
+				data = jQuery.data( this[0], key );
+			}
+			return data === undefined && parts[1] ?
+				this.data( parts[0] ) :
+				data;
+		} else {
+			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {
+				jQuery.data( this, key, value );
+			});
+		}
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		if ( !elem ) {
+			return;
+		}
+
+		type = (type || "fx") + "queue";
+		var q = jQuery.data( elem, type );
+
+		// Speed up dequeue by getting out quickly if this is just a lookup
+		if ( !data ) {
+			return q || [];
+		}
+
+		if ( !q || jQuery.isArray(data) ) {
+			q = jQuery.data( elem, type, jQuery.makeArray(data) );
+
+		} else {
+			q.push( data );
+		}
+
+		return q;
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ), fn = queue.shift();
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+		}
+
+		if ( fn ) {
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift("inprogress");
+			}
+
+			fn.call(elem, function() {
+				jQuery.dequeue(elem, type);
+			});
+		}
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+		}
+
+		if ( data === undefined ) {
+			return jQuery.queue( this[0], type );
+		}
+		return this.each(function( i, elem ) {
+			var queue = jQuery.queue( this, type, data );
+
+			if ( type === "fx" && queue[0] !== "inprogress" ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function() {
+			var elem = this;
+			setTimeout(function() {
+				jQuery.dequeue( elem, type );
+			}, time );
+		});
+	},
+
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	}
+});
+var rclass = /[\n\t]/g,
+	rspace = /\s+/,
+	rreturn = /\r/g,
+	rspecialurl = /href|src|style/,
+	rtype = /(button|input)/i,
+	rfocusable = /(button|input|object|select|textarea)/i,
+	rclickable = /^(a|area)$/i,
+	rradiocheck = /radio|checkbox/;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return access( this, name, value, true, jQuery.attr );
+	},
+
+	removeAttr: function( name, fn ) {
+		return this.each(function(){
+			jQuery.attr( this, name, "" );
+			if ( this.nodeType === 1 ) {
+				this.removeAttribute( name );
+			}
+		});
+	},
+
+	addClass: function( value ) {
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.addClass( value.call(this, i, self.attr("class")) );
+			});
+		}
+
+		if ( value && typeof value === "string" ) {
+			var classNames = (value || "").split( rspace );
+
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var elem = this[i];
+
+				if ( elem.nodeType === 1 ) {
+					if ( !elem.className ) {
+						elem.className = value;
+
+					} else {
+						var className = " " + elem.className + " ", setClass = elem.className;
+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
+								setClass += " " + classNames[c];
+							}
+						}
+						elem.className = jQuery.trim( setClass );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.removeClass( value.call(this, i, self.attr("class")) );
+			});
+		}
+
+		if ( (value && typeof value === "string") || value === undefined ) {
+			var classNames = (value || "").split(rspace);
+
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var elem = this[i];
+
+				if ( elem.nodeType === 1 && elem.className ) {
+					if ( value ) {
+						var className = (" " + elem.className + " ").replace(rclass, " ");
+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+							className = className.replace(" " + classNames[c] + " ", " ");
+						}
+						elem.className = jQuery.trim( className );
+
+					} else {
+						elem.className = "";
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value, isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className, i = 0, self = jQuery(this),
+					state = stateVal,
+					classNames = value.split( rspace );
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space seperated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			} else if ( type === "undefined" || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery.data( this, "__className__", this.className );
+				}
+
+				// toggle whole className
+				this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ";
+		for ( var i = 0, l = this.length; i < l; i++ ) {
+			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		if ( value === undefined ) {
+			var elem = this[0];
+
+			if ( elem ) {
+				if ( jQuery.nodeName( elem, "option" ) ) {
+					return (elem.attributes.value || {}).specified ? elem.value : elem.text;
+				}
+
+				// We need to handle select boxes special
+				if ( jQuery.nodeName( elem, "select" ) ) {
+					var index = elem.selectedIndex,
+						values = [],
+						options = elem.options,
+						one = elem.type === "select-one";
+
+					// Nothing was selected
+					if ( index < 0 ) {
+						return null;
+					}
+
+					// Loop through all the selected options
+					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+						var option = options[ i ];
+
+						if ( option.selected ) {
+							// Get the specifc value for the option
+							value = jQuery(option).val();
+
+							// We don't need an array for one selects
+							if ( one ) {
+								return value;
+							}
+
+							// Multi-Selects return an array
+							values.push( value );
+						}
+					}
+
+					return values;
+				}
+
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
+					return elem.getAttribute("value") === null ? "on" : elem.value;
+				}
+				
+
+				// Everything else, we just grab the value
+				return (elem.value || "").replace(rreturn, "");
+
+			}
+
+			return undefined;
+		}
+
+		var isFunction = jQuery.isFunction(value);
+
+		return this.each(function(i) {
+			var self = jQuery(this), val = value;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call(this, i, self.val());
+			}
+
+			// Typecast each time if the value is a Function and the appended
+			// value is therefore different each time.
+			if ( typeof val === "number" ) {
+				val += "";
+			}
+
+			if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
+				this.checked = jQuery.inArray( self.val(), val ) >= 0;
+
+			} else if ( jQuery.nodeName( this, "select" ) ) {
+				var values = jQuery.makeArray(val);
+
+				jQuery( "option", this ).each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					this.selectedIndex = -1;
+				}
+
+			} else {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	attrFn: {
+		val: true,
+		css: true,
+		html: true,
+		text: true,
+		data: true,
+		width: true,
+		height: true,
+		offset: true
+	},
+		
+	attr: function( elem, name, value, pass ) {
+		// don't set attributes on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return undefined;
+		}
+
+		if ( pass && name in jQuery.attrFn ) {
+			return jQuery(elem)[name](value);
+		}
+
+		var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
+			// Whether we are setting (or getting)
+			set = value !== undefined;
+
+		// Try to normalize/fix the name
+		name = notxml && jQuery.props[ name ] || name;
+
+		// Only do all the following if this is a node (faster for style)
+		if ( elem.nodeType === 1 ) {
+			// These attributes require special treatment
+			var special = rspecialurl.test( name );
+
+			// Safari mis-reports the default selected property of an option
+			// Accessing the parent's selectedIndex property fixes it
+			if ( name === "selected" && !jQuery.support.optSelected ) {
+				var parent = elem.parentNode;
+				if ( parent ) {
+					parent.selectedIndex;
+	
+					// Make sure that it also works with optgroups, see #5701
+					if ( parent.parentNode ) {
+						parent.parentNode.selectedIndex;
+					}
+				}
+			}
+
+			// If applicable, access the attribute via the DOM 0 way
+			if ( name in elem && notxml && !special ) {
+				if ( set ) {
+					// We can't allow the type property to be changed (since it causes problems in IE)
+					if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
+						jQuery.error( "type property can't be changed" );
+					}
+
+					elem[ name ] = value;
+				}
+
+				// browsers index elements by id/name on forms, give priority to attributes.
+				if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
+					return elem.getAttributeNode( name ).nodeValue;
+				}
+
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				if ( name === "tabIndex" ) {
+					var attributeNode = elem.getAttributeNode( "tabIndex" );
+
+					return attributeNode && attributeNode.specified ?
+						attributeNode.value :
+						rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+							0 :
+							undefined;
+				}
+
+				return elem[ name ];
+			}
+
+			if ( !jQuery.support.style && notxml && name === "style" ) {
+				if ( set ) {
+					elem.style.cssText = "" + value;
+				}
+
+				return elem.style.cssText;
+			}
+
+			if ( set ) {
+				// convert the value to a string (all browsers do this but IE) see #1070
+				elem.setAttribute( name, "" + value );
+			}
+
+			var attr = !jQuery.support.hrefNormalized && notxml && special ?
+					// Some attributes require a special call on IE
+					elem.getAttribute( name, 2 ) :
+					elem.getAttribute( name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return attr === null ? undefined : attr;
+		}
+
+		// elem is actually elem.style ... set the style
+		// Using attr for specific style information is now deprecated. Use style instead.
+		return jQuery.style( elem, name, value );
+	}
+});
+var rnamespaces = /\.(.*)$/,
+	fcleanup = function( nm ) {
+		return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {
+			return "\\" + ch;
+		});
+	};
+
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code originated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+	// Bind an event to an element
+	// Original by Dean Edwards
+	add: function( elem, types, handler, data ) {
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// For whatever reason, IE has trouble passing the window object
+		// around, causing it to be cloned in the process
+		if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {
+			elem = window;
+		}
+
+		var handleObjIn, handleObj;
+
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+		}
+
+		// Make sure that the function being executed has a unique ID
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure
+		var elemData = jQuery.data( elem );
+
+		// If no elemData is found then we must be trying to bind to one of the
+		// banned noData elements
+		if ( !elemData ) {
+			return;
+		}
+
+		var events = elemData.events = elemData.events || {},
+			eventHandle = elemData.handle, eventHandle;
+
+		if ( !eventHandle ) {
+			elemData.handle = eventHandle = function() {
+				// Handle the second event of a trigger and when
+				// an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
+					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+		}
+
+		// Add elem as a property of the handle function
+		// This is to prevent a memory leak with non-native events in IE.
+		eventHandle.elem = elem;
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = types.split(" ");
+
+		var type, i = 0, namespaces;
+
+		while ( (type = types[ i++ ]) ) {
+			handleObj = handleObjIn ?
+				jQuery.extend({}, handleObjIn) :
+				{ handler: handler, data: data };
+
+			// Namespaced event handlers
+			if ( type.indexOf(".") > -1 ) {
+				namespaces = type.split(".");
+				type = namespaces.shift();
+				handleObj.namespace = namespaces.slice(0).sort().join(".");
+
+			} else {
+				namespaces = [];
+				handleObj.namespace = "";
+			}
+
+			handleObj.type = type;
+			handleObj.guid = handler.guid;
+
+			// Get the current list of functions bound to this event
+			var handlers = events[ type ],
+				special = jQuery.event.special[ type ] || {};
+
+			// Init the event handler queue
+			if ( !handlers ) {
+				handlers = events[ type ] = [];
+
+				// Check for a special event handler
+				// Only use addEventListener/attachEvent if the special
+				// events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+			
+			if ( special.add ) { 
+				special.add.call( elem, handleObj ); 
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add the function to the element's handler list
+			handlers.push( handleObj );
+
+			// Keep track of which events have been used, for global triggering
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	global: {},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, pos ) {
+		// don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+			elemData = jQuery.data( elem ),
+			events = elemData && elemData.events;
+
+		if ( !elemData || !events ) {
+			return;
+		}
+
+		// types is actually an event object here
+		if ( types && types.type ) {
+			handler = types.handler;
+			types = types.type;
+		}
+
+		// Unbind all events for the element
+		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+			types = types || "";
+
+			for ( type in events ) {
+				jQuery.event.remove( elem, type + types );
+			}
+
+			return;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).unbind("mouseover mouseout", fn);
+		types = types.split(" ");
+
+		while ( (type = types[ i++ ]) ) {
+			origType = type;
+			handleObj = null;
+			all = type.indexOf(".") < 0;
+			namespaces = [];
+
+			if ( !all ) {
+				// Namespaced event handlers
+				namespaces = type.split(".");
+				type = namespaces.shift();
+
+				namespace = new RegExp("(^|\\.)" + 
+					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)")
+			}
+
+			eventType = events[ type ];
+
+			if ( !eventType ) {
+				continue;
+			}
+
+			if ( !handler ) {
+				for ( var j = 0; j < eventType.length; j++ ) {
+					handleObj = eventType[ j ];
+
+					if ( all || namespace.test( handleObj.namespace ) ) {
+						jQuery.event.remove( elem, origType, handleObj.handler, j );
+						eventType.splice( j--, 1 );
+					}
+				}
+
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+
+			for ( var j = pos || 0; j < eventType.length; j++ ) {
+				handleObj = eventType[ j ];
+
+				if ( handler.guid === handleObj.guid ) {
+					// remove the given handler for the given type
+					if ( all || namespace.test( handleObj.namespace ) ) {
+						if ( pos == null ) {
+							eventType.splice( j--, 1 );
+						}
+
+						if ( special.remove ) {
+							special.remove.call( elem, handleObj );
+						}
+					}
+
+					if ( pos != null ) {
+						break;
+					}
+				}
+			}
+
+			// remove generic event handler if no more handlers exist
+			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+					removeEvent( elem, type, elemData.handle );
+				}
+
+				ret = null;
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			var handle = elemData.handle;
+			if ( handle ) {
+				handle.elem = null;
+			}
+
+			delete elemData.events;
+			delete elemData.handle;
+
+			if ( jQuery.isEmptyObject( elemData ) ) {
+				jQuery.removeData( elem );
+			}
+		}
+	},
+
+	// bubbling is internal
+	trigger: function( event, data, elem /*, bubbling */ ) {
+		// Event object or event type
+		var type = event.type || event,
+			bubbling = arguments[3];
+
+		if ( !bubbling ) {
+			event = typeof event === "object" ?
+				// jQuery.Event object
+				event[expando] ? event :
+				// Object literal
+				jQuery.extend( jQuery.Event(type), event ) :
+				// Just the event type (string)
+				jQuery.Event(type);
+
+			if ( type.indexOf("!") >= 0 ) {
+				event.type = type = type.slice(0, -1);
+				event.exclusive = true;
+			}
+
+			// Handle a global trigger
+			if ( !elem ) {
+				// Don't bubble custom events when global (to avoid too much overhead)
+				event.stopPropagation();
+
+				// Only trigger if we've ever bound an event for it
+				if ( jQuery.event.global[ type ] ) {
+					jQuery.each( jQuery.cache, function() {
+						if ( this.events && this.events[type] ) {
+							jQuery.event.trigger( event, data, this.handle.elem );
+						}
+					});
+				}
+			}
+
+			// Handle triggering a single element
+
+			// don't do events on text and comment nodes
+			if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+				return undefined;
+			}
+
+			// Clean up in case it is reused
+			event.result = undefined;
+			event.target = elem;
+
+			// Clone the incoming data, if any
+			data = jQuery.makeArray( data );
+			data.unshift( event );
+		}
+
+		event.currentTarget = elem;
+
+		// Trigger the event, it is assumed that "handle" is a function
+		var handle = jQuery.data( elem, "handle" );
+		if ( handle ) {
+			handle.apply( elem, data );
+		}
+
+		var parent = elem.parentNode || elem.ownerDocument;
+
+		// Trigger an inline bound script
+		try {
+			if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
+				if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
+					event.result = false;
+				}
+			}
+
+		// prevent IE from throwing an error for some elements with some event types, see #3533
+		} catch (e) {}
+
+		if ( !event.isPropagationStopped() && parent ) {
+			jQuery.event.trigger( event, data, parent, true );
+
+		} else if ( !event.isDefaultPrevented() ) {
+			var target = event.target, old,
+				isClick = jQuery.nodeName(target, "a") && type === "click",
+				special = jQuery.event.special[ type ] || {};
+
+			if ( (!special._default || special._default.call( elem, event ) === false) && 
+				!isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
+
+				try {
+					if ( target[ type ] ) {
+						// Make sure that we don't accidentally re-trigger the onFOO events
+						old = target[ "on" + type ];
+
+						if ( old ) {
+							target[ "on" + type ] = null;
+						}
+
+						jQuery.event.triggered = true;
+						target[ type ]();
+					}
+
+				// prevent IE from throwing an error for some elements with some event types, see #3533
+				} catch (e) {}
+
+				if ( old ) {
+					target[ "on" + type ] = old;
+				}
+
+				jQuery.event.triggered = false;
+			}
+		}
+	},
+
+	handle: function( event ) {
+		var all, handlers, namespaces, namespace, events;
+
+		event = arguments[0] = jQuery.event.fix( event || window.event );
+		event.currentTarget = this;
+
+		// Namespaced event handlers
+		all = event.type.indexOf(".") < 0 && !event.exclusive;
+
+		if ( !all ) {
+			namespaces = event.type.split(".");
+			event.type = namespaces.shift();
+			namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
+		}
+
+		var events = jQuery.data(this, "events"), handlers = events[ event.type ];
+
+		if ( events && handlers ) {
+			// Clone the handlers to prevent manipulation
+			handlers = handlers.slice(0);
+
+			for ( var j = 0, l = handlers.length; j < l; j++ ) {
+				var handleObj = handlers[ j ];
+
+				// Filter the functions by class
+				if ( all || namespace.test( handleObj.namespace ) ) {
+					// Pass in a reference to the handler function itself
+					// So that we can later remove it
+					event.handler = handleObj.handler;
+					event.data = handleObj.data;
+					event.handleObj = handleObj;
+	
+					var ret = handleObj.handler.apply( this, arguments );
+
+					if ( ret !== undefined ) {
+						event.result = ret;
+						if ( ret === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+
+					if ( event.isImmediatePropagationStopped() ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+
+	fix: function( event ) {
+		if ( event[ expando ] ) {
+			return event;
+		}
+
+		// store a copy of the original event object
+		// and "clone" to set read-only properties
+		var originalEvent = event;
+		event = jQuery.Event( originalEvent );
+
+		for ( var i = this.props.length, prop; i; ) {
+			prop = this.props[ --i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Fix target property, if necessary
+		if ( !event.target ) {
+			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
+		}
+
+		// check if target is a textnode (safari)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Add relatedTarget, if necessary
+		if ( !event.relatedTarget && event.fromElement ) {
+			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+		}
+
+		// Calculate pageX/Y if missing and clientX/Y available
+		if ( event.pageX == null && event.clientX != null ) {
+			var doc = document.documentElement, body = document.body;
+			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
+		}
+
+		// Add which for key events
+		if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
+			event.which = event.charCode || event.keyCode;
+		}
+
+		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+		if ( !event.metaKey && event.ctrlKey ) {
+			event.metaKey = event.ctrlKey;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		// Note: button is not normalized, so don't use it
+		if ( !event.which && event.button !== undefined ) {
+			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+		}
+
+		return event;
+	},
+
+	// Deprecated, use jQuery.guid instead
+	guid: 1E8,
+
+	// Deprecated, use jQuery.proxy instead
+	proxy: jQuery.proxy,
+
+	special: {
+		ready: {
+			// Make sure the ready event is setup
+			setup: jQuery.bindReady,
+			teardown: jQuery.noop
+		},
+
+		live: {
+			add: function( handleObj ) {
+				jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) ); 
+			},
+
+			remove: function( handleObj ) {
+				var remove = true,
+					type = handleObj.origType.replace(rnamespaces, "");
+				
+				jQuery.each( jQuery.data(this, "events").live || [], function() {
+					if ( type === this.origType.replace(rnamespaces, "") ) {
+						remove = false;
+						return false;
+					}
+				});
+
+				if ( remove ) {
+					jQuery.event.remove( this, handleObj.origType, liveHandler );
+				}
+			}
+
+		},
+
+		beforeunload: {
+			setup: function( data, namespaces, eventHandle ) {
+				// We only want to do this special case on windows
+				if ( this.setInterval ) {
+					this.onbeforeunload = eventHandle;
+				}
+
+				return false;
+			},
+			teardown: function( namespaces, eventHandle ) {
+				if ( this.onbeforeunload === eventHandle ) {
+					this.onbeforeunload = null;
+				}
+			}
+		}
+	}
+};
+
+var removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		elem.removeEventListener( type, handle, false );
+	} : 
+	function( elem, type, handle ) {
+		elem.detachEvent( "on" + type, handle );
+	};
+
+jQuery.Event = function( src ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !this.preventDefault ) {
+		return new jQuery.Event( src );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// timeStamp is buggy for some events on Firefox(#3843)
+	// So we won't rely on the native value
+	this.timeStamp = now();
+
+	// Mark it as fixed
+	this[ expando ] = true;
+};
+
+function returnFalse() {
+	return false;
+}
+function returnTrue() {
+	return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	preventDefault: function() {
+		this.isDefaultPrevented = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		
+		// if preventDefault exists run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+		}
+		// otherwise set the returnValue property of the original event to false (IE)
+		e.returnValue = false;
+	},
+	stopPropagation: function() {
+		this.isPropagationStopped = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		// if stopPropagation exists run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+		// otherwise set the cancelBubble property of the original event to true (IE)
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	},
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse
+};
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function( event ) {
+	// Check if mouse(over|out) are still within the same parent element
+	var parent = event.relatedTarget;
+
+	// Firefox sometimes assigns relatedTarget a XUL element
+	// which we cannot access the parentNode property of
+	try {
+		// Traverse up the tree
+		while ( parent && parent !== this ) {
+			parent = parent.parentNode;
+		}
+
+		if ( parent !== this ) {
+			// set the correct event type
+			event.type = event.data;
+
+			// handle event if we actually just moused on to a non sub-element
+			jQuery.event.handle.apply( this, arguments );
+		}
+
+	// assuming we've left the element since we most likely mousedover a xul element
+	} catch(e) { }
+},
+
+// In case of event delegation, we only need to rename the event.type,
+// liveHandler will take care of the rest.
+delegate = function( event ) {
+	event.type = event.data;
+	jQuery.event.handle.apply( this, arguments );
+};
+
+// Create mouseenter and mouseleave events
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		setup: function( data ) {
+			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+		},
+		teardown: function( data ) {
+			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+		}
+	};
+});
+
+// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function( data, namespaces ) {
+			if ( this.nodeName.toLowerCase() !== "form" ) {
+				jQuery.event.add(this, "click.specialSubmit", function( e ) {
+					var elem = e.target, type = elem.type;
+
+					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+						return trigger( "submit", this, arguments );
+					}
+				});
+	 
+				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+					var elem = e.target, type = elem.type;
+
+					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+						return trigger( "submit", this, arguments );
+					}
+				});
+
+			} else {
+				return false;
+			}
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialSubmit" );
+		}
+	};
+
+}
+
+// change delegation, happens here so we have bind.
+if ( !jQuery.support.changeBubbles ) {
+
+	var formElems = /textarea|input|select/i,
+
+	changeFilters,
+
+	getVal = function( elem ) {
+		var type = elem.type, val = elem.value;
+
+		if ( type === "radio" || type === "checkbox" ) {
+			val = elem.checked;
+
+		} else if ( type === "select-multiple" ) {
+			val = elem.selectedIndex > -1 ?
+				jQuery.map( elem.options, function( elem ) {
+					return elem.selected;
+				}).join("-") :
+				"";
+
+		} else if ( elem.nodeName.toLowerCase() === "select" ) {
+			val = elem.selectedIndex;
+		}
+
+		return val;
+	},
+
+	testChange = function testChange( e ) {
+		var elem = e.target, data, val;
+
+		if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
+			return;
+		}
+
+		data = jQuery.data( elem, "_change_data" );
+		val = getVal(elem);
+
+		// the current data will be also retrieved by beforeactivate
+		if ( e.type !== "focusout" || elem.type !== "radio" ) {
+			jQuery.data( elem, "_change_data", val );
+		}
+		
+		if ( data === undefined || val === data ) {
+			return;
+		}
+
+		if ( data != null || val ) {
+			e.type = "change";
+			return jQuery.event.trigger( e, arguments[1], elem );
+		}
+	};
+
+	jQuery.event.special.change = {
+		filters: {
+			focusout: testChange, 
+
+			click: function( e ) {
+				var elem = e.target, type = elem.type;
+
+				if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
+					return testChange.call( this, e );
+				}
+			},
+
+			// Change has to be called before submit
+			// Keydown will be called before keypress, which is used in submit-event delegation
+			keydown: function( e ) {
+				var elem = e.target, type = elem.type;
+
+				if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
+					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+					type === "select-multiple" ) {
+					return testChange.call( this, e );
+				}
+			},
+
+			// Beforeactivate happens also before the previous element is blurred
+			// with this event you can't trigger a change event, but you can store
+			// information/focus[in] is not needed anymore
+			beforeactivate: function( e ) {
+				var elem = e.target;
+				jQuery.data( elem, "_change_data", getVal(elem) );
+			}
+		},
+
+		setup: function( data, namespaces ) {
+			if ( this.type === "file" ) {
+				return false;
+			}
+
+			for ( var type in changeFilters ) {
+				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+			}
+
+			return formElems.test( this.nodeName );
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialChange" );
+
+			return formElems.test( this.nodeName );
+		}
+	};
+
+	changeFilters = jQuery.event.special.change.filters;
+}
+
+function trigger( type, elem, args ) {
+	args[0].type = type;
+	return jQuery.event.handle.apply( elem, args );
+}
+
+// Create "bubbling" focus and blur events
+if ( document.addEventListener ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				this.addEventListener( orig, handler, true );
+			}, 
+			teardown: function() { 
+				this.removeEventListener( orig, handler, true );
+			}
+		};
+
+		function handler( e ) { 
+			e = jQuery.event.fix( e );
+			e.type = fix;
+			return jQuery.event.handle.call( this, e );
+		}
+	});
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+	jQuery.fn[ name ] = function( type, data, fn ) {
+		// Handle object literals
+		if ( typeof type === "object" ) {
+			for ( var key in type ) {
+				this[ name ](key, data, type[key], fn);
+			}
+			return this;
+		}
+		
+		if ( jQuery.isFunction( data ) ) {
+			fn = data;
+			data = undefined;
+		}
+
+		var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
+			jQuery( this ).unbind( event, handler );
+			return fn.apply( this, arguments );
+		}) : fn;
+
+		if ( type === "unload" && name !== "one" ) {
+			this.one( type, data, fn );
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				jQuery.event.add( this[i], type, handler, data );
+			}
+		}
+
+		return this;
+	};
+});
+
+jQuery.fn.extend({
+	unbind: function( type, fn ) {
+		// Handle object literals
+		if ( typeof type === "object" && !type.preventDefault ) {
+			for ( var key in type ) {
+				this.unbind(key, type[key]);
+			}
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				jQuery.event.remove( this[i], type, fn );
+			}
+		}
+
+		return this;
+	},
+	
+	delegate: function( selector, types, data, fn ) {
+		return this.live( types, data, fn, selector );
+	},
+	
+	undelegate: function( selector, types, fn ) {
+		if ( arguments.length === 0 ) {
+				return this.unbind( "live" );
+		
+		} else {
+			return this.die( types, null, fn, selector );
+		}
+	},
+	
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+
+	triggerHandler: function( type, data ) {
+		if ( this[0] ) {
+			var event = jQuery.Event( type );
+			event.preventDefault();
+			event.stopPropagation();
+			jQuery.event.trigger( event, data, this[0] );
+			return event.result;
+		}
+	},
+
+	toggle: function( fn ) {
+		// Save reference to arguments for access in closure
+		var args = arguments, i = 1;
+
+		// link all the functions, so any of them can unbind this click handler
+		while ( i < args.length ) {
+			jQuery.proxy( fn, args[ i++ ] );
+		}
+
+		return this.click( jQuery.proxy( fn, function( event ) {
+			// Figure out which function to execute
+			var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+			jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+			// Make sure that clicks stop
+			event.preventDefault();
+
+			// and execute the function
+			return args[ lastToggle ].apply( this, arguments ) || false;
+		}));
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+});
+
+var liveMap = {
+	focus: "focusin",
+	blur: "focusout",
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+};
+
+jQuery.each(["live", "die"], function( i, name ) {
+	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+		var type, i = 0, match, namespaces, preType,
+			selector = origSelector || this.selector,
+			context = origSelector ? this : jQuery( this.context );
+
+		if ( jQuery.isFunction( data ) ) {
+			fn = data;
+			data = undefined;
+		}
+
+		types = (types || "").split(" ");
+
+		while ( (type = types[ i++ ]) != null ) {
+			match = rnamespaces.exec( type );
+			namespaces = "";
+
+			if ( match )  {
+				namespaces = match[0];
+				type = type.replace( rnamespaces, "" );
+			}
+
+			if ( type === "hover" ) {
+				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+				continue;
+			}
+
+			preType = type;
+
+			if ( type === "focus" || type === "blur" ) {
+				types.push( liveMap[ type ] + namespaces );
+				type = type + namespaces;
+
+			} else {
+				type = (liveMap[ type ] || type) + namespaces;
+			}
+
+			if ( name === "live" ) {
+				// bind live handler
+				context.each(function(){
+					jQuery.event.add( this, liveConvert( type, selector ),
+						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+				});
+
+			} else {
+				// unbind live handler
+				context.unbind( liveConvert( type, selector ), fn );
+			}
+		}
+		
+		return this;
+	}
+});
+
+function liveHandler( event ) {
+	var stop, elems = [], selectors = [], args = arguments,
+		related, match, handleObj, elem, j, i, l, data,
+		events = jQuery.data( this, "events" );
+
+	// Make sure we avoid non-left-click bubbling in Firefox (#3861)
+	if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
+		return;
+	}
+
+	event.liveFired = this;
+
+	var live = events.live.slice(0);
+
+	for ( j = 0; j < live.length; j++ ) {
+		handleObj = live[j];
+
+		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+			selectors.push( handleObj.selector );
+
+		} else {
+			live.splice( j--, 1 );
+		}
+	}
+
+	match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+	for ( i = 0, l = match.length; i < l; i++ ) {
+		for ( j = 0; j < live.length; j++ ) {
+			handleObj = live[j];
+
+			if ( match[i].selector === handleObj.selector ) {
+				elem = match[i].elem;
+				related = null;
+
+				// Those two events require additional checking
+				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+				}
+
+				if ( !related || related !== elem ) {
+					elems.push({ elem: elem, handleObj: handleObj });
+				}
+			}
+		}
+	}
+
+	for ( i = 0, l = elems.length; i < l; i++ ) {
+		match = elems[i];
+		event.currentTarget = match.elem;
+		event.data = match.handleObj.data;
+		event.handleObj = match.handleObj;
+
+		if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) {
+			stop = false;
+			break;
+		}
+	}
+
+	return stop;
+}
+
+function liveConvert( type, selector ) {
+	return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
+}
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( fn ) {
+		return fn ? this.bind( name, fn ) : this.trigger( name );
+	};
+
+	if ( jQuery.attrFn ) {
+		jQuery.attrFn[ name ] = true;
+	}
+});
+
+// Prevent memory leaks in IE
+// Window isn't included so as not to unbind existing unload events
+// More info:
+//  - http://isaacschlueter.com/2006/10/msie-memory-leaks/
+if ( window.attachEvent && !window.addEventListener ) {
+	window.attachEvent("onunload", function() {
+		for ( var id in jQuery.cache ) {
+			if ( jQuery.cache[ id ].handle ) {
+				// Try/Catch is to handle iframes being unloaded, see #4280
+				try {
+					jQuery.event.remove( jQuery.cache[ id ].handle.elem );
+				} catch(e) {}
+			}
+		}
+	});
+}
+/*!
+ * Sizzle CSS Selector Engine - v1.0
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+	done = 0,
+	toString = Object.prototype.toString,
+	hasDuplicate = false,
+	baseHasDuplicate = true;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function(){
+	baseHasDuplicate = false;
+	return 0;
+});
+
+var Sizzle = function(selector, context, results, seed) {
+	results = results || [];
+	var origContext = context = context || document;
+
+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+		return [];
+	}
+	
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),
+		soFar = selector;
+	
+	// Reset the position of the chunker regexp (start from head)
+	while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
+		soFar = m[3];
+		
+		parts.push( m[1] );
+		
+		if ( m[2] ) {
+			extra = m[3];
+			break;
+		}
+	}
+
+	if ( parts.length > 1 && origPOS.exec( selector ) ) {
+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+			set = posProcess( parts[0] + parts[1], context );
+		} else {
+			set = Expr.relative[ parts[0] ] ?
+				[ context ] :
+				Sizzle( parts.shift(), context );
+
+			while ( parts.length ) {
+				selector = parts.shift();
+
+				if ( Expr.relative[ selector ] ) {
+					selector += parts.shift();
+				}
+				
+				set = posProcess( selector, set );
+			}
+		}
+	} else {
+		// Take a shortcut and set the context if the root selector is an ID
+		// (but not if it'll be faster if the inner selector is an ID)
+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+			var ret = Sizzle.find( parts.shift(), context, contextXML );
+			context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
+		}
+
+		if ( context ) {
+			var ret = seed ?
+				{ expr: parts.pop(), set: makeArray(seed) } :
+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+			set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
+
+			if ( parts.length > 0 ) {
+				checkSet = makeArray(set);
+			} else {
+				prune = false;
+			}
+
+			while ( parts.length ) {
+				var cur = parts.pop(), pop = cur;
+
+				if ( !Expr.relative[ cur ] ) {
+					cur = "";
+				} else {
+					pop = parts.pop();
+				}
+
+				if ( pop == null ) {
+					pop = context;
+				}
+
+				Expr.relative[ cur ]( checkSet, pop, contextXML );
+			}
+		} else {
+			checkSet = parts = [];
+		}
+	}
+
+	if ( !checkSet ) {
+		checkSet = set;
+	}
+
+	if ( !checkSet ) {
+		Sizzle.error( cur || selector );
+	}
+
+	if ( toString.call(checkSet) === "[object Array]" ) {
+		if ( !prune ) {
+			results.push.apply( results, checkSet );
+		} else if ( context && context.nodeType === 1 ) {
+			for ( var i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
+					results.push( set[i] );
+				}
+			}
+		} else {
+			for ( var i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+					results.push( set[i] );
+				}
+			}
+		}
+	} else {
+		makeArray( checkSet, results );
+	}
+
+	if ( extra ) {
+		Sizzle( extra, origContext, results, seed );
+		Sizzle.uniqueSort( results );
+	}
+
+	return results;
+};
+
+Sizzle.uniqueSort = function(results){
+	if ( sortOrder ) {
+		hasDuplicate = baseHasDuplicate;
+		results.sort(sortOrder);
+
+		if ( hasDuplicate ) {
+			for ( var i = 1; i < results.length; i++ ) {
+				if ( results[i] === results[i-1] ) {
+					results.splice(i--, 1);
+				}
+			}
+		}
+	}
+
+	return results;
+};
+
+Sizzle.matches = function(expr, set){
+	return Sizzle(expr, null, null, set);
+};
+
+Sizzle.find = function(expr, context, isXML){
+	var set, match;
+
+	if ( !expr ) {
+		return [];
+	}
+
+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+		var type = Expr.order[i], match;
+		
+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+			var left = match[1];
+			match.splice(1,1);
+
+			if ( left.substr( left.length - 1 ) !== "\\" ) {
+				match[1] = (match[1] || "").replace(/\\/g, "");
+				set = Expr.find[ type ]( match, context, isXML );
+				if ( set != null ) {
+					expr = expr.replace( Expr.match[ type ], "" );
+					break;
+				}
+			}
+		}
+	}
+
+	if ( !set ) {
+		set = context.getElementsByTagName("*");
+	}
+
+	return {set: set, expr: expr};
+};
+
+Sizzle.filter = function(expr, set, inplace, not){
+	var old = expr, result = [], curLoop = set, match, anyFound,
+		isXMLFilter = set && set[0] && isXML(set[0]);
+
+	while ( expr && set.length ) {
+		for ( var type in Expr.filter ) {
+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+				var filter = Expr.filter[ type ], found, item, left = match[1];
+				anyFound = false;
+
+				match.splice(1,1);
+
+				if ( left.substr( left.length - 1 ) === "\\" ) {
+					continue;
+				}
+
+				if ( curLoop === result ) {
+					result = [];
+				}
+
+				if ( Expr.preFilter[ type ] ) {
+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+					if ( !match ) {
+						anyFound = found = true;
+					} else if ( match === true ) {
+						continue;
+					}
+				}
+
+				if ( match ) {
+					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+						if ( item ) {
+							found = filter( item, match, i, curLoop );
+							var pass = not ^ !!found;
+
+							if ( inplace && found != null ) {
+								if ( pass ) {
+									anyFound = true;
+								} else {
+									curLoop[i] = false;
+								}
+							} else if ( pass ) {
+								result.push( item );
+								anyFound = true;
+							}
+						}
+					}
+				}
+
+				if ( found !== undefined ) {
+					if ( !inplace ) {
+						curLoop = result;
+					}
+
+					expr = expr.replace( Expr.match[ type ], "" );
+
+					if ( !anyFound ) {
+						return [];
+					}
+
+					break;
+				}
+			}
+		}
+
+		// Improper expression
+		if ( expr === old ) {
+			if ( anyFound == null ) {
+				Sizzle.error( expr );
+			} else {
+				break;
+			}
+		}
+
+		old = expr;
+	}
+
+	return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+	throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+	order: [ "ID", "NAME", "TAG" ],
+	match: {
+		ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+		CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
+		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+		TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
+		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
+		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
+		PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+	},
+	leftMatch: {},
+	attrMap: {
+		"class": "className",
+		"for": "htmlFor"
+	},
+	attrHandle: {
+		href: function(elem){
+			return elem.getAttribute("href");
+		}
+	},
+	relative: {
+		"+": function(checkSet, part){
+			var isPartStr = typeof part === "string",
+				isTag = isPartStr && !/\W/.test(part),
+				isPartStrNotTag = isPartStr && !isTag;
+
+			if ( isTag ) {
+				part = part.toLowerCase();
+			}
+
+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+				if ( (elem = checkSet[i]) ) {
+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+						elem || false :
+						elem === part;
+				}
+			}
+
+			if ( isPartStrNotTag ) {
+				Sizzle.filter( part, checkSet, true );
+			}
+		},
+		">": function(checkSet, part){
+			var isPartStr = typeof part === "string";
+
+			if ( isPartStr && !/\W/.test(part) ) {
+				part = part.toLowerCase();
+
+				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+					var elem = checkSet[i];
+					if ( elem ) {
+						var parent = elem.parentNode;
+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+					}
+				}
+			} else {
+				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+					var elem = checkSet[i];
+					if ( elem ) {
+						checkSet[i] = isPartStr ?
+							elem.parentNode :
+							elem.parentNode === part;
+					}
+				}
+
+				if ( isPartStr ) {
+					Sizzle.filter( part, checkSet, true );
+				}
+			}
+		},
+		"": function(checkSet, part, isXML){
+			var doneName = done++, checkFn = dirCheck;
+
+			if ( typeof part === "string" && !/\W/.test(part) ) {
+				var nodeCheck = part = part.toLowerCase();
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
+		},
+		"~": function(checkSet, part, isXML){
+			var doneName = done++, checkFn = dirCheck;
+
+			if ( typeof part === "string" && !/\W/.test(part) ) {
+				var nodeCheck = part = part.toLowerCase();
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
+		}
+	},
+	find: {
+		ID: function(match, context, isXML){
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				return m ? [m] : [];
+			}
+		},
+		NAME: function(match, context){
+			if ( typeof context.getElementsByName !== "undefined" ) {
+				var ret = [], results = context.getElementsByName(match[1]);
+
+				for ( var i = 0, l = results.length; i < l; i++ ) {
+					if ( results[i].getAttribute("name") === match[1] ) {
+						ret.push( results[i] );
+					}
+				}
+
+				return ret.length === 0 ? null : ret;
+			}
+		},
+		TAG: function(match, context){
+			return context.getElementsByTagName(match[1]);
+		}
+	},
+	preFilter: {
+		CLASS: function(match, curLoop, inplace, result, not, isXML){
+			match = " " + match[1].replace(/\\/g, "") + " ";
+
+			if ( isXML ) {
+				return match;
+			}
+
+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+				if ( elem ) {
+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
+						if ( !inplace ) {
+							result.push( elem );
+						}
+					} else if ( inplace ) {
+						curLoop[i] = false;
+					}
+				}
+			}
+
+			return false;
+		},
+		ID: function(match){
+			return match[1].replace(/\\/g, "");
+		},
+		TAG: function(match, curLoop){
+			return match[1].toLowerCase();
+		},
+		CHILD: function(match){
+			if ( match[1] === "nth" ) {
+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+				// calculate the numbers (first)n+(last) including if they are negative
+				match[2] = (test[1] + (test[2] || 1)) - 0;
+				match[3] = test[3] - 0;
+			}
+
+			// TODO: Move to normal caching system
+			match[0] = done++;
+
+			return match;
+		},
+		ATTR: function(match, curLoop, inplace, result, not, isXML){
+			var name = match[1].replace(/\\/g, "");
+			
+			if ( !isXML && Expr.attrMap[name] ) {
+				match[1] = Expr.attrMap[name];
+			}
+
+			if ( match[2] === "~=" ) {
+				match[4] = " " + match[4] + " ";
+			}
+
+			return match;
+		},
+		PSEUDO: function(match, curLoop, inplace, result, not){
+			if ( match[1] === "not" ) {
+				// If we're dealing with a complex expression, or a simple one
+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+					match[3] = Sizzle(match[3], null, null, curLoop);
+				} else {
+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+					if ( !inplace ) {
+						result.push.apply( result, ret );
+					}
+					return false;
+				}
+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+				return true;
+			}
+			
+			return match;
+		},
+		POS: function(match){
+			match.unshift( true );
+			return match;
+		}
+	},
+	filters: {
+		enabled: function(elem){
+			return elem.disabled === false && elem.type !== "hidden";
+		},
+		disabled: function(elem){
+			return elem.disabled === true;
+		},
+		checked: function(elem){
+			return elem.checked === true;
+		},
+		selected: function(elem){
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			elem.parentNode.selectedIndex;
+			return elem.selected === true;
+		},
+		parent: function(elem){
+			return !!elem.firstChild;
+		},
+		empty: function(elem){
+			return !elem.firstChild;
+		},
+		has: function(elem, i, match){
+			return !!Sizzle( match[3], elem ).length;
+		},
+		header: function(elem){
+			return /h\d/i.test( elem.nodeName );
+		},
+		text: function(elem){
+			return "text" === elem.type;
+		},
+		radio: function(elem){
+			return "radio" === elem.type;
+		},
+		checkbox: function(elem){
+			return "checkbox" === elem.type;
+		},
+		file: function(elem){
+			return "file" === elem.type;
+		},
+		password: function(elem){
+			return "password" === elem.type;
+		},
+		submit: function(elem){
+			return "submit" === elem.type;
+		},
+		image: function(elem){
+			return "image" === elem.type;
+		},
+		reset: function(elem){
+			return "reset" === elem.type;
+		},
+		button: function(elem){
+			return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
+		},
+		input: function(elem){
+			return /input|select|textarea|button/i.test(elem.nodeName);
+		}
+	},
+	setFilters: {
+		first: function(elem, i){
+			return i === 0;
+		},
+		last: function(elem, i, match, array){
+			return i === array.length - 1;
+		},
+		even: function(elem, i){
+			return i % 2 === 0;
+		},
+		odd: function(elem, i){
+			return i % 2 === 1;
+		},
+		lt: function(elem, i, match){
+			return i < match[3] - 0;
+		},
+		gt: function(elem, i, match){
+			return i > match[3] - 0;
+		},
+		nth: function(elem, i, match){
+			return match[3] - 0 === i;
+		},
+		eq: function(elem, i, match){
+			return match[3] - 0 === i;
+		}
+	},
+	filter: {
+		PSEUDO: function(elem, match, i, array){
+			var name = match[1], filter = Expr.filters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			} else if ( name === "contains" ) {
+				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+			} else if ( name === "not" ) {
+				var not = match[3];
+
+				for ( var i = 0, l = not.length; i < l; i++ ) {
+					if ( not[i] === elem ) {
+						return false;
+					}
+				}
+
+				return true;
+			} else {
+				Sizzle.error( "Syntax error, unrecognized expression: " + name );
+			}
+		},
+		CHILD: function(elem, match){
+			var type = match[1], node = elem;
+			switch (type) {
+				case 'only':
+				case 'first':
+					while ( (node = node.previousSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+					if ( type === "first" ) { 
+						return true; 
+					}
+					node = elem;
+				case 'last':
+					while ( (node = node.nextSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+					return true;
+				case 'nth':
+					var first = match[2], last = match[3];
+
+					if ( first === 1 && last === 0 ) {
+						return true;
+					}
+					
+					var doneName = match[0],
+						parent = elem.parentNode;
+	
+					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+						var count = 0;
+						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+							if ( node.nodeType === 1 ) {
+								node.nodeIndex = ++count;
+							}
+						} 
+						parent.sizcache = doneName;
+					}
+					
+					var diff = elem.nodeIndex - last;
+					if ( first === 0 ) {
+						return diff === 0;
+					} else {
+						return ( diff % first === 0 && diff / first >= 0 );
+					}
+			}
+		},
+		ID: function(elem, match){
+			return elem.nodeType === 1 && elem.getAttribute("id") === match;
+		},
+		TAG: function(elem, match){
+			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+		},
+		CLASS: function(elem, match){
+			return (" " + (elem.className || elem.getAttribute("class")) + " ")
+				.indexOf( match ) > -1;
+		},
+		ATTR: function(elem, match){
+			var name = match[1],
+				result = Expr.attrHandle[ name ] ?
+					Expr.attrHandle[ name ]( elem ) :
+					elem[ name ] != null ?
+						elem[ name ] :
+						elem.getAttribute( name ),
+				value = result + "",
+				type = match[2],
+				check = match[4];
+
+			return result == null ?
+				type === "!=" :
+				type === "=" ?
+				value === check :
+				type === "*=" ?
+				value.indexOf(check) >= 0 :
+				type === "~=" ?
+				(" " + value + " ").indexOf(check) >= 0 :
+				!check ?
+				value && result !== false :
+				type === "!=" ?
+				value !== check :
+				type === "^=" ?
+				value.indexOf(check) === 0 :
+				type === "$=" ?
+				value.substr(value.length - check.length) === check :
+				type === "|=" ?
+				value === check || value.substr(0, check.length + 1) === check + "-" :
+				false;
+		},
+		POS: function(elem, match, i, array){
+			var name = match[2], filter = Expr.setFilters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			}
+		}
+	}
+};
+
+var origPOS = Expr.match.POS;
+
+for ( var type in Expr.match ) {
+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){
+		return "\\" + (num - 0 + 1);
+	}));
+}
+
+var makeArray = function(array, results) {
+	array = Array.prototype.slice.call( array, 0 );
+
+	if ( results ) {
+		results.push.apply( results, array );
+		return results;
+	}
+	
+	return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch(e){
+	makeArray = function(array, results) {
+		var ret = results || [];
+
+		if ( toString.call(array) === "[object Array]" ) {
+			Array.prototype.push.apply( ret, array );
+		} else {
+			if ( typeof array.length === "number" ) {
+				for ( var i = 0, l = array.length; i < l; i++ ) {
+					ret.push( array[i] );
+				}
+			} else {
+				for ( var i = 0; array[i]; i++ ) {
+					ret.push( array[i] );
+				}
+			}
+		}
+
+		return ret;
+	};
+}
+
+var sortOrder;
+
+if ( document.documentElement.compareDocumentPosition ) {
+	sortOrder = function( a, b ) {
+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+			if ( a == b ) {
+				hasDuplicate = true;
+			}
+			return a.compareDocumentPosition ? -1 : 1;
+		}
+
+		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
+		if ( ret === 0 ) {
+			hasDuplicate = true;
+		}
+		return ret;
+	};
+} else if ( "sourceIndex" in document.documentElement ) {
+	sortOrder = function( a, b ) {
+		if ( !a.sourceIndex || !b.sourceIndex ) {
+			if ( a == b ) {
+				hasDuplicate = true;
+			}
+			return a.sourceIndex ? -1 : 1;
+		}
+
+		var ret = a.sourceIndex - b.sourceIndex;
+		if ( ret === 0 ) {
+			hasDuplicate = true;
+		}
+		return ret;
+	};
+} else if ( document.createRange ) {
+	sortOrder = function( a, b ) {
+		if ( !a.ownerDocument || !b.ownerDocument ) {
+			if ( a == b ) {
+				hasDuplicate = true;
+			}
+			return a.ownerDocument ? -1 : 1;
+		}
+
+		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
+		aRange.setStart(a, 0);
+		aRange.setEnd(a, 0);
+		bRange.setStart(b, 0);
+		bRange.setEnd(b, 0);
+		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
+		if ( ret === 0 ) {
+			hasDuplicate = true;
+		}
+		return ret;
+	};
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+function getText( elems ) {
+	var ret = "", elem;
+
+	for ( var i = 0; elems[i]; i++ ) {
+		elem = elems[i];
+
+		// Get the text from text nodes and CDATA nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+			ret += elem.nodeValue;
+
+		// Traverse everything else, except comment nodes
+		} else if ( elem.nodeType !== 8 ) {
+			ret += getText( elem.childNodes );
+		}
+	}
+
+	return ret;
+}
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+	// We're going to inject a fake input element with a specified name
+	var form = document.createElement("div"),
+		id = "script" + (new Date).getTime();
+	form.innerHTML = "<a name='" + id + "'/>";
+
+	// Inject it into the root element, check its status, and remove it quickly
+	var root = document.documentElement;
+	root.insertBefore( form, root.firstChild );
+
+	// The workaround has to do additional checks after a getElementById
+	// Which slows things down for other browsers (hence the branching)
+	if ( document.getElementById( id ) ) {
+		Expr.find.ID = function(match, context, isXML){
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
+			}
+		};
+
+		Expr.filter.ID = function(elem, match){
+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+			return elem.nodeType === 1 && node && node.nodeValue === match;
+		};
+	}
+
+	root.removeChild( form );
+	root = form = null; // release memory in IE
+})();
+
+(function(){
+	// Check to see if the browser returns only elements
+	// when doing getElementsByTagName("*")
+
+	// Create a fake element
+	var div = document.createElement("div");
+	div.appendChild( document.createComment("") );
+
+	// Make sure no comments are found
+	if ( div.getElementsByTagName("*").length > 0 ) {
+		Expr.find.TAG = function(match, context){
+			var results = context.getElementsByTagName(match[1]);
+
+			// Filter out possible comments
+			if ( match[1] === "*" ) {
+				var tmp = [];
+
+				for ( var i = 0; results[i]; i++ ) {
+					if ( results[i].nodeType === 1 ) {
+						tmp.push( results[i] );
+					}
+				}
+
+				results = tmp;
+			}
+
+			return results;
+		};
+	}
+
+	// Check to see if an attribute returns normalized href attributes
+	div.innerHTML = "<a href='#'></a>";
+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+			div.firstChild.getAttribute("href") !== "#" ) {
+		Expr.attrHandle.href = function(elem){
+			return elem.getAttribute("href", 2);
+		};
+	}
+
+	div = null; // release memory in IE
+})();
+
+if ( document.querySelectorAll ) {
+	(function(){
+		var oldSizzle = Sizzle, div = document.createElement("div");
+		div.innerHTML = "<p class='TEST'></p>";
+
+		// Safari can't handle uppercase or unicode characters when
+		// in quirks mode.
+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+			return;
+		}
+	
+		Sizzle = function(query, context, extra, seed){
+			context = context || document;
+
+			// Only use querySelectorAll on non-XML documents
+			// (ID selectors don't work in non-HTML documents)
+			if ( !seed && context.nodeType === 9 && !isXML(context) ) {
+				try {
+					return makeArray( context.querySelectorAll(query), extra );
+				} catch(e){}
+			}
+		
+			return oldSizzle(query, context, extra, seed);
+		};
+
+		for ( var prop in oldSizzle ) {
+			Sizzle[ prop ] = oldSizzle[ prop ];
+		}
+
+		div = null; // release memory in IE
+	})();
+}
+
+(function(){
+	var div = document.createElement("div");
+
+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+	// Opera can't find a second classname (in 9.6)
+	// Also, make sure that getElementsByClassName actually exists
+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+		return;
+	}
+
+	// Safari caches class attributes, doesn't catch changes (in 3.2)
+	div.lastChild.className = "e";
+
+	if ( div.getElementsByClassName("e").length === 1 ) {
+		return;
+	}
+	
+	Expr.order.splice(1, 0, "CLASS");
+	Expr.find.CLASS = function(match, context, isXML) {
+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+			return context.getElementsByClassName(match[1]);
+		}
+	};
+
+	div = null; // release memory in IE
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+		if ( elem ) {
+			elem = elem[dir];
+			var match = false;
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 && !isXML ){
+					elem.sizcache = doneName;
+					elem.sizset = i;
+				}
+
+				if ( elem.nodeName.toLowerCase() === cur ) {
+					match = elem;
+					break;
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+		if ( elem ) {
+			elem = elem[dir];
+			var match = false;
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 ) {
+					if ( !isXML ) {
+						elem.sizcache = doneName;
+						elem.sizset = i;
+					}
+					if ( typeof cur !== "string" ) {
+						if ( elem === cur ) {
+							match = true;
+							break;
+						}
+
+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+						match = elem;
+						break;
+					}
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+var contains = document.compareDocumentPosition ? function(a, b){
+	return !!(a.compareDocumentPosition(b) & 16);
+} : function(a, b){
+	return a !== b && (a.contains ? a.contains(b) : true);
+};
+
+var isXML = function(elem){
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833) 
+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function(selector, context){
+	var tmpSet = [], later = "", match,
+		root = context.nodeType ? [context] : context;
+
+	// Position selectors must be done after the filter
+	// And so must :not(positional) so we move all PSEUDOs to the end
+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+		later += match[0];
+		selector = selector.replace( Expr.match.PSEUDO, "" );
+	}
+
+	selector = Expr.relative[selector] ? selector + "*" : selector;
+
+	for ( var i = 0, l = root.length; i < l; i++ ) {
+		Sizzle( selector, root[i], tmpSet );
+	}
+
+	return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = getText;
+jQuery.isXMLDoc = isXML;
+jQuery.contains = contains;
+
+return;
+
+window.Sizzle = Sizzle;
+
+})();
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+	// Note: This RegExp should be improved, or likely pulled from Sizzle
+	rmultiselector = /,/,
+	slice = Array.prototype.slice;
+
+// Implement the identical functionality for filter and not
+var winnow = function( elements, qualifier, keep ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			return !!qualifier.call( elem, i, elem ) === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			return (elem === qualifier) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem, i ) {
+		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+	});
+};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var ret = this.pushStack( "", "find", selector ), length = 0;
+
+		for ( var i = 0, l = this.length; i < l; i++ ) {
+			length = ret.length;
+			jQuery.find( selector, this[i], ret );
+
+			if ( i > 0 ) {
+				// Make sure that the results are unique
+				for ( var n = length; n < ret.length; n++ ) {
+					for ( var r = 0; r < length; r++ ) {
+						if ( ret[r] === ret[n] ) {
+							ret.splice(n--, 1);
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	has: function( target ) {
+		var targets = jQuery( target );
+		return this.filter(function() {
+			for ( var i = 0, l = targets.length; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false), "not", selector);
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true), "filter", selector );
+	},
+	
+	is: function( selector ) {
+		return !!selector && jQuery.filter( selector, this ).length > 0;
+	},
+
+	closest: function( selectors, context ) {
+		if ( jQuery.isArray( selectors ) ) {
+			var ret = [], cur = this[0], match, matches = {}, selector;
+
+			if ( cur && selectors.length ) {
+				for ( var i = 0, l = selectors.length; i < l; i++ ) {
+					selector = selectors[i];
+
+					if ( !matches[selector] ) {
+						matches[selector] = jQuery.expr.match.POS.test( selector ) ? 
+							jQuery( selector, context || this.context ) :
+							selector;
+					}
+				}
+
+				while ( cur && cur.ownerDocument && cur !== context ) {
+					for ( selector in matches ) {
+						match = matches[selector];
+
+						if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
+							ret.push({ selector: selector, elem: cur });
+							delete matches[selector];
+						}
+					}
+					cur = cur.parentNode;
+				}
+			}
+
+			return ret;
+		}
+
+		var pos = jQuery.expr.match.POS.test( selectors ) ? 
+			jQuery( selectors, context || this.context ) : null;
+
+		return this.map(function( i, cur ) {
+			while ( cur && cur.ownerDocument && cur !== context ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {
+					return cur;
+				}
+				cur = cur.parentNode;
+			}
+			return null;
+		});
+	},
+	
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+		if ( !elem || typeof elem === "string" ) {
+			return jQuery.inArray( this[0],
+				// If it receives a string, the selector is used
+				// If it receives nothing, the siblings are used
+				elem ? jQuery( elem ) : this.parent().children() );
+		}
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context || this.context ) :
+				jQuery.makeArray( selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+			all :
+			jQuery.unique( all ) );
+	},
+
+	andSelf: function() {
+		return this.add( this.prevObject );
+	}
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+	return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return jQuery.nth( elem, 2, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return jQuery.nth( elem, 2, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( elem.parentNode.firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.makeArray( elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+		
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 ? jQuery.unique( ret ) : ret;
+
+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret, name, slice.call(arguments).join(",") );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return jQuery.find.matches(expr, elems);
+	},
+	
+	dir: function( elem, dir, until ) {
+		var matched = [], cur = elem[dir];
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	nth: function( cur, result, dir, elem ) {
+		result = result || 1;
+		var num = 0;
+
+		for ( ; cur; cur = cur[dir] ) {
+			if ( cur.nodeType === 1 && ++num === result ) {
+				break;
+			}
+		}
+
+		return cur;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,
+	rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnocache = /<script|<object|<embed|<option|<style/i,
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,  // checked="checked" or checked (html5)
+	fcloseTag = function( all, front, tag ) {
+		return rselfClosing.test( tag ) ?
+			all :
+			front + "></" + tag + ">";
+	},
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		area: [ 1, "<map>", "</map>" ],
+		_default: [ 0, "", "" ]
+	};
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+	wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+	text: function( text ) {
+		if ( jQuery.isFunction(text) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.text( text.call(this, i, self.text()) );
+			});
+		}
+
+		if ( typeof text !== "object" && text !== undefined ) {
+			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+		}
+
+		return jQuery.text( this );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append(this);
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ), contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		return this.each(function() {
+			jQuery( this ).wrapAll( html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this );
+			});
+		} else if ( arguments.length ) {
+			var set = jQuery(arguments[0]);
+			set.push.apply( set, this.toArray() );
+			return this.pushStack( set, "before", arguments );
+		}
+	},
+
+	after: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			});
+		} else if ( arguments.length ) {
+			var set = this.pushStack( this, "after", arguments );
+			set.push.apply( set, jQuery(arguments[0]).toArray() );
+			return set;
+		}
+	},
+	
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( elem.getElementsByTagName("*") );
+					jQuery.cleanData( [ elem ] );
+				}
+
+				if ( elem.parentNode ) {
+					 elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+		
+		return this;
+	},
+
+	empty: function() {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( elem.getElementsByTagName("*") );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+		}
+		
+		return this;
+	},
+
+	clone: function( events ) {
+		// Do the clone
+		var ret = this.map(function() {
+			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
+				// IE copies events bound via attachEvent when
+				// using cloneNode. Calling detachEvent on the
+				// clone will also remove the events from the orignal
+				// In order to get around this, we use innerHTML.
+				// Unfortunately, this means some modifications to
+				// attributes in IE that are actually only stored
+				// as properties will not be copied (such as the
+				// the name attribute on an input).
+				var html = this.outerHTML, ownerDocument = this.ownerDocument;
+				if ( !html ) {
+					var div = ownerDocument.createElement("div");
+					div.appendChild( this.cloneNode(true) );
+					html = div.innerHTML;
+				}
+
+				return jQuery.clean([html.replace(rinlinejQuery, "")
+					// Handle the case in IE 8 where action=/test/> self-closes a tag
+					.replace(/=([^="'>\s]+\/)>/g, '="$1">')
+					.replace(rleadingWhitespace, "")], ownerDocument)[0];
+			} else {
+				return this.cloneNode(true);
+			}
+		});
+
+		// Copy the events from the original to the clone
+		if ( events === true ) {
+			cloneCopyEvent( this, ret );
+			cloneCopyEvent( this.find("*"), ret.find("*") );
+		}
+
+		// Return the cloned set
+		return ret;
+	},
+
+	html: function( value ) {
+		if ( value === undefined ) {
+			return this[0] && this[0].nodeType === 1 ?
+				this[0].innerHTML.replace(rinlinejQuery, "") :
+				null;
+
+		// See if we can take a shortcut and just use innerHTML
+		} else if ( typeof value === "string" && !rnocache.test( value ) &&
+			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+			value = value.replace(rxhtmlTag, fcloseTag);
+
+			try {
+				for ( var i = 0, l = this.length; i < l; i++ ) {
+					// Remove element nodes and prevent memory leaks
+					if ( this[i].nodeType === 1 ) {
+						jQuery.cleanData( this[i].getElementsByTagName("*") );
+						this[i].innerHTML = value;
+					}
+				}
+
+			// If using innerHTML throws an exception, use the fallback method
+			} catch(e) {
+				this.empty().append( value );
+			}
+
+		} else if ( jQuery.isFunction( value ) ) {
+			this.each(function(i){
+				var self = jQuery(this), old = self.html();
+				self.empty().append(function(){
+					return value.call( this, i, old );
+				});
+			});
+
+		} else {
+			this.empty().append( value );
+		}
+
+		return this;
+	},
+
+	replaceWith: function( value ) {
+		if ( this[0] && this[0].parentNode ) {
+			// Make sure that the elements are removed from the DOM before they are inserted
+			// this can help fix replacing a parent with child elements
+			if ( jQuery.isFunction( value ) ) {
+				return this.each(function(i) {
+					var self = jQuery(this), old = self.html();
+					self.replaceWith( value.call( this, i, old ) );
+				});
+			}
+
+			if ( typeof value !== "string" ) {
+				value = jQuery(value).detach();
+			}
+
+			return this.each(function() {
+				var next = this.nextSibling, parent = this.parentNode;
+
+				jQuery(this).remove();
+
+				if ( next ) {
+					jQuery(next).before( value );
+				} else {
+					jQuery(parent).append( value );
+				}
+			});
+		} else {
+			return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
+		}
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+		var results, first, value = args[0], scripts = [], fragment, parent;
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+			return this.each(function() {
+				jQuery(this).domManip( args, table, callback, true );
+			});
+		}
+
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				args[0] = value.call(this, i, table ? self.html() : undefined);
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( this[0] ) {
+			parent = value && value.parentNode;
+
+			// If we're in a fragment, just use that instead of building a new one
+			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+				results = { fragment: parent };
+
+			} else {
+				results = buildFragment( args, this, scripts );
+			}
+			
+			fragment = results.fragment;
+			
+			if ( fragment.childNodes.length === 1 ) {
+				first = fragment = fragment.firstChild;
+			} else {
+				first = fragment.firstChild;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+
+				for ( var i = 0, l = this.length; i < l; i++ ) {
+					callback.call(
+						table ?
+							root(this[i], first) :
+							this[i],
+						i > 0 || results.cacheable || this.length > 1  ?
+							fragment.cloneNode(true) :
+							fragment
+					);
+				}
+			}
+
+			if ( scripts.length ) {
+				jQuery.each( scripts, evalScript );
+			}
+		}
+
+		return this;
+
+		function root( elem, cur ) {
+			return jQuery.nodeName(elem, "table") ?
+				(elem.getElementsByTagName("tbody")[0] ||
+				elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+				elem;
+		}
+	}
+});
+
+function cloneCopyEvent(orig, ret) {
+	var i = 0;
+
+	ret.each(function() {
+		if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
+			return;
+		}
+
+		var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;
+
+		if ( events ) {
+			delete curData.handle;
+			curData.events = {};
+
+			for ( var type in events ) {
+				for ( var handler in events[ type ] ) {
+					jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
+				}
+			}
+		}
+	});
+}
+
+function buildFragment( args, nodes, scripts ) {
+	var fragment, cacheable, cacheresults,
+		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
+
+	// Only cache "small" (1/2 KB) strings that are associated with the main document
+	// Cloning options loses the selected state, so don't cache them
+	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+		!rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+
+		cacheable = true;
+		cacheresults = jQuery.fragments[ args[0] ];
+		if ( cacheresults ) {
+			if ( cacheresults !== 1 ) {
+				fragment = cacheresults;
+			}
+		}
+	}
+
+	if ( !fragment ) {
+		fragment = doc.createDocumentFragment();
+		jQuery.clean( args, doc, fragment, scripts );
+	}
+
+	if ( cacheable ) {
+		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+	}
+
+	return { fragment: fragment, cacheable: cacheable };
+}
+
+jQuery.fragments = {};
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var ret = [], insert = jQuery( selector ),
+			parent = this.length === 1 && this[0].parentNode;
+		
+		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+			insert[ original ]( this[0] );
+			return this;
+			
+		} else {
+			for ( var i = 0, l = insert.length; i < l; i++ ) {
+				var elems = (i > 0 ? this.clone(true) : this).get();
+				jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
+				ret = ret.concat( elems );
+			}
+		
+			return this.pushStack( ret, name, insert.selector );
+		}
+	};
+});
+
+jQuery.extend({
+	clean: function( elems, context, fragment, scripts ) {
+		context = context || document;
+
+		// !context.createElement fails in IE with an error but returns typeof 'object'
+		if ( typeof context.createElement === "undefined" ) {
+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+		}
+
+		var ret = [];
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( typeof elem === "number" ) {
+				elem += "";
+			}
+
+			if ( !elem ) {
+				continue;
+			}
+
+			// Convert html string into DOM nodes
+			if ( typeof elem === "string" && !rhtml.test( elem ) ) {
+				elem = context.createTextNode( elem );
+
+			} else if ( typeof elem === "string" ) {
+				// Fix "XHTML"-style tags in all browsers
+				elem = elem.replace(rxhtmlTag, fcloseTag);
+
+				// Trim whitespace, otherwise indexOf won't work as expected
+				var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+					wrap = wrapMap[ tag ] || wrapMap._default,
+					depth = wrap[0],
+					div = context.createElement("div");
+
+				// Go to html and back, then peel off extra wrappers
+				div.innerHTML = wrap[1] + elem + wrap[2];
+
+				// Move to the right depth
+				while ( depth-- ) {
+					div = div.lastChild;
+				}
+
+				// Remove IE's autoinserted <tbody> from table fragments
+				if ( !jQuery.support.tbody ) {
+
+					// String was a <table>, *may* have spurious <tbody>
+					var hasBody = rtbody.test(elem),
+						tbody = tag === "table" && !hasBody ?
+							div.firstChild && div.firstChild.childNodes :
+
+							// String was a bare <thead> or <tfoot>
+							wrap[1] === "<table>" && !hasBody ?
+								div.childNodes :
+								[];
+
+					for ( var j = tbody.length - 1; j >= 0 ; --j ) {
+						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+							tbody[ j ].parentNode.removeChild( tbody[ j ] );
+						}
+					}
+
+				}
+
+				// IE completely kills leading whitespace when innerHTML is used
+				if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+					div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+				}
+
+				elem = div.childNodes;
+			}
+
+			if ( elem.nodeType ) {
+				ret.push( elem );
+			} else {
+				ret = jQuery.merge( ret, elem );
+			}
+		}
+
+		if ( fragment ) {
+			for ( var i = 0; ret[i]; i++ ) {
+				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+				
+				} else {
+					if ( ret[i].nodeType === 1 ) {
+						ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
+					}
+					fragment.appendChild( ret[i] );
+				}
+			}
+		}
+
+		return ret;
+	},
+	
+	cleanData: function( elems ) {
+		var data, id, cache = jQuery.cache,
+			special = jQuery.event.special,
+			deleteExpando = jQuery.support.deleteExpando;
+		
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			id = elem[ jQuery.expando ];
+			
+			if ( id ) {
+				data = cache[ id ];
+				
+				if ( data.events ) {
+					for ( var type in data.events ) {
+						if ( special[ type ] ) {
+							jQuery.event.remove( elem, type );
+
+						} else {
+							removeEvent( elem, type, data.handle );
+						}
+					}
+				}
+				
+				if ( deleteExpando ) {
+					delete elem[ jQuery.expando ];
+
+				} else if ( elem.removeAttribute ) {
+					elem.removeAttribute( jQuery.expando );
+				}
+				
+				delete cache[ id ];
+			}
+		}
+	}
+});
+// exclude the following css properties to add px
+var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
+	ralpha = /alpha\([^)]*\)/,
+	ropacity = /opacity=([^)]*)/,
+	rfloat = /float/i,
+	rdashAlpha = /-([a-z])/ig,
+	rupper = /([A-Z])/g,
+	rnumpx = /^-?\d+(?:px)?$/i,
+	rnum = /^-?\d/,
+
+	cssShow = { position: "absolute", visibility: "hidden", display:"block" },
+	cssWidth = [ "Left", "Right" ],
+	cssHeight = [ "Top", "Bottom" ],
+
+	// cache check for defaultView.getComputedStyle
+	getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,
+	// normalize float css property
+	styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat",
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn.css = function( name, value ) {
+	return access( this, name, value, true, function( elem, name, value ) {
+		if ( value === undefined ) {
+			return jQuery.curCSS( elem, name );
+		}
+		
+		if ( typeof value === "number" && !rexclude.test(name) ) {
+			value += "px";
+		}
+
+		jQuery.style( elem, name, value );
+	});
+};
+
+jQuery.extend({
+	style: function( elem, name, value ) {
+		// don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return undefined;
+		}
+
+		// ignore negative width and height values #1599
+		if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {
+			value = undefined;
+		}
+
+		var style = elem.style || elem, set = value !== undefined;
+
+		// IE uses filters for opacity
+		if ( !jQuery.support.opacity && name === "opacity" ) {
+			if ( set ) {
+				// IE has trouble with opacity if it does not have layout
+				// Force it by setting the zoom level
+				style.zoom = 1;
+
+				// Set the alpha filter to set the opacity
+				var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")";
+				var filter = style.filter || jQuery.curCSS( elem, "filter" ) || "";
+				style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity;
+			}
+
+			return style.filter && style.filter.indexOf("opacity=") >= 0 ?
+				(parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":
+				"";
+		}
+
+		// Make sure we're using the right name for getting the float value
+		if ( rfloat.test( name ) ) {
+			name = styleFloat;
+		}
+
+		name = name.replace(rdashAlpha, fcamelCase);
+
+		if ( set ) {
+			style[ name ] = value;
+		}
+
+		return style[ name ];
+	},
+
+	css: function( elem, name, force, extra ) {
+		if ( name === "width" || name === "height" ) {
+			var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight;
+
+			function getWH() {
+				val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+
+				if ( extra === "border" ) {
+					return;
+				}
+
+				jQuery.each( which, function() {
+					if ( !extra ) {
+						val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
+					}
+
+					if ( extra === "margin" ) {
+						val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
+					} else {
+						val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
+					}
+				});
+			}
+
+			if ( elem.offsetWidth !== 0 ) {
+				getWH();
+			} else {
+				jQuery.swap( elem, props, getWH );
+			}
+
+			return Math.max(0, Math.round(val));
+		}
+
+		return jQuery.curCSS( elem, name, force );
+	},
+
+	curCSS: function( elem, name, force ) {
+		var ret, style = elem.style, filter;
+
+		// IE uses filters for opacity
+		if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) {
+			ret = ropacity.test(elem.currentStyle.filter || "") ?
+				(parseFloat(RegExp.$1) / 100) + "" :
+				"";
+
+			return ret === "" ?
+				"1" :
+				ret;
+		}
+
+		// Make sure we're using the right name for getting the float value
+		if ( rfloat.test( name ) ) {
+			name = styleFloat;
+		}
+
+		if ( !force && style && style[ name ] ) {
+			ret = style[ name ];
+
+		} else if ( getComputedStyle ) {
+
+			// Only "float" is needed here
+			if ( rfloat.test( name ) ) {
+				name = "float";
+			}
+
+			name = name.replace( rupper, "-$1" ).toLowerCase();
+
+			var defaultView = elem.ownerDocument.defaultView;
+
+			if ( !defaultView ) {
+				return null;
+			}
+
+			var computedStyle = defaultView.getComputedStyle( elem, null );
+
+			if ( computedStyle ) {
+				ret = computedStyle.getPropertyValue( name );
+			}
+
+			// We should always get a number back from opacity
+			if ( name === "opacity" && ret === "" ) {
+				ret = "1";
+			}
+
+		} else if ( elem.currentStyle ) {
+			var camelCase = name.replace(rdashAlpha, fcamelCase);
+
+			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
+
+			// From the awesome hack by Dean Edwards
+			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+			// If we're not dealing with a regular pixel number
+			// but a number that has a weird ending, we need to convert it to pixels
+			if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+				// Remember the original values
+				var left = style.left, rsLeft = elem.runtimeStyle.left;
+
+				// Put in the new values to get a computed value out
+				elem.runtimeStyle.left = elem.currentStyle.left;
+				style.left = camelCase === "fontSize" ? "1em" : (ret || 0);
+				ret = style.pixelLeft + "px";
+
+				// Revert the changed values
+				style.left = left;
+				elem.runtimeStyle.left = rsLeft;
+			}
+		}
+
+		return ret;
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback ) {
+		var old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( var name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		callback.call( elem );
+
+		// Revert the old values
+		for ( var name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+	}
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		var width = elem.offsetWidth, height = elem.offsetHeight,
+			skip = elem.nodeName.toLowerCase() === "tr";
+
+		return width === 0 && height === 0 && !skip ?
+			true :
+			width > 0 && height > 0 && !skip ?
+				false :
+				jQuery.curCSS(elem, "display") === "none";
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+var jsc = now(),
+	rscript = /<script(.|\s)*?\/script>/gi,
+	rselectTextarea = /select|textarea/i,
+	rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,
+	jsre = /=\?(&|$)/,
+	rquery = /\?/,
+	rts = /(\?|&)_=.*?(&|$)/,
+	rurl = /^(\w+:)?\/\/([^\/?#]+)/,
+	r20 = /%20/g,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load;
+
+jQuery.fn.extend({
+	load: function( url, params, callback ) {
+		if ( typeof url !== "string" ) {
+			return _load.call( this, url );
+
+		// Don't do a request if no elements are being requested
+		} else if ( !this.length ) {
+			return this;
+		}
+
+		var off = url.indexOf(" ");
+		if ( off >= 0 ) {
+			var selector = url.slice(off, url.length);
+			url = url.slice(0, off);
+		}
+
+		// Default to a GET request
+		var type = "GET";
+
+		// If the second parameter was provided
+		if ( params ) {
+			// If it's a function
+			if ( jQuery.isFunction( params ) ) {
+				// We assume that it's the callback
+				callback = params;
+				params = null;
+
+			// Otherwise, build a param string
+			} else if ( typeof params === "object" ) {
+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+				type = "POST";
+			}
+		}
+
+		var self = this;
+
+		// Request the remote document
+		jQuery.ajax({
+			url: url,
+			type: type,
+			dataType: "html",
+			data: params,
+			complete: function( res, status ) {
+				// If successful, inject the HTML into all the matched elements
+				if ( status === "success" || status === "notmodified" ) {
+					// See if a selector was specified
+					self.html( selector ?
+						// Create a dummy div to hold the results
+						jQuery("<div />")
+							// inject the contents of the document in, removing the scripts
+							// to avoid any 'Permission Denied' errors in IE
+							.append(res.responseText.replace(rscript, ""))
+
+							// Locate the specified elements
+							.find(selector) :
+
+						// If not, just inject the full result
+						res.responseText );
+				}
+
+				if ( callback ) {
+					self.each( callback, [res.responseText, status, res] );
+				}
+			}
+		});
+
+		return this;
+	},
+
+	serialize: function() {
+		return jQuery.param(this.serializeArray());
+	},
+	serializeArray: function() {
+		return this.map(function() {
+			return this.elements ? jQuery.makeArray(this.elements) : this;
+		})
+		.filter(function() {
+			return this.name && !this.disabled &&
+				(this.checked || rselectTextarea.test(this.nodeName) ||
+					rinput.test(this.type));
+		})
+		.map(function( i, elem ) {
+			var val = jQuery(this).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray(val) ?
+					jQuery.map( val, function( val, i ) {
+						return { name: elem.name, value: val };
+					}) :
+					{ name: elem.name, value: val };
+		}).get();
+	}
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {
+	jQuery.fn[o] = function( f ) {
+		return this.bind(o, f);
+	};
+});
+
+jQuery.extend({
+
+	get: function( url, data, callback, type ) {
+		// shift arguments if data argument was omited
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = null;
+		}
+
+		return jQuery.ajax({
+			type: "GET",
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get(url, null, callback, "script");
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get(url, data, callback, "json");
+	},
+
+	post: function( url, data, callback, type ) {
+		// shift arguments if data argument was omited
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = {};
+		}
+
+		return jQuery.ajax({
+			type: "POST",
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	},
+
+	ajaxSetup: function( settings ) {
+		jQuery.extend( jQuery.ajaxSettings, settings );
+	},
+
+	ajaxSettings: {
+		url: location.href,
+		global: true,
+		type: "GET",
+		contentType: "application/x-www-form-urlencoded",
+		processData: true,
+		async: true,
+		/*
+		timeout: 0,
+		data: null,
+		username: null,
+		password: null,
+		traditional: false,
+		*/
+		// Create the request object; Microsoft failed to properly
+		// implement the XMLHttpRequest in IE7 (can't request local files),
+		// so we use the ActiveXObject when it is available
+		// This function can be overriden by calling jQuery.ajaxSetup
+		xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?
+			function() {
+				return new window.XMLHttpRequest();
+			} :
+			function() {
+				try {
+					return new window.ActiveXObject("Microsoft.XMLHTTP");
+				} catch(e) {}
+			},
+		accepts: {
+			xml: "application/xml, text/xml",
+			html: "text/html",
+			script: "text/javascript, application/javascript",
+			json: "application/json, text/javascript",
+			text: "text/plain",
+			_default: "*/*"
+		}
+	},
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajax: function( origSettings ) {
+		var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);
+		
+		var jsonp, status, data,
+			callbackContext = origSettings && origSettings.context || s,
+			type = s.type.toUpperCase();
+
+		// convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Handle JSONP Parameter Callbacks
+		if ( s.dataType === "jsonp" ) {
+			if ( type === "GET" ) {
+				if ( !jsre.test( s.url ) ) {
+					s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
+				}
+			} else if ( !s.data || !jsre.test(s.data) ) {
+				s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
+			}
+			s.dataType = "json";
+		}
+
+		// Build temporary JSONP function
+		if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
+			jsonp = s.jsonpCallback || ("jsonp" + jsc++);
+
+			// Replace the =? sequence both in the query string and the data
+			if ( s.data ) {
+				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
+			}
+
+			s.url = s.url.replace(jsre, "=" + jsonp + "$1");
+
+			// We need to make sure
+			// that a JSONP style response is executed properly
+			s.dataType = "script";
+
+			// Handle JSONP-style loading
+			window[ jsonp ] = window[ jsonp ] || function( tmp ) {
+				data = tmp;
+				success();
+				complete();
+				// Garbage collect
+				window[ jsonp ] = undefined;
+
+				try {
+					delete window[ jsonp ];
+				} catch(e) {}
+
+				if ( head ) {
+					head.removeChild( script );
+				}
+			};
+		}
+
+		if ( s.dataType === "script" && s.cache === null ) {
+			s.cache = false;
+		}
+
+		if ( s.cache === false && type === "GET" ) {
+			var ts = now();
+
+			// try replacing _= if it is there
+			var ret = s.url.replace(rts, "$1_=" + ts + "$2");
+
+			// if nothing was replaced, add timestamp to the end
+			s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
+		}
+
+		// If data is available, append data to url for get requests
+		if ( s.data && type === "GET" ) {
+			s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
+		}
+
+		// Watch for a new set of requests
+		if ( s.global && ! jQuery.active++ ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Matches an absolute URL, and saves the domain
+		var parts = rurl.exec( s.url ),
+			remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
+
+		// If we're requesting a remote document
+		// and trying to load JSON or Script with a GET
+		if ( s.dataType === "script" && type === "GET" && remote ) {
+			var head = document.getElementsByTagName("head")[0] || document.documentElement;
+			var script = document.createElement("script");
+			script.src = s.url;
+			if ( s.scriptCharset ) {
+				script.charset = s.scriptCharset;
+			}
+
+			// Handle Script loading
+			if ( !jsonp ) {
+				var done = false;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function() {
+					if ( !done && (!this.readyState ||
+							this.readyState === "loaded" || this.readyState === "complete") ) {
+						done = true;
+						success();
+						complete();
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+						if ( head && script.parentNode ) {
+							head.removeChild( script );
+						}
+					}
+				};
+			}
+
+			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+			// This arises when a base node is used (#2709 and #4378).
+			head.insertBefore( script, head.firstChild );
+
+			// We handle everything using the script element injection
+			return undefined;
+		}
+
+		var requestDone = false;
+
+		// Create the request object
+		var xhr = s.xhr();
+
+		if ( !xhr ) {
+			return;
+		}
+
+		// Open the socket
+		// Passing null username, generates a login popup on Opera (#2865)
+		if ( s.username ) {
+			xhr.open(type, s.url, s.async, s.username, s.password);
+		} else {
+			xhr.open(type, s.url, s.async);
+		}
+
+		// Need an extra try/catch for cross domain requests in Firefox 3
+		try {
+			// Set the correct header, if data is being sent
+			if ( s.data || origSettings && origSettings.contentType ) {
+				xhr.setRequestHeader("Content-Type", s.contentType);
+			}
+
+			// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+			if ( s.ifModified ) {
+				if ( jQuery.lastModified[s.url] ) {
+					xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
+				}
+
+				if ( jQuery.etag[s.url] ) {
+					xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
+				}
+			}
+
+			// Set header so the called script knows that it's an XMLHttpRequest
+			// Only send the header if it's not a remote XHR
+			if ( !remote ) {
+				xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+			}
+
+			// Set the Accepts header for the server, depending on the dataType
+			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
+				s.accepts[ s.dataType ] + ", */*" :
+				s.accepts._default );
+		} catch(e) {}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) {
+			// Handle the global AJAX counter
+			if ( s.global && ! --jQuery.active ) {
+				jQuery.event.trigger( "ajaxStop" );
+			}
+
+			// close opended socket
+			xhr.abort();
+			return false;
+		}
+
+		if ( s.global ) {
+			trigger("ajaxSend", [xhr, s]);
+		}
+
+		// Wait for a response to come back
+		var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
+			// The request was aborted
+			if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
+				// Opera doesn't call onreadystatechange before this point
+				// so we simulate the call
+				if ( !requestDone ) {
+					complete();
+				}
+
+				requestDone = true;
+				if ( xhr ) {
+					xhr.onreadystatechange = jQuery.noop;
+				}
+
+			// The transfer is complete and the data is available, or the request timed out
+			} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
+				requestDone = true;
+				xhr.onreadystatechange = jQuery.noop;
+
+				status = isTimeout === "timeout" ?
+					"timeout" :
+					!jQuery.httpSuccess( xhr ) ?
+						"error" :
+						s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
+							"notmodified" :
+							"success";
+
+				var errMsg;
+
+				if ( status === "success" ) {
+					// Watch for, and catch, XML document parse errors
+					try {
+						// process the data (runs the xml through httpData regardless of callback)
+						data = jQuery.httpData( xhr, s.dataType, s );
+					} catch(err) {
+						status = "parsererror";
+						errMsg = err;
+					}
+				}
+
+				// Make sure that the request was successful or notmodified
+				if ( status === "success" || status === "notmodified" ) {
+					// JSONP handles its own success callback
+					if ( !jsonp ) {
+						success();
+					}
+				} else {
+					jQuery.handleError(s, xhr, status, errMsg);
+				}
+
+				// Fire the complete handlers
+				complete();
+
+				if ( isTimeout === "timeout" ) {
+					xhr.abort();
+				}
+
+				// Stop memory leaks
+				if ( s.async ) {
+					xhr = null;
+				}
+			}
+		};
+
+		// Override the abort handler, if we can (IE doesn't allow it, but that's OK)
+		// Opera doesn't fire onreadystatechange at all on abort
+		try {
+			var oldAbort = xhr.abort;
+			xhr.abort = function() {
+				if ( xhr ) {
+					oldAbort.call( xhr );
+				}
+
+				onreadystatechange( "abort" );
+			};
+		} catch(e) { }
+
+		// Timeout checker
+		if ( s.async && s.timeout > 0 ) {
+			setTimeout(function() {
+				// Check to see if the request is still happening
+				if ( xhr && !requestDone ) {
+					onreadystatechange( "timeout" );
+				}
+			}, s.timeout);
+		}
+
+		// Send the data
+		try {
+			xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );
+		} catch(e) {
+			jQuery.handleError(s, xhr, null, e);
+			// Fire the complete handlers
+			complete();
+		}
+
+		// firefox 1.5 doesn't fire statechange for sync requests
+		if ( !s.async ) {
+			onreadystatechange();
+		}
+
+		function success() {
+			// If a local callback was specified, fire it and pass it the data
+			if ( s.success ) {
+				s.success.call( callbackContext, data, status, xhr );
+			}
+
+			// Fire the global callback
+			if ( s.global ) {
+				trigger( "ajaxSuccess", [xhr, s] );
+			}
+		}
+
+		function complete() {
+			// Process result
+			if ( s.complete ) {
+				s.complete.call( callbackContext, xhr, status);
+			}
+
+			// The request was completed
+			if ( s.global ) {
+				trigger( "ajaxComplete", [xhr, s] );
+			}
+
+			// Handle the global AJAX counter
+			if ( s.global && ! --jQuery.active ) {
+				jQuery.event.trigger( "ajaxStop" );
+			}
+		}
+		
+		function trigger(type, args) {
+			(s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);
+		}
+
+		// return XMLHttpRequest to allow aborting the request etc.
+		return xhr;
+	},
+
+	handleError: function( s, xhr, status, e ) {
+		// If a local callback was specified, fire it
+		if ( s.error ) {
+			s.error.call( s.context || s, xhr, status, e );
+		}
+
+		// Fire the global callback
+		if ( s.global ) {
+			(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
+		}
+	},
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Determines if an XMLHttpRequest was successful or not
+	httpSuccess: function( xhr ) {
+		try {
+			// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
+			return !xhr.status && location.protocol === "file:" ||
+				// Opera returns 0 when status is 304
+				( xhr.status >= 200 && xhr.status < 300 ) ||
+				xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;
+		} catch(e) {}
+
+		return false;
+	},
+
+	// Determines if an XMLHttpRequest returns NotModified
+	httpNotModified: function( xhr, url ) {
+		var lastModified = xhr.getResponseHeader("Last-Modified"),
+			etag = xhr.getResponseHeader("Etag");
+
+		if ( lastModified ) {
+			jQuery.lastModified[url] = lastModified;
+		}
+
+		if ( etag ) {
+			jQuery.etag[url] = etag;
+		}
+
+		// Opera returns 0 when status is 304
+		return xhr.status === 304 || xhr.status === 0;
+	},
+
+	httpData: function( xhr, type, s ) {
+		var ct = xhr.getResponseHeader("content-type") || "",
+			xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
+			data = xml ? xhr.responseXML : xhr.responseText;
+
+		if ( xml && data.documentElement.nodeName === "parsererror" ) {
+			jQuery.error( "parsererror" );
+		}
+
+		// Allow a pre-filtering function to sanitize the response
+		// s is checked to keep backwards compatibility
+		if ( s && s.dataFilter ) {
+			data = s.dataFilter( data, type );
+		}
+
+		// The filter can actually parse the response
+		if ( typeof data === "string" ) {
+			// Get the JavaScript object, if JSON is used.
+			if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
+				data = jQuery.parseJSON( data );
+
+			// If the type is "script", eval it in global context
+			} else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
+				jQuery.globalEval( data );
+			}
+		}
+
+		return data;
+	},
+
+	// Serialize an array of form elements or a set of
+	// key/values into a query string
+	param: function( a, traditional ) {
+		var s = [];
+		
+		// Set traditional to true for jQuery <= 1.3.2 behavior.
+		if ( traditional === undefined ) {
+			traditional = jQuery.ajaxSettings.traditional;
+		}
+		
+		// If an array was passed in, assume that it is an array of form elements.
+		if ( jQuery.isArray(a) || a.jquery ) {
+			// Serialize the form elements
+			jQuery.each( a, function() {
+				add( this.name, this.value );
+			});
+			
+		} else {
+			// If traditional, encode the "old" way (the way 1.3.2 or older
+			// did it), otherwise encode params recursively.
+			for ( var prefix in a ) {
+				buildParams( prefix, a[prefix] );
+			}
+		}
+
+		// Return the resulting serialization
+		return s.join("&").replace(r20, "+");
+
+		function buildParams( prefix, obj ) {
+			if ( jQuery.isArray(obj) ) {
+				// Serialize array item.
+				jQuery.each( obj, function( i, v ) {
+					if ( traditional || /\[\]$/.test( prefix ) ) {
+						// Treat each array item as a scalar.
+						add( prefix, v );
+					} else {
+						// If array item is non-scalar (array or object), encode its
+						// numeric index to resolve deserialization ambiguity issues.
+						// Note that rack (as of 1.0.0) can't currently deserialize
+						// nested arrays properly, and attempting to do so may cause
+						// a server error. Possible fixes are to modify rack's
+						// deserialization algorithm or to provide an option or flag
+						// to force array serialization to be shallow.
+						buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v );
+					}
+				});
+					
+			} else if ( !traditional && obj != null && typeof obj === "object" ) {
+				// Serialize object item.
+				jQuery.each( obj, function( k, v ) {
+					buildParams( prefix + "[" + k + "]", v );
+				});
+					
+			} else {
+				// Serialize scalar item.
+				add( prefix, obj );
+			}
+		}
+
+		function add( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction(value) ? value() : value;
+			s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
+		}
+	}
+});
+var elemdisplay = {},
+	rfxtypes = /toggle|show|hide/,
+	rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,
+	timerId,
+	fxAttrs = [
+		// height animations
+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+		// width animations
+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+		// opacity animations
+		[ "opacity" ]
+	];
+
+jQuery.fn.extend({
+	show: function( speed, callback ) {
+		if ( speed || speed === 0) {
+			return this.animate( genFx("show", 3), speed, callback);
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var old = jQuery.data(this[i], "olddisplay");
+
+				this[i].style.display = old || "";
+
+				if ( jQuery.css(this[i], "display") === "none" ) {
+					var nodeName = this[i].nodeName, display;
+
+					if ( elemdisplay[ nodeName ] ) {
+						display = elemdisplay[ nodeName ];
+
+					} else {
+						var elem = jQuery("<" + nodeName + " />").appendTo("body");
+
+						display = elem.css("display");
+
+						if ( display === "none" ) {
+							display = "block";
+						}
+
+						elem.remove();
+
+						elemdisplay[ nodeName ] = display;
+					}
+
+					jQuery.data(this[i], "olddisplay", display);
+				}
+			}
+
+			// Set the display of the elements in a second loop
+			// to avoid the constant reflow
+			for ( var j = 0, k = this.length; j < k; j++ ) {
+				this[j].style.display = jQuery.data(this[j], "olddisplay") || "";
+			}
+
+			return this;
+		}
+	},
+
+	hide: function( speed, callback ) {
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("hide", 3), speed, callback);
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var old = jQuery.data(this[i], "olddisplay");
+				if ( !old && old !== "none" ) {
+					jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
+				}
+			}
+
+			// Set the display of the elements in a second loop
+			// to avoid the constant reflow
+			for ( var j = 0, k = this.length; j < k; j++ ) {
+				this[j].style.display = "none";
+			}
+
+			return this;
+		}
+	},
+
+	// Save the old toggle function
+	_toggle: jQuery.fn.toggle,
+
+	toggle: function( fn, fn2 ) {
+		var bool = typeof fn === "boolean";
+
+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+			this._toggle.apply( this, arguments );
+
+		} else if ( fn == null || bool ) {
+			this.each(function() {
+				var state = bool ? fn : jQuery(this).is(":hidden");
+				jQuery(this)[ state ? "show" : "hide" ]();
+			});
+
+		} else {
+			this.animate(genFx("toggle", 3), fn, fn2);
+		}
+
+		return this;
+	},
+
+	fadeTo: function( speed, to, callback ) {
+		return this.filter(":hidden").css("opacity", 0).show().end()
+					.animate({opacity: to}, speed, callback);
+	},
+
+	animate: function( prop, speed, easing, callback ) {
+		var optall = jQuery.speed(speed, easing, callback);
+
+		if ( jQuery.isEmptyObject( prop ) ) {
+			return this.each( optall.complete );
+		}
+
+		return this[ optall.queue === false ? "each" : "queue" ](function() {
+			var opt = jQuery.extend({}, optall), p,
+				hidden = this.nodeType === 1 && jQuery(this).is(":hidden"),
+				self = this;
+
+			for ( p in prop ) {
+				var name = p.replace(rdashAlpha, fcamelCase);
+
+				if ( p !== name ) {
+					prop[ name ] = prop[ p ];
+					delete prop[ p ];
+					p = name;
+				}
+
+				if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
+					return opt.complete.call(this);
+				}
+
+				if ( ( p === "height" || p === "width" ) && this.style ) {
+					// Store display property
+					opt.display = jQuery.css(this, "display");
+
+					// Make sure that nothing sneaks out
+					opt.overflow = this.style.overflow;
+				}
+
+				if ( jQuery.isArray( prop[p] ) ) {
+					// Create (if needed) and add to specialEasing
+					(opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
+					prop[p] = prop[p][0];
+				}
+			}
+
+			if ( opt.overflow != null ) {
+				this.style.overflow = "hidden";
+			}
+
+			opt.curAnim = jQuery.extend({}, prop);
+
+			jQuery.each( prop, function( name, val ) {
+				var e = new jQuery.fx( self, opt, name );
+
+				if ( rfxtypes.test(val) ) {
+					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
+
+				} else {
+					var parts = rfxnum.exec(val),
+						start = e.cur(true) || 0;
+
+					if ( parts ) {
+						var end = parseFloat( parts[2] ),
+							unit = parts[3] || "px";
+
+						// We need to compute starting value
+						if ( unit !== "px" ) {
+							self.style[ name ] = (end || 1) + unit;
+							start = ((end || 1) / e.cur(true)) * start;
+							self.style[ name ] = start + unit;
+						}
+
+						// If a +=/-= token was provided, we're doing a relative animation
+						if ( parts[1] ) {
+							end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
+						}
+
+						e.custom( start, end, unit );
+
+					} else {
+						e.custom( start, val, "" );
+					}
+				}
+			});
+
+			// For JS strict compliance
+			return true;
+		});
+	},
+
+	stop: function( clearQueue, gotoEnd ) {
+		var timers = jQuery.timers;
+
+		if ( clearQueue ) {
+			this.queue([]);
+		}
+
+		this.each(function() {
+			// go in reverse order so anything added to the queue during the loop is ignored
+			for ( var i = timers.length - 1; i >= 0; i-- ) {
+				if ( timers[i].elem === this ) {
+					if (gotoEnd) {
+						// force the next step to be the last
+						timers[i](true);
+					}
+
+					timers.splice(i, 1);
+				}
+			}
+		});
+
+		// start the next in the queue if the last step wasn't forced
+		if ( !gotoEnd ) {
+			this.dequeue();
+		}
+
+		return this;
+	}
+
+});
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show", 1),
+	slideUp: genFx("hide", 1),
+	slideToggle: genFx("toggle", 1),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, callback ) {
+		return this.animate( props, speed, callback );
+	};
+});
+
+jQuery.extend({
+	speed: function( speed, easing, fn ) {
+		var opt = speed && typeof speed === "object" ? speed : {
+			complete: fn || !fn && easing ||
+				jQuery.isFunction( speed ) && speed,
+			duration: speed,
+			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+		};
+
+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+			jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;
+
+		// Queueing
+		opt.old = opt.complete;
+		opt.complete = function() {
+			if ( opt.queue !== false ) {
+				jQuery(this).dequeue();
+			}
+			if ( jQuery.isFunction( opt.old ) ) {
+				opt.old.call( this );
+			}
+		};
+
+		return opt;
+	},
+
+	easing: {
+		linear: function( p, n, firstNum, diff ) {
+			return firstNum + diff * p;
+		},
+		swing: function( p, n, firstNum, diff ) {
+			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+		}
+	},
+
+	timers: [],
+
+	fx: function( elem, options, prop ) {
+		this.options = options;
+		this.elem = elem;
+		this.prop = prop;
+
+		if ( !options.orig ) {
+			options.orig = {};
+		}
+	}
+
+});
+
+jQuery.fx.prototype = {
+	// Simple function for setting a style value
+	update: function() {
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+
+		// Set display property to block for height/width animations
+		if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) {
+			this.elem.style.display = "block";
+		}
+	},
+
+	// Get the current size
+	cur: function( force ) {
+		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+			return this.elem[ this.prop ];
+		}
+
+		var r = parseFloat(jQuery.css(this.elem, this.prop, force));
+		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
+	},
+
+	// Start an animation from one number to another
+	custom: function( from, to, unit ) {
+		this.startTime = now();
+		this.start = from;
+		this.end = to;
+		this.unit = unit || this.unit || "px";
+		this.now = this.start;
+		this.pos = this.state = 0;
+
+		var self = this;
+		function t( gotoEnd ) {
+			return self.step(gotoEnd);
+		}
+
+		t.elem = this.elem;
+
+		if ( t() && jQuery.timers.push(t) && !timerId ) {
+			timerId = setInterval(jQuery.fx.tick, 13);
+		}
+	},
+
+	// Simple 'show' function
+	show: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+		this.options.show = true;
+
+		// Begin the animation
+		// Make sure that we start at a small width/height to avoid any
+		// flash of content
+		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
+
+		// Start by showing the element
+		jQuery( this.elem ).show();
+	},
+
+	// Simple 'hide' function
+	hide: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+		this.options.hide = true;
+
+		// Begin the animation
+		this.custom(this.cur(), 0);
+	},
+
+	// Each step of an animation
+	step: function( gotoEnd ) {
+		var t = now(), done = true;
+
+		if ( gotoEnd || t >= this.options.duration + this.startTime ) {
+			this.now = this.end;
+			this.pos = this.state = 1;
+			this.update();
+
+			this.options.curAnim[ this.prop ] = true;
+
+			for ( var i in this.options.curAnim ) {
+				if ( this.options.curAnim[i] !== true ) {
+					done = false;
+				}
+			}
+
+			if ( done ) {
+				if ( this.options.display != null ) {
+					// Reset the overflow
+					this.elem.style.overflow = this.options.overflow;
+
+					// Reset the display
+					var old = jQuery.data(this.elem, "olddisplay");
+					this.elem.style.display = old ? old : this.options.display;
+
+					if ( jQuery.css(this.elem, "display") === "none" ) {
+						this.elem.style.display = "block";
+					}
+				}
+
+				// Hide the element if the "hide" operation was done
+				if ( this.options.hide ) {
+					jQuery(this.elem).hide();
+				}
+
+				// Reset the properties, if the item has been hidden or shown
+				if ( this.options.hide || this.options.show ) {
+					for ( var p in this.options.curAnim ) {
+						jQuery.style(this.elem, p, this.options.orig[p]);
+					}
+				}
+
+				// Execute the complete function
+				this.options.complete.call( this.elem );
+			}
+
+			return false;
+
+		} else {
+			var n = t - this.startTime;
+			this.state = n / this.options.duration;
+
+			// Perform the easing function, defaults to swing
+			var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
+			var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
+			this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
+			this.now = this.start + ((this.end - this.start) * this.pos);
+
+			// Perform the next step of the animation
+			this.update();
+		}
+
+		return true;
+	}
+};
+
+jQuery.extend( jQuery.fx, {
+	tick: function() {
+		var timers = jQuery.timers;
+
+		for ( var i = 0; i < timers.length; i++ ) {
+			if ( !timers[i]() ) {
+				timers.splice(i--, 1);
+			}
+		}
+
+		if ( !timers.length ) {
+			jQuery.fx.stop();
+		}
+	},
+		
+	stop: function() {
+		clearInterval( timerId );
+		timerId = null;
+	},
+	
+	speeds: {
+		slow: 600,
+ 		fast: 200,
+ 		// Default speed
+ 		_default: 400
+	},
+
+	step: {
+		opacity: function( fx ) {
+			jQuery.style(fx.elem, "opacity", fx.now);
+		},
+
+		_default: function( fx ) {
+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+			} else {
+				fx.elem[ fx.prop ] = fx.now;
+			}
+		}
+	}
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+
+function genFx( type, num ) {
+	var obj = {};
+
+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+		obj[ this ] = type;
+	});
+
+	return obj;
+}
+if ( "getBoundingClientRect" in document.documentElement ) {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0];
+
+		if ( options ) { 
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement,
+			clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
+			top  = box.top  + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop,
+			left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
+
+		return { top: top, left: left };
+	};
+
+} else {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0];
+
+		if ( options ) { 
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		jQuery.offset.initialize();
+
+		var offsetParent = elem.offsetParent, prevOffsetParent = elem,
+			doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
+			body = doc.body, defaultView = doc.defaultView,
+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+			top = elem.offsetTop, left = elem.offsetLeft;
+
+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+				break;
+			}
+
+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+			top  -= elem.scrollTop;
+			left -= elem.scrollLeft;
+
+			if ( elem === offsetParent ) {
+				top  += elem.offsetTop;
+				left += elem.offsetLeft;
+
+				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) {
+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+				}
+
+				prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
+			}
+
+			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+			}
+
+			prevComputedStyle = computedStyle;
+		}
+
+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+			top  += body.offsetTop;
+			left += body.offsetLeft;
+		}
+
+		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+			top  += Math.max( docElem.scrollTop, body.scrollTop );
+			left += Math.max( docElem.scrollLeft, body.scrollLeft );
+		}
+
+		return { top: top, left: left };
+	};
+}
+
+jQuery.offset = {
+	initialize: function() {
+		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0,
+			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+
+		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
+
+		container.innerHTML = html;
+		body.insertBefore( container, body.firstChild );
+		innerDiv = container.firstChild;
+		checkDiv = innerDiv.firstChild;
+		td = innerDiv.nextSibling.firstChild.firstChild;
+
+		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
+		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
+
+		checkDiv.style.position = "fixed", checkDiv.style.top = "20px";
+		// safari subtracts parent border width here which is 5px
+		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+		checkDiv.style.position = checkDiv.style.top = "";
+
+		innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative";
+		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
+
+		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+
+		body.removeChild( container );
+		body = container = innerDiv = checkDiv = table = td = null;
+		jQuery.offset.initialize = jQuery.noop;
+	},
+
+	bodyOffset: function( body ) {
+		var top = body.offsetTop, left = body.offsetLeft;
+
+		jQuery.offset.initialize();
+
+		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+			top  += parseFloat( jQuery.curCSS(body, "marginTop",  true) ) || 0;
+			left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0;
+		}
+
+		return { top: top, left: left };
+	},
+	
+	setOffset: function( elem, options, i ) {
+		// set position first, in-case top/left are set even on static elem
+		if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {
+			elem.style.position = "relative";
+		}
+		var curElem   = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curTop    = parseInt( jQuery.curCSS( elem, "top",  true ), 10 ) || 0,
+			curLeft   = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0;
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		var props = {
+			top:  (options.top  - curOffset.top)  + curTop,
+			left: (options.left - curOffset.left) + curLeft
+		};
+		
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+	position: function() {
+		if ( !this[0] ) {
+			return null;
+		}
+
+		var elem = this[0],
+
+		// Get *real* offsetParent
+		offsetParent = this.offsetParent(),
+
+		// Get correct offsets
+		offset       = this.offset(),
+		parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+		// Subtract element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		offset.top  -= parseFloat( jQuery.curCSS(elem, "marginTop",  true) ) || 0;
+		offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0;
+
+		// Add offsetParent borders
+		parentOffset.top  += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth",  true) ) || 0;
+		parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0;
+
+		// Subtract the two offsets
+		return {
+			top:  offset.top  - parentOffset.top,
+			left: offset.left - parentOffset.left
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.body;
+			while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+	var method = "scroll" + name;
+
+	jQuery.fn[ method ] = function(val) {
+		var elem = this[0], win;
+		
+		if ( !elem ) {
+			return null;
+		}
+
+		if ( val !== undefined ) {
+			// Set the scroll offset
+			return this.each(function() {
+				win = getWindow( this );
+
+				if ( win ) {
+					win.scrollTo(
+						!i ? val : jQuery(win).scrollLeft(),
+						 i ? val : jQuery(win).scrollTop()
+					);
+
+				} else {
+					this[ method ] = val;
+				}
+			});
+		} else {
+			win = getWindow( elem );
+
+			// Return the scroll offset
+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+				jQuery.support.boxModel && win.document.documentElement[ method ] ||
+					win.document.body[ method ] :
+				elem[ method ];
+		}
+	};
+});
+
+function getWindow( elem ) {
+	return ("scrollTo" in elem && elem.document) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+// Create innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+	var type = name.toLowerCase();
+
+	// innerHeight and innerWidth
+	jQuery.fn["inner" + name] = function() {
+		return this[0] ?
+			jQuery.css( this[0], type, false, "padding" ) :
+			null;
+	};
+
+	// outerHeight and outerWidth
+	jQuery.fn["outer" + name] = function( margin ) {
+		return this[0] ?
+			jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :
+			null;
+	};
+
+	jQuery.fn[ type ] = function( size ) {
+		// Get window width or height
+		var elem = this[0];
+		if ( !elem ) {
+			return size == null ? null : this;
+		}
+		
+		if ( jQuery.isFunction( size ) ) {
+			return this.each(function( i ) {
+				var self = jQuery( this );
+				self[ type ]( size.call( this, i, self[ type ]() ) );
+			});
+		}
+
+		return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?
+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+			elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
+			elem.document.body[ "client" + name ] :
+
+			// Get document width or height
+			(elem.nodeType === 9) ? // is it a document
+				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+				Math.max(
+					elem.documentElement["client" + name],
+					elem.body["scroll" + name], elem.documentElement["scroll" + name],
+					elem.body["offset" + name], elem.documentElement["offset" + name]
+				) :
+
+				// Get or set width or height on the element
+				size === undefined ?
+					// Get width or height on the element
+					jQuery.css( elem, type ) :
+
+					// Set the width or height on the element (default to pixels if value is unitless)
+					this.css( type, typeof size === "string" ? size : size + "px" );
+	};
+
+});
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+})(window);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/jquery.min.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,154 @@
+/*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
+e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
+j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
+"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
+true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
+c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
+L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
+"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
+d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
+a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
+!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
+true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
+w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
+cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
+i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
+" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
+this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
+e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
+c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
+a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
+function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
+k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
+C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
+null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
+e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
+f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
+if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
+"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
+a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
+isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
+{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
+if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
+e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
+"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
+d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
+!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
+toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
+u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
+function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
+if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
+t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
+g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
+for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
+1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
+relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
+l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
+h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
+CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
+g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
+text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
+setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
+h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
+m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
+"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
+h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
+!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
+h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
+q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
+if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
+(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
+function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
+gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
+c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
+{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
+"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
+d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
+a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
+1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
+a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
+""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
+this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
+u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
+1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
+return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
+""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
+c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
+c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
+function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
+Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
+"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
+a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
+a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
+"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
+serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
+function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
+global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
+e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
+"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
+false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
+false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
+c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
+d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
+g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
+1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
+"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
+if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
+this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
+"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
+animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
+j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
+this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
+"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
+c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
+this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
+this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
+e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
+c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
+function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
+this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
+k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
+f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
+c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
+d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
+f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
+"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
+e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/prepopulate.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,34 @@
+(function($) {
+    $.fn.prepopulate = function(dependencies, maxLength) {
+        /*
+            Depends on urlify.js
+            Populates a selected field with the values of the dependent fields,
+            URLifies and shortens the string. 
+            dependencies - selected jQuery object of dependent fields
+            maxLength - maximum length of the URLify'd string 
+        */
+        return this.each(function() {
+            var field = $(this);
+
+            field.data('_changed', false);
+            field.change(function() {
+                field.data('_changed', true);
+            });
+
+            var populate = function () {
+                // Bail if the fields value has changed
+                if (field.data('_changed') == true) return;
+ 
+                var values = [];
+                dependencies.each(function() {
+                    if ($(this).val().length > 0) {
+                        values.push($(this).val());
+                    }
+                });
+                field.val(URLify(values.join(' '), maxLength));
+            };
+
+            dependencies.keyup(populate).change(populate).focus(populate);
+        });
+    };
+})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admin/media/js/prepopulate.min.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+(function(b){b.fn.prepopulate=function(d,f){return this.each(function(){var a=b(this);a.data("_changed",false);a.change(function(){a.data("_changed",true)});var c=function(){if(a.data("_changed")!=true){var e=[];d.each(function(){b(this).val().length>0&&e.push(b(this).val())});a.val(URLify(e.join(" "),f))}};d.keyup(c).change(c).focus(c)})}})(django.jQuery);
--- a/web/lib/django/contrib/admin/options.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/options.py	Tue May 25 02:43:45 2010 +0200
@@ -6,11 +6,14 @@
 from django.contrib.admin import widgets
 from django.contrib.admin import helpers
 from django.contrib.admin.util import unquote, flatten_fieldsets, get_deleted_objects, model_ngettext, model_format_dict
-from django.core.exceptions import PermissionDenied
+from django.contrib import messages
+from django.views.decorators.csrf import csrf_protect
+from django.core.exceptions import PermissionDenied, ValidationError
 from django.db import models, transaction
 from django.db.models.fields import BLANK_CHOICE_DASH
 from django.http import Http404, HttpResponse, HttpResponseRedirect
 from django.shortcuts import get_object_or_404, render_to_response
+from django.utils.decorators import method_decorator
 from django.utils.datastructures import SortedDict
 from django.utils.functional import update_wrapper
 from django.utils.html import escape
@@ -20,10 +23,6 @@
 from django.utils.translation import ugettext as _
 from django.utils.translation import ungettext, ugettext_lazy
 from django.utils.encoding import force_unicode
-try:
-    set
-except NameError:
-    from sets import Set as set     # Python 2.3 fallback
 
 HORIZONTAL, VERTICAL = 1, 2
 # returns the <ul> class for a given radio_admin field
@@ -40,19 +39,22 @@
         'form_class': forms.SplitDateTimeField,
         'widget': widgets.AdminSplitDateTime
     },
-    models.DateField:    {'widget': widgets.AdminDateWidget},
-    models.TimeField:    {'widget': widgets.AdminTimeWidget},
-    models.TextField:    {'widget': widgets.AdminTextareaWidget},
-    models.URLField:     {'widget': widgets.AdminURLFieldWidget},
-    models.IntegerField: {'widget': widgets.AdminIntegerFieldWidget},
-    models.CharField:    {'widget': widgets.AdminTextInputWidget},
-    models.ImageField:   {'widget': widgets.AdminFileWidget},
-    models.FileField:    {'widget': widgets.AdminFileWidget},
+    models.DateField:       {'widget': widgets.AdminDateWidget},
+    models.TimeField:       {'widget': widgets.AdminTimeWidget},
+    models.TextField:       {'widget': widgets.AdminTextareaWidget},
+    models.URLField:        {'widget': widgets.AdminURLFieldWidget},
+    models.IntegerField:    {'widget': widgets.AdminIntegerFieldWidget},
+    models.BigIntegerField: {'widget': widgets.AdminIntegerFieldWidget},
+    models.CharField:       {'widget': widgets.AdminTextInputWidget},
+    models.ImageField:      {'widget': widgets.AdminFileWidget},
+    models.FileField:       {'widget': widgets.AdminFileWidget},
 }
 
+csrf_protect_m = method_decorator(csrf_protect)
 
 class BaseModelAdmin(object):
     """Functionality common to both ModelAdmin and InlineAdmin."""
+    __metaclass__ = forms.MediaDefiningClass
 
     raw_id_fields = ()
     fields = None
@@ -64,9 +66,12 @@
     radio_fields = {}
     prepopulated_fields = {}
     formfield_overrides = {}
+    readonly_fields = ()
 
     def __init__(self):
-        self.formfield_overrides = dict(FORMFIELD_FOR_DBFIELD_DEFAULTS, **self.formfield_overrides)
+        overrides = FORMFIELD_FOR_DBFIELD_DEFAULTS.copy()
+        overrides.update(self.formfield_overrides)
+        self.formfield_overrides = overrides
 
     def formfield_for_dbfield(self, db_field, **kwargs):
         """
@@ -138,8 +143,9 @@
         """
         Get a form Field for a ForeignKey.
         """
+        db = kwargs.get('using')
         if db_field.name in self.raw_id_fields:
-            kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.rel)
+            kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.rel, using=db)
         elif db_field.name in self.radio_fields:
             kwargs['widget'] = widgets.AdminRadioSelect(attrs={
                 'class': get_ul_class(self.radio_fields[db_field.name]),
@@ -152,12 +158,14 @@
         """
         Get a form Field for a ManyToManyField.
         """
-        # If it uses an intermediary model, don't show field in admin.
-        if db_field.rel.through is not None:
+        # If it uses an intermediary model that isn't auto created, don't show
+        # a field in admin.
+        if not db_field.rel.through._meta.auto_created:
             return None
+        db = kwargs.get('using')
 
         if db_field.name in self.raw_id_fields:
-            kwargs['widget'] = widgets.ManyToManyRawIdWidget(db_field.rel)
+            kwargs['widget'] = widgets.ManyToManyRawIdWidget(db_field.rel, using=db)
             kwargs['help_text'] = ''
         elif db_field.name in (list(self.filter_vertical) + list(self.filter_horizontal)):
             kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
@@ -172,9 +180,11 @@
         return None
     declared_fieldsets = property(_declared_fieldsets)
 
+    def get_readonly_fields(self, request, obj=None):
+        return self.readonly_fields
+
 class ModelAdmin(BaseModelAdmin):
     "Encapsulates all admin options and functionality for a given model."
-    __metaclass__ = forms.MediaDefiningClass
 
     list_display = ('__str__',)
     list_display_links = ()
@@ -190,9 +200,11 @@
     inlines = []
 
     # Custom templates (designed to be over-ridden in subclasses)
+    add_form_template = None
     change_form_template = None
     change_list_template = None
     delete_confirmation_template = None
+    delete_selected_confirmation_template = None
     object_history_template = None
 
     # Actions
@@ -200,6 +212,7 @@
     action_form = helpers.ActionForm
     actions_on_top = True
     actions_on_bottom = False
+    actions_selection_counter = True
 
     def __init__(self, model, admin_site):
         self.model = model
@@ -254,11 +267,13 @@
     def _media(self):
         from django.conf import settings
 
-        js = ['js/core.js', 'js/admin/RelatedObjectLookups.js']
+        js = ['js/core.js', 'js/admin/RelatedObjectLookups.js',
+              'js/jquery.min.js', 'js/jquery.init.js']
         if self.actions is not None:
-            js.extend(['js/getElementsBySelector.js', 'js/actions.js'])
+            js.extend(['js/actions.min.js'])
         if self.prepopulated_fields:
             js.append('js/urlify.js')
+            js.append('js/prepopulate.min.js')
         if self.opts.get_ordered_objects():
             js.extend(['js/getElementsBySelector.js', 'js/dom-drag.js' , 'js/admin/ordering.js'])
 
@@ -321,7 +336,8 @@
         if self.declared_fieldsets:
             return self.declared_fieldsets
         form = self.get_form(request, obj)
-        return [(None, {'fields': form.base_fields.keys()})]
+        fields = form.base_fields.keys() + list(self.get_readonly_fields(request, obj))
+        return [(None, {'fields': fields})]
 
     def get_form(self, request, obj=None, **kwargs):
         """
@@ -336,17 +352,41 @@
             exclude = []
         else:
             exclude = list(self.exclude)
+        exclude.extend(kwargs.get("exclude", []))
+        exclude.extend(self.get_readonly_fields(request, obj))
         # if exclude is an empty list we pass None to be consistant with the
         # default on modelform_factory
+        exclude = exclude or None
         defaults = {
             "form": self.form,
             "fields": fields,
-            "exclude": (exclude + kwargs.get("exclude", [])) or None,
+            "exclude": exclude,
             "formfield_callback": curry(self.formfield_for_dbfield, request=request),
         }
         defaults.update(kwargs)
         return modelform_factory(self.model, **defaults)
 
+    def get_changelist(self, request, **kwargs):
+        """
+        Returns the ChangeList class for use on the changelist page.
+        """
+        from django.contrib.admin.views.main import ChangeList
+        return ChangeList
+
+    def get_object(self, request, object_id):
+        """
+        Returns an instance matching the primary key provided. ``None``  is
+        returned if no match is found (or the object_id failed validation
+        against the primary key field).
+        """
+        queryset = self.queryset(request)
+        model = queryset.model
+        try:
+            object_id = model._meta.pk.to_python(object_id)
+            return queryset.get(pk=object_id)
+        except (model.DoesNotExist, ValidationError):
+            return None
+
     def get_changelist_form(self, request, **kwargs):
         """
         Returns a Form class for use in the Formset on the changelist page.
@@ -522,16 +562,16 @@
             for formset in formsets:
                 for added_object in formset.new_objects:
                     change_message.append(_('Added %(name)s "%(object)s".')
-                                          % {'name': added_object._meta.verbose_name,
+                                          % {'name': force_unicode(added_object._meta.verbose_name),
                                              'object': force_unicode(added_object)})
                 for changed_object, changed_fields in formset.changed_objects:
                     change_message.append(_('Changed %(list)s for %(name)s "%(object)s".')
                                           % {'list': get_text_list(changed_fields, _('and')),
-                                             'name': changed_object._meta.verbose_name,
+                                             'name': force_unicode(changed_object._meta.verbose_name),
                                              'object': force_unicode(changed_object)})
                 for deleted_object in formset.deleted_objects:
                     change_message.append(_('Deleted %(name)s "%(object)s".')
-                                          % {'name': deleted_object._meta.verbose_name,
+                                          % {'name': force_unicode(deleted_object._meta.verbose_name),
                                              'object': force_unicode(deleted_object)})
         change_message = ' '.join(change_message)
         return change_message or _('No fields changed.')
@@ -539,9 +579,9 @@
     def message_user(self, request, message):
         """
         Send a message to the user. The default implementation
-        posts a message using the auth Message object.
+        posts a message using the django.contrib.messages backend.
         """
-        request.user.message_set.create(message=message)
+        messages.info(request, message)
 
     def save_form(self, request, form, change):
         """
@@ -582,8 +622,12 @@
             'save_on_top': self.save_on_top,
             'root_path': self.admin_site.root_path,
         })
+        if add and self.add_form_template is not None:
+            form_template = self.add_form_template
+        else:
+            form_template = self.change_form_template
         context_instance = template.RequestContext(request, current_app=self.admin_site.name)
-        return render_to_response(self.change_form_template or [
+        return render_to_response(form_template or [
             "admin/%s/%s/change_form.html" % (app_label, opts.object_name.lower()),
             "admin/%s/change_form.html" % app_label,
             "admin/change_form.html"
@@ -655,6 +699,7 @@
         changelist; it returns an HttpResponse if the action was handled, and
         None otherwise.
         """
+
         # There can be multiple action forms on the page (at the top
         # and bottom of the change list, for example). Get the action
         # whose button was pushed.
@@ -683,15 +728,25 @@
         # If the form's valid we can handle the action.
         if action_form.is_valid():
             action = action_form.cleaned_data['action']
+            select_across = action_form.cleaned_data['select_across']
             func, name, description = self.get_actions(request)[action]
 
             # Get the list of selected PKs. If nothing's selected, we can't
-            # perform an action on it, so bail.
+            # perform an action on it, so bail. Except we want to perform
+            # the action explicitly on all objects.
             selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)
-            if not selected:
+            if not selected and not select_across:
+                # Reminder that something needs to be selected or nothing will happen
+                msg = _("Items must be selected in order to perform "
+                        "actions on them. No items have been changed.")
+                self.message_user(request, msg)
                 return None
 
-            response = func(self, request, queryset.filter(pk__in=selected))
+            if not select_across:
+                # Perform the action only on the selected objects
+                queryset = queryset.filter(pk__in=selected)
+
+            response = func(self, request, queryset)
 
             # Actions may return an HttpResponse, which will be used as the
             # response from the POST. If not, we'll be a good little HTTP
@@ -700,7 +755,13 @@
                 return response
             else:
                 return HttpResponseRedirect(".")
+        else:
+            msg = _("No action selected.")
+            self.message_user(request, msg)
+            return None
 
+    @csrf_protect_m
+    @transaction.commit_on_success
     def add_view(self, request, form_url='', extra_context=None):
         "The 'add' admin view for this model."
         model = self.model
@@ -714,13 +775,13 @@
         if request.method == 'POST':
             form = ModelForm(request.POST, request.FILES)
             if form.is_valid():
+                new_object = self.save_form(request, form, change=False)
                 form_validated = True
-                new_object = self.save_form(request, form, change=False)
             else:
                 form_validated = False
                 new_object = self.model()
             prefixes = {}
-            for FormSet in self.get_formsets(request):
+            for FormSet, inline in zip(self.get_formsets(request), self.inline_instances):
                 prefix = FormSet.get_default_prefix()
                 prefixes[prefix] = prefixes.get(prefix, 0) + 1
                 if prefixes[prefix] != 1:
@@ -728,7 +789,7 @@
                 formset = FormSet(data=request.POST, files=request.FILES,
                                   instance=new_object,
                                   save_as_new=request.POST.has_key("_saveasnew"),
-                                  prefix=prefix)
+                                  prefix=prefix, queryset=inline.queryset(request))
                 formsets.append(formset)
             if all_valid(formsets) and form_validated:
                 self.save_model(request, new_object, form, change=False)
@@ -751,21 +812,27 @@
                     initial[k] = initial[k].split(",")
             form = ModelForm(initial=initial)
             prefixes = {}
-            for FormSet in self.get_formsets(request):
+            for FormSet, inline in zip(self.get_formsets(request),
+                                       self.inline_instances):
                 prefix = FormSet.get_default_prefix()
                 prefixes[prefix] = prefixes.get(prefix, 0) + 1
                 if prefixes[prefix] != 1:
                     prefix = "%s-%s" % (prefix, prefixes[prefix])
-                formset = FormSet(instance=self.model(), prefix=prefix)
+                formset = FormSet(instance=self.model(), prefix=prefix,
+                                  queryset=inline.queryset(request))
                 formsets.append(formset)
 
-        adminForm = helpers.AdminForm(form, list(self.get_fieldsets(request)), self.prepopulated_fields)
+        adminForm = helpers.AdminForm(form, list(self.get_fieldsets(request)),
+            self.prepopulated_fields, self.get_readonly_fields(request),
+            model_admin=self)
         media = self.media + adminForm.media
 
         inline_admin_formsets = []
         for inline, formset in zip(self.inline_instances, formsets):
             fieldsets = list(inline.get_fieldsets(request))
-            inline_admin_formset = helpers.InlineAdminFormSet(inline, formset, fieldsets)
+            readonly = list(inline.get_readonly_fields(request))
+            inline_admin_formset = helpers.InlineAdminFormSet(inline, formset,
+                fieldsets, readonly, model_admin=self)
             inline_admin_formsets.append(inline_admin_formset)
             media = media + inline_admin_formset.media
 
@@ -782,20 +849,15 @@
         }
         context.update(extra_context or {})
         return self.render_change_form(request, context, form_url=form_url, add=True)
-    add_view = transaction.commit_on_success(add_view)
 
+    @csrf_protect_m
+    @transaction.commit_on_success
     def change_view(self, request, object_id, extra_context=None):
         "The 'change' admin view for this model."
         model = self.model
         opts = model._meta
 
-        try:
-            obj = self.queryset(request).get(pk=unquote(object_id))
-        except model.DoesNotExist:
-            # Don't raise Http404 just yet, because we haven't checked
-            # permissions yet. We don't want an unauthenticated user to be able
-            # to determine whether a given object exists.
-            obj = None
+        obj = self.get_object(request, unquote(object_id))
 
         if not self.has_change_permission(request, obj):
             raise PermissionDenied
@@ -817,13 +879,16 @@
                 form_validated = False
                 new_object = obj
             prefixes = {}
-            for FormSet in self.get_formsets(request, new_object):
+            for FormSet, inline in zip(self.get_formsets(request, new_object),
+                                       self.inline_instances):
                 prefix = FormSet.get_default_prefix()
                 prefixes[prefix] = prefixes.get(prefix, 0) + 1
                 if prefixes[prefix] != 1:
                     prefix = "%s-%s" % (prefix, prefixes[prefix])
                 formset = FormSet(request.POST, request.FILES,
-                                  instance=new_object, prefix=prefix)
+                                  instance=new_object, prefix=prefix,
+                                  queryset=inline.queryset(request))
+
                 formsets.append(formset)
 
             if all_valid(formsets) and form_validated:
@@ -839,21 +904,26 @@
         else:
             form = ModelForm(instance=obj)
             prefixes = {}
-            for FormSet in self.get_formsets(request, obj):
+            for FormSet, inline in zip(self.get_formsets(request, obj), self.inline_instances):
                 prefix = FormSet.get_default_prefix()
                 prefixes[prefix] = prefixes.get(prefix, 0) + 1
                 if prefixes[prefix] != 1:
                     prefix = "%s-%s" % (prefix, prefixes[prefix])
-                formset = FormSet(instance=obj, prefix=prefix)
+                formset = FormSet(instance=obj, prefix=prefix,
+                                  queryset=inline.queryset(request))
                 formsets.append(formset)
 
-        adminForm = helpers.AdminForm(form, self.get_fieldsets(request, obj), self.prepopulated_fields)
+        adminForm = helpers.AdminForm(form, self.get_fieldsets(request, obj),
+            self.prepopulated_fields, self.get_readonly_fields(request, obj),
+            model_admin=self)
         media = self.media + adminForm.media
 
         inline_admin_formsets = []
         for inline, formset in zip(self.inline_instances, formsets):
             fieldsets = list(inline.get_fieldsets(request, obj))
-            inline_admin_formset = helpers.InlineAdminFormSet(inline, formset, fieldsets)
+            readonly = list(inline.get_readonly_fields(request, obj))
+            inline_admin_formset = helpers.InlineAdminFormSet(inline, formset,
+                fieldsets, readonly, model_admin=self)
             inline_admin_formsets.append(inline_admin_formset)
             media = media + inline_admin_formset.media
 
@@ -871,11 +941,11 @@
         }
         context.update(extra_context or {})
         return self.render_change_form(request, context, change=True, obj=obj)
-    change_view = transaction.commit_on_success(change_view)
 
+    @csrf_protect_m
     def changelist_view(self, request, extra_context=None):
         "The 'change list' admin view for this model."
-        from django.contrib.admin.views.main import ChangeList, ERROR_FLAG
+        from django.contrib.admin.views.main import ERROR_FLAG
         opts = self.model._meta
         app_label = opts.app_label
         if not self.has_change_permission(request, None):
@@ -892,26 +962,53 @@
             except ValueError:
                 pass
 
+        ChangeList = self.get_changelist(request)
         try:
             cl = ChangeList(request, self.model, list_display, self.list_display_links, self.list_filter,
                 self.date_hierarchy, self.search_fields, self.list_select_related, self.list_per_page, self.list_editable, self)
         except IncorrectLookupParameters:
             # Wacky lookup parameters were given, so redirect to the main
             # changelist page, without parameters, and pass an 'invalid=1'
-            # parameter via the query string. If wacky parameters were given and
-            # the 'invalid=1' parameter was already in the query string, something
-            # is screwed up with the database, so display an error page.
+            # parameter via the query string. If wacky parameters were given
+            # and the 'invalid=1' parameter was already in the query string,
+            # something is screwed up with the database, so display an error
+            # page.
             if ERROR_FLAG in request.GET.keys():
                 return render_to_response('admin/invalid_setup.html', {'title': _('Database error')})
             return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1')
 
-        # If the request was POSTed, this might be a bulk action or a bulk edit.
-        # Try to look up an action first, but if this isn't an action the POST
-        # will fall through to the bulk edit check, below.
-        if actions and request.method == 'POST':
-            response = self.response_action(request, queryset=cl.get_query_set())
-            if response:
-                return response
+        # If the request was POSTed, this might be a bulk action or a bulk
+        # edit. Try to look up an action or confirmation first, but if this
+        # isn't an action the POST will fall through to the bulk edit check,
+        # below.
+        action_failed = False
+        selected = request.POST.getlist(helpers.ACTION_CHECKBOX_NAME)
+
+        # Actions with no confirmation
+        if (actions and request.method == 'POST' and
+                'index' in request.POST and '_save' not in request.POST):
+            if selected:
+                response = self.response_action(request, queryset=cl.get_query_set())
+                if response:
+                    return response
+                else:
+                    action_failed = True
+            else:
+                msg = _("Items must be selected in order to perform "
+                        "actions on them. No items have been changed.")
+                self.message_user(request, msg)
+                action_failed = True
+
+        # Actions with confirmation
+        if (actions and request.method == 'POST' and
+                helpers.ACTION_CHECKBOX_NAME in request.POST and
+                'index' not in request.POST and '_save' not in request.POST):
+            if selected:
+                response = self.response_action(request, queryset=cl.get_query_set())
+                if response:
+                    return response
+                else:
+                    action_failed = True
 
         # If we're allowing changelist editing, we need to construct a formset
         # for the changelist given all the fields to be edited. Then we'll
@@ -919,7 +1016,8 @@
         formset = cl.formset = None
 
         # Handle POSTed bulk-edit data.
-        if request.method == "POST" and self.list_editable:
+        if (request.method == "POST" and self.list_editable and
+                '_save' in request.POST and not action_failed):
             FormSet = self.get_changelist_formset(request)
             formset = cl.formset = FormSet(request.POST, request.FILES, queryset=cl.result_list)
             if formset.is_valid():
@@ -965,7 +1063,13 @@
         else:
             action_form = None
 
+        selection_note_all = ungettext('%(total_count)s selected',
+            'All %(total_count)s selected', cl.result_count)
+
         context = {
+            'module_name': force_unicode(opts.verbose_name_plural),
+            'selection_note': _('0 of %(cnt)s selected') % {'cnt': len(cl.result_list)},
+            'selection_note_all': selection_note_all % {'total_count': cl.result_count},
             'title': cl.title,
             'is_popup': cl.is_popup,
             'cl': cl,
@@ -976,6 +1080,7 @@
             'action_form': action_form,
             'actions_on_top': self.actions_on_top,
             'actions_on_bottom': self.actions_on_bottom,
+            'actions_selection_counter': self.actions_selection_counter,
         }
         context.update(extra_context or {})
         context_instance = template.RequestContext(request, current_app=self.admin_site.name)
@@ -985,18 +1090,13 @@
             'admin/change_list.html'
         ], context, context_instance=context_instance)
 
+    @csrf_protect_m
     def delete_view(self, request, object_id, extra_context=None):
         "The 'delete' admin view for this model."
         opts = self.model._meta
         app_label = opts.app_label
 
-        try:
-            obj = self.queryset(request).get(pk=unquote(object_id))
-        except self.model.DoesNotExist:
-            # Don't raise Http404 just yet, because we haven't checked
-            # permissions yet. We don't want an unauthenticated user to be able
-            # to determine whether a given object exists.
-            obj = None
+        obj = self.get_object(request, unquote(object_id))
 
         if not self.has_delete_permission(request, obj):
             raise PermissionDenied
@@ -1006,9 +1106,7 @@
 
         # Populate deleted_objects, a data structure of all related objects that
         # will also be deleted.
-        deleted_objects = [mark_safe(u'%s: <a href="../../%s/">%s</a>' % (escape(force_unicode(capfirst(opts.verbose_name))), object_id, escape(obj))), []]
-        perms_needed = set()
-        get_deleted_objects(deleted_objects, perms_needed, request.user, obj, opts, 1, self.admin_site)
+        (deleted_objects, perms_needed) = get_deleted_objects((obj,), opts, request.user, self.admin_site)
 
         if request.POST: # The user has already confirmed the deletion.
             if perms_needed:
@@ -1052,7 +1150,7 @@
             content_type__id__exact = ContentType.objects.get_for_model(model).id
         ).select_related().order_by('action_time')
         # If no history was found, see whether this object even exists.
-        obj = get_object_or_404(model, pk=object_id)
+        obj = get_object_or_404(model, pk=unquote(object_id))
         context = {
             'title': _('Change history: %s') % force_unicode(obj),
             'action_list': action_list,
@@ -1109,10 +1207,11 @@
     fk_name = None
     formset = BaseInlineFormSet
     extra = 3
-    max_num = 0
+    max_num = None
     template = None
     verbose_name = None
     verbose_name_plural = None
+    can_delete = True
 
     def __init__(self, parent_model, admin_site):
         self.admin_site = admin_site
@@ -1126,9 +1225,10 @@
 
     def _media(self):
         from django.conf import settings
-        js = []
+        js = ['js/jquery.min.js', 'js/jquery.init.js', 'js/inlines.min.js']
         if self.prepopulated_fields:
             js.append('js/urlify.js')
+            js.append('js/prepopulate.min.js')
         if self.filter_vertical or self.filter_horizontal:
             js.extend(['js/SelectBox.js' , 'js/SelectFilter2.js'])
         return forms.Media(js=['%s%s' % (settings.ADMIN_MEDIA_PREFIX, url) for url in js])
@@ -1144,17 +1244,21 @@
             exclude = []
         else:
             exclude = list(self.exclude)
+        exclude.extend(kwargs.get("exclude", []))
+        exclude.extend(self.get_readonly_fields(request, obj))
         # if exclude is an empty list we use None, since that's the actual
         # default
+        exclude = exclude or None
         defaults = {
             "form": self.form,
             "formset": self.formset,
             "fk_name": self.fk_name,
             "fields": fields,
-            "exclude": (exclude + kwargs.get("exclude", [])) or None,
+            "exclude": exclude,
             "formfield_callback": curry(self.formfield_for_dbfield, request=request),
             "extra": self.extra,
             "max_num": self.max_num,
+            "can_delete": self.can_delete,
         }
         defaults.update(kwargs)
         return inlineformset_factory(self.parent_model, self.model, **defaults)
@@ -1163,7 +1267,11 @@
         if self.declared_fieldsets:
             return self.declared_fieldsets
         form = self.get_formset(request).form
-        return [(None, {'fields': form.base_fields.keys()})]
+        fields = form.base_fields.keys() + list(self.get_readonly_fields(request, obj))
+        return [(None, {'fields': fields})]
+
+    def queryset(self, request):
+        return self.model._default_manager.all()
 
 class StackedInline(InlineModelAdmin):
     template = 'admin/edit_inline/stacked.html'
--- a/web/lib/django/contrib/admin/sites.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/sites.py	Tue May 25 02:43:45 2010 +0200
@@ -3,6 +3,7 @@
 from django.contrib.admin import ModelAdmin
 from django.contrib.admin import actions
 from django.contrib.auth import authenticate, login
+from django.views.decorators.csrf import csrf_protect
 from django.db.models.base import ModelBase
 from django.core.exceptions import ImproperlyConfigured
 from django.core.urlresolvers import reverse
@@ -13,10 +14,6 @@
 from django.utils.translation import ugettext_lazy, ugettext as _
 from django.views.decorators.cache import never_cache
 from django.conf import settings
-try:
-    set
-except NameError:
-    from sets import Set as set     # Python 2.3 fallback
 
 ERROR_MESSAGE = ugettext_lazy("Please enter a correct username and password. Note that both fields are case-sensitive.")
 LOGIN_FORM_KEY = 'this_is_the_login_form'
@@ -36,8 +33,11 @@
     """
 
     index_template = None
+    app_index_template = None
     login_template = None
-    app_index_template = None
+    logout_template = None
+    password_change_template = None
+    password_change_done_template = None
 
     def __init__(self, name=None, app_name='admin'):
         self._registry = {} # model_class class -> admin_class instance
@@ -138,7 +138,7 @@
         Returns True if the given HttpRequest has permission to view
         *at least one* page in the admin site.
         """
-        return request.user.is_authenticated() and request.user.is_staff
+        return request.user.is_active and request.user.is_staff
 
     def check_dependencies(self):
         """
@@ -151,11 +151,15 @@
         from django.contrib.contenttypes.models import ContentType
 
         if not LogEntry._meta.installed:
-            raise ImproperlyConfigured("Put 'django.contrib.admin' in your INSTALLED_APPS setting in order to use the admin application.")
+            raise ImproperlyConfigured("Put 'django.contrib.admin' in your "
+                "INSTALLED_APPS setting in order to use the admin application.")
         if not ContentType._meta.installed:
-            raise ImproperlyConfigured("Put 'django.contrib.contenttypes' in your INSTALLED_APPS setting in order to use the admin application.")
-        if 'django.core.context_processors.auth' not in settings.TEMPLATE_CONTEXT_PROCESSORS:
-            raise ImproperlyConfigured("Put 'django.core.context_processors.auth' in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.")
+            raise ImproperlyConfigured("Put 'django.contrib.contenttypes' in "
+                "your INSTALLED_APPS setting in order to use the admin application.")
+        if not ('django.contrib.auth.context_processors.auth' in settings.TEMPLATE_CONTEXT_PROCESSORS or
+            'django.core.context_processors.auth' in settings.TEMPLATE_CONTEXT_PROCESSORS):
+            raise ImproperlyConfigured("Put 'django.contrib.auth.context_processors.auth' "
+                "in your TEMPLATE_CONTEXT_PROCESSORS setting in order to use the admin application.")
 
     def admin_view(self, view, cacheable=False):
         """
@@ -186,11 +190,18 @@
             return view(request, *args, **kwargs)
         if not cacheable:
             inner = never_cache(inner)
+        # We add csrf_protect here so this function can be used as a utility
+        # function for any view, without having to repeat 'csrf_protect'.
+        if not getattr(view, 'csrf_exempt', False):
+            inner = csrf_protect(inner)
         return update_wrapper(inner, view)
 
     def get_urls(self):
         from django.conf.urls.defaults import patterns, url, include
 
+        if settings.DEBUG:
+            self.check_dependencies()
+
         def wrap(view, cacheable=False):
             def wrapper(*args, **kwargs):
                 return self.admin_view(view, cacheable)(*args, **kwargs)
@@ -241,14 +252,22 @@
             url = '%spassword_change/done/' % self.root_path
         else:
             url = reverse('admin:password_change_done', current_app=self.name)
-        return password_change(request, post_change_redirect=url)
+        defaults = {
+            'post_change_redirect': url
+        }
+        if self.password_change_template is not None:
+            defaults['template_name'] = self.password_change_template
+        return password_change(request, **defaults)
 
     def password_change_done(self, request):
         """
         Displays the "success" page after a password change.
         """
         from django.contrib.auth.views import password_change_done
-        return password_change_done(request)
+        defaults = {}
+        if self.password_change_done_template is not None:
+            defaults['template_name'] = self.password_change_done_template
+        return password_change_done(request, **defaults)
 
     def i18n_javascript(self, request):
         """
@@ -270,7 +289,10 @@
         This should *not* assume the user is already logged in.
         """
         from django.contrib.auth.views import logout
-        return logout(request)
+        defaults = {}
+        if self.logout_template is not None:
+            defaults['template_name'] = self.logout_template
+        return logout(request, **defaults)
     logout = never_cache(logout)
 
     def login(self, request):
@@ -445,7 +467,7 @@
         import warnings
         warnings.warn(
             "AdminSite.root() is deprecated; use include(admin.site.urls) instead.",
-            PendingDeprecationWarning
+            DeprecationWarning
         )
 
         #
--- a/web/lib/django/contrib/admin/templates/admin/actions.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/actions.html	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,16 @@
 {% load i18n %}
 <div class="actions">
-    {% for field in action_form %}<label>{{ field.label }} {{ field }}</label>{% endfor %}
+    {% for field in action_form %}{% if field.label %}<label>{{ field.label }} {% endif %}{{ field }}{% if field.label %}</label>{% endif %}{% endfor %}
     <button type="submit" class="button" title="{% trans "Run the selected action" %}" name="index" value="{{ action_index|default:0 }}">{% trans "Go" %}</button>
+    {% if actions_selection_counter %}
+        <script type="text/javascript">var _actions_icnt="{{ cl.result_list|length|default:"0" }}";</script>
+        <span class="action-counter">{{ selection_note }}</span>
+        {% if cl.result_count != cl.result_list|length %}
+        <span class="all">{{ selection_note_all }}</span>
+        <span class="question">
+            <a href="javascript:;" title="{% trans "Click here to select the objects across all pages" %}">{% blocktrans with cl.result_count as total_count %}Select all {{ total_count }} {{ module_name }}{% endblocktrans %}</a>
+        </span>
+        <span class="clear"><a href="javascript:;">{% trans "Clear selection" %}</a></span>
+        {% endif %}
+    {% endif %}
 </div>
--- a/web/lib/django/contrib/admin/templates/admin/auth/user/add_form.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/auth/user/add_form.html	Tue May 25 02:43:45 2010 +0200
@@ -1,33 +1,11 @@
 {% extends "admin/change_form.html" %}
 {% load i18n %}
 
-{% block after_field_sets %}
-
-<p>{% trans "First, enter a username and password. Then, you'll be able to edit more user options." %}</p>
-
-<fieldset class="module aligned">
-
-<div class="form-row">
-  {{ form.username.errors }}
-  {# TODO: get required class on label_tag #}
-  <label for="id_username" class="required">{% trans 'Username' %}:</label> {{ form.username }}
-  <p class="help">{{ form.username.help_text }}</p>
-</div>
+{% block form_top %}
+    <p>{% trans "First, enter a username and password. Then, you'll be able to edit more user options." %}</p>
+    <input type="hidden" name="_continue" value="1" />
+{% endblock %}
 
-<div class="form-row">
-  {{ form.password1.errors }}
-  {# TODO: get required class on label_tag #}
-  <label for="id_password1" class="required">{% trans 'Password' %}:</label> {{ form.password1 }}
-</div>
-
-<div class="form-row">
-  {{ form.password2.errors }}
-  {# TODO: get required class on label_tag #}
-  <label for="id_password2" class="required">{% trans 'Password (again)' %}:</label> {{ form.password2 }}
-  <p class="help">{% trans 'Enter the same password as above, for verification.' %}</p>
-</div>
-
+{% block after_field_sets %}
 <script type="text/javascript">document.getElementById("id_username").focus();</script>
-
-</fieldset>
 {% endblock %}
--- a/web/lib/django/contrib/admin/templates/admin/auth/user/change_password.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/auth/user/change_password.html	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,8 @@
 {% extends "admin/base_site.html" %}
 {% load i18n admin_modify adminmedia %}
 {% block extrahead %}{{ block.super }}
-<script type="text/javascript" src="../../../../jsi18n/"></script>
+{% url admin:jsi18n as jsi18nurl %}
+<script type="text/javascript" src="{{ jsi18nurl|default:"../../../../jsi18n/" }}"></script>
 {% endblock %}
 {% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
 {% block bodyclass %}{{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
@@ -15,7 +16,7 @@
 </div>
 {% endif %}{% endblock %}
 {% block content %}<div id="content-main">
-<form action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% block form_top %}{% endblock %}
+<form action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
 <div>
 {% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
 {% if form.errors %}
--- a/web/lib/django/contrib/admin/templates/admin/base.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/base.html	Tue May 25 02:43:45 2010 +0200
@@ -6,6 +6,7 @@
 {% block extrastyle %}{% endblock %}
 <!--[if lte IE 7]><link rel="stylesheet" type="text/css" href="{% block stylesheet_ie %}{% load adminmedia %}{% admin_media_prefix %}css/ie.css{% endblock %}" /><![endif]-->
 {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% admin_media_prefix %}css/rtl.css{% endblock %}" />{% endif %}
+<script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";</script>
 {% block extrahead %}{% endblock %}
 {% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
 </head>
@@ -22,10 +23,10 @@
         <div id="branding">
         {% block branding %}{% endblock %}
         </div>
-        {% if user.is_authenticated and user.is_staff %}
+        {% if user.is_active and user.is_staff %}
         <div id="user-tools">
             {% trans 'Welcome,' %}
-            <strong>{% firstof user.first_name user.username %}</strong>.
+            <strong>{% filter force_escape %}{% firstof user.first_name user.username %}{% endfilter %}</strong>.
             {% block userlinks %}
                 {% url django-admindocs-docroot as docsroot %}
                 {% if docsroot %}
--- a/web/lib/django/contrib/admin/templates/admin/change_form.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/change_form.html	Tue May 25 02:43:45 2010 +0200
@@ -2,7 +2,8 @@
 {% load i18n admin_modify adminmedia %}
 
 {% block extrahead %}{{ block.super }}
-<script type="text/javascript" src="../../../jsi18n/"></script>
+{% url admin:jsi18n as jsi18nurl %}
+<script type="text/javascript" src="{{ jsi18nurl|default:"../../../jsi18n/" }}"></script>
 {{ media }}
 {% endblock %}
 
@@ -29,7 +30,7 @@
   </ul>
 {% endif %}{% endif %}
 {% endblock %}
-<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% block form_top %}{% endblock %}
+<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.module_name }}_form">{% csrf_token %}{% block form_top %}{% endblock %}
 <div>
 {% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
 {% if save_on_top %}{% submit_row %}{% endif %}
@@ -37,7 +38,7 @@
     <p class="errornote">
     {% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
     </p>
-    <ul class="errorlist">{% for error in adminform.form.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
+    {{ adminform.form.non_field_errors }}
 {% endif %}
 
 {% for fieldset in adminform %}
--- a/web/lib/django/contrib/admin/templates/admin/change_list.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/change_list.html	Tue May 25 02:43:45 2010 +0200
@@ -6,9 +6,12 @@
   <link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/changelists.css" />
   {% if cl.formset %}
     <link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />
-    <script type="text/javascript" src="../../jsi18n/"></script>
   {% endif %}
-  {{ media }}
+  {% if cl.formset or action_form %}
+    {% url admin:jsi18n as jsi18nurl %}
+    <script type="text/javascript" src="{{ jsi18nurl|default:'../../jsi18n/' }}"></script>
+  {% endif %}
+  {{ media.css }}
   {% if not actions_on_top and not actions_on_bottom %}
     <style>
       #changelist table thead th:first-child {width: inherit}
@@ -16,6 +19,20 @@
   {% endif %}
 {% endblock %}
 
+{% block extrahead %}
+{{ block.super }}
+{{ media.js }}
+{% if action_form %}{% if actions_on_top or actions_on_bottom %}
+<script type="text/javascript">
+(function($) {
+    $(document).ready(function($) {
+        $("tr input.action-select").actions();
+    });
+})(django.jQuery);
+</script>
+{% endif %}{% endif %}
+{% endblock %}
+
 {% block bodyclass %}change-list{% endblock %}
 
 {% if not is_popup %}
@@ -53,7 +70,7 @@
         <p class="errornote">
         {% blocktrans count cl.formset.errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
         </p>
-        <ul class="errorlist">{% for error in cl.formset.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
+        {{ cl.formset.non_form_errors }}
     {% endif %}
     <div class="module{% if cl.has_filters %} filtered{% endif %}" id="changelist">
       {% block search %}{% search_form cl %}{% endblock %}
@@ -68,7 +85,7 @@
         {% endif %}
       {% endblock %}
       
-      <form action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>
+      <form id="changelist-form" action="" method="post"{% if cl.formset.is_multipart %} enctype="multipart/form-data"{% endif %}>{% csrf_token %}
       {% if cl.formset %}
         {{ cl.formset.management_form }}
       {% endif %}
--- a/web/lib/django/contrib/admin/templates/admin/change_list_results.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/change_list_results.html	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,5 @@
 {% if results %}
-<table cellspacing="0">
+<table cellspacing="0" id="result_list">
 <thead>
 <tr>
 {% for header in result_headers %}<th{{ header.class_attrib }}>
--- a/web/lib/django/contrib/admin/templates/admin/delete_confirmation.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/delete_confirmation.html	Tue May 25 02:43:45 2010 +0200
@@ -22,7 +22,7 @@
 {% else %}
     <p>{% blocktrans with object as escaped_object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All of the following related items will be deleted:{% endblocktrans %}</p>
     <ul>{{ deleted_objects|unordered_list }}</ul>
-    <form action="" method="post">
+    <form action="" method="post">{% csrf_token %}
     <div>
     <input type="hidden" name="post" value="yes" />
     <input type="submit" value="{% trans "Yes, I'm sure" %}" />
--- a/web/lib/django/contrib/admin/templates/admin/delete_selected_confirmation.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/delete_selected_confirmation.html	Tue May 25 02:43:45 2010 +0200
@@ -20,10 +20,10 @@
     </ul>
 {% else %}
     <p>{% blocktrans %}Are you sure you want to delete the selected {{ object_name }} objects? All of the following objects and their related items will be deleted:{% endblocktrans %}</p>
-    {% for deleteable_object in deletable_objects %}
-        <ul>{{ deleteable_object|unordered_list }}</ul>
+    {% for deletable_object in deletable_objects %}
+        <ul>{{ deletable_object|unordered_list }}</ul>
     {% endfor %}
-    <form action="" method="post">
+    <form action="" method="post">{% csrf_token %}
     <div>
     {% for obj in queryset %}
     <input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk }}" />
--- a/web/lib/django/contrib/admin/templates/admin/edit_inline/stacked.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/edit_inline/stacked.html	Tue May 25 02:43:45 2010 +0200
@@ -1,28 +1,79 @@
-{% load i18n %}
-<div class="inline-group">
+{% load i18n adminmedia %}
+<div class="inline-group" id="{{ inline_admin_formset.formset.prefix }}-group">
   <h2>{{ inline_admin_formset.opts.verbose_name_plural|title }}</h2>
 {{ inline_admin_formset.formset.management_form }}
 {{ inline_admin_formset.formset.non_form_errors }}
 
-{% for inline_admin_form in inline_admin_formset %}
-<div class="inline-related{% if forloop.last %} last-related{% endif %}">
-  <h3><b>{{ inline_admin_formset.opts.verbose_name|title }}:</b>&nbsp;{% if inline_admin_form.original %}{{ inline_admin_form.original }}{% else %} #{{ forloop.counter }}{% endif %}
+{% for inline_admin_form in inline_admin_formset %}<div class="inline-related{% if forloop.last %} empty-form last-related{% endif %}" id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
+  <h3><b>{{ inline_admin_formset.opts.verbose_name|title }}:</b>&nbsp;<span class="inline_label">{% if inline_admin_form.original %}{{ inline_admin_form.original }}{% else %}#{{ forloop.counter }}{% endif %}</span>
+    {% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/">{% trans "View on site" %}</a>{% endif %}
     {% if inline_admin_formset.formset.can_delete and inline_admin_form.original %}<span class="delete">{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}</span>{% endif %}
   </h3>
-  {% if inline_admin_form.show_url %}
-  <p><a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/">{% trans "View on site" %}</a></p>
-  {% endif %}
   {% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %}
-
   {% for fieldset in inline_admin_form %}
     {% include "admin/includes/fieldset.html" %}
   {% endfor %}
   {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
   {{ inline_admin_form.fk_field.field }}
+</div>{% endfor %}
 </div>
-{% endfor %}
 
-{# <ul class="tools"> #}
-{#   <li><a class="add" href="">Add another {{ inline_admin_formset.opts.verbose_name|title }}</a></li> #}
-{# </ul> #}
-</div>
+<script type="text/javascript">
+(function($) {
+    $(document).ready(function() {
+        var rows = "#{{ inline_admin_formset.formset.prefix }}-group .inline-related";
+        var updateInlineLabel = function(row) {
+            $(rows).find(".inline_label").each(function(i) {
+                var count = i + 1;
+                $(this).html($(this).html().replace(/(#\d+)/g, "#" + count));
+            });
+        }
+        var reinitDateTimeShortCuts = function() {
+            // Reinitialize the calendar and clock widgets by force, yuck.
+            if (typeof DateTimeShortcuts != "undefined") {
+                $(".datetimeshortcuts").remove();
+                DateTimeShortcuts.init();
+            }
+        }
+        var updateSelectFilter = function() {
+            // If any SelectFilter widgets were added, instantiate a new instance.
+            if (typeof SelectFilter != "undefined"){
+                $(".selectfilter").each(function(index, value){
+                  var namearr = value.name.split('-');
+                  SelectFilter.init(value.id, namearr[namearr.length-1], false, "{% admin_media_prefix %}");
+                })
+                $(".selectfilterstacked").each(function(index, value){
+                  var namearr = value.name.split('-');
+                  SelectFilter.init(value.id, namearr[namearr.length-1], true, "{% admin_media_prefix %}");
+                })
+            }
+        }
+        var initPrepopulatedFields = function(row) {
+            row.find('.prepopulated_field').each(function() {
+                var field = $(this);
+                var input = field.find('input, select, textarea');
+                var dependency_list = input.data('dependency_list') || [];
+                var dependencies = row.find(dependency_list.join(',')).find('input, select, textarea');
+                if (dependencies.length) {
+                    input.prepopulate(dependencies, input.attr('maxlength'));
+                }
+            });
+        }
+        $(rows).formset({
+            prefix: "{{ inline_admin_formset.formset.prefix }}",
+            addText: "{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}",
+            formCssClass: "dynamic-{{ inline_admin_formset.formset.prefix }}",
+            deleteCssClass: "inline-deletelink",
+            deleteText: "{% trans "Remove" %}",
+            emptyCssClass: "empty-form",
+            removed: updateInlineLabel,
+            added: (function(row) {
+                initPrepopulatedFields(row);
+                reinitDateTimeShortCuts();
+                updateSelectFilter();
+                updateInlineLabel(row);
+            })
+        });
+    });
+})(django.jQuery);
+</script>
--- a/web/lib/django/contrib/admin/templates/admin/edit_inline/tabular.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/edit_inline/tabular.html	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,5 @@
-{% load i18n %}
-<div class="inline-group">
+{% load i18n adminmedia %}
+<div class="inline-group" id="{{ inline_admin_formset.formset.prefix }}-group">
   <div class="tabular inline-related {% if forloop.last %}last-related{% endif %}">
 {{ inline_admin_formset.formset.management_form }}
 <fieldset class="module">
@@ -8,9 +8,9 @@
    <table>
      <thead><tr>
      {% for field in inline_admin_formset.fields %}
-       {% if not field.is_hidden %}
-         <th {% if forloop.first %}colspan="2"{% endif %}>{{ field.label|capfirst }}</th>
-        {% endif %}
+       {% if not field.widget.is_hidden %}
+         <th{% if forloop.first %} colspan="2"{% endif %}{% if field.required %} class="required"{% endif %}>{{ field.label|capfirst }}</th>
+       {% endif %}
      {% endfor %}
      {% if inline_admin_formset.formset.can_delete %}<th>{% trans "Delete?" %}</th>{% endif %}
      </tr></thead>
@@ -20,8 +20,8 @@
         {% if inline_admin_form.form.non_field_errors %}
         <tr><td colspan="{{ inline_admin_form.field_count }}">{{ inline_admin_form.form.non_field_errors }}</td></tr>
         {% endif %}
-        <tr class="{% cycle row1,row2 %} {% if inline_admin_form.original or inline_admin_form.show_url %}has_original{% endif %}">
-
+        <tr class="{% cycle "row1" "row2" %} {% if inline_admin_form.original or inline_admin_form.show_url %}has_original{% endif %}{% if forloop.last %} empty-form{% endif %}"
+             id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
         <td class="original">
           {% if inline_admin_form.original or inline_admin_form.show_url %}<p>
           {% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %}
@@ -39,33 +39,87 @@
           {% endfor %}
           {% endspaceless %}
         </td>
-
         {% for fieldset in inline_admin_form %}
           {% for line in fieldset %}
             {% for field in line %}
               <td class="{{ field.field.name }}">
-              {{ field.field.errors.as_ul }}
-              {{ field.field }}
+              {% if field.is_readonly %}
+                  <p>{{ field.contents }}</p>
+              {% else %}
+                  {{ field.field.errors.as_ul }}
+                  {{ field.field }}
+              {% endif %}
               </td>
             {% endfor %}
           {% endfor %}
         {% endfor %}
-
         {% if inline_admin_formset.formset.can_delete %}
           <td class="delete">{% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}</td>
         {% endif %}
-
         </tr>
-
      {% endfor %}
      </tbody>
    </table>
-
 </fieldset>
   </div>
+</div>
 
-  {# <ul class="tools"> #}
-  {#   <li><a class="add" href="">Add another {{ inline_admin_formset.opts.verbose_name|title }}</a></li> #}
-  {# </ul> #}
-
-</div>
+<script type="text/javascript">
+(function($) {
+    $(document).ready(function($) {
+        var rows = "#{{ inline_admin_formset.formset.prefix }}-group .tabular.inline-related tbody tr";
+        var alternatingRows = function(row) {
+            $(rows).not(".add-row").removeClass("row1 row2")
+                .filter(":even").addClass("row1").end()
+                .filter(rows + ":odd").addClass("row2");
+        }
+        var reinitDateTimeShortCuts = function() {
+            // Reinitialize the calendar and clock widgets by force
+            if (typeof DateTimeShortcuts != "undefined") {
+                $(".datetimeshortcuts").remove();
+                DateTimeShortcuts.init();
+            }
+        }
+        var updateSelectFilter = function() {
+            // If any SelectFilter widgets are a part of the new form,
+            // instantiate a new SelectFilter instance for it.
+            if (typeof SelectFilter != "undefined"){
+                $(".selectfilter").each(function(index, value){
+                  var namearr = value.name.split('-');
+                  SelectFilter.init(value.id, namearr[namearr.length-1], false, "{% admin_media_prefix %}");
+                })
+                $(".selectfilterstacked").each(function(index, value){
+                  var namearr = value.name.split('-');
+                  SelectFilter.init(value.id, namearr[namearr.length-1], true, "{% admin_media_prefix %}");
+                })
+            }
+        }
+        var initPrepopulatedFields = function(row) {
+            row.find('.prepopulated_field').each(function() {
+                var field = $(this);
+                var input = field.find('input, select, textarea');
+                var dependency_list = input.data('dependency_list') || [];
+                var dependencies = row.find(dependency_list.join(',')).find('input, select, textarea');
+                if (dependencies.length) {
+                    input.prepopulate(dependencies, input.attr('maxlength'));
+                }
+            });
+        }
+        $(rows).formset({
+            prefix: "{{ inline_admin_formset.formset.prefix }}",
+            addText: "{% blocktrans with inline_admin_formset.opts.verbose_name|title as verbose_name %}Add another {{ verbose_name }}{% endblocktrans %}",
+            formCssClass: "dynamic-{{ inline_admin_formset.formset.prefix }}",
+            deleteCssClass: "inline-deletelink",
+            deleteText: "{% trans "Remove" %}",
+            emptyCssClass: "empty-form",
+            removed: alternatingRows,
+            added: (function(row) {
+                initPrepopulatedFields(row);
+                reinitDateTimeShortCuts();
+                updateSelectFilter();
+                alternatingRows(row);
+            })
+        });
+    });
+})(django.jQuery);
+</script>
--- a/web/lib/django/contrib/admin/templates/admin/includes/fieldset.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/includes/fieldset.html	Tue May 25 02:43:45 2010 +0200
@@ -1,19 +1,28 @@
 <fieldset class="module aligned {{ fieldset.classes }}">
-  {% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %}
-  {% if fieldset.description %}<div class="description">{{ fieldset.description|safe }}</div>{% endif %}
-  {% for line in fieldset %}
-      <div class="form-row{% if line.errors %} errors{% endif %} {% for field in line %}{{ field.field.name }} {% endfor %} ">
-      {{ line.errors }}
-      {% for field in line %}
-      <div{% if not line.fields|length_is:"1" %} class="field-box"{% endif %}>
-          {% if field.is_checkbox %}
-              {{ field.field }}{{ field.label_tag }}
-          {% else %}
-              {{ field.label_tag }}{{ field.field }}
-          {% endif %}
-          {% if field.field.field.help_text %}<p class="help">{{ field.field.field.help_text|safe }}</p>{% endif %}
-      </div>
-      {% endfor %}
-      </div>
-  {% endfor %}
+    {% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %}
+    {% if fieldset.description %}
+        <div class="description">{{ fieldset.description|safe }}</div>
+    {% endif %}
+    {% for line in fieldset %}
+        <div class="form-row{% if line.errors %} errors{% endif %}{% for field in line %} {{ field.field.name }}{% endfor %}">
+            {{ line.errors }}
+            {% for field in line %}
+                <div{% if not line.fields|length_is:"1" %} class="field-box"{% endif %}>
+                    {% if field.is_checkbox %}
+                        {{ field.field }}{{ field.label_tag }}
+                    {% else %}
+                        {{ field.label_tag }}
+                        {% if field.is_readonly %}
+                            <p>{{ field.contents }}</p>
+                        {% else %}
+                            {{ field.field }}
+                        {% endif %}
+                    {% endif %}
+                    {% if field.field.field.help_text %}
+                        <p class="help">{{ field.field.field.help_text|safe }}</p>
+                    {% endif %}
+                </div>
+            {% endfor %}
+        </div>
+    {% endfor %}
 </fieldset>
--- a/web/lib/django/contrib/admin/templates/admin/login.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/login.html	Tue May 25 02:43:45 2010 +0200
@@ -14,7 +14,7 @@
 <p class="errornote">{{ error_message }}</p>
 {% endif %}
 <div id="content-main">
-<form action="{{ app_path }}" method="post" id="login-form">
+<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
   <div class="form-row">
     <label for="id_username">{% trans 'Username:' %}</label> <input type="text" name="username" id="id_username" />
   </div>
--- a/web/lib/django/contrib/admin/templates/admin/object_history.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/object_history.html	Tue May 25 02:43:45 2010 +0200
@@ -27,7 +27,7 @@
         <tbody>
         {% for action in action_list %}
         <tr>
-            <th scope="row">{{ action.action_time|date:_("DATETIME_FORMAT") }}</th>
+            <th scope="row">{{ action.action_time|date:"DATETIME_FORMAT" }}</th>
             <td>{{ action.user.username }}{% if action.user.get_full_name %} ({{ action.user.get_full_name }}){% endif %}</td>
             <td>{{ action.change_message }}</td>
         </tr>
--- a/web/lib/django/contrib/admin/templates/admin/prepopulated_fields_js.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/prepopulated_fields_js.html	Tue May 25 02:43:45 2010 +0200
@@ -1,11 +1,23 @@
 <script type="text/javascript">
+(function($) {
+    var field = null;
+
 {% for field in prepopulated_fields %}
-    document.getElementById("{{ field.field.auto_id }}").onchange = function() { this._changed = true; };
+    field = {
+        id: '#{{ field.field.auto_id }}',
+        dependency_ids: [],
+        dependency_list: [],
+        maxLength: {{ field.field.field.max_length|default_if_none:"50" }}
+    };
+
     {% for dependency in field.dependencies %}
-    document.getElementById("{{ dependency.auto_id }}").onkeyup = function() {
-        var e = document.getElementById("{{ field.field.auto_id }}");
-        if (!e._changed) { e.value = URLify({% for innerdep in field.dependencies %}document.getElementById("{{ innerdep.auto_id }}").value{% if not forloop.last %} + ' ' + {% endif %}{% endfor %}, {{ field.field.field.max_length|default_if_none:"50" }}); }
-    }
+    field['dependency_ids'].push('#{{ dependency.auto_id }}');
+    field['dependency_list'].push('.{{ dependency.name }}');
     {% endfor %}
+
+    $('.empty-form .{{ field.field.name }}').addClass('prepopulated_field');
+    $(field.id).data('dependency_list', field['dependency_list'])
+               .prepopulate($(field['dependency_ids'].join(',')), field.maxLength);
 {% endfor %}
+})(django.jQuery);
 </script>
--- a/web/lib/django/contrib/admin/templates/admin/template_validator.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/admin/template_validator.html	Tue May 25 02:43:45 2010 +0200
@@ -4,7 +4,7 @@
 
 <div id="content-main">
 
-<form action="" method="post">
+<form action="" method="post">{% csrf_token %}
 
 {% if form.errors %}
 <p class="errornote">Your template had {{ form.errors|length }} error{{ form.errors|pluralize }}:</p>
--- a/web/lib/django/contrib/admin/templates/registration/password_change_form.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/registration/password_change_form.html	Tue May 25 02:43:45 2010 +0200
@@ -1,26 +1,50 @@
 {% extends "admin/base_site.html" %}
-{% load i18n %}
+{% load i18n adminmedia %}
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% admin_media_prefix %}css/forms.css" />{% endblock %}
 {% block userlinks %}{% url django-admindocs-docroot as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %} {% trans 'Change password' %} / <a href="../logout/">{% trans 'Log out' %}</a>{% endblock %}
 {% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password change' %}</div>{% endblock %}
 
 {% block title %}{% trans 'Password change' %}{% endblock %}
 
-{% block content %}
+{% block content %}<div id="content-main">
+
+<form action="" method="post">{% csrf_token %}
+<div>
+{% if form.errors %}
+    <p class="errornote">
+    {% blocktrans count form.errors.items|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
+    </p>
+{% endif %}
 
 <h1>{% trans 'Password change' %}</h1>
 
 <p>{% trans "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly." %}</p>
 
-<form action="" method="post">
+<fieldset class="module aligned wide">
+
+<div class="form-row">
+    {{ form.old_password.errors }}
+    <label for="id_old_password" class="required">{% trans 'Old password' %}:</label>{{ form.old_password }}
+</div>
+
+<div class="form-row">
+    {{ form.new_password1.errors }}
+    <label for="id_new_password1" class="required">{% trans 'New password' %}:</label>{{ form.new_password1 }}
+</div>
 
-{{ form.old_password.errors }}
-<p class="aligned wide"><label for="id_old_password">{% trans 'Old password:' %}</label>{{ form.old_password }}</p>
-{{ form.new_password1.errors }}
-<p class="aligned wide"><label for="id_new_password1">{% trans 'New password:' %}</label>{{ form.new_password1 }}</p>
+<div class="form-row">
 {{ form.new_password2.errors }}
-<p class="aligned wide"><label for="id_new_password2">{% trans 'Confirm password:' %}</label>{{ form.new_password2 }}</p>
+    <label for="id_new_password2" class="required">{% trans 'Password (again)' %}:</label>{{ form.new_password2 }}
+</div>
+
+</fieldset>
 
-<p><input type="submit" value="{% trans 'Change my password' %}" /></p>
-</form>
+<div class="submit-row">
+    <input type="submit" value="{% trans 'Change my password' %}" class="default" />
+</div>
+
+<script type="text/javascript">document.getElementById("id_old_password").focus();</script>
+</div>
+</form></div>
 
 {% endblock %}
--- a/web/lib/django/contrib/admin/templates/registration/password_reset_confirm.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/registration/password_reset_confirm.html	Tue May 25 02:43:45 2010 +0200
@@ -13,7 +13,7 @@
 
 <p>{% trans "Please enter your new password twice so we can verify you typed it in correctly." %}</p>
 
-<form action="" method="post">
+<form action="" method="post">{% csrf_token %}
 {{ form.new_password1.errors }}
 <p class="aligned wide"><label for="id_new_password1">{% trans 'New password:' %}</label>{{ form.new_password1 }}</p>
 {{ form.new_password2.errors }}
--- a/web/lib/django/contrib/admin/templates/registration/password_reset_email.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/registration/password_reset_email.html	Tue May 25 02:43:45 2010 +0200
@@ -4,7 +4,7 @@
 
 {% trans "Please go to the following page and choose a new password:" %}
 {% block reset_link %}
-{{ protocol }}://{{ domain }}{% url django.contrib.auth.views.password_reset_confirm uidb36=uid, token=token %}
+{{ protocol }}://{{ domain }}{% url django.contrib.auth.views.password_reset_confirm uidb36=uid token=token %}
 {% endblock %}
 {% trans "Your username, in case you've forgotten:" %} {{ user.username }}
 
--- a/web/lib/django/contrib/admin/templates/registration/password_reset_form.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templates/registration/password_reset_form.html	Tue May 25 02:43:45 2010 +0200
@@ -11,7 +11,7 @@
 
 <p>{% trans "Forgotten your password? Enter your e-mail address below, and we'll e-mail instructions for setting a new one." %}</p>
 
-<form action="" method="post">
+<form action="" method="post">{% csrf_token %}
 {{ form.email.errors }}
 <p><label for="id_email">{% trans 'E-mail address:' %}</label> {{ form.email }} <input type="submit" value="{% trans 'Reset my password' %}" /></p>
 </form>
--- a/web/lib/django/contrib/admin/templatetags/admin_list.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templatetags/admin_list.py	Tue May 25 02:43:45 2010 +0200
@@ -1,16 +1,20 @@
+import datetime
+
 from django.conf import settings
+from django.contrib.admin.util import lookup_field, display_for_field, label_for_field
 from django.contrib.admin.views.main import ALL_VAR, EMPTY_CHANGELIST_VALUE
 from django.contrib.admin.views.main import ORDER_VAR, ORDER_TYPE_VAR, PAGE_VAR, SEARCH_VAR
 from django.core.exceptions import ObjectDoesNotExist
 from django.db import models
-from django.utils import dateformat
+from django.forms.forms import pretty_name
+from django.utils import formats
 from django.utils.html import escape, conditional_escape
-from django.utils.text import capfirst
 from django.utils.safestring import mark_safe
-from django.utils.translation import get_date_formats, get_partial_date_formats, ugettext as _
-from django.utils.encoding import smart_unicode, smart_str, force_unicode
+from django.utils.text import capfirst
+from django.utils.translation import ugettext as _
+from django.utils.encoding import smart_unicode, force_unicode
 from django.template import Library
-import datetime
+
 
 register = Library()
 
@@ -72,40 +76,18 @@
     lookup_opts = cl.lookup_opts
 
     for i, field_name in enumerate(cl.list_display):
-        attr = None
-        try:
-            f = lookup_opts.get_field(field_name)
-            admin_order_field = None
-        except models.FieldDoesNotExist:
-            # For non-field list_display values, check for the function
-            # attribute "short_description". If that doesn't exist, fall back
-            # to the method name. And __str__ and __unicode__ are special-cases.
-            if field_name == '__unicode__':
-                header = force_unicode(lookup_opts.verbose_name)
-            elif field_name == '__str__':
-                header = smart_str(lookup_opts.verbose_name)
-            else:
-                if callable(field_name):
-                    attr = field_name # field_name can be a callable
-                else:
-                    try:
-                        attr = getattr(cl.model_admin, field_name)
-                    except AttributeError:
-                        try:
-                            attr = getattr(cl.model, field_name)
-                        except AttributeError:
-                            raise AttributeError, \
-                                "'%s' model or '%s' objects have no attribute '%s'" % \
-                                    (lookup_opts.object_name, cl.model_admin.__class__, field_name)
-
-                try:
-                    header = attr.short_description
-                except AttributeError:
-                    if callable(field_name):
-                        header = field_name.__name__
-                    else:
-                        header = field_name
-                    header = header.replace('_', ' ')
+        header, attr = label_for_field(field_name, cl.model,
+            model_admin = cl.model_admin,
+            return_attr = True
+        )
+        if attr:
+            # if the field is the action checkbox: no sorting and special class
+            if field_name == 'action_checkbox':
+                yield {
+                    "text": header,
+                    "class_attrib": mark_safe(' class="action-checkbox-column"')
+                }
+                continue
 
             # It is a non-field, but perhaps one that is sortable
             admin_order_field = getattr(attr, "admin_order_field", None)
@@ -116,7 +98,7 @@
             # So this _is_ a sortable non-field.  Go to the yield
             # after the else clause.
         else:
-            header = f.verbose_name
+            admin_order_field = None
 
         th_classes = []
         new_order_type = 'asc'
@@ -124,10 +106,12 @@
             th_classes.append('sorted %sending' % cl.order_type.lower())
             new_order_type = {'asc': 'desc', 'desc': 'asc'}[cl.order_type.lower()]
 
-        yield {"text": header,
-               "sortable": True,
-               "url": cl.get_query_string({ORDER_VAR: i, ORDER_TYPE_VAR: new_order_type}),
-               "class_attrib": mark_safe(th_classes and ' class="%s"' % ' '.join(th_classes) or '')}
+        yield {
+            "text": header,
+            "sortable": True,
+            "url": cl.get_query_string({ORDER_VAR: i, ORDER_TYPE_VAR: new_order_type}),
+            "class_attrib": mark_safe(th_classes and ' class="%s"' % ' '.join(th_classes) or '')
+        }
 
 def _boolean_icon(field_val):
     BOOLEAN_MAPPING = {True: 'yes', False: 'no', None: 'unknown'}
@@ -139,24 +123,11 @@
     for field_name in cl.list_display:
         row_class = ''
         try:
-            f = cl.lookup_opts.get_field(field_name)
-        except models.FieldDoesNotExist:
-            # For non-field list_display values, the value is either a method,
-            # property or returned via a callable.
-            try:
-                if callable(field_name):
-                    attr = field_name
-                    value = attr(result)
-                elif hasattr(cl.model_admin, field_name) and \
-                   not field_name == '__str__' and not field_name == '__unicode__':
-                    attr = getattr(cl.model_admin, field_name)
-                    value = attr(result)
-                else:
-                    attr = getattr(result, field_name)
-                    if callable(attr):
-                        value = attr()
-                    else:
-                        value = attr
+            f, attr, value = lookup_field(field_name, result, cl.model_admin)
+        except (AttributeError, ObjectDoesNotExist):
+            result_repr = EMPTY_CHANGELIST_VALUE
+        else:
+            if f is None:
                 allow_tags = getattr(attr, 'allow_tags', False)
                 boolean = getattr(attr, 'boolean', False)
                 if boolean:
@@ -164,51 +135,21 @@
                     result_repr = _boolean_icon(value)
                 else:
                     result_repr = smart_unicode(value)
-            except (AttributeError, ObjectDoesNotExist):
-                result_repr = EMPTY_CHANGELIST_VALUE
-            else:
                 # Strip HTML tags in the resulting text, except if the
                 # function has an "allow_tags" attribute set to True.
                 if not allow_tags:
                     result_repr = escape(result_repr)
                 else:
                     result_repr = mark_safe(result_repr)
-        else:
-            field_val = getattr(result, f.attname)
-
-            if isinstance(f.rel, models.ManyToOneRel):
-                if field_val is not None:
+            else:
+                if value is None:
+                    result_repr = EMPTY_CHANGELIST_VALUE
+                if isinstance(f.rel, models.ManyToOneRel):
                     result_repr = escape(getattr(result, f.name))
                 else:
-                    result_repr = EMPTY_CHANGELIST_VALUE
-            # Dates and times are special: They're formatted in a certain way.
-            elif isinstance(f, models.DateField) or isinstance(f, models.TimeField):
-                if field_val:
-                    (date_format, datetime_format, time_format) = get_date_formats()
-                    if isinstance(f, models.DateTimeField):
-                        result_repr = capfirst(dateformat.format(field_val, datetime_format))
-                    elif isinstance(f, models.TimeField):
-                        result_repr = capfirst(dateformat.time_format(field_val, time_format))
-                    else:
-                        result_repr = capfirst(dateformat.format(field_val, date_format))
-                else:
-                    result_repr = EMPTY_CHANGELIST_VALUE
-                row_class = ' class="nowrap"'
-            # Booleans are special: We use images.
-            elif isinstance(f, models.BooleanField) or isinstance(f, models.NullBooleanField):
-                result_repr = _boolean_icon(field_val)
-            # DecimalFields are special: Zero-pad the decimals.
-            elif isinstance(f, models.DecimalField):
-                if field_val is not None:
-                    result_repr = ('%%.%sf' % f.decimal_places) % field_val
-                else:
-                    result_repr = EMPTY_CHANGELIST_VALUE
-            # Fields with choices are special: Use the representation
-            # of the choice.
-            elif f.flatchoices:
-                result_repr = dict(f.flatchoices).get(field_val, EMPTY_CHANGELIST_VALUE)
-            else:
-                result_repr = escape(field_val)
+                    result_repr = display_for_field(value, f)
+                if isinstance(f, models.DateField) or isinstance(f, models.TimeField):
+                    row_class = ' class="nowrap"'
         if force_unicode(result_repr) == '':
             result_repr = mark_safe('&nbsp;')
         # If list_display_links not defined, add the link tag to the first field
@@ -237,7 +178,7 @@
                 result_repr = conditional_escape(result_repr)
             yield mark_safe(u'<td%s>%s</td>' % (row_class, result_repr))
     if form:
-        yield mark_safe(force_unicode(form[cl.model._meta.pk.name]))
+        yield mark_safe(u'<td>%s</td>' % force_unicode(form[cl.model._meta.pk.name]))
 
 def results(cl):
     if cl.formset:
@@ -263,7 +204,6 @@
         year_lookup = cl.params.get(year_field)
         month_lookup = cl.params.get(month_field)
         day_lookup = cl.params.get(day_field)
-        year_month_format, month_day_format = get_partial_date_formats()
 
         link = lambda d: cl.get_query_string(d, [field_generic])
 
@@ -273,9 +213,9 @@
                 'show': True,
                 'back': {
                     'link': link({year_field: year_lookup, month_field: month_lookup}),
-                    'title': dateformat.format(day, year_month_format)
+                    'title': capfirst(formats.date_format(day, 'YEAR_MONTH_FORMAT'))
                 },
-                'choices': [{'title': dateformat.format(day, month_day_format)}]
+                'choices': [{'title': capfirst(formats.date_format(day, 'MONTH_DAY_FORMAT'))}]
             }
         elif year_lookup and month_lookup:
             days = cl.query_set.filter(**{year_field: year_lookup, month_field: month_lookup}).dates(field_name, 'day')
@@ -287,7 +227,7 @@
                 },
                 'choices': [{
                     'link': link({year_field: year_lookup, month_field: month_lookup, day_field: day.day}),
-                    'title': dateformat.format(day, month_day_format)
+                    'title': capfirst(formats.date_format(day, 'MONTH_DAY_FORMAT'))
                 } for day in days]
             }
         elif year_lookup:
@@ -300,7 +240,7 @@
                 },
                 'choices': [{
                     'link': link({year_field: year_lookup, month_field: month.month}),
-                    'title': dateformat.format(month, year_month_format)
+                    'title': capfirst(formats.date_format(month, 'YEAR_MONTH_FORMAT'))
                 } for month in months]
             }
         else:
@@ -308,8 +248,8 @@
             return {
                 'show': True,
                 'choices': [{
-                    'link': link({year_field: year.year}),
-                    'title': year.year
+                    'link': link({year_field: str(year.year)}),
+                    'title': str(year.year),
                 } for year in years]
             }
 date_hierarchy = register.inclusion_tag('admin/date_hierarchy.html')(date_hierarchy)
--- a/web/lib/django/contrib/admin/templatetags/adminmedia.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templatetags/adminmedia.py	Tue May 25 02:43:45 2010 +0200
@@ -1,4 +1,5 @@
 from django.template import Library
+from django.utils.encoding import iri_to_uri
 
 register = Library()
 
@@ -10,5 +11,5 @@
         from django.conf import settings
     except ImportError:
         return ''
-    return settings.ADMIN_MEDIA_PREFIX
+    return iri_to_uri(settings.ADMIN_MEDIA_PREFIX)
 admin_media_prefix = register.simple_tag(admin_media_prefix)
--- a/web/lib/django/contrib/admin/templatetags/log.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/templatetags/log.py	Tue May 25 02:43:45 2010 +0200
@@ -44,14 +44,14 @@
     def __call__(self, parser, token):
         tokens = token.contents.split()
         if len(tokens) < 4:
-            raise template.TemplateSyntaxError, "'%s' statements require two arguments" % self.tag_name
+            raise template.TemplateSyntaxError("'%s' statements require two arguments" % self.tag_name)
         if not tokens[1].isdigit():
-            raise template.TemplateSyntaxError, "First argument in '%s' must be an integer" % self.tag_name
+            raise template.TemplateSyntaxError("First argument in '%s' must be an integer" % self.tag_name)
         if tokens[2] != 'as':
-            raise template.TemplateSyntaxError, "Second argument in '%s' must be 'as'" % self.tag_name
+            raise template.TemplateSyntaxError("Second argument in '%s' must be 'as'" % self.tag_name)
         if len(tokens) > 4:
             if tokens[4] != 'for_user':
-                raise template.TemplateSyntaxError, "Fourth argument in '%s' must be 'for_user'" % self.tag_name
+                raise template.TemplateSyntaxError("Fourth argument in '%s' must be 'for_user'" % self.tag_name)
         return AdminLogNode(limit=tokens[1], varname=tokens[3], user=(len(tokens) > 5 and tokens[5] or None))
 
 register.tag('get_admin_log', DoGetAdminLog('get_admin_log'))
--- a/web/lib/django/contrib/admin/util.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/util.py	Tue May 25 02:43:45 2010 +0200
@@ -1,11 +1,14 @@
 from django.core.exceptions import ObjectDoesNotExist
 from django.db import models
+from django.forms.forms import pretty_name
+from django.utils import formats
 from django.utils.html import escape
 from django.utils.safestring import mark_safe
 from django.utils.text import capfirst
-from django.utils.encoding import force_unicode
+from django.utils.encoding import force_unicode, smart_unicode, smart_str
 from django.utils.translation import ungettext, ugettext as _
 from django.core.urlresolvers import reverse, NoReverseMatch
+from django.utils.datastructures import SortedDict
 
 def quote(s):
     """
@@ -55,135 +58,160 @@
                 field_names.append(field)
     return field_names
 
-def _nest_help(obj, depth, val):
-    current = obj
-    for i in range(depth):
-        current = current[-1]
-    current.append(val)
+def _format_callback(obj, user, admin_site, levels_to_root, perms_needed):
+    has_admin = obj.__class__ in admin_site._registry
+    opts = obj._meta
+    try:
+        admin_url = reverse('%s:%s_%s_change'
+                            % (admin_site.name,
+                               opts.app_label,
+                               opts.object_name.lower()),
+                            None, (quote(obj._get_pk_val()),))
+    except NoReverseMatch:
+        admin_url = '%s%s/%s/%s/' % ('../'*levels_to_root,
+                                     opts.app_label,
+                                     opts.object_name.lower(),
+                                     quote(obj._get_pk_val()))
+    if has_admin:
+        p = '%s.%s' % (opts.app_label,
+                       opts.get_delete_permission())
+        if not user.has_perm(p):
+            perms_needed.add(opts.verbose_name)
+        # Display a link to the admin page.
+        return mark_safe(u'%s: <a href="%s">%s</a>' %
+                         (escape(capfirst(opts.verbose_name)),
+                          admin_url,
+                          escape(obj)))
+    else:
+        # Don't display link to edit, because it either has no
+        # admin or is edited inline.
+        return u'%s: %s' % (capfirst(opts.verbose_name),
+                            force_unicode(obj))
 
-def get_change_view_url(app_label, module_name, pk, admin_site, levels_to_root):
-    """
-    Returns the url to the admin change view for the given app_label,
-    module_name and primary key.
+def get_deleted_objects(objs, opts, user, admin_site, levels_to_root=4):
     """
-    try:
-        return reverse('%sadmin_%s_%s_change' % (admin_site.name, app_label, module_name), None, (pk,))
-    except NoReverseMatch:
-        return '%s%s/%s/%s/' % ('../'*levels_to_root, app_label, module_name, pk)
+    Find all objects related to ``objs`` that should also be
+    deleted. ``objs`` should be an iterable of objects.
 
-def get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current_depth, admin_site, levels_to_root=4):
-    """
-    Helper function that recursively populates deleted_objects.
+    Returns a nested list of strings suitable for display in the
+    template with the ``unordered_list`` filter.
 
-    `levels_to_root` defines the number of directories (../) to reach the
-    admin root path. In a change_view this is 4, in a change_list view 2.
+    `levels_to_root` defines the number of directories (../) to reach
+    the admin root path. In a change_view this is 4, in a change_list
+    view 2.
 
     This is for backwards compatibility since the options.delete_selected
     method uses this function also from a change_list view.
     This will not be used if we can reverse the URL.
     """
-    nh = _nest_help # Bind to local variable for performance
-    if current_depth > 16:
-        return # Avoid recursing too deep.
-    opts_seen = []
-    for related in opts.get_all_related_objects():
-        has_admin = related.model in admin_site._registry
-        if related.opts in opts_seen:
-            continue
-        opts_seen.append(related.opts)
-        rel_opts_name = related.get_accessor_name()
-        if isinstance(related.field.rel, models.OneToOneRel):
-            try:
-                sub_obj = getattr(obj, rel_opts_name)
-            except ObjectDoesNotExist:
-                pass
-            else:
-                if has_admin:
-                    p = '%s.%s' % (related.opts.app_label, related.opts.get_delete_permission())
-                    if not user.has_perm(p):
-                        perms_needed.add(related.opts.verbose_name)
-                        # We don't care about populating deleted_objects now.
-                        continue
-                if not has_admin:
-                    # Don't display link to edit, because it either has no
-                    # admin or is edited inline.
-                    nh(deleted_objects, current_depth,
-                        [u'%s: %s' % (capfirst(related.opts.verbose_name), force_unicode(sub_obj)), []])
-                else:
-                    # Display a link to the admin page.
-                    nh(deleted_objects, current_depth, [mark_safe(u'%s: <a href="%s">%s</a>' %
-                        (escape(capfirst(related.opts.verbose_name)),
-                        get_change_view_url(related.opts.app_label,
-                                            related.opts.object_name.lower(),
-                                            sub_obj._get_pk_val(),
-                                            admin_site,
-                                            levels_to_root),
-                        escape(sub_obj))), []])
-                get_deleted_objects(deleted_objects, perms_needed, user, sub_obj, related.opts, current_depth+2, admin_site)
+    collector = NestedObjects()
+    for obj in objs:
+        # TODO using a private model API!
+        obj._collect_sub_objects(collector)
+
+    perms_needed = set()
+
+    to_delete = collector.nested(_format_callback,
+                                 user=user,
+                                 admin_site=admin_site,
+                                 levels_to_root=levels_to_root,
+                                 perms_needed=perms_needed)
+
+    return to_delete, perms_needed
+
+
+class NestedObjects(object):
+    """
+    A directed acyclic graph collection that exposes the add() API
+    expected by Model._collect_sub_objects and can present its data as
+    a nested list of objects.
+
+    """
+    def __init__(self):
+        # Use object keys of the form (model, pk) because actual model
+        # objects may not be unique
+
+        # maps object key to list of child keys
+        self.children = SortedDict()
+
+        # maps object key to parent key
+        self.parents = SortedDict()
+
+        # maps object key to actual object
+        self.seen = SortedDict()
+
+    def add(self, model, pk, obj,
+            parent_model=None, parent_obj=None, nullable=False):
+        """
+        Add item ``obj`` to the graph. Returns True (and does nothing)
+        if the item has been seen already.
+
+        The ``parent_obj`` argument must already exist in the graph; if
+        not, it's ignored (but ``obj`` is still added with no
+        parent). In any case, Model._collect_sub_objects (for whom
+        this API exists) will never pass a parent that hasn't already
+        been added itself.
+
+        These restrictions in combination ensure the graph will remain
+        acyclic (but can have multiple roots).
+
+        ``model``, ``pk``, and ``parent_model`` arguments are ignored
+        in favor of the appropriate lookups on ``obj`` and
+        ``parent_obj``; unlike CollectedObjects, we can't maintain
+        independence from the knowledge that we're operating on model
+        instances, and we don't want to allow for inconsistency.
+
+        ``nullable`` arg is ignored: it doesn't affect how the tree of
+        collected objects should be nested for display.
+        """
+        model, pk = type(obj), obj._get_pk_val()
+
+        # auto-created M2M models don't interest us
+        if model._meta.auto_created:
+            return True
+
+        key = model, pk
+
+        if key in self.seen:
+            return True
+        self.seen.setdefault(key, obj)
+
+        if parent_obj is not None:
+            parent_model, parent_pk = (type(parent_obj),
+                                       parent_obj._get_pk_val())
+            parent_key = (parent_model, parent_pk)
+            if parent_key in self.seen:
+                self.children.setdefault(parent_key, list()).append(key)
+                self.parents.setdefault(key, parent_key)
+
+    def _nested(self, key, format_callback=None, **kwargs):
+        obj = self.seen[key]
+        if format_callback:
+            ret = [format_callback(obj, **kwargs)]
         else:
-            has_related_objs = False
-            for sub_obj in getattr(obj, rel_opts_name).all():
-                has_related_objs = True
-                if not has_admin:
-                    # Don't display link to edit, because it either has no
-                    # admin or is edited inline.
-                    nh(deleted_objects, current_depth,
-                        [u'%s: %s' % (capfirst(related.opts.verbose_name), force_unicode(sub_obj)), []])
-                else:
-                    # Display a link to the admin page.
-                    nh(deleted_objects, current_depth, [mark_safe(u'%s: <a href="%s">%s</a>' %
-                        (escape(capfirst(related.opts.verbose_name)),
-                        get_change_view_url(related.opts.app_label,
-                                            related.opts.object_name.lower(),
-                                            sub_obj._get_pk_val(),
-                                            admin_site,
-                                            levels_to_root),
-                        escape(sub_obj))), []])
-                get_deleted_objects(deleted_objects, perms_needed, user, sub_obj, related.opts, current_depth+2, admin_site)
-            # If there were related objects, and the user doesn't have
-            # permission to delete them, add the missing perm to perms_needed.
-            if has_admin and has_related_objs:
-                p = '%s.%s' % (related.opts.app_label, related.opts.get_delete_permission())
-                if not user.has_perm(p):
-                    perms_needed.add(related.opts.verbose_name)
-    for related in opts.get_all_related_many_to_many_objects():
-        has_admin = related.model in admin_site._registry
-        if related.opts in opts_seen:
-            continue
-        opts_seen.append(related.opts)
-        rel_opts_name = related.get_accessor_name()
-        has_related_objs = False
+            ret = [obj]
+
+        children = []
+        for child in self.children.get(key, ()):
+            children.extend(self._nested(child, format_callback, **kwargs))
+        if children:
+            ret.append(children)
+
+        return ret
 
-        # related.get_accessor_name() could return None for symmetrical relationships
-        if rel_opts_name:
-            rel_objs = getattr(obj, rel_opts_name, None)
-            if rel_objs:
-                has_related_objs = True
+    def nested(self, format_callback=None, **kwargs):
+        """
+        Return the graph as a nested list.
+
+        Passes **kwargs back to the format_callback as kwargs.
 
-        if has_related_objs:
-            for sub_obj in rel_objs.all():
-                if not has_admin:
-                    # Don't display link to edit, because it either has no
-                    # admin or is edited inline.
-                    nh(deleted_objects, current_depth, [_('One or more %(fieldname)s in %(name)s: %(obj)s') % \
-                        {'fieldname': force_unicode(related.field.verbose_name), 'name': force_unicode(related.opts.verbose_name), 'obj': escape(sub_obj)}, []])
-                else:
-                    # Display a link to the admin page.
-                    nh(deleted_objects, current_depth, [
-                        mark_safe((_('One or more %(fieldname)s in %(name)s:') % {'fieldname': escape(force_unicode(related.field.verbose_name)), 'name': escape(force_unicode(related.opts.verbose_name))}) + \
-                        (u' <a href="%s">%s</a>' % \
-                            (get_change_view_url(related.opts.app_label,
-                                                 related.opts.object_name.lower(),
-                                                 sub_obj._get_pk_val(),
-                                                 admin_site,
-                                                 levels_to_root),
-                            escape(sub_obj)))), []])
-        # If there were related objects, and the user doesn't have
-        # permission to change them, add the missing perm to perms_needed.
-        if has_admin and has_related_objs:
-            p = u'%s.%s' % (related.opts.app_label, related.opts.get_change_permission())
-            if not user.has_perm(p):
-                perms_needed.add(related.opts.verbose_name)
+        """
+        roots = []
+        for key in self.seen.keys():
+            if key not in self.parents:
+                roots.extend(self._nested(key, format_callback, **kwargs))
+        return roots
+
 
 def model_format_dict(obj):
     """
@@ -221,3 +249,87 @@
     d = model_format_dict(obj)
     singular, plural = d["verbose_name"], d["verbose_name_plural"]
     return ungettext(singular, plural, n or 0)
+
+def lookup_field(name, obj, model_admin=None):
+    opts = obj._meta
+    try:
+        f = opts.get_field(name)
+    except models.FieldDoesNotExist:
+        # For non-field values, the value is either a method, property or
+        # returned via a callable.
+        if callable(name):
+            attr = name
+            value = attr(obj)
+        elif (model_admin is not None and hasattr(model_admin, name) and
+          not name == '__str__' and not name == '__unicode__'):
+            attr = getattr(model_admin, name)
+            value = attr(obj)
+        else:
+            attr = getattr(obj, name)
+            if callable(attr):
+                value = attr()
+            else:
+                value = attr
+        f = None
+    else:
+        attr = None
+        value = getattr(obj, name)
+    return f, attr, value
+
+def label_for_field(name, model, model_admin=None, return_attr=False):
+    attr = None
+    try:
+        label = model._meta.get_field_by_name(name)[0].verbose_name
+    except models.FieldDoesNotExist:
+        if name == "__unicode__":
+            label = force_unicode(model._meta.verbose_name)
+        elif name == "__str__":
+            label = smart_str(model._meta.verbose_name)
+        else:
+            if callable(name):
+                attr = name
+            elif model_admin is not None and hasattr(model_admin, name):
+                attr = getattr(model_admin, name)
+            elif hasattr(model, name):
+                attr = getattr(model, name)
+            else:
+                message = "Unable to lookup '%s' on %s" % (name, model._meta.object_name)
+                if model_admin:
+                    message += " or %s" % (model_admin.__name__,)
+                raise AttributeError(message)
+
+            if hasattr(attr, "short_description"):
+                label = attr.short_description
+            elif callable(attr):
+                if attr.__name__ == "<lambda>":
+                    label = "--"
+                else:
+                    label = pretty_name(attr.__name__)
+            else:
+                label = pretty_name(name)
+    if return_attr:
+        return (label, attr)
+    else:
+        return label
+
+
+def display_for_field(value, field):
+    from django.contrib.admin.templatetags.admin_list import _boolean_icon
+    from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE
+
+    if field.flatchoices:
+        return dict(field.flatchoices).get(value, EMPTY_CHANGELIST_VALUE)
+    # NullBooleanField needs special-case null-handling, so it comes
+    # before the general null test.
+    elif isinstance(field, models.BooleanField) or isinstance(field, models.NullBooleanField):
+        return _boolean_icon(value)
+    elif value is None:
+        return EMPTY_CHANGELIST_VALUE
+    elif isinstance(field, models.DateField) or isinstance(field, models.TimeField):
+        return formats.localize(value)
+    elif isinstance(field, models.DecimalField):
+        return formats.number_format(value, field.decimal_places)
+    elif isinstance(field, models.FloatField):
+        return formats.number_format(value)
+    else:
+        return smart_unicode(value)
--- a/web/lib/django/contrib/admin/validation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/validation.py	Tue May 25 02:43:45 2010 +0200
@@ -1,13 +1,11 @@
-try:
-    set
-except NameError:
-    from sets import Set as set   # Python 2.3 fallback
-
 from django.core.exceptions import ImproperlyConfigured
 from django.db import models
-from django.forms.models import BaseModelForm, BaseModelFormSet, fields_for_model, _get_foreign_key
+from django.forms.models import (BaseModelForm, BaseModelFormSet, fields_for_model,
+    _get_foreign_key)
 from django.contrib.admin.options import flatten_fieldsets, BaseModelAdmin
 from django.contrib.admin.options import HORIZONTAL, VERTICAL
+from django.contrib.admin.util import lookup_field
+
 
 __all__ = ['validate']
 
@@ -123,6 +121,18 @@
                 continue
             get_field(cls, model, opts, 'ordering[%d]' % idx, field)
 
+    if hasattr(cls, "readonly_fields"):
+        check_isseq(cls, "readonly_fields", cls.readonly_fields)
+        for idx, field in enumerate(cls.readonly_fields):
+            if not callable(field):
+                if not hasattr(cls, field):
+                    if not hasattr(model, field):
+                        try:
+                            opts.get_field(field)
+                        except models.FieldDoesNotExist:
+                            raise ImproperlyConfigured("%s.readonly_fields[%d], %r is not a callable or an attribute of %r or found in the model %r."
+                                % (cls.__name__, idx, field, cls.__name__, model._meta.object_name))
+
     # list_select_related = False
     # save_as = False
     # save_on_top = False
@@ -149,18 +159,26 @@
             validate_inline(inline, cls, model)
 
 def validate_inline(cls, parent, parent_model):
+
     # model is already verified to exist and be a Model
     if cls.fk_name: # default value is None
         f = get_field(cls, cls.model, cls.model._meta, 'fk_name', cls.fk_name)
         if not isinstance(f, models.ForeignKey):
             raise ImproperlyConfigured("'%s.fk_name is not an instance of "
                     "models.ForeignKey." % cls.__name__)
+
+    fk = _get_foreign_key(parent_model, cls.model, fk_name=cls.fk_name, can_fail=True)
+
     # extra = 3
-    # max_num = 0
-    for attr in ('extra', 'max_num'):
-        if not isinstance(getattr(cls, attr), int):
-            raise ImproperlyConfigured("'%s.%s' should be a integer."
-                    % (cls.__name__, attr))
+    if not isinstance(getattr(cls, 'extra'), int):
+        raise ImproperlyConfigured("'%s.extra' should be a integer."
+                % cls.__name__)
+
+    # max_num = None
+    max_num = getattr(cls, 'max_num', None)
+    if max_num is not None and not isinstance(max_num, int):
+        raise ImproperlyConfigured("'%s.max_num' should be an integer or None (default)."
+                % cls.__name__)
 
     # formset
     if hasattr(cls, 'formset') and not issubclass(cls.formset, BaseModelFormSet):
@@ -169,7 +187,6 @@
 
     # exclude
     if hasattr(cls, 'exclude') and cls.exclude:
-        fk = _get_foreign_key(parent_model, cls.model, can_fail=True)
         if fk and fk.name in cls.exclude:
             raise ImproperlyConfigured("%s cannot exclude the field "
                     "'%s' - this is the foreign key to the parent model "
@@ -192,7 +209,22 @@
     if cls.fields: # default value is None
         check_isseq(cls, 'fields', cls.fields)
         for field in cls.fields:
+            if field in cls.readonly_fields:
+                # Stuff can be put in fields that isn't actually a model field
+                # if it's in readonly_fields, readonly_fields will handle the
+                # validation of such things.
+                continue
             check_formfield(cls, model, opts, 'fields', field)
+            try:
+                f = opts.get_field(field)
+            except models.FieldDoesNotExist:
+                # If we can't find a field on the model that matches,
+                # it could be an extra field on the form.
+                continue
+            if isinstance(f, models.ManyToManyField) and not f.rel.through._meta.auto_created:
+                raise ImproperlyConfigured("'%s.fields' can't include the ManyToManyField "
+                    "field '%s' because '%s' manually specifies "
+                    "a 'through' model." % (cls.__name__, field, field))
         if cls.fieldsets:
             raise ImproperlyConfigured('Both fieldsets and fields are specified in %s.' % cls.__name__)
         if len(cls.fields) > len(set(cls.fields)):
@@ -211,11 +243,47 @@
                 raise ImproperlyConfigured("'fields' key is required in "
                         "%s.fieldsets[%d][1] field options dict."
                         % (cls.__name__, idx))
+            for fields in fieldset[1]['fields']:
+                # The entry in fields might be a tuple. If it is a standalone
+                # field, make it into a tuple to make processing easier.
+                if type(fields) != tuple:
+                    fields = (fields,)
+                for field in fields:
+                    if field in cls.readonly_fields:
+                        # Stuff can be put in fields that isn't actually a
+                        # model field if it's in readonly_fields,
+                        # readonly_fields will handle the validation of such
+                        # things.
+                        continue
+                    check_formfield(cls, model, opts, "fieldsets[%d][1]['fields']" % idx, field)
+                    try:
+                        f = opts.get_field(field)
+                        if isinstance(f, models.ManyToManyField) and not f.rel.through._meta.auto_created:
+                            raise ImproperlyConfigured("'%s.fieldsets[%d][1]['fields']' "
+                                "can't include the ManyToManyField field '%s' because "
+                                "'%s' manually specifies a 'through' model." % (
+                                    cls.__name__, idx, field, field))
+                    except models.FieldDoesNotExist:
+                        # If we can't find a field on the model that matches,
+                        # it could be an extra field on the form.
+                        pass
         flattened_fieldsets = flatten_fieldsets(cls.fieldsets)
         if len(flattened_fieldsets) > len(set(flattened_fieldsets)):
             raise ImproperlyConfigured('There are duplicate field(s) in %s.fieldsets' % cls.__name__)
-        for field in flattened_fieldsets:
-            check_formfield(cls, model, opts, "fieldsets[%d][1]['fields']" % idx, field)
+
+    # exclude
+    if cls.exclude: # default value is None
+        check_isseq(cls, 'exclude', cls.exclude)
+        for field in cls.exclude:
+            check_formfield(cls, model, opts, 'exclude', field)
+            try:
+                f = opts.get_field(field)
+            except models.FieldDoesNotExist:
+                # If we can't find a field on the model that matches,
+                # it could be an extra field on the form.
+                continue
+        if len(cls.exclude) > len(set(cls.exclude)):
+            raise ImproperlyConfigured('There are duplicate field(s) in %s.exclude' % cls.__name__)
 
     # form
     if hasattr(cls, 'form') and not issubclass(cls.form, BaseModelForm):
--- a/web/lib/django/contrib/admin/views/decorators.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/views/decorators.py	Tue May 25 02:43:45 2010 +0200
@@ -2,7 +2,7 @@
 try:
     from functools import wraps
 except ImportError:
-    from django.utils.functional import wraps  # Python 2.3, 2.4 fallback.
+    from django.utils.functional import wraps  # Python 2.4 fallback.
 
 from django import http, template
 from django.conf import settings
@@ -28,7 +28,7 @@
     member, displaying the login page if necessary.
     """
     def _checklogin(request, *args, **kwargs):
-        if request.user.is_authenticated() and request.user.is_staff:
+        if request.user.is_active and request.user.is_staff:
             # The user is valid. Continue to the admin page.
             return view_func(request, *args, **kwargs)
 
--- a/web/lib/django/contrib/admin/views/main.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/views/main.py	Tue May 25 02:43:45 2010 +0200
@@ -9,11 +9,6 @@
 from django.utils.http import urlencode
 import operator
 
-try:
-    set
-except NameError:
-    from sets import Set as set   # Python 2.3 fallback
-
 # The system will display a "Show all" link on the change list only if the
 # total result count is less than or equal to this setting.
 MAX_SHOW_ALL_ALLOWED = 200
@@ -185,6 +180,13 @@
             if key.endswith('__in'):
                 lookup_params[key] = value.split(',')
 
+            # if key ends with __isnull, special case '' and false
+            if key.endswith('__isnull'):
+                if value.lower() in ('', 'false'):
+                    lookup_params[key] = False
+                else:
+                    lookup_params[key] = True
+
         # Apply lookup parameters from the query string.
         try:
             qs = qs.filter(**lookup_params)
--- a/web/lib/django/contrib/admin/views/template.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/views/template.py	Tue May 25 02:43:45 2010 +0200
@@ -6,6 +6,7 @@
 from django.conf import settings
 from django.utils.importlib import import_module
 from django.utils.translation import ugettext_lazy as _
+from django.contrib import messages
 
 
 def template_validator(request):
@@ -23,7 +24,7 @@
         form = TemplateValidatorForm(settings_modules, site_list,
                                      data=request.POST)
         if form.is_valid():
-            request.user.message_set.create(message='The template is valid.')
+            messages.info(request, 'The template is valid.')
     else:
         form = TemplateValidatorForm(settings_modules, site_list)
     return render_to_response('admin/template_validator.html', {
@@ -75,4 +76,4 @@
             error = e
         template.builtins.remove(register)
         if error:
-            raise forms.ValidationError, e.args
+            raise forms.ValidationError(e.args)
--- a/web/lib/django/contrib/admin/widgets.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admin/widgets.py	Tue May 25 02:43:45 2010 +0200
@@ -2,7 +2,7 @@
 Form Widget classes specific to the Django admin site.
 """
 
-import copy
+import django.utils.copycompat as copy
 
 from django import forms
 from django.forms.widgets import RadioFieldRenderer
@@ -33,6 +33,9 @@
         super(FilteredSelectMultiple, self).__init__(attrs, choices)
 
     def render(self, name, value, attrs=None, choices=()):
+        if attrs is None: attrs = {}
+        attrs['class'] = 'selectfilter'
+        if self.is_stacked: attrs['class'] += 'stacked'
         output = [super(FilteredSelectMultiple, self).render(name, value, attrs, choices)]
         output.append(u'<script type="text/javascript">addEvent(window, "load", function(e) {')
         # TODO: "id_" is hard-coded here. This should instead use the correct
@@ -41,21 +44,21 @@
             (name, self.verbose_name.replace('"', '\\"'), int(self.is_stacked), settings.ADMIN_MEDIA_PREFIX))
         return mark_safe(u''.join(output))
 
-class AdminDateWidget(forms.TextInput):
+class AdminDateWidget(forms.DateTimeInput):
     class Media:
         js = (settings.ADMIN_MEDIA_PREFIX + "js/calendar.js",
               settings.ADMIN_MEDIA_PREFIX + "js/admin/DateTimeShortcuts.js")
 
-    def __init__(self, attrs={}):
-        super(AdminDateWidget, self).__init__(attrs={'class': 'vDateField', 'size': '10'})
+    def __init__(self, attrs={}, format=None):
+        super(AdminDateWidget, self).__init__(attrs={'class': 'vDateField', 'size': '10'}, format=format)
 
-class AdminTimeWidget(forms.TextInput):
+class AdminTimeWidget(forms.TimeInput):
     class Media:
         js = (settings.ADMIN_MEDIA_PREFIX + "js/calendar.js",
               settings.ADMIN_MEDIA_PREFIX + "js/admin/DateTimeShortcuts.js")
 
-    def __init__(self, attrs={}):
-        super(AdminTimeWidget, self).__init__(attrs={'class': 'vTimeField', 'size': '8'})
+    def __init__(self, attrs={}, format=None):
+        super(AdminTimeWidget, self).__init__(attrs={'class': 'vTimeField', 'size': '8'}, format=format)
 
 class AdminSplitDateTime(forms.SplitDateTimeWidget):
     """
@@ -102,8 +105,9 @@
     A Widget for displaying ForeignKeys in the "raw_id" interface rather than
     in a <select> box.
     """
-    def __init__(self, rel, attrs=None):
+    def __init__(self, rel, attrs=None, using=None):
         self.rel = rel
+        self.db = using
         super(ForeignKeyRawIdWidget, self).__init__(attrs)
 
     def render(self, name, value, attrs=None):
@@ -129,7 +133,7 @@
 
     def base_url_parameters(self):
         params = {}
-        if self.rel.limit_choices_to:
+        if self.rel.limit_choices_to and hasattr(self.rel.limit_choices_to, 'items'):
             items = []
             for k, v in self.rel.limit_choices_to.items():
                 if isinstance(v, list):
@@ -148,7 +152,10 @@
 
     def label_for_value(self, value):
         key = self.rel.get_related_field().name
-        obj = self.rel.to._default_manager.get(**{key: value})
+        try:
+            obj = self.rel.to._default_manager.using(self.db).get(**{key: value})
+        except self.rel.to.DoesNotExist:
+            return ''
         return '&nbsp;<strong>%s</strong>' % escape(truncate_words(obj, 14))
 
 class ManyToManyRawIdWidget(ForeignKeyRawIdWidget):
@@ -156,8 +163,8 @@
     A Widget for displaying ManyToMany ids in the "raw_id" interface rather than
     in a <select multiple> box.
     """
-    def __init__(self, rel, attrs=None):
-        super(ManyToManyRawIdWidget, self).__init__(rel, attrs)
+    def __init__(self, rel, attrs=None, using=None):
+        super(ManyToManyRawIdWidget, self).__init__(rel, attrs, using=None)
 
     def render(self, name, value, attrs=None):
         attrs['class'] = 'vManyToManyRawIdAdminField'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admindocs/models.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+# Empty models.py to allow for specifying admindocs as a test label.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admindocs/tests/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,30 @@
+import unittest
+import fields
+from django.contrib.admindocs import views
+from django.db.models import fields as builtin_fields
+
+
+class TestFieldType(unittest.TestCase):
+    def setUp(self):
+        pass
+
+    def test_field_name(self):
+        self.assertRaises(AttributeError,
+            views.get_readable_field_data_type, "NotAField"
+        )
+
+    def test_builtin_fields(self):
+        self.assertEqual(
+            views.get_readable_field_data_type(builtin_fields.BooleanField()),
+            u'Boolean (Either True or False)'
+        )
+
+    def test_custom_fields(self):
+        self.assertEqual(
+            views.get_readable_field_data_type(fields.CustomField()),
+            u'A custom field type'
+        )
+        self.assertEqual(
+            views.get_readable_field_data_type(fields.DescriptionLackingField()),
+            u'Field of type: DescriptionLackingField'
+        )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/admindocs/tests/fields.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,7 @@
+from django.db import models
+
+class CustomField(models.Field):
+    description = "A custom field type"
+
+class DescriptionLackingField(models.Field):
+    pass
--- a/web/lib/django/contrib/admindocs/views.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/admindocs/views.py	Tue May 25 02:43:45 2010 +0200
@@ -187,14 +187,14 @@
     try:
         app_mod = models.get_app(app_label)
     except ImproperlyConfigured:
-        raise Http404, _("App %r not found") % app_label
+        raise Http404(_("App %r not found") % app_label)
     model = None
     for m in models.get_models(app_mod):
         if m._meta.object_name.lower() == model_name:
             model = m
             break
     if model is None:
-        raise Http404, _("Model %(model_name)r not found in app %(app_label)r") % {'model_name': model_name, 'app_label': app_label}
+        raise Http404(_("Model %(model_name)r not found in app %(app_label)r") % {'model_name': model_name, 'app_label': app_label})
 
     opts = model._meta
 
@@ -309,12 +309,17 @@
 
 def load_all_installed_template_libraries():
     # Load/register all template tag libraries from installed apps.
-    for e in templatetags.__path__:
-        libraries = [os.path.splitext(p)[0] for p in os.listdir(e) if p.endswith('.py') and p[0].isalpha()]
+    for module_name in template.get_templatetags_modules():
+        mod = import_module(module_name)
+        libraries = [
+            os.path.splitext(p)[0]
+            for p in os.listdir(os.path.dirname(mod.__file__))
+            if p.endswith('.py') and p[0].isalpha()
+        ]
         for library_name in libraries:
             try:
-                lib = template.get_library("django.templatetags.%s" % library_name.split('.')[-1])
-            except template.InvalidTemplateLibrary:
+                lib = template.get_library(library_name)
+            except template.InvalidTemplateLibrary, e:
                 pass
 
 def get_return_data_type(func_name):
@@ -326,43 +331,12 @@
             return 'Integer'
     return ''
 
-# Maps Field objects to their human-readable data types, as strings.
-# Column-type strings can contain format strings; they'll be interpolated
-# against the values of Field.__dict__ before being output.
-# If a column type is set to None, it won't be included in the output.
-DATA_TYPE_MAPPING = {
-    'AutoField'                 : _('Integer'),
-    'BooleanField'              : _('Boolean (Either True or False)'),
-    'CharField'                 : _('String (up to %(max_length)s)'),
-    'CommaSeparatedIntegerField': _('Comma-separated integers'),
-    'DateField'                 : _('Date (without time)'),
-    'DateTimeField'             : _('Date (with time)'),
-    'DecimalField'              : _('Decimal number'),
-    'EmailField'                : _('E-mail address'),
-    'FileField'                 : _('File path'),
-    'FilePathField'             : _('File path'),
-    'FloatField'                : _('Floating point number'),
-    'ForeignKey'                : _('Integer'),
-    'ImageField'                : _('File path'),
-    'IntegerField'              : _('Integer'),
-    'IPAddressField'            : _('IP address'),
-    'ManyToManyField'           : '',
-    'NullBooleanField'          : _('Boolean (Either True, False or None)'),
-    'OneToOneField'             : _('Relation to parent model'),
-    'PhoneNumberField'          : _('Phone number'),
-    'PositiveIntegerField'      : _('Integer'),
-    'PositiveSmallIntegerField' : _('Integer'),
-    'SlugField'                 : _('String (up to %(max_length)s)'),
-    'SmallIntegerField'         : _('Integer'),
-    'TextField'                 : _('Text'),
-    'TimeField'                 : _('Time'),
-    'URLField'                  : _('URL'),
-    'USStateField'              : _('U.S. state (two uppercase letters)'),
-    'XMLField'                  : _('XML text'),
-}
+def get_readable_field_data_type(field):
+    """Returns the description for a given field type, if it exists,
+    Fields' descriptions can contain format strings, which will be interpolated
+    against the values of field.__dict__ before being output."""
 
-def get_readable_field_data_type(field):
-    return DATA_TYPE_MAPPING[field.get_internal_type()] % field.__dict__
+    return field.description % field.__dict__
 
 def extract_views_from_urlpatterns(urlpatterns, base=''):
     """
@@ -384,7 +358,7 @@
                 continue
             views.extend(extract_views_from_urlpatterns(patterns, base + p.regex.pattern))
         else:
-            raise TypeError, _("%s does not appear to be a urlpattern object") % p
+            raise TypeError(_("%s does not appear to be a urlpattern object") % p)
     return views
 
 named_group_matcher = re.compile(r'\(\?P(<\w+>).+?\)')
--- a/web/lib/django/contrib/auth/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,4 +1,5 @@
 import datetime
+from warnings import warn
 from django.core.exceptions import ImproperlyConfigured
 from django.utils.importlib import import_module
 
@@ -12,13 +13,25 @@
     try:
         mod = import_module(module)
     except ImportError, e:
-        raise ImproperlyConfigured, 'Error importing authentication backend %s: "%s"' % (module, e)
+        raise ImproperlyConfigured('Error importing authentication backend %s: "%s"' % (module, e))
     except ValueError, e:
-        raise ImproperlyConfigured, 'Error importing authentication backends. Is AUTHENTICATION_BACKENDS a correctly defined list or tuple?'
+        raise ImproperlyConfigured('Error importing authentication backends. Is AUTHENTICATION_BACKENDS a correctly defined list or tuple?')
     try:
         cls = getattr(mod, attr)
     except AttributeError:
-        raise ImproperlyConfigured, 'Module "%s" does not define a "%s" authentication backend' % (module, attr)
+        raise ImproperlyConfigured('Module "%s" does not define a "%s" authentication backend' % (module, attr))
+    try:
+        getattr(cls, 'supports_object_permissions')
+    except AttributeError:
+        warn("Authentication backends without a `supports_object_permissions` attribute are deprecated. Please define it in %s." % cls,
+             PendingDeprecationWarning)
+        cls.supports_object_permissions = False
+    try:
+        getattr(cls, 'supports_anonymous_user')
+    except AttributeError:
+        warn("Authentication backends without a `supports_anonymous_user` attribute are deprecated. Please define it in %s." % cls,
+             PendingDeprecationWarning)
+        cls.supports_anonymous_user = False
     return cls()
 
 def get_backends():
--- a/web/lib/django/contrib/auth/admin.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/admin.py	Tue May 25 02:43:45 2010 +0200
@@ -1,14 +1,20 @@
 from django import template
+from django.db import transaction
 from django.conf import settings
 from django.contrib import admin
 from django.contrib.auth.forms import UserCreationForm, UserChangeForm, AdminPasswordChangeForm
 from django.contrib.auth.models import User, Group
+from django.contrib import messages
 from django.core.exceptions import PermissionDenied
 from django.http import HttpResponseRedirect, Http404
 from django.shortcuts import render_to_response, get_object_or_404
 from django.template import RequestContext
 from django.utils.html import escape
+from django.utils.decorators import method_decorator
 from django.utils.translation import ugettext, ugettext_lazy as _
+from django.views.decorators.csrf import csrf_protect
+
+csrf_protect_m = method_decorator(csrf_protect)
 
 class GroupAdmin(admin.ModelAdmin):
     search_fields = ('name',)
@@ -16,13 +22,21 @@
     filter_horizontal = ('permissions',)
 
 class UserAdmin(admin.ModelAdmin):
+    add_form_template = 'admin/auth/user/add_form.html'
+    change_user_password_template = None
     fieldsets = (
         (None, {'fields': ('username', 'password')}),
         (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
-        (_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser', 'user_permissions')}),
+        (_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'user_permissions')}),
         (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
         (_('Groups'), {'fields': ('groups',)}),
     )
+    add_fieldsets = (
+        (None, {
+            'classes': ('wide',),
+            'fields': ('username', 'password1', 'password2')}
+        ),
+    )
     form = UserChangeForm
     add_form = UserCreationForm
     change_password_form = AdminPasswordChangeForm
@@ -40,14 +54,34 @@
         if url.endswith('password'):
             return self.user_change_password(request, url.split('/')[0])
         return super(UserAdmin, self).__call__(request, url)
-    
+
+    def get_fieldsets(self, request, obj=None):
+        if not obj:
+            return self.add_fieldsets
+        return super(UserAdmin, self).get_fieldsets(request, obj)
+
+    def get_form(self, request, obj=None, **kwargs):
+        """
+        Use special form during user creation
+        """
+        defaults = {}
+        if obj is None:
+            defaults.update({
+                'form': self.add_form,
+                'fields': admin.util.flatten_fieldsets(self.add_fieldsets),
+            })
+        defaults.update(kwargs)
+        return super(UserAdmin, self).get_form(request, obj, **defaults)
+
     def get_urls(self):
         from django.conf.urls.defaults import patterns
         return patterns('',
             (r'^(\d+)/password/$', self.admin_site.admin_view(self.user_change_password))
         ) + super(UserAdmin, self).get_urls()
 
-    def add_view(self, request):
+    @csrf_protect_m
+    @transaction.commit_on_success
+    def add_view(self, request, form_url='', extra_context=None):
         # It's an error for a user to have add permission but NOT change
         # permission for users. If we allowed such users to add users, they
         # could create superusers, which would mean they would essentially have
@@ -60,40 +94,14 @@
                 # error message.
                 raise Http404('Your user does not have the "Change user" permission. In order to add users, Django requires that your user account have both the "Add user" and "Change user" permissions set.')
             raise PermissionDenied
-        if request.method == 'POST':
-            form = self.add_form(request.POST)
-            if form.is_valid():
-                new_user = form.save()
-                msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': 'user', 'obj': new_user}
-                self.log_addition(request, new_user)
-                if "_addanother" in request.POST:
-                    request.user.message_set.create(message=msg)
-                    return HttpResponseRedirect(request.path)
-                elif '_popup' in request.REQUEST:
-                    return self.response_add(request, new_user)
-                else:
-                    request.user.message_set.create(message=msg + ' ' + ugettext("You may edit it again below."))
-                    return HttpResponseRedirect('../%s/' % new_user.id)
-        else:
-            form = self.add_form()
-        return render_to_response('admin/auth/user/add_form.html', {
-            'title': _('Add user'),
-            'form': form,
-            'is_popup': '_popup' in request.REQUEST,
-            'add': True,
-            'change': False,
-            'has_add_permission': True,
-            'has_delete_permission': False,
-            'has_change_permission': True,
-            'has_file_field': False,
-            'has_absolute_url': False,
+        if extra_context is None:
+            extra_context = {}
+        defaults = {
             'auto_populated_fields': (),
-            'opts': self.model._meta,
-            'save_as': False,
             'username_help_text': self.model._meta.get_field('username').help_text,
-            'root_path': self.admin_site.root_path,
-            'app_label': self.model._meta.app_label,            
-        }, context_instance=template.RequestContext(request))
+        }
+        extra_context.update(defaults)
+        return super(UserAdmin, self).add_view(request, form_url, extra_context)
 
     def user_change_password(self, request, id):
         if not self.has_change_permission(request):
@@ -104,12 +112,17 @@
             if form.is_valid():
                 new_user = form.save()
                 msg = ugettext('Password changed successfully.')
-                request.user.message_set.create(message=msg)
+                messages.success(request, msg)
                 return HttpResponseRedirect('..')
         else:
             form = self.change_password_form(user)
-        return render_to_response('admin/auth/user/change_password.html', {
+
+        fieldsets = [(None, {'fields': form.base_fields.keys()})]
+        adminForm = admin.helpers.AdminForm(form, fieldsets, {})
+
+        return render_to_response(self.change_user_password_template or 'admin/auth/user/change_password.html', {
             'title': _('Change password: %s') % escape(user.username),
+            'adminForm': adminForm,
             'form': form,
             'is_popup': '_popup' in request.REQUEST,
             'add': True,
--- a/web/lib/django/contrib/auth/backends.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/backends.py	Tue May 25 02:43:45 2010 +0200
@@ -1,16 +1,14 @@
-try:
-    set
-except NameError:
-    from sets import Set as set # Python 2.3 fallback
-
 from django.db import connection
-from django.contrib.auth.models import User
+from django.contrib.auth.models import User, Permission
 
 
 class ModelBackend(object):
     """
     Authenticates against django.contrib.auth.models.User.
     """
+    supports_object_permissions = False
+    supports_anonymous_user = True
+
     # TODO: Model, login attribute name and password attribute name should be
     # configurable.
     def authenticate(self, username=None, password=None):
@@ -27,35 +25,15 @@
         groups.
         """
         if not hasattr(user_obj, '_group_perm_cache'):
-            cursor = connection.cursor()
-            # The SQL below works out to the following, after DB quoting:
-            # cursor.execute("""
-            #     SELECT ct."app_label", p."codename"
-            #     FROM "auth_permission" p, "auth_group_permissions" gp, "auth_user_groups" ug, "django_content_type" ct
-            #     WHERE p."id" = gp."permission_id"
-            #         AND gp."group_id" = ug."group_id"
-            #         AND ct."id" = p."content_type_id"
-            #         AND ug."user_id" = %s, [self.id])
-            qn = connection.ops.quote_name
-            sql = """
-                SELECT ct.%s, p.%s
-                FROM %s p, %s gp, %s ug, %s ct
-                WHERE p.%s = gp.%s
-                    AND gp.%s = ug.%s
-                    AND ct.%s = p.%s
-                    AND ug.%s = %%s""" % (
-                qn('app_label'), qn('codename'),
-                qn('auth_permission'), qn('auth_group_permissions'),
-                qn('auth_user_groups'), qn('django_content_type'),
-                qn('id'), qn('permission_id'),
-                qn('group_id'), qn('group_id'),
-                qn('id'), qn('content_type_id'),
-                qn('user_id'),)
-            cursor.execute(sql, [user_obj.id])
-            user_obj._group_perm_cache = set(["%s.%s" % (row[0], row[1]) for row in cursor.fetchall()])
+            perms = Permission.objects.filter(group__user=user_obj
+                ).values_list('content_type__app_label', 'codename'
+                ).order_by()
+            user_obj._group_perm_cache = set(["%s.%s" % (ct, name) for ct, name in perms])
         return user_obj._group_perm_cache
 
     def get_all_permissions(self, user_obj):
+        if user_obj.is_anonymous():
+            return set()
         if not hasattr(user_obj, '_perm_cache'):
             user_obj._perm_cache = set([u"%s.%s" % (p.content_type.app_label, p.codename) for p in user_obj.user_permissions.select_related()])
             user_obj._perm_cache.update(self.get_group_permissions(user_obj))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/auth/context_processors.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,33 @@
+from django.core.context_processors import PermWrapper
+from django.utils.functional import lazy, memoize, SimpleLazyObject
+from django.contrib import messages
+
+def auth(request):
+    """
+    Returns context variables required by apps that use Django's authentication
+    system.
+
+    If there is no 'user' attribute in the request, uses AnonymousUser (from
+    django.contrib.auth).
+    """
+    # If we access request.user, request.session is accessed, which results in
+    # 'Vary: Cookie' being sent in every request that uses this context
+    # processor, which can easily be every request on a site if
+    # TEMPLATE_CONTEXT_PROCESSORS has this context processor added.  This kills
+    # the ability to cache.  So, we carefully ensure these attributes are lazy.
+    # We don't use django.utils.functional.lazy() for User, because that
+    # requires knowing the class of the object we want to proxy, which could
+    # break with custom auth backends.  LazyObject is a less complete but more
+    # flexible solution that is a good enough wrapper for 'User'.
+    def get_user():
+        if hasattr(request, 'user'):
+            return request.user
+        else:
+            from django.contrib.auth.models import AnonymousUser
+            return AnonymousUser()
+
+    return {
+        'user': SimpleLazyObject(get_user),
+        'messages': messages.get_messages(request),
+        'perms':  lazy(lambda: PermWrapper(get_user()), PermWrapper)(),
+    }
--- a/web/lib/django/contrib/auth/decorators.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/decorators.py	Tue May 25 02:43:45 2010 +0200
@@ -1,21 +1,34 @@
 try:
-    from functools import update_wrapper
+    from functools import update_wrapper, wraps
 except ImportError:
-    from django.utils.functional import update_wrapper  # Python 2.3, 2.4 fallback.
+    from django.utils.functional import update_wrapper, wraps  # Python 2.4 fallback.
 
 from django.contrib.auth import REDIRECT_FIELD_NAME
 from django.http import HttpResponseRedirect
+from django.utils.decorators import available_attrs
 from django.utils.http import urlquote
 
+
 def user_passes_test(test_func, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
     """
     Decorator for views that checks that the user passes the given test,
     redirecting to the log-in page if necessary. The test should be a callable
     that takes the user object and returns True if the user passes.
     """
-    def decorate(view_func):
-        return _CheckLogin(view_func, test_func, login_url, redirect_field_name)
-    return decorate
+    if not login_url:
+        from django.conf import settings
+        login_url = settings.LOGIN_URL
+
+    def decorator(view_func):
+        def _wrapped_view(request, *args, **kwargs):
+            if test_func(request.user):
+                return view_func(request, *args, **kwargs)
+            path = urlquote(request.get_full_path())
+            tup = login_url, redirect_field_name, path
+            return HttpResponseRedirect('%s?%s=%s' % tup)
+        return wraps(view_func, assigned=available_attrs(view_func))(_wrapped_view)
+    return decorator
+
 
 def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME):
     """
@@ -30,52 +43,10 @@
         return actual_decorator(function)
     return actual_decorator
 
+
 def permission_required(perm, login_url=None):
     """
     Decorator for views that checks whether a user has a particular permission
     enabled, redirecting to the log-in page if necessary.
     """
     return user_passes_test(lambda u: u.has_perm(perm), login_url=login_url)
-
-class _CheckLogin(object):
-    """
-    Class that checks that the user passes the given test, redirecting to
-    the log-in page if necessary. If the test is passed, the view function
-    is invoked. The test should be a callable that takes the user object
-    and returns True if the user passes.
-
-    We use a class here so that we can define __get__. This way, when a
-    _CheckLogin object is used as a method decorator, the view function
-    is properly bound to its instance.
-    """
-    def __init__(self, view_func, test_func, login_url=None, redirect_field_name=REDIRECT_FIELD_NAME):
-        if not login_url:
-            from django.conf import settings
-            login_url = settings.LOGIN_URL
-        self.view_func = view_func
-        self.test_func = test_func
-        self.login_url = login_url
-        self.redirect_field_name = redirect_field_name
-        
-        # We can't blindly apply update_wrapper because it udpates __dict__ and 
-        # if the view function is already a _CheckLogin object then 
-        # self.test_func and friends will get stomped. However, we also can't 
-        # *not* update the wrapper's dict because then view function attributes
-        # don't get updated into the wrapper. So we need to split the
-        # difference: don't let update_wrapper update __dict__, but then update
-        # the (parts of) __dict__ that we care about ourselves.
-        update_wrapper(self, view_func, updated=())
-        for k in view_func.__dict__:
-            if k not in self.__dict__:
-                self.__dict__[k] = view_func.__dict__[k]
-
-    def __get__(self, obj, cls=None):
-        view_func = self.view_func.__get__(obj, cls)
-        return _CheckLogin(view_func, self.test_func, self.login_url, self.redirect_field_name)
-    
-    def __call__(self, request, *args, **kwargs):
-        if self.test_func(request.user):
-            return self.view_func(request, *args, **kwargs)
-        path = urlquote(request.get_full_path())
-        tup = self.login_url, self.redirect_field_name, path
-        return HttpResponseRedirect('%s?%s=%s' % tup)
--- a/web/lib/django/contrib/auth/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -11,11 +11,12 @@
     """
     A form that creates a user, with no privileges, from the given username and password.
     """
-    username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^\w+$',
-        help_text = _("Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."),
-        error_message = _("This value must contain only letters, numbers and underscores."))
+    username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$',
+        help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
+        error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
     password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
-    password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput)
+    password2 = forms.CharField(label=_("Password confirmation"), widget=forms.PasswordInput,
+        help_text = _("Enter the same password as above, for verification."))
 
     class Meta:
         model = User
@@ -44,10 +45,10 @@
         return user
 
 class UserChangeForm(forms.ModelForm):
-    username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^\w+$',
-        help_text = _("Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."),
-        error_message = _("This value must contain only letters, numbers and underscores."))
-    
+    username = forms.RegexField(label=_("Username"), max_length=30, regex=r'^[\w.@+-]+$',
+        help_text = _("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
+        error_messages = {'invalid': _("This value may contain only letters, numbers and @/./+/-/_ characters.")})
+
     class Meta:
         model = User
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/auth/management/commands/changepassword.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,48 @@
+from django.core.management.base import BaseCommand, CommandError
+from django.contrib.auth.models import User
+import getpass
+
+class Command(BaseCommand):
+    help = "Change a user's password for django.contrib.auth."
+
+    requires_model_validation = False
+
+    def _get_pass(self, prompt="Password: "):
+        p = getpass.getpass(prompt=prompt)
+        if not p:
+            raise CommandError("aborted")
+        return p
+
+    def handle(self, *args, **options):
+        if len(args) > 1:
+            raise CommandError("need exactly one or zero arguments for username")
+
+        if args:
+            username, = args
+        else:
+            username = getpass.getuser()
+
+        try:
+            u = User.objects.get(username=username)
+        except User.DoesNotExist:
+            raise CommandError("user '%s' does not exist" % username)
+
+        print "Changing password for user '%s'" % u.username
+
+        MAX_TRIES = 3
+        count = 0
+        p1, p2 = 1, 2  # To make them initially mismatch.
+        while p1 != p2 and count < MAX_TRIES:
+            p1 = self._get_pass()
+            p2 = self._get_pass("Password (again): ")
+            if p1 != p2:
+                print "Passwords do not match. Please try again."
+                count = count + 1
+
+        if count == MAX_TRIES:
+            raise CommandError("Aborting password change for user '%s' after %s attempts" % (username, count))
+
+        u.set_password(p1)
+        u.save()
+
+        return "Password changed successfully for user '%s'" % u.username
--- a/web/lib/django/contrib/auth/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/models.py	Tue May 25 02:43:45 2010 +0200
@@ -10,13 +10,9 @@
 from django.utils.hashcompat import md5_constructor, sha_constructor
 from django.utils.translation import ugettext_lazy as _
 
+
 UNUSABLE_PASSWORD = '!' # This will never be a valid hash
 
-try:
-    set
-except NameError:
-    from sets import Set as set   # Python 2.3 fallback
-
 def get_hexdigest(algorithm, salt, raw_password):
     """
     Returns a string of the hexdigest of the given plaintext password and salt
@@ -47,6 +43,13 @@
 class SiteProfileNotAvailable(Exception):
     pass
 
+class PermissionManager(models.Manager):
+    def get_by_natural_key(self, codename, app_label, model):
+        return self.get(
+            codename=codename,
+            content_type=ContentType.objects.get_by_natural_key(app_label, model)
+        )
+
 class Permission(models.Model):
     """The permissions system provides a way to assign permissions to specific users and groups of users.
 
@@ -63,12 +66,13 @@
     name = models.CharField(_('name'), max_length=50)
     content_type = models.ForeignKey(ContentType)
     codename = models.CharField(_('codename'), max_length=100)
+    objects = PermissionManager()
 
     class Meta:
         verbose_name = _('permission')
         verbose_name_plural = _('permissions')
         unique_together = (('content_type', 'codename'),)
-        ordering = ('content_type__app_label', 'codename')
+        ordering = ('content_type__app_label', 'content_type__model', 'codename')
 
     def __unicode__(self):
         return u"%s | %s | %s" % (
@@ -76,6 +80,10 @@
             unicode(self.content_type),
             unicode(self.name))
 
+    def natural_key(self):
+        return (self.codename,) + self.content_type.natural_key()
+    natural_key.dependencies = ['contenttypes.contenttype']
+
 class Group(models.Model):
     """Groups are a generic way of categorizing users to apply permissions, or some other label, to those users. A user can belong to any number of groups.
 
@@ -95,14 +103,30 @@
 
 class UserManager(models.Manager):
     def create_user(self, username, email, password=None):
-        "Creates and saves a User with the given username, e-mail and password."
+        """
+        Creates and saves a User with the given username, e-mail and password.
+        """
+
         now = datetime.datetime.now()
-        user = self.model(None, username, '', '', email.strip().lower(), 'placeholder', False, True, False, now, now)
+        
+        # Normalize the address by lowercasing the domain part of the email
+        # address.
+        try:
+            email_name, domain_part = email.strip().split('@', 1)
+        except ValueError:
+            pass
+        else:
+            email = '@'.join([email_name, domain_part.lower()])
+
+        user = self.model(username=username, email=email, is_staff=False,
+                         is_active=True, is_superuser=False, last_login=now,
+                         date_joined=now)
+
         if password:
             user.set_password(password)
         else:
             user.set_unusable_password()
-        user.save()
+        user.save(using=self._db)
         return user
 
     def create_superuser(self, username, email, password):
@@ -110,7 +134,7 @@
         u.is_staff = True
         u.is_active = True
         u.is_superuser = True
-        u.save()
+        u.save(using=self._db)
         return u
 
     def make_random_password(self, length=10, allowed_chars='abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'):
@@ -120,12 +144,56 @@
         from random import choice
         return ''.join([choice(allowed_chars) for i in range(length)])
 
+
+# A few helper functions for common logic between User and AnonymousUser.
+def _user_get_all_permissions(user, obj):
+    permissions = set()
+    anon = user.is_anonymous()
+    for backend in auth.get_backends():
+        if not anon or backend.supports_anonymous_user:
+            if hasattr(backend, "get_all_permissions"):
+                if obj is not None:
+                    if backend.supports_object_permissions:
+                        permissions.update(
+                            backend.get_all_permissions(user, obj)
+                        )
+                else:
+                    permissions.update(backend.get_all_permissions(user))
+    return permissions
+
+
+def _user_has_perm(user, perm, obj):
+    anon = user.is_anonymous()
+    for backend in auth.get_backends():
+        if not anon or backend.supports_anonymous_user:
+            if hasattr(backend, "has_perm"):
+                if obj is not None:
+                    if (backend.supports_object_permissions and
+                        backend.has_perm(user, perm, obj)):
+                            return True
+                else:
+                    if backend.has_perm(user, perm):
+                        return True
+    return False
+
+
+def _user_has_module_perms(user, app_label):
+    anon = user.is_anonymous()
+    for backend in auth.get_backends():
+        if not anon or backend.supports_anonymous_user:
+            if hasattr(backend, "has_module_perms"):
+                if backend.has_module_perms(user, app_label):
+                    return True
+    return False
+
+
 class User(models.Model):
-    """Users within the Django authentication system are represented by this model.
+    """
+    Users within the Django authentication system are represented by this model.
 
     Username and password are required. Other fields are optional.
     """
-    username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)."))
+    username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))
     first_name = models.CharField(_('first name'), max_length=30, blank=True)
     last_name = models.CharField(_('last name'), max_length=30, blank=True)
     email = models.EmailField(_('e-mail address'), blank=True)
@@ -151,11 +219,16 @@
         return "/users/%s/" % urllib.quote(smart_str(self.username))
 
     def is_anonymous(self):
-        "Always returns False. This is a way of comparing User objects to anonymous users."
+        """
+        Always returns False. This is a way of comparing User objects to
+        anonymous users.
+        """
         return False
 
     def is_authenticated(self):
-        """Always return True. This is a way to tell if the user has been authenticated in templates.
+        """
+        Always return True. This is a way to tell if the user has been
+        authenticated in templates.
         """
         return True
 
@@ -194,30 +267,35 @@
     def has_usable_password(self):
         return self.password != UNUSABLE_PASSWORD
 
-    def get_group_permissions(self):
+    def get_group_permissions(self, obj=None):
         """
         Returns a list of permission strings that this user has through
         his/her groups. This method queries all available auth backends.
+        If an object is passed in, only permissions matching this object
+        are returned.
         """
         permissions = set()
         for backend in auth.get_backends():
             if hasattr(backend, "get_group_permissions"):
-                permissions.update(backend.get_group_permissions(self))
+                if obj is not None:
+                    if backend.supports_object_permissions:
+                        permissions.update(
+                            backend.get_group_permissions(self, obj)
+                        )
+                else:
+                    permissions.update(backend.get_group_permissions(self))
         return permissions
 
-    def get_all_permissions(self):
-        permissions = set()
-        for backend in auth.get_backends():
-            if hasattr(backend, "get_all_permissions"):
-                permissions.update(backend.get_all_permissions(self))
-        return permissions
+    def get_all_permissions(self, obj=None):
+        return _user_get_all_permissions(self, obj)
 
-    def has_perm(self, perm):
+    def has_perm(self, perm, obj=None):
         """
         Returns True if the user has the specified permission. This method
         queries all available auth backends, but returns immediately if any
         backend returns True. Thus, a user who has permission from a single
-        auth backend is assumed to have permission in general.
+        auth backend is assumed to have permission in general. If an object
+        is provided, permissions for this specific object are checked.
         """
         # Inactive users have no permissions.
         if not self.is_active:
@@ -228,16 +306,16 @@
             return True
 
         # Otherwise we need to check the backends.
-        for backend in auth.get_backends():
-            if hasattr(backend, "has_perm"):
-                if backend.has_perm(self, perm):
-                    return True
-        return False
+        return _user_has_perm(self, perm, obj)
 
-    def has_perms(self, perm_list):
-        """Returns True if the user has each of the specified permissions."""
+    def has_perms(self, perm_list, obj=None):
+        """
+        Returns True if the user has each of the specified permissions.
+        If object is passed, it checks if the user has all required perms
+        for this object.
+        """
         for perm in perm_list:
-            if not self.has_perm(perm):
+            if not self.has_perm(perm, obj):
                 return False
         return True
 
@@ -252,11 +330,7 @@
         if self.is_superuser:
             return True
 
-        for backend in auth.get_backends():
-            if hasattr(backend, "has_module_perms"):
-                if backend.has_module_perms(self, app_label):
-                    return True
-        return False
+        return _user_has_module_perms(self, app_label)
 
     def get_and_delete_messages(self):
         messages = []
@@ -278,16 +352,35 @@
         if not hasattr(self, '_profile_cache'):
             from django.conf import settings
             if not getattr(settings, 'AUTH_PROFILE_MODULE', False):
-                raise SiteProfileNotAvailable
+                raise SiteProfileNotAvailable('You need to set AUTH_PROFILE_MO'
+                                              'DULE in your project settings')
             try:
                 app_label, model_name = settings.AUTH_PROFILE_MODULE.split('.')
+            except ValueError:
+                raise SiteProfileNotAvailable('app_label and model_name should'
+                        ' be separated by a dot in the AUTH_PROFILE_MODULE set'
+                        'ting')
+
+            try:
                 model = models.get_model(app_label, model_name)
-                self._profile_cache = model._default_manager.get(user__id__exact=self.id)
+                if model is None:
+                    raise SiteProfileNotAvailable('Unable to load the profile '
+                        'model, check AUTH_PROFILE_MODULE in your project sett'
+                        'ings')
+                self._profile_cache = model._default_manager.using(self._state.db).get(user__id__exact=self.id)
                 self._profile_cache.user = self
             except (ImportError, ImproperlyConfigured):
                 raise SiteProfileNotAvailable
         return self._profile_cache
 
+    def _get_message_set(self):
+        import warnings
+        warnings.warn('The user messaging API is deprecated. Please update'
+                      ' your code to use the new messages framework.',
+                      category=PendingDeprecationWarning)
+        return self._message_set
+    message_set = property(_get_message_set)
+
 class Message(models.Model):
     """
     The message system is a lightweight way to queue messages for given
@@ -297,7 +390,7 @@
     actions. For example, "The poll Foo was created successfully." is a
     message.
     """
-    user = models.ForeignKey(User)
+    user = models.ForeignKey(User, related_name='_message_set')
     message = models.TextField(_('message'))
 
     def __unicode__(self):
@@ -350,14 +443,23 @@
         return self._user_permissions
     user_permissions = property(_get_user_permissions)
 
-    def has_perm(self, perm):
-        return False
+    def get_group_permissions(self, obj=None):
+        return set()
+
+    def get_all_permissions(self, obj=None):
+        return _user_get_all_permissions(self, obj=obj)
 
-    def has_perms(self, perm_list):
-        return False
+    def has_perm(self, perm, obj=None):
+        return _user_has_perm(self, perm, obj=obj)
+
+    def has_perms(self, perm_list, obj=None):
+        for perm in perm_list:
+            if not self.has_perm(perm, obj):
+                return False
+        return True
 
     def has_module_perms(self, module):
-        return False
+        return _user_has_module_perms(self, module)
 
     def get_and_delete_messages(self):
         return []
--- a/web/lib/django/contrib/auth/tests/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/tests/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,13 @@
+from django.contrib.auth.tests.auth_backends import BackendTest, RowlevelBackendTest, AnonymousUserBackendTest, NoAnonymousUserBackendTest
 from django.contrib.auth.tests.basic import BASIC_TESTS
-from django.contrib.auth.tests.views \
-        import PasswordResetTest, ChangePasswordTest, LoginTest, LogoutTest
+from django.contrib.auth.tests.decorators import LoginRequiredTestCase
 from django.contrib.auth.tests.forms import FORM_TESTS
 from django.contrib.auth.tests.remote_user \
         import RemoteUserTest, RemoteUserNoCreateTest, RemoteUserCustomTest
+from django.contrib.auth.tests.models import ProfileTestCase
 from django.contrib.auth.tests.tokens import TOKEN_GENERATOR_TESTS
+from django.contrib.auth.tests.views \
+        import PasswordResetTest, ChangePasswordTest, LoginTest, LogoutTest
 
 # The password for the fixture data users is 'password'
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/auth/tests/auth_backends.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,247 @@
+from django.conf import settings
+from django.contrib.auth.models import User, Group, Permission, AnonymousUser
+from django.contrib.contenttypes.models import ContentType
+from django.test import TestCase
+
+
+class BackendTest(TestCase):
+
+    backend = 'django.contrib.auth.backends.ModelBackend'
+
+    def setUp(self):
+        self.curr_auth = settings.AUTHENTICATION_BACKENDS
+        settings.AUTHENTICATION_BACKENDS = (self.backend,)
+        User.objects.create_user('test', 'test@example.com', 'test')
+
+    def tearDown(self):
+        settings.AUTHENTICATION_BACKENDS = self.curr_auth
+
+    def test_has_perm(self):
+        user = User.objects.get(username='test')
+        self.assertEqual(user.has_perm('auth.test'), False)
+        user.is_staff = True
+        user.save()
+        self.assertEqual(user.has_perm('auth.test'), False)
+        user.is_superuser = True
+        user.save()
+        self.assertEqual(user.has_perm('auth.test'), True)
+        user.is_staff = False
+        user.is_superuser = False
+        user.save()
+        self.assertEqual(user.has_perm('auth.test'), False)
+        user.is_staff = True
+        user.is_superuser = True
+        user.is_active = False
+        user.save()
+        self.assertEqual(user.has_perm('auth.test'), False)
+
+    def test_custom_perms(self):
+        user = User.objects.get(username='test')
+        content_type=ContentType.objects.get_for_model(Group)
+        perm = Permission.objects.create(name='test', content_type=content_type, codename='test')
+        user.user_permissions.add(perm)
+        user.save()
+
+        # reloading user to purge the _perm_cache
+        user = User.objects.get(username='test')
+        self.assertEqual(user.get_all_permissions() == set([u'auth.test']), True)
+        self.assertEqual(user.get_group_permissions(), set([]))
+        self.assertEqual(user.has_module_perms('Group'), False)
+        self.assertEqual(user.has_module_perms('auth'), True)
+        perm = Permission.objects.create(name='test2', content_type=content_type, codename='test2')
+        user.user_permissions.add(perm)
+        user.save()
+        perm = Permission.objects.create(name='test3', content_type=content_type, codename='test3')
+        user.user_permissions.add(perm)
+        user.save()
+        user = User.objects.get(username='test')
+        self.assertEqual(user.get_all_permissions(), set([u'auth.test2', u'auth.test', u'auth.test3']))
+        self.assertEqual(user.has_perm('test'), False)
+        self.assertEqual(user.has_perm('auth.test'), True)
+        self.assertEqual(user.has_perms(['auth.test2', 'auth.test3']), True)
+        perm = Permission.objects.create(name='test_group', content_type=content_type, codename='test_group')
+        group = Group.objects.create(name='test_group')
+        group.permissions.add(perm)
+        group.save()
+        user.groups.add(group)
+        user = User.objects.get(username='test')
+        exp = set([u'auth.test2', u'auth.test', u'auth.test3', u'auth.test_group'])
+        self.assertEqual(user.get_all_permissions(), exp)
+        self.assertEqual(user.get_group_permissions(), set([u'auth.test_group']))
+        self.assertEqual(user.has_perms(['auth.test3', 'auth.test_group']), True)
+
+        user = AnonymousUser()
+        self.assertEqual(user.has_perm('test'), False)
+        self.assertEqual(user.has_perms(['auth.test2', 'auth.test3']), False)
+
+    def test_has_no_object_perm(self):
+        """Regressiontest for #12462"""
+        user = User.objects.get(username='test')
+        content_type=ContentType.objects.get_for_model(Group)
+        perm = Permission.objects.create(name='test', content_type=content_type, codename='test')
+        user.user_permissions.add(perm)
+        user.save()
+
+        self.assertEqual(user.has_perm('auth.test', 'object'), False)
+        self.assertEqual(user.get_all_permissions('object'), set([]))
+        self.assertEqual(user.has_perm('auth.test'), True)
+        self.assertEqual(user.get_all_permissions(), set(['auth.test']))
+
+
+class TestObj(object):
+    pass
+
+
+class SimpleRowlevelBackend(object):
+    supports_object_permissions = True
+
+    # This class also supports tests for anonymous user permissions,
+    # via subclasses which just set the 'supports_anonymous_user' attribute.
+
+    def has_perm(self, user, perm, obj=None):
+        if not obj:
+            return # We only support row level perms
+
+        if isinstance(obj, TestObj):
+            if user.username == 'test2':
+                return True
+            elif user.is_anonymous() and perm == 'anon':
+                # not reached due to supports_anonymous_user = False
+                return True
+        return False
+
+    def has_module_perms(self, user, app_label):
+        return app_label == "app1"
+
+    def get_all_permissions(self, user, obj=None):
+        if not obj:
+            return [] # We only support row level perms
+
+        if not isinstance(obj, TestObj):
+            return ['none']
+
+        if user.is_anonymous():
+            return ['anon']
+        if user.username == 'test2':
+            return ['simple', 'advanced']
+        else:
+            return ['simple']
+
+    def get_group_permissions(self, user, obj=None):
+        if not obj:
+            return # We only support row level perms
+
+        if not isinstance(obj, TestObj):
+            return ['none']
+
+        if 'test_group' in [group.name for group in user.groups.all()]:
+            return ['group_perm']
+        else:
+            return ['none']
+
+
+class RowlevelBackendTest(TestCase):
+    """
+    Tests for auth backend that supports object level permissions
+    """
+    backend = 'django.contrib.auth.tests.auth_backends.SimpleRowlevelBackend'
+
+    def setUp(self):
+        self.curr_auth = settings.AUTHENTICATION_BACKENDS
+        settings.AUTHENTICATION_BACKENDS = self.curr_auth + (self.backend,)
+        self.user1 = User.objects.create_user('test', 'test@example.com', 'test')
+        self.user2 = User.objects.create_user('test2', 'test2@example.com', 'test')
+        self.user3 = User.objects.create_user('test3', 'test3@example.com', 'test')
+
+    def tearDown(self):
+        settings.AUTHENTICATION_BACKENDS = self.curr_auth
+
+    def test_has_perm(self):
+        self.assertEqual(self.user1.has_perm('perm', TestObj()), False)
+        self.assertEqual(self.user2.has_perm('perm', TestObj()), True)
+        self.assertEqual(self.user2.has_perm('perm'), False)
+        self.assertEqual(self.user2.has_perms(['simple', 'advanced'], TestObj()), True)
+        self.assertEqual(self.user3.has_perm('perm', TestObj()), False)
+        self.assertEqual(self.user3.has_perm('anon', TestObj()), False)
+        self.assertEqual(self.user3.has_perms(['simple', 'advanced'], TestObj()), False)
+
+    def test_get_all_permissions(self):
+        self.assertEqual(self.user1.get_all_permissions(TestObj()), set(['simple']))
+        self.assertEqual(self.user2.get_all_permissions(TestObj()), set(['simple', 'advanced']))
+        self.assertEqual(self.user2.get_all_permissions(), set([]))
+
+    def test_get_group_permissions(self):
+        content_type=ContentType.objects.get_for_model(Group)
+        group = Group.objects.create(name='test_group')
+        self.user3.groups.add(group)
+        self.assertEqual(self.user3.get_group_permissions(TestObj()), set(['group_perm']))
+
+
+class AnonymousUserBackend(SimpleRowlevelBackend):
+
+    supports_anonymous_user = True
+
+
+class NoAnonymousUserBackend(SimpleRowlevelBackend):
+
+    supports_anonymous_user = False
+
+
+class AnonymousUserBackendTest(TestCase):
+    """
+    Tests for AnonymousUser delegating to backend if it has 'supports_anonymous_user' = True
+    """
+
+    backend = 'django.contrib.auth.tests.auth_backends.AnonymousUserBackend'
+
+    def setUp(self):
+        self.curr_auth = settings.AUTHENTICATION_BACKENDS
+        settings.AUTHENTICATION_BACKENDS = (self.backend,)
+        self.user1 = AnonymousUser()
+
+    def tearDown(self):
+        settings.AUTHENTICATION_BACKENDS = self.curr_auth
+
+    def test_has_perm(self):
+        self.assertEqual(self.user1.has_perm('perm', TestObj()), False)
+        self.assertEqual(self.user1.has_perm('anon', TestObj()), True)
+
+    def test_has_perms(self):
+        self.assertEqual(self.user1.has_perms(['anon'], TestObj()), True)
+        self.assertEqual(self.user1.has_perms(['anon', 'perm'], TestObj()), False)
+
+    def test_has_module_perms(self):
+        self.assertEqual(self.user1.has_module_perms("app1"), True)
+        self.assertEqual(self.user1.has_module_perms("app2"), False)
+
+    def test_get_all_permissions(self):
+        self.assertEqual(self.user1.get_all_permissions(TestObj()), set(['anon']))
+
+
+class NoAnonymousUserBackendTest(TestCase):
+    """
+    Tests that AnonymousUser does not delegate to backend if it has 'supports_anonymous_user' = False
+    """
+    backend = 'django.contrib.auth.tests.auth_backends.NoAnonymousUserBackend'
+
+    def setUp(self):
+        self.curr_auth = settings.AUTHENTICATION_BACKENDS
+        settings.AUTHENTICATION_BACKENDS = self.curr_auth + (self.backend,)
+        self.user1 = AnonymousUser()
+
+    def tearDown(self):
+        settings.AUTHENTICATION_BACKENDS = self.curr_auth
+
+    def test_has_perm(self):
+        self.assertEqual(self.user1.has_perm('perm', TestObj()), False)
+        self.assertEqual(self.user1.has_perm('anon', TestObj()), False)
+
+    def test_has_perms(self):
+        self.assertEqual(self.user1.has_perms(['anon'], TestObj()), False)
+
+    def test_has_module_perms(self):
+        self.assertEqual(self.user1.has_module_perms("app1"), False)
+        self.assertEqual(self.user1.has_module_perms("app2"), False)
+
+    def test_get_all_permissions(self):
+        self.assertEqual(self.user1.get_all_permissions(TestObj()), set())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/auth/tests/decorators.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,25 @@
+from unittest import TestCase
+
+from django.contrib.auth.decorators import login_required
+
+
+class LoginRequiredTestCase(TestCase):
+    """
+    Tests the login_required decorators
+    """
+    def testCallable(self):
+        """
+        Check that login_required is assignable to callable objects.
+        """
+        class CallableView(object):
+            def __call__(self, *args, **kwargs):
+                pass
+        login_required(CallableView())
+        
+    def testView(self):
+        """
+        Check that login_required is assignable to normal views.
+        """
+        def normal_view(request):
+            pass
+        login_required(normal_view)
\ No newline at end of file
--- a/web/lib/django/contrib/auth/tests/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/tests/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -21,7 +21,7 @@
 # The username contains invalid data.
 
 >>> data = {
-...     'username': 'jsmith@example.com',
+...     'username': 'jsmith!',
 ...     'password1': 'test123',
 ...     'password2': 'test123',
 ... }
@@ -29,7 +29,7 @@
 >>> form.is_valid()
 False
 >>> form["username"].errors
-[u'This value must contain only letters, numbers and underscores.']
+[u'This value may contain only letters, numbers and @/./+/-/_ characters.']
 
 # The verification password is incorrect.
 
@@ -65,7 +65,7 @@
 # The success case.
 
 >>> data = {
-...     'username': 'jsmith2',
+...     'username': 'jsmith2@example.com',
 ...     'password1': 'test123',
 ...     'password2': 'test123',
 ... }
@@ -73,7 +73,7 @@
 >>> form.is_valid()
 True
 >>> form.save()
-<User: jsmith2>
+<User: jsmith2@example.com>
 
 # The user submits an invalid username.
 
@@ -189,7 +189,7 @@
 >>> form.is_valid()
 False
 >>> form['username'].errors
-[u'This value must contain only letters, numbers and underscores.']
+[u'This value may contain only letters, numbers and @/./+/-/_ characters.']
 
 
 ### PasswordResetForm
@@ -219,4 +219,13 @@
 >>> form.cleaned_data['email']
 u'jsmith3@example.com'
 
+# bug #5605, preserve the case of the user name (before the @ in the email address)
+# when creating a user.
+>>> user = User.objects.create_user('forms_test2', 'tesT@EXAMple.com', 'test')
+>>> user.email
+'tesT@example.com'
+>>> user = User.objects.create_user('forms_test3', 'tesT', 'test')
+>>> user.email
+'tesT'
+
 """
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/auth/tests/models.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,35 @@
+from django.conf import settings
+from django.test import TestCase
+from django.contrib.auth.models import User, SiteProfileNotAvailable
+
+class ProfileTestCase(TestCase):
+    fixtures = ['authtestdata.json']
+    def setUp(self):
+        """Backs up the AUTH_PROFILE_MODULE"""
+        self.old_AUTH_PROFILE_MODULE = getattr(settings,
+                                               'AUTH_PROFILE_MODULE', None)
+
+    def tearDown(self):
+        """Restores the AUTH_PROFILE_MODULE -- if it was not set it is deleted,
+        otherwise the old value is restored"""
+        if self.old_AUTH_PROFILE_MODULE is None and \
+                hasattr(settings, 'AUTH_PROFILE_MODULE'):
+            del settings.AUTH_PROFILE_MODULE
+
+        if self.old_AUTH_PROFILE_MODULE is not None:
+            settings.AUTH_PROFILE_MODULE = self.old_AUTH_PROFILE_MODULE
+
+    def test_site_profile_not_available(self):
+        # calling get_profile without AUTH_PROFILE_MODULE set
+        if hasattr(settings, 'AUTH_PROFILE_MODULE'):
+            del settings.AUTH_PROFILE_MODULE
+        user = User.objects.get(username='testclient')
+        self.assertRaises(SiteProfileNotAvailable, user.get_profile)
+
+        # Bad syntax in AUTH_PROFILE_MODULE: 
+        settings.AUTH_PROFILE_MODULE = 'foobar'
+        self.assertRaises(SiteProfileNotAvailable, user.get_profile)
+
+        # module that doesn't exist
+        settings.AUTH_PROFILE_MODULE = 'foo.bar'
+        self.assertRaises(SiteProfileNotAvailable, user.get_profile)
--- a/web/lib/django/contrib/auth/tests/remote_user.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/tests/remote_user.py	Tue May 25 02:43:45 2010 +0200
@@ -2,7 +2,7 @@
 
 from django.conf import settings
 from django.contrib.auth.backends import RemoteUserBackend
-from django.contrib.auth.models import AnonymousUser, User
+from django.contrib.auth.models import User
 from django.test import TestCase
 
 
@@ -30,15 +30,15 @@
         num_users = User.objects.count()
 
         response = self.client.get('/remote_user/')
-        self.assert_(isinstance(response.context['user'], AnonymousUser))
+        self.assert_(response.context['user'].is_anonymous())
         self.assertEqual(User.objects.count(), num_users)
 
         response = self.client.get('/remote_user/', REMOTE_USER=None)
-        self.assert_(isinstance(response.context['user'], AnonymousUser))
+        self.assert_(response.context['user'].is_anonymous())
         self.assertEqual(User.objects.count(), num_users)
 
         response = self.client.get('/remote_user/', REMOTE_USER='')
-        self.assert_(isinstance(response.context['user'], AnonymousUser))
+        self.assert_(response.context['user'].is_anonymous())
         self.assertEqual(User.objects.count(), num_users)
 
     def test_unknown_user(self):
@@ -115,7 +115,7 @@
     def test_unknown_user(self):
         num_users = User.objects.count()
         response = self.client.get('/remote_user/', REMOTE_USER='newuser')
-        self.assert_(isinstance(response.context['user'], AnonymousUser))
+        self.assert_(response.context['user'].is_anonymous())
         self.assertEqual(User.objects.count(), num_users)
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/auth/tests/templates/registration/password_reset_complete.html	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+Password reset successfully
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/auth/tests/templates/registration/password_reset_confirm.html	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,5 @@
+{% if validlink %}
+Please enter your new password: {{ form }}
+{% else %}
+The password reset link was invalid
+{% endif %}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/auth/tests/templates/registration/password_reset_done.html	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+E-mail sent
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/auth/tests/templates/registration/password_reset_email.html	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+{{ protocol }}://{{ domain }}/reset/{{ uid }}-{{ token }}/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/auth/tests/templates/registration/password_reset_form.html	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+{{ form }}
\ No newline at end of file
--- a/web/lib/django/contrib/auth/tests/views.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/tests/views.py	Tue May 25 02:43:45 2010 +0200
@@ -1,8 +1,9 @@
 import os
 import re
+import urllib
 
 from django.conf import settings
-from django.contrib.auth import SESSION_KEY
+from django.contrib.auth import SESSION_KEY, REDIRECT_FIELD_NAME
 from django.contrib.auth.forms import AuthenticationForm
 from django.contrib.sites.models import Site, RequestSite
 from django.contrib.auth.models import User
@@ -37,16 +38,6 @@
 
 class PasswordResetTest(AuthViewsTestCase):
 
-    def setUp(self):
-        self.old_LANGUAGES = settings.LANGUAGES
-        self.old_LANGUAGE_CODE = settings.LANGUAGE_CODE
-        settings.LANGUAGES = (('en', 'English'),)
-        settings.LANGUAGE_CODE = 'en'
-
-    def tearDown(self):
-        settings.LANGUAGES = self.old_LANGUAGES
-        settings.LANGUAGE_CODE = self.old_LANGUAGE_CODE
-
     def test_email_not_found(self):
         "Error is raised if the provided email address isn't currently registered"
         response = self.client.get('/password_reset/')
@@ -193,6 +184,46 @@
         self.assertEquals(response.context['site_name'], site.name)
         self.assert_(isinstance(response.context['form'], AuthenticationForm), 
                      'Login form is not an AuthenticationForm')
+
+    def test_security_check(self, password='password'):
+        login_url = reverse('django.contrib.auth.views.login')
+
+        # Those URLs should not pass the security check
+        for bad_url in ('http://example.com',
+                        'https://example.com',
+                        'ftp://exampel.com',
+                        '//example.com'):
+
+            nasty_url = '%(url)s?%(next)s=%(bad_url)s' % {
+                'url': login_url,
+                'next': REDIRECT_FIELD_NAME,
+                'bad_url': urllib.quote(bad_url)
+            }
+            response = self.client.post(nasty_url, {
+                'username': 'testclient',
+                'password': password,
+                }
+            )
+            self.assertEquals(response.status_code, 302)
+            self.assertFalse(bad_url in response['Location'], "%s should be blocked" % bad_url)
+
+        # Now, these URLs have an other URL as a GET parameter and therefore
+        # should be allowed
+        for url_ in ('http://example.com', 'https://example.com',
+                    'ftp://exampel.com',  '//example.com'):
+            safe_url = '%(url)s?%(next)s=/view/?param=%(safe_param)s' % {
+                'url': login_url,
+                'next': REDIRECT_FIELD_NAME,
+                'safe_param': urllib.quote(url_)
+            }
+            response = self.client.post(safe_url, {
+                    'username': 'testclient',
+                    'password': password,
+                }
+            )
+            self.assertEquals(response.status_code, 302)
+            self.assertTrue('/view/?param=%s' % url_ in response['Location'], "/view/?param=%s should be allowed" % url_)
+
         
 class LogoutTest(AuthViewsTestCase):
     urls = 'django.contrib.auth.tests.urls'
--- a/web/lib/django/contrib/auth/views.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/auth/views.py	Tue May 25 02:43:45 2010 +0200
@@ -1,9 +1,13 @@
+import re
 from django.conf import settings
 from django.contrib.auth import REDIRECT_FIELD_NAME
+# Avoid shadowing the login() view below.
+from django.contrib.auth import login as auth_login
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.forms import AuthenticationForm
 from django.contrib.auth.forms import PasswordResetForm, SetPasswordForm, PasswordChangeForm
 from django.contrib.auth.tokens import default_token_generator
+from django.views.decorators.csrf import csrf_protect
 from django.core.urlresolvers import reverse
 from django.shortcuts import render_to_response, get_object_or_404
 from django.contrib.sites.models import Site, RequestSite
@@ -14,34 +18,53 @@
 from django.contrib.auth.models import User
 from django.views.decorators.cache import never_cache
 
-def login(request, template_name='registration/login.html', redirect_field_name=REDIRECT_FIELD_NAME):
-    "Displays the login form and handles the login action."
+@csrf_protect
+@never_cache
+def login(request, template_name='registration/login.html',
+          redirect_field_name=REDIRECT_FIELD_NAME,
+          authentication_form=AuthenticationForm):
+    """Displays the login form and handles the login action."""
+
     redirect_to = request.REQUEST.get(redirect_field_name, '')
+    
     if request.method == "POST":
-        form = AuthenticationForm(data=request.POST)
+        form = authentication_form(data=request.POST)
         if form.is_valid():
             # Light security check -- make sure redirect_to isn't garbage.
-            if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
+            if not redirect_to or ' ' in redirect_to:
                 redirect_to = settings.LOGIN_REDIRECT_URL
-            from django.contrib.auth import login
-            login(request, form.get_user())
+            
+            # Heavier security check -- redirects to http://example.com should 
+            # not be allowed, but things like /view/?param=http://example.com 
+            # should be allowed. This regex checks if there is a '//' *before* a
+            # question mark.
+            elif '//' in redirect_to and re.match(r'[^\?]*//', redirect_to):
+                    redirect_to = settings.LOGIN_REDIRECT_URL
+            
+            # Okay, security checks complete. Log the user in.
+            auth_login(request, form.get_user())
+
             if request.session.test_cookie_worked():
                 request.session.delete_test_cookie()
+
             return HttpResponseRedirect(redirect_to)
+
     else:
-        form = AuthenticationForm(request)
+        form = authentication_form(request)
+    
     request.session.set_test_cookie()
+    
     if Site._meta.installed:
         current_site = Site.objects.get_current()
     else:
         current_site = RequestSite(request)
+    
     return render_to_response(template_name, {
         'form': form,
         redirect_field_name: redirect_to,
         'site': current_site,
         'site_name': current_site.name,
     }, context_instance=RequestContext(request))
-login = never_cache(login)
 
 def logout(request, next_page=None, template_name='registration/logged_out.html', redirect_field_name=REDIRECT_FIELD_NAME):
     "Logs out the user and displays 'You are logged out' message."
@@ -78,6 +101,7 @@
 #   prompts for a new password
 # - password_reset_complete shows a success message for the above
 
+@csrf_protect
 def password_reset(request, is_admin_site=False, template_name='registration/password_reset_form.html',
         email_template_name='registration/password_reset_email.html',
         password_reset_form=PasswordResetForm, token_generator=default_token_generator,
@@ -107,6 +131,7 @@
 def password_reset_done(request, template_name='registration/password_reset_done.html'):
     return render_to_response(template_name, context_instance=RequestContext(request))
 
+# Doesn't need csrf_protect since no-one can guess the URL
 def password_reset_confirm(request, uidb36=None, token=None, template_name='registration/password_reset_confirm.html',
                            token_generator=default_token_generator, set_password_form=SetPasswordForm,
                            post_reset_redirect=None):
@@ -137,28 +162,29 @@
     else:
         context_instance['validlink'] = False
         form = None
-    context_instance['form'] = form    
+    context_instance['form'] = form
     return render_to_response(template_name, context_instance=context_instance)
 
 def password_reset_complete(request, template_name='registration/password_reset_complete.html'):
     return render_to_response(template_name, context_instance=RequestContext(request,
                                                                              {'login_url': settings.LOGIN_URL}))
 
+@csrf_protect
+@login_required
 def password_change(request, template_name='registration/password_change_form.html',
-                    post_change_redirect=None):
+                    post_change_redirect=None, password_change_form=PasswordChangeForm):
     if post_change_redirect is None:
         post_change_redirect = reverse('django.contrib.auth.views.password_change_done')
     if request.method == "POST":
-        form = PasswordChangeForm(request.user, request.POST)
+        form = password_change_form(user=request.user, data=request.POST)
         if form.is_valid():
             form.save()
             return HttpResponseRedirect(post_change_redirect)
     else:
-        form = PasswordChangeForm(request.user)
+        form = password_change_form(user=request.user)
     return render_to_response(template_name, {
         'form': form,
     }, context_instance=RequestContext(request))
-password_change = login_required(password_change)
 
 def password_change_done(request, template_name='registration/password_change_done.html'):
     return render_to_response(template_name, context_instance=RequestContext(request))
--- a/web/lib/django/contrib/comments/admin.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/admin.py	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,8 @@
 from django.contrib import admin
 from django.contrib.comments.models import Comment
-from django.utils.translation import ugettext_lazy as _
+from django.utils.translation import ugettext_lazy as _, ungettext
 from django.contrib.comments import get_model
+from django.contrib.comments.views.moderation import perform_flag, perform_approve, perform_delete
 
 class CommentsAdmin(admin.ModelAdmin):
     fieldsets = (
@@ -22,6 +23,47 @@
     ordering = ('-submit_date',)
     raw_id_fields = ('user',)
     search_fields = ('comment', 'user__username', 'user_name', 'user_email', 'user_url', 'ip_address')
+    actions = ["flag_comments", "approve_comments", "remove_comments"]
+
+    def get_actions(self, request):
+        actions = super(CommentsAdmin, self).get_actions(request)
+        # Only superusers should be able to delete the comments from the DB.
+        if not request.user.is_superuser:
+            actions.pop('delete_selected')
+        if not request.user.has_perm('comments.can_moderate'):
+            actions.pop('approve_comments')
+            actions.pop('remove_comments')
+        return actions
+
+    def flag_comments(self, request, queryset):
+        self._bulk_flag(request, queryset, perform_flag,
+                        lambda n: ungettext('flagged', 'flagged', n))
+    flag_comments.short_description = _("Flag selected comments")
+
+    def approve_comments(self, request, queryset):
+        self._bulk_flag(request, queryset, perform_approve,
+                        lambda n: ungettext('approved', 'approved', n))
+    approve_comments.short_description = _("Approve selected comments")
+
+    def remove_comments(self, request, queryset):
+        self._bulk_flag(request, queryset, perform_delete,
+                        lambda n: ungettext('removed', 'removed', n))
+    remove_comments.short_description = _("Remove selected comments")
+
+    def _bulk_flag(self, request, queryset, action, done_message):
+        """
+        Flag, approve, or remove some comments from an admin action. Actually
+        calls the `action` argument to perform the heavy lifting.
+        """
+        n_comments = 0
+        for comment in queryset:
+            action(request, comment)
+            n_comments += 1
+
+        msg = ungettext(u'1 comment was successfully %(action)s.',
+                        u'%(count)s comments were successfully %(action)s.',
+                        n_comments)
+        self.message_user(request, msg % {'count': n_comments, 'action': done_message(n_comments)})
 
 # Only register the default admin if the model is the built-in comment model
 # (this won't be true if there's a custom comment app).
--- a/web/lib/django/contrib/comments/feeds.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/feeds.py	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,5 @@
 from django.conf import settings
-from django.contrib.syndication.feeds import Feed
+from django.contrib.syndication.views import Feed
 from django.contrib.sites.models import Site
 from django.contrib import comments
 from django.utils.translation import ugettext as _
@@ -33,6 +33,6 @@
             params = [settings.COMMENTS_BANNED_USERS_GROUP]
             qs = qs.extra(where=where, params=params)
         return qs.order_by('-submit_date')[:40]
-        
+
     def item_pubdate(self, item):
         return item.submit_date
--- a/web/lib/django/contrib/comments/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -28,7 +28,7 @@
             initial = {}
         initial.update(self.generate_security_data())
         super(CommentSecurityForm, self).__init__(data=data, initial=initial)
-        
+
     def security_errors(self):
         """Return just those errors associated with security"""
         errors = ErrorDict()
@@ -107,13 +107,13 @@
         """
         if not self.is_valid():
             raise ValueError("get_comment_object may only be called on valid forms")
-        
+
         CommentModel = self.get_comment_model()
         new = CommentModel(**self.get_comment_create_data())
         new = self.check_for_duplicate_comment(new)
-        
+
         return new
-        
+
     def get_comment_model(self):
         """
         Get the comment model to create with this form. Subclasses in custom
@@ -121,7 +121,7 @@
         check_for_duplicate_comment to provide custom comment models.
         """
         return Comment
-        
+
     def get_comment_create_data(self):
         """
         Returns the dict of data to be used to create a comment. Subclasses in
@@ -140,13 +140,15 @@
             is_public    = True,
             is_removed   = False,
         )
-        
+
     def check_for_duplicate_comment(self, new):
         """
         Check that a submitted comment isn't a duplicate. This might be caused
         by someone posting a comment twice. If it is a dup, silently return the *previous* comment.
         """
-        possible_duplicates = self.get_comment_model()._default_manager.filter(
+        possible_duplicates = self.get_comment_model()._default_manager.using(
+            self.target_object._state.db
+        ).filter(
             content_type = new.content_type,
             object_pk = new.object_pk,
             user_name = new.user_name,
@@ -156,7 +158,7 @@
         for old in possible_duplicates:
             if old.submit_date.date() == new.submit_date.date() and old.comment == new.comment:
                 return old
-                
+
         return new
 
     def clean_comment(self):
--- a/web/lib/django/contrib/comments/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/models.py	Tue May 25 02:43:45 2010 +0200
@@ -79,10 +79,10 @@
     def __unicode__(self):
         return "%s: %s..." % (self.name, self.comment[:50])
 
-    def save(self, force_insert=False, force_update=False):
+    def save(self, *args, **kwargs):
         if self.submit_date is None:
             self.submit_date = datetime.datetime.now()
-        super(Comment, self).save(force_insert, force_update)
+        super(Comment, self).save(*args, **kwargs)
 
     def _get_userinfo(self):
         """
@@ -185,7 +185,7 @@
         return "%s flag of comment ID %s by %s" % \
             (self.flag, self.comment_id, self.user.username)
 
-    def save(self, force_insert=False, force_update=False):
+    def save(self, *args, **kwargs):
         if self.flag_date is None:
             self.flag_date = datetime.datetime.now()
-        super(CommentFlag, self).save(force_insert, force_update)
+        super(CommentFlag, self).save(*args, **kwargs)
--- a/web/lib/django/contrib/comments/moderation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/moderation.py	Tue May 25 02:43:45 2010 +0200
@@ -250,12 +250,11 @@
     models registered for comment moderation, and their associated
     moderation classes, and apply moderation to all incoming comments.
 
-    To register a model, obtain an instance of ``CommentModerator``
-    (this module exports one as ``moderator``), and call its
-    ``register`` method, passing the model class and a moderation
-    class (which should be a subclass of ``CommentModerator``). Note
-    that both of these should be the actual classes, not instances of
-    the classes.
+    To register a model, obtain an instance of ``Moderator`` (this
+    module exports one as ``moderator``), and call its ``register``
+    method, passing the model class and a moderation class (which
+    should be a subclass of ``CommentModerator``). Note that both of
+    these should be the actual classes, not instances of the classes.
 
     To cease moderation for a model, call the ``unregister`` method,
     passing the model class.
--- a/web/lib/django/contrib/comments/templates/comments/approve.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/templates/comments/approve.html	Tue May 25 02:43:45 2010 +0200
@@ -6,7 +6,7 @@
 {% block content %}
   <h1>{% trans "Really make this comment public?" %}</h1>
   <blockquote>{{ comment|linebreaks }}</blockquote>
-  <form action="." method="post">
+  <form action="." method="post">{% csrf_token %}
     {% if next %}<input type="hidden" name="next" value="{{ next }}" id="next" />{% endif %}
     <p class="submit">
       <input type="submit" name="submit" value="{% trans "Approve" %}" /> or <a href="{{ comment.get_absolute_url }}">cancel</a>
--- a/web/lib/django/contrib/comments/templates/comments/delete.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/templates/comments/delete.html	Tue May 25 02:43:45 2010 +0200
@@ -6,7 +6,7 @@
 {% block content %}
 <h1>{% trans "Really remove this comment?" %}</h1>
   <blockquote>{{ comment|linebreaks }}</blockquote>
-  <form action="." method="post">
+  <form action="." method="post">{% csrf_token %}
     {% if next %}<input type="hidden" name="next" value="{{ next }}" id="next" />{% endif %}
     <p class="submit">
     <input type="submit" name="submit" value="{% trans "Remove" %}" /> or <a href="{{ comment.get_absolute_url }}">cancel</a>
--- a/web/lib/django/contrib/comments/templates/comments/flag.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/templates/comments/flag.html	Tue May 25 02:43:45 2010 +0200
@@ -6,7 +6,7 @@
 {% block content %}
 <h1>{% trans "Really flag this comment?" %}</h1>
   <blockquote>{{ comment|linebreaks }}</blockquote>
-  <form action="." method="post">
+  <form action="." method="post">{% csrf_token %}
     {% if next %}<input type="hidden" name="next" value="{{ next }}" id="next" />{% endif %}
     <p class="submit">
     <input type="submit" name="submit" value="{% trans "Flag" %}" /> or <a href="{{ comment.get_absolute_url }}">cancel</a>
--- a/web/lib/django/contrib/comments/templates/comments/form.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/templates/comments/form.html	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,5 @@
 {% load comments i18n %}
-<form action="{% comment_form_target %}" method="post">
+<form action="{% comment_form_target %}" method="post">{% csrf_token %}
   {% if next %}<input type="hidden" name="next" value="{{ next }}" />{% endif %}
   {% for field in form %}
     {% if field.is_hidden %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/comments/templates/comments/list.html	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,10 @@
+<dl id="comments">
+  {% for comment in comment_list %}
+    <dt id="c{{ comment.id }}">
+        {{ comment.submit_date }} - {{ comment.name }}
+    </dt>
+    <dd>
+        <p>{{ comment.comment }}</p>
+    </dd>
+  {% endfor %}
+</dl>
--- a/web/lib/django/contrib/comments/templates/comments/moderation_queue.html	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-{% extends "admin/change_list.html" %}
-{% load adminmedia i18n %}
-
-{% block title %}{% trans "Comment moderation queue" %}{% endblock %}
-
-{% block extrahead %}
-  {{ block.super }}
-  <style type="text/css" media="screen">
-    p#nocomments { font-size: 200%; text-align: center; border: 1px #ccc dashed; padding: 4em; }
-    td.actions { width: 11em; }
-    td.actions form { display: inline; }
-    td.actions form input.submit { width: 5em; padding: 2px 4px; margin-right: 4px;}
-    td.actions form input.approve { background: green; color: white; }
-    td.actions form input.remove { background: red; color: white; }
-  </style>
-{% endblock %}
-
-{% block branding %}
-<h1 id="site-name">{% trans "Comment moderation queue" %}</h1>
-{% endblock %}
-
-{% block breadcrumbs %}{% endblock %}
-
-{% block content %}
-{% if empty %}
-<p id="nocomments">{% trans "No comments to moderate" %}.</p>
-{% else %}
-<div id="content-main">
-  <div class="module" id="changelist">
-    <table cellspacing="0">
-      <thead>
-        <tr>
-          <th>{% trans "Action" %}</th>
-          <th>{% trans "Name" %}</th>
-          <th>{% trans "Comment" %}</th>
-          <th>{% trans "Email" %}</th>
-          <th>{% trans "URL" %}</th>
-          <th>{% trans "Authenticated?" %}</th>
-          <th>{% trans "IP Address" %}</th>
-          <th class="sorted desc">{% trans "Date posted" %}</th>
-        </tr>
-    </thead>
-    <tbody>
-      {% for comment in comments %}
-        <tr class="{% cycle 'row1' 'row2' %}">
-          <td class="actions">
-            <form action="{% url comments-approve comment.pk %}" method="post">
-              <input type="hidden" name="next" value="{% url comments-moderation-queue %}" />
-              <input class="approve submit" type="submit" name="submit" value="{% trans "Approve" %}" />
-            </form>
-            <form action="{% url comments-delete comment.pk %}" method="post">
-              <input type="hidden" name="next" value="{% url comments-moderation-queue %}" />
-              <input class="remove submit" type="submit" name="submit" value="{% trans "Remove" %}" />
-            </form>
-          </td>
-          <td>{{ comment.name }}</td>
-          <td>{{ comment.comment|truncatewords:"50" }}</td>
-          <td>{{ comment.email }}</td>
-          <td>{{ comment.url }}</td>
-          <td>
-            <img
-              src="{% admin_media_prefix %}img/admin/icon-{% if comment.user %}yes{% else %}no{% endif %}.gif"
-              alt="{% if comment.user %}{% trans "yes" %}{% else %}{% trans "no" %}{% endif %}"
-            />
-          </td>
-          <td>{{ comment.ip_address }}</td>
-          <td>{{ comment.submit_date|date:"F j, P" }}</td>
-        </tr>
-      {% endfor %}
-    </tbody>
-    </table>
-  </div>
-</div>
-{% endif %}
-{% endblock %}
--- a/web/lib/django/contrib/comments/templates/comments/preview.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/templates/comments/preview.html	Tue May 25 02:43:45 2010 +0200
@@ -5,7 +5,7 @@
 
 {% block content %}
   {% load comments %}
-  <form action="{% comment_form_target %}" method="post">
+  <form action="{% comment_form_target %}" method="post">{% csrf_token %}
     {% if next %}<input type="hidden" name="next" value="{{ next }}" />{% endif %}
     {% if form.errors %}
     <h1>{% blocktrans count form.errors|length as counter %}Please correct the error below{% plural %}Please correct the errors below{% endblocktrans %}</h1>
--- a/web/lib/django/contrib/comments/templatetags/comments.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/templatetags/comments.py	Tue May 25 02:43:45 2010 +0200
@@ -81,10 +81,10 @@
             object_pk    = smart_unicode(object_pk),
             site__pk     = settings.SITE_ID,
         )
-        
+
         # The is_public and is_removed fields are implementation details of the
         # built-in comment model's spam filtering system, so they might not
-        # be present on a custom comment model subclass. If they exist, we 
+        # be present on a custom comment model subclass. If they exist, we
         # should filter on them.
         field_names = [f.name for f in self.comment_model._meta.fields]
         if 'is_public' in field_names:
@@ -169,6 +169,46 @@
         else:
             return ''
 
+class RenderCommentListNode(CommentListNode):
+    """Render the comment list directly"""
+
+    #@classmethod
+    def handle_token(cls, parser, token):
+        """Class method to parse render_comment_list and return a Node."""
+        tokens = token.contents.split()
+        if tokens[1] != 'for':
+            raise template.TemplateSyntaxError("Second argument in %r tag must be 'for'" % tokens[0])
+
+        # {% render_comment_list for obj %}
+        if len(tokens) == 3:
+            return cls(object_expr=parser.compile_filter(tokens[2]))
+
+        # {% render_comment_list for app.models pk %}
+        elif len(tokens) == 4:
+            return cls(
+                ctype = BaseCommentNode.lookup_content_type(tokens[2], tokens[0]),
+                object_pk_expr = parser.compile_filter(tokens[3])
+            )
+    handle_token = classmethod(handle_token)
+
+    def render(self, context):
+        ctype, object_pk = self.get_target_ctype_pk(context)
+        if object_pk:
+            template_search_list = [
+                "comments/%s/%s/list.html" % (ctype.app_label, ctype.model),
+                "comments/%s/list.html" % ctype.app_label,
+                "comments/list.html"
+            ]
+            qs = self.get_query_set(context)
+            context.push()
+            liststr = render_to_string(template_search_list, {
+                "comment_list" : self.get_context_value_from_queryset(context, qs)
+            }, context)
+            context.pop()
+            return liststr
+        else:
+            return ''
+
 # We could just register each classmethod directly, but then we'd lose out on
 # the automagic docstrings-into-admin-docs tricks. So each node gets a cute
 # wrapper function that just exists to hold the docstring.
@@ -217,6 +257,24 @@
     return CommentListNode.handle_token(parser, token)
 
 #@register.tag
+def render_comment_list(parser, token):
+    """
+    Render the comment list (as returned by ``{% get_comment_list %}``)
+    through the ``comments/list.html`` template
+
+    Syntax::
+
+        {% render_comment_list for [object] %}
+        {% render_comment_list for [app].[model] [object_id] %}
+
+    Example usage::
+
+        {% render_comment_list for event %}
+
+    """
+    return RenderCommentListNode.handle_token(parser, token)
+
+#@register.tag
 def get_comment_form(parser, token):
     """
     Get a (new) form object to post a new comment.
@@ -248,12 +306,28 @@
 
     Example::
 
-        <form action="{% comment_form_target %}" method="POST">
+        <form action="{% comment_form_target %}" method="post">
     """
     return comments.get_form_target()
 
+#@register.simple_tag
+def get_comment_permalink(comment, anchor_pattern=None):
+    """
+    Get the permalink for a comment, optionally specifying the format of the
+    named anchor to be appended to the end of the URL.
+
+    Example::
+        {{ get_comment_permalink comment "#c%(id)s-by-%(user_name)s" }}
+    """
+
+    if anchor_pattern:
+        return comment.get_absolute_url(anchor_pattern)
+    return comment.get_absolute_url()
+
 register.tag(get_comment_count)
 register.tag(get_comment_list)
 register.tag(get_comment_form)
 register.tag(render_comment_form)
 register.simple_tag(comment_form_target)
+register.simple_tag(get_comment_permalink)
+register.tag(render_comment_list)
--- a/web/lib/django/contrib/comments/urls.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/urls.py	Tue May 25 02:43:45 2010 +0200
@@ -7,7 +7,6 @@
     url(r'^flagged/$',       'moderation.flag_done',        name='comments-flag-done'),
     url(r'^delete/(\d+)/$',  'moderation.delete',           name='comments-delete'),
     url(r'^deleted/$',       'moderation.delete_done',      name='comments-delete-done'),
-    url(r'^moderate/$',      'moderation.moderation_queue', name='comments-moderation-queue'),
     url(r'^approve/(\d+)/$', 'moderation.approve',          name='comments-approve'),
     url(r'^approved/$',      'moderation.approve_done',     name='comments-approve-done'),
 )
--- a/web/lib/django/contrib/comments/views/comments.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/views/comments.py	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,7 @@
 from django import http
 from django.conf import settings
 from utils import next_redirect, confirmation_view
-from django.core.exceptions import ObjectDoesNotExist
+from django.core.exceptions import ObjectDoesNotExist, ValidationError
 from django.db import models
 from django.shortcuts import render_to_response
 from django.template import RequestContext
@@ -10,6 +10,7 @@
 from django.views.decorators.http import require_POST
 from django.contrib import comments
 from django.contrib.comments import signals
+from django.views.decorators.csrf import csrf_protect
 
 class CommentPostBadRequest(http.HttpResponseBadRequest):
     """
@@ -22,7 +23,9 @@
         if settings.DEBUG:
             self.content = render_to_string("comments/400-debug.html", {"why": why})
 
-def post_comment(request, next=None):
+@csrf_protect
+@require_POST
+def post_comment(request, next=None, using=None):
     """
     Post a comment.
 
@@ -47,7 +50,7 @@
         return CommentPostBadRequest("Missing content_type or object_pk field.")
     try:
         model = models.get_model(*ctype.split(".", 1))
-        target = model._default_manager.get(pk=object_pk)
+        target = model._default_manager.using(using).get(pk=object_pk)
     except TypeError:
         return CommentPostBadRequest(
             "Invalid content_type value: %r" % escape(ctype))
@@ -59,6 +62,10 @@
         return CommentPostBadRequest(
             "No object matching content-type %r and object PK %r exists." % \
                 (escape(ctype), escape(object_pk)))
+    except (ValueError, ValidationError), e:
+        return CommentPostBadRequest(
+            "Attempting go get content-type %r and object PK %r exists raised %s" % \
+                (escape(ctype), escape(object_pk), e.__class__.__name__))
 
     # Do we want to preview the comment?
     preview = "preview" in data
@@ -75,8 +82,14 @@
     # If there are errors or if we requested a preview show the comment
     if form.errors or preview:
         template_list = [
-            "comments/%s_%s_preview.html" % tuple(str(model._meta).split(".")),
+            # These first two exist for purely historical reasons.
+            # Django v1.0 and v1.1 allowed the underscore format for
+            # preview templates, so we have to preserve that format.
+            "comments/%s_%s_preview.html" % (model._meta.app_label, model._meta.module_name),
             "comments/%s_preview.html" % model._meta.app_label,
+            # Now the usual directory based template heirarchy.
+            "comments/%s/%s/preview.html" % (model._meta.app_label, model._meta.module_name),
+            "comments/%s/preview.html" % model._meta.app_label,
             "comments/preview.html",
         ]
         return render_to_response(
@@ -116,8 +129,6 @@
 
     return next_redirect(data, next, comment_done, c=comment._get_pk_val())
 
-post_comment = require_POST(post_comment)
-
 comment_done = confirmation_view(
     template = "comments/posted.html",
     doc = """Display a "comment was posted" success page."""
--- a/web/lib/django/contrib/comments/views/moderation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/views/moderation.py	Tue May 25 02:43:45 2010 +0200
@@ -3,12 +3,12 @@
 from django.shortcuts import get_object_or_404, render_to_response
 from django.contrib.auth.decorators import login_required, permission_required
 from utils import next_redirect, confirmation_view
-from django.core.paginator import Paginator, InvalidPage
-from django.http import Http404
 from django.contrib import comments
 from django.contrib.comments import signals
+from django.views.decorators.csrf import csrf_protect
 
-#@login_required
+@csrf_protect
+@login_required
 def flag(request, comment_id, next=None):
     """
     Flags a comment. Confirmation on GET, action on POST.
@@ -22,18 +22,7 @@
 
     # Flag on POST
     if request.method == 'POST':
-        flag, created = comments.models.CommentFlag.objects.get_or_create(
-            comment = comment,
-            user    = request.user,
-            flag    = comments.models.CommentFlag.SUGGEST_REMOVAL
-        )
-        signals.comment_was_flagged.send(
-            sender  = comment.__class__,
-            comment = comment,
-            flag    = flag,
-            created = created,
-            request = request,
-        )
+        perform_flag(request, comment)
         return next_redirect(request.POST.copy(), next, flag_done, c=comment.pk)
 
     # Render a form on GET
@@ -42,9 +31,9 @@
             {'comment': comment, "next": next},
             template.RequestContext(request)
         )
-flag = login_required(flag)
 
-#@permission_required("comments.delete_comment")
+@csrf_protect
+@permission_required("comments.can_moderate")
 def delete(request, comment_id, next=None):
     """
     Deletes a comment. Confirmation on GET, action on POST. Requires the "can
@@ -60,20 +49,7 @@
     # Delete on POST
     if request.method == 'POST':
         # Flag the comment as deleted instead of actually deleting it.
-        flag, created = comments.models.CommentFlag.objects.get_or_create(
-            comment = comment,
-            user    = request.user,
-            flag    = comments.models.CommentFlag.MODERATOR_DELETION
-        )
-        comment.is_removed = True
-        comment.save()
-        signals.comment_was_flagged.send(
-            sender  = comment.__class__,
-            comment = comment,
-            flag    = flag,
-            created = created,
-            request = request,
-        )
+        perform_delete(request, comment)
         return next_redirect(request.POST.copy(), next, delete_done, c=comment.pk)
 
     # Render a form on GET
@@ -82,9 +58,9 @@
             {'comment': comment, "next": next},
             template.RequestContext(request)
         )
-delete = permission_required("comments.can_moderate")(delete)
 
-#@permission_required("comments.can_moderate")
+@csrf_protect
+@permission_required("comments.can_moderate")
 def approve(request, comment_id, next=None):
     """
     Approve a comment (that is, mark it as public and non-removed). Confirmation
@@ -100,23 +76,7 @@
     # Delete on POST
     if request.method == 'POST':
         # Flag the comment as approved.
-        flag, created = comments.models.CommentFlag.objects.get_or_create(
-            comment = comment,
-            user    = request.user,
-            flag    = comments.models.CommentFlag.MODERATOR_APPROVAL,
-        )
-
-        comment.is_removed = False
-        comment.is_public = True
-        comment.save()
-
-        signals.comment_was_flagged.send(
-            sender  = comment.__class__,
-            comment = comment,
-            flag    = flag,
-            created = created,
-            request = request,
-        )
+        perform_approve(request, comment)
         return next_redirect(request.POST.copy(), next, approve_done, c=comment.pk)
 
     # Render a form on GET
@@ -126,69 +86,64 @@
             template.RequestContext(request)
         )
 
-approve = permission_required("comments.can_moderate")(approve)
+# The following functions actually perform the various flag/aprove/delete
+# actions. They've been broken out into seperate functions to that they
+# may be called from admin actions.
+
+def perform_flag(request, comment):
+    """
+    Actually perform the flagging of a comment from a request.
+    """
+    flag, created = comments.models.CommentFlag.objects.get_or_create(
+        comment = comment,
+        user    = request.user,
+        flag    = comments.models.CommentFlag.SUGGEST_REMOVAL
+    )
+    signals.comment_was_flagged.send(
+        sender  = comment.__class__,
+        comment = comment,
+        flag    = flag,
+        created = created,
+        request = request,
+    )
+
+def perform_delete(request, comment):
+    flag, created = comments.models.CommentFlag.objects.get_or_create(
+        comment = comment,
+        user    = request.user,
+        flag    = comments.models.CommentFlag.MODERATOR_DELETION
+    )
+    comment.is_removed = True
+    comment.save()
+    signals.comment_was_flagged.send(
+        sender  = comment.__class__,
+        comment = comment,
+        flag    = flag,
+        created = created,
+        request = request,
+    )
 
 
-#@permission_required("comments.can_moderate")
-def moderation_queue(request):
-    """
-    Displays a list of unapproved comments to be approved.
-
-    Templates: `comments/moderation_queue.html`
-    Context:
-        comments
-            Comments to be approved (paginated).
-        empty
-            Is the comment list empty?
-        is_paginated
-            Is there more than one page?
-        results_per_page
-            Number of comments per page
-        has_next
-            Is there a next page?
-        has_previous
-            Is there a previous page?
-        page
-            The current page number
-        next
-            The next page number
-        pages
-            Number of pages
-        hits
-            Total number of comments
-        page_range
-            Range of page numbers
+def perform_approve(request, comment):
+    flag, created = comments.models.CommentFlag.objects.get_or_create(
+        comment = comment,
+        user    = request.user,
+        flag    = comments.models.CommentFlag.MODERATOR_APPROVAL,
+    )
 
-    """
-    qs = comments.get_model().objects.filter(is_public=False, is_removed=False)
-    paginator = Paginator(qs, 100)
-
-    try:
-        page = int(request.GET.get("page", 1))
-    except ValueError:
-        raise Http404
-
-    try:
-        comments_per_page = paginator.page(page)
-    except InvalidPage:
-        raise Http404
+    comment.is_removed = False
+    comment.is_public = True
+    comment.save()
 
-    return render_to_response("comments/moderation_queue.html", {
-        'comments' : comments_per_page.object_list,
-        'empty' : page == 1 and paginator.count == 0,
-        'is_paginated': paginator.num_pages > 1,
-        'results_per_page': 100,
-        'has_next': comments_per_page.has_next(),
-        'has_previous': comments_per_page.has_previous(),
-        'page': page,
-        'next': page + 1,
-        'previous': page - 1,
-        'pages': paginator.num_pages,
-        'hits' : paginator.count,
-        'page_range' : paginator.page_range
-    }, context_instance=template.RequestContext(request))
+    signals.comment_was_flagged.send(
+        sender  = comment.__class__,
+        comment = comment,
+        flag    = flag,
+        created = created,
+        request = request,
+    )
 
-moderation_queue = permission_required("comments.can_moderate")(moderation_queue)
+# Confirmation views.
 
 flag_done = confirmation_view(
     template = "comments/flagged.html",
--- a/web/lib/django/contrib/comments/views/utils.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/comments/views/utils.py	Tue May 25 02:43:45 2010 +0200
@@ -39,7 +39,7 @@
         if 'c' in request.GET:
             try:
                 comment = comments.get_model().objects.get(pk=request.GET['c'])
-            except ObjectDoesNotExist:
+            except (ObjectDoesNotExist, ValueError):
                 pass
         return render_to_response(template,
             {'comment': comment},
--- a/web/lib/django/contrib/contenttypes/generic.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/contenttypes/generic.py	Tue May 25 02:43:45 2010 +0200
@@ -5,7 +5,7 @@
 from django.core.exceptions import ObjectDoesNotExist
 from django.db import connection
 from django.db.models import signals
-from django.db import models
+from django.db import models, router
 from django.db.models.fields.related import RelatedField, Field, ManyToManyRel
 from django.db.models.loading import get_model
 from django.forms import ModelForm
@@ -45,14 +45,14 @@
             kwargs[self.ct_field] = self.get_content_type(obj=value)
             kwargs[self.fk_field] = value._get_pk_val()
 
-    def get_content_type(self, obj=None, id=None):
+    def get_content_type(self, obj=None, id=None, using=None):
         # Convenience function using get_model avoids a circular import when
         # using this model
         ContentType = get_model("contenttypes", "contenttype")
         if obj:
-            return ContentType.objects.get_for_model(obj)
+             return ContentType.objects.db_manager(obj._state.db).get_for_model(obj)
         elif id:
-            return ContentType.objects.get_for_id(id)
+             return ContentType.objects.db_manager(using).get_for_id(id)
         else:
             # This should never happen. I love comments like this, don't you?
             raise Exception("Impossible arguments to GFK.get_content_type!")
@@ -73,7 +73,7 @@
             f = self.model._meta.get_field(self.ct_field)
             ct_id = getattr(instance, f.get_attname(), None)
             if ct_id:
-                ct = self.get_content_type(id=ct_id)
+                ct = self.get_content_type(id=ct_id, using=instance._state.db)
                 try:
                     rel_obj = ct.get_object_for_this_type(pk=getattr(instance, self.fk_field))
                 except ObjectDoesNotExist:
@@ -83,7 +83,7 @@
 
     def __set__(self, instance, value):
         if instance is None:
-            raise AttributeError, u"%s must be accessed via instance" % self.related.opts.object_name
+            raise AttributeError(u"%s must be accessed via instance" % self.related.opts.object_name)
 
         ct = None
         fk = None
@@ -105,8 +105,6 @@
                             limit_choices_to=kwargs.pop('limit_choices_to', None),
                             symmetrical=kwargs.pop('symmetrical', True))
 
-        # By its very nature, a GenericRelation doesn't create a table.
-        self.creates_table = False
 
         # Override content-type/object-id field names on the related class
         self.object_id_field_name = kwargs.pop("object_id_field", "object_id")
@@ -131,7 +129,7 @@
         return self.object_id_field_name
 
     def m2m_reverse_name(self):
-        return self.model._meta.pk.column
+        return self.rel.to._meta.pk.column
 
     def contribute_to_class(self, cls, name):
         super(GenericRelation, self).contribute_to_class(cls, name)
@@ -151,7 +149,7 @@
     def get_internal_type(self):
         return "ManyToManyField"
 
-    def db_type(self):
+    def db_type(self, connection):
         # Since we're simulating a ManyToManyField, in effect, best return the
         # same db_type as well.
         return None
@@ -203,7 +201,7 @@
             join_table = qn(self.field.m2m_db_table()),
             source_col_name = qn(self.field.m2m_column_name()),
             target_col_name = qn(self.field.m2m_reverse_name()),
-            content_type = ContentType.objects.get_for_model(instance),
+            content_type = ContentType.objects.db_manager(instance._state.db).get_for_model(instance),
             content_type_field_name = self.field.content_type_field_name,
             object_id_field_name = self.field.object_id_field_name
         )
@@ -212,7 +210,7 @@
 
     def __set__(self, instance, value):
         if instance is None:
-            raise AttributeError, "Manager must be accessed via instance"
+            raise AttributeError("Manager must be accessed via instance")
 
         manager = self.__get__(instance)
         manager.clear()
@@ -245,35 +243,39 @@
             self.pk_val = self.instance._get_pk_val()
 
         def get_query_set(self):
+            db = self._db or router.db_for_read(self.model, instance=self.instance)
             query = {
                 '%s__pk' % self.content_type_field_name : self.content_type.id,
                 '%s__exact' % self.object_id_field_name : self.pk_val,
             }
-            return superclass.get_query_set(self).filter(**query)
+            return superclass.get_query_set(self).using(db).filter(**query)
 
         def add(self, *objs):
             for obj in objs:
                 if not isinstance(obj, self.model):
-                    raise TypeError, "'%s' instance expected" % self.model._meta.object_name
+                    raise TypeError("'%s' instance expected" % self.model._meta.object_name)
                 setattr(obj, self.content_type_field_name, self.content_type)
                 setattr(obj, self.object_id_field_name, self.pk_val)
                 obj.save()
         add.alters_data = True
 
         def remove(self, *objs):
+            db = router.db_for_write(self.model, instance=self.instance)
             for obj in objs:
-                obj.delete()
+                obj.delete(using=db)
         remove.alters_data = True
 
         def clear(self):
+            db = router.db_for_write(self.model, instance=self.instance)
             for obj in self.all():
-                obj.delete()
+                obj.delete(using=db)
         clear.alters_data = True
 
         def create(self, **kwargs):
             kwargs[self.content_type_field_name] = self.content_type
             kwargs[self.object_id_field_name] = self.pk_val
-            return super(GenericRelatedObjectManager, self).create(**kwargs)
+            db = router.db_for_write(self.model, instance=self.instance)
+            return super(GenericRelatedObjectManager, self).using(db).create(**kwargs)
         create.alters_data = True
 
     return GenericRelatedObjectManager
@@ -291,18 +293,28 @@
     """
     A formset for generic inline objects to a parent.
     """
-    ct_field_name = "content_type"
-    ct_fk_field_name = "object_id"
 
-    def __init__(self, data=None, files=None, instance=None, save_as_new=None, prefix=None):
+    def __init__(self, data=None, files=None, instance=None, save_as_new=None,
+                 prefix=None, queryset=None):
+        # Avoid a circular import.
+        from django.contrib.contenttypes.models import ContentType
         opts = self.model._meta
         self.instance = instance
         self.rel_name = '-'.join((
             opts.app_label, opts.object_name.lower(),
             self.ct_field.name, self.ct_fk_field.name,
         ))
+        if self.instance is None or self.instance.pk is None:
+            qs = self.model._default_manager.none()
+        else:
+            if queryset is None:
+                queryset = self.model._default_manager
+            qs = queryset.filter(**{
+                self.ct_field.name: ContentType.objects.get_for_model(self.instance),
+                self.ct_fk_field.name: self.instance.pk,
+            })
         super(BaseGenericInlineFormSet, self).__init__(
-            queryset=self.get_queryset(), data=data, files=files,
+            queryset=qs, data=data, files=files,
             prefix=prefix
         )
 
@@ -314,16 +326,6 @@
         ))
     get_default_prefix = classmethod(get_default_prefix)
 
-    def get_queryset(self):
-        # Avoid a circular import.
-        from django.contrib.contenttypes.models import ContentType
-        if self.instance is None or self.instance.pk is None:
-            return self.model._default_manager.none()
-        return self.model._default_manager.filter(**{
-            self.ct_field.name: ContentType.objects.get_for_model(self.instance),
-            self.ct_fk_field.name: self.instance.pk,
-        })
-
     def save_new(self, form, commit=True):
         # Avoid a circular import.
         from django.contrib.contenttypes.models import ContentType
@@ -339,7 +341,7 @@
                                   ct_field="content_type", fk_field="object_id",
                                   fields=None, exclude=None,
                                   extra=3, can_order=False, can_delete=True,
-                                  max_num=0,
+                                  max_num=None,
                                   formfield_callback=lambda f: f.formfield()):
     """
     Returns an ``GenericInlineFormSet`` for the given kwargs.
@@ -379,6 +381,12 @@
             fields = flatten_fieldsets(self.declared_fieldsets)
         else:
             fields = None
+        if self.exclude is None:
+            exclude = []
+        else:
+            exclude = list(self.exclude)
+        exclude.extend(self.get_readonly_fields(request, obj))
+        exclude = exclude or None
         defaults = {
             "ct_field": self.ct_field,
             "fk_field": self.ct_fk_field,
@@ -386,11 +394,11 @@
             "formfield_callback": self.formfield_for_dbfield,
             "formset": self.formset,
             "extra": self.extra,
-            "can_delete": True,
+            "can_delete": self.can_delete,
             "can_order": False,
             "fields": fields,
             "max_num": self.max_num,
-            "exclude": self.exclude
+            "exclude": exclude
         }
         return generic_inlineformset_factory(self.model, **defaults)
 
--- a/web/lib/django/contrib/contenttypes/management.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/contenttypes/management.py	Tue May 25 02:43:45 2010 +0200
@@ -25,16 +25,34 @@
             if verbosity >= 2:
                 print "Adding content type '%s | %s'" % (ct.app_label, ct.model)
     # The presence of any remaining content types means the supplied app has an
-    # undefined model and can safely be removed, which cascades to also remove
-    # related permissions.
-    for ct in content_types:
-        if verbosity >= 2:
-            print "Deleting stale content type '%s | %s'" % (ct.app_label, ct.model)
-        ct.delete()
+    # undefined model. Confirm that the content type is stale before deletion.
+    if content_types:
+        if kwargs.get('interactive', False):
+            content_type_display = '\n'.join(['    %s | %s' % (ct.app_label, ct.model) for ct in content_types])
+            ok_to_delete = raw_input("""The following content types are stale and need to be deleted:
+
+%s
+
+Any objects related to these content types by a foreign key will also
+be deleted. Are you sure you want to delete these content types?
+If you're unsure, answer 'no'.
 
-def update_all_contenttypes(verbosity=2):
+    Type 'yes' to continue, or 'no' to cancel: """ % content_type_display)
+        else:
+            ok_to_delete = False
+
+        if ok_to_delete == 'yes':
+            for ct in content_types:
+                if verbosity >= 2:
+                    print "Deleting stale content type '%s | %s'" % (ct.app_label, ct.model)
+                ct.delete()
+        else:
+            if verbosity >= 2:
+                print "Stale content types remain."
+
+def update_all_contenttypes(verbosity=2, **kwargs):
     for app in get_apps():
-        update_contenttypes(app, None, verbosity)
+        update_contenttypes(app, None, verbosity, **kwargs)
 
 signals.post_syncdb.connect(update_contenttypes)
 
--- a/web/lib/django/contrib/contenttypes/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/contenttypes/models.py	Tue May 25 02:43:45 2010 +0200
@@ -8,6 +8,13 @@
     # This cache is shared by all the get_for_* methods.
     _cache = {}
 
+    def get_by_natural_key(self, app_label, model):
+        try:
+            ct = self.__class__._cache[self.db][(app_label, model)]
+        except KeyError:
+            ct = self.get(app_label=app_label, model=model)
+        return ct
+
     def get_for_model(self, model):
         """
         Returns the ContentType object for a given model, creating the
@@ -20,7 +27,7 @@
             opts = model._meta
         key = (opts.app_label, opts.object_name.lower())
         try:
-            ct = self.__class__._cache[key]
+            ct = self.__class__._cache[self.db][key]
         except KeyError:
             # Load or create the ContentType entry. The smart_unicode() is
             # needed around opts.verbose_name_raw because name_raw might be a
@@ -30,7 +37,7 @@
                 model = opts.object_name.lower(),
                 defaults = {'name': smart_unicode(opts.verbose_name_raw)},
             )
-            self._add_to_cache(ct)
+            self._add_to_cache(self.db, ct)
 
         return ct
 
@@ -40,12 +47,12 @@
         (though ContentTypes are obviously not created on-the-fly by get_by_id).
         """
         try:
-            ct = self.__class__._cache[id]
+            ct = self.__class__._cache[self.db][id]
         except KeyError:
             # This could raise a DoesNotExist; that's correct behavior and will
             # make sure that only correct ctypes get stored in the cache dict.
             ct = self.get(pk=id)
-            self._add_to_cache(ct)
+            self._add_to_cache(self.db, ct)
         return ct
 
     def clear_cache(self):
@@ -57,12 +64,12 @@
         """
         self.__class__._cache.clear()
 
-    def _add_to_cache(self, ct):
+    def _add_to_cache(self, using, ct):
         """Insert a ContentType into the cache."""
         model = ct.model_class()
         key = (model._meta.app_label, model._meta.object_name.lower())
-        self.__class__._cache[key] = ct
-        self.__class__._cache[ct.id] = ct
+        self.__class__._cache.setdefault(using, {})[key] = ct
+        self.__class__._cache.setdefault(using, {})[ct.id] = ct
 
 class ContentType(models.Model):
     name = models.CharField(max_length=100)
@@ -92,4 +99,7 @@
         method. The ObjectNotExist exception, if thrown, will not be caught,
         so code that calls this method should catch it.
         """
-        return self.model_class()._default_manager.get(**kwargs)
+        return self.model_class()._default_manager.using(self._state.db).get(**kwargs)
+
+    def natural_key(self):
+        return (self.app_label, self.model)
--- a/web/lib/django/contrib/contenttypes/views.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/contenttypes/views.py	Tue May 25 02:43:45 2010 +0200
@@ -9,7 +9,7 @@
     try:
         content_type = ContentType.objects.get(pk=content_type_id)
         obj = content_type.get_object_for_this_type(pk=object_id)
-    except ObjectDoesNotExist:
+    except (ObjectDoesNotExist, ValueError):
         raise http.Http404("Content type %s object %s doesn't exist" % (content_type_id, object_id))
     try:
         absurl = obj.get_absolute_url()
--- a/web/lib/django/contrib/csrf/middleware.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/csrf/middleware.py	Tue May 25 02:43:45 2010 +0200
@@ -1,160 +1,7 @@
-"""
-Cross Site Request Forgery Middleware.
-
-This module provides a middleware that implements protection
-against request forgeries from other sites.
-"""
-
-import re
-import itertools
-try:
-    from functools import wraps
-except ImportError:
-    from django.utils.functional import wraps  # Python 2.3, 2.4 fallback.
-
-from django.conf import settings
-from django.http import HttpResponseForbidden
-from django.utils.hashcompat import md5_constructor
-from django.utils.safestring import mark_safe
-
-_ERROR_MSG = mark_safe('<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><body><h1>403 Forbidden</h1><p>Cross Site Request Forgery detected. Request aborted.</p></body></html>')
-
-_POST_FORM_RE = \
-    re.compile(r'(<form\W[^>]*\bmethod\s*=\s*(\'|"|)POST(\'|"|)\b[^>]*>)', re.IGNORECASE)
-
-_HTML_TYPES = ('text/html', 'application/xhtml+xml')
-
-def _make_token(session_id):
-    return md5_constructor(settings.SECRET_KEY + session_id).hexdigest()
-
-class CsrfViewMiddleware(object):
-    """
-    Middleware that requires a present and correct csrfmiddlewaretoken
-    for POST requests that have an active session.
-    """
-    def process_view(self, request, callback, callback_args, callback_kwargs):
-        if request.method == 'POST':
-            if getattr(callback, 'csrf_exempt', False):
-                return None
-
-            if request.is_ajax():
-                return None
-
-            try:
-                session_id = request.COOKIES[settings.SESSION_COOKIE_NAME]
-            except KeyError:
-                # No session, no check required
-                return None
-
-            csrf_token = _make_token(session_id)
-            # check incoming token
-            try:
-                request_csrf_token = request.POST['csrfmiddlewaretoken']
-            except KeyError:
-                return HttpResponseForbidden(_ERROR_MSG)
-
-            if request_csrf_token != csrf_token:
-                return HttpResponseForbidden(_ERROR_MSG)
-
-        return None
-
-class CsrfResponseMiddleware(object):
-    """
-    Middleware that post-processes a response to add a
-    csrfmiddlewaretoken if the response/request have an active
-    session.
-    """
-    def process_response(self, request, response):
-        if getattr(response, 'csrf_exempt', False):
-            return response
+from django.middleware.csrf import CsrfMiddleware, CsrfViewMiddleware, CsrfResponseMiddleware
+from django.views.decorators.csrf import csrf_exempt, csrf_view_exempt, csrf_response_exempt
 
-        csrf_token = None
-        try:
-            # This covers a corner case in which the outgoing response
-            # both contains a form and sets a session cookie.  This
-            # really should not be needed, since it is best if views
-            # that create a new session (login pages) also do a
-            # redirect, as is done by all such view functions in
-            # Django.
-            cookie = response.cookies[settings.SESSION_COOKIE_NAME]
-            csrf_token = _make_token(cookie.value)
-        except KeyError:
-            # Normal case - look for existing session cookie
-            try:
-                session_id = request.COOKIES[settings.SESSION_COOKIE_NAME]
-                csrf_token = _make_token(session_id)
-            except KeyError:
-                # no incoming or outgoing cookie
-                pass
-
-        if csrf_token is not None and \
-                response['Content-Type'].split(';')[0] in _HTML_TYPES:
-
-            # ensure we don't add the 'id' attribute twice (HTML validity)
-            idattributes = itertools.chain(("id='csrfmiddlewaretoken'",),
-                                            itertools.repeat(''))
-            def add_csrf_field(match):
-                """Returns the matched <form> tag plus the added <input> element"""
-                return mark_safe(match.group() + "<div style='display:none;'>" + \
-                "<input type='hidden' " + idattributes.next() + \
-                " name='csrfmiddlewaretoken' value='" + csrf_token + \
-                "' /></div>")
-
-            # Modify any POST forms
-            response.content = _POST_FORM_RE.sub(add_csrf_field, response.content)
-        return response
-
-class CsrfMiddleware(CsrfViewMiddleware, CsrfResponseMiddleware):
-    """Django middleware that adds protection against Cross Site
-    Request Forgeries by adding hidden form fields to POST forms and
-    checking requests for the correct value.
-
-    In the list of middlewares, SessionMiddleware is required, and
-    must come after this middleware.  CsrfMiddleWare must come after
-    compression middleware.
-
-    If a session ID cookie is present, it is hashed with the
-    SECRET_KEY setting to create an authentication token.  This token
-    is added to all outgoing POST forms and is expected on all
-    incoming POST requests that have a session ID cookie.
-
-    If you are setting cookies directly, instead of using Django's
-    session framework, this middleware will not work.
-
-    CsrfMiddleWare is composed of two middleware, CsrfViewMiddleware
-    and CsrfResponseMiddleware which can be used independently.
-    """
-    pass
-
-def csrf_response_exempt(view_func):
-    """
-    Modifies a view function so that its response is exempt
-    from the post-processing of the CSRF middleware.
-    """
-    def wrapped_view(*args, **kwargs):
-        resp = view_func(*args, **kwargs)
-        resp.csrf_exempt = True
-        return resp
-    return wraps(view_func)(wrapped_view)
-
-def csrf_view_exempt(view_func):
-    """
-    Marks a view function as being exempt from CSRF view protection.
-    """
-    # We could just do view_func.csrf_exempt = True, but decorators
-    # are nicer if they don't have side-effects, so we return a new
-    # function.
-    def wrapped_view(*args, **kwargs):
-        return view_func(*args, **kwargs)
-    wrapped_view.csrf_exempt = True
-    return wraps(view_func)(wrapped_view)
-
-def csrf_exempt(view_func):
-    """
-    Marks a view function as being exempt from the CSRF checks
-    and post processing.
-
-    This is the same as using both the csrf_view_exempt and
-    csrf_response_exempt decorators.
-    """
-    return csrf_response_exempt(csrf_view_exempt(view_func))
+import warnings
+warnings.warn("This import for CSRF functionality is deprecated.  Please use django.middleware.csrf for the middleware and django.views.decorators.csrf for decorators.",
+              PendingDeprecationWarning
+              )
--- a/web/lib/django/contrib/csrf/models.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-# models.py file for tests to run.
--- a/web/lib/django/contrib/csrf/tests.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from django.test import TestCase
-from django.http import HttpRequest, HttpResponse, HttpResponseForbidden
-from django.contrib.csrf.middleware import CsrfMiddleware, _make_token, csrf_exempt
-from django.conf import settings
-
-
-def post_form_response():
-    resp = HttpResponse(content="""
-<html><body><form method="POST"><input type="text" /></form></body></html>
-""", mimetype="text/html")
-    return resp
-
-def test_view(request):
-    return post_form_response()
-
-class CsrfMiddlewareTest(TestCase):
-
-    _session_id = "1"
-
-    def _get_GET_no_session_request(self):
-        return HttpRequest()
-
-    def _get_GET_session_request(self):
-        req = self._get_GET_no_session_request()
-        req.COOKIES[settings.SESSION_COOKIE_NAME] = self._session_id
-        return req
-
-    def _get_POST_session_request(self):
-        req = self._get_GET_session_request()
-        req.method = "POST"
-        return req
-
-    def _get_POST_no_session_request(self):
-        req = self._get_GET_no_session_request()
-        req.method = "POST"
-        return req
-
-    def _get_POST_session_request_with_token(self):
-        req = self._get_POST_session_request()
-        req.POST['csrfmiddlewaretoken'] = _make_token(self._session_id)
-        return req
-
-    def _get_post_form_response(self):
-        return post_form_response()
-
-    def _get_new_session_response(self):
-        resp = self._get_post_form_response()
-        resp.cookies[settings.SESSION_COOKIE_NAME] = self._session_id
-        return resp
-
-    def _check_token_present(self, response):
-        self.assertContains(response, "name='csrfmiddlewaretoken' value='%s'" % _make_token(self._session_id))
-
-    def get_view(self):
-        return test_view
-
-    # Check the post processing
-    def test_process_response_no_session(self):
-        """
-        Check the post-processor does nothing if no session active
-        """
-        req = self._get_GET_no_session_request()
-        resp = self._get_post_form_response()
-        resp_content = resp.content # needed because process_response modifies resp
-        resp2 = CsrfMiddleware().process_response(req, resp)
-        self.assertEquals(resp_content, resp2.content)
-
-    def test_process_response_existing_session(self):
-        """
-        Check that the token is inserted if there is an existing session
-        """
-        req = self._get_GET_session_request()
-        resp = self._get_post_form_response()
-        resp_content = resp.content # needed because process_response modifies resp
-        resp2 = CsrfMiddleware().process_response(req, resp)
-        self.assertNotEqual(resp_content, resp2.content)
-        self._check_token_present(resp2)
-
-    def test_process_response_new_session(self):
-        """
-        Check that the token is inserted if there is a new session being started
-        """
-        req = self._get_GET_no_session_request() # no session in request
-        resp = self._get_new_session_response() # but new session started
-        resp_content = resp.content # needed because process_response modifies resp
-        resp2 = CsrfMiddleware().process_response(req, resp)
-        self.assertNotEqual(resp_content, resp2.content)
-        self._check_token_present(resp2)
-
-    def test_process_response_exempt_view(self):
-        """
-        Check that no post processing is done for an exempt view
-        """
-        req = self._get_POST_session_request()
-        resp = csrf_exempt(self.get_view())(req)
-        resp_content = resp.content
-        resp2 = CsrfMiddleware().process_response(req, resp)
-        self.assertEquals(resp_content, resp2.content)
-
-    # Check the request processing
-    def test_process_request_no_session(self):
-        """
-        Check that if no session is present, the middleware does nothing.
-        to the incoming request.
-        """
-        req = self._get_POST_no_session_request()
-        req2 = CsrfMiddleware().process_view(req, self.get_view(), (), {})
-        self.assertEquals(None, req2)
-
-    def test_process_request_session_no_token(self):
-        """
-        Check that if a session is present but no token, we get a 'forbidden'
-        """
-        req = self._get_POST_session_request()
-        req2 = CsrfMiddleware().process_view(req, self.get_view(), (), {})
-        self.assertEquals(HttpResponseForbidden, req2.__class__)
-
-    def test_process_request_session_and_token(self):
-        """
-        Check that if a session is present and a token, the middleware lets it through
-        """
-        req = self._get_POST_session_request_with_token()
-        req2 = CsrfMiddleware().process_view(req, self.get_view(), (), {})
-        self.assertEquals(None, req2)
-
-    def test_process_request_session_no_token_exempt_view(self):
-        """
-        Check that if a session is present and no token, but the csrf_exempt
-        decorator has been applied to the view, the middleware lets it through
-        """
-        req = self._get_POST_session_request()
-        req2 = CsrfMiddleware().process_view(req, csrf_exempt(self.get_view()), (), {})
-        self.assertEquals(None, req2)
-
-    def test_ajax_exemption(self):
-        """
-        Check that AJAX requests are automatically exempted.
-        """
-        req = self._get_POST_session_request()
-        req.META['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
-        req2 = CsrfMiddleware().process_view(req, self.get_view(), (), {})
-        self.assertEquals(None, req2)
--- a/web/lib/django/contrib/databrowse/datastructures.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/databrowse/datastructures.py	Tue May 25 02:43:45 2010 +0200
@@ -4,9 +4,8 @@
 """
 
 from django.db import models
-from django.utils import dateformat
+from django.utils import formats
 from django.utils.text import capfirst
-from django.utils.translation import get_date_formats
 from django.utils.encoding import smart_unicode, smart_str, iri_to_uri
 from django.utils.safestring import mark_safe
 from django.db.models.query import QuerySet
@@ -156,13 +155,12 @@
             objs = dict(self.field.choices).get(self.raw_value, EMPTY_VALUE)
         elif isinstance(self.field, models.DateField) or isinstance(self.field, models.TimeField):
             if self.raw_value:
-                date_format, datetime_format, time_format = get_date_formats()
                 if isinstance(self.field, models.DateTimeField):
-                    objs = capfirst(dateformat.format(self.raw_value, datetime_format))
+                    objs = capfirst(formats.date_format(self.raw_value, 'DATETIME_FORMAT'))
                 elif isinstance(self.field, models.TimeField):
-                    objs = capfirst(dateformat.time_format(self.raw_value, time_format))
+                    objs = capfirst(formats.time_format(self.raw_value, 'TIME_FORMAT'))
                 else:
-                    objs = capfirst(dateformat.format(self.raw_value, date_format))
+                    objs = capfirst(formats.date_format(self.raw_value, 'DATE_FORMAT'))
             else:
                 objs = EMPTY_VALUE
         elif isinstance(self.field, models.BooleanField) or isinstance(self.field, models.NullBooleanField):
--- a/web/lib/django/contrib/databrowse/plugins/calendars.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/databrowse/plugins/calendars.py	Tue May 25 02:43:45 2010 +0200
@@ -37,7 +37,7 @@
             return [mark_safe(u'%s%s/%s/%s/%s/%s/' % (
                 easy_instance_field.model.url(),
                 plugin_name, easy_instance_field.field.name,
-                d.year,
+                str(d.year),
                 datetime_safe.new_date(d).strftime('%b').lower(),
                 d.day))]
 
--- a/web/lib/django/contrib/databrowse/templates/databrowse/calendar_day.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/databrowse/templates/databrowse/calendar_day.html	Tue May 25 02:43:45 2010 +0200
@@ -4,7 +4,7 @@
 
 {% block content %}
 
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../../">Calendars</a> / <a href="../../../">By {{ field.verbose_name }}</a> / <a href="../../">{{ day.year }}</a> / <a href="../">{{ day|date:"F" }}</a> / {{ day.day }}</div>
+<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../../">Calendars</a> / <a href="../../../">By {{ field.verbose_name }}</a> / <a href="../../">{{ day|date:"Y" }}</a> / <a href="../">{{ day|date:"F" }}</a> / {{ day|date:"d" }}</div>
 
 <h1>{{ object_list.count }} {% if object_list.count|pluralize %}{{ model.verbose_name_plural }}{% else %}{{ model.verbose_name }}{% endif %} with {{ field.verbose_name }} on {{ day|date:"F j, Y" }}</h1>
 
--- a/web/lib/django/contrib/databrowse/templates/databrowse/calendar_main.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/databrowse/templates/databrowse/calendar_main.html	Tue May 25 02:43:45 2010 +0200
@@ -10,7 +10,7 @@
 
 <ul class="objectlist">
 {% for year in date_list %}
-<li class="{% cycle 'odd' 'even' %}"><a href="{{ year.year }}/">{{ year.year }}</a></li>
+<li class="{% cycle 'odd' 'even' %}"><a href="{{ year|date:"Y" }}/">{{ year|date:"Y" }}</a></li>
 {% endfor %}
 </ul>
 
--- a/web/lib/django/contrib/databrowse/templates/databrowse/calendar_month.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/databrowse/templates/databrowse/calendar_month.html	Tue May 25 02:43:45 2010 +0200
@@ -4,9 +4,9 @@
 
 {% block content %}
 
-<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../">Calendars</a> / <a href="../../">By {{ field.verbose_name }}</a> / <a href="../">{{ month.year }}</a> / {{ month|date:"F" }}</div>
+<div id="breadcrumbs"><a href="{{ root_url }}">Home</a> / <a href="{{ model.url }}">{{ model.verbose_name_plural|capfirst }}</a> / <a href="../../../">Calendars</a> / <a href="../../">By {{ field.verbose_name }}</a> / <a href="../">{{ month|date:"Y" }}</a> / {{ month|date:"F" }}</div>
 
-<h1>{{ object_list.count }} {% if object_list.count|pluralize %}{{ model.verbose_name_plural }}{% else %}{{ model.verbose_name }}{% endif %} with {{ field.verbose_name }} on {{ day|date:"F Y" }}</h1>
+<h1>{{ object_list.count }} {% if object_list.count|pluralize %}{{ model.verbose_name_plural }}{% else %}{{ model.verbose_name }}{% endif %} with {{ field.verbose_name }} on {{ month|date:"F Y" }}</h1>
 
 <ul class="objectlist">
 {% for object in object_list %}
--- a/web/lib/django/contrib/flatpages/views.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/flatpages/views.py	Tue May 25 02:43:45 2010 +0200
@@ -5,9 +5,15 @@
 from django.conf import settings
 from django.core.xheaders import populate_xheaders
 from django.utils.safestring import mark_safe
+from django.views.decorators.csrf import csrf_protect
 
 DEFAULT_TEMPLATE = 'flatpages/default.html'
 
+# This view is called from FlatpageFallbackMiddleware.process_response
+# when a 404 is raised, which often means CsrfViewMiddleware.process_view
+# has not been called even if CsrfViewMiddleware is installed. So we need
+# to use @csrf_protect, in case the template needs {% csrf_token %}.
+@csrf_protect
 def flatpage(request, url):
     """
     Flat page view.
--- a/web/lib/django/contrib/formtools/preview.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/formtools/preview.py	Tue May 25 02:43:45 2010 +0200
@@ -60,6 +60,7 @@
         f = self.form(request.POST, auto_id=AUTO_ID)
         context = {'form': f, 'stage_field': self.unused_name('stage'), 'state': self.state}
         if f.is_valid():
+            self.process_preview(request, f, context) 
             context['hash_field'] = self.unused_name('hash')
             context['hash_value'] = self.security_hash(request, f)
             return render_to_response(self.preview_template, context, context_instance=RequestContext(request))
@@ -96,6 +97,13 @@
         """
         pass
 
+    def process_preview(self, request, form, context):
+        """
+        Given a validated form, performs any extra processing before displaying
+        the preview page, and saves any extra data in context.
+        """
+        pass
+
     def security_hash(self, request, form):
         """
         Calculates the security hash for the given HttpRequest and Form instances.
--- a/web/lib/django/contrib/formtools/templates/formtools/form.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/formtools/templates/formtools/form.html	Tue May 25 02:43:45 2010 +0200
@@ -4,7 +4,7 @@
 
 {% if form.errors %}<h1>Please correct the following errors</h1>{% else %}<h1>Submit</h1>{% endif %}
 
-<form action="" method="post">
+<form action="" method="post">{% csrf_token %}
 <table>
 {{ form }}
 </table>
--- a/web/lib/django/contrib/formtools/templates/formtools/preview.html	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/formtools/templates/formtools/preview.html	Tue May 25 02:43:45 2010 +0200
@@ -15,7 +15,7 @@
 
 <p>Security hash: {{ hash_value }}</p>
 
-<form action="" method="post">
+<form action="" method="post">{% csrf_token %}
 {% for field in form %}{{ field.as_hidden }}
 {% endfor %}
 <input type="hidden" name="{{ stage_field }}" value="2" />
@@ -25,7 +25,7 @@
 
 <h1>Or edit it again</h1>
 
-<form action="" method="post">
+<form action="" method="post">{% csrf_token %}
 <table>
 {{ form }}
 </table>
--- a/web/lib/django/contrib/formtools/tests.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/formtools/tests.py	Tue May 25 02:43:45 2010 +0200
@@ -147,15 +147,18 @@
 
 class WizardClass(wizard.FormWizard):
     def render_template(self, *args, **kw):
-        return ""
+        return http.HttpResponse("")
 
     def done(self, request, cleaned_data):
         return http.HttpResponse(success_string)
 
-class DummyRequest(object):
+class DummyRequest(http.HttpRequest):
     def __init__(self, POST=None):
+        super(DummyRequest, self).__init__()
         self.method = POST and "POST" or "GET"
-        self.POST = POST
+        if POST is not None:
+            self.POST.update(POST)
+        self._dont_enforce_csrf_checks = True
 
 class WizardTests(TestCase):
     def test_step_starts_at_zero(self):
--- a/web/lib/django/contrib/formtools/utils.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/formtools/utils.py	Tue May 25 02:43:45 2010 +0200
@@ -32,7 +32,7 @@
     data.append(settings.SECRET_KEY)
 
     # Use HIGHEST_PROTOCOL because it's the most efficient. It requires
-    # Python 2.3, but Django requires 2.3 anyway, so that's OK.
+    # Python 2.3, but Django requires 2.4 anyway, so that's OK.
     pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)
 
     return md5_constructor(pickled).hexdigest()
--- a/web/lib/django/contrib/formtools/wizard.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/formtools/wizard.py	Tue May 25 02:43:45 2010 +0200
@@ -14,21 +14,30 @@
 from django.utils.hashcompat import md5_constructor
 from django.utils.translation import ugettext_lazy as _
 from django.contrib.formtools.utils import security_hash
+from django.utils.decorators import method_decorator
+from django.views.decorators.csrf import csrf_protect
+
 
 class FormWizard(object):
-    # Dictionary of extra template context variables.
-    extra_context = {}
-
     # The HTML (and POST data) field name for the "step" variable.
     step_field_name="wizard_step"
 
     # METHODS SUBCLASSES SHOULDN'T OVERRIDE ###################################
 
     def __init__(self, form_list, initial=None):
-        "form_list should be a list of Form classes (not instances)."
+        """
+        Start a new wizard with a list of forms.
+        
+        form_list should be a list of Form classes (not instances).
+        """
         self.form_list = form_list[:]
         self.initial = initial or {}
-        self.step = 0 # A zero-based counter keeping track of which step we're in.
+
+        # Dictionary of extra template context variables.
+        self.extra_context = {}
+
+        # A zero-based counter keeping track of which step we're in.
+        self.step = 0 
 
     def __repr__(self):
         return "step: %d\nform_list: %s\ninitial_data: %s" % (self.step, self.form_list, self.initial)
@@ -44,6 +53,7 @@
         # hook methods might alter self.form_list.
         return len(self.form_list)
 
+    @method_decorator(csrf_protect)
     def __call__(self, request, *args, **kwargs):
         """
         Main method that does all the hard work, conforming to the Django view
--- a/web/lib/django/contrib/gis/admin/options.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/admin/options.py	Tue May 25 02:43:45 2010 +0200
@@ -64,7 +64,7 @@
     def get_map_widget(self, db_field):
         """
         Returns a subclass of the OpenLayersWidget (or whatever was specified
-        in the `widget` attribute) using the settings from the attributes set 
+        in the `widget` attribute) using the settings from the attributes set
         in this class.
         """
         is_collection = db_field.geom_type in ('MULTIPOINT', 'MULTILINESTRING', 'MULTIPOLYGON', 'GEOMETRYCOLLECTION')
@@ -111,12 +111,6 @@
                       }
         return OLMap
 
-# Using the Beta OSM in the admin requires the following:
-#  (1) The Google Maps Mercator projection needs to be added
-#      to your `spatial_ref_sys` table.  You'll need at least GDAL 1.5:
-#      >>> from django.contrib.gis.gdal import SpatialReference
-#      >>> from django.contrib.gis.utils import add_postgis_srs
-#      >>> add_postgis_srs(SpatialReference(900913)) # Adding the Google Projection 
 from django.contrib.gis import gdal
 if gdal.HAS_GDAL:
     class OSMGeoAdmin(GeoModelAdmin):
--- a/web/lib/django/contrib/gis/db/backend/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/db/backend/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,20 +1,11 @@
-"""
- This module provides the backend for spatial SQL construction with Django.
-
- Specifically, this module will import the correct routines and modules
- needed for GeoDjango to interface with the spatial database.
-"""
-from django.conf import settings
-from django.contrib.gis.db.backend.util import gqn
+from django.db import connection
 
-# Retrieving the necessary settings from the backend.
-if settings.DATABASE_ENGINE == 'postgresql_psycopg2':
-    from django.contrib.gis.db.backend.postgis import create_test_spatial_db, get_geo_where_clause, SpatialBackend
-elif settings.DATABASE_ENGINE == 'oracle':
-    from django.contrib.gis.db.backend.oracle import create_test_spatial_db, get_geo_where_clause, SpatialBackend
-elif settings.DATABASE_ENGINE == 'mysql':
-    from django.contrib.gis.db.backend.mysql import create_test_spatial_db, get_geo_where_clause, SpatialBackend
-elif settings.DATABASE_ENGINE == 'sqlite3':
-    from django.contrib.gis.db.backend.spatialite import create_test_spatial_db, get_geo_where_clause, SpatialBackend
-else:
-    raise NotImplementedError('No Geographic Backend exists for %s' % settings.DATABASE_ENGINE)
+if hasattr(connection.ops, 'spatial_version'):
+    from warnings import warn
+    warn('The `django.contrib.gis.db.backend` module was refactored and '
+         'renamed to `django.contrib.gis.db.backends` in 1.2.  '
+         'All functionality of `SpatialBackend` '
+         'has been moved to the `ops` attribute of the spatial database '
+         'backend.  A `SpatialBackend` alias is provided here for '
+         'backwards-compatibility, but will be removed in 1.3.')
+    SpatialBackend = connection.ops
--- a/web/lib/django/contrib/gis/db/backend/adaptor.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-class WKTAdaptor(object):
-    """
-    This provides an adaptor for Geometries sent to the
-    MySQL and Oracle database backends.
-    """
-    def __init__(self, geom):
-        self.wkt = geom.wkt
-        self.srid = geom.srid
-
-    def __eq__(self, other):
-        return self.wkt == other.wkt and self.srid == other.srid
-
-    def __str__(self):
-        return self.wkt
-
-    def prepare_database_save(self, unused):
-        return self
--- a/web/lib/django/contrib/gis/db/backend/base.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-"""
- This module holds the base `SpatialBackend` object, which is
- instantiated by each spatial backend with the features it has.
-"""
-# TODO: Create a `Geometry` protocol and allow user to use
-# different Geometry objects -- for now we just use GEOSGeometry.
-from django.contrib.gis.geos import GEOSGeometry, GEOSException
-
-class BaseSpatialBackend(object):
-    Geometry = GEOSGeometry
-    GeometryException = GEOSException
-
-    def __init__(self, **kwargs):
-        kwargs.setdefault('distance_functions', {})
-        kwargs.setdefault('limited_where', {})
-        for k, v in kwargs.iteritems(): setattr(self, k, v)
- 
-    def __getattr__(self, name):
-        """
-        All attributes of the spatial backend return False by default.
-        """
-        try:
-            return self.__dict__[name]
-        except KeyError:
-            return False
-
--- a/web/lib/django/contrib/gis/db/backend/mysql/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-__all__ = ['create_test_spatial_db', 'get_geo_where_clause', 'SpatialBackend']
-
-from django.contrib.gis.db.backend.base import BaseSpatialBackend
-from django.contrib.gis.db.backend.adaptor import WKTAdaptor
-from django.contrib.gis.db.backend.mysql.creation import create_test_spatial_db
-from django.contrib.gis.db.backend.mysql.field import MySQLGeoField
-from django.contrib.gis.db.backend.mysql.query import *
-
-SpatialBackend = BaseSpatialBackend(name='mysql', mysql=True,
-                                    gis_terms=MYSQL_GIS_TERMS,
-                                    select=GEOM_SELECT,
-                                    Adaptor=WKTAdaptor,
-                                    Field=MySQLGeoField)
--- a/web/lib/django/contrib/gis/db/backend/mysql/creation.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-
-def create_test_spatial_db(verbosity=1, autoclobber=False):
-    "A wrapper over the MySQL `create_test_db` method."
-    from django.db import connection
-    connection.creation.create_test_db(verbosity, autoclobber)
--- a/web/lib/django/contrib/gis/db/backend/mysql/field.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-from django.db import connection
-from django.db.models.fields import Field # Django base Field class
-from django.contrib.gis.db.backend.mysql.query import GEOM_FROM_TEXT
-
-# Quotename & geographic quotename, respectively.
-qn = connection.ops.quote_name
-
-class MySQLGeoField(Field):
-    """
-    The backend-specific geographic field for MySQL.
-    """
-
-    def _geom_index(self, style, db_table):
-        """
-        Creates a spatial index for the geometry column.  If MyISAM tables are
-        used an R-Tree index is created, otherwise a B-Tree index is created.
-        Thus, for best spatial performance, you should use MyISAM tables
-        (which do not support transactions).  For more information, see Ch.
-        16.6.1 of the MySQL 5.0 documentation.
-        """
-
-        # Getting the index name.
-        idx_name = '%s_%s_id' % (db_table, self.column)
-
-        sql = (style.SQL_KEYWORD('CREATE SPATIAL INDEX ') +
-               style.SQL_TABLE(qn(idx_name)) +
-               style.SQL_KEYWORD(' ON ') +
-               style.SQL_TABLE(qn(db_table)) + '(' +
-               style.SQL_FIELD(qn(self.column)) + ');')
-        return sql
-
-    def post_create_sql(self, style, db_table):
-        """
-        Returns SQL that will be executed after the model has been
-        created.
-        """
-        # Getting the geometric index for this Geometry column.
-        if self.spatial_index:
-            return (self._geom_index(style, db_table),)
-        else:
-            return ()
-
-    def db_type(self):
-        "The OpenGIS name is returned for the MySQL database column type."
-        return self.geom_type
-
-    def get_placeholder(self, value):
-        """
-        The placeholder here has to include MySQL's WKT constructor.  Because
-        MySQL does not support spatial transformations, there is no need to
-        modify the placeholder based on the contents of the given value.
-        """
-        return '%s(%%s)' % GEOM_FROM_TEXT
--- a/web/lib/django/contrib/gis/db/backend/mysql/query.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-"""
- This module contains the spatial lookup types, and the `get_geo_where_clause`
- routine for MySQL.
-
- Please note that MySQL only supports bounding box queries, also
- known as MBRs (Minimum Bounding Rectangles).  Moreover, spatial
- indices may only be used on MyISAM tables -- if you need 
- transactions, take a look at PostGIS.
-"""
-from django.db import connection
-qn = connection.ops.quote_name
-
-# To ease implementation, WKT is passed to/from MySQL.
-GEOM_FROM_TEXT = 'GeomFromText'
-GEOM_FROM_WKB = 'GeomFromWKB'
-GEOM_SELECT = 'AsText(%s)'
-
-# WARNING: MySQL is NOT compliant w/the OpenGIS specification and
-# _every_ one of these lookup types is on the _bounding box_ only.
-MYSQL_GIS_FUNCTIONS = {
-    'bbcontains' : 'MBRContains', # For consistency w/PostGIS API
-    'bboverlaps' : 'MBROverlaps', # .. ..
-    'contained' : 'MBRWithin',    # .. ..
-    'contains' : 'MBRContains',
-    'disjoint' : 'MBRDisjoint',
-    'equals' : 'MBREqual',
-    'exact' : 'MBREqual',
-    'intersects' : 'MBRIntersects',
-    'overlaps' : 'MBROverlaps',
-    'same_as' : 'MBREqual',
-    'touches' : 'MBRTouches',
-    'within' : 'MBRWithin',
-    }
-
-# This lookup type does not require a mapping.
-MISC_TERMS = ['isnull']
-
-# Assacceptable lookup types for Oracle spatial.
-MYSQL_GIS_TERMS  = MYSQL_GIS_FUNCTIONS.keys()
-MYSQL_GIS_TERMS += MISC_TERMS
-MYSQL_GIS_TERMS = dict((term, None) for term in MYSQL_GIS_TERMS) # Making dictionary 
-
-def get_geo_where_clause(table_alias, name, lookup_type, geo_annot):
-    "Returns the SQL WHERE clause for use in MySQL spatial SQL construction."
-    # Getting the quoted field as `geo_col`.
-    geo_col = '%s.%s' % (qn(table_alias), qn(name))
-
-    # See if a MySQL Geometry function matches the lookup type next
-    lookup_info = MYSQL_GIS_FUNCTIONS.get(lookup_type, False)
-    if lookup_info:
-        return "%s(%s, %%s)" % (lookup_info, geo_col)
-    
-    # Handling 'isnull' lookup type
-    # TODO: Is this needed because MySQL cannot handle NULL
-    # geometries in its spatial indices.
-    if lookup_type == 'isnull':
-        return "%s IS %sNULL" % (geo_col, (not geo_annot.value and 'NOT ' or ''))
-
-    raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
--- a/web/lib/django/contrib/gis/db/backend/oracle/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-__all__ = ['create_test_spatial_db', 'get_geo_where_clause', 'SpatialBackend']
-
-from django.contrib.gis.db.backend.base import BaseSpatialBackend
-from django.contrib.gis.db.backend.oracle.adaptor import OracleSpatialAdaptor
-from django.contrib.gis.db.backend.oracle.creation import create_test_spatial_db
-from django.contrib.gis.db.backend.oracle.field import OracleSpatialField
-from django.contrib.gis.db.backend.oracle.models import GeometryColumns, SpatialRefSys
-from django.contrib.gis.db.backend.oracle.query import *
-
-SpatialBackend = BaseSpatialBackend(name='oracle', oracle=True,
-                                    area=AREA,
-                                    centroid=CENTROID,
-                                    difference=DIFFERENCE,
-                                    distance=DISTANCE,
-                                    distance_functions=DISTANCE_FUNCTIONS,
-                                    extent=EXTENT,
-                                    gis_terms=ORACLE_SPATIAL_TERMS,
-                                    gml=ASGML,
-                                    intersection=INTERSECTION,
-                                    length=LENGTH,
-                                    limited_where = {'relate' : None},
-                                    num_geom=NUM_GEOM,
-                                    num_points=NUM_POINTS,
-                                    perimeter=LENGTH,
-                                    point_on_surface=POINT_ON_SURFACE,
-                                    select=GEOM_SELECT,
-                                    sym_difference=SYM_DIFFERENCE,
-                                    transform=TRANSFORM,
-                                    unionagg=UNIONAGG,
-                                    union=UNION,
-                                    Adaptor=OracleSpatialAdaptor,
-                                    Field=OracleSpatialField,
-                                    GeometryColumns=GeometryColumns,
-                                    SpatialRefSys=SpatialRefSys,
-                                    )
--- a/web/lib/django/contrib/gis/db/backend/oracle/adaptor.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-from cx_Oracle import CLOB
-from django.contrib.gis.db.backend.adaptor import WKTAdaptor
-
-class OracleSpatialAdaptor(WKTAdaptor):
-    input_size = CLOB
--- a/web/lib/django/contrib/gis/db/backend/oracle/creation.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-
-def create_test_spatial_db(verbosity=1, autoclobber=False):
-    "A wrapper over the Oracle `create_test_db` routine."
-    from django.db import connection
-    connection.creation.create_test_db(verbosity, autoclobber)
--- a/web/lib/django/contrib/gis/db/backend/oracle/field.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-from django.db import connection
-from django.db.backends.util import truncate_name
-from django.db.models.fields import Field # Django base Field class
-from django.contrib.gis.db.backend.util import gqn
-from django.contrib.gis.db.backend.oracle.query import TRANSFORM
-
-# Quotename & geographic quotename, respectively.
-qn = connection.ops.quote_name
-
-class OracleSpatialField(Field):
-    """
-    The backend-specific geographic field for Oracle Spatial.
-    """
-
-    empty_strings_allowed = False
-
-    def __init__(self, extent=(-180.0, -90.0, 180.0, 90.0), tolerance=0.05, **kwargs):
-        """
-        Oracle Spatial backend needs to have the extent -- for projected coordinate
-        systems _you must define the extent manually_, since the coordinates are
-        for geodetic systems.  The `tolerance` keyword specifies the tolerance
-        for error (in meters), and defaults to 0.05 (5 centimeters).
-        """
-        # Oracle Spatial specific keyword arguments.
-        self._extent = extent
-        self._tolerance = tolerance
-        # Calling the Django field initialization.
-        super(OracleSpatialField, self).__init__(**kwargs)
-
-    def _add_geom(self, style, db_table):
-        """
-        Adds this geometry column into the Oracle USER_SDO_GEOM_METADATA
-        table.
-        """
-        # Checking the dimensions.
-        # TODO: Add support for 3D geometries.
-        if self.dim != 2:
-            raise Exception('3D geometries not yet supported on Oracle Spatial backend.')
-
-        # Constructing the SQL that will be used to insert information about
-        # the geometry column into the USER_GSDO_GEOM_METADATA table.
-        meta_sql = (style.SQL_KEYWORD('INSERT INTO ') +
-                    style.SQL_TABLE('USER_SDO_GEOM_METADATA') +
-                    ' (%s, %s, %s, %s)\n  ' % tuple(map(qn, ['TABLE_NAME', 'COLUMN_NAME', 'DIMINFO', 'SRID'])) +
-                    style.SQL_KEYWORD(' VALUES ') + '(\n    ' +
-                    style.SQL_TABLE(gqn(db_table)) + ',\n    ' +
-                    style.SQL_FIELD(gqn(self.column)) + ',\n    ' +
-                    style.SQL_KEYWORD("MDSYS.SDO_DIM_ARRAY") + '(\n      ' +
-                    style.SQL_KEYWORD("MDSYS.SDO_DIM_ELEMENT") +
-                    ("('LONG', %s, %s, %s),\n      " % (self._extent[0], self._extent[2], self._tolerance)) +
-                    style.SQL_KEYWORD("MDSYS.SDO_DIM_ELEMENT") +
-                    ("('LAT', %s, %s, %s)\n    ),\n" % (self._extent[1], self._extent[3], self._tolerance)) +
-                    '    %s\n  );' % self.srid)
-        return meta_sql
-
-    def _geom_index(self, style, db_table):
-        "Creates an Oracle Geometry index (R-tree) for this geometry field."
-
-        # Getting the index name, Oracle doesn't allow object
-        # names > 30 characters.
-        idx_name = truncate_name('%s_%s_id' % (db_table, self.column), 30)
-
-        sql = (style.SQL_KEYWORD('CREATE INDEX ') +
-               style.SQL_TABLE(qn(idx_name)) +
-               style.SQL_KEYWORD(' ON ') +
-               style.SQL_TABLE(qn(db_table)) + '(' +
-               style.SQL_FIELD(qn(self.column)) + ') ' +
-               style.SQL_KEYWORD('INDEXTYPE IS ') +
-               style.SQL_TABLE('MDSYS.SPATIAL_INDEX') + ';')
-        return sql
-
-    def post_create_sql(self, style, db_table):
-        """
-        Returns SQL that will be executed after the model has been
-        created.
-        """
-        # Getting the meta geometry information.
-        post_sql = self._add_geom(style, db_table)
-
-        # Getting the geometric index for this Geometry column.
-        if self.spatial_index:
-            return (post_sql, self._geom_index(style, db_table))
-        else:
-            return (post_sql,)
-
-    def db_type(self):
-        "The Oracle geometric data type is MDSYS.SDO_GEOMETRY."
-        return 'MDSYS.SDO_GEOMETRY'
-
-    def get_placeholder(self, value):
-        """
-        Provides a proper substitution value for Geometries that are not in the
-        SRID of the field.  Specifically, this routine will substitute in the
-        SDO_CS.TRANSFORM() function call.
-        """
-        if value is None:
-            return 'NULL'
-        elif value.srid != self.srid:
-            # Adding Transform() to the SQL placeholder.
-            return '%s(SDO_GEOMETRY(%%s, %s), %s)' % (TRANSFORM, value.srid, self.srid)
-        else:
-            return 'SDO_GEOMETRY(%%s, %s)' % self.srid
--- a/web/lib/django/contrib/gis/db/backend/oracle/models.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-"""
- The GeometryColumns and SpatialRefSys models for the Oracle spatial
- backend.
-
- It should be noted that Oracle Spatial does not have database tables
- named according to the OGC standard, so the closest analogs are used.
- For example, the `USER_SDO_GEOM_METADATA` is used for the GeometryColumns
- model and the `SDO_COORD_REF_SYS` is used for the SpatialRefSys model.
-"""
-from django.db import models
-
-class GeometryColumns(models.Model):
-    "Maps to the Oracle USER_SDO_GEOM_METADATA table."
-    table_name = models.CharField(max_length=32)
-    column_name = models.CharField(max_length=1024)
-    srid = models.IntegerField(primary_key=True)
-    # TODO: Add support for `diminfo` column (type MDSYS.SDO_DIM_ARRAY).
-    class Meta:
-        app_label = 'gis'
-        db_table = 'USER_SDO_GEOM_METADATA'
-        managed = False
-
-    @classmethod
-    def table_name_col(cls):
-        """
-        Returns the name of the metadata column used to store the
-        the feature table name.
-        """
-        return 'table_name'
-
-    @classmethod
-    def geom_col_name(cls):
-        """
-        Returns the name of the metadata column used to store the
-        the feature geometry column.
-        """
-        return 'column_name'
-
-    def __unicode__(self):
-        return '%s - %s (SRID: %s)' % (self.table_name, self.column_name, self.srid)
-
-class SpatialRefSys(models.Model):
-    "Maps to the Oracle MDSYS.CS_SRS table."
-    cs_name = models.CharField(max_length=68)
-    srid = models.IntegerField(primary_key=True)
-    auth_srid = models.IntegerField()
-    auth_name = models.CharField(max_length=256)
-    wktext = models.CharField(max_length=2046)
-    #cs_bounds = models.GeometryField() # TODO
-
-    class Meta:
-        abstract = True
-        db_table = 'CS_SRS'
-        managed = False
-
-    @property
-    def wkt(self):
-        return self.wktext
-
-    @classmethod
-    def wkt_col(cls):
-        return 'wktext'
--- a/web/lib/django/contrib/gis/db/backend/oracle/query.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-"""
- This module contains the spatial lookup types, and the `get_geo_where_clause`
- routine for Oracle Spatial.
-
- Please note that WKT support is broken on the XE version, and thus
- this backend will not work on such platforms.  Specifically, XE lacks 
- support for an internal JVM, and Java libraries are required to use 
- the WKT constructors.
-"""
-import re
-from decimal import Decimal
-from django.db import connection
-from django.contrib.gis.db.backend.util import SpatialFunction
-from django.contrib.gis.measure import Distance
-qn = connection.ops.quote_name
-
-# The GML, distance, transform, and union procedures.
-AREA = 'SDO_GEOM.SDO_AREA'
-ASGML = 'SDO_UTIL.TO_GMLGEOMETRY'
-CENTROID = 'SDO_GEOM.SDO_CENTROID'
-DIFFERENCE = 'SDO_GEOM.SDO_DIFFERENCE'
-DISTANCE = 'SDO_GEOM.SDO_DISTANCE'
-EXTENT = 'SDO_AGGR_MBR'
-INTERSECTION = 'SDO_GEOM.SDO_INTERSECTION'
-LENGTH = 'SDO_GEOM.SDO_LENGTH'
-NUM_GEOM = 'SDO_UTIL.GETNUMELEM'
-NUM_POINTS = 'SDO_UTIL.GETNUMVERTICES'
-POINT_ON_SURFACE = 'SDO_GEOM.SDO_POINTONSURFACE'
-SYM_DIFFERENCE = 'SDO_GEOM.SDO_XOR'
-TRANSFORM = 'SDO_CS.TRANSFORM'
-UNION = 'SDO_GEOM.SDO_UNION'
-UNIONAGG = 'SDO_AGGR_UNION'
-
-# We want to get SDO Geometries as WKT because it is much easier to 
-# instantiate GEOS proxies from WKT than SDO_GEOMETRY(...) strings.  
-# However, this adversely affects performance (i.e., Java is called 
-# to convert to WKT on every query).  If someone wishes to write a 
-# SDO_GEOMETRY(...) parser in Python, let me know =)
-GEOM_SELECT = 'SDO_UTIL.TO_WKTGEOMETRY(%s)'
-
-#### Classes used in constructing Oracle spatial SQL ####
-class SDOOperation(SpatialFunction):
-    "Base class for SDO* Oracle operations."
-    def __init__(self, func, **kwargs):
-        kwargs.setdefault('operator', '=')
-        kwargs.setdefault('result', 'TRUE')
-        kwargs.setdefault('end_subst', ") %s '%s'")
-        super(SDOOperation, self).__init__(func, **kwargs)
-
-class SDODistance(SpatialFunction):
-    "Class for Distance queries."
-    def __init__(self, op, tolerance=0.05):
-        super(SDODistance, self).__init__(DISTANCE, end_subst=', %s) %%s %%s' % tolerance, 
-                                          operator=op, result='%%s')
-
-class SDOGeomRelate(SpatialFunction):
-    "Class for using SDO_GEOM.RELATE."
-    def __init__(self, mask, tolerance=0.05):
-        # SDO_GEOM.RELATE(...) has a peculiar argument order: column, mask, geom, tolerance.
-        # Moreover, the runction result is the mask (e.g., 'DISJOINT' instead of 'TRUE').
-        end_subst = "%s%s) %s '%s'" % (', %%s, ', tolerance, '=', mask)
-        beg_subst = "%%s(%%s, '%s'" % mask 
-        super(SDOGeomRelate, self).__init__('SDO_GEOM.RELATE', beg_subst=beg_subst, end_subst=end_subst)
-
-class SDORelate(SpatialFunction):
-    "Class for using SDO_RELATE."
-    masks = 'TOUCH|OVERLAPBDYDISJOINT|OVERLAPBDYINTERSECT|EQUAL|INSIDE|COVEREDBY|CONTAINS|COVERS|ANYINTERACT|ON'
-    mask_regex = re.compile(r'^(%s)(\+(%s))*$' % (masks, masks), re.I)
-    def __init__(self, mask):
-        func = 'SDO_RELATE'
-        if not self.mask_regex.match(mask):
-            raise ValueError('Invalid %s mask: "%s"' % (func, mask))
-        super(SDORelate, self).__init__(func, end_subst=", 'mask=%s') = 'TRUE'" % mask)
-
-#### Lookup type mapping dictionaries of Oracle spatial operations ####
-
-# Valid distance types and substitutions
-dtypes = (Decimal, Distance, float, int, long)
-DISTANCE_FUNCTIONS = {
-    'distance_gt' : (SDODistance('>'), dtypes),
-    'distance_gte' : (SDODistance('>='), dtypes),
-    'distance_lt' : (SDODistance('<'), dtypes),
-    'distance_lte' : (SDODistance('<='), dtypes),
-    'dwithin' : (SDOOperation('SDO_WITHIN_DISTANCE', 
-                              beg_subst="%s(%s, %%s, 'distance=%%s'"), dtypes),
-    }
-
-ORACLE_GEOMETRY_FUNCTIONS = {
-    'contains' : SDOOperation('SDO_CONTAINS'),
-    'coveredby' : SDOOperation('SDO_COVEREDBY'),
-    'covers' : SDOOperation('SDO_COVERS'),
-    'disjoint' : SDOGeomRelate('DISJOINT'),
-    'intersects' : SDOOperation('SDO_OVERLAPBDYINTERSECT'), # TODO: Is this really the same as ST_Intersects()?
-    'equals' : SDOOperation('SDO_EQUAL'),
-    'exact' : SDOOperation('SDO_EQUAL'),
-    'overlaps' : SDOOperation('SDO_OVERLAPS'),
-    'same_as' : SDOOperation('SDO_EQUAL'),
-    'relate' : (SDORelate, basestring), # Oracle uses a different syntax, e.g., 'mask=inside+touch'
-    'touches' : SDOOperation('SDO_TOUCH'),
-    'within' : SDOOperation('SDO_INSIDE'),
-    }
-ORACLE_GEOMETRY_FUNCTIONS.update(DISTANCE_FUNCTIONS)
-
-# This lookup type does not require a mapping.
-MISC_TERMS = ['isnull']
-
-# Acceptable lookup types for Oracle spatial.
-ORACLE_SPATIAL_TERMS  = ORACLE_GEOMETRY_FUNCTIONS.keys()
-ORACLE_SPATIAL_TERMS += MISC_TERMS
-ORACLE_SPATIAL_TERMS = dict((term, None) for term in ORACLE_SPATIAL_TERMS) # Making dictionary for fast lookups
-
-#### The `get_geo_where_clause` function for Oracle ####
-def get_geo_where_clause(table_alias, name, lookup_type, geo_annot):
-    "Returns the SQL WHERE clause for use in Oracle spatial SQL construction."
-    # Getting the quoted table name as `geo_col`.
-    geo_col = '%s.%s' % (qn(table_alias), qn(name))
-
-    # See if a Oracle Geometry function matches the lookup type next
-    lookup_info = ORACLE_GEOMETRY_FUNCTIONS.get(lookup_type, False)
-    if lookup_info:
-        # Lookup types that are tuples take tuple arguments, e.g., 'relate' and 
-        # 'dwithin' lookup types.
-        if isinstance(lookup_info, tuple):
-            # First element of tuple is lookup type, second element is the type
-            # of the expected argument (e.g., str, float)
-            sdo_op, arg_type = lookup_info
-
-            # Ensuring that a tuple _value_ was passed in from the user
-            if not isinstance(geo_annot.value, tuple):
-                raise TypeError('Tuple required for `%s` lookup type.' % lookup_type)
-            if len(geo_annot.value) != 2: 
-                raise ValueError('2-element tuple required for %s lookup type.' % lookup_type)
-            
-            # Ensuring the argument type matches what we expect.
-            if not isinstance(geo_annot.value[1], arg_type):
-                raise TypeError('Argument type should be %s, got %s instead.' % (arg_type, type(geo_annot.value[1])))
-
-            if lookup_type == 'relate':
-                # The SDORelate class handles construction for these queries, 
-                # and verifies the mask argument.
-                return sdo_op(geo_annot.value[1]).as_sql(geo_col)
-            else:
-                # Otherwise, just call the `as_sql` method on the SDOOperation instance.
-                return sdo_op.as_sql(geo_col)
-        else:
-            # Lookup info is a SDOOperation instance, whose `as_sql` method returns
-            # the SQL necessary for the geometry function call. For example:  
-            #  SDO_CONTAINS("geoapp_country"."poly", SDO_GEOMTRY('POINT(5 23)', 4326)) = 'TRUE'
-            return lookup_info.as_sql(geo_col)
-    elif lookup_type == 'isnull':
-        # Handling 'isnull' lookup type
-        return "%s IS %sNULL" % (geo_col, (not geo_annot.value and 'NOT ' or ''))
-
-    raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
--- a/web/lib/django/contrib/gis/db/backend/postgis/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-__all__ = ['create_test_spatial_db', 'get_geo_where_clause', 'SpatialBackend']
-
-from django.contrib.gis.db.backend.base import BaseSpatialBackend
-from django.contrib.gis.db.backend.postgis.adaptor import PostGISAdaptor
-from django.contrib.gis.db.backend.postgis.creation import create_test_spatial_db
-from django.contrib.gis.db.backend.postgis.field import PostGISField
-from django.contrib.gis.db.backend.postgis.models import GeometryColumns, SpatialRefSys
-from django.contrib.gis.db.backend.postgis.query import *
-
-SpatialBackend = BaseSpatialBackend(name='postgis', postgis=True,
-                                    area=AREA,
-                                    centroid=CENTROID,
-                                    collect=COLLECT,
-                                    difference=DIFFERENCE,
-                                    distance=DISTANCE,
-                                    distance_functions=DISTANCE_FUNCTIONS,
-                                    distance_sphere=DISTANCE_SPHERE,
-                                    distance_spheroid=DISTANCE_SPHEROID,
-                                    envelope=ENVELOPE,
-                                    extent=EXTENT,
-                                    gis_terms=POSTGIS_TERMS,
-                                    geojson=ASGEOJSON,
-                                    gml=ASGML,
-                                    intersection=INTERSECTION,
-                                    kml=ASKML,
-                                    length=LENGTH,
-                                    length_spheroid=LENGTH_SPHEROID,
-                                    make_line=MAKE_LINE,
-                                    mem_size=MEM_SIZE,
-                                    num_geom=NUM_GEOM,
-                                    num_points=NUM_POINTS,
-                                    perimeter=PERIMETER,
-                                    point_on_surface=POINT_ON_SURFACE,
-                                    scale=SCALE,
-                                    select=GEOM_SELECT,
-                                    snap_to_grid=SNAP_TO_GRID,
-                                    svg=ASSVG,
-                                    sym_difference=SYM_DIFFERENCE,
-                                    transform=TRANSFORM,
-                                    translate=TRANSLATE,
-                                    union=UNION,
-                                    unionagg=UNIONAGG,
-                                    version=(MAJOR_VERSION, MINOR_VERSION1, MINOR_VERSION2),
-                                    Adaptor=PostGISAdaptor,
-                                    Field=PostGISField,
-                                    GeometryColumns=GeometryColumns,
-                                    SpatialRefSys=SpatialRefSys,
-                                    )
--- a/web/lib/django/contrib/gis/db/backend/postgis/adaptor.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-"""
- This object provides quoting for GEOS geometries into PostgreSQL/PostGIS.
-"""
-
-from django.contrib.gis.db.backend.postgis.query import GEOM_FROM_WKB
-from psycopg2 import Binary
-from psycopg2.extensions import ISQLQuote
-
-class PostGISAdaptor(object):
-    def __init__(self, geom):
-        "Initializes on the geometry."
-        # Getting the WKB (in string form, to allow easy pickling of
-        # the adaptor) and the SRID from the geometry.
-        self.wkb = str(geom.wkb)
-        self.srid = geom.srid
-
-    def __conform__(self, proto):
-        # Does the given protocol conform to what Psycopg2 expects?
-        if proto == ISQLQuote:
-            return self
-        else:
-            raise Exception('Error implementing psycopg2 protocol. Is psycopg2 installed?')
-
-    def __eq__(self, other):
-        return (self.wkb == other.wkb) and (self.srid == other.srid)
-
-    def __str__(self):
-        return self.getquoted()
-
-    def getquoted(self):
-        "Returns a properly quoted string for use in PostgreSQL/PostGIS."
-        # Want to use WKB, so wrap with psycopg2 Binary() to quote properly.
-        return "%s(%s, %s)" % (GEOM_FROM_WKB, Binary(self.wkb), self.srid or -1)
-
-    def prepare_database_save(self, unused):
-        return self
--- a/web/lib/django/contrib/gis/db/backend/postgis/creation.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,231 +0,0 @@
-import os, re, sys
-
-from django.conf import settings
-from django.core.management import call_command
-from django.db import connection
-from django.db.backends.creation import TEST_DATABASE_PREFIX
-from django.contrib.gis.db.backend.util import getstatusoutput
-
-def create_lang(db_name, verbosity=1):
-    "Sets up the pl/pgsql language on the given database."
-
-    # Getting the command-line options for the shell command
-    options = get_cmd_options(db_name)
-
-    # Constructing the 'createlang' command.
-    createlang_cmd = 'createlang %splpgsql' % options
-    if verbosity >= 1: print createlang_cmd
-
-    # Must have database super-user privileges to execute createlang -- it must
-    # also be in your path.
-    status, output = getstatusoutput(createlang_cmd)
-
-    # Checking the status of the command, 0 => execution successful
-    if status:
-        raise Exception("Error executing 'plpgsql' command: %s\n" % output)
-
-def _create_with_cursor(db_name, verbosity=1, autoclobber=False):
-    "Creates database with psycopg2 cursor."
-    qn = connection.ops.quote_name
-
-    # Constructing the necessary SQL to create the database.
-    create_sql = 'CREATE DATABASE %s' % qn(db_name)
-
-    # If there's a template database for PostGIS set, then use it.
-    if hasattr(settings, 'POSTGIS_TEMPLATE'):
-        create_sql += ' TEMPLATE %s' % qn(settings.POSTGIS_TEMPLATE)
-
-    # The DATABASE_USER must possess the privileges to create a spatial database.
-    if settings.DATABASE_USER:
-        create_sql += ' OWNER %s' % qn(settings.DATABASE_USER)
-
-    cursor = connection.cursor()
-    connection.creation.set_autocommit()
-
-    try:
-        # Trying to create the database first.
-        cursor.execute(create_sql)
-    except Exception, e:
-        if 'already exists' in e.pgerror.lower():
-            # Database already exists, drop and recreate if user agrees.
-            if not autoclobber:
-                confirm = raw_input("\nIt appears the database, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % db_name)
-            if autoclobber or confirm == 'yes':
-                if verbosity >= 1: print 'Destroying old spatial database...'
-                drop_db(db_name)
-                if verbosity >= 1: print 'Creating new spatial database...'
-                cursor.execute(create_sql)
-            else:
-                raise Exception('Spatial database creation canceled.')
-        else:
-            raise Exception('Spatial database creation failed: "%s"' % e.pgerror.strip())
-
-created_regex = re.compile(r'^createdb: database creation failed: ERROR:  database ".+" already exists')
-def _create_with_shell(db_name, verbosity=1, autoclobber=False):
-    """
-    If no spatial database already exists, then using a cursor will not work.
-    Thus, a `createdb` command will be issued through the shell to bootstrap
-    creation of the spatial database.
-
-    TODO: Actually allow this method to be used without a spatial database
-    in place first.
-    """
-    # Getting the command-line options for the shell command
-    options = get_cmd_options(False)
-    if hasattr(settings, 'POSTGIS_TEMPLATE'):
-        options += '-T %s ' % settings.POSTGIS_TEMPlATE
-
-    create_cmd = 'createdb -O %s %s%s' % (settings.DATABASE_USER, options, db_name)
-    if verbosity >= 1: print create_cmd
-
-    # Attempting to create the database.
-    status, output = getstatusoutput(create_cmd)
-
-    if status:
-        if created_regex.match(output):
-            if not autoclobber:
-                confirm = raw_input("\nIt appears the database, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % db_name)
-            if autoclobber or confirm == 'yes':
-                if verbosity >= 1: print 'Destroying old spatial database...'
-                drop_cmd = 'dropdb %s%s' % (options, db_name)
-                status, output = getstatusoutput(drop_cmd)
-                if status != 0:
-                    raise Exception('Could not drop database %s: %s' % (db_name, output))
-                if verbosity >= 1: print 'Creating new spatial database...'
-                status, output = getstatusoutput(create_cmd)
-                if status != 0:
-                    raise Exception('Could not create database after dropping: %s' % output)
-            else:
-                raise Exception('Spatial Database Creation canceled.')
-        else:
-            raise Exception('Unknown error occurred in creating database: %s' % output)
-
-def create_test_spatial_db(verbosity=1, autoclobber=False, interactive=False):
-    "Creates a test spatial database based on the settings."
-
-    # Making sure we're using PostgreSQL and psycopg2
-    if settings.DATABASE_ENGINE != 'postgresql_psycopg2':
-        raise Exception('Spatial database creation only supported postgresql_psycopg2 platform.')
-
-    # Getting the spatial database name
-    db_name = get_spatial_db(test=True)
-    _create_with_cursor(db_name, verbosity=verbosity, autoclobber=autoclobber)
-
-    # If a template database is used, then don't need to do any of the following.
-    if not hasattr(settings, 'POSTGIS_TEMPLATE'):
-        # Creating the db language, does not need to be done on NT platforms
-        # since the PostGIS installer enables this capability.
-        if os.name != 'nt':
-            create_lang(db_name, verbosity=verbosity)
-
-        # Now adding in the PostGIS routines.
-        load_postgis_sql(db_name, verbosity=verbosity)
-
-    if verbosity >= 1: print 'Creation of spatial database %s successful.' % db_name
-
-    # Closing the connection
-    connection.close()
-    settings.DATABASE_NAME = db_name
-    connection.settings_dict["DATABASE_NAME"] = db_name
-    can_rollback = connection.creation._rollback_works()
-    settings.DATABASE_SUPPORTS_TRANSACTIONS = can_rollback
-    connection.settings_dict["DATABASE_SUPPORTS_TRANSACTIONS"] = can_rollback
-
-    # Syncing the database
-    call_command('syncdb', verbosity=verbosity, interactive=interactive)
-
-def drop_db(db_name=False, test=False):
-    """
-    Drops the given database (defaults to what is returned from
-    get_spatial_db()). All exceptions are propagated up to the caller.
-    """
-    if not db_name: db_name = get_spatial_db(test=test)
-    cursor = connection.cursor()
-    cursor.execute('DROP DATABASE %s' % connection.ops.quote_name(db_name))
-
-def get_cmd_options(db_name):
-    "Obtains the command-line PostgreSQL connection options for shell commands."
-    # The db_name parameter is optional
-    options = ''
-    if db_name:
-        options += '-d %s ' % db_name
-    if settings.DATABASE_USER:
-        options += '-U %s ' % settings.DATABASE_USER
-    if settings.DATABASE_HOST:
-        options += '-h %s ' % settings.DATABASE_HOST
-    if settings.DATABASE_PORT:
-        options += '-p %s ' % settings.DATABASE_PORT
-    return options
-
-def get_spatial_db(test=False):
-    """
-    Returns the name of the spatial database.  The 'test' keyword may be set
-    to return the test spatial database name.
-    """
-    if test:
-        if settings.TEST_DATABASE_NAME:
-            test_db_name = settings.TEST_DATABASE_NAME
-        else:
-            test_db_name = TEST_DATABASE_PREFIX + settings.DATABASE_NAME
-        return test_db_name
-    else:
-        if not settings.DATABASE_NAME:
-            raise Exception('must configure DATABASE_NAME in settings.py')
-        return settings.DATABASE_NAME
-
-def load_postgis_sql(db_name, verbosity=1):
-    """
-    This routine loads up the PostGIS SQL files lwpostgis.sql and
-    spatial_ref_sys.sql.
-    """
-    # Getting the path to the PostGIS SQL
-    try:
-        # POSTGIS_SQL_PATH may be placed in settings to tell GeoDjango where the
-        # PostGIS SQL files are located.  This is especially useful on Win32
-        # platforms since the output of pg_config looks like "C:/PROGRA~1/..".
-        sql_path = settings.POSTGIS_SQL_PATH
-    except AttributeError:
-        status, sql_path = getstatusoutput('pg_config --sharedir')
-        if status:
-            sql_path = '/usr/local/share'
-
-    # The PostGIS SQL post-creation files.
-    lwpostgis_file = os.path.join(sql_path, 'lwpostgis.sql')
-    srefsys_file = os.path.join(sql_path, 'spatial_ref_sys.sql')
-    if not os.path.isfile(lwpostgis_file):
-        raise Exception('Could not find PostGIS function definitions in %s' % lwpostgis_file)
-    if not os.path.isfile(srefsys_file):
-        raise Exception('Could not find PostGIS spatial reference system definitions in %s' % srefsys_file)
-
-    # Getting the psql command-line options, and command format.
-    options = get_cmd_options(db_name)
-    cmd_fmt = 'psql %s-f "%%s"' % options
-
-    # Now trying to load up the PostGIS functions
-    cmd = cmd_fmt % lwpostgis_file
-    if verbosity >= 1: print cmd
-    status, output = getstatusoutput(cmd)
-    if status:
-        raise Exception('Error in loading PostGIS lwgeometry routines.')
-
-    # Now trying to load up the Spatial Reference System table
-    cmd = cmd_fmt % srefsys_file
-    if verbosity >= 1: print cmd
-    status, output = getstatusoutput(cmd)
-    if status:
-        raise Exception('Error in loading PostGIS spatial_ref_sys table.')
-
-    # Setting the permissions because on Windows platforms the owner
-    # of the spatial_ref_sys and geometry_columns tables is always
-    # the postgres user, regardless of how the db is created.
-    if os.name == 'nt': set_permissions(db_name)
-
-def set_permissions(db_name):
-    """
-    Sets the permissions on the given database to that of the user specified
-    in the settings.  Needed specifically for PostGIS on Win32 platforms.
-    """
-    cursor = connection.cursor()
-    user = settings.DATABASE_USER
-    cursor.execute('ALTER TABLE geometry_columns OWNER TO %s' % user)
-    cursor.execute('ALTER TABLE spatial_ref_sys OWNER TO %s' % user)
--- a/web/lib/django/contrib/gis/db/backend/postgis/field.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-from django.db import connection
-from django.db.models.fields import Field # Django base Field class
-from django.contrib.gis.db.backend.util import gqn
-from django.contrib.gis.db.backend.postgis.query import TRANSFORM
-
-# Quotename & geographic quotename, respectively
-qn = connection.ops.quote_name
-
-class PostGISField(Field):
-    """
-    The backend-specific geographic field for PostGIS.
-    """
-
-    def _add_geom(self, style, db_table):
-        """
-        Constructs the addition of the geometry to the table using the
-        AddGeometryColumn(...) PostGIS (and OGC standard) stored procedure.
-
-        Takes the style object (provides syntax highlighting) and the
-        database table as parameters.
-        """
-        sql = (style.SQL_KEYWORD('SELECT ') +
-               style.SQL_TABLE('AddGeometryColumn') + '(' +
-               style.SQL_TABLE(gqn(db_table)) + ', ' +
-               style.SQL_FIELD(gqn(self.column)) + ', ' +
-               style.SQL_FIELD(str(self.srid)) + ', ' +
-               style.SQL_COLTYPE(gqn(self.geom_type)) + ', ' +
-               style.SQL_KEYWORD(str(self.dim)) + ');')
-
-        if not self.null:
-            # Add a NOT NULL constraint to the field
-            sql += ('\n' +
-                    style.SQL_KEYWORD('ALTER TABLE ') +
-                    style.SQL_TABLE(qn(db_table)) +
-                    style.SQL_KEYWORD(' ALTER ') +
-                    style.SQL_FIELD(qn(self.column)) +
-                    style.SQL_KEYWORD(' SET NOT NULL') + ';')
-        return sql
-
-    def _geom_index(self, style, db_table,
-                    index_type='GIST', index_opts='GIST_GEOMETRY_OPS'):
-        "Creates a GiST index for this geometry field."
-        sql = (style.SQL_KEYWORD('CREATE INDEX ') +
-              style.SQL_TABLE(qn('%s_%s_id' % (db_table, self.column))) +
-              style.SQL_KEYWORD(' ON ') +
-              style.SQL_TABLE(qn(db_table)) +
-              style.SQL_KEYWORD(' USING ') +
-              style.SQL_COLTYPE(index_type) + ' ( ' +
-              style.SQL_FIELD(qn(self.column)) + ' ' +
-              style.SQL_KEYWORD(index_opts) + ' );')
-        return sql
-
-    def post_create_sql(self, style, db_table):
-        """
-        Returns SQL that will be executed after the model has been
-        created. Geometry columns must be added after creation with the
-        PostGIS AddGeometryColumn() function.
-        """
-
-        # Getting the AddGeometryColumn() SQL necessary to create a PostGIS
-        # geometry field.
-        post_sql = self._add_geom(style, db_table)
-
-        # If the user wants to index this data, then get the indexing SQL as well.
-        if self.spatial_index:
-            return (post_sql, self._geom_index(style, db_table))
-        else:
-            return (post_sql,)
-
-    def _post_delete_sql(self, style, db_table):
-        "Drops the geometry column."
-        sql = (style.SQL_KEYWORD('SELECT ') +
-               style.SQL_KEYWORD('DropGeometryColumn') + '(' +
-               style.SQL_TABLE(gqn(db_table)) + ', ' +
-               style.SQL_FIELD(gqn(self.column)) +  ');')
-        return sql
-
-    def db_type(self):
-        """
-        PostGIS geometry columns are added by stored procedures, should be
-        None.
-        """
-        return None
-
-    def get_placeholder(self, value):
-        """
-        Provides a proper substitution value for Geometries that are not in the
-        SRID of the field.  Specifically, this routine will substitute in the
-        ST_Transform() function call.
-        """
-        if value is None or value.srid == self.srid:
-            return '%s'
-        else:
-            # Adding Transform() to the SQL placeholder.
-            return '%s(%%s, %s)' % (TRANSFORM, self.srid)
--- a/web/lib/django/contrib/gis/db/backend/postgis/management.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-"""
-  This utility module is for obtaining information about the PostGIS
-   installation.
-
-  See PostGIS docs at Ch. 6.2.1 for more information on these functions.
-"""
-import re
-
-def _get_postgis_func(func):
-    "Helper routine for calling PostGIS functions and returning their result."
-    from django.db import connection
-    cursor = connection.cursor()
-    cursor.execute('SELECT %s()' % func)
-    row = cursor.fetchone()
-    cursor.close()
-    return row[0]
-
-### PostGIS management functions ###
-def postgis_geos_version():
-    "Returns the version of the GEOS library used with PostGIS."
-    return _get_postgis_func('postgis_geos_version')
-
-def postgis_lib_version():
-    "Returns the version number of the PostGIS library used with PostgreSQL."
-    return _get_postgis_func('postgis_lib_version')
-
-def postgis_proj_version():
-    "Returns the version of the PROJ.4 library used with PostGIS."
-    return _get_postgis_func('postgis_proj_version')
-
-def postgis_version():
-    "Returns PostGIS version number and compile-time options."
-    return _get_postgis_func('postgis_version')
-
-def postgis_full_version():
-    "Returns PostGIS version number and compile-time options."
-    return _get_postgis_func('postgis_full_version')
-
-### Routines for parsing output of management functions. ###
-version_regex = re.compile('^(?P<major>\d)\.(?P<minor1>\d)\.(?P<minor2>\d+)')
-def postgis_version_tuple():
-    "Returns the PostGIS version as a tuple."
-
-    # Getting the PostGIS version
-    version = postgis_lib_version()
-    m = version_regex.match(version)
-    if m:
-        major = int(m.group('major'))
-        minor1 = int(m.group('minor1'))
-        minor2 = int(m.group('minor2'))
-    else:
-        raise Exception('Could not parse PostGIS version string: %s' % version)
-
-    return (version, major, minor1, minor2)
--- a/web/lib/django/contrib/gis/db/backend/postgis/models.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-"""
- The GeometryColumns and SpatialRefSys models for the PostGIS backend.
-"""
-from django.db import models
-
-class GeometryColumns(models.Model):
-    """
-    The 'geometry_columns' table from the PostGIS. See the PostGIS
-    documentation at Ch. 4.2.2.
-    """
-    f_table_catalog = models.CharField(max_length=256)
-    f_table_schema = models.CharField(max_length=256)
-    f_table_name = models.CharField(max_length=256)
-    f_geometry_column = models.CharField(max_length=256)
-    coord_dimension = models.IntegerField()
-    srid = models.IntegerField(primary_key=True)
-    type = models.CharField(max_length=30)
-
-    class Meta:
-        app_label = 'gis'
-        db_table = 'geometry_columns'
-        managed = False
-
-    @classmethod
-    def table_name_col(cls):
-        """
-        Returns the name of the metadata column used to store the
-        the feature table name.
-        """
-        return 'f_table_name'
-
-    @classmethod
-    def geom_col_name(cls):
-        """
-        Returns the name of the metadata column used to store the
-        the feature geometry column.
-        """
-        return 'f_geometry_column'
-
-    def __unicode__(self):
-        return "%s.%s - %dD %s field (SRID: %d)" % \
-               (self.f_table_name, self.f_geometry_column,
-                self.coord_dimension, self.type, self.srid)
-
-class SpatialRefSys(models.Model):
-    """
-    The 'spatial_ref_sys' table from PostGIS. See the PostGIS
-    documentaiton at Ch. 4.2.1.
-    """
-    srid = models.IntegerField(primary_key=True)
-    auth_name = models.CharField(max_length=256)
-    auth_srid = models.IntegerField()
-    srtext = models.CharField(max_length=2048)
-    proj4text = models.CharField(max_length=2048)
-
-    class Meta:
-        abstract = True
-        db_table = 'spatial_ref_sys'
-        managed = False
-
-    @property
-    def wkt(self):
-        return self.srtext
-
-    @classmethod
-    def wkt_col(cls):
-        return 'srtext'
--- a/web/lib/django/contrib/gis/db/backend/postgis/query.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,309 +0,0 @@
-"""
- This module contains the spatial lookup types, and the get_geo_where_clause()
- routine for PostGIS.
-"""
-
-import re
-from decimal import Decimal
-from django.db import connection
-from django.conf import settings
-from django.contrib.gis.measure import Distance
-from django.contrib.gis.db.backend.util import SpatialOperation, SpatialFunction
-
-qn = connection.ops.quote_name
-
-# Get the PostGIS version information.
-# To avoid the need to do a database query to determine the PostGIS version
-# each time the server starts up, one can optionally specify a
-# POSTGIS_VERSION setting. This setting is intentionally undocumented and
-# should be considered experimental, because an upcoming GIS backend
-# refactoring might remove the need for it.
-if hasattr(settings, 'POSTGIS_VERSION') and settings.POSTGIS_VERSION is not None:
-    version_tuple = settings.POSTGIS_VERSION
-else:
-    # This import is intentionally within the 'else' so that it isn't executed
-    # if the POSTGIS_VERSION setting is available.
-    from django.contrib.gis.db.backend.postgis.management import postgis_version_tuple
-    version_tuple = postgis_version_tuple()
-POSTGIS_VERSION, MAJOR_VERSION, MINOR_VERSION1, MINOR_VERSION2 = version_tuple
-
-# The supported PostGIS versions.
-#  TODO: Confirm tests with PostGIS versions 1.1.x -- should work.  
-#        Versions <= 1.0.x do not use GEOS C API, and will not be supported.
-if MAJOR_VERSION != 1 or (MAJOR_VERSION == 1 and MINOR_VERSION1 < 1):
-    raise Exception('PostGIS version %s not supported.' % POSTGIS_VERSION)
-
-# Versions of PostGIS >= 1.2.2 changed their naming convention to be
-#  'SQL-MM-centric' to conform with the ISO standard. Practically, this
-#  means that 'ST_' prefixes geometry function names.
-GEOM_FUNC_PREFIX = ''
-if MAJOR_VERSION >= 1:
-    if (MINOR_VERSION1 > 2 or
-        (MINOR_VERSION1 == 2 and MINOR_VERSION2 >= 2)):
-        GEOM_FUNC_PREFIX = 'ST_'
-
-    def get_func(func): return '%s%s' % (GEOM_FUNC_PREFIX, func)
-
-    # Custom selection not needed for PostGIS because GEOS geometries are
-    # instantiated directly from the HEXEWKB returned by default.  If
-    # WKT is needed for some reason in the future, this value may be changed,
-    # e.g,, 'AsText(%s)'.
-    GEOM_SELECT = None
-
-    # Functions used by the GeoManager & GeoQuerySet
-    AREA = get_func('Area')
-    ASGEOJSON = get_func('AsGeoJson')
-    ASKML = get_func('AsKML')
-    ASGML = get_func('AsGML')
-    ASSVG = get_func('AsSVG')
-    CENTROID = get_func('Centroid')
-    COLLECT = get_func('Collect')
-    DIFFERENCE = get_func('Difference')
-    DISTANCE = get_func('Distance')
-    DISTANCE_SPHERE = get_func('distance_sphere')
-    DISTANCE_SPHEROID = get_func('distance_spheroid')
-    ENVELOPE = get_func('Envelope')
-    EXTENT = get_func('extent')
-    GEOM_FROM_TEXT = get_func('GeomFromText')
-    GEOM_FROM_WKB = get_func('GeomFromWKB')
-    INTERSECTION = get_func('Intersection')
-    LENGTH = get_func('Length')
-    LENGTH_SPHEROID = get_func('length_spheroid')
-    MAKE_LINE = get_func('MakeLine')
-    MEM_SIZE = get_func('mem_size')
-    NUM_GEOM = get_func('NumGeometries')
-    NUM_POINTS = get_func('npoints')
-    PERIMETER = get_func('Perimeter')
-    POINT_ON_SURFACE = get_func('PointOnSurface')
-    SCALE = get_func('Scale')
-    SNAP_TO_GRID = get_func('SnapToGrid')
-    SYM_DIFFERENCE = get_func('SymDifference')
-    TRANSFORM = get_func('Transform')
-    TRANSLATE = get_func('Translate')
-
-    # Special cases for union, KML, and GeoJSON methods.
-    if MINOR_VERSION1 < 3:
-        UNIONAGG = 'GeomUnion'
-        UNION = 'Union'
-    else:
-        UNIONAGG = 'ST_Union'
-        UNION = 'ST_Union'
-
-    if MINOR_VERSION1 == 1:
-        ASKML = False
-
-    # Only 1.3.4+ have AsGeoJson.
-    if (MINOR_VERSION1 < 3 or 
-        (MINOR_VERSION1 == 3 and MINOR_VERSION2 < 4)):
-        ASGEOJSON = False
-else:
-    raise NotImplementedError('PostGIS versions < 1.0 are not supported.')
-
-#### Classes used in constructing PostGIS spatial SQL ####
-class PostGISOperator(SpatialOperation):
-    "For PostGIS operators (e.g. `&&`, `~`)."
-    def __init__(self, operator):
-        super(PostGISOperator, self).__init__(operator=operator, beg_subst='%s %s %%s')
-
-class PostGISFunction(SpatialFunction):
-    "For PostGIS function calls (e.g., `ST_Contains(table, geom)`)."
-    def __init__(self, function, **kwargs):
-        super(PostGISFunction, self).__init__(get_func(function), **kwargs)
-
-class PostGISFunctionParam(PostGISFunction):
-    "For PostGIS functions that take another parameter (e.g. DWithin, Relate)."
-    def __init__(self, func):
-        super(PostGISFunctionParam, self).__init__(func, end_subst=', %%s)')
-
-class PostGISDistance(PostGISFunction):
-    "For PostGIS distance operations."
-    dist_func = 'Distance'
-    def __init__(self, operator):
-        super(PostGISDistance, self).__init__(self.dist_func, end_subst=') %s %s', 
-                                              operator=operator, result='%%s')
-
-class PostGISSpheroidDistance(PostGISFunction):
-    "For PostGIS spherical distance operations (using the spheroid)."
-    dist_func = 'distance_spheroid'
-    def __init__(self, operator):
-        # An extra parameter in `end_subst` is needed for the spheroid string.
-        super(PostGISSpheroidDistance, self).__init__(self.dist_func, 
-                                                      beg_subst='%s(%s, %%s, %%s', 
-                                                      end_subst=') %s %s',
-                                                      operator=operator, result='%%s')
-
-class PostGISSphereDistance(PostGISFunction):
-    "For PostGIS spherical distance operations."
-    dist_func = 'distance_sphere'
-    def __init__(self, operator):
-        super(PostGISSphereDistance, self).__init__(self.dist_func, end_subst=') %s %s',
-                                                    operator=operator, result='%%s')
-                                                    
-class PostGISRelate(PostGISFunctionParam):
-    "For PostGIS Relate(<geom>, <pattern>) calls."
-    pattern_regex = re.compile(r'^[012TF\*]{9}$')
-    def __init__(self, pattern):
-        if not self.pattern_regex.match(pattern):
-            raise ValueError('Invalid intersection matrix pattern "%s".' % pattern)
-        super(PostGISRelate, self).__init__('Relate')
-
-#### Lookup type mapping dictionaries of PostGIS operations. ####
-
-# PostGIS-specific operators. The commented descriptions of these
-# operators come from Section 6.2.2 of the official PostGIS documentation.
-POSTGIS_OPERATORS = {
-    # The "&<" operator returns true if A's bounding box overlaps or
-    #  is to the left of B's bounding box.
-    'overlaps_left' : PostGISOperator('&<'),
-    # The "&>" operator returns true if A's bounding box overlaps or
-    #  is to the right of B's bounding box.
-    'overlaps_right' : PostGISOperator('&>'),
-    # The "<<" operator returns true if A's bounding box is strictly
-    #  to the left of B's bounding box.
-    'left' : PostGISOperator('<<'),
-    # The ">>" operator returns true if A's bounding box is strictly
-    #  to the right of B's bounding box.
-    'right' : PostGISOperator('>>'),
-    # The "&<|" operator returns true if A's bounding box overlaps or
-    #  is below B's bounding box.
-    'overlaps_below' : PostGISOperator('&<|'),
-    # The "|&>" operator returns true if A's bounding box overlaps or
-    #  is above B's bounding box.
-    'overlaps_above' : PostGISOperator('|&>'),
-    # The "<<|" operator returns true if A's bounding box is strictly
-    #  below B's bounding box.
-    'strictly_below' : PostGISOperator('<<|'),
-    # The "|>>" operator returns true if A's bounding box is strictly
-    # above B's bounding box.
-    'strictly_above' : PostGISOperator('|>>'),
-    # The "~=" operator is the "same as" operator. It tests actual
-    #  geometric equality of two features. So if A and B are the same feature,
-    #  vertex-by-vertex, the operator returns true.
-    'same_as' : PostGISOperator('~='),
-    'exact' : PostGISOperator('~='),
-    # The "@" operator returns true if A's bounding box is completely contained
-    #  by B's bounding box.
-    'contained' : PostGISOperator('@'),
-    # The "~" operator returns true if A's bounding box completely contains
-    #  by B's bounding box.
-    'bbcontains' : PostGISOperator('~'),
-    # The "&&" operator returns true if A's bounding box overlaps
-    #  B's bounding box.
-    'bboverlaps' : PostGISOperator('&&'),
-    }
-
-# For PostGIS >= 1.2.2 the following lookup types will do a bounding box query
-# first before calling the more computationally expensive GEOS routines (called
-# "inline index magic"):
-# 'touches', 'crosses', 'contains', 'intersects', 'within', 'overlaps', and
-# 'covers'.
-POSTGIS_GEOMETRY_FUNCTIONS = {
-    'equals' : PostGISFunction('Equals'),
-    'disjoint' : PostGISFunction('Disjoint'),
-    'touches' : PostGISFunction('Touches'),
-    'crosses' : PostGISFunction('Crosses'),
-    'within' : PostGISFunction('Within'),
-    'overlaps' : PostGISFunction('Overlaps'),
-    'contains' : PostGISFunction('Contains'),
-    'intersects' : PostGISFunction('Intersects'),
-    'relate' : (PostGISRelate, basestring),
-    }
-
-# Valid distance types and substitutions
-dtypes = (Decimal, Distance, float, int, long)
-def get_dist_ops(operator):
-    "Returns operations for both regular and spherical distances."
-    return (PostGISDistance(operator), PostGISSphereDistance(operator), PostGISSpheroidDistance(operator))
-DISTANCE_FUNCTIONS = {
-    'distance_gt' : (get_dist_ops('>'), dtypes),
-    'distance_gte' : (get_dist_ops('>='), dtypes),
-    'distance_lt' : (get_dist_ops('<'), dtypes),
-    'distance_lte' : (get_dist_ops('<='), dtypes),
-    }
-
-if GEOM_FUNC_PREFIX == 'ST_':
-    # The ST_DWithin, ST_CoveredBy, and ST_Covers routines become available in 1.2.2+
-    POSTGIS_GEOMETRY_FUNCTIONS.update(
-        {'coveredby' : PostGISFunction('CoveredBy'),
-         'covers' : PostGISFunction('Covers'),
-         })
-    DISTANCE_FUNCTIONS['dwithin'] = (PostGISFunctionParam('DWithin'), dtypes)
-
-# Distance functions are a part of PostGIS geometry functions.
-POSTGIS_GEOMETRY_FUNCTIONS.update(DISTANCE_FUNCTIONS)
-
-# Any other lookup types that do not require a mapping.
-MISC_TERMS = ['isnull']
-
-# These are the PostGIS-customized QUERY_TERMS -- a list of the lookup types
-#  allowed for geographic queries.
-POSTGIS_TERMS = POSTGIS_OPERATORS.keys() # Getting the operators first
-POSTGIS_TERMS += POSTGIS_GEOMETRY_FUNCTIONS.keys() # Adding on the Geometry Functions
-POSTGIS_TERMS += MISC_TERMS # Adding any other miscellaneous terms (e.g., 'isnull')
-POSTGIS_TERMS = dict((term, None) for term in POSTGIS_TERMS) # Making a dictionary for fast lookups
-
-# For checking tuple parameters -- not very pretty but gets job done.
-def exactly_two(val): return val == 2
-def two_to_three(val): return val >= 2 and val <=3
-def num_params(lookup_type, val):
-    if lookup_type in DISTANCE_FUNCTIONS and lookup_type != 'dwithin': return two_to_three(val)
-    else: return exactly_two(val)
-
-#### The `get_geo_where_clause` function for PostGIS. ####
-def get_geo_where_clause(table_alias, name, lookup_type, geo_annot):
-    "Returns the SQL WHERE clause for use in PostGIS SQL construction."
-    # Getting the quoted field as `geo_col`.
-    geo_col = '%s.%s' % (qn(table_alias), qn(name))
-    if lookup_type in POSTGIS_OPERATORS:
-        # See if a PostGIS operator matches the lookup type.
-        return POSTGIS_OPERATORS[lookup_type].as_sql(geo_col)
-    elif lookup_type in POSTGIS_GEOMETRY_FUNCTIONS:
-        # See if a PostGIS geometry function matches the lookup type.
-        tmp = POSTGIS_GEOMETRY_FUNCTIONS[lookup_type]
-
-        # Lookup types that are tuples take tuple arguments, e.g., 'relate' and 
-        # distance lookups.
-        if isinstance(tmp, tuple):
-            # First element of tuple is the PostGISOperation instance, and the
-            # second element is either the type or a tuple of acceptable types
-            # that may passed in as further parameters for the lookup type.
-            op, arg_type = tmp
-
-            # Ensuring that a tuple _value_ was passed in from the user
-            if not isinstance(geo_annot.value, (tuple, list)): 
-                raise TypeError('Tuple required for `%s` lookup type.' % lookup_type)
-           
-            # Number of valid tuple parameters depends on the lookup type.
-            nparams = len(geo_annot.value)
-            if not num_params(lookup_type, nparams):
-                raise ValueError('Incorrect number of parameters given for `%s` lookup type.' % lookup_type)
-            
-            # Ensuring the argument type matches what we expect.
-            if not isinstance(geo_annot.value[1], arg_type):
-                raise TypeError('Argument type should be %s, got %s instead.' % (arg_type, type(geo_annot.value[1])))
-
-            # For lookup type `relate`, the op instance is not yet created (has
-            # to be instantiated here to check the pattern parameter).
-            if lookup_type == 'relate': 
-                op = op(geo_annot.value[1])
-            elif lookup_type in DISTANCE_FUNCTIONS and lookup_type != 'dwithin':
-                if geo_annot.geodetic:
-                    # Geodetic distances are only availble from Points to PointFields.
-                    if geo_annot.geom_type != 'POINT':
-                        raise TypeError('PostGIS spherical operations are only valid on PointFields.')
-                    if geo_annot.value[0].geom_typeid != 0:
-                        raise TypeError('PostGIS geometry distance parameter is required to be of type Point.')
-                    # Setting up the geodetic operation appropriately.
-                    if nparams == 3 and geo_annot.value[2] == 'spheroid': op = op[2]
-                    else: op = op[1]
-                else:
-                    op = op[0]
-        else:
-            op = tmp
-        # Calling the `as_sql` function on the operation instance.
-        return op.as_sql(geo_col)
-    elif lookup_type == 'isnull':
-        # Handling 'isnull' lookup type
-        return "%s IS %sNULL" % (geo_col, (not geo_annot.value and 'NOT ' or ''))
-
-    raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
--- a/web/lib/django/contrib/gis/db/backend/spatialite/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-__all__ = ['create_test_spatial_db', 'get_geo_where_clause', 'SpatialBackend']
-
-from ctypes.util import find_library
-from django.conf import settings
-from django.db.backends.signals import connection_created
-
-from django.contrib.gis.db.backend.base import BaseSpatialBackend
-from django.contrib.gis.db.backend.spatialite.adaptor import SpatiaLiteAdaptor
-from django.contrib.gis.db.backend.spatialite.creation import create_test_spatial_db
-from django.contrib.gis.db.backend.spatialite.field import SpatiaLiteField
-from django.contrib.gis.db.backend.spatialite.models import GeometryColumns, SpatialRefSys
-from django.contrib.gis.db.backend.spatialite.query import *
-
-# Here we are figuring out the path to the SpatiLite library (`libspatialite`).
-# If it's not in the system PATH, it may be set manually in the settings via
-# the `SPATIALITE_LIBRARY_PATH` setting.
-spatialite_lib = getattr(settings, 'SPATIALITE_LIBRARY_PATH', find_library('spatialite'))
-if spatialite_lib:
-    def initialize_spatialite(sender=None, **kwargs):
-        """
-        This function initializes the pysqlite2 connection to enable the
-        loading of extensions, and to load up the SpatiaLite library
-        extension.
-        """
-        from django.db import connection
-        connection.connection.enable_load_extension(True)
-        connection.cursor().execute("SELECT load_extension(%s)", (spatialite_lib,))
-    connection_created.connect(initialize_spatialite)
-else:
-    # No SpatiaLite library found.
-    raise Exception('Unable to locate SpatiaLite, needed to use GeoDjango with sqlite3.')
-
-SpatialBackend = BaseSpatialBackend(name='spatialite', spatialite=True,
-                                    area=AREA,
-                                    centroid=CENTROID,
-                                    contained=CONTAINED,
-                                    difference=DIFFERENCE,
-                                    distance=DISTANCE,
-                                    distance_functions=DISTANCE_FUNCTIONS,
-                                    envelope=ENVELOPE,
-                                    from_text=GEOM_FROM_TEXT,
-                                    gis_terms=SPATIALITE_TERMS,
-                                    intersection=INTERSECTION,
-                                    length=LENGTH,
-                                    num_geom=NUM_GEOM,
-                                    num_points=NUM_POINTS,
-                                    point_on_surface=POINT_ON_SURFACE,
-                                    scale=SCALE,
-                                    select=GEOM_SELECT,
-                                    svg=ASSVG,
-                                    sym_difference=SYM_DIFFERENCE,
-                                    transform=TRANSFORM,
-                                    translate=TRANSLATE,
-                                    union=UNION,
-                                    unionagg=UNIONAGG,
-                                    Adaptor=SpatiaLiteAdaptor,
-                                    Field=SpatiaLiteField,
-                                    GeometryColumns=GeometryColumns,
-                                    SpatialRefSys=SpatialRefSys,
-                                    )
--- a/web/lib/django/contrib/gis/db/backend/spatialite/adaptor.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-from django.db.backends.sqlite3.base import Database
-from django.contrib.gis.db.backend.adaptor import WKTAdaptor
-
-class SpatiaLiteAdaptor(WKTAdaptor):
-    "SQLite adaptor for geometry objects."
-    def __conform__(self, protocol):
-        if protocol is Database.PrepareProtocol:
-            return str(self)
--- a/web/lib/django/contrib/gis/db/backend/spatialite/creation.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-import os
-from django.conf import settings
-from django.core.management import call_command
-from django.db import connection
-
-def spatialite_init_file():
-    # SPATIALITE_SQL may be placed in settings to tell
-    # GeoDjango to use a specific user-supplied file.
-    return getattr(settings, 'SPATIALITE_SQL', 'init_spatialite-2.3.sql')
-
-def create_test_spatial_db(verbosity=1, autoclobber=False, interactive=False):
-    "Creates a spatial database based on the settings."
-
-    # Making sure we're using PostgreSQL and psycopg2
-    if settings.DATABASE_ENGINE != 'sqlite3':
-        raise Exception('SpatiaLite database creation only supported on sqlite3 platform.')
-
-    # Getting the test database name using the SQLite backend's
-    # `_create_test_db`.  Unless `TEST_DATABASE_NAME` is defined,
-    # it returns ":memory:".
-    db_name = connection.creation._create_test_db(verbosity, autoclobber)
-
-    # Closing out the current connection to the database set in
-    # originally in the settings.  This makes it so `initialize_spatialite`
-    # function will be run on the connection for the _test_ database instead.
-    connection.close()
-
-    # Point to the new database
-    settings.DATABASE_NAME = db_name
-    connection.settings_dict["DATABASE_NAME"] = db_name
-    can_rollback = connection.creation._rollback_works()
-    settings.DATABASE_SUPPORTS_TRANSACTIONS = can_rollback
-    connection.settings_dict["DATABASE_SUPPORTS_TRANSACTIONS"] = can_rollback
-
-    # Finally, loading up the SpatiaLite SQL file.
-    load_spatialite_sql(db_name, verbosity=verbosity)
-
-    if verbosity >= 1:
-        print 'Creation of spatial database %s successful.' % db_name
-
-    # Syncing the database
-    call_command('syncdb', verbosity=verbosity, interactive=interactive)
-
-def load_spatialite_sql(db_name, verbosity=1):
-    """
-    This routine loads up the SpatiaLite SQL file.
-    """
-    # Getting the location of the SpatiaLite SQL file, and confirming
-    # it exists.
-    spatialite_sql = spatialite_init_file()
-    if not os.path.isfile(spatialite_sql):
-        raise Exception('Could not find the SpatiaLite initialization SQL file: %s' % spatialite_sql)
-
-    # Opening up the SpatiaLite SQL initialization file and executing
-    # as a script.
-    sql_fh = open(spatialite_sql, 'r')
-    try:
-        cur = connection.cursor()
-        cur.executescript(sql_fh.read())
-    finally:
-        sql_fh.close()
--- a/web/lib/django/contrib/gis/db/backend/spatialite/field.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-from django.db.models.fields import Field # Django base Field class
-
-# Quotename & geographic quotename, respectively
-from django.db import connection
-qn = connection.ops.quote_name
-from django.contrib.gis.db.backend.util import gqn
-from django.contrib.gis.db.backend.spatialite.query import GEOM_FROM_TEXT, TRANSFORM
-
-class SpatiaLiteField(Field):
-    """
-    The backend-specific geographic field for SpatiaLite.
-    """
-
-    def _add_geom(self, style, db_table):
-        """
-        Constructs the addition of the geometry to the table using the
-        AddGeometryColumn(...) OpenGIS stored procedure.
-
-        Takes the style object (provides syntax highlighting) and the
-        database table as parameters.
-        """
-        sql = (style.SQL_KEYWORD('SELECT ') +
-               style.SQL_TABLE('AddGeometryColumn') + '(' +
-               style.SQL_TABLE(gqn(db_table)) + ', ' +
-               style.SQL_FIELD(gqn(self.column)) + ', ' +
-               style.SQL_FIELD(str(self.srid)) + ', ' +
-               style.SQL_COLTYPE(gqn(self.geom_type)) + ', ' +
-               style.SQL_KEYWORD(str(self.dim)) + ', ' +
-               style.SQL_KEYWORD(str(int(not self.null))) +
-               ');')
-        return sql
-
-    def _geom_index(self, style, db_table):
-        "Creates a spatial index for this geometry field."
-        sql = (style.SQL_KEYWORD('SELECT ') +
-              style.SQL_TABLE('CreateSpatialIndex') + '(' +
-              style.SQL_TABLE(gqn(db_table)) + ', ' +
-              style.SQL_FIELD(gqn(self.column)) + ');')
-        return sql
-
-    def post_create_sql(self, style, db_table):
-        """
-        Returns SQL that will be executed after the model has been
-        created. Geometry columns must be added after creation with the
-        OpenGIS AddGeometryColumn() function.
-        """
-        # Getting the AddGeometryColumn() SQL necessary to create a OpenGIS
-        # geometry field.
-        post_sql = self._add_geom(style, db_table)
-
-        # If the user wants to index this data, then get the indexing SQL as well.
-        if self.spatial_index:
-            return (post_sql, self._geom_index(style, db_table))
-        else:
-            return (post_sql,)
-
-    def _post_delete_sql(self, style, db_table):
-        "Drops the geometry column."
-        sql = (style.SQL_KEYWORD('SELECT ') +
-               style.SQL_KEYWORD('DropGeometryColumn') + '(' +
-               style.SQL_TABLE(gqn(db_table)) + ', ' +
-               style.SQL_FIELD(gqn(self.column)) +  ');')
-        return sql
-
-    def db_type(self):
-        """
-        SpatiaLite geometry columns are added by stored procedures;
-        should be None.
-        """
-        return None
-
-    def get_placeholder(self, value):
-        """
-        Provides a proper substitution value for Geometries that are not in the
-        SRID of the field.  Specifically, this routine will substitute in the
-        Transform() and GeomFromText() function call(s).
-        """
-        if value is None or value.srid == self.srid:
-            return '%s(%%s,%s)' % (GEOM_FROM_TEXT, self.srid)
-        else:
-            # Adding Transform() to the SQL placeholder.
-            return '%s(%s(%%s,%s), %s)' % (TRANSFORM, GEOM_FROM_TEXT, value.srid, self.srid)
--- a/web/lib/django/contrib/gis/db/backend/spatialite/models.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-"""
- The GeometryColumns and SpatialRefSys models for the SpatiaLite backend.
-"""
-from django.db import models
-
-class GeometryColumns(models.Model):
-    """
-    The 'geometry_columns' table from SpatiaLite.
-    """
-    f_table_name = models.CharField(max_length=256)
-    f_geometry_column = models.CharField(max_length=256)
-    type = models.CharField(max_length=30)
-    coord_dimension = models.IntegerField()
-    srid = models.IntegerField(primary_key=True)
-    spatial_index_enabled = models.IntegerField()
-
-    class Meta:
-        app_label = 'gis'
-        db_table = 'geometry_columns'
-        managed = False
-
-    @classmethod
-    def table_name_col(cls):
-        """
-        Returns the name of the metadata column used to store the
-        the feature table name.
-        """
-        return 'f_table_name'
-
-    @classmethod
-    def geom_col_name(cls):
-        """
-        Returns the name of the metadata column used to store the
-        the feature geometry column.
-        """
-        return 'f_geometry_column'
-
-    def __unicode__(self):
-        return "%s.%s - %dD %s field (SRID: %d)" % \
-               (self.f_table_name, self.f_geometry_column,
-                self.coord_dimension, self.type, self.srid)
-
-class SpatialRefSys(models.Model):
-    """
-    The 'spatial_ref_sys' table from SpatiaLite.
-    """
-    srid = models.IntegerField(primary_key=True)
-    auth_name = models.CharField(max_length=256)
-    auth_srid = models.IntegerField()
-    ref_sys_name = models.CharField(max_length=256)
-    proj4text = models.CharField(max_length=2048)
-
-    @property
-    def wkt(self):
-        from django.contrib.gis.gdal import SpatialReference
-        return SpatialReference(self.proj4text).wkt
-    
-    class Meta:
-        abstract = True
-        db_table = 'spatial_ref_sys'
-        managed = False
--- a/web/lib/django/contrib/gis/db/backend/spatialite/query.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,160 +0,0 @@
-"""
- This module contains the spatial lookup types, and the get_geo_where_clause()
- routine for SpatiaLite.
-"""
-import re
-from decimal import Decimal
-from django.db import connection
-from django.contrib.gis.measure import Distance
-from django.contrib.gis.db.backend.util import SpatialOperation, SpatialFunction
-qn = connection.ops.quote_name
-
-GEOM_SELECT = 'AsText(%s)'
-
-# Dummy func, in case we need it later:
-def get_func(str):
-    return str
-
-# Functions used by the GeoManager & GeoQuerySet
-AREA = get_func('Area')
-ASSVG = get_func('AsSVG')
-CENTROID = get_func('Centroid')
-CONTAINED = get_func('MbrWithin')
-DIFFERENCE = get_func('Difference')
-DISTANCE = get_func('Distance')
-ENVELOPE = get_func('Envelope')
-GEOM_FROM_TEXT = get_func('GeomFromText')
-GEOM_FROM_WKB = get_func('GeomFromWKB')
-INTERSECTION = get_func('Intersection')
-LENGTH = get_func('GLength') # OpenGis defines Length, but this conflicts with an SQLite reserved keyword
-NUM_GEOM = get_func('NumGeometries')
-NUM_POINTS = get_func('NumPoints')
-POINT_ON_SURFACE = get_func('PointOnSurface')
-SCALE = get_func('ScaleCoords')
-SYM_DIFFERENCE = get_func('SymDifference')
-TRANSFORM = get_func('Transform')
-TRANSLATE = get_func('ShiftCoords')
-UNION = 'GUnion'# OpenGis defines Union, but this conflicts with an SQLite reserved keyword
-UNIONAGG = 'GUnion'
-
-#### Classes used in constructing SpatiaLite spatial SQL ####
-class SpatiaLiteOperator(SpatialOperation):
-    "For SpatiaLite operators (e.g. `&&`, `~`)."
-    def __init__(self, operator):
-        super(SpatiaLiteOperator, self).__init__(operator=operator, beg_subst='%s %s %%s')
-
-class SpatiaLiteFunction(SpatialFunction):
-    "For SpatiaLite function calls."
-    def __init__(self, function, **kwargs):
-        super(SpatiaLiteFunction, self).__init__(get_func(function), **kwargs)
-
-class SpatiaLiteFunctionParam(SpatiaLiteFunction):
-    "For SpatiaLite functions that take another parameter."
-    def __init__(self, func):
-        super(SpatiaLiteFunctionParam, self).__init__(func, end_subst=', %%s)')
-
-class SpatiaLiteDistance(SpatiaLiteFunction):
-    "For SpatiaLite distance operations."
-    dist_func = 'Distance'
-    def __init__(self, operator):
-        super(SpatiaLiteDistance, self).__init__(self.dist_func, end_subst=') %s %s', 
-                                              operator=operator, result='%%s')
-                                                    
-class SpatiaLiteRelate(SpatiaLiteFunctionParam):
-    "For SpatiaLite Relate(<geom>, <pattern>) calls."
-    pattern_regex = re.compile(r'^[012TF\*]{9}$')
-    def __init__(self, pattern):
-        if not self.pattern_regex.match(pattern):
-            raise ValueError('Invalid intersection matrix pattern "%s".' % pattern)
-        super(SpatiaLiteRelate, self).__init__('Relate')
-
-
-SPATIALITE_GEOMETRY_FUNCTIONS = {
-    'equals' : SpatiaLiteFunction('Equals'),
-    'disjoint' : SpatiaLiteFunction('Disjoint'),
-    'touches' : SpatiaLiteFunction('Touches'),
-    'crosses' : SpatiaLiteFunction('Crosses'),
-    'within' : SpatiaLiteFunction('Within'),
-    'overlaps' : SpatiaLiteFunction('Overlaps'),
-    'contains' : SpatiaLiteFunction('Contains'),
-    'intersects' : SpatiaLiteFunction('Intersects'),
-    'relate' : (SpatiaLiteRelate, basestring),
-    # Retruns true if B's bounding box completely contains A's bounding box.
-    'contained' : SpatiaLiteFunction('MbrWithin'),
-    # Returns true if A's bounding box completely contains B's bounding box.
-    'bbcontains' : SpatiaLiteFunction('MbrContains'),
-    # Returns true if A's bounding box overlaps B's bounding box.
-    'bboverlaps' : SpatiaLiteFunction('MbrOverlaps'),
-    # These are implemented here as synonyms for Equals
-    'same_as' : SpatiaLiteFunction('Equals'),
-    'exact' : SpatiaLiteFunction('Equals'),
-    }
-
-# Valid distance types and substitutions
-dtypes = (Decimal, Distance, float, int, long)
-def get_dist_ops(operator):
-    "Returns operations for regular distances; spherical distances are not currently supported."
-    return (SpatiaLiteDistance(operator),)
-DISTANCE_FUNCTIONS = {
-    'distance_gt' : (get_dist_ops('>'), dtypes),
-    'distance_gte' : (get_dist_ops('>='), dtypes),
-    'distance_lt' : (get_dist_ops('<'), dtypes),
-    'distance_lte' : (get_dist_ops('<='), dtypes),
-    }
-
-# Distance functions are a part of SpatiaLite geometry functions.
-SPATIALITE_GEOMETRY_FUNCTIONS.update(DISTANCE_FUNCTIONS)
-
-# Any other lookup types that do not require a mapping.
-MISC_TERMS = ['isnull']
-
-# These are the SpatiaLite-customized QUERY_TERMS -- a list of the lookup types
-# allowed for geographic queries.
-SPATIALITE_TERMS = SPATIALITE_GEOMETRY_FUNCTIONS.keys() # Getting the Geometry Functions
-SPATIALITE_TERMS += MISC_TERMS # Adding any other miscellaneous terms (e.g., 'isnull')
-SPATIALITE_TERMS = dict((term, None) for term in SPATIALITE_TERMS) # Making a dictionary for fast lookups
-
-#### The `get_geo_where_clause` function for SpatiaLite. ####
-def get_geo_where_clause(table_alias, name, lookup_type, geo_annot):
-    "Returns the SQL WHERE clause for use in SpatiaLite SQL construction."
-    # Getting the quoted field as `geo_col`.
-    geo_col = '%s.%s' % (qn(table_alias), qn(name))
-    if lookup_type in SPATIALITE_GEOMETRY_FUNCTIONS:
-        # See if a SpatiaLite geometry function matches the lookup type.
-        tmp = SPATIALITE_GEOMETRY_FUNCTIONS[lookup_type]
-
-        # Lookup types that are tuples take tuple arguments, e.g., 'relate' and 
-        # distance lookups.
-        if isinstance(tmp, tuple):
-            # First element of tuple is the SpatiaLiteOperation instance, and the
-            # second element is either the type or a tuple of acceptable types
-            # that may passed in as further parameters for the lookup type.
-            op, arg_type = tmp
-
-            # Ensuring that a tuple _value_ was passed in from the user
-            if not isinstance(geo_annot.value, (tuple, list)): 
-                raise TypeError('Tuple required for `%s` lookup type.' % lookup_type)
-           
-            # Number of valid tuple parameters depends on the lookup type.
-            if len(geo_annot.value) != 2:
-                raise ValueError('Incorrect number of parameters given for `%s` lookup type.' % lookup_type)
-            
-            # Ensuring the argument type matches what we expect.
-            if not isinstance(geo_annot.value[1], arg_type):
-                raise TypeError('Argument type should be %s, got %s instead.' % (arg_type, type(geo_annot.value[1])))
-
-            # For lookup type `relate`, the op instance is not yet created (has
-            # to be instantiated here to check the pattern parameter).
-            if lookup_type == 'relate': 
-                op = op(geo_annot.value[1])
-            elif lookup_type in DISTANCE_FUNCTIONS:
-                op = op[0]
-        else:
-            op = tmp
-        # Calling the `as_sql` function on the operation instance.
-        return op.as_sql(geo_col)
-    elif lookup_type == 'isnull':
-        # Handling 'isnull' lookup type
-        return "%s IS %sNULL" % (geo_col, (not geo_annot.value and 'NOT ' or ''))
-
-    raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
--- a/web/lib/django/contrib/gis/db/backend/util.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-"""
-A collection of utility routines and classes used by the spatial
-backends.
-"""
-
-def getstatusoutput(cmd):
-    """
-    Executes a shell command on the platform using subprocess.Popen and
-    return a tuple of the status and stdout output.
-    """
-    from subprocess import Popen, PIPE
-    # Set stdout and stderr to PIPE because we want to capture stdout and
-    # prevent stderr from displaying.
-    p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
-    # We use p.communicate() instead of p.wait() to avoid deadlocks if the
-    # output buffers exceed POSIX buffer size.
-    stdout, stderr = p.communicate()
-    return p.returncode, stdout.strip()
-
-def gqn(val):
-    """
-    The geographic quote name function; used for quoting tables and 
-    geometries (they use single rather than the double quotes of the
-    backend quotename function).
-    """
-    if isinstance(val, basestring):
-        if isinstance(val, unicode): val = val.encode('ascii')
-        return "'%s'" % val
-    else:
-        return str(val)
-
-class SpatialOperation(object):
-    """
-    Base class for generating spatial SQL.
-    """
-    def __init__(self, function='', operator='', result='', beg_subst='', end_subst=''):
-        self.function = function
-        self.operator = operator
-        self.result = result
-        self.beg_subst = beg_subst
-        try:
-            # Try and put the operator and result into to the
-            # end substitution.
-            self.end_subst = end_subst % (operator, result)
-        except TypeError:
-            self.end_subst = end_subst
-
-    @property
-    def sql_subst(self):
-        return ''.join([self.beg_subst, self.end_subst])
-
-    def as_sql(self, geo_col):
-        return self.sql_subst % self.params(geo_col)
-
-    def params(self, geo_col):
-        return (geo_col, self.operator)
-
-class SpatialFunction(SpatialOperation):
-    """
-    Base class for generating spatial SQL related to a function.
-    """
-    def __init__(self, func, beg_subst='%s(%s, %%s', end_subst=')', result='', operator=''):
-        # Getting the function prefix.
-        kwargs = {'function' : func, 'operator' : operator, 'result' : result,
-                  'beg_subst' : beg_subst, 'end_subst' : end_subst,}
-        super(SpatialFunction, self).__init__(**kwargs)
-
-    def params(self, geo_col):
-        return (self.function, geo_col)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/adapter.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,17 @@
+class WKTAdapter(object):
+    """
+    This provides an adaptor for Geometries sent to the
+    MySQL and Oracle database backends.
+    """
+    def __init__(self, geom):
+        self.wkt = geom.wkt
+        self.srid = geom.srid
+
+    def __eq__(self, other):
+        return self.wkt == other.wkt and self.srid == other.srid
+
+    def __str__(self):
+        return self.wkt
+
+    def prepare_database_save(self, unused):
+        return self
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/base.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,336 @@
+"""
+Base/mixin classes for the spatial backend database operations and the
+`SpatialRefSys` model the backend.
+"""
+import re
+from django.conf import settings
+from django.contrib.gis import gdal
+
+class BaseSpatialOperations(object):
+    """
+    This module holds the base `BaseSpatialBackend` object, which is
+    instantiated by each spatial database backend with the features
+    it has.
+    """
+    distance_functions = {}
+    geometry_functions = {}
+    geometry_operators = {}
+    geography_operators = {}
+    geography_functions = {}
+    gis_terms = {}
+    truncate_params = {}
+
+    # Quick booleans for the type of this spatial backend, and
+    # an attribute for the spatial database version tuple (if applicable)
+    postgis = False
+    spatialite = False
+    mysql = False
+    oracle = False
+    spatial_version = None
+
+    # How the geometry column should be selected.
+    select = None
+
+    # Does the spatial database have a geography type?
+    geography = False
+
+    area = False
+    centroid = False
+    difference = False
+    distance = False
+    distance_sphere = False
+    distance_spheroid = False
+    envelope = False
+    force_rhr = False
+    mem_size = False
+    bounding_circle = False
+    num_geom = False
+    num_points = False
+    perimeter = False
+    perimeter3d = False
+    point_on_surface = False
+    polygonize = False
+    reverse = False
+    scale = False
+    snap_to_grid = False
+    sym_difference = False
+    transform = False
+    translate = False
+    union = False
+
+    # Aggregates
+    collect = False
+    extent = False
+    extent3d = False
+    make_line = False
+    unionagg = False
+
+    # Serialization
+    geohash = False
+    geojson = False
+    gml = False
+    kml = False
+    svg = False
+
+    # Constructors
+    from_text = False
+    from_wkb = False
+
+    # Default conversion functions for aggregates; will be overridden if implemented
+    # for the spatial backend.
+    def convert_extent(self, box):
+        raise NotImplementedError('Aggregate extent not implemented for this spatial backend.')
+
+    def convert_extent3d(self, box):
+        raise NotImplementedError('Aggregate 3D extent not implemented for this spatial backend.')
+
+    def convert_geom(self, geom_val, geom_field):
+        raise NotImplementedError('Aggregate method not implemented for this spatial backend.')
+
+    # For quoting column values, rather than columns.
+    def geo_quote_name(self, name):
+        if isinstance(name, unicode):
+            name = name.encode('ascii')
+        return "'%s'" % name
+
+    # GeometryField operations
+    def geo_db_type(self, f):
+        """
+        Returns the database column type for the geometry field on
+        the spatial backend.
+        """
+        raise NotImplementedError
+
+    def get_distance(self, f, value, lookup_type):
+        """
+        Returns the distance parameters for the given geometry field,
+        lookup value, and lookup type.
+        """
+        raise NotImplementedError('Distance operations not available on this spatial backend.')
+
+    def get_geom_placeholder(self, f, value):
+        """
+        Returns the placeholder for the given geometry field with the given
+        value.  Depending on the spatial backend, the placeholder may contain a
+        stored procedure call to the transformation function of the spatial
+        backend.
+        """
+        raise NotImplementedError
+
+    # Spatial SQL Construction
+    def spatial_aggregate_sql(self, agg):
+        raise NotImplementedError('Aggregate support not implemented for this spatial backend.')
+
+    def spatial_lookup_sql(self, lvalue, lookup_type, value, field):
+        raise NotImplmentedError
+
+    # Routines for getting the OGC-compliant models.
+    def geometry_columns(self):
+        raise NotImplementedError
+
+    def spatial_ref_sys(self):
+        raise NotImplementedError
+
+class SpatialRefSysMixin(object):
+    """
+    The SpatialRefSysMixin is a class used by the database-dependent
+    SpatialRefSys objects to reduce redundnant code.
+    """
+    # For pulling out the spheroid from the spatial reference string. This
+    # regular expression is used only if the user does not have GDAL installed.
+    # TODO: Flattening not used in all ellipsoids, could also be a minor axis,
+    # or 'b' parameter.
+    spheroid_regex = re.compile(r'.+SPHEROID\[\"(?P<name>.+)\",(?P<major>\d+(\.\d+)?),(?P<flattening>\d{3}\.\d+),')
+
+    # For pulling out the units on platforms w/o GDAL installed.
+    # TODO: Figure out how to pull out angular units of projected coordinate system and
+    # fix for LOCAL_CS types.  GDAL should be highly recommended for performing
+    # distance queries.
+    units_regex = re.compile(r'.+UNIT ?\["(?P<unit_name>[\w \'\(\)]+)", ?(?P<unit>[\d\.]+)(,AUTHORITY\["(?P<unit_auth_name>[\w \'\(\)]+)","(?P<unit_auth_val>\d+)"\])?\]([\w ]+)?(,AUTHORITY\["(?P<auth_name>[\w \'\(\)]+)","(?P<auth_val>\d+)"\])?\]$')
+
+    @property
+    def srs(self):
+        """
+        Returns a GDAL SpatialReference object, if GDAL is installed.
+        """
+        if gdal.HAS_GDAL:
+            # TODO: Is caching really necessary here?  Is complexity worth it?
+            if hasattr(self, '_srs'):
+                # Returning a clone of the cached SpatialReference object.
+                return self._srs.clone()
+            else:
+                # Attempting to cache a SpatialReference object.
+
+                # Trying to get from WKT first.
+                try:
+                    self._srs = gdal.SpatialReference(self.wkt)
+                    return self.srs
+                except Exception, msg:
+                    pass
+
+                try:
+                    self._srs = gdal.SpatialReference(self.proj4text)
+                    return self.srs
+                except Exception, msg:
+                    pass
+
+                raise Exception('Could not get OSR SpatialReference from WKT: %s\nError:\n%s' % (self.wkt, msg))
+        else:
+            raise Exception('GDAL is not installed.')
+
+    @property
+    def ellipsoid(self):
+        """
+        Returns a tuple of the ellipsoid parameters:
+        (semimajor axis, semiminor axis, and inverse flattening).
+        """
+        if gdal.HAS_GDAL:
+            return self.srs.ellipsoid
+        else:
+            m = self.spheroid_regex.match(self.wkt)
+            if m: return (float(m.group('major')), float(m.group('flattening')))
+            else: return None
+
+    @property
+    def name(self):
+        "Returns the projection name."
+        return self.srs.name
+
+    @property
+    def spheroid(self):
+        "Returns the spheroid name for this spatial reference."
+        return self.srs['spheroid']
+
+    @property
+    def datum(self):
+        "Returns the datum for this spatial reference."
+        return self.srs['datum']
+
+    @property
+    def projected(self):
+        "Is this Spatial Reference projected?"
+        if gdal.HAS_GDAL:
+            return self.srs.projected
+        else:
+            return self.wkt.startswith('PROJCS')
+
+    @property
+    def local(self):
+        "Is this Spatial Reference local?"
+        if gdal.HAS_GDAL:
+            return self.srs.local
+        else:
+            return self.wkt.startswith('LOCAL_CS')
+
+    @property
+    def geographic(self):
+        "Is this Spatial Reference geographic?"
+        if gdal.HAS_GDAL:
+            return self.srs.geographic
+        else:
+            return self.wkt.startswith('GEOGCS')
+
+    @property
+    def linear_name(self):
+        "Returns the linear units name."
+        if gdal.HAS_GDAL:
+            return self.srs.linear_name
+        elif self.geographic:
+            return None
+        else:
+            m = self.units_regex.match(self.wkt)
+            return m.group('unit_name')
+
+    @property
+    def linear_units(self):
+        "Returns the linear units."
+        if gdal.HAS_GDAL:
+            return self.srs.linear_units
+        elif self.geographic:
+            return None
+        else:
+            m = self.units_regex.match(self.wkt)
+            return m.group('unit')
+
+    @property
+    def angular_name(self):
+        "Returns the name of the angular units."
+        if gdal.HAS_GDAL:
+            return self.srs.angular_name
+        elif self.projected:
+            return None
+        else:
+            m = self.units_regex.match(self.wkt)
+            return m.group('unit_name')
+
+    @property
+    def angular_units(self):
+        "Returns the angular units."
+        if gdal.HAS_GDAL:
+            return self.srs.angular_units
+        elif self.projected:
+            return None
+        else:
+            m = self.units_regex.match(self.wkt)
+            return m.group('unit')
+
+    @property
+    def units(self):
+        "Returns a tuple of the units and the name."
+        if self.projected or self.local:
+            return (self.linear_units, self.linear_name)
+        elif self.geographic:
+            return (self.angular_units, self.angular_name)
+        else:
+            return (None, None)
+
+    @classmethod
+    def get_units(cls, wkt):
+        """
+        Class method used by GeometryField on initialization to
+        retrive the units on the given WKT, without having to use
+        any of the database fields.
+        """
+        if gdal.HAS_GDAL:
+            return gdal.SpatialReference(wkt).units
+        else:
+            m = cls.units_regex.match(wkt)
+            return m.group('unit'), m.group('unit_name')
+
+    @classmethod
+    def get_spheroid(cls, wkt, string=True):
+        """
+        Class method used by GeometryField on initialization to
+        retrieve the `SPHEROID[..]` parameters from the given WKT.
+        """
+        if gdal.HAS_GDAL:
+            srs = gdal.SpatialReference(wkt)
+            sphere_params = srs.ellipsoid
+            sphere_name = srs['spheroid']
+        else:
+            m = cls.spheroid_regex.match(wkt)
+            if m:
+                sphere_params = (float(m.group('major')), float(m.group('flattening')))
+                sphere_name = m.group('name')
+            else:
+                return None
+
+        if not string:
+            return sphere_name, sphere_params
+        else:
+            # `string` parameter used to place in format acceptable by PostGIS
+            if len(sphere_params) == 3:
+                radius, flattening = sphere_params[0], sphere_params[2]
+            else:
+                radius, flattening = sphere_params
+            return 'SPHEROID["%s",%s,%s]' % (sphere_name, radius, flattening)
+
+    def __unicode__(self):
+        """
+        Returns the string representation.  If GDAL is installed,
+        it will be 'pretty' OGC WKT.
+        """
+        try:
+            return unicode(self.srs)
+        except:
+            return unicode(self.wkt)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/mysql/base.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,13 @@
+from django.db.backends.mysql.base import *
+from django.db.backends.mysql.base import DatabaseWrapper as MySQLDatabaseWrapper
+from django.contrib.gis.db.backends.mysql.creation import MySQLCreation
+from django.contrib.gis.db.backends.mysql.introspection import MySQLIntrospection
+from django.contrib.gis.db.backends.mysql.operations import MySQLOperations
+
+class DatabaseWrapper(MySQLDatabaseWrapper):
+
+    def __init__(self, *args, **kwargs):
+        super(DatabaseWrapper, self).__init__(*args, **kwargs)
+        self.creation = MySQLCreation(self)
+        self.ops = MySQLOperations()
+        self.introspection = MySQLIntrospection(self)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/mysql/creation.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+from django.db.backends.mysql.creation import DatabaseCreation
+
+class MySQLCreation(DatabaseCreation):
+
+    def sql_indexes_for_field(self, model, f, style):
+        from django.contrib.gis.db.models.fields import GeometryField
+        output = super(MySQLCreation, self).sql_indexes_for_field(model, f, style)
+
+        if isinstance(f, GeometryField):
+            qn = self.connection.ops.quote_name
+            db_table = model._meta.db_table
+            idx_name = '%s_%s_id' % (db_table, f.column)
+            output.append(style.SQL_KEYWORD('CREATE SPATIAL INDEX ') +
+                          style.SQL_TABLE(qn(idx_name)) +
+                          style.SQL_KEYWORD(' ON ') +
+                          style.SQL_TABLE(qn(db_table)) + '(' +
+                          style.SQL_FIELD(qn(f.column)) + ');')
+        return output
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/mysql/introspection.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,32 @@
+from MySQLdb.constants import FIELD_TYPE
+
+from django.contrib.gis.gdal import OGRGeomType
+from django.db.backends.mysql.introspection import DatabaseIntrospection
+
+class MySQLIntrospection(DatabaseIntrospection):
+    # Updating the data_types_reverse dictionary with the appropriate
+    # type for Geometry fields.
+    data_types_reverse = DatabaseIntrospection.data_types_reverse.copy()
+    data_types_reverse[FIELD_TYPE.GEOMETRY] = 'GeometryField'
+
+    def get_geometry_type(self, table_name, geo_col):
+        cursor = self.connection.cursor()
+        try:
+            # In order to get the specific geometry type of the field,
+            # we introspect on the table definition using `DESCRIBE`.
+            cursor.execute('DESCRIBE %s' %
+                           self.connection.ops.quote_name(table_name))
+            # Increment over description info until we get to the geometry
+            # column.
+            for column, typ, null, key, default, extra in cursor.fetchall():
+                if column == geo_col:
+                    # Using OGRGeomType to convert from OGC name to Django field.
+                    # MySQL does not support 3D or SRIDs, so the field params
+                    # are empty.
+                    field_type = OGRGeomType(typ).django
+                    field_params = {}
+                    break
+        finally:
+            cursor.close()
+
+        return field_type, field_params
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/mysql/operations.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,65 @@
+from django.db.backends.mysql.base import DatabaseOperations
+
+from django.contrib.gis.db.backends.adapter import WKTAdapter
+from django.contrib.gis.db.backends.base import BaseSpatialOperations
+
+class MySQLOperations(DatabaseOperations, BaseSpatialOperations):
+
+    compiler_module = 'django.contrib.gis.db.models.sql.compiler'
+    mysql = True
+    name = 'mysql'
+    select = 'AsText(%s)'
+    from_wkb = 'GeomFromWKB'
+    from_text = 'GeomFromText'
+
+    Adapter = WKTAdapter
+    Adaptor = Adapter # Backwards-compatibility alias.
+
+    geometry_functions = {
+        'bbcontains' : 'MBRContains', # For consistency w/PostGIS API
+        'bboverlaps' : 'MBROverlaps', # .. ..
+        'contained' : 'MBRWithin',    # .. ..
+        'contains' : 'MBRContains',
+        'disjoint' : 'MBRDisjoint',
+        'equals' : 'MBREqual',
+        'exact' : 'MBREqual',
+        'intersects' : 'MBRIntersects',
+        'overlaps' : 'MBROverlaps',
+        'same_as' : 'MBREqual',
+        'touches' : 'MBRTouches',
+        'within' : 'MBRWithin',
+        }
+
+    gis_terms = dict([(term, None) for term in geometry_functions.keys() + ['isnull']])
+
+    def geo_db_type(self, f):
+        return f.geom_type
+
+    def get_geom_placeholder(self, value, srid):
+        """
+        The placeholder here has to include MySQL's WKT constructor.  Because
+        MySQL does not support spatial transformations, there is no need to
+        modify the placeholder based on the contents of the given value.
+        """
+        if hasattr(value, 'expression'):
+            placeholder = '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
+        else:
+            placeholder = '%s(%%s)' % self.from_text
+        return placeholder
+
+    def spatial_lookup_sql(self, lvalue, lookup_type, value, field, qn):
+        alias, col, db_type = lvalue
+
+        geo_col = '%s.%s' % (qn(alias), qn(col))
+
+        lookup_info = self.geometry_functions.get(lookup_type, False)
+        if lookup_info:
+            return "%s(%s, %s)" % (lookup_info, geo_col,
+                                   self.get_geom_placeholder(value, field.srid))
+
+        # TODO: Is this really necessary? MySQL can't handle NULL geometries
+        #  in its spatial indexes anyways.
+        if lookup_type == 'isnull':
+            return "%s IS %sNULL" % (geo_col, (not value and 'NOT ' or ''))
+
+        raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/oracle/adapter.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,5 @@
+from cx_Oracle import CLOB
+from django.contrib.gis.db.backends.adapter import WKTAdapter
+
+class OracleSpatialAdapter(WKTAdapter):
+    input_size = CLOB
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/oracle/base.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,12 @@
+from django.db.backends.oracle.base import *
+from django.db.backends.oracle.base import DatabaseWrapper as OracleDatabaseWrapper
+from django.contrib.gis.db.backends.oracle.creation import OracleCreation
+from django.contrib.gis.db.backends.oracle.introspection import OracleIntrospection
+from django.contrib.gis.db.backends.oracle.operations import OracleOperations
+
+class DatabaseWrapper(OracleDatabaseWrapper):
+    def __init__(self, *args, **kwargs):
+        super(DatabaseWrapper, self).__init__(*args, **kwargs)
+        self.ops = OracleOperations(self)
+        self.creation = OracleCreation(self)
+        self.introspection = OracleIntrospection(self)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/oracle/compiler.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,44 @@
+from django.contrib.gis.db.models.sql.compiler import GeoSQLCompiler as BaseGeoSQLCompiler
+from django.db.backends.oracle import compiler
+
+SQLCompiler = compiler.SQLCompiler
+
+class GeoSQLCompiler(BaseGeoSQLCompiler, SQLCompiler):
+    pass
+
+class SQLInsertCompiler(compiler.SQLInsertCompiler, GeoSQLCompiler):
+    def placeholder(self, field, val):
+        if field is None:
+            # A field value of None means the value is raw.
+            return val
+        elif hasattr(field, 'get_placeholder'):
+            # Some fields (e.g. geo fields) need special munging before
+            # they can be inserted.
+            ph = field.get_placeholder(val, self.connection)
+            if ph == 'NULL':
+                # If the placeholder returned is 'NULL', then we need to
+                # to remove None from the Query parameters. Specifically,
+                # cx_Oracle will assume a CHAR type when a placeholder ('%s')
+                # is used for columns of MDSYS.SDO_GEOMETRY.  Thus, we use
+                # 'NULL' for the value, and remove None from the query params.
+                # See also #10888.
+                param_idx = self.query.columns.index(field.column)
+                params = list(self.query.params)
+                params.pop(param_idx)
+                self.query.params = tuple(params)
+            return ph
+        else:
+            # Return the common case for the placeholder
+            return '%s'
+
+class SQLDeleteCompiler(compiler.SQLDeleteCompiler, GeoSQLCompiler):
+    pass
+
+class SQLUpdateCompiler(compiler.SQLUpdateCompiler, GeoSQLCompiler):
+    pass
+
+class SQLAggregateCompiler(compiler.SQLAggregateCompiler, GeoSQLCompiler):
+    pass
+
+class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler):
+    pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/oracle/creation.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,42 @@
+from django.db.backends.oracle.creation import DatabaseCreation
+from django.db.backends.util import truncate_name
+
+class OracleCreation(DatabaseCreation):
+
+    def sql_indexes_for_field(self, model, f, style):
+        "Return any spatial index creation SQL for the field."
+        from django.contrib.gis.db.models.fields import GeometryField
+
+        output = super(OracleCreation, self).sql_indexes_for_field(model, f, style)
+
+        if isinstance(f, GeometryField):
+            gqn = self.connection.ops.geo_quote_name
+            qn = self.connection.ops.quote_name
+            db_table = model._meta.db_table
+
+            output.append(style.SQL_KEYWORD('INSERT INTO ') +
+                          style.SQL_TABLE('USER_SDO_GEOM_METADATA') +
+                          ' (%s, %s, %s, %s)\n  ' % tuple(map(qn, ['TABLE_NAME', 'COLUMN_NAME', 'DIMINFO', 'SRID'])) +
+                          style.SQL_KEYWORD(' VALUES ') + '(\n    ' +
+                          style.SQL_TABLE(gqn(db_table)) + ',\n    ' +
+                          style.SQL_FIELD(gqn(f.column)) + ',\n    ' +
+                          style.SQL_KEYWORD("MDSYS.SDO_DIM_ARRAY") + '(\n      ' +
+                          style.SQL_KEYWORD("MDSYS.SDO_DIM_ELEMENT") +
+                          ("('LONG', %s, %s, %s),\n      " % (f._extent[0], f._extent[2], f._tolerance)) +
+                          style.SQL_KEYWORD("MDSYS.SDO_DIM_ELEMENT") +
+                          ("('LAT', %s, %s, %s)\n    ),\n" % (f._extent[1], f._extent[3], f._tolerance)) +
+                          '    %s\n  );' % f.srid)
+
+            if f.spatial_index:
+                # Getting the index name, Oracle doesn't allow object
+                # names > 30 characters.
+                idx_name = truncate_name('%s_%s_id' % (db_table, f.column), 30)
+
+                output.append(style.SQL_KEYWORD('CREATE INDEX ') +
+                              style.SQL_TABLE(qn(idx_name)) +
+                              style.SQL_KEYWORD(' ON ') +
+                              style.SQL_TABLE(qn(db_table)) + '(' +
+                              style.SQL_FIELD(qn(f.column)) + ') ' +
+                              style.SQL_KEYWORD('INDEXTYPE IS ') +
+                              style.SQL_TABLE('MDSYS.SPATIAL_INDEX') + ';')
+        return output
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/oracle/introspection.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,39 @@
+import cx_Oracle
+from django.db.backends.oracle.introspection import DatabaseIntrospection
+
+class OracleIntrospection(DatabaseIntrospection):
+    # Associating any OBJECTVAR instances with GeometryField.  Of course,
+    # this won't work right on Oracle objects that aren't MDSYS.SDO_GEOMETRY,
+    # but it is the only object type supported within Django anyways.
+    data_types_reverse = DatabaseIntrospection.data_types_reverse.copy()
+    data_types_reverse[cx_Oracle.OBJECT] = 'GeometryField'
+
+    def get_geometry_type(self, table_name, geo_col):
+        cursor = self.connection.cursor()
+        try:
+            # Querying USER_SDO_GEOM_METADATA to get the SRID and dimension information.
+            try:
+                cursor.execute('SELECT "DIMINFO", "SRID" FROM "USER_SDO_GEOM_METADATA" WHERE "TABLE_NAME"=%s AND "COLUMN_NAME"=%s',
+                               (table_name.upper(), geo_col.upper()))
+                row = cursor.fetchone()
+            except Exception, msg:
+                raise Exception('Could not find entry in USER_SDO_GEOM_METADATA corresponding to "%s"."%s"\n'
+                                'Error message: %s.' % (table_name, geo_col, msg))
+
+            # TODO: Research way to find a more specific geometry field type for
+            # the column's contents.
+            field_type = 'GeometryField'
+
+            # Getting the field parameters.
+            field_params = {}
+            dim, srid = row
+            if srid != 4326:
+                field_params['srid'] = srid
+            # Length of object array ( SDO_DIM_ARRAY ) is number of dimensions.
+            dim = len(dim)
+            if dim != 2:
+                field_params['dim'] = dim
+        finally:
+            cursor.close()
+
+        return field_type, field_params
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/oracle/models.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,65 @@
+"""
+ The GeometryColumns and SpatialRefSys models for the Oracle spatial
+ backend.
+
+ It should be noted that Oracle Spatial does not have database tables
+ named according to the OGC standard, so the closest analogs are used.
+ For example, the `USER_SDO_GEOM_METADATA` is used for the GeometryColumns
+ model and the `SDO_COORD_REF_SYS` is used for the SpatialRefSys model.
+"""
+from django.contrib.gis.db import models
+from django.contrib.gis.db.models.fields import GeometryField
+from django.contrib.gis.db.backends.base import SpatialRefSysMixin
+
+class GeometryColumns(models.Model):
+    "Maps to the Oracle USER_SDO_GEOM_METADATA table."
+    table_name = models.CharField(max_length=32)
+    column_name = models.CharField(max_length=1024)
+    srid = models.IntegerField(primary_key=True)
+    # TODO: Add support for `diminfo` column (type MDSYS.SDO_DIM_ARRAY).
+    class Meta:
+        db_table = 'USER_SDO_GEOM_METADATA'
+        managed = False
+
+    @classmethod
+    def table_name_col(cls):
+        """
+        Returns the name of the metadata column used to store the
+        the feature table name.
+        """
+        return 'table_name'
+
+    @classmethod
+    def geom_col_name(cls):
+        """
+        Returns the name of the metadata column used to store the
+        the feature geometry column.
+        """
+        return 'column_name'
+
+    def __unicode__(self):
+        return '%s - %s (SRID: %s)' % (self.table_name, self.column_name, self.srid)
+
+class SpatialRefSys(models.Model, SpatialRefSysMixin):
+    "Maps to the Oracle MDSYS.CS_SRS table."
+    cs_name = models.CharField(max_length=68)
+    srid = models.IntegerField(primary_key=True)
+    auth_srid = models.IntegerField()
+    auth_name = models.CharField(max_length=256)
+    wktext = models.CharField(max_length=2046)
+    # Optional geometry representing the bounds of this coordinate
+    # system.  By default, all are NULL in the table.
+    cs_bounds = models.PolygonField(null=True)
+    objects = models.GeoManager()
+
+    class Meta:
+        db_table = 'CS_SRS'
+        managed = False
+
+    @property
+    def wkt(self):
+        return self.wktext
+
+    @classmethod
+    def wkt_col(cls):
+        return 'wktext'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/oracle/operations.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,293 @@
+"""
+ This module contains the spatial lookup types, and the `get_geo_where_clause`
+ routine for Oracle Spatial.
+
+ Please note that WKT support is broken on the XE version, and thus
+ this backend will not work on such platforms.  Specifically, XE lacks
+ support for an internal JVM, and Java libraries are required to use
+ the WKT constructors.
+"""
+import re
+from decimal import Decimal
+
+from django.db.backends.oracle.base import DatabaseOperations
+from django.contrib.gis.db.backends.base import BaseSpatialOperations
+from django.contrib.gis.db.backends.oracle.adapter import OracleSpatialAdapter
+from django.contrib.gis.db.backends.util import SpatialFunction
+from django.contrib.gis.geometry.backend import Geometry
+from django.contrib.gis.measure import Distance
+
+class SDOOperation(SpatialFunction):
+    "Base class for SDO* Oracle operations."
+    sql_template = "%(function)s(%(geo_col)s, %(geometry)s) %(operator)s '%(result)s'"
+
+    def __init__(self, func, **kwargs):
+        kwargs.setdefault('operator', '=')
+        kwargs.setdefault('result', 'TRUE')
+        super(SDOOperation, self).__init__(func, **kwargs)
+
+class SDODistance(SpatialFunction):
+    "Class for Distance queries."
+    sql_template = ('%(function)s(%(geo_col)s, %(geometry)s, %(tolerance)s) '
+                    '%(operator)s %(result)s')
+    dist_func = 'SDO_GEOM.SDO_DISTANCE'
+    def __init__(self, op, tolerance=0.05):
+        super(SDODistance, self).__init__(self.dist_func,
+                                          tolerance=tolerance,
+                                          operator=op, result='%s')
+
+class SDODWithin(SpatialFunction):
+    dwithin_func = 'SDO_WITHIN_DISTANCE'
+    sql_template = "%(function)s(%(geo_col)s, %(geometry)s, %%s) = 'TRUE'"
+    def __init__(self):
+        super(SDODWithin, self).__init__(self.dwithin_func)
+
+class SDOGeomRelate(SpatialFunction):
+    "Class for using SDO_GEOM.RELATE."
+    relate_func = 'SDO_GEOM.RELATE'
+    sql_template = ("%(function)s(%(geo_col)s, '%(mask)s', %(geometry)s, "
+                    "%(tolerance)s) %(operator)s '%(mask)s'")
+    def __init__(self, mask, tolerance=0.05):
+        # SDO_GEOM.RELATE(...) has a peculiar argument order: column, mask, geom, tolerance.
+        # Moreover, the runction result is the mask (e.g., 'DISJOINT' instead of 'TRUE').
+        super(SDOGeomRelate, self).__init__(self.relate_func, operator='=',
+                                            mask=mask, tolerance=tolerance)
+
+class SDORelate(SpatialFunction):
+    "Class for using SDO_RELATE."
+    masks = 'TOUCH|OVERLAPBDYDISJOINT|OVERLAPBDYINTERSECT|EQUAL|INSIDE|COVEREDBY|CONTAINS|COVERS|ANYINTERACT|ON'
+    mask_regex = re.compile(r'^(%s)(\+(%s))*$' % (masks, masks), re.I)
+    sql_template = "%(function)s(%(geo_col)s, %(geometry)s, 'mask=%(mask)s') = 'TRUE'"
+    relate_func = 'SDO_RELATE'
+    def __init__(self, mask):
+        if not self.mask_regex.match(mask):
+            raise ValueError('Invalid %s mask: "%s"' % (self.relate_func, mask))
+        super(SDORelate, self).__init__(self.relate_func, mask=mask)
+
+# Valid distance types and substitutions
+dtypes = (Decimal, Distance, float, int, long)
+
+class OracleOperations(DatabaseOperations, BaseSpatialOperations):
+    compiler_module = "django.contrib.gis.db.backends.oracle.compiler"
+
+    name = 'oracle'
+    oracle = True
+    valid_aggregates = dict([(a, None) for a in ('Union', 'Extent')])
+
+    Adapter = OracleSpatialAdapter
+    Adaptor = Adapter # Backwards-compatibility alias.
+
+    area = 'SDO_GEOM.SDO_AREA'
+    gml= 'SDO_UTIL.TO_GMLGEOMETRY'
+    centroid = 'SDO_GEOM.SDO_CENTROID'
+    difference = 'SDO_GEOM.SDO_DIFFERENCE'
+    distance = 'SDO_GEOM.SDO_DISTANCE'
+    extent= 'SDO_AGGR_MBR'
+    intersection= 'SDO_GEOM.SDO_INTERSECTION'
+    length = 'SDO_GEOM.SDO_LENGTH'
+    num_geom = 'SDO_UTIL.GETNUMELEM'
+    num_points = 'SDO_UTIL.GETNUMVERTICES'
+    perimeter = length
+    point_on_surface = 'SDO_GEOM.SDO_POINTONSURFACE'
+    reverse = 'SDO_UTIL.REVERSE_LINESTRING'
+    sym_difference = 'SDO_GEOM.SDO_XOR'
+    transform = 'SDO_CS.TRANSFORM'
+    union = 'SDO_GEOM.SDO_UNION'
+    unionagg = 'SDO_AGGR_UNION'
+
+    # We want to get SDO Geometries as WKT because it is much easier to
+    # instantiate GEOS proxies from WKT than SDO_GEOMETRY(...) strings.
+    # However, this adversely affects performance (i.e., Java is called
+    # to convert to WKT on every query).  If someone wishes to write a
+    # SDO_GEOMETRY(...) parser in Python, let me know =)
+    select = 'SDO_UTIL.TO_WKTGEOMETRY(%s)'
+
+    distance_functions = {
+        'distance_gt' : (SDODistance('>'), dtypes),
+        'distance_gte' : (SDODistance('>='), dtypes),
+        'distance_lt' : (SDODistance('<'), dtypes),
+        'distance_lte' : (SDODistance('<='), dtypes),
+        'dwithin' : (SDODWithin(), dtypes),
+        }
+
+    geometry_functions = {
+        'contains' : SDOOperation('SDO_CONTAINS'),
+        'coveredby' : SDOOperation('SDO_COVEREDBY'),
+        'covers' : SDOOperation('SDO_COVERS'),
+        'disjoint' : SDOGeomRelate('DISJOINT'),
+        'intersects' : SDOOperation('SDO_OVERLAPBDYINTERSECT'), # TODO: Is this really the same as ST_Intersects()?
+        'equals' : SDOOperation('SDO_EQUAL'),
+        'exact' : SDOOperation('SDO_EQUAL'),
+        'overlaps' : SDOOperation('SDO_OVERLAPS'),
+        'same_as' : SDOOperation('SDO_EQUAL'),
+        'relate' : (SDORelate, basestring), # Oracle uses a different syntax, e.g., 'mask=inside+touch'
+        'touches' : SDOOperation('SDO_TOUCH'),
+        'within' : SDOOperation('SDO_INSIDE'),
+        }
+    geometry_functions.update(distance_functions)
+
+    gis_terms = ['isnull']
+    gis_terms += geometry_functions.keys()
+    gis_terms = dict([(term, None) for term in gis_terms])
+
+    truncate_params = {'relate' : None}
+
+    def __init__(self, connection):
+        super(OracleOperations, self).__init__()
+        self.connection = connection
+
+    def convert_extent(self, clob):
+        if clob:
+            # Generally, Oracle returns a polygon for the extent -- however,
+            # it can return a single point if there's only one Point in the
+            # table.
+            ext_geom = Geometry(clob.read())
+            gtype = str(ext_geom.geom_type)
+            if gtype == 'Polygon':
+                # Construct the 4-tuple from the coordinates in the polygon.
+                shell = ext_geom.shell
+                ll, ur = shell[0][:2], shell[2][:2]
+            elif gtype == 'Point':
+                ll = ext_geom.coords[:2]
+                ur = ll
+            else:
+                raise Exception('Unexpected geometry type returned for extent: %s' % gtype)
+            xmin, ymin = ll
+            xmax, ymax = ur
+            return (xmin, ymin, xmax, ymax)
+        else:
+            return None
+
+    def convert_geom(self, clob, geo_field):
+        if clob:
+            return Geometry(clob.read(), geo_field.srid)
+        else:
+            return None
+
+    def geo_db_type(self, f):
+        """
+        Returns the geometry database type for Oracle.  Unlike other spatial
+        backends, no stored procedure is necessary and it's the same for all
+        geometry types.
+        """
+        return 'MDSYS.SDO_GEOMETRY'
+
+    def get_distance(self, f, value, lookup_type):
+        """
+        Returns the distance parameters given the value and the lookup type.
+        On Oracle, geometry columns with a geodetic coordinate system behave
+        implicitly like a geography column, and thus meters will be used as
+        the distance parameter on them.
+        """
+        if not value:
+            return []
+        value = value[0]
+        if isinstance(value, Distance):
+            if f.geodetic(self.connection):
+                dist_param = value.m
+            else:
+                dist_param = getattr(value, Distance.unit_attname(f.units_name(self.connection)))
+        else:
+            dist_param = value
+
+        # dwithin lookups on oracle require a special string parameter
+        # that starts with "distance=".
+        if lookup_type == 'dwithin':
+            dist_param = 'distance=%s' % dist_param
+
+        return [dist_param]
+
+    def get_geom_placeholder(self, f, value):
+        """
+        Provides a proper substitution value for Geometries that are not in the
+        SRID of the field.  Specifically, this routine will substitute in the
+        SDO_CS.TRANSFORM() function call.
+        """
+        if value is None:
+            return 'NULL'
+
+        def transform_value(val, srid):
+            return val.srid != srid
+
+        if hasattr(value, 'expression'):
+            if transform_value(value, f.srid):
+                placeholder = '%s(%%s, %s)' % (self.transform, f.srid)
+            else:
+                placeholder = '%s'
+            # No geometry value used for F expression, substitue in
+            # the column name instead.
+            return placeholder % '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
+        else:
+            if transform_value(value, f.srid):
+                return '%s(SDO_GEOMETRY(%%s, %s), %s)' % (self.transform, value.srid, f.srid)
+            else:
+                return 'SDO_GEOMETRY(%%s, %s)' % f.srid
+
+    def spatial_lookup_sql(self, lvalue, lookup_type, value, field, qn):
+        "Returns the SQL WHERE clause for use in Oracle spatial SQL construction."
+        alias, col, db_type = lvalue
+
+        # Getting the quoted table name as `geo_col`.
+        geo_col = '%s.%s' % (qn(alias), qn(col))
+
+        # See if a Oracle Geometry function matches the lookup type next
+        lookup_info = self.geometry_functions.get(lookup_type, False)
+        if lookup_info:
+            # Lookup types that are tuples take tuple arguments, e.g., 'relate' and
+            # 'dwithin' lookup types.
+            if isinstance(lookup_info, tuple):
+                # First element of tuple is lookup type, second element is the type
+                # of the expected argument (e.g., str, float)
+                sdo_op, arg_type = lookup_info
+                geom = value[0]
+
+                # Ensuring that a tuple _value_ was passed in from the user
+                if not isinstance(value, tuple):
+                    raise ValueError('Tuple required for `%s` lookup type.' % lookup_type)
+                if len(value) != 2:
+                    raise ValueError('2-element tuple required for %s lookup type.' % lookup_type)
+
+                # Ensuring the argument type matches what we expect.
+                if not isinstance(value[1], arg_type):
+                    raise ValueError('Argument type should be %s, got %s instead.' % (arg_type, type(value[1])))
+
+                if lookup_type == 'relate':
+                    # The SDORelate class handles construction for these queries,
+                    # and verifies the mask argument.
+                    return sdo_op(value[1]).as_sql(geo_col, self.get_geom_placeholder(field, geom))
+                else:
+                    # Otherwise, just call the `as_sql` method on the SDOOperation instance.
+                    return sdo_op.as_sql(geo_col, self.get_geom_placeholder(field, geom))
+            else:
+                # Lookup info is a SDOOperation instance, whose `as_sql` method returns
+                # the SQL necessary for the geometry function call. For example:
+                #  SDO_CONTAINS("geoapp_country"."poly", SDO_GEOMTRY('POINT(5 23)', 4326)) = 'TRUE'
+                return lookup_info.as_sql(geo_col, self.get_geom_placeholder(field, value))
+        elif lookup_type == 'isnull':
+            # Handling 'isnull' lookup type
+            return "%s IS %sNULL" % (geo_col, (not value and 'NOT ' or ''))
+
+        raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
+
+    def spatial_aggregate_sql(self, agg):
+        """
+        Returns the spatial aggregate SQL template and function for the
+        given Aggregate instance.
+        """
+        agg_name = agg.__class__.__name__.lower()
+        if agg_name == 'union' : agg_name += 'agg'
+        if agg.is_extent:
+            sql_template = '%(function)s(%(field)s)'
+        else:
+            sql_template = '%(function)s(SDOAGGRTYPE(%(field)s,%(tolerance)s))'
+        sql_function = getattr(self, agg_name)
+        return self.select % sql_template, sql_function
+
+    # Routines for getting the OGC-compliant models.
+    def geometry_columns(self):
+        from django.contrib.gis.db.backends.oracle.models import GeometryColumns
+        return GeometryColumns
+
+    def spatial_ref_sys(self):
+        from django.contrib.gis.db.backends.oracle.models import SpatialRefSys
+        return SpatialRefSys
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/postgis/adapter.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,35 @@
+"""
+ This object provides quoting for GEOS geometries into PostgreSQL/PostGIS.
+"""
+
+from psycopg2 import Binary
+from psycopg2.extensions import ISQLQuote
+
+class PostGISAdapter(object):
+    def __init__(self, geom):
+        "Initializes on the geometry."
+        # Getting the WKB (in string form, to allow easy pickling of
+        # the adaptor) and the SRID from the geometry.
+        self.ewkb = str(geom.ewkb)
+        self.srid = geom.srid
+
+    def __conform__(self, proto):
+        # Does the given protocol conform to what Psycopg2 expects?
+        if proto == ISQLQuote:
+            return self
+        else:
+            raise Exception('Error implementing psycopg2 protocol. Is psycopg2 installed?')
+
+    def __eq__(self, other):
+        return (self.ewkb == other.ewkb) and (self.srid == other.srid)
+
+    def __str__(self):
+        return self.getquoted()
+
+    def getquoted(self):
+        "Returns a properly quoted string for use in PostgreSQL/PostGIS."
+        # Want to use WKB, so wrap with psycopg2 Binary() to quote properly.
+        return 'ST_GeomFromEWKB(E%s)' % Binary(self.ewkb)
+
+    def prepare_database_save(self, unused):
+        return self
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/postgis/base.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,12 @@
+from django.db.backends.postgresql_psycopg2.base import *
+from django.db.backends.postgresql_psycopg2.base import DatabaseWrapper as Psycopg2DatabaseWrapper
+from django.contrib.gis.db.backends.postgis.creation import PostGISCreation
+from django.contrib.gis.db.backends.postgis.introspection import PostGISIntrospection
+from django.contrib.gis.db.backends.postgis.operations import PostGISOperations
+
+class DatabaseWrapper(Psycopg2DatabaseWrapper):
+    def __init__(self, *args, **kwargs):
+        super(DatabaseWrapper, self).__init__(*args, **kwargs)
+        self.creation = PostGISCreation(self)
+        self.ops = PostGISOperations(self)
+        self.introspection = PostGISIntrospection(self)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/postgis/creation.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,60 @@
+from django.conf import settings
+from django.db.backends.postgresql.creation import DatabaseCreation
+
+class PostGISCreation(DatabaseCreation):
+    geom_index_type = 'GIST'
+    geom_index_opts = 'GIST_GEOMETRY_OPS'
+
+    def sql_indexes_for_field(self, model, f, style):
+        "Return any spatial index creation SQL for the field."
+        from django.contrib.gis.db.models.fields import GeometryField
+
+        output = super(PostGISCreation, self).sql_indexes_for_field(model, f, style)
+
+        if isinstance(f, GeometryField):
+            gqn = self.connection.ops.geo_quote_name
+            qn = self.connection.ops.quote_name
+            db_table = model._meta.db_table
+
+            if f.geography:
+                # Geogrophy columns are created normally.
+                pass
+            else:
+                # Geometry columns are created by `AddGeometryColumn`
+                # stored procedure.
+                output.append(style.SQL_KEYWORD('SELECT ') +
+                              style.SQL_TABLE('AddGeometryColumn') + '(' +
+                              style.SQL_TABLE(gqn(db_table)) + ', ' +
+                              style.SQL_FIELD(gqn(f.column)) + ', ' +
+                              style.SQL_FIELD(str(f.srid)) + ', ' +
+                              style.SQL_COLTYPE(gqn(f.geom_type)) + ', ' +
+                              style.SQL_KEYWORD(str(f.dim)) + ');')
+
+                if not f.null:
+                    # Add a NOT NULL constraint to the field
+                    output.append(style.SQL_KEYWORD('ALTER TABLE ') +
+                                  style.SQL_TABLE(qn(db_table)) +
+                                  style.SQL_KEYWORD(' ALTER ') +
+                                  style.SQL_FIELD(qn(f.column)) +
+                                  style.SQL_KEYWORD(' SET NOT NULL') + ';')
+
+
+            if f.spatial_index:
+                # Spatial indexes created the same way for both Geometry and
+                # Geography columns
+                if f.geography:
+                    index_opts = ''
+                else:
+                    index_opts = ' ' + style.SQL_KEYWORD(self.geom_index_opts)
+                output.append(style.SQL_KEYWORD('CREATE INDEX ') +
+                              style.SQL_TABLE(qn('%s_%s_id' % (db_table, f.column))) +
+                              style.SQL_KEYWORD(' ON ') +
+                              style.SQL_TABLE(qn(db_table)) +
+                              style.SQL_KEYWORD(' USING ') +
+                              style.SQL_COLTYPE(self.geom_index_type) + ' ( ' +
+                              style.SQL_FIELD(qn(f.column)) + index_opts + ' );')
+        return output
+
+    def sql_table_creation_suffix(self):
+        qn = self.connection.ops.quote_name
+        return ' TEMPLATE %s' % qn(getattr(settings, 'POSTGIS_TEMPLATE', 'template_postgis'))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/postgis/introspection.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,95 @@
+from django.db.backends.postgresql_psycopg2.introspection import DatabaseIntrospection
+from django.contrib.gis.gdal import OGRGeomType
+
+class GeoIntrospectionError(Exception):
+    pass
+
+class PostGISIntrospection(DatabaseIntrospection):
+    # Reverse dictionary for PostGIS geometry types not populated until
+    # introspection is actually performed.
+    postgis_types_reverse = {}
+
+    def get_postgis_types(self):
+        """
+        Returns a dictionary with keys that are the PostgreSQL object
+        identification integers for the PostGIS geometry and/or
+        geography types (if supported).
+        """
+        cursor = self.connection.cursor()
+        # The OID integers associated with the geometry type may
+        # be different across versions; hence, this is why we have
+        # to query the PostgreSQL pg_type table corresponding to the
+        # PostGIS custom data types.
+        oid_sql = 'SELECT "oid" FROM "pg_type" WHERE "typname" = %s'
+        try:
+            cursor.execute(oid_sql, ('geometry',))
+            GEOM_TYPE = cursor.fetchone()[0]
+            postgis_types = { GEOM_TYPE : 'GeometryField' }
+            if self.connection.ops.geography:
+                cursor.execute(oid_sql, ('geography',))
+                GEOG_TYPE = cursor.fetchone()[0]
+                # The value for the geography type is actually a tuple
+                # to pass in the `geography=True` keyword to the field
+                # definition.
+                postgis_types[GEOG_TYPE] = ('GeometryField', {'geography' : True})
+        finally:
+            cursor.close()
+
+        return postgis_types
+
+    def get_field_type(self, data_type, description):
+        if not self.postgis_types_reverse:
+            # If the PostGIS types reverse dictionary is not populated, do so
+            # now.  In order to prevent unnecessary requests upon connection
+            # intialization, the `data_types_reverse` dictionary is not updated
+            # with the PostGIS custom types until introspection is actually
+            # performed -- in other words, when this function is called.
+            self.postgis_types_reverse = self.get_postgis_types()
+            self.data_types_reverse.update(self.postgis_types_reverse)
+        return super(PostGISIntrospection, self).get_field_type(data_type, description)
+
+    def get_geometry_type(self, table_name, geo_col):
+        """
+        The geometry type OID used by PostGIS does not indicate the particular
+        type of field that a geometry column is (e.g., whether it's a
+        PointField or a PolygonField).  Thus, this routine queries the PostGIS
+        metadata tables to determine the geometry type,
+        """
+        cursor = self.connection.cursor()
+        try:
+            try:
+                # First seeing if this geometry column is in the `geometry_columns`
+                cursor.execute('SELECT "coord_dimension", "srid", "type" '
+                               'FROM "geometry_columns" '
+                               'WHERE "f_table_name"=%s AND "f_geometry_column"=%s',
+                               (table_name, geo_col))
+                row = cursor.fetchone()
+                if not row: raise GeoIntrospectionError
+            except GeoIntrospectionError:
+                if self.connection.ops.geography:
+                    cursor.execute('SELECT "coord_dimension", "srid", "type" '
+                                   'FROM "geography_columns" '
+                                   'WHERE "f_table_name"=%s AND "f_geography_column"=%s',
+                                   (table_name, geo_col))
+                    row = cursor.fetchone()
+
+            if not row:
+                raise Exception('Could not find a geometry or geography column for "%s"."%s"' %
+                                (table_name, geo_col))
+
+            # OGRGeomType does not require GDAL and makes it easy to convert
+            # from OGC geom type name to Django field.
+            field_type = OGRGeomType(row[2]).django
+
+            # Getting any GeometryField keyword arguments that are not the default.
+            dim = row[0]
+            srid = row[1]
+            field_params = {}
+            if srid != 4326:
+                field_params['srid'] = srid
+            if dim != 2:
+                field_params['dim'] = dim
+        finally:
+            cursor.close()
+
+        return field_type, field_params
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/postgis/models.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,66 @@
+"""
+ The GeometryColumns and SpatialRefSys models for the PostGIS backend.
+"""
+from django.db import models
+from django.contrib.gis.db.backends.base import SpatialRefSysMixin
+
+class GeometryColumns(models.Model):
+    """
+    The 'geometry_columns' table from the PostGIS. See the PostGIS
+    documentation at Ch. 4.2.2.
+    """
+    f_table_catalog = models.CharField(max_length=256)
+    f_table_schema = models.CharField(max_length=256)
+    f_table_name = models.CharField(max_length=256)
+    f_geometry_column = models.CharField(max_length=256)
+    coord_dimension = models.IntegerField()
+    srid = models.IntegerField(primary_key=True)
+    type = models.CharField(max_length=30)
+
+    class Meta:
+        db_table = 'geometry_columns'
+        managed = False
+
+    @classmethod
+    def table_name_col(cls):
+        """
+        Returns the name of the metadata column used to store the
+        the feature table name.
+        """
+        return 'f_table_name'
+
+    @classmethod
+    def geom_col_name(cls):
+        """
+        Returns the name of the metadata column used to store the
+        the feature geometry column.
+        """
+        return 'f_geometry_column'
+
+    def __unicode__(self):
+        return "%s.%s - %dD %s field (SRID: %d)" % \
+               (self.f_table_name, self.f_geometry_column,
+                self.coord_dimension, self.type, self.srid)
+
+class SpatialRefSys(models.Model, SpatialRefSysMixin):
+    """
+    The 'spatial_ref_sys' table from PostGIS. See the PostGIS
+    documentaiton at Ch. 4.2.1.
+    """
+    srid = models.IntegerField(primary_key=True)
+    auth_name = models.CharField(max_length=256)
+    auth_srid = models.IntegerField()
+    srtext = models.CharField(max_length=2048)
+    proj4text = models.CharField(max_length=2048)
+
+    class Meta:
+        db_table = 'spatial_ref_sys'
+        managed = False
+
+    @property
+    def wkt(self):
+        return self.srtext
+
+    @classmethod
+    def wkt_col(cls):
+        return 'srtext'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/postgis/operations.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,591 @@
+import re
+from decimal import Decimal
+
+from django.conf import settings
+from django.contrib.gis.db.backends.base import BaseSpatialOperations
+from django.contrib.gis.db.backends.util import SpatialOperation, SpatialFunction
+from django.contrib.gis.db.backends.postgis.adapter import PostGISAdapter
+from django.contrib.gis.geometry.backend import Geometry
+from django.contrib.gis.measure import Distance
+from django.core.exceptions import ImproperlyConfigured
+from django.db.backends.postgresql_psycopg2.base import DatabaseOperations
+from django.db.utils import DatabaseError
+
+#### Classes used in constructing PostGIS spatial SQL ####
+class PostGISOperator(SpatialOperation):
+    "For PostGIS operators (e.g. `&&`, `~`)."
+    def __init__(self, operator):
+        super(PostGISOperator, self).__init__(operator=operator)
+
+class PostGISFunction(SpatialFunction):
+    "For PostGIS function calls (e.g., `ST_Contains(table, geom)`)."
+    def __init__(self, prefix, function, **kwargs):
+        super(PostGISFunction, self).__init__(prefix + function, **kwargs)
+
+class PostGISFunctionParam(PostGISFunction):
+    "For PostGIS functions that take another parameter (e.g. DWithin, Relate)."
+    sql_template = '%(function)s(%(geo_col)s, %(geometry)s, %%s)'
+
+class PostGISDistance(PostGISFunction):
+    "For PostGIS distance operations."
+    dist_func = 'Distance'
+    sql_template = '%(function)s(%(geo_col)s, %(geometry)s) %(operator)s %%s'
+
+    def __init__(self, prefix, operator):
+        super(PostGISDistance, self).__init__(prefix, self.dist_func,
+                                              operator=operator)
+
+class PostGISSpheroidDistance(PostGISFunction):
+    "For PostGIS spherical distance operations (using the spheroid)."
+    dist_func = 'distance_spheroid'
+    sql_template = '%(function)s(%(geo_col)s, %(geometry)s, %%s) %(operator)s %%s'
+    def __init__(self, prefix, operator):
+        # An extra parameter in `end_subst` is needed for the spheroid string.
+        super(PostGISSpheroidDistance, self).__init__(prefix, self.dist_func,
+                                                      operator=operator)
+
+class PostGISSphereDistance(PostGISDistance):
+    "For PostGIS spherical distance operations."
+    dist_func = 'distance_sphere'
+
+class PostGISRelate(PostGISFunctionParam):
+    "For PostGIS Relate(<geom>, <pattern>) calls."
+    pattern_regex = re.compile(r'^[012TF\*]{9}$')
+    def __init__(self, prefix, pattern):
+        if not self.pattern_regex.match(pattern):
+            raise ValueError('Invalid intersection matrix pattern "%s".' % pattern)
+        super(PostGISRelate, self).__init__(prefix, 'Relate')
+
+
+class PostGISOperations(DatabaseOperations, BaseSpatialOperations):
+    compiler_module = 'django.contrib.gis.db.models.sql.compiler'
+    name = 'postgis'
+    postgis = True
+    version_regex = re.compile(r'^(?P<major>\d)\.(?P<minor1>\d)\.(?P<minor2>\d+)')
+    valid_aggregates = dict([(k, None) for k in
+                             ('Collect', 'Extent', 'Extent3D', 'MakeLine', 'Union')])
+
+    Adapter = PostGISAdapter
+    Adaptor = Adapter # Backwards-compatibility alias.
+
+    def __init__(self, connection):
+        super(PostGISOperations, self).__init__(connection)
+
+        # Trying to get the PostGIS version because the function
+        # signatures will depend on the version used.  The cost
+        # here is a database query to determine the version, which
+        # can be mitigated by setting `POSTGIS_VERSION` with a 3-tuple
+        # comprising user-supplied values for the major, minor, and
+        # subminor revision of PostGIS.
+        try:
+            if hasattr(settings, 'POSTGIS_VERSION'):
+                vtup = settings.POSTGIS_VERSION
+                if len(vtup) == 3:
+                    # The user-supplied PostGIS version.
+                    version = vtup
+                else:
+                    # This was the old documented way, but it's stupid to
+                    # include the string.
+                    version = vtup[1:4]
+            else:
+                vtup = self.postgis_version_tuple()
+                version = vtup[1:]
+
+            # Getting the prefix -- even though we don't officially support
+            # PostGIS 1.2 anymore, keeping it anyway in case a prefix change
+            # for something else is necessary.
+            if version >= (1, 2, 2):
+                prefix = 'ST_'
+            else:
+                prefix = ''
+
+            self.geom_func_prefix = prefix
+            self.spatial_version = version
+        except DatabaseError:
+            raise ImproperlyConfigured('Cannot determine PostGIS version for database "%s". '
+                                       'GeoDjango requires at least PostGIS version 1.3. '
+                                       'Was the database created from a spatial database '
+                                       'template?' % self.connection.settings_dict['NAME']
+                                       )
+        except Exception, e:
+            # TODO: Raise helpful exceptions as they become known.
+            raise
+
+        # PostGIS-specific operators. The commented descriptions of these
+        # operators come from Section 7.6 of the PostGIS 1.4 documentation.
+        self.geometry_operators = {
+            # The "&<" operator returns true if A's bounding box overlaps or
+            # is to the left of B's bounding box.
+            'overlaps_left' : PostGISOperator('&<'),
+            # The "&>" operator returns true if A's bounding box overlaps or
+            # is to the right of B's bounding box.
+            'overlaps_right' : PostGISOperator('&>'),
+            # The "<<" operator returns true if A's bounding box is strictly
+            # to the left of B's bounding box.
+            'left' : PostGISOperator('<<'),
+            # The ">>" operator returns true if A's bounding box is strictly
+            # to the right of B's bounding box.
+            'right' : PostGISOperator('>>'),
+            # The "&<|" operator returns true if A's bounding box overlaps or
+            # is below B's bounding box.
+            'overlaps_below' : PostGISOperator('&<|'),
+            # The "|&>" operator returns true if A's bounding box overlaps or
+            # is above B's bounding box.
+            'overlaps_above' : PostGISOperator('|&>'),
+            # The "<<|" operator returns true if A's bounding box is strictly
+            # below B's bounding box.
+            'strictly_below' : PostGISOperator('<<|'),
+            # The "|>>" operator returns true if A's bounding box is strictly
+            # above B's bounding box.
+            'strictly_above' : PostGISOperator('|>>'),
+            # The "~=" operator is the "same as" operator. It tests actual
+            # geometric equality of two features. So if A and B are the same feature,
+            # vertex-by-vertex, the operator returns true.
+            'same_as' : PostGISOperator('~='),
+            'exact' : PostGISOperator('~='),
+            # The "@" operator returns true if A's bounding box is completely contained
+            # by B's bounding box.
+            'contained' : PostGISOperator('@'),
+            # The "~" operator returns true if A's bounding box completely contains
+            #  by B's bounding box.
+            'bbcontains' : PostGISOperator('~'),
+            # The "&&" operator returns true if A's bounding box overlaps
+            # B's bounding box.
+            'bboverlaps' : PostGISOperator('&&'),
+            }
+
+        self.geometry_functions = {
+            'equals' : PostGISFunction(prefix, 'Equals'),
+            'disjoint' : PostGISFunction(prefix, 'Disjoint'),
+            'touches' : PostGISFunction(prefix, 'Touches'),
+            'crosses' : PostGISFunction(prefix, 'Crosses'),
+            'within' : PostGISFunction(prefix, 'Within'),
+            'overlaps' : PostGISFunction(prefix, 'Overlaps'),
+            'contains' : PostGISFunction(prefix, 'Contains'),
+            'intersects' : PostGISFunction(prefix, 'Intersects'),
+            'relate' : (PostGISRelate, basestring),
+            }
+
+        # Valid distance types and substitutions
+        dtypes = (Decimal, Distance, float, int, long)
+        def get_dist_ops(operator):
+            "Returns operations for both regular and spherical distances."
+            return {'cartesian' : PostGISDistance(prefix, operator),
+                    'sphere' : PostGISSphereDistance(prefix, operator),
+                    'spheroid' : PostGISSpheroidDistance(prefix, operator),
+                    }
+        self.distance_functions = {
+            'distance_gt' : (get_dist_ops('>'), dtypes),
+            'distance_gte' : (get_dist_ops('>='), dtypes),
+            'distance_lt' : (get_dist_ops('<'), dtypes),
+            'distance_lte' : (get_dist_ops('<='), dtypes),
+            }
+
+        # Versions 1.2.2+ have KML serialization support.
+        if version < (1, 2, 2):
+            ASKML = False
+        else:
+            ASKML = 'ST_AsKML'
+            self.geometry_functions.update(
+                {'coveredby' : PostGISFunction(prefix, 'CoveredBy'),
+                 'covers' : PostGISFunction(prefix, 'Covers'),
+                 })
+            self.distance_functions['dwithin'] = (PostGISFunctionParam(prefix, 'DWithin'), dtypes)
+
+        # Adding the distance functions to the geometries lookup.
+        self.geometry_functions.update(self.distance_functions)
+
+        # The union aggregate and topology operation use the same signature
+        # in versions 1.3+.
+        if version < (1, 3, 0):
+            UNIONAGG = 'GeomUnion'
+            UNION = 'Union'
+            MAKELINE = False
+        else:
+            UNIONAGG = 'ST_Union'
+            UNION = 'ST_Union'
+            MAKELINE = 'ST_MakeLine'
+
+        # Only PostGIS versions 1.3.4+ have GeoJSON serialization support.
+        if version < (1, 3, 4):
+            GEOJSON = False
+        else:
+            GEOJSON = prefix + 'AsGeoJson'
+
+        # ST_ContainsProperly ST_MakeLine, and ST_GeoHash added in 1.4.
+        if version >= (1, 4, 0):
+            GEOHASH = 'ST_GeoHash'
+            BOUNDINGCIRCLE = 'ST_MinimumBoundingCircle'
+            self.geometry_functions['contains_properly'] = PostGISFunction(prefix, 'ContainsProperly')
+        else:
+            GEOHASH, BOUNDINGCIRCLE = False, False
+
+        # Geography type support added in 1.5.
+        if version >= (1, 5, 0):
+            self.geography = True
+            # Only a subset of the operators and functions are available
+            # for the geography type.
+            self.geography_functions = self.distance_functions.copy()
+            self.geography_functions.update({
+                    'coveredby' : self.geometry_functions['coveredby'],
+                    'covers' : self.geometry_functions['covers'],
+                    'intersects' : self.geometry_functions['intersects'],
+                    })
+            self.geography_operators = {
+                'bboverlaps' : PostGISOperator('&&'),
+                'exact' : PostGISOperator('~='),
+                'same_as' : PostGISOperator('~='),
+                }
+
+        # Creating a dictionary lookup of all GIS terms for PostGIS.
+        gis_terms = ['isnull']
+        gis_terms += self.geometry_operators.keys()
+        gis_terms += self.geometry_functions.keys()
+        self.gis_terms = dict([(term, None) for term in gis_terms])
+
+        self.area = prefix + 'Area'
+        self.bounding_circle = BOUNDINGCIRCLE
+        self.centroid = prefix + 'Centroid'
+        self.collect = prefix + 'Collect'
+        self.difference = prefix + 'Difference'
+        self.distance = prefix + 'Distance'
+        self.distance_sphere = prefix + 'distance_sphere'
+        self.distance_spheroid = prefix + 'distance_spheroid'
+        self.envelope = prefix + 'Envelope'
+        self.extent = prefix + 'Extent'
+        self.extent3d = prefix + 'Extent3D'
+        self.force_rhr = prefix + 'ForceRHR'
+        self.geohash = GEOHASH
+        self.geojson = GEOJSON
+        self.gml = prefix + 'AsGML'
+        self.intersection = prefix + 'Intersection'
+        self.kml = ASKML
+        self.length = prefix + 'Length'
+        self.length3d = prefix + 'Length3D'
+        self.length_spheroid = prefix + 'length_spheroid'
+        self.makeline = MAKELINE
+        self.mem_size = prefix + 'mem_size'
+        self.num_geom = prefix + 'NumGeometries'
+        self.num_points =prefix + 'npoints'
+        self.perimeter = prefix + 'Perimeter'
+        self.perimeter3d = prefix + 'Perimeter3D'
+        self.point_on_surface = prefix + 'PointOnSurface'
+        self.polygonize = prefix + 'Polygonize'
+        self.reverse = prefix + 'Reverse'
+        self.scale = prefix + 'Scale'
+        self.snap_to_grid = prefix + 'SnapToGrid'
+        self.svg = prefix + 'AsSVG'
+        self.sym_difference = prefix + 'SymDifference'
+        self.transform = prefix + 'Transform'
+        self.translate = prefix + 'Translate'
+        self.union = UNION
+        self.unionagg = UNIONAGG
+
+    def check_aggregate_support(self, aggregate):
+        """
+        Checks if the given aggregate name is supported (that is, if it's
+        in `self.valid_aggregates`).
+        """
+        agg_name = aggregate.__class__.__name__
+        return agg_name in self.valid_aggregates
+
+    def convert_extent(self, box):
+        """
+        Returns a 4-tuple extent for the `Extent` aggregate by converting
+        the bounding box text returned by PostGIS (`box` argument), for
+        example: "BOX(-90.0 30.0, -85.0 40.0)".
+        """
+        ll, ur = box[4:-1].split(',')
+        xmin, ymin = map(float, ll.split())
+        xmax, ymax = map(float, ur.split())
+        return (xmin, ymin, xmax, ymax)
+
+    def convert_extent3d(self, box3d):
+        """
+        Returns a 6-tuple extent for the `Extent3D` aggregate by converting
+        the 3d bounding-box text returnded by PostGIS (`box3d` argument), for
+        example: "BOX3D(-90.0 30.0 1, -85.0 40.0 2)".
+        """
+        ll, ur = box3d[6:-1].split(',')
+        xmin, ymin, zmin = map(float, ll.split())
+        xmax, ymax, zmax = map(float, ur.split())
+        return (xmin, ymin, zmin, xmax, ymax, zmax)
+
+    def convert_geom(self, hex, geo_field):
+        """
+        Converts the geometry returned from PostGIS aggretates.
+        """
+        if hex:
+            return Geometry(hex)
+        else:
+            return None
+
+    def geo_db_type(self, f):
+        """
+        Return the database field type for the given geometry field.
+        Typically this is `None` because geometry columns are added via
+        the `AddGeometryColumn` stored procedure, unless the field
+        has been specified to be of geography type instead.
+        """
+        if f.geography:
+            if not self.geography:
+                raise NotImplementedError('PostGIS 1.5 required for geography column support.')
+
+            if f.srid != 4326:
+                raise NotImplementedError('PostGIS 1.5 supports geography columns '
+                                          'only with an SRID of 4326.')
+
+            return 'geography(%s,%d)'% (f.geom_type, f.srid)
+        else:
+            return None
+
+    def get_distance(self, f, dist_val, lookup_type):
+        """
+        Retrieve the distance parameters for the given geometry field,
+        distance lookup value, and the distance lookup type.
+
+        This is the most complex implementation of the spatial backends due to
+        what is supported on geodetic geometry columns vs. what's available on
+        projected geometry columns.  In addition, it has to take into account
+        the newly introduced geography column type introudced in PostGIS 1.5.
+        """
+        # Getting the distance parameter and any options.
+        if len(dist_val) == 1:
+            value, option = dist_val[0], None
+        else:
+            value, option = dist_val
+
+        # Shorthand boolean flags.
+        geodetic = f.geodetic(self.connection)
+        geography = f.geography and self.geography
+
+        if isinstance(value, Distance):
+            if geography:
+                dist_param = value.m
+            elif geodetic:
+                if lookup_type == 'dwithin':
+                    raise ValueError('Only numeric values of degree units are '
+                                     'allowed on geographic DWithin queries.')
+                dist_param = value.m
+            else:
+                dist_param = getattr(value, Distance.unit_attname(f.units_name(self.connection)))
+        else:
+            # Assuming the distance is in the units of the field.
+            dist_param = value
+
+        if (not geography and geodetic and lookup_type != 'dwithin'
+            and option == 'spheroid'):
+            # using distance_spheroid requires the spheroid of the field as
+            # a parameter.
+            return [f._spheroid, dist_param]
+        else:
+            return [dist_param]
+
+    def get_geom_placeholder(self, f, value):
+        """
+        Provides a proper substitution value for Geometries that are not in the
+        SRID of the field.  Specifically, this routine will substitute in the
+        ST_Transform() function call.
+        """
+        if value is None or value.srid == f.srid:
+            placeholder = '%s'
+        else:
+            # Adding Transform() to the SQL placeholder.
+            placeholder = '%s(%%s, %s)' % (self.transform, f.srid)
+
+        if hasattr(value, 'expression'):
+            # If this is an F expression, then we don't really want
+            # a placeholder and instead substitute in the column
+            # of the expression.
+            placeholder = placeholder % '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
+
+        return placeholder
+
+    def _get_postgis_func(self, func):
+        """
+        Helper routine for calling PostGIS functions and returning their result.
+        """
+        cursor = self.connection._cursor()
+        try:
+            try:
+                cursor.execute('SELECT %s()' % func)
+                row = cursor.fetchone()
+            except:
+                # Responsibility of callers to perform error handling.
+                raise
+        finally:
+            # Close out the connection.  See #9437.
+            self.connection.close()
+        return row[0]
+
+    def postgis_geos_version(self):
+        "Returns the version of the GEOS library used with PostGIS."
+        return self._get_postgis_func('postgis_geos_version')
+
+    def postgis_lib_version(self):
+        "Returns the version number of the PostGIS library used with PostgreSQL."
+        return self._get_postgis_func('postgis_lib_version')
+
+    def postgis_proj_version(self):
+        "Returns the version of the PROJ.4 library used with PostGIS."
+        return self._get_postgis_func('postgis_proj_version')
+
+    def postgis_version(self):
+        "Returns PostGIS version number and compile-time options."
+        return self._get_postgis_func('postgis_version')
+
+    def postgis_full_version(self):
+        "Returns PostGIS version number and compile-time options."
+        return self._get_postgis_func('postgis_full_version')
+
+    def postgis_version_tuple(self):
+        """
+        Returns the PostGIS version as a tuple (version string, major,
+        minor, subminor).
+        """
+        # Getting the PostGIS version
+        version = self.postgis_lib_version()
+        m = self.version_regex.match(version)
+
+        if m:
+            major = int(m.group('major'))
+            minor1 = int(m.group('minor1'))
+            minor2 = int(m.group('minor2'))
+        else:
+            raise Exception('Could not parse PostGIS version string: %s' % version)
+
+        return (version, major, minor1, minor2)
+
+    def proj_version_tuple(self):
+        """
+        Return the version of PROJ.4 used by PostGIS as a tuple of the
+        major, minor, and subminor release numbers.
+        """
+        proj_regex = re.compile(r'(\d+)\.(\d+)\.(\d+)')
+        proj_ver_str = self.postgis_proj_version()
+        m = proj_regex.search(proj_ver_str)
+        if m:
+            return tuple(map(int, [m.group(1), m.group(2), m.group(3)]))
+        else:
+            raise Exception('Could not determine PROJ.4 version from PostGIS.')
+
+    def num_params(self, lookup_type, num_param):
+        """
+        Helper routine that returns a boolean indicating whether the number of
+        parameters is correct for the lookup type.
+        """
+        def exactly_two(np): return np == 2
+        def two_to_three(np): return np >= 2 and np <=3
+        if (lookup_type in self.distance_functions and
+            lookup_type != 'dwithin'):
+            return two_to_three(num_param)
+        else:
+            return exactly_two(num_param)
+
+    def spatial_lookup_sql(self, lvalue, lookup_type, value, field, qn):
+        """
+        Constructs spatial SQL from the given lookup value tuple a
+        (alias, col, db_type), the lookup type string, lookup value, and
+        the geometry field.
+        """
+        alias, col, db_type = lvalue
+
+        # Getting the quoted geometry column.
+        geo_col = '%s.%s' % (qn(alias), qn(col))
+
+        if lookup_type in self.geometry_operators:
+            if field.geography and not lookup_type in self.geography_operators:
+                raise ValueError('PostGIS geography does not support the '
+                                 '"%s" lookup.' % lookup_type)
+            # Handling a PostGIS operator.
+            op = self.geometry_operators[lookup_type]
+            return op.as_sql(geo_col, self.get_geom_placeholder(field, value))
+        elif lookup_type in self.geometry_functions:
+            if field.geography and not lookup_type in self.geography_functions:
+                raise ValueError('PostGIS geography type does not support the '
+                                 '"%s" lookup.' % lookup_type)
+
+            # See if a PostGIS geometry function matches the lookup type.
+            tmp = self.geometry_functions[lookup_type]
+
+            # Lookup types that are tuples take tuple arguments, e.g., 'relate' and
+            # distance lookups.
+            if isinstance(tmp, tuple):
+                # First element of tuple is the PostGISOperation instance, and the
+                # second element is either the type or a tuple of acceptable types
+                # that may passed in as further parameters for the lookup type.
+                op, arg_type = tmp
+
+                # Ensuring that a tuple _value_ was passed in from the user
+                if not isinstance(value, (tuple, list)):
+                    raise ValueError('Tuple required for `%s` lookup type.' % lookup_type)
+
+                # Geometry is first element of lookup tuple.
+                geom = value[0]
+
+                # Number of valid tuple parameters depends on the lookup type.
+                nparams = len(value)
+                if not self.num_params(lookup_type, nparams):
+                    raise ValueError('Incorrect number of parameters given for `%s` lookup type.' % lookup_type)
+
+                # Ensuring the argument type matches what we expect.
+                if not isinstance(value[1], arg_type):
+                    raise ValueError('Argument type should be %s, got %s instead.' % (arg_type, type(value[1])))
+
+                # For lookup type `relate`, the op instance is not yet created (has
+                # to be instantiated here to check the pattern parameter).
+                if lookup_type == 'relate':
+                    op = op(self.geom_func_prefix, value[1])
+                elif lookup_type in self.distance_functions and lookup_type != 'dwithin':
+                    if not field.geography and field.geodetic(self.connection):
+                        # Geodetic distances are only availble from Points to
+                        # PointFields on PostGIS 1.4 and below.
+                        if not self.connection.ops.geography:
+                            if field.geom_type != 'POINT':
+                                raise ValueError('PostGIS spherical operations are only valid on PointFields.')
+
+                            if str(geom.geom_type) != 'Point':
+                                raise ValueError('PostGIS geometry distance parameter is required to be of type Point.')
+
+                        # Setting up the geodetic operation appropriately.
+                        if nparams == 3 and value[2] == 'spheroid':
+                            op = op['spheroid']
+                        else:
+                            op = op['sphere']
+                    else:
+                        op = op['cartesian']
+            else:
+                op = tmp
+                geom = value
+
+            # Calling the `as_sql` function on the operation instance.
+            return op.as_sql(geo_col, self.get_geom_placeholder(field, geom))
+
+        elif lookup_type == 'isnull':
+            # Handling 'isnull' lookup type
+            return "%s IS %sNULL" % (geo_col, (not value and 'NOT ' or ''))
+
+        raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
+
+    def spatial_aggregate_sql(self, agg):
+        """
+        Returns the spatial aggregate SQL template and function for the
+        given Aggregate instance.
+        """
+        agg_name = agg.__class__.__name__
+        if not self.check_aggregate_support(agg):
+            raise NotImplementedError('%s spatial aggregate is not implmented for this backend.' % agg_name)
+        agg_name = agg_name.lower()
+        if agg_name == 'union': agg_name += 'agg'
+        sql_template = '%(function)s(%(field)s)'
+        sql_function = getattr(self, agg_name)
+        return sql_template, sql_function
+
+    # Routines for getting the OGC-compliant models.
+    def geometry_columns(self):
+        from django.contrib.gis.db.backends.postgis.models import GeometryColumns
+        return GeometryColumns
+
+    def spatial_ref_sys(self):
+        from django.contrib.gis.db.backends.postgis.models import SpatialRefSys
+        return SpatialRefSys
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/spatialite/adapter.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,8 @@
+from django.db.backends.sqlite3.base import Database
+from django.contrib.gis.db.backends.adapter import WKTAdapter
+
+class SpatiaLiteAdapter(WKTAdapter):
+    "SQLite adaptor for geometry objects."
+    def __conform__(self, protocol):
+        if protocol is Database.PrepareProtocol:
+            return str(self)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/spatialite/base.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,77 @@
+from ctypes.util import find_library
+from django.conf import settings
+
+from django.core.exceptions import ImproperlyConfigured
+from django.db.backends.sqlite3.base import *
+from django.db.backends.sqlite3.base import DatabaseWrapper as SqliteDatabaseWrapper, \
+    _sqlite_extract, _sqlite_date_trunc, _sqlite_regexp
+from django.contrib.gis.db.backends.spatialite.client import SpatiaLiteClient
+from django.contrib.gis.db.backends.spatialite.creation import SpatiaLiteCreation
+from django.contrib.gis.db.backends.spatialite.introspection import SpatiaLiteIntrospection
+from django.contrib.gis.db.backends.spatialite.operations import SpatiaLiteOperations
+
+class DatabaseWrapper(SqliteDatabaseWrapper):
+    def __init__(self, *args, **kwargs):
+        # Before we get too far, make sure pysqlite 2.5+ is installed.
+        if Database.version_info < (2, 5, 0):
+            raise ImproperlyConfigured('Only versions of pysqlite 2.5+ are '
+                                       'compatible with SpatiaLite and GeoDjango.')
+
+        # Trying to find the location of the SpatiaLite library.
+        # Here we are figuring out the path to the SpatiaLite library
+        # (`libspatialite`). If it's not in the system library path (e.g., it
+        # cannot be found by `ctypes.util.find_library`), then it may be set
+        # manually in the settings via the `SPATIALITE_LIBRARY_PATH` setting.
+        self.spatialite_lib = getattr(settings, 'SPATIALITE_LIBRARY_PATH',
+                                      find_library('spatialite'))
+        if not self.spatialite_lib:
+            raise ImproperlyConfigured('Unable to locate the SpatiaLite library. '
+                                       'Make sure it is in your library path, or set '
+                                       'SPATIALITE_LIBRARY_PATH in your settings.'
+                                       )
+        super(DatabaseWrapper, self).__init__(*args, **kwargs)
+        self.ops = SpatiaLiteOperations(self)
+        self.client = SpatiaLiteClient(self)
+        self.creation = SpatiaLiteCreation(self)
+        self.introspection = SpatiaLiteIntrospection(self)
+
+    def _cursor(self):
+        if self.connection is None:
+            ## The following is the same as in django.db.backends.sqlite3.base ##
+            settings_dict = self.settings_dict
+            if not settings_dict['NAME']:
+                raise ImproperlyConfigured("Please fill out the database NAME in the settings module before using the database.")
+            kwargs = {
+                'database': settings_dict['NAME'],
+                'detect_types': Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES,
+            }
+            kwargs.update(settings_dict['OPTIONS'])
+            self.connection = Database.connect(**kwargs)
+            # Register extract, date_trunc, and regexp functions.
+            self.connection.create_function("django_extract", 2, _sqlite_extract)
+            self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc)
+            self.connection.create_function("regexp", 2, _sqlite_regexp)
+            connection_created.send(sender=self.__class__)
+
+            ## From here on, customized for GeoDjango ##
+
+            # Enabling extension loading on the SQLite connection.
+            try:
+                self.connection.enable_load_extension(True)
+            except AttributeError:
+                raise ImproperlyConfigured('The pysqlite library does not support C extension loading. '
+                                           'Both SQLite and pysqlite must be configured to allow '
+                                           'the loading of extensions to use SpatiaLite.'
+                                           )
+
+            # Loading the SpatiaLite library extension on the connection, and returning
+            # the created cursor.
+            cur = self.connection.cursor(factory=SQLiteCursorWrapper)
+            try:
+                cur.execute("SELECT load_extension(%s)", (self.spatialite_lib,))
+            except Exception, msg:
+                raise ImproperlyConfigured('Unable to load the SpatiaLite library extension '
+                                           '"%s" because: %s' % (self.spatialite_lib, msg))
+            return cur
+        else:
+            return self.connection.cursor(factory=SQLiteCursorWrapper)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/spatialite/client.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,5 @@
+from django.db.backends.sqlite3.client import DatabaseClient
+
+class SpatiaLiteClient(DatabaseClient):
+    executable_name = 'spatialite'
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/spatialite/creation.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,96 @@
+import os
+from django.conf import settings
+from django.core.exceptions import ImproperlyConfigured
+from django.core.management import call_command
+from django.db.backends.sqlite3.creation import DatabaseCreation
+
+class SpatiaLiteCreation(DatabaseCreation):
+
+    def create_test_db(self, verbosity=1, autoclobber=False):
+        """
+        Creates a test database, prompting the user for confirmation if the
+        database already exists. Returns the name of the test database created.
+
+        This method is overloaded to load up the SpatiaLite initialization
+        SQL prior to calling the `syncdb` command.
+        """
+        if verbosity >= 1:
+            print "Creating test database '%s'..." % self.connection.alias
+
+        test_database_name = self._create_test_db(verbosity, autoclobber)
+
+        self.connection.close()
+
+        self.connection.settings_dict["NAME"] = test_database_name
+        can_rollback = self._rollback_works()
+        self.connection.settings_dict["SUPPORTS_TRANSACTIONS"] = can_rollback
+        # Need to load the SpatiaLite initialization SQL before running `syncdb`.
+        self.load_spatialite_sql()
+        call_command('syncdb', verbosity=verbosity, interactive=False, database=self.connection.alias)
+
+        if settings.CACHE_BACKEND.startswith('db://'):
+            from django.core.cache import parse_backend_uri
+            _, cache_name, _ = parse_backend_uri(settings.CACHE_BACKEND)
+            call_command('createcachetable', cache_name)
+
+        # Get a cursor (even though we don't need one yet). This has
+        # the side effect of initializing the test database.
+        cursor = self.connection.cursor()
+
+        return test_database_name
+
+    def sql_indexes_for_field(self, model, f, style):
+        "Return any spatial index creation SQL for the field."
+        from django.contrib.gis.db.models.fields import GeometryField
+
+        output = super(SpatiaLiteCreation, self).sql_indexes_for_field(model, f, style)
+
+        if isinstance(f, GeometryField):
+            gqn = self.connection.ops.geo_quote_name
+            qn = self.connection.ops.quote_name
+            db_table = model._meta.db_table
+
+            output.append(style.SQL_KEYWORD('SELECT ') +
+                          style.SQL_TABLE('AddGeometryColumn') + '(' +
+                          style.SQL_TABLE(gqn(db_table)) + ', ' +
+                          style.SQL_FIELD(gqn(f.column)) + ', ' +
+                          style.SQL_FIELD(str(f.srid)) + ', ' +
+                          style.SQL_COLTYPE(gqn(f.geom_type)) + ', ' +
+                          style.SQL_KEYWORD(str(f.dim)) + ', ' +
+                          style.SQL_KEYWORD(str(int(not f.null))) +
+                          ');')
+
+            if f.spatial_index:
+                output.append(style.SQL_KEYWORD('SELECT ') +
+                              style.SQL_TABLE('CreateSpatialIndex') + '(' +
+                              style.SQL_TABLE(gqn(db_table)) + ', ' +
+                              style.SQL_FIELD(gqn(f.column)) + ');')
+
+        return output
+
+    def load_spatialite_sql(self):
+        """
+        This routine loads up the SpatiaLite SQL file.
+        """
+        # Getting the location of the SpatiaLite SQL file, and confirming
+        # it exists.
+        spatialite_sql = self.spatialite_init_file()
+        if not os.path.isfile(spatialite_sql):
+            raise ImproperlyConfigured('Could not find the required SpatiaLite initialization '
+                                       'SQL file (necessary for testing): %s' % spatialite_sql)
+
+        # Opening up the SpatiaLite SQL initialization file and executing
+        # as a script.
+        sql_fh = open(spatialite_sql, 'r')
+        try:
+            cur = self.connection._cursor()
+            cur.executescript(sql_fh.read())
+        finally:
+            sql_fh.close()
+
+    def spatialite_init_file(self):
+        # SPATIALITE_SQL may be placed in settings to tell GeoDjango
+        # to use a specific path to the SpatiaLite initilization SQL.
+        return getattr(settings, 'SPATIALITE_SQL',
+                       'init_spatialite-%s.%s.sql' %
+                       self.connection.ops.spatial_version[:2])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/spatialite/introspection.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,51 @@
+from django.contrib.gis.gdal import OGRGeomType
+from django.db.backends.sqlite3.introspection import DatabaseIntrospection, FlexibleFieldLookupDict
+
+class GeoFlexibleFieldLookupDict(FlexibleFieldLookupDict):
+    """
+    Sublcass that includes updates the `base_data_types_reverse` dict
+    for geometry field types.
+    """
+    base_data_types_reverse = FlexibleFieldLookupDict.base_data_types_reverse.copy()
+    base_data_types_reverse.update(
+        {'point' : 'GeometryField',
+         'linestring' : 'GeometryField',
+         'polygon' : 'GeometryField',
+         'multipoint' : 'GeometryField',
+         'multilinestring' : 'GeometryField',
+         'multipolygon' : 'GeometryField',
+         'geometrycollection' : 'GeometryField',
+         })
+
+class SpatiaLiteIntrospection(DatabaseIntrospection):
+    data_types_reverse = GeoFlexibleFieldLookupDict()
+
+    def get_geometry_type(self, table_name, geo_col):
+        cursor = self.connection.cursor()
+        try:
+            # Querying the `geometry_columns` table to get additional metadata.
+            cursor.execute('SELECT "coord_dimension", "srid", "type" '
+                           'FROM "geometry_columns" '
+                           'WHERE "f_table_name"=%s AND "f_geometry_column"=%s',
+                           (table_name, geo_col))
+            row = cursor.fetchone()
+            if not row:
+                raise Exception('Could not find a geometry column for "%s"."%s"' %
+                                (table_name, geo_col))
+
+            # OGRGeomType does not require GDAL and makes it easy to convert
+            # from OGC geom type name to Django field.
+            field_type = OGRGeomType(row[2]).django
+
+            # Getting any GeometryField keyword arguments that are not the default.
+            dim = row[0]
+            srid = row[1]
+            field_params = {}
+            if srid != 4326:
+                field_params['srid'] = srid
+            if isinstance(dim, basestring) and 'Z' in dim:
+                field_params['dim'] = 3
+        finally:
+            cursor.close()
+
+        return field_type, field_params
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/spatialite/models.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,60 @@
+"""
+ The GeometryColumns and SpatialRefSys models for the SpatiaLite backend.
+"""
+from django.db import models
+from django.contrib.gis.db.backends.base import SpatialRefSysMixin
+
+class GeometryColumns(models.Model):
+    """
+    The 'geometry_columns' table from SpatiaLite.
+    """
+    f_table_name = models.CharField(max_length=256)
+    f_geometry_column = models.CharField(max_length=256)
+    type = models.CharField(max_length=30)
+    coord_dimension = models.IntegerField()
+    srid = models.IntegerField(primary_key=True)
+    spatial_index_enabled = models.IntegerField()
+
+    class Meta:
+        db_table = 'geometry_columns'
+        managed = False
+
+    @classmethod
+    def table_name_col(cls):
+        """
+        Returns the name of the metadata column used to store the
+        the feature table name.
+        """
+        return 'f_table_name'
+
+    @classmethod
+    def geom_col_name(cls):
+        """
+        Returns the name of the metadata column used to store the
+        the feature geometry column.
+        """
+        return 'f_geometry_column'
+
+    def __unicode__(self):
+        return "%s.%s - %dD %s field (SRID: %d)" % \
+               (self.f_table_name, self.f_geometry_column,
+                self.coord_dimension, self.type, self.srid)
+
+class SpatialRefSys(models.Model, SpatialRefSysMixin):
+    """
+    The 'spatial_ref_sys' table from SpatiaLite.
+    """
+    srid = models.IntegerField(primary_key=True)
+    auth_name = models.CharField(max_length=256)
+    auth_srid = models.IntegerField()
+    ref_sys_name = models.CharField(max_length=256)
+    proj4text = models.CharField(max_length=2048)
+
+    @property
+    def wkt(self):
+        from django.contrib.gis.gdal import SpatialReference
+        return SpatialReference(self.proj4text).wkt
+
+    class Meta:
+        db_table = 'spatial_ref_sys'
+        managed = False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/spatialite/operations.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,343 @@
+import re
+from decimal import Decimal
+
+from django.contrib.gis.db.backends.base import BaseSpatialOperations
+from django.contrib.gis.db.backends.util import SpatialOperation, SpatialFunction
+from django.contrib.gis.db.backends.spatialite.adapter import SpatiaLiteAdapter
+from django.contrib.gis.geometry.backend import Geometry
+from django.contrib.gis.measure import Distance
+from django.core.exceptions import ImproperlyConfigured
+from django.db.backends.sqlite3.base import DatabaseOperations
+from django.db.utils import DatabaseError
+
+class SpatiaLiteOperator(SpatialOperation):
+    "For SpatiaLite operators (e.g. `&&`, `~`)."
+    def __init__(self, operator):
+        super(SpatiaLiteOperator, self).__init__(operator=operator)
+
+class SpatiaLiteFunction(SpatialFunction):
+    "For SpatiaLite function calls."
+    def __init__(self, function, **kwargs):
+        super(SpatiaLiteFunction, self).__init__(function, **kwargs)
+
+class SpatiaLiteFunctionParam(SpatiaLiteFunction):
+    "For SpatiaLite functions that take another parameter."
+    sql_template = '%(function)s(%(geo_col)s, %(geometry)s, %%s)'
+
+class SpatiaLiteDistance(SpatiaLiteFunction):
+    "For SpatiaLite distance operations."
+    dist_func = 'Distance'
+    sql_template = '%(function)s(%(geo_col)s, %(geometry)s) %(operator)s %%s'
+
+    def __init__(self, operator):
+        super(SpatiaLiteDistance, self).__init__(self.dist_func,
+                                                 operator=operator)
+
+class SpatiaLiteRelate(SpatiaLiteFunctionParam):
+    "For SpatiaLite Relate(<geom>, <pattern>) calls."
+    pattern_regex = re.compile(r'^[012TF\*]{9}$')
+    def __init__(self, pattern):
+        if not self.pattern_regex.match(pattern):
+            raise ValueError('Invalid intersection matrix pattern "%s".' % pattern)
+        super(SpatiaLiteRelate, self).__init__('Relate')
+
+# Valid distance types and substitutions
+dtypes = (Decimal, Distance, float, int, long)
+def get_dist_ops(operator):
+    "Returns operations for regular distances; spherical distances are not currently supported."
+    return (SpatiaLiteDistance(operator),)
+
+class SpatiaLiteOperations(DatabaseOperations, BaseSpatialOperations):
+    compiler_module = 'django.contrib.gis.db.models.sql.compiler'
+    name = 'spatialite'
+    spatialite = True
+    version_regex = re.compile(r'^(?P<major>\d)\.(?P<minor1>\d)\.(?P<minor2>\d+)')
+    valid_aggregates = dict([(k, None) for k in ('Extent', 'Union')])
+
+    Adapter = SpatiaLiteAdapter
+    Adaptor = Adapter # Backwards-compatibility alias.
+
+    area = 'Area'
+    centroid = 'Centroid'
+    contained = 'MbrWithin'
+    difference = 'Difference'
+    distance = 'Distance'
+    envelope = 'Envelope'
+    intersection = 'Intersection'
+    length = 'GLength' # OpenGis defines Length, but this conflicts with an SQLite reserved keyword
+    num_geom = 'NumGeometries'
+    num_points = 'NumPoints'
+    point_on_surface = 'PointOnSurface'
+    scale = 'ScaleCoords'
+    svg = 'AsSVG'
+    sym_difference = 'SymDifference'
+    transform = 'Transform'
+    translate = 'ShiftCoords'
+    union = 'GUnion' # OpenGis defines Union, but this conflicts with an SQLite reserved keyword
+    unionagg = 'GUnion'
+
+    from_text = 'GeomFromText'
+    from_wkb = 'GeomFromWKB'
+    select = 'AsText(%s)'
+
+    geometry_functions = {
+        'equals' : SpatiaLiteFunction('Equals'),
+        'disjoint' : SpatiaLiteFunction('Disjoint'),
+        'touches' : SpatiaLiteFunction('Touches'),
+        'crosses' : SpatiaLiteFunction('Crosses'),
+        'within' : SpatiaLiteFunction('Within'),
+        'overlaps' : SpatiaLiteFunction('Overlaps'),
+        'contains' : SpatiaLiteFunction('Contains'),
+        'intersects' : SpatiaLiteFunction('Intersects'),
+        'relate' : (SpatiaLiteRelate, basestring),
+        # Retruns true if B's bounding box completely contains A's bounding box.
+        'contained' : SpatiaLiteFunction('MbrWithin'),
+        # Returns true if A's bounding box completely contains B's bounding box.
+        'bbcontains' : SpatiaLiteFunction('MbrContains'),
+        # Returns true if A's bounding box overlaps B's bounding box.
+        'bboverlaps' : SpatiaLiteFunction('MbrOverlaps'),
+        # These are implemented here as synonyms for Equals
+        'same_as' : SpatiaLiteFunction('Equals'),
+        'exact' : SpatiaLiteFunction('Equals'),
+        }
+
+    distance_functions = {
+        'distance_gt' : (get_dist_ops('>'), dtypes),
+        'distance_gte' : (get_dist_ops('>='), dtypes),
+        'distance_lt' : (get_dist_ops('<'), dtypes),
+        'distance_lte' : (get_dist_ops('<='), dtypes),
+        }
+    geometry_functions.update(distance_functions)
+
+    def __init__(self, connection):
+        super(DatabaseOperations, self).__init__()
+        self.connection = connection
+
+        # Determine the version of the SpatiaLite library.
+        try:
+            vtup = self.spatialite_version_tuple()
+            version = vtup[1:]
+            if version < (2, 3, 0):
+                raise ImproperlyConfigured('GeoDjango only supports SpatiaLite versions '
+                                           '2.3.0 and above')
+            self.spatial_version = version
+        except ImproperlyConfigured:
+            raise
+        except Exception, msg:
+            raise ImproperlyConfigured('Cannot determine the SpatiaLite version for the "%s" '
+                                       'database (error was "%s").  Was the SpatiaLite initialization '
+                                       'SQL loaded on this database?' %
+                                       (self.connection.settings_dict['NAME'], msg))
+
+        # Creating the GIS terms dictionary.
+        gis_terms = ['isnull']
+        gis_terms += self.geometry_functions.keys()
+        self.gis_terms = dict([(term, None) for term in gis_terms])
+
+    def check_aggregate_support(self, aggregate):
+        """
+        Checks if the given aggregate name is supported (that is, if it's
+        in `self.valid_aggregates`).
+        """
+        agg_name = aggregate.__class__.__name__
+        return agg_name in self.valid_aggregates
+
+    def convert_geom(self, wkt, geo_field):
+        """
+        Converts geometry WKT returned from a SpatiaLite aggregate.
+        """
+        if wkt:
+            return Geometry(wkt, geo_field.srid)
+        else:
+            return None
+
+    def geo_db_type(self, f):
+        """
+        Returns None because geometry columnas are added via the
+        `AddGeometryColumn` stored procedure on SpatiaLite.
+        """
+        return None
+
+    def get_distance(self, f, value, lookup_type):
+        """
+        Returns the distance parameters for the given geometry field,
+        lookup value, and lookup type.  SpatiaLite only supports regular
+        cartesian-based queries (no spheroid/sphere calculations for point
+        geometries like PostGIS).
+        """
+        if not value:
+            return []
+        value = value[0]
+        if isinstance(value, Distance):
+            if f.geodetic(self.connection):
+                raise ValueError('SpatiaLite does not support distance queries on '
+                                 'geometry fields with a geodetic coordinate system. '
+                                 'Distance objects; use a numeric value of your '
+                                 'distance in degrees instead.')
+            else:
+                dist_param = getattr(value, Distance.unit_attname(f.units_name(self.connection)))
+        else:
+            dist_param = value
+        return [dist_param]
+
+    def get_geom_placeholder(self, f, value):
+        """
+        Provides a proper substitution value for Geometries that are not in the
+        SRID of the field.  Specifically, this routine will substitute in the
+        Transform() and GeomFromText() function call(s).
+        """
+        def transform_value(value, srid):
+            return not (value is None or value.srid == srid)
+        if hasattr(value, 'expression'):
+            if transform_value(value, f.srid):
+                placeholder = '%s(%%s, %s)' % (self.transform, f.srid)
+            else:
+                placeholder = '%s'
+            # No geometry value used for F expression, substitue in
+            # the column name instead.
+            return placeholder % '%s.%s' % tuple(map(self.quote_name, value.cols[value.expression]))
+        else:
+            if transform_value(value, f.srid):
+                # Adding Transform() to the SQL placeholder.
+                return '%s(%s(%%s,%s), %s)' % (self.transform, self.from_text, value.srid, f.srid)
+            else:
+                return '%s(%%s,%s)' % (self.from_text, f.srid)
+
+    def _get_spatialite_func(self, func):
+        """
+        Helper routine for calling SpatiaLite functions and returning
+        their result.
+        """
+        cursor = self.connection._cursor()
+        try:
+            try:
+                cursor.execute('SELECT %s' % func)
+                row = cursor.fetchone()
+            except:
+                # Responsibility of caller to perform error handling.
+                raise
+        finally:
+            cursor.close()
+        return row[0]
+
+    def geos_version(self):
+        "Returns the version of GEOS used by SpatiaLite as a string."
+        return self._get_spatialite_func('geos_version()')
+
+    def proj4_version(self):
+        "Returns the version of the PROJ.4 library used by SpatiaLite."
+        return self._get_spatialite_func('proj4_version()')
+
+    def spatialite_version(self):
+        "Returns the SpatiaLite library version as a string."
+        return self._get_spatialite_func('spatialite_version()')
+
+    def spatialite_version_tuple(self):
+        """
+        Returns the SpatiaLite version as a tuple (version string, major,
+        minor, subminor).
+        """
+        # Getting the SpatiaLite version.
+        try:
+            version = self.spatialite_version()
+        except DatabaseError:
+            # The `spatialite_version` function first appeared in version 2.3.1
+            # of SpatiaLite, so doing a fallback test for 2.3.0 (which is
+            # used by popular Debian/Ubuntu packages).
+            version = None
+            try:
+                tmp = self._get_spatialite_func("X(GeomFromText('POINT(1 1)'))")
+                if tmp == 1.0: version = '2.3.0'
+            except DatabaseError:
+                pass
+            # If no version string defined, then just re-raise the original
+            # exception.
+            if version is None: raise
+
+        m = self.version_regex.match(version)
+        if m:
+            major = int(m.group('major'))
+            minor1 = int(m.group('minor1'))
+            minor2 = int(m.group('minor2'))
+        else:
+            raise Exception('Could not parse SpatiaLite version string: %s' % version)
+
+        return (version, major, minor1, minor2)
+
+    def spatial_aggregate_sql(self, agg):
+        """
+        Returns the spatial aggregate SQL template and function for the
+        given Aggregate instance.
+        """
+        agg_name = agg.__class__.__name__
+        if not self.check_aggregate_support(agg):
+            raise NotImplementedError('%s spatial aggregate is not implmented for this backend.' % agg_name)
+        agg_name = agg_name.lower()
+        if agg_name == 'union': agg_name += 'agg'
+        sql_template = self.select % '%(function)s(%(field)s)'
+        sql_function = getattr(self, agg_name)
+        return sql_template, sql_function
+
+    def spatial_lookup_sql(self, lvalue, lookup_type, value, field, qn):
+        """
+        Returns the SpatiaLite-specific SQL for the given lookup value
+        [a tuple of (alias, column, db_type)], lookup type, lookup
+        value, the model field, and the quoting function.
+        """
+        alias, col, db_type = lvalue
+
+        # Getting the quoted field as `geo_col`.
+        geo_col = '%s.%s' % (qn(alias), qn(col))
+
+        if lookup_type in self.geometry_functions:
+            # See if a SpatiaLite geometry function matches the lookup type.
+            tmp = self.geometry_functions[lookup_type]
+
+            # Lookup types that are tuples take tuple arguments, e.g., 'relate' and
+            # distance lookups.
+            if isinstance(tmp, tuple):
+                # First element of tuple is the SpatiaLiteOperation instance, and the
+                # second element is either the type or a tuple of acceptable types
+                # that may passed in as further parameters for the lookup type.
+                op, arg_type = tmp
+
+                # Ensuring that a tuple _value_ was passed in from the user
+                if not isinstance(value, (tuple, list)):
+                    raise ValueError('Tuple required for `%s` lookup type.' % lookup_type)
+
+                # Geometry is first element of lookup tuple.
+                geom = value[0]
+
+                # Number of valid tuple parameters depends on the lookup type.
+                if len(value) != 2:
+                    raise ValueError('Incorrect number of parameters given for `%s` lookup type.' % lookup_type)
+
+                # Ensuring the argument type matches what we expect.
+                if not isinstance(value[1], arg_type):
+                    raise ValueError('Argument type should be %s, got %s instead.' % (arg_type, type(value[1])))
+
+                # For lookup type `relate`, the op instance is not yet created (has
+                # to be instantiated here to check the pattern parameter).
+                if lookup_type == 'relate':
+                    op = op(value[1])
+                elif lookup_type in self.distance_functions:
+                    op = op[0]
+            else:
+                op = tmp
+                geom = value
+            # Calling the `as_sql` function on the operation instance.
+            return op.as_sql(geo_col, self.get_geom_placeholder(field, geom))
+        elif lookup_type == 'isnull':
+            # Handling 'isnull' lookup type
+            return "%s IS %sNULL" % (geo_col, (not value and 'NOT ' or ''))
+
+        raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
+
+    # Routines for getting the OGC-compliant models.
+    def geometry_columns(self):
+        from django.contrib.gis.db.backends.spatialite.models import GeometryColumns
+        return GeometryColumns
+
+    def spatial_ref_sys(self):
+        from django.contrib.gis.db.backends.spatialite.models import SpatialRefSys
+        return SpatialRefSys
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/backends/util.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,70 @@
+"""
+A collection of utility routines and classes used by the spatial
+backends.
+"""
+
+def getstatusoutput(cmd):
+    """
+    Executes a shell command on the platform using subprocess.Popen and
+    return a tuple of the status and stdout output.
+    """
+    from subprocess import Popen, PIPE
+    # Set stdout and stderr to PIPE because we want to capture stdout and
+    # prevent stderr from displaying.
+    p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE)
+    # We use p.communicate() instead of p.wait() to avoid deadlocks if the
+    # output buffers exceed POSIX buffer size.
+    stdout, stderr = p.communicate()
+    return p.returncode, stdout.strip()
+
+def gqn(val):
+    """
+    The geographic quote name function; used for quoting tables and
+    geometries (they use single rather than the double quotes of the
+    backend quotename function).
+    """
+    if isinstance(val, basestring):
+        if isinstance(val, unicode): val = val.encode('ascii')
+        return "'%s'" % val
+    else:
+        return str(val)
+
+class SpatialOperation(object):
+    """
+    Base class for generating spatial SQL.
+    """
+    sql_template = '%(geo_col)s %(operator)s %(geometry)s'
+
+    def __init__(self, function='', operator='', result='', **kwargs):
+        self.function = function
+        self.operator = operator
+        self.result = result
+        self.extra = kwargs
+
+    def as_sql(self, geo_col, geometry='%s'):
+        return self.sql_template % self.params(geo_col, geometry)
+
+    def params(self, geo_col, geometry):
+        params = {'function' : self.function,
+                  'geo_col' : geo_col,
+                  'geometry' : geometry,
+                  'operator' : self.operator,
+                  'result' : self.result,
+                  }
+        params.update(self.extra)
+        return params
+
+class SpatialFunction(SpatialOperation):
+    """
+    Base class for generating spatial SQL related to a function.
+    """
+    sql_template = '%(function)s(%(geo_col)s, %(geometry)s)'
+
+    def __init__(self, func, result='', operator='', **kwargs):
+        # Getting the function prefix.
+        default = {'function' : func,
+                   'operator' : operator,
+                   'result' : result
+                   }
+        kwargs.update(default)
+        super(SpatialFunction, self).__init__(**kwargs)
--- a/web/lib/django/contrib/gis/db/models/aggregates.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/db/models/aggregates.py	Tue May 25 02:43:45 2010 +0200
@@ -1,31 +1,17 @@
 from django.db.models import Aggregate
-from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.gis.db.models.sql import GeomField
 
-class GeoAggregate(Aggregate):
-
-    def add_to_query(self, query, alias, col, source, is_summary):
-        if hasattr(source, 'geom_type'):
-            # Doing additional setup on the Query object for spatial aggregates.
-            aggregate = getattr(query.aggregates_module, self.name)
-            
-            # Adding a conversion class instance and any selection wrapping
-            # SQL (e.g., needed by Oracle).
-            if aggregate.conversion_class is GeomField:
-                query.extra_select_fields[alias] = GeomField()
-                if SpatialBackend.select:
-                    query.custom_select[alias] = SpatialBackend.select
-     
-        super(GeoAggregate, self).add_to_query(query, alias, col, source, is_summary)
-
-class Collect(GeoAggregate):
+class Collect(Aggregate):
     name = 'Collect'
 
-class Extent(GeoAggregate):
+class Extent(Aggregate):
     name = 'Extent'
 
-class MakeLine(GeoAggregate):
+class Extent3D(Aggregate):
+    name = 'Extent3D'
+
+class MakeLine(Aggregate):
     name = 'MakeLine'
 
-class Union(GeoAggregate):
+class Union(Aggregate):
     name = 'Union'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/models/fields.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,294 @@
+from django.db.models.fields import Field
+from django.db.models.sql.expressions import SQLEvaluator
+from django.utils.translation import ugettext_lazy as _
+from django.contrib.gis import forms
+from django.contrib.gis.db.models.proxy import GeometryProxy
+from django.contrib.gis.geometry.backend import Geometry, GeometryException
+
+# Local cache of the spatial_ref_sys table, which holds SRID data for each
+# spatial database alias. This cache exists so that the database isn't queried
+# for SRID info each time a distance query is constructed.
+_srid_cache = {}
+
+def get_srid_info(srid, connection):
+    """
+    Returns the units, unit name, and spheroid WKT associated with the
+    given SRID from the `spatial_ref_sys` (or equivalent) spatial database
+    table for the given database connection.  These results are cached.
+    """
+    global _srid_cache
+
+    try:
+        # The SpatialRefSys model for the spatial backend.
+        SpatialRefSys = connection.ops.spatial_ref_sys()
+    except NotImplementedError:
+        # No `spatial_ref_sys` table in spatial backend (e.g., MySQL).
+        return None, None, None
+
+    if not connection.alias in _srid_cache:
+        # Initialize SRID dictionary for database if it doesn't exist.
+        _srid_cache[connection.alias] = {}
+
+    if not srid in _srid_cache[connection.alias]:
+        # Use `SpatialRefSys` model to query for spatial reference info.
+        sr = SpatialRefSys.objects.using(connection.alias).get(srid=srid)
+        units, units_name = sr.units
+        spheroid = SpatialRefSys.get_spheroid(sr.wkt)
+        _srid_cache[connection.alias][srid] = (units, units_name, spheroid)
+
+    return _srid_cache[connection.alias][srid]
+
+class GeometryField(Field):
+    "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+
+    # The OpenGIS Geometry name.
+    geom_type = 'GEOMETRY'
+
+    # Geodetic units.
+    geodetic_units = ('Decimal Degree', 'degree')
+
+    description = _("The base GIS field -- maps to the OpenGIS Specification Geometry type.")
+
+    def __init__(self, verbose_name=None, srid=4326, spatial_index=True, dim=2,
+                 geography=False, **kwargs):
+        """
+        The initialization function for geometry fields.  Takes the following
+        as keyword arguments:
+
+        srid:
+         The spatial reference system identifier, an OGC standard.
+         Defaults to 4326 (WGS84).
+
+        spatial_index:
+         Indicates whether to create a spatial index.  Defaults to True.
+         Set this instead of 'db_index' for geographic fields since index
+         creation is different for geometry columns.
+
+        dim:
+         The number of dimensions for this geometry.  Defaults to 2.
+
+        extent:
+         Customize the extent, in a 4-tuple of WGS 84 coordinates, for the
+         geometry field entry in the `USER_SDO_GEOM_METADATA` table.  Defaults
+         to (-180.0, -90.0, 180.0, 90.0).
+
+        tolerance:
+         Define the tolerance, in meters, to use for the geometry field
+         entry in the `USER_SDO_GEOM_METADATA` table.  Defaults to 0.05.
+        """
+
+        # Setting the index flag with the value of the `spatial_index` keyword.
+        self.spatial_index = spatial_index
+
+        # Setting the SRID and getting the units.  Unit information must be
+        # easily available in the field instance for distance queries.
+        self.srid = srid
+
+        # Setting the dimension of the geometry field.
+        self.dim = dim
+
+        # Setting the verbose_name keyword argument with the positional
+        # first parameter, so this works like normal fields.
+        kwargs['verbose_name'] = verbose_name
+
+        # Is this a geography rather than a geometry column?
+        self.geography = geography
+
+        # Oracle-specific private attributes for creating the entrie in
+        # `USER_SDO_GEOM_METADATA`
+        self._extent = kwargs.pop('extent', (-180.0, -90.0, 180.0, 90.0))
+        self._tolerance = kwargs.pop('tolerance', 0.05)
+
+        super(GeometryField, self).__init__(**kwargs)
+
+    # The following functions are used to get the units, their name, and
+    # the spheroid corresponding to the SRID of the GeometryField.
+    def _get_srid_info(self, connection):
+        # Get attributes from `get_srid_info`.
+        self._units, self._units_name, self._spheroid = get_srid_info(self.srid, connection)
+
+    def spheroid(self, connection):
+        if not hasattr(self, '_spheroid'):
+            self._get_srid_info(connection)
+        return self._spheroid
+
+    def units(self, connection):
+        if not hasattr(self, '_units'):
+            self._get_srid_info(connection)
+        return self._units
+
+    def units_name(self, connection):
+        if not hasattr(self, '_units_name'):
+            self._get_srid_info(connection)
+        return self._units_name
+
+    ### Routines specific to GeometryField ###
+    def geodetic(self, connection):
+        """
+        Returns true if this field's SRID corresponds with a coordinate
+        system that uses non-projected units (e.g., latitude/longitude).
+        """
+        return self.units_name(connection) in self.geodetic_units
+
+    def get_distance(self, value, lookup_type, connection):
+        """
+        Returns a distance number in units of the field.  For example, if
+        `D(km=1)` was passed in and the units of the field were in meters,
+        then 1000 would be returned.
+        """
+        return connection.ops.get_distance(self, value, lookup_type)
+
+    def get_prep_value(self, value):
+        """
+        Spatial lookup values are either a parameter that is (or may be
+        converted to) a geometry, or a sequence of lookup values that
+        begins with a geometry.  This routine will setup the geometry
+        value properly, and preserve any other lookup parameters before
+        returning to the caller.
+        """
+        if isinstance(value, SQLEvaluator):
+            return value
+        elif isinstance(value, (tuple, list)):
+            geom = value[0]
+            seq_value = True
+        else:
+            geom = value
+            seq_value = False
+
+        # When the input is not a GEOS geometry, attempt to construct one
+        # from the given string input.
+        if isinstance(geom, Geometry):
+            pass
+        elif isinstance(geom, basestring) or hasattr(geom, '__geo_interface__'):
+            try:
+                geom = Geometry(geom)
+            except GeometryException:
+                raise ValueError('Could not create geometry from lookup value.')
+        else:
+            raise ValueError('Cannot use object with type %s for a geometry lookup parameter.' % type(geom).__name__)
+
+        # Assigning the SRID value.
+        geom.srid = self.get_srid(geom)
+
+        if seq_value:
+            lookup_val = [geom]
+            lookup_val.extend(value[1:])
+            return tuple(lookup_val)
+        else:
+            return geom
+
+    def get_srid(self, geom):
+        """
+        Returns the default SRID for the given geometry, taking into account
+        the SRID set for the field.  For example, if the input geometry
+        has no SRID, then that of the field will be returned.
+        """
+        gsrid = geom.srid # SRID of given geometry.
+        if gsrid is None or self.srid == -1 or (gsrid == -1 and self.srid != -1):
+            return self.srid
+        else:
+            return gsrid
+
+    ### Routines overloaded from Field ###
+    def contribute_to_class(self, cls, name):
+        super(GeometryField, self).contribute_to_class(cls, name)
+
+        # Setup for lazy-instantiated Geometry object.
+        setattr(cls, self.attname, GeometryProxy(Geometry, self))
+
+    def db_type(self, connection):
+        return connection.ops.geo_db_type(self)
+
+    def formfield(self, **kwargs):
+        defaults = {'form_class' : forms.GeometryField,
+                    'null' : self.null,
+                    'geom_type' : self.geom_type,
+                    'srid' : self.srid,
+                    }
+        defaults.update(kwargs)
+        return super(GeometryField, self).formfield(**defaults)
+
+    def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False):
+        """
+        Prepare for the database lookup, and return any spatial parameters
+        necessary for the query.  This includes wrapping any geometry
+        parameters with a backend-specific adapter and formatting any distance
+        parameters into the correct units for the coordinate system of the
+        field.
+        """
+        if lookup_type in connection.ops.gis_terms:
+            # special case for isnull lookup
+            if lookup_type == 'isnull':
+                return []
+
+            # Populating the parameters list, and wrapping the Geometry
+            # with the Adapter of the spatial backend.
+            if isinstance(value, (tuple, list)):
+                params = [connection.ops.Adapter(value[0])]
+                if lookup_type in connection.ops.distance_functions:
+                    # Getting the distance parameter in the units of the field.
+                    params += self.get_distance(value[1:], lookup_type, connection)
+                elif lookup_type in connection.ops.truncate_params:
+                    # Lookup is one where SQL parameters aren't needed from the
+                    # given lookup value.
+                    pass
+                else:
+                    params += value[1:]
+            elif isinstance(value, SQLEvaluator):
+                params = []
+            else:
+                params = [connection.ops.Adapter(value)]
+
+            return params
+        else:
+            raise ValueError('%s is not a valid spatial lookup for %s.' %
+                             (lookup_type, self.__class__.__name__))
+
+    def get_prep_lookup(self, lookup_type, value):
+        if lookup_type == 'isnull':
+            return bool(value)
+        else:
+            return self.get_prep_value(value)
+
+    def get_db_prep_save(self, value, connection):
+        "Prepares the value for saving in the database."
+        if value is None:
+            return None
+        else:
+            return connection.ops.Adapter(self.get_prep_value(value))
+
+    def get_placeholder(self, value, connection):
+        """
+        Returns the placeholder for the geometry column for the
+        given value.
+        """
+        return connection.ops.get_geom_placeholder(self, value)
+
+# The OpenGIS Geometry Type Fields
+class PointField(GeometryField):
+    geom_type = 'POINT'
+    description = _("Point")
+
+class LineStringField(GeometryField):
+    geom_type = 'LINESTRING'
+    description = _("Line string")
+
+class PolygonField(GeometryField):
+    geom_type = 'POLYGON'
+    description = _("Polygon")
+
+class MultiPointField(GeometryField):
+    geom_type = 'MULTIPOINT'
+    description = _("Multi-point")
+
+class MultiLineStringField(GeometryField):
+    geom_type = 'MULTILINESTRING'
+    description = _("Multi-line string")
+
+class MultiPolygonField(GeometryField):
+    geom_type = 'MULTIPOLYGON'
+    description = _("Multi polygon")
+
+class GeometryCollectionField(GeometryField):
+    geom_type = 'GEOMETRYCOLLECTION'
+    description = _("Geometry collection")
--- a/web/lib/django/contrib/gis/db/models/fields/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,278 +0,0 @@
-from django.contrib.gis import forms
-# Getting the SpatialBackend container and the geographic quoting method.
-from django.contrib.gis.db.backend import SpatialBackend, gqn
-# GeometryProxy, GEOS, and Distance imports.
-from django.contrib.gis.db.models.proxy import GeometryProxy
-from django.contrib.gis.measure import Distance
-
-# Local cache of the spatial_ref_sys table, which holds static data.
-# This exists so that we don't have to hit the database each time.
-_srid_cache = {}
-
-def get_srid_info(srid):
-    """
-    Returns the units, unit name, and spheroid WKT associated with the
-    given SRID from the `spatial_ref_sys` (or equivalent) spatial database
-    table.  These results are cached.
-    """
-    global _srid_cache
-
-    if SpatialBackend.mysql:
-        return None, None, None
-
-    if not srid in _srid_cache:
-        from django.contrib.gis.models import SpatialRefSys
-        sr = SpatialRefSys.objects.get(srid=srid)
-        units, units_name = sr.units
-        spheroid = SpatialRefSys.get_spheroid(sr.wkt)
-        _srid_cache[srid] = (units, units_name, spheroid)
-
-    return _srid_cache[srid]
-
-class GeometryField(SpatialBackend.Field):
-    "The base GIS field -- maps to the OpenGIS Specification Geometry type."
-
-    # The OpenGIS Geometry name.
-    geom_type = 'GEOMETRY'
-
-    # Geodetic units.
-    geodetic_units = ('Decimal Degree', 'degree')
-
-    def __init__(self, verbose_name=None, srid=4326, spatial_index=True, dim=2, **kwargs):
-        """
-        The initialization function for geometry fields.  Takes the following
-        as keyword arguments:
-
-        srid:
-         The spatial reference system identifier, an OGC standard.
-         Defaults to 4326 (WGS84).
-
-        spatial_index:
-         Indicates whether to create a spatial index.  Defaults to True.
-         Set this instead of 'db_index' for geographic fields since index
-         creation is different for geometry columns.
-
-        dim:
-         The number of dimensions for this geometry.  Defaults to 2.
-        """
-
-        # Setting the index flag with the value of the `spatial_index` keyword.
-        self.spatial_index = spatial_index
-
-        # Setting the SRID and getting the units.  Unit information must be
-        # easily available in the field instance for distance queries.
-        self.srid = srid
-
-        # Setting the dimension of the geometry field.
-        self.dim = dim
-
-        # Setting the verbose_name keyword argument with the positional
-        # first parameter, so this works like normal fields.
-        kwargs['verbose_name'] = verbose_name
-
-        super(GeometryField, self).__init__(**kwargs) # Calling the parent initializtion function
-
-    # The following properties are used to get the units, their name, and
-    # the spheroid corresponding to the SRID of the GeometryField.
-    def _get_srid_info(self):
-        # Get attributes from `get_srid_info`.
-        self._units, self._units_name, self._spheroid = get_srid_info(self.srid)
-
-    @property
-    def spheroid(self):
-        if not hasattr(self, '_spheroid'):
-            self._get_srid_info()
-        return self._spheroid
-
-    @property
-    def units(self):
-        if not hasattr(self, '_units'):
-            self._get_srid_info()
-        return self._units
-
-    @property
-    def units_name(self):
-        if not hasattr(self, '_units_name'):
-            self._get_srid_info()
-        return self._units_name
-
-    # The following properties are for formerly private variables that are now
-    # public for GeometryField.  Because of their use by third-party applications,
-    # a deprecation warning is issued to notify them to use new attribute name.
-    def _deprecated_warning(self, old_name, new_name):
-        from warnings import warn
-        warn('The `%s` attribute name is deprecated, please update your code to use `%s` instead.' %
-             (old_name, new_name))
-
-    @property
-    def _geom(self):
-        self._deprecated_warning('_geom', 'geom_type')
-        return self.geom_type
-
-    @property
-    def _index(self):
-        self._deprecated_warning('_index', 'spatial_index')
-        return self.spatial_index
-
-    @property
-    def _srid(self):
-        self._deprecated_warning('_srid', 'srid')
-        return self.srid
-
-    ### Routines specific to GeometryField ###
-    @property
-    def geodetic(self):
-        """
-        Returns true if this field's SRID corresponds with a coordinate
-        system that uses non-projected units (e.g., latitude/longitude).
-        """
-        return self.units_name in self.geodetic_units
-
-    def get_distance(self, dist_val, lookup_type):
-        """
-        Returns a distance number in units of the field.  For example, if
-        `D(km=1)` was passed in and the units of the field were in meters,
-        then 1000 would be returned.
-        """
-        # Getting the distance parameter and any options.
-        if len(dist_val) == 1: dist, option = dist_val[0], None
-        else: dist, option = dist_val
-
-        if isinstance(dist, Distance):
-            if self.geodetic:
-                # Won't allow Distance objects w/DWithin lookups on PostGIS.
-                if SpatialBackend.postgis and lookup_type == 'dwithin':
-                    raise TypeError('Only numeric values of degree units are allowed on geographic DWithin queries.')
-                # Spherical distance calculation parameter should be in meters.
-                dist_param = dist.m
-            else:
-                dist_param = getattr(dist, Distance.unit_attname(self.units_name))
-        else:
-            # Assuming the distance is in the units of the field.
-            dist_param = dist
-
-        if SpatialBackend.postgis and self.geodetic and lookup_type != 'dwithin' and option == 'spheroid':
-            # On PostGIS, by default `ST_distance_sphere` is used; but if the
-            # accuracy of `ST_distance_spheroid` is needed than the spheroid
-            # needs to be passed to the SQL stored procedure.
-            return [gqn(self._spheroid), dist_param]
-        else:
-            return [dist_param]
-
-    def get_geometry(self, value):
-        """
-        Retrieves the geometry, setting the default SRID from the given
-        lookup parameters.
-        """
-        if isinstance(value, (tuple, list)):
-            geom = value[0]
-        else:
-            geom = value
-
-        # When the input is not a GEOS geometry, attempt to construct one
-        # from the given string input.
-        if isinstance(geom, SpatialBackend.Geometry):
-            pass
-        elif isinstance(geom, basestring):
-            try:
-                geom = SpatialBackend.Geometry(geom)
-            except SpatialBackend.GeometryException:
-                raise ValueError('Could not create geometry from lookup value: %s' % str(value))
-        else:
-            raise TypeError('Cannot use parameter of `%s` type as lookup parameter.' % type(value))
-
-        # Assigning the SRID value.
-        geom.srid = self.get_srid(geom)
-
-        return geom
-
-    def get_srid(self, geom):
-        """
-        Returns the default SRID for the given geometry, taking into account
-        the SRID set for the field.  For example, if the input geometry
-        has no SRID, then that of the field will be returned.
-        """
-        gsrid = geom.srid # SRID of given geometry.
-        if gsrid is None or self.srid == -1 or (gsrid == -1 and self.srid != -1):
-            return self.srid
-        else:
-            return gsrid
-
-    ### Routines overloaded from Field ###
-    def contribute_to_class(self, cls, name):
-        super(GeometryField, self).contribute_to_class(cls, name)
-
-        # Setup for lazy-instantiated Geometry object.
-        setattr(cls, self.attname, GeometryProxy(SpatialBackend.Geometry, self))
-
-    def formfield(self, **kwargs):
-        defaults = {'form_class' : forms.GeometryField,
-                    'null' : self.null,
-                    'geom_type' : self.geom_type,
-                    'srid' : self.srid,
-                    }
-        defaults.update(kwargs)
-        return super(GeometryField, self).formfield(**defaults)
-
-    def get_db_prep_lookup(self, lookup_type, value):
-        """
-        Returns the spatial WHERE clause and associated parameters for the
-        given lookup type and value.  The value will be prepared for database
-        lookup (e.g., spatial transformation SQL will be added if necessary).
-        """
-        if lookup_type in SpatialBackend.gis_terms:
-            # special case for isnull lookup
-            if lookup_type == 'isnull': return [], []
-
-            # Get the geometry with SRID; defaults SRID to that of the field
-            # if it is None.
-            geom = self.get_geometry(value)
-
-            # Getting the WHERE clause list and the associated params list. The params
-            # list is populated with the Adaptor wrapping the Geometry for the
-            # backend.  The WHERE clause list contains the placeholder for the adaptor
-            # (e.g. any transformation SQL).
-            where = [self.get_placeholder(geom)]
-            params = [SpatialBackend.Adaptor(geom)]
-
-            if isinstance(value, (tuple, list)):
-                if lookup_type in SpatialBackend.distance_functions:
-                    # Getting the distance parameter in the units of the field.
-                    where += self.get_distance(value[1:], lookup_type)
-                elif lookup_type in SpatialBackend.limited_where:
-                    pass
-                else:
-                    # Otherwise, making sure any other parameters are properly quoted.
-                    where += map(gqn, value[1:])
-            return where, params
-        else:
-            raise TypeError("Field has invalid lookup: %s" % lookup_type)
-
-    def get_db_prep_save(self, value):
-        "Prepares the value for saving in the database."
-        if value is None:
-            return None
-        else:
-            return SpatialBackend.Adaptor(self.get_geometry(value))
-
-# The OpenGIS Geometry Type Fields
-class PointField(GeometryField):
-    geom_type = 'POINT'
-
-class LineStringField(GeometryField):
-    geom_type = 'LINESTRING'
-
-class PolygonField(GeometryField):
-    geom_type = 'POLYGON'
-
-class MultiPointField(GeometryField):
-    geom_type = 'MULTIPOINT'
-
-class MultiLineStringField(GeometryField):
-    geom_type = 'MULTILINESTRING'
-
-class MultiPolygonField(GeometryField):
-    geom_type = 'MULTIPOLYGON'
-
-class GeometryCollectionField(GeometryField):
-    geom_type = 'GEOMETRYCOLLECTION'
--- a/web/lib/django/contrib/gis/db/models/manager.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/db/models/manager.py	Tue May 25 02:43:45 2010 +0200
@@ -1,6 +1,5 @@
 from django.db.models.manager import Manager
 from django.contrib.gis.db.models.query import GeoQuerySet
-from django.contrib.gis.db.models.sql.subqueries import insert_query
 
 class GeoManager(Manager):
     "Overrides Manager to return Geographic QuerySets."
@@ -11,7 +10,7 @@
     use_for_related_fields = True
 
     def get_query_set(self):
-        return GeoQuerySet(model=self.model)
+        return GeoQuerySet(self.model, using=self._db)
 
     def area(self, *args, **kwargs):
         return self.get_query_set().area(*args, **kwargs)
@@ -34,6 +33,15 @@
     def extent(self, *args, **kwargs):
         return self.get_query_set().extent(*args, **kwargs)
 
+    def extent3d(self, *args, **kwargs):
+        return self.get_query_set().extent3d(*args, **kwargs)
+
+    def force_rhr(self, *args, **kwargs):
+        return self.get_query_set().force_rhr(*args, **kwargs)
+
+    def geohash(self, *args, **kwargs):
+        return self.get_query_set().geohash(*args, **kwargs)
+
     def geojson(self, *args, **kwargs):
         return self.get_query_set().geojson(*args, **kwargs)
 
@@ -51,7 +59,7 @@
 
     def make_line(self, *args, **kwargs):
         return self.get_query_set().make_line(*args, **kwargs)
-    
+
     def mem_size(self, *args, **kwargs):
         return self.get_query_set().mem_size(*args, **kwargs)
 
@@ -67,6 +75,9 @@
     def point_on_surface(self, *args, **kwargs):
         return self.get_query_set().point_on_surface(*args, **kwargs)
 
+    def reverse_geom(self, *args, **kwargs):
+        return self.get_query_set().reverse_geom(*args, **kwargs)
+
     def scale(self, *args, **kwargs):
         return self.get_query_set().scale(*args, **kwargs)
 
@@ -90,6 +101,3 @@
 
     def unionagg(self, *args, **kwargs):
         return self.get_query_set().unionagg(*args, **kwargs)
-
-    def _insert(self, values, **kwargs):
-        return insert_query(self.model, values, **kwargs)
--- a/web/lib/django/contrib/gis/db/models/proxy.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/db/models/proxy.py	Tue May 25 02:43:45 2010 +0200
@@ -1,42 +1,44 @@
 """
- The GeometryProxy object, allows for lazy-geometries.  The proxy uses
- Python descriptors for instantiating and setting Geometry objects
- corresponding to geographic model fields.
+The GeometryProxy object, allows for lazy-geometries.  The proxy uses
+Python descriptors for instantiating and setting Geometry objects
+corresponding to geographic model fields.
 
- Thanks to Robert Coup for providing this functionality (see #4322).
+Thanks to Robert Coup for providing this functionality (see #4322).
 """
 
-from types import NoneType, StringType, UnicodeType
-
-class GeometryProxy(object): 
-    def __init__(self, klass, field): 
+class GeometryProxy(object):
+    def __init__(self, klass, field):
         """
-        Proxy initializes on the given Geometry class (not an instance) and 
+        Proxy initializes on the given Geometry class (not an instance) and
         the GeometryField.
         """
-        self._field = field 
+        self._field = field
         self._klass = klass
-     
-    def __get__(self, obj, type=None): 
+
+    def __get__(self, obj, type=None):
         """
         This accessor retrieves the geometry, initializing it using the geometry
-        class specified during initialization and the HEXEWKB value of the field.  
+        class specified during initialization and the HEXEWKB value of the field.
         Currently, only GEOS or OGR geometries are supported.
         """
+        if obj is None:
+            # Accessed on a class, not an instance
+            return self
+
         # Getting the value of the field.
-        geom_value = obj.__dict__[self._field.attname] 
-        
-        if isinstance(geom_value, self._klass): 
+        geom_value = obj.__dict__[self._field.attname]
+
+        if isinstance(geom_value, self._klass):
             geom = geom_value
         elif (geom_value is None) or (geom_value==''):
             geom = None
-        else: 
+        else:
             # Otherwise, a Geometry object is built using the field's contents,
             # and the model's corresponding attribute is set.
             geom = self._klass(geom_value)
-            setattr(obj, self._field.attname, geom) 
-        return geom 
-     
+            setattr(obj, self._field.attname, geom)
+        return geom
+
     def __set__(self, obj, value):
         """
         This accessor sets the proxied geometry with the geometry class
@@ -45,18 +47,18 @@
         """
         # The OGC Geometry type of the field.
         gtype = self._field.geom_type
-        
+
         # The geometry type must match that of the field -- unless the
         # general GeometryField is used.
         if isinstance(value, self._klass) and (str(value.geom_type).upper() == gtype or gtype == 'GEOMETRY'):
             # Assigning the SRID to the geometry.
             if value.srid is None: value.srid = self._field.srid
-        elif isinstance(value, (NoneType, StringType, UnicodeType)):
-            # Set with None, WKT, or HEX
+        elif value is None or isinstance(value, (basestring, buffer)):
+            # Set with None, WKT, HEX, or WKB
             pass
         else:
             raise TypeError('cannot set %s GeometryProxy with value of type: %s' % (obj.__class__.__name__, type(value)))
 
         # Setting the objects dictionary with the value, and returning.
-        obj.__dict__[self._field.attname] = value 
-        return value 
+        obj.__dict__[self._field.attname] = value
+        return value
--- a/web/lib/django/contrib/gis/db/models/query.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/db/models/query.py	Tue May 25 02:43:45 2010 +0200
@@ -1,20 +1,19 @@
-from django.core.exceptions import ImproperlyConfigured
-from django.db import connection
+from django.db import connections
 from django.db.models.query import QuerySet, Q, ValuesQuerySet, ValuesListQuerySet
 
-from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.gis.db.models import aggregates
-from django.contrib.gis.db.models.fields import get_srid_info, GeometryField, PointField
+from django.contrib.gis.db.models.fields import get_srid_info, GeometryField, PointField, LineStringField
 from django.contrib.gis.db.models.sql import AreaField, DistanceField, GeomField, GeoQuery, GeoWhereNode
+from django.contrib.gis.geometry.backend import Geometry
 from django.contrib.gis.measure import Area, Distance
 
 class GeoQuerySet(QuerySet):
     "The Geographic QuerySet."
 
     ### Methods overloaded from QuerySet ###
-    def __init__(self, model=None, query=None):
-        super(GeoQuerySet, self).__init__(model=model, query=query)
-        self.query = query or GeoQuery(self.model, connection)
+    def __init__(self, model=None, query=None, using=None):
+        super(GeoQuerySet, self).__init__(model=model, query=query, using=using)
+        self.query = query or GeoQuery(self.model)
 
     def values(self, *fields):
         return self._clone(klass=GeoValuesQuerySet, setup=True, _fields=fields)
@@ -42,14 +41,16 @@
              'geo_field' : geo_field,
              'setup' : False,
              }
-        if SpatialBackend.oracle:
+        connection = connections[self.db]
+        backend = connection.ops
+        if backend.oracle:
             s['procedure_fmt'] = '%(geo_col)s,%(tolerance)s'
             s['procedure_args']['tolerance'] = tolerance
             s['select_field'] = AreaField('sq_m') # Oracle returns area in units of meters.
-        elif SpatialBackend.postgis or SpatialBackend.spatialite:
-            if not geo_field.geodetic:
+        elif backend.postgis or backend.spatialite:
+            if not geo_field.geodetic(connection):
                 # Getting the area units of the geographic field.
-                s['select_field'] = AreaField(Area.unit_attname(geo_field.units_name))
+                s['select_field'] = AreaField(Area.unit_attname(geo_field.units_name(connection)))
             else:
                 # TODO: Do we want to support raw number areas for geodetic fields?
                 raise Exception('Area on geodetic coordinate systems not supported.')
@@ -110,6 +111,23 @@
         """
         return self._spatial_aggregate(aggregates.Extent, **kwargs)
 
+    def extent3d(self, **kwargs):
+        """
+        Returns the aggregate extent, in 3D, of the features in the
+        GeoQuerySet. It is returned as a 6-tuple, comprising:
+          (xmin, ymin, zmin, xmax, ymax, zmax).
+        """
+        return self._spatial_aggregate(aggregates.Extent3D, **kwargs)
+
+    def force_rhr(self, **kwargs):
+        """
+        Returns a modified version of the Polygon/MultiPolygon in which
+        all of the vertices follow the Right-Hand-Rule.  By default,
+        this is attached as the `force_rhr` attribute on each element
+        of the GeoQuerySet.
+        """
+        return self._geom_attribute('force_rhr', **kwargs)
+
     def geojson(self, precision=8, crs=False, bbox=False, **kwargs):
         """
         Returns a GeoJSON representation of the geomtry field in a `geojson`
@@ -119,16 +137,16 @@
         the coordinate reference system and the bounding box to be included
         in the GeoJSON representation of the geometry.
         """
-        if not SpatialBackend.postgis or not SpatialBackend.geojson:
+        backend = connections[self.db].ops
+        if not backend.geojson:
             raise NotImplementedError('Only PostGIS 1.3.4+ supports GeoJSON serialization.')
-        
+
         if not isinstance(precision, (int, long)):
             raise TypeError('Precision keyword must be set with an integer.')
-        
+
         # Setting the options flag -- which depends on which version of
         # PostGIS we're using.
-        major, minor1, minor2 = SpatialBackend.version
-        if major >=1 and (minor1 >= 4):
+        if backend.spatial_version >= (1, 4, 0):
             options = 0
             if crs and bbox: options = 3
             elif bbox: options = 1
@@ -138,23 +156,37 @@
             if crs and bbox: options = 3
             elif crs: options = 1
             elif bbox: options = 2
-        s = {'desc' : 'GeoJSON', 
+        s = {'desc' : 'GeoJSON',
              'procedure_args' : {'precision' : precision, 'options' : options},
              'procedure_fmt' : '%(geo_col)s,%(precision)s,%(options)s',
              }
         return self._spatial_attribute('geojson', s, **kwargs)
 
+    def geohash(self, precision=20, **kwargs):
+        """
+        Returns a GeoHash representation of the given field in a `geohash`
+        attribute on each element of the GeoQuerySet.
+
+        The `precision` keyword may be used to custom the number of
+        _characters_ used in the output GeoHash, the default is 20.
+        """
+        s = {'desc' : 'GeoHash', 
+             'procedure_args': {'precision': precision},
+             'procedure_fmt': '%(geo_col)s,%(precision)s',
+             }
+        return self._spatial_attribute('geohash', s, **kwargs)
+
     def gml(self, precision=8, version=2, **kwargs):
         """
         Returns GML representation of the given field in a `gml` attribute
         on each element of the GeoQuerySet.
         """
+        backend = connections[self.db].ops
         s = {'desc' : 'GML', 'procedure_args' : {'precision' : precision}}
-        if SpatialBackend.postgis:
+        if backend.postgis:
             # PostGIS AsGML() aggregate function parameter order depends on the
             # version -- uggh.
-            major, minor1, minor2 = SpatialBackend.version
-            if major >= 1 and (minor1 > 3 or (minor1 == 3 and minor2 > 1)):
+            if backend.spatial_version > (1, 3, 1):
                 procedure_fmt = '%(version)s,%(geo_col)s,%(precision)s'
             else:
                 procedure_fmt = '%(geo_col)s,%(precision)s,%(version)s'
@@ -235,12 +267,23 @@
         """
         return self._geom_attribute('point_on_surface', **kwargs)
 
+    def reverse_geom(self, **kwargs):
+        """
+        Reverses the coordinate order of the geometry, and attaches as a
+        `reverse` attribute on each element of this GeoQuerySet.
+        """
+        s = {'select_field' : GeomField(),}
+        kwargs.setdefault('model_att', 'reverse_geom')
+        if connections[self.db].ops.oracle:
+            s['geo_field_type'] = LineStringField
+        return self._spatial_attribute('reverse', s, **kwargs)
+
     def scale(self, x, y, z=0.0, **kwargs):
         """
         Scales the geometry to a new size by multiplying the ordinates
         with the given x,y,z scale factors.
         """
-        if SpatialBackend.spatialite:
+        if connections[self.db].ops.spatialite:
             if z != 0.0:
                 raise NotImplementedError('SpatiaLite does not support 3D scaling.')
             s = {'procedure_fmt' : '%(geo_col)s,%(x)s,%(y)s',
@@ -300,10 +343,10 @@
                         terms of relative moves (rather than absolute).
 
          `precision` => May be used to set the maximum number of decimal
-                        digits used in output (defaults to 8).        
+                        digits used in output (defaults to 8).
         """
         relative = int(bool(relative))
-        if not isinstance(precision, (int, long)): 
+        if not isinstance(precision, (int, long)):
             raise TypeError('SVG precision keyword argument must be an integer.')
         s = {'desc' : 'SVG',
              'procedure_fmt' : '%(geo_col)s,%(rel)s,%(precision)s',
@@ -325,7 +368,7 @@
         Translates the geometry to a new location using the given numeric
         parameters as offsets.
         """
-        if SpatialBackend.spatialite:
+        if connections[self.db].ops.spatialite:
             if z != 0.0:
                 raise NotImplementedError('SpatiaLite does not support 3D translation.')
             s = {'procedure_fmt' : '%(geo_col)s,%(x)s,%(y)s',
@@ -360,7 +403,7 @@
 
         # Setting the key for the field's column with the custom SELECT SQL to
         # override the geometry column returned from the database.
-        custom_sel = '%s(%s, %s)' % (SpatialBackend.transform, geo_col, srid)
+        custom_sel = '%s(%s, %s)' % (connections[self.db].ops.transform, geo_col, srid)
         # TODO: Should we have this as an alias?
         # custom_sel = '(%s(%s, %s)) AS %s' % (SpatialBackend.transform, geo_col, srid, qn(geo_field.name))
         self.query.transformed_srid = srid # So other GeoQuerySet methods
@@ -388,9 +431,13 @@
         Performs set up for executing the spatial function.
         """
         # Does the spatial backend support this?
-        func = getattr(SpatialBackend, att, False)
+        connection = connections[self.db]
+        func = getattr(connection.ops, att, False)
         if desc is None: desc = att
-        if not func: raise ImproperlyConfigured('%s stored procedure not available.' % desc)
+        if not func:
+            raise NotImplementedError('%s stored procedure not available on '
+                                      'the %s backend.' %
+                                      (desc, connection.ops.name))
 
         # Initializing the procedure arguments.
         procedure_args = {'function' : func}
@@ -434,7 +481,7 @@
         # Adding any keyword parameters for the Aggregate object. Oracle backends
         # in particular need an additional `tolerance` parameter.
         agg_kwargs = {}
-        if SpatialBackend.oracle: agg_kwargs['tolerance'] = tolerance
+        if connections[self.db].ops.oracle: agg_kwargs['tolerance'] = tolerance
 
         # Calling the QuerySet.aggregate, and returning only the value of the aggregate.
         return self.aggregate(geoagg=aggregate(agg_col, **agg_kwargs))['geoagg']
@@ -471,9 +518,13 @@
         settings.setdefault('procedure_fmt', '%(geo_col)s')
         settings.setdefault('select_params', [])
 
+        connection = connections[self.db]
+        backend = connection.ops
+
         # Performing setup for the spatial column, unless told not to.
         if settings.get('setup', True):
-            default_args, geo_field = self._spatial_setup(att, desc=settings['desc'], field_name=field_name)
+            default_args, geo_field = self._spatial_setup(att, desc=settings['desc'], field_name=field_name,
+                                                          geo_field_type=settings.get('geo_field_type', None))
             for k, v in default_args.iteritems(): settings['procedure_args'].setdefault(k, v)
         else:
             geo_field = settings['geo_field']
@@ -483,13 +534,16 @@
 
         # Special handling for any argument that is a geometry.
         for name in settings['geom_args']:
-            # Using the field's get_db_prep_lookup() to get any needed
-            # transformation SQL -- we pass in a 'dummy' `contains` lookup.
-            where, params = geo_field.get_db_prep_lookup('contains', settings['procedure_args'][name])
+            # Using the field's get_placeholder() routine to get any needed
+            # transformation SQL.
+            geom = geo_field.get_prep_value(settings['procedure_args'][name])
+            params = geo_field.get_db_prep_lookup('contains', geom, connection=connection)
+            geom_placeholder = geo_field.get_placeholder(geom, connection)
+
             # Replacing the procedure format with that of any needed
             # transformation SQL.
             old_fmt = '%%(%s)s' % name
-            new_fmt = where[0] % '%%s'
+            new_fmt = geom_placeholder % '%%s'
             settings['procedure_fmt'] = settings['procedure_fmt'].replace(old_fmt, new_fmt)
             settings['select_params'].extend(params)
 
@@ -499,8 +553,10 @@
         # If the result of this function needs to be converted.
         if settings.get('select_field', False):
             sel_fld = settings['select_field']
-            if isinstance(sel_fld, GeomField) and SpatialBackend.select:
-                self.query.custom_select[model_att] = SpatialBackend.select
+            if isinstance(sel_fld, GeomField) and backend.select:
+                self.query.custom_select[model_att] = backend.select
+            if connection.ops.oracle:
+                sel_fld.empty_strings_allowed = False
             self.query.extra_select_fields[model_att] = sel_fld
 
         # Finally, setting the extra selection attribute with
@@ -519,36 +575,47 @@
         # If geodetic defaulting distance attribute to meters (Oracle and
         # PostGIS spherical distances return meters).  Otherwise, use the
         # units of the geometry field.
-        if geo_field.geodetic:
+        connection = connections[self.db]
+        geodetic = geo_field.geodetic(connection)
+        geography = geo_field.geography
+
+        if geodetic:
             dist_att = 'm'
         else:
-            dist_att = Distance.unit_attname(geo_field.units_name)
+            dist_att = Distance.unit_attname(geo_field.units_name(connection))
 
-        # Shortcut booleans for what distance function we're using.
+        # Shortcut booleans for what distance function we're using and
+        # whether the geometry field is 3D.
         distance = func == 'distance'
         length = func == 'length'
         perimeter = func == 'perimeter'
         if not (distance or length or perimeter):
             raise ValueError('Unknown distance function: %s' % func)
+        geom_3d = geo_field.dim == 3
 
         # The field's get_db_prep_lookup() is used to get any
         # extra distance parameters.  Here we set up the
         # parameters that will be passed in to field's function.
         lookup_params = [geom or 'POINT (0 0)', 0]
 
+        # Getting the spatial backend operations.
+        backend = connection.ops
+
         # If the spheroid calculation is desired, either by the `spheroid`
         # keyword or when calculating the length of geodetic field, make
         # sure the 'spheroid' distance setting string is passed in so we
         # get the correct spatial stored procedure.
-        if spheroid or (SpatialBackend.postgis and geo_field.geodetic and length):
+        if spheroid or (backend.postgis and geodetic and
+                        (not geography) and length):
             lookup_params.append('spheroid')
-        where, params = geo_field.get_db_prep_lookup('distance_lte', lookup_params)
+        lookup_params = geo_field.get_prep_value(lookup_params)
+        params = geo_field.get_db_prep_lookup('distance_lte', lookup_params, connection=connection)
 
         # The `geom_args` flag is set to true if a geometry parameter was
         # passed in.
         geom_args = bool(geom)
 
-        if SpatialBackend.oracle:
+        if backend.oracle:
             if distance:
                 procedure_fmt = '%(geo_col)s,%(geom)s,%(tolerance)s'
             elif length or perimeter:
@@ -558,12 +625,10 @@
             # Getting whether this field is in units of degrees since the field may have
             # been transformed via the `transform` GeoQuerySet method.
             if self.query.transformed_srid:
-                u, unit_name, s = get_srid_info(self.query.transformed_srid)
+                u, unit_name, s = get_srid_info(self.query.transformed_srid, connection)
                 geodetic = unit_name in geo_field.geodetic_units
-            else:
-                geodetic = geo_field.geodetic
 
-            if SpatialBackend.spatialite and geodetic:
+            if backend.spatialite and geodetic:
                 raise ValueError('SQLite does not support linear distance calculations on geodetic coordinate systems.')
 
             if distance:
@@ -573,14 +638,14 @@
                     # (which will transform to the original SRID of the field rather
                     #  than to what was transformed to).
                     geom_args = False
-                    procedure_fmt = '%s(%%(geo_col)s, %s)' % (SpatialBackend.transform, self.query.transformed_srid)
+                    procedure_fmt = '%s(%%(geo_col)s, %s)' % (backend.transform, self.query.transformed_srid)
                     if geom.srid is None or geom.srid == self.query.transformed_srid:
                         # If the geom parameter srid is None, it is assumed the coordinates
                         # are in the transformed units.  A placeholder is used for the
                         # geometry parameter.  `GeomFromText` constructor is also needed
                         # to wrap geom placeholder for SpatiaLite.
-                        if SpatialBackend.spatialite:
-                            procedure_fmt += ', %s(%%%%s, %s)' % (SpatialBackend.from_text, self.query.transformed_srid)
+                        if backend.spatialite:
+                            procedure_fmt += ', %s(%%%%s, %s)' % (backend.from_text, self.query.transformed_srid)
                         else:
                             procedure_fmt += ', %%s'
                     else:
@@ -588,38 +653,46 @@
                         # so wrapping the geometry placeholder in transformation SQL.
                         # SpatiaLite also needs geometry placeholder wrapped in `GeomFromText`
                         # constructor.
-                        if SpatialBackend.spatialite:
-                            procedure_fmt += ', %s(%s(%%%%s, %s), %s)' % (SpatialBackend.transform, SpatialBackend.from_text,
+                        if backend.spatialite:
+                            procedure_fmt += ', %s(%s(%%%%s, %s), %s)' % (backend.transform, backend.from_text,
                                                                           geom.srid, self.query.transformed_srid)
                         else:
-                            procedure_fmt += ', %s(%%%%s, %s)' % (SpatialBackend.transform, self.query.transformed_srid)
+                            procedure_fmt += ', %s(%%%%s, %s)' % (backend.transform, self.query.transformed_srid)
                 else:
                     # `transform()` was not used on this GeoQuerySet.
                     procedure_fmt  = '%(geo_col)s,%(geom)s'
 
-                if geodetic:
+                if not geography and geodetic:
                     # Spherical distance calculation is needed (because the geographic
                     # field is geodetic). However, the PostGIS ST_distance_sphere/spheroid()
                     # procedures may only do queries from point columns to point geometries
                     # some error checking is required.
-                    if not isinstance(geo_field, PointField):
-                        raise ValueError('Spherical distance calculation only supported on PointFields.')
-                    if not str(SpatialBackend.Geometry(buffer(params[0].wkb)).geom_type) == 'Point':
-                        raise ValueError('Spherical distance calculation only supported with Point Geometry parameters')
+                    if not backend.geography:
+                        if not isinstance(geo_field, PointField):
+                            raise ValueError('Spherical distance calculation only supported on PointFields.')
+                        if not str(Geometry(buffer(params[0].ewkb)).geom_type) == 'Point':
+                            raise ValueError('Spherical distance calculation only supported with Point Geometry parameters')
                     # The `function` procedure argument needs to be set differently for
                     # geodetic distance calculations.
                     if spheroid:
                         # Call to distance_spheroid() requires spheroid param as well.
-                        procedure_fmt += ',%(spheroid)s'
-                        procedure_args.update({'function' : SpatialBackend.distance_spheroid, 'spheroid' : where[1]})
+                        procedure_fmt += ",'%(spheroid)s'"
+                        procedure_args.update({'function' : backend.distance_spheroid, 'spheroid' : params[1]})
                     else:
-                        procedure_args.update({'function' : SpatialBackend.distance_sphere})
+                        procedure_args.update({'function' : backend.distance_sphere})
             elif length or perimeter:
                 procedure_fmt = '%(geo_col)s'
-                if geodetic and length:
-                    # There's no `length_sphere`
-                    procedure_fmt += ',%(spheroid)s'
-                    procedure_args.update({'function' : SpatialBackend.length_spheroid, 'spheroid' : where[1]})
+                if not geography and geodetic and length:
+                    # There's no `length_sphere`, and `length_spheroid` also
+                    # works on 3D geometries.
+                    procedure_fmt += ",'%(spheroid)s'"
+                    procedure_args.update({'function' : backend.length_spheroid, 'spheroid' : params[1]})
+                elif geom_3d and backend.postgis:
+                    # Use 3D variants of perimeter and length routines on PostGIS.
+                    if perimeter:
+                        procedure_args.update({'function' : backend.perimeter3d})
+                    elif length:
+                        procedure_args.update({'function' : backend.length3d})
 
         # Setting up the settings for `_spatial_attribute`.
         s = {'select_field' : DistanceField(dist_att),
@@ -634,7 +707,7 @@
         elif geom:
             # The geometry is passed in as a parameter because we handled
             # transformation conditions in this routine.
-            s['select_params'] = [SpatialBackend.Adaptor(geom)]
+            s['select_params'] = [backend.Adapter(geom)]
         return self._spatial_attribute(func, s, **kwargs)
 
     def _geom_attribute(self, func, tolerance=0.05, **kwargs):
@@ -643,7 +716,7 @@
         Geometry attribute (e.g., `centroid`, `point_on_surface`).
         """
         s = {'select_field' : GeomField(),}
-        if SpatialBackend.oracle:
+        if connections[self.db].ops.oracle:
             s['procedure_fmt'] = '%(geo_col)s,%(tolerance)s'
             s['procedure_args'] = {'tolerance' : tolerance}
         return self._spatial_attribute(func, s, **kwargs)
@@ -660,7 +733,7 @@
              'procedure_fmt' : '%(geo_col)s,%(geom)s',
              'procedure_args' : {'geom' : geom},
             }
-        if SpatialBackend.oracle:
+        if connections[self.db].ops.oracle:
             s['procedure_fmt'] += ',%(tolerance)s'
             s['procedure_args']['tolerance'] = tolerance
         return self._spatial_attribute(func, s, **kwargs)
@@ -677,16 +750,17 @@
             # If so, it'll have to be added to the select related information
             # (e.g., if 'location__point' was given as the field name).
             self.query.add_select_related([field_name])
-            self.query.pre_sql_setup()
+            compiler = self.query.get_compiler(self.db)
+            compiler.pre_sql_setup()
             rel_table, rel_col = self.query.related_select_cols[self.query.related_select_fields.index(geo_field)]
-            return self.query._field_column(geo_field, rel_table)
+            return compiler._field_column(geo_field, rel_table)
         elif not geo_field in opts.local_fields:
             # This geographic field is inherited from another model, so we have to
             # use the db table for the _parent_ model instead.
             tmp_fld, parent_model, direct, m2m = opts.get_field_by_name(geo_field.name)
-            return self.query._field_column(geo_field, parent_model._meta.db_table)
+            return self.query.get_compiler(self.db)._field_column(geo_field, parent_model._meta.db_table)
         else:
-            return self.query._field_column(geo_field)
+            return self.query.get_compiler(self.db)._field_column(geo_field)
 
 class GeoValuesQuerySet(ValuesQuerySet):
     def __init__(self, *args, **kwargs):
--- a/web/lib/django/contrib/gis/db/models/sql/aggregates.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/db/models/sql/aggregates.py	Tue May 25 02:43:45 2010 +0200
@@ -1,73 +1,10 @@
 from django.db.models.sql.aggregates import *
 from django.contrib.gis.db.models.fields import GeometryField
 from django.contrib.gis.db.models.sql.conversion import GeomField
-from django.contrib.gis.db.backend import SpatialBackend
-
-# Default SQL template for spatial aggregates.
-geo_template = '%(function)s(%(field)s)'
-
-# Default conversion functions for aggregates; will be overridden if implemented
-# for the spatial backend.
-def convert_extent(box):
-    raise NotImplementedError('Aggregate extent not implemented for this spatial backend.')
-
-def convert_geom(wkt, geo_field):
-    raise NotImplementedError('Aggregate method not implemented for this spatial backend.')
-
-if SpatialBackend.postgis:
-    def convert_extent(box):
-        # Box text will be something like "BOX(-90.0 30.0, -85.0 40.0)";
-        # parsing out and returning as a 4-tuple.
-        ll, ur = box[4:-1].split(',')
-        xmin, ymin = map(float, ll.split())
-        xmax, ymax = map(float, ur.split())
-        return (xmin, ymin, xmax, ymax)
-
-    def convert_geom(hex, geo_field):
-        if hex: return SpatialBackend.Geometry(hex)
-        else: return None
-elif SpatialBackend.oracle:
-    # Oracle spatial aggregates need a tolerance.
-    geo_template = '%(function)s(SDOAGGRTYPE(%(field)s,%(tolerance)s))'
-
-    def convert_extent(clob):
-        if clob:
-            # Generally, Oracle returns a polygon for the extent -- however,
-            # it can return a single point if there's only one Point in the
-            # table.
-            ext_geom = SpatialBackend.Geometry(clob.read())
-            gtype = str(ext_geom.geom_type)
-            if gtype == 'Polygon':
-                # Construct the 4-tuple from the coordinates in the polygon.
-                shell = ext_geom.shell
-                ll, ur = shell[0][:2], shell[2][:2]
-            elif gtype == 'Point':
-                ll = ext_geom.coords[:2]
-                ur = ll
-            else:
-                raise Exception('Unexpected geometry type returned for extent: %s' % gtype)
-            xmin, ymin = ll
-            xmax, ymax = ur
-            return (xmin, ymin, xmax, ymax)
-        else:
-            return None
-
-    def convert_geom(clob, geo_field):
-        if clob:
-            return SpatialBackend.Geometry(clob.read(), geo_field.srid)
-        else:
-            return None
-elif SpatialBackend.spatialite:
-    # SpatiaLite returns WKT.
-    def convert_geom(wkt, geo_field):
-        if wkt:
-            return SpatialBackend.Geometry(wkt, geo_field.srid)
-        else:
-            return None
 
 class GeoAggregate(Aggregate):
-    # Overriding the SQL template with the geographic one.
-    sql_template = geo_template
+    # Default SQL template for spatial aggregates.
+    sql_template = '%(function)s(%(field)s)'
 
     # Conversion class, if necessary.
     conversion_class = None
@@ -75,37 +12,50 @@
     # Flags for indicating the type of the aggregate.
     is_extent = False
 
-    def __init__(self, col, source=None, is_summary=False, **extra):
+    def __init__(self, col, source=None, is_summary=False, tolerance=0.05, **extra):
         super(GeoAggregate, self).__init__(col, source, is_summary, **extra)
 
-        if not self.is_extent and SpatialBackend.oracle:
-            self.extra.setdefault('tolerance', 0.05)
+        # Required by some Oracle aggregates.
+        self.tolerance = tolerance
 
         # Can't use geographic aggregates on non-geometry fields.
         if not isinstance(self.source, GeometryField):
             raise ValueError('Geospatial aggregates only allowed on geometry fields.')
 
-        # Making sure the SQL function is available for this spatial backend.
-        if not self.sql_function:
-            raise NotImplementedError('This aggregate functionality not implemented for your spatial backend.')
+    def as_sql(self, qn, connection):
+        "Return the aggregate, rendered as SQL."
+
+        if connection.ops.oracle:
+            self.extra['tolerance'] = self.tolerance
+
+        if hasattr(self.col, 'as_sql'):
+            field_name = self.col.as_sql(qn, connection)
+        elif isinstance(self.col, (list, tuple)):
+            field_name = '.'.join([qn(c) for c in self.col])
+        else:
+            field_name = self.col
+
+        sql_template, sql_function = connection.ops.spatial_aggregate_sql(self)
+
+        params = {
+            'function': sql_function,
+            'field': field_name
+        }
+        params.update(self.extra)
+
+        return sql_template % params
 
 class Collect(GeoAggregate):
-    conversion_class = GeomField
-    sql_function = SpatialBackend.collect
+    pass
 
 class Extent(GeoAggregate):
-    is_extent = True
-    sql_function = SpatialBackend.extent
+    is_extent = '2D'
 
-if SpatialBackend.oracle:
-    # Have to change Extent's attributes here for Oracle.
-    Extent.conversion_class = GeomField
-    Extent.sql_template = '%(function)s(%(field)s)'
+class Extent3D(GeoAggregate):
+    is_extent = '3D'
 
 class MakeLine(GeoAggregate):
-    conversion_class = GeomField
-    sql_function = SpatialBackend.make_line
+    pass
 
 class Union(GeoAggregate):
-    conversion_class = GeomField
-    sql_function = SpatialBackend.unionagg
+    pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/db/models/sql/compiler.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,276 @@
+from itertools import izip
+from django.db.backends.util import truncate_name
+from django.db.models.sql import compiler
+from django.db.models.sql.constants import TABLE_NAME
+from django.db.models.sql.query import get_proxied_model
+
+SQLCompiler = compiler.SQLCompiler
+
+class GeoSQLCompiler(compiler.SQLCompiler):
+
+    def get_columns(self, with_aliases=False):
+        """
+        Return the list of columns to use in the select statement. If no
+        columns have been specified, returns all columns relating to fields in
+        the model.
+
+        If 'with_aliases' is true, any column names that are duplicated
+        (without the table names) are given unique aliases. This is needed in
+        some cases to avoid ambiguitity with nested queries.
+
+        This routine is overridden from Query to handle customized selection of
+        geometry columns.
+        """
+        qn = self.quote_name_unless_alias
+        qn2 = self.connection.ops.quote_name
+        result = ['(%s) AS %s' % (self.get_extra_select_format(alias) % col[0], qn2(alias))
+                  for alias, col in self.query.extra_select.iteritems()]
+        aliases = set(self.query.extra_select.keys())
+        if with_aliases:
+            col_aliases = aliases.copy()
+        else:
+            col_aliases = set()
+        if self.query.select:
+            only_load = self.deferred_to_columns()
+            # This loop customized for GeoQuery.
+            for col, field in izip(self.query.select, self.query.select_fields):
+                if isinstance(col, (list, tuple)):
+                    alias, column = col
+                    table = self.query.alias_map[alias][TABLE_NAME]
+                    if table in only_load and col not in only_load[table]:
+                        continue
+                    r = self.get_field_select(field, alias, column)
+                    if with_aliases:
+                        if col[1] in col_aliases:
+                            c_alias = 'Col%d' % len(col_aliases)
+                            result.append('%s AS %s' % (r, c_alias))
+                            aliases.add(c_alias)
+                            col_aliases.add(c_alias)
+                        else:
+                            result.append('%s AS %s' % (r, qn2(col[1])))
+                            aliases.add(r)
+                            col_aliases.add(col[1])
+                    else:
+                        result.append(r)
+                        aliases.add(r)
+                        col_aliases.add(col[1])
+                else:
+                    result.append(col.as_sql(qn, self.connection))
+                    
+                    if hasattr(col, 'alias'):
+                        aliases.add(col.alias)
+                        col_aliases.add(col.alias)
+
+        elif self.query.default_cols:
+            cols, new_aliases = self.get_default_columns(with_aliases,
+                    col_aliases)
+            result.extend(cols)
+            aliases.update(new_aliases)
+
+        max_name_length = self.connection.ops.max_name_length()
+        result.extend([
+                '%s%s' % (
+                    self.get_extra_select_format(alias) % aggregate.as_sql(qn, self.connection),
+                    alias is not None
+                        and ' AS %s' % qn(truncate_name(alias, max_name_length))
+                        or ''
+                    )
+                for alias, aggregate in self.query.aggregate_select.items()
+        ])
+
+        # This loop customized for GeoQuery.
+        for (table, col), field in izip(self.query.related_select_cols, self.query.related_select_fields):
+            r = self.get_field_select(field, table, col)
+            if with_aliases and col in col_aliases:
+                c_alias = 'Col%d' % len(col_aliases)
+                result.append('%s AS %s' % (r, c_alias))
+                aliases.add(c_alias)
+                col_aliases.add(c_alias)
+            else:
+                result.append(r)
+                aliases.add(r)
+                col_aliases.add(col)
+
+        self._select_aliases = aliases
+        return result
+
+    def get_default_columns(self, with_aliases=False, col_aliases=None,
+                            start_alias=None, opts=None, as_pairs=False):
+        """
+        Computes the default columns for selecting every field in the base
+        model. Will sometimes be called to pull in related models (e.g. via
+        select_related), in which case "opts" and "start_alias" will be given
+        to provide a starting point for the traversal.
+
+        Returns a list of strings, quoted appropriately for use in SQL
+        directly, as well as a set of aliases used in the select statement (if
+        'as_pairs' is True, returns a list of (alias, col_name) pairs instead
+        of strings as the first component and None as the second component).
+
+        This routine is overridden from Query to handle customized selection of
+        geometry columns.
+        """
+        result = []
+        if opts is None:
+            opts = self.query.model._meta
+        aliases = set()
+        only_load = self.deferred_to_columns()
+        # Skip all proxy to the root proxied model
+        proxied_model = get_proxied_model(opts)
+
+        if start_alias:
+            seen = {None: start_alias}
+        for field, model in opts.get_fields_with_model():
+            if start_alias:
+                try:
+                    alias = seen[model]
+                except KeyError:
+                    if model is proxied_model:
+                        alias = start_alias
+                    else:
+                        link_field = opts.get_ancestor_link(model)
+                        alias = self.query.join((start_alias, model._meta.db_table,
+                                link_field.column, model._meta.pk.column))
+                    seen[model] = alias
+            else:
+                # If we're starting from the base model of the queryset, the
+                # aliases will have already been set up in pre_sql_setup(), so
+                # we can save time here.
+                alias = self.query.included_inherited_models[model]
+            table = self.query.alias_map[alias][TABLE_NAME]
+            if table in only_load and field.column not in only_load[table]:
+                continue
+            if as_pairs:
+                result.append((alias, field.column))
+                aliases.add(alias)
+                continue
+            # This part of the function is customized for GeoQuery. We
+            # see if there was any custom selection specified in the
+            # dictionary, and set up the selection format appropriately.
+            field_sel = self.get_field_select(field, alias)
+            if with_aliases and field.column in col_aliases:
+                c_alias = 'Col%d' % len(col_aliases)
+                result.append('%s AS %s' % (field_sel, c_alias))
+                col_aliases.add(c_alias)
+                aliases.add(c_alias)
+            else:
+                r = field_sel
+                result.append(r)
+                aliases.add(r)
+                if with_aliases:
+                    col_aliases.add(field.column)
+        return result, aliases
+
+    def resolve_columns(self, row, fields=()):
+        """
+        This routine is necessary so that distances and geometries returned
+        from extra selection SQL get resolved appropriately into Python
+        objects.
+        """
+        values = []
+        aliases = self.query.extra_select.keys()
+        if self.query.aggregates:
+            # If we have an aggregate annotation, must extend the aliases
+            # so their corresponding row values are included.
+            aliases.extend([None for i in xrange(len(self.query.aggregates))])
+
+        # Have to set a starting row number offset that is used for
+        # determining the correct starting row index -- needed for
+        # doing pagination with Oracle.
+        rn_offset = 0
+        if self.connection.ops.oracle:
+            if self.query.high_mark is not None or self.query.low_mark: rn_offset = 1
+        index_start = rn_offset + len(aliases)
+
+        # Converting any extra selection values (e.g., geometries and
+        # distance objects added by GeoQuerySet methods).
+        values = [self.query.convert_values(v,
+                               self.query.extra_select_fields.get(a, None),
+                               self.connection)
+                  for v, a in izip(row[rn_offset:index_start], aliases)]
+        if self.connection.ops.oracle or getattr(self.query, 'geo_values', False):
+            # We resolve the rest of the columns if we're on Oracle or if
+            # the `geo_values` attribute is defined.
+            for value, field in map(None, row[index_start:], fields):
+                values.append(self.query.convert_values(value, field, connection=self.connection))
+        else:
+            values.extend(row[index_start:])
+        return tuple(values)
+
+    #### Routines unique to GeoQuery ####
+    def get_extra_select_format(self, alias):
+        sel_fmt = '%s'
+        if alias in self.query.custom_select:
+            sel_fmt = sel_fmt % self.query.custom_select[alias]
+        return sel_fmt
+
+    def get_field_select(self, field, alias=None, column=None):
+        """
+        Returns the SELECT SQL string for the given field.  Figures out
+        if any custom selection SQL is needed for the column  The `alias`
+        keyword may be used to manually specify the database table where
+        the column exists, if not in the model associated with this
+        `GeoQuery`.  Similarly, `column` may be used to specify the exact
+        column name, rather than using the `column` attribute on `field`.
+        """
+        sel_fmt = self.get_select_format(field)
+        if field in self.query.custom_select:
+            field_sel = sel_fmt % self.query.custom_select[field]
+        else:
+            field_sel = sel_fmt % self._field_column(field, alias, column)
+        return field_sel
+
+    def get_select_format(self, fld):
+        """
+        Returns the selection format string, depending on the requirements
+        of the spatial backend.  For example, Oracle and MySQL require custom
+        selection formats in order to retrieve geometries in OGC WKT. For all
+        other fields a simple '%s' format string is returned.
+        """
+        if self.connection.ops.select and hasattr(fld, 'geom_type'):
+            # This allows operations to be done on fields in the SELECT,
+            # overriding their values -- used by the Oracle and MySQL
+            # spatial backends to get database values as WKT, and by the
+            # `transform` method.
+            sel_fmt = self.connection.ops.select
+
+            # Because WKT doesn't contain spatial reference information,
+            # the SRID is prefixed to the returned WKT to ensure that the
+            # transformed geometries have an SRID different than that of the
+            # field -- this is only used by `transform` for Oracle and
+            # SpatiaLite backends.
+            if self.query.transformed_srid and ( self.connection.ops.oracle or
+                                                 self.connection.ops.spatialite ):
+                sel_fmt = "'SRID=%d;'||%s" % (self.query.transformed_srid, sel_fmt)
+        else:
+            sel_fmt = '%s'
+        return sel_fmt
+
+    # Private API utilities, subject to change.
+    def _field_column(self, field, table_alias=None, column=None):
+        """
+        Helper function that returns the database column for the given field.
+        The table and column are returned (quoted) in the proper format, e.g.,
+        `"geoapp_city"."point"`.  If `table_alias` is not specified, the
+        database table associated with the model of this `GeoQuery` will be
+        used.  If `column` is specified, it will be used instead of the value
+        in `field.column`.
+        """
+        if table_alias is None: table_alias = self.query.model._meta.db_table
+        return "%s.%s" % (self.quote_name_unless_alias(table_alias),
+                          self.connection.ops.quote_name(column or field.column))
+
+class SQLInsertCompiler(compiler.SQLInsertCompiler, GeoSQLCompiler):
+    pass
+
+class SQLDeleteCompiler(compiler.SQLDeleteCompiler, GeoSQLCompiler):
+    pass
+
+class SQLUpdateCompiler(compiler.SQLUpdateCompiler, GeoSQLCompiler):
+    pass
+
+class SQLAggregateCompiler(compiler.SQLAggregateCompiler, GeoSQLCompiler):
+    pass
+
+class SQLDateCompiler(compiler.SQLDateCompiler, GeoSQLCompiler):
+    pass
--- a/web/lib/django/contrib/gis/db/models/sql/conversion.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/db/models/sql/conversion.py	Tue May 25 02:43:45 2010 +0200
@@ -2,15 +2,13 @@
 This module holds simple classes used by GeoQuery.convert_values
 to convert geospatial values from the database.
 """
-from django.contrib.gis.db.backend import SpatialBackend
 
 class BaseField(object):
+    empty_strings_allowed = True
     def get_internal_type(self):
         "Overloaded method so OracleQuery.convert_values doesn't balk."
         return None
 
-if SpatialBackend.oracle: BaseField.empty_strings_allowed = False
-
 class AreaField(BaseField):
     "Wrapper for Area values."
     def __init__(self, area_att):
--- a/web/lib/django/contrib/gis/db/models/sql/query.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/db/models/sql/query.py	Tue May 25 02:43:45 2010 +0200
@@ -1,21 +1,25 @@
-from itertools import izip
+from django.db import connections
 from django.db.models.query import sql
-from django.db.models.fields.related import ForeignKey
 
-from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.gis.db.models.fields import GeometryField
-from django.contrib.gis.db.models.sql import aggregates as gis_aggregates_module
+from django.contrib.gis.db.models.sql import aggregates as gis_aggregates
 from django.contrib.gis.db.models.sql.conversion import AreaField, DistanceField, GeomField
 from django.contrib.gis.db.models.sql.where import GeoWhereNode
+from django.contrib.gis.geometry.backend import Geometry
 from django.contrib.gis.measure import Area, Distance
 
-# Valid GIS query types.
-ALL_TERMS = sql.constants.QUERY_TERMS.copy()
-ALL_TERMS.update(SpatialBackend.gis_terms)
 
-# Pulling out other needed constants/routines to avoid attribute lookups.
-TABLE_NAME = sql.constants.TABLE_NAME
-get_proxied_model = sql.query.get_proxied_model
+ALL_TERMS = dict([(x, None) for x in (
+            'bbcontains', 'bboverlaps', 'contained', 'contains',
+            'contains_properly', 'coveredby', 'covers', 'crosses', 'disjoint',
+            'distance_gt', 'distance_gte', 'distance_lt', 'distance_lte',
+            'dwithin', 'equals', 'exact',
+            'intersects', 'overlaps', 'relate', 'same_as', 'touches', 'within',
+            'left', 'right', 'overlaps_left', 'overlaps_right',
+            'overlaps_above', 'overlaps_below',
+            'strictly_above', 'strictly_below'
+            )])
+ALL_TERMS.update(sql.constants.QUERY_TERMS)
 
 class GeoQuery(sql.Query):
     """
@@ -23,11 +27,13 @@
     """
     # Overridding the valid query terms.
     query_terms = ALL_TERMS
-    aggregates_module = gis_aggregates_module
+    aggregates_module = gis_aggregates
+
+    compiler = 'GeoSQLCompiler'
 
     #### Methods overridden from the base Query class ####
-    def __init__(self, model, conn):
-        super(GeoQuery, self).__init__(model, conn, where=GeoWhereNode)
+    def __init__(self, model, where=GeoWhereNode):
+        super(GeoQuery, self).__init__(model, where)
         # The following attributes are customized for the GeoQuerySet.
         # The GeoWhereNode and SpatialBackend classes contain backend-specific
         # routines and functions.
@@ -35,13 +41,6 @@
         self.transformed_srid = None
         self.extra_select_fields = {}
 
-    if SpatialBackend.oracle:
-        # Have to override this so that GeoQuery, instead of OracleQuery,
-        # is returned when unpickling.
-        def __reduce__(self):
-            callable, args, data = super(GeoQuery, self).__reduce__()
-            return (unpickle_geoquery, (), data)
-
     def clone(self, *args, **kwargs):
         obj = super(GeoQuery, self).clone(*args, **kwargs)
         # Customized selection dictionary and transformed srid flag have
@@ -51,286 +50,57 @@
         obj.extra_select_fields = self.extra_select_fields.copy()
         return obj
 
-    def get_columns(self, with_aliases=False):
-        """
-        Return the list of columns to use in the select statement. If no
-        columns have been specified, returns all columns relating to fields in
-        the model.
-
-        If 'with_aliases' is true, any column names that are duplicated
-        (without the table names) are given unique aliases. This is needed in
-        some cases to avoid ambiguitity with nested queries.
-
-        This routine is overridden from Query to handle customized selection of
-        geometry columns.
-        """
-        qn = self.quote_name_unless_alias
-        qn2 = self.connection.ops.quote_name
-        result = ['(%s) AS %s' % (self.get_extra_select_format(alias) % col[0], qn2(alias))
-                  for alias, col in self.extra_select.iteritems()]
-        aliases = set(self.extra_select.keys())
-        if with_aliases:
-            col_aliases = aliases.copy()
-        else:
-            col_aliases = set()
-        if self.select:
-            only_load = self.deferred_to_columns()
-            # This loop customized for GeoQuery.
-            for col, field in izip(self.select, self.select_fields):
-                if isinstance(col, (list, tuple)):
-                    alias, column = col
-                    table = self.alias_map[alias][TABLE_NAME]
-                    if table in only_load and col not in only_load[table]:
-                        continue
-                    r = self.get_field_select(field, alias, column)
-                    if with_aliases:
-                        if col[1] in col_aliases:
-                            c_alias = 'Col%d' % len(col_aliases)
-                            result.append('%s AS %s' % (r, c_alias))
-                            aliases.add(c_alias)
-                            col_aliases.add(c_alias)
-                        else:
-                            result.append('%s AS %s' % (r, qn2(col[1])))
-                            aliases.add(r)
-                            col_aliases.add(col[1])
-                    else:
-                        result.append(r)
-                        aliases.add(r)
-                        col_aliases.add(col[1])
-                else:
-                    result.append(col.as_sql(quote_func=qn))
-
-                    if hasattr(col, 'alias'):
-                        aliases.add(col.alias)
-                        col_aliases.add(col.alias)
-
-        elif self.default_cols:
-            cols, new_aliases = self.get_default_columns(with_aliases,
-                    col_aliases)
-            result.extend(cols)
-            aliases.update(new_aliases)
-
-        result.extend([
-                '%s%s' % (
-                    self.get_extra_select_format(alias) % aggregate.as_sql(quote_func=qn),
-                    alias is not None and ' AS %s' % alias or ''
-                    )
-                for alias, aggregate in self.aggregate_select.items()
-        ])
-
-        # This loop customized for GeoQuery.
-        for (table, col), field in izip(self.related_select_cols, self.related_select_fields):
-            r = self.get_field_select(field, table, col)
-            if with_aliases and col in col_aliases:
-                c_alias = 'Col%d' % len(col_aliases)
-                result.append('%s AS %s' % (r, c_alias))
-                aliases.add(c_alias)
-                col_aliases.add(c_alias)
-            else:
-                result.append(r)
-                aliases.add(r)
-                col_aliases.add(col)
-
-        self._select_aliases = aliases
-        return result
-
-    def get_default_columns(self, with_aliases=False, col_aliases=None,
-                            start_alias=None, opts=None, as_pairs=False):
-        """
-        Computes the default columns for selecting every field in the base
-        model. Will sometimes be called to pull in related models (e.g. via
-        select_related), in which case "opts" and "start_alias" will be given
-        to provide a starting point for the traversal.
-
-        Returns a list of strings, quoted appropriately for use in SQL
-        directly, as well as a set of aliases used in the select statement (if
-        'as_pairs' is True, returns a list of (alias, col_name) pairs instead
-        of strings as the first component and None as the second component).
-
-        This routine is overridden from Query to handle customized selection of
-        geometry columns.
-        """
-        result = []
-        if opts is None:
-            opts = self.model._meta
-        aliases = set()
-        only_load = self.deferred_to_columns()
-        # Skip all proxy to the root proxied model
-        proxied_model = get_proxied_model(opts)
-
-        if start_alias:
-            seen = {None: start_alias}
-        for field, model in opts.get_fields_with_model():
-            if start_alias:
-                try:
-                    alias = seen[model]
-                except KeyError:
-                    if model is proxied_model:
-                        alias = start_alias
-                    else:
-                        link_field = opts.get_ancestor_link(model)
-                        alias = self.join((start_alias, model._meta.db_table,
-                                           link_field.column, model._meta.pk.column))
-                    seen[model] = alias
-            else:
-                # If we're starting from the base model of the queryset, the
-                # aliases will have already been set up in pre_sql_setup(), so
-                # we can save time here.
-                alias = self.included_inherited_models[model]
-            table = self.alias_map[alias][TABLE_NAME]
-            if table in only_load and field.column not in only_load[table]:
-                continue
-            if as_pairs:
-                result.append((alias, field.column))
-                aliases.add(alias)
-                continue
-            # This part of the function is customized for GeoQuery. We
-            # see if there was any custom selection specified in the
-            # dictionary, and set up the selection format appropriately.
-            field_sel = self.get_field_select(field, alias)
-            if with_aliases and field.column in col_aliases:
-                c_alias = 'Col%d' % len(col_aliases)
-                result.append('%s AS %s' % (field_sel, c_alias))
-                col_aliases.add(c_alias)
-                aliases.add(c_alias)
-            else:
-                r = field_sel
-                result.append(r)
-                aliases.add(r)
-                if with_aliases:
-                    col_aliases.add(field.column)
-        return result, aliases
-
-    def resolve_columns(self, row, fields=()):
-        """
-        This routine is necessary so that distances and geometries returned
-        from extra selection SQL get resolved appropriately into Python
-        objects.
-        """
-        values = []
-        aliases = self.extra_select.keys()
-        if self.aggregates:
-            # If we have an aggregate annotation, must extend the aliases
-            # so their corresponding row values are included.
-            aliases.extend([None for i in xrange(len(self.aggregates))])
-
-        # Have to set a starting row number offset that is used for
-        # determining the correct starting row index -- needed for
-        # doing pagination with Oracle.
-        rn_offset = 0
-        if SpatialBackend.oracle:
-            if self.high_mark is not None or self.low_mark: rn_offset = 1
-        index_start = rn_offset + len(aliases)
-
-        # Converting any extra selection values (e.g., geometries and
-        # distance objects added by GeoQuerySet methods).
-        values = [self.convert_values(v, self.extra_select_fields.get(a, None))
-                  for v, a in izip(row[rn_offset:index_start], aliases)]
-        if SpatialBackend.oracle or getattr(self, 'geo_values', False):
-            # We resolve the rest of the columns if we're on Oracle or if
-            # the `geo_values` attribute is defined.
-            for value, field in izip(row[index_start:], fields):
-                values.append(self.convert_values(value, field))
-        else:
-            values.extend(row[index_start:])
-        return tuple(values)
-
-    def convert_values(self, value, field):
+    def convert_values(self, value, field, connection):
         """
         Using the same routines that Oracle does we can convert our
         extra selection objects into Geometry and Distance objects.
         TODO: Make converted objects 'lazy' for less overhead.
         """
-        if SpatialBackend.oracle:
+        if connection.ops.oracle:
             # Running through Oracle's first.
-            value = super(GeoQuery, self).convert_values(value, field or GeomField())
+            value = super(GeoQuery, self).convert_values(value, field or GeomField(), connection)
 
-        if isinstance(field, DistanceField):
+        if value is None:
+            # Output from spatial function is NULL (e.g., called
+            # function on a geometry field with NULL value).
+            pass
+        elif isinstance(field, DistanceField):
             # Using the field's distance attribute, can instantiate
             # `Distance` with the right context.
             value = Distance(**{field.distance_att : value})
         elif isinstance(field, AreaField):
             value = Area(**{field.area_att : value})
         elif isinstance(field, (GeomField, GeometryField)) and value:
-            value = SpatialBackend.Geometry(value)
+            value = Geometry(value)
         return value
 
-    def resolve_aggregate(self, value, aggregate):
+    def get_aggregation(self, using):
+        # Remove any aggregates marked for reduction from the subquery
+        # and move them to the outer AggregateQuery.
+        connection = connections[using]
+        for alias, aggregate in self.aggregate_select.items():
+            if isinstance(aggregate, gis_aggregates.GeoAggregate):
+                if not getattr(aggregate, 'is_extent', False) or connection.ops.oracle:
+                    self.extra_select_fields[alias] = GeomField()
+        return super(GeoQuery, self).get_aggregation(using)
+
+    def resolve_aggregate(self, value, aggregate, connection):
         """
         Overridden from GeoQuery's normalize to handle the conversion of
         GeoAggregate objects.
         """
         if isinstance(aggregate, self.aggregates_module.GeoAggregate):
             if aggregate.is_extent:
-                return self.aggregates_module.convert_extent(value)
+                if aggregate.is_extent == '3D':
+                    return connection.ops.convert_extent3d(value)
+                else:
+                    return connection.ops.convert_extent(value)
             else:
-                return self.aggregates_module.convert_geom(value, aggregate.source)
-        else:
-            return super(GeoQuery, self).resolve_aggregate(value, aggregate)
-
-    #### Routines unique to GeoQuery ####
-    def get_extra_select_format(self, alias):
-        sel_fmt = '%s'
-        if alias in self.custom_select:
-            sel_fmt = sel_fmt % self.custom_select[alias]
-        return sel_fmt
-
-    def get_field_select(self, field, alias=None, column=None):
-        """
-        Returns the SELECT SQL string for the given field.  Figures out
-        if any custom selection SQL is needed for the column  The `alias`
-        keyword may be used to manually specify the database table where
-        the column exists, if not in the model associated with this
-        `GeoQuery`.  Similarly, `column` may be used to specify the exact
-        column name, rather than using the `column` attribute on `field`.
-        """
-        sel_fmt = self.get_select_format(field)
-        if field in self.custom_select:
-            field_sel = sel_fmt % self.custom_select[field]
+                return connection.ops.convert_geom(value, aggregate.source)
         else:
-            field_sel = sel_fmt % self._field_column(field, alias, column)
-        return field_sel
-
-    def get_select_format(self, fld):
-        """
-        Returns the selection format string, depending on the requirements
-        of the spatial backend.  For example, Oracle and MySQL require custom
-        selection formats in order to retrieve geometries in OGC WKT. For all
-        other fields a simple '%s' format string is returned.
-        """
-        if SpatialBackend.select and hasattr(fld, 'geom_type'):
-            # This allows operations to be done on fields in the SELECT,
-            # overriding their values -- used by the Oracle and MySQL
-            # spatial backends to get database values as WKT, and by the
-            # `transform` method.
-            sel_fmt = SpatialBackend.select
-
-            # Because WKT doesn't contain spatial reference information,
-            # the SRID is prefixed to the returned WKT to ensure that the
-            # transformed geometries have an SRID different than that of the
-            # field -- this is only used by `transform` for Oracle and
-            # SpatiaLite backends.
-            if self.transformed_srid and ( SpatialBackend.oracle or
-                                           SpatialBackend.spatialite ):
-                sel_fmt = "'SRID=%d;'||%s" % (self.transformed_srid, sel_fmt)
-        else:
-            sel_fmt = '%s'
-        return sel_fmt
+            return super(GeoQuery, self).resolve_aggregate(value, aggregate, connection)
 
     # Private API utilities, subject to change.
-    def _field_column(self, field, table_alias=None, column=None):
-        """
-        Helper function that returns the database column for the given field.
-        The table and column are returned (quoted) in the proper format, e.g.,
-        `"geoapp_city"."point"`.  If `table_alias` is not specified, the
-        database table associated with the model of this `GeoQuery` will be
-        used.  If `column` is specified, it will be used instead of the value
-        in `field.column`.
-        """
-        if table_alias is None: table_alias = self.model._meta.db_table
-        return "%s.%s" % (self.quote_name_unless_alias(table_alias),
-                          self.connection.ops.quote_name(column or field.column))
-
     def _geo_field(self, field_name=None):
         """
         Returns the first Geometry field encountered; or specified via the
@@ -347,12 +117,3 @@
             # Otherwise, check by the given field name -- which may be
             # a lookup to a _related_ geographic field.
             return GeoWhereNode._check_geo_field(self.model._meta, field_name)
-
-if SpatialBackend.oracle:
-    def unpickle_geoquery():
-        """
-        Utility function, called by Python's unpickling machinery, that handles
-        unpickling of GeoQuery subclasses of OracleQuery.
-        """
-        return GeoQuery.__new__(GeoQuery)
-    unpickle_geoquery.__safe_for_unpickling__ = True
--- a/web/lib/django/contrib/gis/db/models/sql/subqueries.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-from django.contrib.gis.db.backend import SpatialBackend
-from django.db.models.query import insert_query
-
-if SpatialBackend.oracle:
-    from django.db import connection
-    from django.db.models.sql.subqueries import InsertQuery
-
-    class OracleGeoInsertQuery(InsertQuery):
-        def insert_values(self, insert_values, raw_values=False):
-            """
-            This routine is overloaded from InsertQuery so that no parameter is
-            passed into cx_Oracle for NULL geometries.  The reason is that
-            cx_Oracle has no way to bind Oracle object values (like
-            MDSYS.SDO_GEOMETRY).
-            """
-            placeholders, values = [], []
-            for field, val in insert_values:
-                if hasattr(field, 'get_placeholder'):
-                    ph = field.get_placeholder(val)
-                else:
-                    ph = '%s'
-
-                placeholders.append(ph)
-                self.columns.append(field.column)
-
-                # If 'NULL' for the placeholder, omit appending None
-                # to the values list (which is used for db params).
-                if not ph == 'NULL':
-                    values.append(val)
-            if raw_values:
-                self.values.extend(values)
-            else:
-                self.params += tuple(values)
-                self.values.extend(placeholders)
-
-    def insert_query(model, values, return_id=False, raw_values=False):
-        query = OracleGeoInsertQuery(model, connection)
-        query.insert_values(values, raw_values)
-        return query.execute_sql(return_id)
--- a/web/lib/django/contrib/gis/db/models/sql/where.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/db/models/sql/where.py	Tue May 25 02:43:45 2010 +0200
@@ -1,23 +1,31 @@
-from django.db import connection
 from django.db.models.fields import Field, FieldDoesNotExist
 from django.db.models.sql.constants import LOOKUP_SEP
 from django.db.models.sql.expressions import SQLEvaluator
-from django.db.models.sql.where import WhereNode
-from django.contrib.gis.db.backend import get_geo_where_clause, SpatialBackend
+from django.db.models.sql.where import Constraint, WhereNode
 from django.contrib.gis.db.models.fields import GeometryField
-qn = connection.ops.quote_name
 
-class GeoAnnotation(object):
+class GeoConstraint(Constraint):
+    """
+    This subclass overrides `process` to better handle geographic SQL
+    construction.
     """
-    The annotation used for GeometryFields; basically a placeholder
-    for metadata needed by the `get_geo_where_clause` of the spatial
-    backend.
-    """
-    def __init__(self, field, value, where):
-        self.geodetic = field.geodetic
-        self.geom_type = field.geom_type
-        self.value = value
-        self.where = tuple(where)
+    def __init__(self, init_constraint):
+        self.alias = init_constraint.alias
+        self.col = init_constraint.col
+        self.field = init_constraint.field
+
+    def process(self, lookup_type, value, connection):
+        if isinstance(value, SQLEvaluator):
+            # Make sure the F Expression destination field exists, and
+            # set an `srid` attribute with the same as that of the
+            # destination.
+            geo_fld = GeoWhereNode._check_geo_field(value.opts, value.expression.name)
+            if not geo_fld:
+                raise ValueError('No geographic field found in expression.')
+            value.srid = geo_fld.srid
+        db_type = self.field.db_type(connection=connection)
+        params = self.field.get_db_prep_lookup(lookup_type, value, connection=connection)
+        return (self.alias, self.col, db_type), params
 
 class GeoWhereNode(WhereNode):
     """
@@ -25,81 +33,26 @@
     these are tied to the GeoQuery class that created it.
     """
     def add(self, data, connector):
-        """
-        This is overridden from the regular WhereNode to handle the 
-        peculiarties of GeometryFields, because they need a special 
-        annotation object that contains the spatial metadata from the 
-        field to generate the spatial SQL.
-        """
-        if not isinstance(data, (list, tuple)):
-            return super(WhereNode, self).add(data, connector)
-
-        obj, lookup_type, value = data
-        col, field = obj.col, obj.field
-
-        if not hasattr(field, "geom_type"):
-            # Not a geographic field, so call `WhereNode.add`.
-            return super(GeoWhereNode, self).add(data, connector)
-        else:
-            if isinstance(value, SQLEvaluator):
-                # Getting the geographic field to compare with from the expression.
-                geo_fld = self._check_geo_field(value.opts, value.expression.name)
-                if not geo_fld:
-                    raise ValueError('No geographic field found in expression.')
-
-                # Get the SRID of the geometry field that the expression was meant 
-                # to operate on -- it's needed to determine whether transformation 
-                # SQL is necessary.
-                srid = geo_fld.srid
-
-                # Getting the quoted representation of the geometry column that
-                # the expression is operating on.
-                geo_col = '%s.%s' % tuple(map(qn, value.cols[value.expression]))
+        if isinstance(data, (list, tuple)):
+            obj, lookup_type, value = data
+            if ( isinstance(obj, Constraint) and
+                 isinstance(obj.field, GeometryField) ):
+                data = (GeoConstraint(obj), lookup_type, value)
+        super(GeoWhereNode, self).add(data, connector)
 
-                # If it's in a different SRID, we'll need to wrap in 
-                # transformation SQL.
-                if not srid is None and srid != field.srid and SpatialBackend.transform:
-                    placeholder = '%s(%%s, %s)' % (SpatialBackend.transform, field.srid)
-                else:
-                    placeholder = '%s'
-
-                # Setting these up as if we had called `field.get_db_prep_lookup()`.
-                where =  [placeholder % geo_col]
-                params = ()
-            else:
-                # `GeometryField.get_db_prep_lookup` returns a where clause
-                # substitution array in addition to the parameters.
-                where, params = field.get_db_prep_lookup(lookup_type, value)
-
-            # The annotation will be a `GeoAnnotation` object that
-            # will contain the necessary geometry field metadata for
-            # the `get_geo_where_clause` to construct the appropriate
-            # spatial SQL when `make_atom` is called.
-            annotation = GeoAnnotation(field, value, where)
-            return super(WhereNode, self).add(((obj.alias, col, field.db_type()), lookup_type, annotation, params), connector)
-
-    def make_atom(self, child, qn):
-        obj, lookup_type, value_annot, params = child
-
-        if isinstance(value_annot, GeoAnnotation):
-            if lookup_type in SpatialBackend.gis_terms:
-                # Getting the geographic where clause; substitution parameters
-                # will be populated in the GeoFieldSQL object returned by the
-                # GeometryField.
-                alias, col, db_type = obj
-                gwc = get_geo_where_clause(alias, col, lookup_type, value_annot)
-                return gwc % value_annot.where, params
-            else:
-                raise TypeError('Invalid lookup type: %r' % lookup_type)
+    def make_atom(self, child, qn, connection):
+        lvalue, lookup_type, value_annot, params_or_value = child
+        if isinstance(lvalue, GeoConstraint):
+            data, params = lvalue.process(lookup_type, params_or_value, connection)
+            spatial_sql = connection.ops.spatial_lookup_sql(data, lookup_type, params_or_value, lvalue.field, qn)
+            return spatial_sql, params
         else:
-            # If not a GeometryField, call the `make_atom` from the 
-            # base class.
-            return super(GeoWhereNode, self).make_atom(child, qn)
+            return super(GeoWhereNode, self).make_atom(child, qn, connection)
 
     @classmethod
     def _check_geo_field(cls, opts, lookup):
         """
-        Utility for checking the given lookup with the given model options.  
+        Utility for checking the given lookup with the given model options.
         The lookup is a string either specifying the geographic field, e.g.
         'point, 'the_geom', or a related lookup on a geographic field like
         'address__point'.
@@ -121,7 +74,7 @@
             # If the field list is still around, then it means that the
             # lookup was for a geometry field across a relationship --
             # thus we keep on getting the related model options and the
-            # model field associated with the next field in the list 
+            # model field associated with the next field in the list
             # until there's no more left.
             while len(field_list):
                 opts = geo_fld.rel.to._meta
--- a/web/lib/django/contrib/gis/gdal/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -13,7 +13,7 @@
  Envelope: A ctypes structure for bounding boxes (GDAL library
   not required).
 
- OGRGeometry: Layer for accessing OGR Geometry objects.
+ OGRGeometry: Object for accessing OGR Geometry functionality.
 
  OGRGeomType: A class for representing the different OGR Geometry
   types (GDAL library not required).
@@ -31,29 +31,24 @@
  to a non-existant file location (e.g., `GDAL_LIBRARY_PATH='/null/path'`; 
  setting to None/False/'' will not work as a string must be given).
 """
-import sys
-
 # Attempting to import objects that depend on the GDAL library.  The
 # HAS_GDAL flag will be set to True if the library is present on
 # the system.
 try:
     from django.contrib.gis.gdal.driver import Driver
     from django.contrib.gis.gdal.datasource import DataSource
-    from django.contrib.gis.gdal.libgdal import gdal_version, gdal_full_version, gdal_release_date
+    from django.contrib.gis.gdal.libgdal import gdal_version, gdal_full_version, gdal_release_date, GEOJSON, GDAL_VERSION
     from django.contrib.gis.gdal.srs import SpatialReference, CoordTransform
-    from django.contrib.gis.gdal.geometries import OGRGeometry, GEOJSON
+    from django.contrib.gis.gdal.geometries import OGRGeometry
     HAS_GDAL = True
 except:
     HAS_GDAL, GEOJSON = False, False
 
-# The envelope, error, and geomtype modules do not actually require the
-# GDAL library, but still nead at least Python 2.4 and ctypes.
-PYTHON23 = sys.version_info[0] == 2 and sys.version_info[1] == 3
-if not PYTHON23:
-    try:
-        from django.contrib.gis.gdal.envelope import Envelope
-        from django.contrib.gis.gdal.error import check_err, OGRException, OGRIndexError, SRSException
-        from django.contrib.gis.gdal.geomtype import OGRGeomType
-    except ImportError:
-        # No ctypes, but don't raise an exception.
-        pass
+try:
+    from django.contrib.gis.gdal.envelope import Envelope
+except ImportError:
+    # No ctypes, but don't raise an exception.
+    pass
+
+from django.contrib.gis.gdal.error import check_err, OGRException, OGRIndexError, SRSException
+from django.contrib.gis.gdal.geomtype import OGRGeomType
--- a/web/lib/django/contrib/gis/gdal/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/base.py	Tue May 25 02:43:45 2010 +0200
@@ -24,7 +24,7 @@
     def _set_ptr(self, ptr):
         # Only allow the pointer to be set with pointers of the
         # compatible type or None (NULL).
-        if isinstance(ptr, int):
+        if isinstance(ptr, (int, long)):
             self._ptr = self.ptr_type(ptr)
         elif isinstance(ptr, (self.ptr_type, NoneType)):
             self._ptr = ptr
--- a/web/lib/django/contrib/gis/gdal/geometries.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/geometries.py	Tue May 25 02:43:45 2010 +0200
@@ -29,7 +29,7 @@
   +proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs
   >>> print mpnt
   MULTIPOINT (-89.999930378602485 29.999797886557641,-89.999930378602485 29.999797886557641)
-  
+
   The OGRGeomType class is to make it easy to specify an OGR geometry type:
   >>> from django.contrib.gis.gdal import OGRGeomType
   >>> gt1 = OGRGeomType(3) # Using an integer for the type
@@ -39,7 +39,7 @@
   True
 """
 # Python library requisites.
-import re, sys
+import sys
 from binascii import a2b_hex
 from ctypes import byref, string_at, c_char_p, c_double, c_ubyte, c_void_p
 
@@ -48,22 +48,20 @@
 from django.contrib.gis.gdal.envelope import Envelope, OGREnvelope
 from django.contrib.gis.gdal.error import OGRException, OGRIndexError, SRSException
 from django.contrib.gis.gdal.geomtype import OGRGeomType
+from django.contrib.gis.gdal.libgdal import GEOJSON, GDAL_VERSION
 from django.contrib.gis.gdal.srs import SpatialReference, CoordTransform
 
 # Getting the ctypes prototype functions that interface w/the GDAL C library.
 from django.contrib.gis.gdal.prototypes import geom as capi, srs as srs_api
-GEOJSON = capi.GEOJSON
+
+# For recognizing geometry input.
+from django.contrib.gis.geometry.regex import hex_regex, wkt_regex, json_regex
 
 # For more information, see the OGR C API source code:
 #  http://www.gdal.org/ogr/ogr__api_8h.html
 #
 # The OGR_G_* routines are relevant here.
 
-# Regular expressions for recognizing HEXEWKB and WKT.
-hex_regex = re.compile(r'^[0-9A-F]+$', re.I)
-wkt_regex = re.compile(r'^(?P<type>POINT|LINESTRING|LINEARRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON|GEOMETRYCOLLECTION)[ACEGIMLONPSRUTY\d,\.\-\(\) ]+$', re.I)
-json_regex = re.compile(r'^(\s+)?\{[\s\w,\[\]\{\}\-\."\':]+\}(\s+)?$')
-
 #### OGRGeometry Class ####
 class OGRGeometry(GDALBase):
     "Generally encapsulates an OGR geometry."
@@ -78,7 +76,7 @@
             geom_input = buffer(a2b_hex(geom_input.upper()))
             str_instance = False
 
-        # Constructing the geometry, 
+        # Constructing the geometry,
         if str_instance:
             # Checking if unicode
             if isinstance(geom_input, unicode):
@@ -88,13 +86,16 @@
             wkt_m = wkt_regex.match(geom_input)
             json_m = json_regex.match(geom_input)
             if wkt_m:
+                if wkt_m.group('srid'):
+                    # If there's EWKT, set the SRS w/value of the SRID.
+                    srs = int(wkt_m.group('srid'))
                 if wkt_m.group('type').upper() == 'LINEARRING':
                     # OGR_G_CreateFromWkt doesn't work with LINEARRING WKT.
                     #  See http://trac.osgeo.org/gdal/ticket/1992.
                     g = capi.create_geom(OGRGeomType(wkt_m.group('type')).num)
-                    capi.import_wkt(g, byref(c_char_p(geom_input)))
+                    capi.import_wkt(g, byref(c_char_p(wkt_m.group('wkt'))))
                 else:
-                    g = capi.from_wkt(byref(c_char_p(geom_input)), None, byref(c_void_p()))
+                    g = capi.from_wkt(byref(c_char_p(wkt_m.group('wkt'))), None, byref(c_void_p()))
             elif json_m:
                 if GEOJSON:
                     g = capi.from_json(geom_input)
@@ -129,16 +130,32 @@
         # Setting the class depending upon the OGR Geometry Type
         self.__class__ = GEO_CLASSES[self.geom_type.num]
 
+    def __del__(self):
+        "Deletes this Geometry."
+        if self._ptr: capi.destroy_geom(self._ptr)
+
+    # Pickle routines
+    def __getstate__(self):
+        srs = self.srs
+        if srs:
+            srs = srs.wkt
+        else:
+            srs = None
+        return str(self.wkb), srs
+
+    def __setstate__(self, state):
+        wkb, srs = state
+        ptr = capi.from_wkb(wkb, None, byref(c_void_p()), len(wkb))
+        if not ptr: raise OGRException('Invalid OGRGeometry loaded from pickled state.')
+        self.ptr = ptr
+        self.srs = srs
+
     @classmethod
-    def from_bbox(cls, bbox):   
+    def from_bbox(cls, bbox):
         "Constructs a Polygon from a bounding box (4-tuple)."
         x0, y0, x1, y1 = bbox
         return OGRGeometry( 'POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))' %  (
                 x0, y0, x0, y1, x1, y1, x1, y0, x0, y0) )
- 
-    def __del__(self):
-        "Deletes this Geometry."
-        if self._ptr: capi.destroy_geom(self._ptr)
 
     ### Geometry set-like operations ###
     # g = g1 | g2
@@ -163,11 +180,14 @@
 
     def __eq__(self, other):
         "Is this Geometry equal to the other?"
-        return self.equals(other)
+        if isinstance(other, OGRGeometry):
+            return self.equals(other)
+        else:
+            return False
 
     def __ne__(self, other):
         "Tests for inequality."
-        return not self.equals(other)
+        return not (self == other)
 
     def __str__(self):
         "WKT is used for the string representation."
@@ -179,10 +199,25 @@
         "Returns 0 for points, 1 for lines, and 2 for surfaces."
         return capi.get_dims(self.ptr)
 
-    @property
-    def coord_dim(self):
+    def _get_coord_dim(self):
         "Returns the coordinate dimension of the Geometry."
-        return capi.get_coord_dims(self.ptr)
+        if isinstance(self, GeometryCollection) and GDAL_VERSION < (1, 5, 2):
+            # On GDAL versions prior to 1.5.2, there exists a bug in which
+            # the coordinate dimension of geometry collections is always 2:
+            #   http://trac.osgeo.org/gdal/ticket/2334
+            # Here we workaround by returning the coordinate dimension of the
+            # first geometry in the collection instead.
+            if len(self):
+                return capi.get_coord_dim(capi.get_geom_ref(self.ptr, 0))
+        return capi.get_coord_dim(self.ptr)
+
+    def _set_coord_dim(self, dim):
+        "Sets the coordinate dimension of this Geometry."
+        if not dim in (2, 3):
+            raise ValueError('Geometry dimension must be either 2 or 3')
+        capi.set_coord_dim(self.ptr, dim)
+
+    coord_dim = property(_get_coord_dim, _set_coord_dim)
 
     @property
     def geom_count(self):
@@ -207,13 +242,7 @@
     @property
     def geom_type(self):
         "Returns the Type for this Geometry."
-        try:
-            return OGRGeomType(capi.get_geom_type(self.ptr))
-        except OGRException:
-            # VRT datasources return an invalid geometry type
-            # number, but a valid name -- we'll try that instead.
-            # See: http://trac.osgeo.org/gdal/ticket/2491
-            return OGRGeomType(capi.get_geom_name(self.ptr))
+        return OGRGeomType(capi.get_geom_type(self.ptr))
 
     @property
     def geom_name(self):
@@ -237,7 +266,7 @@
         return self.envelope.tuple
 
     #### SpatialReference-related Properties ####
-    
+
     # The SRS property
     def _get_srs(self):
         "Returns the Spatial Reference for this Geometry."
@@ -249,11 +278,15 @@
 
     def _set_srs(self, srs):
         "Sets the SpatialReference for this geometry."
+        # Do not have to clone the `SpatialReference` object pointer because
+        # when it is assigned to this `OGRGeometry` it's internal OGR
+        # reference count is incremented, and will likewise be released
+        # (decremented) when this geometry's destructor is called.
         if isinstance(srs, SpatialReference):
-            srs_ptr = srs_api.clone_srs(srs.ptr)
+            srs_ptr = srs.ptr
         elif isinstance(srs, (int, long, basestring)):
             sr = SpatialReference(srs)
-            srs_ptr = srs_api.clone_srs(sr.ptr)
+            srs_ptr = sr.ptr
         else:
             raise TypeError('Cannot assign spatial reference with object of type: %s' % type(srs))
         capi.assign_srs(self.ptr, srs_ptr)
@@ -298,7 +331,7 @@
         Returns the GeoJSON representation of this Geometry (requires
         GDAL 1.5+).
         """
-        if GEOJSON: 
+        if GEOJSON:
             return capi.to_json(self.ptr)
         else:
             raise NotImplementedError('GeoJSON output only supported on GDAL 1.5+.')
@@ -335,7 +368,16 @@
     def wkt(self):
         "Returns the WKT representation of the Geometry."
         return capi.to_wkt(self.ptr, byref(c_char_p()))
-    
+
+    @property
+    def ewkt(self):
+        "Returns the EWKT representation of the Geometry."
+        srs = self.srs
+        if srs and srs.srid:
+            return 'SRID=%s;%s' % (srs.srid, self.wkt)
+        else:
+            return self.wkt
+
     #### Geometry Methods ####
     def clone(self):
         "Clones this OGR Geometry."
@@ -363,6 +405,17 @@
             klone = self.clone()
             klone.transform(coord_trans)
             return klone
+
+        # Have to get the coordinate dimension of the original geometry
+        # so it can be used to reset the transformed geometry's dimension
+        # afterwards.  This is done because of GDAL bug (in versions prior
+        # to 1.7) that turns geometries 3D after transformation, see:
+        #  http://trac.osgeo.org/gdal/changeset/17792
+        if GDAL_VERSION < (1, 7):
+            orig_dim = self.coord_dim
+
+        # Depending on the input type, use the appropriate OGR routine
+        # to perform the transformation.
         if isinstance(coord_trans, CoordTransform):
             capi.geom_transform(self.ptr, coord_trans.ptr)
         elif isinstance(coord_trans, SpatialReference):
@@ -371,7 +424,22 @@
             sr = SpatialReference(coord_trans)
             capi.geom_transform_to(self.ptr, sr.ptr)
         else:
-            raise TypeError('Transform only accepts CoordTransform, SpatialReference, string, and integer objects.')
+            raise TypeError('Transform only accepts CoordTransform, '
+                            'SpatialReference, string, and integer objects.')
+
+        # Setting with original dimension, see comment above.
+        if GDAL_VERSION < (1, 7):
+            if isinstance(self, GeometryCollection):
+                # With geometry collections have to set dimension on
+                # each internal geometry reference, as the collection
+                # dimension isn't affected.
+                for i in xrange(len(self)):
+                    internal_ptr = capi.get_geom_ref(self.ptr, i)
+                    if orig_dim != capi.get_coord_dim(internal_ptr):
+                        capi.set_coord_dim(internal_ptr, orig_dim)
+            else:
+                if self.coord_dim != orig_dim:
+                    self.coord_dim = orig_dim
 
     def transform_to(self, srs):
         "For backwards-compatibility."
@@ -391,7 +459,7 @@
     def intersects(self, other):
         "Returns True if this geometry intersects with the other."
         return self._topology(capi.ogr_intersects, other)
-    
+
     def equals(self, other):
         "Returns True if this geometry is equivalent to the other."
         return self._topology(capi.ogr_equals, other)
@@ -436,7 +504,7 @@
     @property
     def convex_hull(self):
         """
-        Returns the smallest convex Polygon that contains all the points in 
+        Returns the smallest convex Polygon that contains all the points in
         this Geometry.
         """
         return self._geomgen(capi.geom_convex_hull)
@@ -456,7 +524,7 @@
         return self._geomgen(capi.geom_intersection, other)
 
     def sym_difference(self, other):
-        """                                                                                                                                                
+        """
         Returns a new geometry which is the symmetric difference of this
         geometry and the other.
         """
@@ -545,7 +613,7 @@
     def y(self):
         "Returns the Y coordinates in a list."
         return self._listarr(capi.gety)
-    
+
     @property
     def z(self):
         "Returns the Z coordinates in a list."
@@ -610,7 +678,7 @@
             raise OGRIndexError('index out of range: %s' % index)
         else:
             return OGRGeometry(capi.clone_geom(capi.get_geom_ref(self.ptr, index)), self.srs)
-        
+
     def __iter__(self):
         "Iterates over each Geometry."
         for i in xrange(self.geom_count):
@@ -658,5 +726,12 @@
                5 : MultiLineString,
                6 : MultiPolygon,
                7 : GeometryCollection,
-               101: LinearRing, 
+               101: LinearRing,
+               1 + OGRGeomType.wkb25bit : Point,
+               2 + OGRGeomType.wkb25bit : LineString,
+               3 + OGRGeomType.wkb25bit : Polygon,
+               4 + OGRGeomType.wkb25bit : MultiPoint,
+               5 + OGRGeomType.wkb25bit : MultiLineString,
+               6 + OGRGeomType.wkb25bit : MultiPolygon,
+               7 + OGRGeomType.wkb25bit : GeometryCollection,
                }
--- a/web/lib/django/contrib/gis/gdal/geomtype.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/geomtype.py	Tue May 25 02:43:45 2010 +0200
@@ -4,6 +4,8 @@
 class OGRGeomType(object):
     "Encapulates OGR Geometry Types."
 
+    wkb25bit = -2147483648
+
     # Dictionary of acceptable OGRwkbGeometryType s and their string names.
     _types = {0 : 'Unknown',
               1 : 'Point',
@@ -15,6 +17,13 @@
               7 : 'GeometryCollection',
               100 : 'None',
               101 : 'LinearRing',
+              1 + wkb25bit: 'Point25D',
+              2 + wkb25bit: 'LineString25D',
+              3 + wkb25bit: 'Polygon25D',
+              4 + wkb25bit: 'MultiPoint25D',
+              5 + wkb25bit : 'MultiLineString25D',
+              6 + wkb25bit : 'MultiPolygon25D',
+              7 + wkb25bit : 'GeometryCollection25D',
               }
     # Reverse type dictionary, keyed by lower-case of the name.
     _str_types = dict([(v.lower(), k) for k, v in _types.items()])
@@ -68,7 +77,7 @@
     @property
     def django(self):
         "Returns the Django GeometryField for this OGR Type."
-        s = self.name
+        s = self.name.replace('25D', '')
         if s in ('LinearRing', 'None'):
             return None
         elif s == 'Unknown':
--- a/web/lib/django/contrib/gis/gdal/layer.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/layer.py	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,5 @@
 # Needed ctypes routines
-from ctypes import byref
+from ctypes import c_double, byref
 
 # Other GDAL imports.
 from django.contrib.gis.gdal.base import GDALBase
@@ -7,11 +7,12 @@
 from django.contrib.gis.gdal.error import OGRException, OGRIndexError, SRSException
 from django.contrib.gis.gdal.feature import Feature
 from django.contrib.gis.gdal.field import OGRFieldTypes
-from django.contrib.gis.gdal.geometries import OGRGeomType
+from django.contrib.gis.gdal.geomtype import OGRGeomType
+from django.contrib.gis.gdal.geometries import OGRGeometry
 from django.contrib.gis.gdal.srs import SpatialReference
 
 # GDAL ctypes function prototypes.
-from django.contrib.gis.gdal.prototypes import ds as capi, srs as srs_api
+from django.contrib.gis.gdal.prototypes import ds as capi, geom as geom_api, srs as srs_api
 
 # For more information, see the OGR C API source code:
 #  http://www.gdal.org/ogr/ogr__api_8h.html
@@ -156,6 +157,29 @@
         return [capi.get_field_precision(capi.get_field_defn(self._ldefn, i))
                 for i in xrange(self.num_fields)]
 
+    def _get_spatial_filter(self):
+        try:
+            return OGRGeometry(geom_api.clone_geom(capi.get_spatial_filter(self.ptr)))
+        except OGRException:
+            return None
+
+    def _set_spatial_filter(self, filter):
+        if isinstance(filter, OGRGeometry):
+            capi.set_spatial_filter(self.ptr, filter.ptr)
+        elif isinstance(filter, (tuple, list)):
+            if not len(filter) == 4:
+                raise ValueError('Spatial filter list/tuple must have 4 elements.')
+            # Map c_double onto params -- if a bad type is passed in it
+            # will be caught here.
+            xmin, ymin, xmax, ymax = map(c_double, filter)
+            capi.set_spatial_filter_rect(self.ptr, xmin, ymin, xmax, ymax)
+        elif filter is None:
+            capi.set_spatial_filter(self.ptr, None)
+        else:
+            raise TypeError('Spatial filter must be either an OGRGeometry instance, a 4-tuple, or None.')
+
+    spatial_filter = property(_get_spatial_filter, _set_spatial_filter)
+
     #### Layer Methods ####
     def get_fields(self, field_name):
         """
--- a/web/lib/django/contrib/gis/gdal/libgdal.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/libgdal.py	Tue May 25 02:43:45 2010 +0200
@@ -1,4 +1,4 @@
-import os, sys
+import os, re, sys
 from ctypes import c_char_p, CDLL
 from ctypes.util import find_library
 from django.contrib.gis.gdal.error import OGRException
@@ -81,3 +81,24 @@
     d = date_type(yy, mm, dd)
     if date: return d
     else: return d.strftime('%Y/%m/%d')
+
+version_regex = re.compile(r'^(?P<major>\d+)\.(?P<minor>\d+)(\.(?P<subminor>\d+))?')
+def gdal_version_info():
+    ver = gdal_version()
+    m = version_regex.match(ver)
+    if not m: raise OGRException('Could not parse GDAL version string "%s"' % ver)
+    return dict([(key, m.group(key)) for key in ('major', 'minor', 'subminor')])
+
+_verinfo = gdal_version_info()
+GDAL_MAJOR_VERSION = int(_verinfo['major'])
+GDAL_MINOR_VERSION = int(_verinfo['minor'])
+GDAL_SUBMINOR_VERSION = _verinfo['subminor'] and int(_verinfo['subminor'])
+GDAL_VERSION = (GDAL_MAJOR_VERSION, GDAL_MINOR_VERSION, GDAL_SUBMINOR_VERSION)
+del _verinfo
+
+# GeoJSON support is available only in GDAL 1.5+.
+if GDAL_VERSION >= (1, 5):
+    GEOJSON = True
+else:
+    GEOJSON = False
+
--- a/web/lib/django/contrib/gis/gdal/prototypes/ds.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/prototypes/ds.py	Tue May 25 02:43:45 2010 +0200
@@ -3,7 +3,7 @@
  related data structures. OGR_Dr_*, OGR_DS_*, OGR_L_*, OGR_F_*, 
  OGR_Fld_* routines are relevant here.
 """
-from ctypes import c_char_p, c_int, c_long, c_void_p, POINTER
+from ctypes import c_char_p, c_double, c_int, c_long, c_void_p, POINTER
 from django.contrib.gis.gdal.envelope import OGREnvelope
 from django.contrib.gis.gdal.libgdal import lgdal
 from django.contrib.gis.gdal.prototypes.generation import \
@@ -38,6 +38,9 @@
 get_next_feature = voidptr_output(lgdal.OGR_L_GetNextFeature, [c_void_p])
 reset_reading = void_output(lgdal.OGR_L_ResetReading, [c_void_p], errcheck=False)
 test_capability = int_output(lgdal.OGR_L_TestCapability, [c_void_p, c_char_p])
+get_spatial_filter = geom_output(lgdal.OGR_L_GetSpatialFilter, [c_void_p])
+set_spatial_filter = void_output(lgdal.OGR_L_SetSpatialFilter, [c_void_p, c_void_p], errcheck=False)
+set_spatial_filter_rect = void_output(lgdal.OGR_L_SetSpatialFilterRect, [c_void_p, c_double, c_double, c_double, c_double], errcheck=False)
 
 ### Feature Definition Routines ###
 get_fd_geom_type = int_output(lgdal.OGR_FD_GetGeomType, [c_void_p])
--- a/web/lib/django/contrib/gis/gdal/prototypes/errcheck.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/prototypes/errcheck.py	Tue May 25 02:43:45 2010 +0200
@@ -109,6 +109,8 @@
 
 def check_pointer(result, func, cargs):
     "Makes sure the result pointer is valid."
+    if isinstance(result, (int, long)):
+        result = c_void_p(result)
     if bool(result): 
         return result
     else: 
--- a/web/lib/django/contrib/gis/gdal/prototypes/geom.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/prototypes/geom.py	Tue May 25 02:43:45 2010 +0200
@@ -1,19 +1,13 @@
+import re
 from datetime import date
 from ctypes import c_char, c_char_p, c_double, c_int, c_ubyte, c_void_p, POINTER
 from django.contrib.gis.gdal.envelope import OGREnvelope
-from django.contrib.gis.gdal.libgdal import lgdal, gdal_version
+from django.contrib.gis.gdal.libgdal import lgdal, GEOJSON
 from django.contrib.gis.gdal.prototypes.errcheck import check_bool, check_envelope
 from django.contrib.gis.gdal.prototypes.generation import \
     const_string_output, double_output, geom_output, int_output, \
     srs_output, string_output, void_output
 
-# Some prototypes need to be aware of what version GDAL we have.
-major, minor = map(int, gdal_version().split('.')[:2])
-if major <= 1 and minor <= 4:
-    GEOJSON = False
-else:
-    GEOJSON = True
-
 ### Generation routines specific to this module ###
 def env_func(f, argtypes):
     "For getting OGREnvelopes."
@@ -83,7 +77,8 @@
 get_area = double_output(lgdal.OGR_G_GetArea, [c_void_p])
 get_centroid = void_output(lgdal.OGR_G_Centroid, [c_void_p, c_void_p])
 get_dims = int_output(lgdal.OGR_G_GetDimension, [c_void_p])
-get_coord_dims = int_output(lgdal.OGR_G_GetCoordinateDimension, [c_void_p])
+get_coord_dim = int_output(lgdal.OGR_G_GetCoordinateDimension, [c_void_p])
+set_coord_dim = void_output(lgdal.OGR_G_SetCoordinateDimension, [c_void_p, c_int], errcheck=False)
 
 get_geom_count = int_output(lgdal.OGR_G_GetGeometryCount, [c_void_p])
 get_geom_name = const_string_output(lgdal.OGR_G_GetGeometryName, [c_void_p])
--- a/web/lib/django/contrib/gis/gdal/tests/test_ds.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/tests/test_ds.py	Tue May 25 02:43:45 2010 +0200
@@ -1,13 +1,11 @@
 import os, os.path, unittest
-from django.contrib.gis.gdal import DataSource, Envelope, OGRException, OGRIndexError
+from django.contrib.gis.gdal import DataSource, Envelope, OGRGeometry, OGRException, OGRIndexError
 from django.contrib.gis.gdal.field import OFTReal, OFTInteger, OFTString
 from django.contrib import gis
 
 # Path for SHP files
 data_path = os.path.join(os.path.dirname(gis.__file__), 'tests' + os.sep + 'data')
 def get_ds_file(name, ext):
-    
-
     return os.sep.join([data_path, name, name + '.%s' % ext])
 
 # Test SHP data source object
@@ -25,7 +23,7 @@
                   srs_wkt='GEOGCS["GCS_WGS_1984",DATUM["WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]',
                   field_values={'dbl' : [float(i) for i in range(1, 6)], 'int' : range(1, 6), 'str' : [str(i) for i in range(1, 6)]},
                   fids=range(5)),
-           TestDS('test_vrt', ext='vrt', nfeat=3, nfld=3, geom='POINT', gtype=1, driver='VRT',
+           TestDS('test_vrt', ext='vrt', nfeat=3, nfld=3, geom='POINT', gtype='Point25D', driver='VRT',
                   fields={'POINT_X' : OFTString, 'POINT_Y' : OFTString, 'NUM' : OFTString}, # VRT uses CSV, which all types are OFTString.
                   extent=(1.0, 2.0, 100.0, 523.5), # Min/Max from CSV
                   field_values={'POINT_X' : ['1.0', '5.0', '100.0'], 'POINT_Y' : ['2.0', '23.0', '523.5'], 'NUM' : ['5', '17', '23']},
@@ -191,7 +189,41 @@
                     if hasattr(source, 'srs_wkt'):
                         self.assertEqual(source.srs_wkt, g.srs.wkt)
 
+    def test06_spatial_filter(self):
+        "Testing the Layer.spatial_filter property."
+        ds = DataSource(get_ds_file('cities', 'shp'))
+        lyr = ds[0]
 
+        # When not set, it should be None.
+        self.assertEqual(None, lyr.spatial_filter)
+
+        # Must be set a/an OGRGeometry or 4-tuple.
+        self.assertRaises(TypeError, lyr._set_spatial_filter, 'foo')
+
+        # Setting the spatial filter with a tuple/list with the extent of
+        # a buffer centering around Pueblo.
+        self.assertRaises(ValueError, lyr._set_spatial_filter, range(5))
+        filter_extent = (-105.609252, 37.255001, -103.609252, 39.255001)
+        lyr.spatial_filter = (-105.609252, 37.255001, -103.609252, 39.255001)
+        self.assertEqual(OGRGeometry.from_bbox(filter_extent), lyr.spatial_filter)
+        feats = [feat for feat in lyr]
+        self.assertEqual(1, len(feats))
+        self.assertEqual('Pueblo', feats[0].get('Name'))
+
+        # Setting the spatial filter with an OGRGeometry for buffer centering
+        # around Houston.
+        filter_geom = OGRGeometry('POLYGON((-96.363151 28.763374,-94.363151 28.763374,-94.363151 30.763374,-96.363151 30.763374,-96.363151 28.763374))')
+        lyr.spatial_filter = filter_geom
+        self.assertEqual(filter_geom, lyr.spatial_filter)
+        feats = [feat for feat in lyr]
+        self.assertEqual(1, len(feats))
+        self.assertEqual('Houston', feats[0].get('Name'))
+
+        # Clearing the spatial filter by setting it to None.  Now
+        # should indicate that there are 3 features in the Layer.
+        lyr.spatial_filter = None
+        self.assertEqual(3, len(lyr))
+        
 def suite():
     s = unittest.TestSuite()
     s.addTest(unittest.makeSuite(DataSourceTest))
--- a/web/lib/django/contrib/gis/gdal/tests/test_envelope.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/tests/test_envelope.py	Tue May 25 02:43:45 2010 +0200
@@ -55,7 +55,7 @@
         self.assertEqual((0, 0, 5, 6), self.e) 
         self.e.expand_to_include(-1, -1) 
         self.assertEqual((-1, -1, 5, 6), self.e) 
- 		 
+  
     def test05_expand_to_include_pt_2_tuple(self): 
         "Testing Envelope expand_to_include -- point as a single 2-tuple parameter." 
         self.e.expand_to_include((10, 10)) 
@@ -67,17 +67,17 @@
         "Testing Envelope expand_to_include -- extent as 4 parameters." 
         self.e.expand_to_include(-1, 1, 3, 7) 
         self.assertEqual((-1, 0, 5, 7), self.e) 
- 		 
+  
     def test06_expand_to_include_extent_4_tuple(self): 
         "Testing Envelope expand_to_include -- extent as a single 4-tuple parameter." 
         self.e.expand_to_include((-1, 1, 3, 7)) 
         self.assertEqual((-1, 0, 5, 7), self.e) 
- 		 
+  
     def test07_expand_to_include_envelope(self): 
         "Testing Envelope expand_to_include with Envelope as parameter." 
         self.e.expand_to_include(Envelope(-1, 1, 3, 7)) 
         self.assertEqual((-1, 0, 5, 7), self.e) 
- 		 
+  
     def test08_expand_to_include_point(self): 
         "Testing Envelope expand_to_include with Point as parameter." 
         self.e.expand_to_include(TestPoint(-1, 1)) 
--- a/web/lib/django/contrib/gis/gdal/tests/test_geom.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/gdal/tests/test_geom.py	Tue May 25 02:43:45 2010 +0200
@@ -46,12 +46,30 @@
         self.assertEqual(0, gt.num)
         self.assertEqual('Unknown', gt.name)
 
+    def test00b_geomtype_25d(self):
+        "Testing OGRGeomType object with 25D types."
+        wkb25bit = OGRGeomType.wkb25bit
+        self.failUnless(OGRGeomType(wkb25bit + 1) == 'Point25D')
+        self.failUnless(OGRGeomType('MultiLineString25D') == (5 + wkb25bit))
+        self.assertEqual('GeometryCollectionField', OGRGeomType('GeometryCollection25D').django)
+
     def test01a_wkt(self):
         "Testing WKT output."
         for g in wkt_out:
             geom = OGRGeometry(g.wkt)
             self.assertEqual(g.wkt, geom.wkt)
 
+    def test01a_ewkt(self):
+        "Testing EWKT input/output."
+        for ewkt_val in ('POINT (1 2 3)', 'LINEARRING (0 0,1 1,2 1,0 0)'):
+            # First with ewkt output when no SRID in EWKT
+            self.assertEqual(ewkt_val, OGRGeometry(ewkt_val).ewkt)
+            # No test consumption with an SRID specified.
+            ewkt_val = 'SRID=4326;%s' % ewkt_val
+            geom = OGRGeometry(ewkt_val)
+            self.assertEqual(ewkt_val, geom.ewkt)
+            self.assertEqual(4326, geom.srs.srid)
+
     def test01b_gml(self):
         "Testing GML output."
         for g in wkt_out:
@@ -118,7 +136,7 @@
             self.assertEqual(mgeom1, mgeom3)
             self.assertEqual(mp.points, mgeom2.tuple)
             self.assertEqual(mp.n_p, mgeom2.point_count)
-                                                                            
+
     def test04_linestring(self):
         "Testing LineString objects."
         prev = OGRGeometry('POINT(0 0)')
@@ -154,7 +172,7 @@
             for ls in mlinestr:
                 self.assertEqual(2, ls.geom_type)
                 self.assertEqual('LINESTRING', ls.geom_name)
-            self.assertRaises(OGRIndexError, mlinestr.__getitem__, len(mlinestr)) 
+            self.assertRaises(OGRIndexError, mlinestr.__getitem__, len(mlinestr))
 
     def test06_linearring(self):
         "Testing LinearRing objects."
@@ -172,7 +190,7 @@
         "Testing Polygon objects."
 
         # Testing `from_bbox` class method
-        bbox =  (-180,-90,180,90) 
+        bbox =  (-180,-90,180,90)
         p = OGRGeometry.from_bbox( bbox )
         self.assertEqual(bbox, p.extent)
 
@@ -193,13 +211,13 @@
             # Testing equivalence
             self.assertEqual(True, poly == OGRGeometry(p.wkt))
             self.assertEqual(True, poly != prev)
-            
+
             if p.ext_ring_cs:
                 ring = poly[0]
                 self.assertEqual(p.ext_ring_cs, ring.tuple)
                 self.assertEqual(p.ext_ring_cs, poly[0].tuple)
                 self.assertEqual(len(p.ext_ring_cs), ring.point_count)
-            
+
             for r in poly:
                 self.assertEqual('LINEARRING', r.geom_name)
 
@@ -251,11 +269,11 @@
             sr = SpatialReference('WGS84')
             mpoly = OGRGeometry(mp.wkt, sr)
             self.assertEqual(sr.wkt, mpoly.srs.wkt)
-          
+
             # Ensuring that SRS is propagated to clones.
             klone = mpoly.clone()
             self.assertEqual(sr.wkt, klone.srs.wkt)
-  
+
             # Ensuring all children geometries (polygons and their rings) all
             # return the assigned spatial reference as well.
             for poly in mpoly:
@@ -277,7 +295,7 @@
             mpoly.srs = SpatialReference(4269)
             self.assertEqual(4269, mpoly.srid)
             self.assertEqual('NAD83', mpoly.srs.name)
-          
+
             # Incrementing through the multipolyogn after the spatial reference
             # has been re-assigned.
             for poly in mpoly:
@@ -319,6 +337,18 @@
             self.assertAlmostEqual(trans.x, p.x, prec)
             self.assertAlmostEqual(trans.y, p.y, prec)
 
+    def test09c_transform_dim(self):
+        "Testing coordinate dimension is the same on transformed geometries."
+        ls_orig = OGRGeometry('LINESTRING(-104.609 38.255)', 4326)
+        ls_trans = OGRGeometry('LINESTRING(992385.4472045 481455.4944650)', 2774)
+
+        prec = 3
+        ls_orig.transform(ls_trans.srs)
+        # Making sure the coordinate dimension is still 2D.
+        self.assertEqual(2, ls_orig.coord_dim)
+        self.assertAlmostEqual(ls_trans.x[0], ls_orig.x[0], prec)
+        self.assertAlmostEqual(ls_trans.y[0], ls_orig.y[0], prec)
+
     def test10_difference(self):
         "Testing difference()."
         for i in xrange(len(topology_geoms)):
@@ -358,7 +388,7 @@
             self.assertEqual(d1, a ^ b) # __xor__ is symmetric difference operator
             a ^= b # testing __ixor__
             self.assertEqual(d1, a)
-            
+
     def test13_union(self):
         "Testing union()."
         for i in xrange(len(topology_geoms)):
@@ -406,6 +436,56 @@
         xmax, ymax = max(x), max(y)
         self.assertEqual((xmin, ymin, xmax, ymax), poly.extent)
 
+    def test16_25D(self):
+        "Testing 2.5D geometries."
+        pnt_25d = OGRGeometry('POINT(1 2 3)')
+        self.assertEqual('Point25D', pnt_25d.geom_type.name)
+        self.assertEqual(3.0, pnt_25d.z)
+        self.assertEqual(3, pnt_25d.coord_dim)
+        ls_25d = OGRGeometry('LINESTRING(1 1 1,2 2 2,3 3 3)')
+        self.assertEqual('LineString25D', ls_25d.geom_type.name)
+        self.assertEqual([1.0, 2.0, 3.0], ls_25d.z)
+        self.assertEqual(3, ls_25d.coord_dim)
+
+    def test17_pickle(self):
+        "Testing pickle support."
+        import cPickle
+        g1 = OGRGeometry('LINESTRING(1 1 1,2 2 2,3 3 3)', 'WGS84')
+        g2 = cPickle.loads(cPickle.dumps(g1))
+        self.assertEqual(g1, g2)
+        self.assertEqual(4326, g2.srs.srid)
+        self.assertEqual(g1.srs.wkt, g2.srs.wkt)
+
+    def test18_ogrgeometry_transform_workaround(self):
+        "Testing coordinate dimensions on geometries after transformation."
+        # A bug in GDAL versions prior to 1.7 changes the coordinate
+        # dimension of a geometry after it has been transformed.
+        # This test ensures that the bug workarounds employed within
+        # `OGRGeometry.transform` indeed work.
+        wkt_2d = "MULTILINESTRING ((0 0,1 1,2 2))"
+        wkt_3d = "MULTILINESTRING ((0 0 0,1 1 1,2 2 2))"
+        srid = 4326
+
+        # For both the 2D and 3D MultiLineString, ensure _both_ the dimension
+        # of the collection and the component LineString have the expected
+        # coordinate dimension after transform.
+        geom = OGRGeometry(wkt_2d, srid)
+        geom.transform(srid)
+        self.assertEqual(2, geom.coord_dim)
+        self.assertEqual(2, geom[0].coord_dim)
+        self.assertEqual(wkt_2d, geom.wkt)
+
+        geom = OGRGeometry(wkt_3d, srid)
+        geom.transform(srid)
+        self.assertEqual(3, geom.coord_dim)
+        self.assertEqual(3, geom[0].coord_dim)
+        self.assertEqual(wkt_3d, geom.wkt)
+
+    def test19_equivalence_regression(self):
+        "Testing equivalence methods with non-OGRGeometry instances."
+        self.assertNotEqual(None, OGRGeometry('POINT(0 0)'))
+        self.assertEqual(False, OGRGeometry('LINESTRING(0 0, 1 1)') == 3)
+
 def suite():
     s = unittest.TestSuite()
     s.addTest(unittest.makeSuite(OGRGeomTest))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/geometry/backend/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,21 @@
+from django.conf import settings
+from django.core.exceptions import ImproperlyConfigured
+from django.utils.importlib import import_module
+
+geom_backend = getattr(settings, 'GEOMETRY_BACKEND', 'geos')
+
+try:
+    module = import_module('.%s' % geom_backend, 'django.contrib.gis.geometry.backend')
+except ImportError, e:
+    try:
+        module = import_module(geom_backend)
+    except ImportError, e_user:
+        raise ImproperlyConfigured('Could not import user-defined GEOMETRY_BACKEND '
+                                   '"%s".' % geom_backend)
+
+try:
+    Geometry = module.Geometry
+    GeometryException = module.GeometryException
+except AttributeError:
+    raise ImproperlyConfigured('Cannot import Geometry from the "%s" '
+                               'geometry backend.' % geom_backend)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/geometry/backend/geos.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,3 @@
+from django.contrib.gis.geos import \
+    GEOSGeometry as Geometry, \
+    GEOSException as GeometryException
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/geometry/regex.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,12 @@
+import re
+
+# Regular expression for recognizing HEXEWKB and WKT.  A prophylactic measure
+# to prevent potentially malicious input from reaching the underlying C
+# library.  Not a substitute for good web security programming practices.
+hex_regex = re.compile(r'^[0-9A-F]+$', re.I)
+wkt_regex = re.compile(r'^(SRID=(?P<srid>\d+);)?'
+                       r'(?P<wkt>'
+                       r'(?P<type>POINT|LINESTRING|LINEARRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON|GEOMETRYCOLLECTION)'
+                       r'[ACEGIMLONPSRUTYZ\d,\.\-\(\) ]+)$',
+                       re.I)
+json_regex = re.compile(r'^(\s+)?\{[\s\w,\[\]\{\}\-\."\':]+\}(\s+)?$')
--- a/web/lib/django/contrib/gis/geos/collections.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/collections.py	Tue May 25 02:43:45 2010 +0200
@@ -19,7 +19,7 @@
 
         # Checking the arguments
         if not args:
-            raise TypeError, 'Must provide at least one Geometry to initialize %s.' % self.__class__.__name__
+            raise TypeError('Must provide at least one Geometry to initialize %s.' % self.__class__.__name__)
 
         if len(args) == 1:
             # If only one geometry provided or a list of geometries is provided
--- a/web/lib/django/contrib/gis/geos/geometry.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/geometry.py	Tue May 25 02:43:45 2010 +0200
@@ -21,11 +21,12 @@
 # the underlying GEOS library.
 from django.contrib.gis.geos import prototypes as capi
 
-# Regular expression for recognizing HEXEWKB and WKT.  A prophylactic measure
-# to prevent potentially malicious input from reaching the underlying C
-# library.  Not a substitute for good web security programming practices.
-hex_regex = re.compile(r'^[0-9A-F]+$', re.I)
-wkt_regex = re.compile(r'^(SRID=(?P<srid>\d+);)?(?P<wkt>(POINT|LINESTRING|LINEARRING|POLYGON|MULTIPOINT|MULTILINESTRING|MULTIPOLYGON|GEOMETRYCOLLECTION)[ACEGIMLONPSRUTY\d,\.\-\(\) ]+)$', re.I)
+# These functions provide access to a thread-local instance
+# of their corresponding GEOS I/O class.
+from django.contrib.gis.geos.prototypes.io import wkt_r, wkt_w, wkb_r, wkb_w, ewkb_w, ewkb_w3d
+
+# For recognizing geometry input.
+from django.contrib.gis.geometry.regex import hex_regex, wkt_regex, json_regex
 
 class GEOSGeometry(GEOSBase, ListMixin):
     "A class that, generally, encapsulates a GEOS geometry."
@@ -61,13 +62,13 @@
             if wkt_m:
                 # Handling WKT input.
                 if wkt_m.group('srid'): srid = int(wkt_m.group('srid'))
-                g = wkt_r.read(wkt_m.group('wkt'))
+                g = wkt_r().read(wkt_m.group('wkt'))
             elif hex_regex.match(geo_input):
                 # Handling HEXEWKB input.
-                g = wkb_r.read(geo_input)
-            elif gdal.GEOJSON and gdal.geometries.json_regex.match(geo_input):
+                g = wkb_r().read(geo_input)
+            elif gdal.GEOJSON and json_regex.match(geo_input):
                 # Handling GeoJSON input.
-                g = wkb_r.read(gdal.OGRGeometry(geo_input).wkb)
+                g = wkb_r().read(gdal.OGRGeometry(geo_input).wkb)
             else:
                 raise ValueError('String or unicode input unrecognized as WKT EWKT, and HEXEWKB.')
         elif isinstance(geo_input, GEOM_PTR):
@@ -75,7 +76,7 @@
             g = geo_input
         elif isinstance(geo_input, buffer):
             # When the input is a buffer (WKB).
-            g = wkb_r.read(geo_input)
+            g = wkb_r().read(geo_input)
         elif isinstance(geo_input, GEOSGeometry):
             g = capi.geom_clone(geo_input.ptr)
         else:
@@ -142,7 +143,7 @@
     def __setstate__(self, state):
         # Instantiating from the tuple state that was pickled.
         wkb, srid = state
-        ptr = capi.from_wkb(wkb, len(wkb))
+        ptr = wkb_r().read(buffer(wkb))
         if not ptr: raise GEOSException('Invalid Geometry loaded from pickled state.')
         self.ptr = ptr
         self._post_init(srid)
@@ -357,25 +358,45 @@
     #### Output Routines ####
     @property
     def ewkt(self):
-        "Returns the EWKT (WKT + SRID) of the Geometry."
+        """
+        Returns the EWKT (WKT + SRID) of the Geometry.  Note that Z values
+        are *not* included in this representation because GEOS does not yet
+        support serializing them.
+        """
         if self.get_srid(): return 'SRID=%s;%s' % (self.srid, self.wkt)
         else: return self.wkt
 
     @property
     def wkt(self):
-        "Returns the WKT (Well-Known Text) of the Geometry."
-        return wkt_w.write(self)
+        "Returns the WKT (Well-Known Text) representation of this Geometry."
+        return wkt_w().write(self)
 
     @property
     def hex(self):
         """
-        Returns the HEX of the Geometry -- please note that the SRID is not
-        included in this representation, because the GEOS C library uses
-        -1 by default, even if the SRID is set.
+        Returns the WKB of this Geometry in hexadecimal form.  Please note
+        that the SRID and Z values are not included in this representation
+        because it is not a part of the OGC specification (use the `hexewkb` 
+        property instead).
         """
         # A possible faster, all-python, implementation:
         #  str(self.wkb).encode('hex')
-        return wkb_w.write_hex(self)
+        return wkb_w().write_hex(self)
+
+    @property
+    def hexewkb(self):
+        """
+        Returns the EWKB of this Geometry in hexadecimal form.  This is an 
+        extension of the WKB specification that includes SRID and Z values 
+        that are a part of this geometry.
+        """
+        if self.hasz:
+            if not GEOS_PREPARE:
+                # See: http://trac.osgeo.org/geos/ticket/216
+                raise GEOSException('Upgrade GEOS to 3.1 to get valid 3D HEXEWKB.')               
+            return ewkb_w3d().write_hex(self)
+        else:
+            return ewkb_w().write_hex(self)
 
     @property
     def json(self):
@@ -383,7 +404,7 @@
         Returns GeoJSON representation of this Geometry if GDAL 1.5+
         is installed.
         """
-        if gdal.GEOJSON: 
+        if gdal.GEOJSON:
             return self.ogr.json
         else:
             raise GEOSException('GeoJSON output only supported on GDAL 1.5+.')
@@ -391,8 +412,27 @@
 
     @property
     def wkb(self):
-        "Returns the WKB of the Geometry as a buffer."
-        return wkb_w.write(self)
+        """
+        Returns the WKB (Well-Known Binary) representation of this Geometry
+        as a Python buffer.  SRID and Z values are not included, use the
+        `ewkb` property instead.
+        """
+        return wkb_w().write(self)
+
+    @property
+    def ewkb(self):
+        """
+        Return the EWKB representation of this Geometry as a Python buffer.
+        This is an extension of the WKB specification that includes any SRID
+        and Z values that are a part of this geometry.
+        """
+        if self.hasz:
+            if not GEOS_PREPARE:
+                # See: http://trac.osgeo.org/geos/ticket/216
+                raise GEOSException('Upgrade GEOS to 3.1 to get valid 3D EWKB.')
+            return ewkb_w3d().write(self)
+        else:
+            return ewkb_w().write(self)
 
     @property
     def kml(self):
@@ -454,7 +494,7 @@
             g = gdal.OGRGeometry(self.wkb, srid)
             g.transform(ct)
             # Getting a new GEOS pointer
-            ptr = wkb_r.read(g.wkb)
+            ptr = wkb_r().read(g.wkb)
             if clone:
                 # User wants a cloned transformed geometry returned.
                 return GEOSGeometry(ptr, srid=g.srid)
@@ -616,9 +656,6 @@
                 7 : GeometryCollection,
                 }
 
-# Similarly, import the GEOS I/O instances here to avoid conflicts.
-from django.contrib.gis.geos.io import wkt_r, wkt_w, wkb_r, wkb_w
-
 # If supported, import the PreparedGeometry class.
 if GEOS_PREPARE:
     from django.contrib.gis.geos.prepared import PreparedGeometry
--- a/web/lib/django/contrib/gis/geos/io.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/io.py	Tue May 25 02:43:45 2010 +0200
@@ -3,121 +3,18 @@
 objects.  Specifically, this has Python implementations of WKB/WKT
 reader and writer classes.
 """
-from ctypes import byref, c_size_t
-from django.contrib.gis.geos.base import GEOSBase
-from django.contrib.gis.geos.error import GEOSException
 from django.contrib.gis.geos.geometry import GEOSGeometry
-from django.contrib.gis.geos.libgeos import GEOM_PTR
-from django.contrib.gis.geos.prototypes import io as capi
-
-class IOBase(GEOSBase):
-    "Base class for GEOS I/O objects."
-    def __init__(self):
-        # Getting the pointer with the constructor.
-        self.ptr = self.constructor()
+from django.contrib.gis.geos.prototypes.io import _WKTReader, _WKBReader, WKBWriter, WKTWriter
 
-    def __del__(self):
-        # Cleaning up with the appropriate destructor.
-        if self._ptr: self.destructor(self._ptr)
-
-### WKT Reading and Writing objects ###
-
-# Non-public class for internal use because its `read` method returns
-# _pointers_ instead of a GEOSGeometry object.
-class _WKTReader(IOBase):
-    constructor = capi.wkt_reader_create
-    destructor = capi.wkt_reader_destroy
-    ptr_type = capi.WKT_READ_PTR
-
-    def read(self, wkt):
-        if not isinstance(wkt, basestring): raise TypeError
-        return capi.wkt_reader_read(self.ptr, wkt)
+# Public classes for (WKB|WKT)Reader, which return GEOSGeometry
+class WKBReader(_WKBReader):
+    def read(self, wkb):
+        "Returns a GEOSGeometry for the given WKB buffer."
+        return GEOSGeometry(super(WKBReader, self).read(wkb))
 
 class WKTReader(_WKTReader):
     def read(self, wkt):
         "Returns a GEOSGeometry for the given WKT string."
         return GEOSGeometry(super(WKTReader, self).read(wkt))
 
-class WKTWriter(IOBase):
-    constructor = capi.wkt_writer_create
-    destructor = capi.wkt_writer_destroy
-    ptr_type = capi.WKT_WRITE_PTR
 
-    def write(self, geom):
-        "Returns the WKT representation of the given geometry."
-        return capi.wkt_writer_write(self.ptr, geom.ptr)
-
-### WKB Reading and Writing objects ###
-
-# Non-public class for the same reason as _WKTReader above.
-class _WKBReader(IOBase):
-    constructor = capi.wkb_reader_create
-    destructor = capi.wkb_reader_destroy
-    ptr_type = capi.WKB_READ_PTR
-
-    def read(self, wkb):
-        "Returns a _pointer_ to C GEOS Geometry object from the given WKB."
-        if isinstance(wkb, buffer):
-            wkb_s = str(wkb)
-            return capi.wkb_reader_read(self.ptr, wkb_s, len(wkb_s))
-        elif isinstance(wkb, basestring):
-            return capi.wkb_reader_read_hex(self.ptr, wkb, len(wkb))
-        else:
-            raise TypeError
-
-class WKBReader(_WKBReader):
-    def read(self, wkb):
-        "Returns a GEOSGeometry for the given WKB buffer."
-        return GEOSGeometry(super(WKBReader, self).read(wkb))
-
-class WKBWriter(IOBase):
-    constructor = capi.wkb_writer_create
-    destructor = capi.wkb_writer_destroy
-    ptr_type = capi.WKB_WRITE_PTR
-
-    def write(self, geom):
-        "Returns the WKB representation of the given geometry."
-        return buffer(capi.wkb_writer_write(self.ptr, geom.ptr, byref(c_size_t())))
-
-    def write_hex(self, geom):
-        "Returns the HEXEWKB representation of the given geometry."
-        return capi.wkb_writer_write_hex(self.ptr, geom.ptr, byref(c_size_t()))
-
-    ### WKBWriter Properties ###
-
-    # Property for getting/setting the byteorder.
-    def _get_byteorder(self):
-        return capi.wkb_writer_get_byteorder(self.ptr)
-
-    def _set_byteorder(self, order):
-        if not order in (0, 1): raise ValueError('Byte order parameter must be 0 (Big Endian) or 1 (Little Endian).')
-        capi.wkb_writer_set_byteorder(self.ptr, order)
-
-    byteorder = property(_get_byteorder, _set_byteorder)
-
-    # Property for getting/setting the output dimension.
-    def _get_outdim(self):
-        return capi.wkb_writer_get_outdim(self.ptr)
-
-    def _set_outdim(self, new_dim):
-        if not new_dim in (2, 3): raise ValueError('WKB output dimension must be 2 or 3')
-        capi.wkb_writer_set_outdim(self.ptr, new_dim)
-
-    outdim = property(_get_outdim, _set_outdim)
-
-    # Property for getting/setting the include srid flag.
-    def _get_include_srid(self):
-        return bool(ord(capi.wkb_writer_get_include_srid(self.ptr)))
-
-    def _set_include_srid(self, include):
-        if bool(include): flag = chr(1)
-        else: flag = chr(0)
-        capi.wkb_writer_set_include_srid(self.ptr, flag)
-
-    srid = property(_get_include_srid, _set_include_srid)
-
-# Instances of the WKT and WKB reader/writer objects.
-wkt_r = _WKTReader()
-wkt_w = WKTWriter()
-wkb_r = _WKBReader()
-wkb_w = WKBWriter()
--- a/web/lib/django/contrib/gis/geos/libgeos.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/libgeos.py	Tue May 25 02:43:45 2010 +0200
@@ -6,7 +6,7 @@
  This module also houses GEOS Pointer utilities, including
  get_pointer_arr(), and GEOM_PTR.
 """
-import atexit, os, re, sys
+import os, re, sys
 from ctypes import c_char_p, Structure, CDLL, CFUNCTYPE, POINTER
 from ctypes.util import find_library
 from django.contrib.gis.geos.error import GEOSException
@@ -45,14 +45,14 @@
                         '", "'.join(lib_names))
 
 # Getting the GEOS C library.  The C interface (CDLL) is used for
-#  both *NIX and Windows.
+# both *NIX and Windows.
 # See the GEOS C API source code for more details on the library function calls:
 #  http://geos.refractions.net/ro/doxygen_docs/html/geos__c_8h-source.html
 lgeos = CDLL(lib_path)
 
 # The notice and error handler C function callback definitions.
-#  Supposed to mimic the GEOS message handler (C below):
-#  "typedef void (*GEOSMessageHandler)(const char *fmt, ...);"
+# Supposed to mimic the GEOS message handler (C below):
+#  typedef void (*GEOSMessageHandler)(const char *fmt, ...);
 NOTICEFUNC = CFUNCTYPE(None, c_char_p, c_char_p)
 def notice_h(fmt, lst, output_h=sys.stdout):
     try:
@@ -71,23 +71,19 @@
     output_h.write('GEOS_ERROR: %s\n' % err_msg)
 error_h = ERRORFUNC(error_h)
 
-# The initGEOS routine should be called first, however, that routine takes
-#  the notice and error functions as parameters.  Here is the C code that
-#  is wrapped:
-#  "extern void GEOS_DLL initGEOS(GEOSMessageHandler notice_function, GEOSMessageHandler error_function);"
-lgeos.initGEOS(notice_h, error_h)
-
 #### GEOS Geometry C data structures, and utility functions. ####
 
 # Opaque GEOS geometry structures, used for GEOM_PTR and CS_PTR
 class GEOSGeom_t(Structure): pass
 class GEOSPrepGeom_t(Structure): pass
 class GEOSCoordSeq_t(Structure): pass
+class GEOSContextHandle_t(Structure): pass
 
 # Pointers to opaque GEOS geometry structures.
 GEOM_PTR = POINTER(GEOSGeom_t)
 PREPGEOM_PTR = POINTER(GEOSPrepGeom_t)
 CS_PTR = POINTER(GEOSCoordSeq_t)
+CONTEXT_PTR  = POINTER(GEOSContextHandle_t)
 
 # Used specifically by the GEOSGeom_createPolygon and GEOSGeom_createCollection
 #  GEOS routines
@@ -104,7 +100,7 @@
 
 # Regular expression should be able to parse version strings such as
 # '3.0.0rc4-CAPI-1.3.3', or '3.0.0-CAPI-1.4.1'
-version_regex = re.compile(r'^(?P<version>(?P<major>\d+)\.(?P<minor>\d+)\.\d+)(rc(?P<release_candidate>\d+))?-CAPI-(?P<capi_version>\d+\.\d+\.\d+)$')
+version_regex = re.compile(r'^(?P<version>(?P<major>\d+)\.(?P<minor>\d+)\.(?P<subminor>\d+))(rc(?P<release_candidate>\d+))?-CAPI-(?P<capi_version>\d+\.\d+\.\d+)$')
 def geos_version_info():
     """
     Returns a dictionary containing the various version metadata parsed from
@@ -115,14 +111,31 @@
     ver = geos_version()
     m = version_regex.match(ver)
     if not m: raise GEOSException('Could not parse version info string "%s"' % ver)
-    return dict((key, m.group(key)) for key in ('version', 'release_candidate', 'capi_version', 'major', 'minor'))
+    return dict((key, m.group(key)) for key in ('version', 'release_candidate', 'capi_version', 'major', 'minor', 'subminor'))
 
 # Version numbers and whether or not prepared geometry support is available.
 _verinfo = geos_version_info()
 GEOS_MAJOR_VERSION = int(_verinfo['major'])
 GEOS_MINOR_VERSION = int(_verinfo['minor'])
+GEOS_SUBMINOR_VERSION = int(_verinfo['subminor'])
 del _verinfo
-GEOS_PREPARE = GEOS_MAJOR_VERSION > 3 or GEOS_MAJOR_VERSION == 3 and GEOS_MINOR_VERSION >= 1
+GEOS_VERSION = (GEOS_MAJOR_VERSION, GEOS_MINOR_VERSION, GEOS_SUBMINOR_VERSION)
+GEOS_PREPARE = GEOS_VERSION >= (3, 1, 0)
 
-# Calling the finishGEOS() upon exit of the interpreter.
-atexit.register(lgeos.finishGEOS)
+if GEOS_PREPARE:
+    # Here we set up the prototypes for the initGEOS_r and finishGEOS_r
+    # routines.  These functions aren't actually called until they are
+    # attached to a GEOS context handle -- this actually occurs in
+    # geos/prototypes/threadsafe.py.
+    lgeos.initGEOS_r.restype = CONTEXT_PTR
+    lgeos.finishGEOS_r.argtypes = [CONTEXT_PTR]
+else:
+    # When thread-safety isn't available, the initGEOS routine must be called
+    # first.  This function takes the notice and error functions, defined
+    # as Python callbacks above, as parameters. Here is the C code that is
+    # wrapped:
+    #  extern void GEOS_DLL initGEOS(GEOSMessageHandler notice_function, GEOSMessageHandler error_function);
+    lgeos.initGEOS(notice_h, error_h)
+    # Calling finishGEOS() upon exit of the interpreter.
+    import atexit
+    atexit.register(lgeos.finishGEOS)
--- a/web/lib/django/contrib/gis/geos/prototypes/coordseq.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/prototypes/coordseq.py	Tue May 25 02:43:45 2010 +0200
@@ -1,6 +1,7 @@
 from ctypes import c_double, c_int, c_uint, POINTER
-from django.contrib.gis.geos.libgeos import lgeos, GEOM_PTR, CS_PTR
+from django.contrib.gis.geos.libgeos import GEOM_PTR, CS_PTR
 from django.contrib.gis.geos.prototypes.errcheck import last_arg_byref, GEOSException
+from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
 
 ## Error-checking routines specific to coordinate sequences. ##
 def check_cs_ptr(result, func, cargs):
@@ -59,24 +60,24 @@
 ## Coordinate Sequence ctypes prototypes ##
 
 # Coordinate Sequence constructors & cloning.
-cs_clone = cs_output(lgeos.GEOSCoordSeq_clone, [CS_PTR])
-create_cs = cs_output(lgeos.GEOSCoordSeq_create, [c_uint, c_uint])
-get_cs = cs_output(lgeos.GEOSGeom_getCoordSeq, [GEOM_PTR])
+cs_clone = cs_output(GEOSFunc('GEOSCoordSeq_clone'), [CS_PTR])
+create_cs = cs_output(GEOSFunc('GEOSCoordSeq_create'), [c_uint, c_uint])
+get_cs = cs_output(GEOSFunc('GEOSGeom_getCoordSeq'), [GEOM_PTR])
 
 # Getting, setting ordinate
-cs_getordinate = cs_operation(lgeos.GEOSCoordSeq_getOrdinate, ordinate=True, get=True)
-cs_setordinate = cs_operation(lgeos.GEOSCoordSeq_setOrdinate, ordinate=True)
+cs_getordinate = cs_operation(GEOSFunc('GEOSCoordSeq_getOrdinate'), ordinate=True, get=True)
+cs_setordinate = cs_operation(GEOSFunc('GEOSCoordSeq_setOrdinate'), ordinate=True)
 
 # For getting, x, y, z
-cs_getx = cs_operation(lgeos.GEOSCoordSeq_getX, get=True)
-cs_gety = cs_operation(lgeos.GEOSCoordSeq_getY, get=True)
-cs_getz = cs_operation(lgeos.GEOSCoordSeq_getZ, get=True)
+cs_getx = cs_operation(GEOSFunc('GEOSCoordSeq_getX'), get=True)
+cs_gety = cs_operation(GEOSFunc('GEOSCoordSeq_getY'), get=True)
+cs_getz = cs_operation(GEOSFunc('GEOSCoordSeq_getZ'), get=True)
 
 # For setting, x, y, z
-cs_setx = cs_operation(lgeos.GEOSCoordSeq_setX)
-cs_sety = cs_operation(lgeos.GEOSCoordSeq_setY)
-cs_setz = cs_operation(lgeos.GEOSCoordSeq_setZ)
+cs_setx = cs_operation(GEOSFunc('GEOSCoordSeq_setX'))
+cs_sety = cs_operation(GEOSFunc('GEOSCoordSeq_setY'))
+cs_setz = cs_operation(GEOSFunc('GEOSCoordSeq_setZ'))
 
 # These routines return size & dimensions.
-cs_getsize = cs_int(lgeos.GEOSCoordSeq_getSize)
-cs_getdims = cs_int(lgeos.GEOSCoordSeq_getDimensions)
+cs_getsize = cs_int(GEOSFunc('GEOSCoordSeq_getSize'))
+cs_getdims = cs_int(GEOSFunc('GEOSCoordSeq_getDimensions'))
--- a/web/lib/django/contrib/gis/geos/prototypes/errcheck.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/prototypes/errcheck.py	Tue May 25 02:43:45 2010 +0200
@@ -2,21 +2,32 @@
  Error checking functions for GEOS ctypes prototype functions.
 """
 import os
-from ctypes import string_at, CDLL
-from ctypes.util import find_library
+from ctypes import c_void_p, string_at, CDLL
 from django.contrib.gis.geos.error import GEOSException
+from django.contrib.gis.geos.libgeos import GEOS_VERSION
+from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
 
-# Getting the C library, needed to free the string pointers
-# returned from GEOS.
-if os.name == 'nt':
-    libc_name = 'msvcrt'
+# Getting the `free` routine used to free the memory allocated for
+# string pointers returned by GEOS.
+if GEOS_VERSION >= (3, 1, 1):
+    # In versions 3.1.1 and above, `GEOSFree` was added to the C API
+    # because `free` isn't always available on all platforms.
+    free = GEOSFunc('GEOSFree')
+    free.argtypes = [c_void_p]
+    free.restype = None
 else:
-    libc_name = 'libc'
-libc = CDLL(find_library(libc_name))
+    # Getting the `free` routine from the C library of the platform.
+    if os.name == 'nt':
+        # On NT, use the MS C library.
+        libc = CDLL('msvcrt')
+    else:
+        # On POSIX platforms C library is obtained by passing None into `CDLL`.
+        libc = CDLL(None)
+    free = libc.free
 
 ### ctypes error checking routines ###
 def last_arg_byref(args):
-    "Returns the last C argument's by reference value."
+    "Returns the last C argument's value by reference."
     return args[-1]._obj.value
 
 def check_dbl(result, func, cargs):
@@ -60,7 +71,7 @@
     # correct size.
     s = string_at(result, last_arg_byref(cargs))
     # Freeing the memory allocated within GEOS
-    libc.free(result)
+    free(result)
     return s
 
 def check_string(result, func, cargs):
@@ -73,7 +84,7 @@
     # Getting the string value at the pointer address.
     s = string_at(result)
     # Freeing the memory allocated within GEOS
-    libc.free(result)
+    free(result)
     return s
 
 def check_zero(result, func, cargs):
--- a/web/lib/django/contrib/gis/geos/prototypes/geom.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/prototypes/geom.py	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,8 @@
 from ctypes import c_char_p, c_int, c_size_t, c_ubyte, c_uint, POINTER
-from django.contrib.gis.geos.libgeos import lgeos, CS_PTR, GEOM_PTR, PREPGEOM_PTR, GEOS_PREPARE
+from django.contrib.gis.geos.libgeos import CS_PTR, GEOM_PTR, PREPGEOM_PTR, GEOS_PREPARE
 from django.contrib.gis.geos.prototypes.errcheck import \
     check_geom, check_minus_one, check_sized_string, check_string, check_zero
+from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
 
 # This is the return type used by binary output (WKB, HEX) routines.
 c_uchar_p = POINTER(c_ubyte)
@@ -63,56 +64,56 @@
 ### ctypes prototypes ###
 
 # Deprecated creation routines from WKB, HEX, WKT
-from_hex = bin_constructor(lgeos.GEOSGeomFromHEX_buf)
-from_wkb = bin_constructor(lgeos.GEOSGeomFromWKB_buf)
-from_wkt = geom_output(lgeos.GEOSGeomFromWKT, [c_char_p])
+from_hex = bin_constructor(GEOSFunc('GEOSGeomFromHEX_buf'))
+from_wkb = bin_constructor(GEOSFunc('GEOSGeomFromWKB_buf'))
+from_wkt = geom_output(GEOSFunc('GEOSGeomFromWKT'), [c_char_p])
 
-# Output routines
-to_hex = bin_output(lgeos.GEOSGeomToHEX_buf)
-to_wkb = bin_output(lgeos.GEOSGeomToWKB_buf)
-to_wkt = string_from_geom(lgeos.GEOSGeomToWKT)
+# Deprecated output routines
+to_hex = bin_output(GEOSFunc('GEOSGeomToHEX_buf'))
+to_wkb = bin_output(GEOSFunc('GEOSGeomToWKB_buf'))
+to_wkt = string_from_geom(GEOSFunc('GEOSGeomToWKT'))
 
 # The GEOS geometry type, typeid, num_coordites and number of geometries
-geos_normalize = int_from_geom(lgeos.GEOSNormalize)
-geos_type = string_from_geom(lgeos.GEOSGeomType)
-geos_typeid = int_from_geom(lgeos.GEOSGeomTypeId)
-get_dims = int_from_geom(lgeos.GEOSGeom_getDimensions, zero=True)
-get_num_coords = int_from_geom(lgeos.GEOSGetNumCoordinates)
-get_num_geoms = int_from_geom(lgeos.GEOSGetNumGeometries)
+geos_normalize = int_from_geom(GEOSFunc('GEOSNormalize'))
+geos_type = string_from_geom(GEOSFunc('GEOSGeomType'))
+geos_typeid = int_from_geom(GEOSFunc('GEOSGeomTypeId'))
+get_dims = int_from_geom(GEOSFunc('GEOSGeom_getDimensions'), zero=True)
+get_num_coords = int_from_geom(GEOSFunc('GEOSGetNumCoordinates'))
+get_num_geoms = int_from_geom(GEOSFunc('GEOSGetNumGeometries'))
 
 # Geometry creation factories
-create_point = geom_output(lgeos.GEOSGeom_createPoint, [CS_PTR])
-create_linestring = geom_output(lgeos.GEOSGeom_createLineString, [CS_PTR])
-create_linearring = geom_output(lgeos.GEOSGeom_createLinearRing, [CS_PTR])
+create_point = geom_output(GEOSFunc('GEOSGeom_createPoint'), [CS_PTR])
+create_linestring = geom_output(GEOSFunc('GEOSGeom_createLineString'), [CS_PTR])
+create_linearring = geom_output(GEOSFunc('GEOSGeom_createLinearRing'), [CS_PTR])
 
 # Polygon and collection creation routines are special and will not
 # have their argument types defined.
-create_polygon = geom_output(lgeos.GEOSGeom_createPolygon, None)
-create_collection = geom_output(lgeos.GEOSGeom_createCollection, None)
+create_polygon = geom_output(GEOSFunc('GEOSGeom_createPolygon'), None)
+create_collection = geom_output(GEOSFunc('GEOSGeom_createCollection'), None)
 
 # Ring routines
-get_extring = geom_output(lgeos.GEOSGetExteriorRing, [GEOM_PTR])
-get_intring = geom_index(lgeos.GEOSGetInteriorRingN)
-get_nrings = int_from_geom(lgeos.GEOSGetNumInteriorRings)
+get_extring = geom_output(GEOSFunc('GEOSGetExteriorRing'), [GEOM_PTR])
+get_intring = geom_index(GEOSFunc('GEOSGetInteriorRingN'))
+get_nrings = int_from_geom(GEOSFunc('GEOSGetNumInteriorRings'))
 
 # Collection Routines
-get_geomn = geom_index(lgeos.GEOSGetGeometryN)
+get_geomn = geom_index(GEOSFunc('GEOSGetGeometryN'))
 
 # Cloning
-geom_clone = lgeos.GEOSGeom_clone
+geom_clone = GEOSFunc('GEOSGeom_clone')
 geom_clone.argtypes = [GEOM_PTR]
 geom_clone.restype = GEOM_PTR
 
 # Destruction routine.
-destroy_geom = lgeos.GEOSGeom_destroy
+destroy_geom = GEOSFunc('GEOSGeom_destroy')
 destroy_geom.argtypes = [GEOM_PTR]
 destroy_geom.restype = None
 
 # SRID routines
-geos_get_srid = lgeos.GEOSGetSRID
+geos_get_srid = GEOSFunc('GEOSGetSRID')
 geos_get_srid.argtypes = [GEOM_PTR]
 geos_get_srid.restype = c_int
 
-geos_set_srid = lgeos.GEOSSetSRID
+geos_set_srid = GEOSFunc('GEOSSetSRID')
 geos_set_srid.argtypes = [GEOM_PTR, c_int]
 geos_set_srid.restype = None
--- a/web/lib/django/contrib/gis/geos/prototypes/io.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/prototypes/io.py	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,10 @@
-from ctypes import c_char_p, c_int, c_char, c_size_t, Structure, POINTER
-from django.contrib.gis.geos.libgeos import lgeos, GEOM_PTR
+import threading
+from ctypes import byref, c_char_p, c_int, c_char, c_size_t, Structure, POINTER
+from django.contrib.gis.geos.base import GEOSBase
+from django.contrib.gis.geos.libgeos import GEOM_PTR
 from django.contrib.gis.geos.prototypes.errcheck import check_geom, check_string, check_sized_string
 from django.contrib.gis.geos.prototypes.geom import c_uchar_p, geos_char_p
+from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
 
 ### The WKB/WKT Reader/Writer structures and pointers ###
 class WKTReader_st(Structure): pass
@@ -15,34 +18,34 @@
 WKB_WRITE_PTR = POINTER(WKBReader_st)
 
 ### WKTReader routines ###
-wkt_reader_create = lgeos.GEOSWKTReader_create
+wkt_reader_create = GEOSFunc('GEOSWKTReader_create')
 wkt_reader_create.restype = WKT_READ_PTR
 
-wkt_reader_destroy = lgeos.GEOSWKTReader_destroy
+wkt_reader_destroy = GEOSFunc('GEOSWKTReader_destroy')
 wkt_reader_destroy.argtypes = [WKT_READ_PTR]
 
-wkt_reader_read = lgeos.GEOSWKTReader_read
+wkt_reader_read = GEOSFunc('GEOSWKTReader_read')
 wkt_reader_read.argtypes = [WKT_READ_PTR, c_char_p]
 wkt_reader_read.restype = GEOM_PTR
 wkt_reader_read.errcheck = check_geom
 
 ### WKTWriter routines ###
-wkt_writer_create = lgeos.GEOSWKTWriter_create
+wkt_writer_create = GEOSFunc('GEOSWKTWriter_create')
 wkt_writer_create.restype = WKT_WRITE_PTR
 
-wkt_writer_destroy = lgeos.GEOSWKTWriter_destroy
+wkt_writer_destroy = GEOSFunc('GEOSWKTWriter_destroy')
 wkt_writer_destroy.argtypes = [WKT_WRITE_PTR]
 
-wkt_writer_write = lgeos.GEOSWKTWriter_write
+wkt_writer_write = GEOSFunc('GEOSWKTWriter_write')
 wkt_writer_write.argtypes = [WKT_WRITE_PTR, GEOM_PTR]
 wkt_writer_write.restype = geos_char_p
 wkt_writer_write.errcheck = check_string
 
 ### WKBReader routines ###
-wkb_reader_create = lgeos.GEOSWKBReader_create
+wkb_reader_create = GEOSFunc('GEOSWKBReader_create')
 wkb_reader_create.restype = WKB_READ_PTR
 
-wkb_reader_destroy = lgeos.GEOSWKBReader_destroy
+wkb_reader_destroy = GEOSFunc('GEOSWKBReader_destroy')
 wkb_reader_destroy.argtypes = [WKB_READ_PTR]
 
 def wkb_read_func(func):
@@ -56,14 +59,14 @@
     func.errcheck = check_geom
     return func
 
-wkb_reader_read = wkb_read_func(lgeos.GEOSWKBReader_read)
-wkb_reader_read_hex = wkb_read_func(lgeos.GEOSWKBReader_readHEX)
+wkb_reader_read = wkb_read_func(GEOSFunc('GEOSWKBReader_read'))
+wkb_reader_read_hex = wkb_read_func(GEOSFunc('GEOSWKBReader_readHEX'))
 
 ### WKBWriter routines ###
-wkb_writer_create = lgeos.GEOSWKBWriter_create
+wkb_writer_create = GEOSFunc('GEOSWKBWriter_create')
 wkb_writer_create.restype = WKB_WRITE_PTR
 
-wkb_writer_destroy = lgeos.GEOSWKBWriter_destroy
+wkb_writer_destroy = GEOSFunc('GEOSWKBWriter_destroy')
 wkb_writer_destroy.argtypes = [WKB_WRITE_PTR]
 
 # WKB Writing prototypes.
@@ -73,8 +76,8 @@
     func.errcheck = check_sized_string
     return func
 
-wkb_writer_write = wkb_write_func(lgeos.GEOSWKBWriter_write)
-wkb_writer_write_hex = wkb_write_func(lgeos.GEOSWKBWriter_writeHEX)
+wkb_writer_write = wkb_write_func(GEOSFunc('GEOSWKBWriter_write'))
+wkb_writer_write_hex = wkb_write_func(GEOSFunc('GEOSWKBWriter_writeHEX'))
 
 # WKBWriter property getter/setter prototypes.
 def wkb_writer_get(func, restype=c_int):
@@ -86,9 +89,154 @@
     func.argtypes = [WKB_WRITE_PTR, argtype]
     return func
 
-wkb_writer_get_byteorder = wkb_writer_get(lgeos.GEOSWKBWriter_getByteOrder)
-wkb_writer_set_byteorder = wkb_writer_set(lgeos.GEOSWKBWriter_setByteOrder)
-wkb_writer_get_outdim    = wkb_writer_get(lgeos.GEOSWKBWriter_getOutputDimension)
-wkb_writer_set_outdim    = wkb_writer_set(lgeos.GEOSWKBWriter_setOutputDimension)
-wkb_writer_get_include_srid = wkb_writer_get(lgeos.GEOSWKBWriter_getIncludeSRID, restype=c_char)
-wkb_writer_set_include_srid = wkb_writer_set(lgeos.GEOSWKBWriter_setIncludeSRID, argtype=c_char)
+wkb_writer_get_byteorder = wkb_writer_get(GEOSFunc('GEOSWKBWriter_getByteOrder'))
+wkb_writer_set_byteorder = wkb_writer_set(GEOSFunc('GEOSWKBWriter_setByteOrder'))
+wkb_writer_get_outdim    = wkb_writer_get(GEOSFunc('GEOSWKBWriter_getOutputDimension'))
+wkb_writer_set_outdim    = wkb_writer_set(GEOSFunc('GEOSWKBWriter_setOutputDimension'))
+wkb_writer_get_include_srid = wkb_writer_get(GEOSFunc('GEOSWKBWriter_getIncludeSRID'), restype=c_char)
+wkb_writer_set_include_srid = wkb_writer_set(GEOSFunc('GEOSWKBWriter_setIncludeSRID'), argtype=c_char)
+
+### Base I/O Class ###
+class IOBase(GEOSBase):
+    "Base class for GEOS I/O objects."
+    def __init__(self):
+        # Getting the pointer with the constructor.
+        self.ptr = self._constructor()
+
+    def __del__(self):
+        # Cleaning up with the appropriate destructor.
+        if self._ptr: self._destructor(self._ptr)
+
+### Base WKB/WKT Reading and Writing objects ###
+
+# Non-public WKB/WKT reader classes for internal use because
+# their `read` methods return _pointers_ instead of GEOSGeometry
+# objects.
+class _WKTReader(IOBase):
+    _constructor = wkt_reader_create
+    _destructor = wkt_reader_destroy
+    ptr_type = WKT_READ_PTR
+
+    def read(self, wkt):
+        if not isinstance(wkt, basestring): raise TypeError
+        return wkt_reader_read(self.ptr, wkt)
+
+class _WKBReader(IOBase):
+    _constructor = wkb_reader_create
+    _destructor = wkb_reader_destroy
+    ptr_type = WKB_READ_PTR
+
+    def read(self, wkb):
+        "Returns a _pointer_ to C GEOS Geometry object from the given WKB."
+        if isinstance(wkb, buffer):
+            wkb_s = str(wkb)
+            return wkb_reader_read(self.ptr, wkb_s, len(wkb_s))
+        elif isinstance(wkb, basestring):
+            return wkb_reader_read_hex(self.ptr, wkb, len(wkb))
+        else:
+            raise TypeError
+
+### WKB/WKT Writer Classes ###
+class WKTWriter(IOBase):
+    _constructor = wkt_writer_create
+    _destructor = wkt_writer_destroy
+    ptr_type = WKT_WRITE_PTR
+
+    def write(self, geom):
+        "Returns the WKT representation of the given geometry."
+        return wkt_writer_write(self.ptr, geom.ptr)
+
+class WKBWriter(IOBase):
+    _constructor = wkb_writer_create
+    _destructor = wkb_writer_destroy
+    ptr_type = WKB_WRITE_PTR
+
+    def write(self, geom):
+        "Returns the WKB representation of the given geometry."
+        return buffer(wkb_writer_write(self.ptr, geom.ptr, byref(c_size_t())))
+
+    def write_hex(self, geom):
+        "Returns the HEXEWKB representation of the given geometry."
+        return wkb_writer_write_hex(self.ptr, geom.ptr, byref(c_size_t()))
+
+    ### WKBWriter Properties ###
+
+    # Property for getting/setting the byteorder.
+    def _get_byteorder(self):
+        return wkb_writer_get_byteorder(self.ptr)
+
+    def _set_byteorder(self, order):
+        if not order in (0, 1): raise ValueError('Byte order parameter must be 0 (Big Endian) or 1 (Little Endian).')
+        wkb_writer_set_byteorder(self.ptr, order)
+
+    byteorder = property(_get_byteorder, _set_byteorder)
+
+    # Property for getting/setting the output dimension.
+    def _get_outdim(self):
+        return wkb_writer_get_outdim(self.ptr)
+
+    def _set_outdim(self, new_dim):
+        if not new_dim in (2, 3): raise ValueError('WKB output dimension must be 2 or 3')
+        wkb_writer_set_outdim(self.ptr, new_dim)
+
+    outdim = property(_get_outdim, _set_outdim)
+
+    # Property for getting/setting the include srid flag.
+    def _get_include_srid(self):
+        return bool(ord(wkb_writer_get_include_srid(self.ptr)))
+
+    def _set_include_srid(self, include):
+        if bool(include): flag = chr(1)
+        else: flag = chr(0)
+        wkb_writer_set_include_srid(self.ptr, flag)
+
+    srid = property(_get_include_srid, _set_include_srid)
+
+# `ThreadLocalIO` object holds instances of the WKT and WKB reader/writer
+# objects that are local to the thread.  The `GEOSGeometry` internals
+# access these instances by calling the module-level functions, defined
+# below. 
+class ThreadLocalIO(threading.local):
+    wkt_r = None
+    wkt_w = None
+    wkb_r = None
+    wkb_w = None
+    ewkb_w = None
+    ewkb_w3d = None
+
+thread_context = ThreadLocalIO()
+
+# These module-level routines return the I/O object that is local to the
+# the thread.  If the I/O object does not exist yet it will be initialized.
+def wkt_r():
+    if not thread_context.wkt_r:
+        thread_context.wkt_r = _WKTReader()
+    return thread_context.wkt_r
+
+def wkt_w():
+    if not thread_context.wkt_w:
+        thread_context.wkt_w = WKTWriter()
+    return thread_context.wkt_w
+
+def wkb_r():
+    if not thread_context.wkb_r:
+        thread_context.wkb_r = _WKBReader()
+    return thread_context.wkb_r
+
+def wkb_w():
+   if not thread_context.wkb_w:
+       thread_context.wkb_w = WKBWriter()
+   return thread_context.wkb_w
+
+def ewkb_w():
+    if not thread_context.ewkb_w:
+        thread_context.ewkb_w = WKBWriter()
+        thread_context.ewkb_w.srid = True
+    return thread_context.ewkb_w
+
+def ewkb_w3d():
+    if not thread_context.ewkb_w3d:
+        thread_context.ewkb_w3d = WKBWriter()
+        thread_context.ewkb_w3d.srid = True
+        thread_context.ewkb_w3d.outdim = 3
+    return thread_context.ewkb_w3d
--- a/web/lib/django/contrib/gis/geos/prototypes/misc.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/prototypes/misc.py	Tue May 25 02:43:45 2010 +0200
@@ -3,8 +3,9 @@
  ones that return the area, distance, and length.
 """
 from ctypes import c_int, c_double, POINTER
-from django.contrib.gis.geos.libgeos import lgeos, GEOM_PTR
+from django.contrib.gis.geos.libgeos import GEOM_PTR
 from django.contrib.gis.geos.prototypes.errcheck import check_dbl
+from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
 
 ### ctypes generator function ###
 def dbl_from_geom(func, num_geom=1):
@@ -22,6 +23,6 @@
 ### ctypes prototypes ###
 
 # Area, distance, and length prototypes.
-geos_area = dbl_from_geom(lgeos.GEOSArea)
-geos_distance = dbl_from_geom(lgeos.GEOSDistance, num_geom=2)
-geos_length = dbl_from_geom(lgeos.GEOSLength)
+geos_area = dbl_from_geom(GEOSFunc('GEOSArea'))
+geos_distance = dbl_from_geom(GEOSFunc('GEOSDistance'), num_geom=2)
+geos_length = dbl_from_geom(GEOSFunc('GEOSLength'))
--- a/web/lib/django/contrib/gis/geos/prototypes/predicates.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/prototypes/predicates.py	Tue May 25 02:43:45 2010 +0200
@@ -3,8 +3,9 @@
  unary and binary predicate operations on geometries.
 """
 from ctypes import c_char, c_char_p, c_double
-from django.contrib.gis.geos.libgeos import lgeos, GEOM_PTR
+from django.contrib.gis.geos.libgeos import GEOM_PTR
 from django.contrib.gis.geos.prototypes.errcheck import check_predicate
+from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
 
 ## Binary & unary predicate functions ##
 def binary_predicate(func, *args):
@@ -24,20 +25,20 @@
     return func
 
 ## Unary Predicates ##
-geos_hasz = unary_predicate(lgeos.GEOSHasZ)
-geos_isempty = unary_predicate(lgeos.GEOSisEmpty)
-geos_isring = unary_predicate(lgeos.GEOSisRing)
-geos_issimple = unary_predicate(lgeos.GEOSisSimple)
-geos_isvalid = unary_predicate(lgeos.GEOSisValid)
+geos_hasz = unary_predicate(GEOSFunc('GEOSHasZ'))
+geos_isempty = unary_predicate(GEOSFunc('GEOSisEmpty'))
+geos_isring = unary_predicate(GEOSFunc('GEOSisRing'))
+geos_issimple = unary_predicate(GEOSFunc('GEOSisSimple'))
+geos_isvalid = unary_predicate(GEOSFunc('GEOSisValid'))
 
 ## Binary Predicates ##
-geos_contains = binary_predicate(lgeos.GEOSContains)
-geos_crosses = binary_predicate(lgeos.GEOSCrosses)
-geos_disjoint = binary_predicate(lgeos.GEOSDisjoint)
-geos_equals = binary_predicate(lgeos.GEOSEquals)
-geos_equalsexact = binary_predicate(lgeos.GEOSEqualsExact, c_double)
-geos_intersects = binary_predicate(lgeos.GEOSIntersects)
-geos_overlaps = binary_predicate(lgeos.GEOSOverlaps)
-geos_relatepattern = binary_predicate(lgeos.GEOSRelatePattern, c_char_p)
-geos_touches = binary_predicate(lgeos.GEOSTouches)
-geos_within = binary_predicate(lgeos.GEOSWithin)
+geos_contains = binary_predicate(GEOSFunc('GEOSContains'))
+geos_crosses = binary_predicate(GEOSFunc('GEOSCrosses'))
+geos_disjoint = binary_predicate(GEOSFunc('GEOSDisjoint'))
+geos_equals = binary_predicate(GEOSFunc('GEOSEquals'))
+geos_equalsexact = binary_predicate(GEOSFunc('GEOSEqualsExact'), c_double)
+geos_intersects = binary_predicate(GEOSFunc('GEOSIntersects'))
+geos_overlaps = binary_predicate(GEOSFunc('GEOSOverlaps'))
+geos_relatepattern = binary_predicate(GEOSFunc('GEOSRelatePattern'), c_char_p)
+geos_touches = binary_predicate(GEOSFunc('GEOSTouches'))
+geos_within = binary_predicate(GEOSFunc('GEOSWithin'))
--- a/web/lib/django/contrib/gis/geos/prototypes/prepared.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/prototypes/prepared.py	Tue May 25 02:43:45 2010 +0200
@@ -1,13 +1,14 @@
 from ctypes import c_char
-from django.contrib.gis.geos.libgeos import lgeos, GEOM_PTR, PREPGEOM_PTR
+from django.contrib.gis.geos.libgeos import GEOM_PTR, PREPGEOM_PTR
 from django.contrib.gis.geos.prototypes.errcheck import check_predicate
+from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
 
 # Prepared geometry constructor and destructors.
-geos_prepare = lgeos.GEOSPrepare
+geos_prepare = GEOSFunc('GEOSPrepare')
 geos_prepare.argtypes = [GEOM_PTR]
 geos_prepare.restype = PREPGEOM_PTR
 
-prepared_destroy = lgeos.GEOSPreparedGeom_destroy
+prepared_destroy = GEOSFunc('GEOSPreparedGeom_destroy')
 prepared_destroy.argtpes = [PREPGEOM_PTR]
 prepared_destroy.restype = None
 
@@ -18,7 +19,7 @@
     func.errcheck = check_predicate
     return func
 
-prepared_contains = prepared_predicate(lgeos.GEOSPreparedContains)
-prepared_contains_properly = prepared_predicate(lgeos.GEOSPreparedContainsProperly)
-prepared_covers = prepared_predicate(lgeos.GEOSPreparedCovers)
-prepared_intersects = prepared_predicate(lgeos.GEOSPreparedIntersects)
+prepared_contains = prepared_predicate(GEOSFunc('GEOSPreparedContains'))
+prepared_contains_properly = prepared_predicate(GEOSFunc('GEOSPreparedContainsProperly'))
+prepared_covers = prepared_predicate(GEOSFunc('GEOSPreparedCovers'))
+prepared_intersects = prepared_predicate(GEOSFunc('GEOSPreparedIntersects'))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/geos/prototypes/threadsafe.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,90 @@
+import threading
+from django.contrib.gis.geos.libgeos import lgeos, notice_h, error_h, CONTEXT_PTR
+
+class GEOSContextHandle(object):
+    """
+    Python object representing a GEOS context handle.
+    """
+    def __init__(self):
+        # Initializing the context handler for this thread with
+        # the notice and error handler.
+        self.ptr = lgeos.initGEOS_r(notice_h, error_h)
+
+    def __del__(self):
+        if self.ptr: lgeos.finishGEOS_r(self.ptr)
+
+# Defining a thread-local object and creating an instance
+# to hold a reference to GEOSContextHandle for this thread.
+class GEOSContext(threading.local):
+    handle = None
+
+thread_context = GEOSContext()
+
+def call_geos_threaded(cfunc, args):
+    """
+    This module-level routine calls the specified GEOS C thread-safe
+    function with the context for this current thread.
+    """
+    # If a context handle does not exist for this thread, initialize one.
+    if not thread_context.handle:
+        thread_context.handle = GEOSContextHandle()
+    # Call the threaded GEOS routine with pointer of the context handle
+    # as the first argument.
+    return cfunc(thread_context.handle.ptr, *args)
+
+class GEOSFunc(object):
+    """
+    Class that serves as a wrapper for GEOS C Functions, and will
+    use thread-safe function variants when available.
+    """
+    def __init__(self, func_name):
+        try:
+            # GEOS thread-safe function signatures end with '_r', and
+            # take an additional context handle parameter.
+            self.cfunc = getattr(lgeos, func_name + '_r')
+            self.threaded = True
+        except AttributeError:
+            # Otherwise, use usual function.
+            self.cfunc = getattr(lgeos, func_name)
+            self.threaded = False
+
+    def __call__(self, *args):
+        if self.threaded:
+            return call_geos_threaded(self.cfunc, args)
+        else:
+            return self.cfunc(*args)
+
+    def __str__(self):
+        return self.cfunc.__name__
+
+    # argtypes property
+    def _get_argtypes(self):
+        return self.cfunc.argtypes
+
+    def _set_argtypes(self, argtypes):
+        if self.threaded:
+            new_argtypes = [CONTEXT_PTR]
+            new_argtypes.extend(argtypes)
+            self.cfunc.argtypes = new_argtypes
+        else:
+            self.cfunc.argtypes = argtypes
+
+    argtypes = property(_get_argtypes, _set_argtypes)
+
+    # restype property
+    def _get_restype(self):
+        return self.cfunc.restype
+
+    def _set_restype(self, restype):
+        self.cfunc.restype = restype
+
+    restype = property(_get_restype, _set_restype)
+
+    # errcheck property
+    def _get_errcheck(self):
+        return self.cfunc.errcheck
+
+    def _set_errcheck(self, errcheck):
+        self.cfunc.errcheck = errcheck
+
+    errcheck = property(_get_errcheck, _set_errcheck)
--- a/web/lib/django/contrib/gis/geos/prototypes/topology.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/prototypes/topology.py	Tue May 25 02:43:45 2010 +0200
@@ -8,9 +8,10 @@
            'geos_simplify', 'geos_symdifference', 'geos_union', 'geos_relate']
 
 from ctypes import c_char_p, c_double, c_int
-from django.contrib.gis.geos.libgeos import lgeos, GEOM_PTR, GEOS_PREPARE
+from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOS_PREPARE
 from django.contrib.gis.geos.prototypes.errcheck import check_geom, check_string
 from django.contrib.gis.geos.prototypes.geom import geos_char_p
+from django.contrib.gis.geos.prototypes.threadsafe import GEOSFunc
 
 def topology(func, *args):
     "For GEOS unary topology functions."
@@ -22,29 +23,29 @@
     return func
 
 ### Topology Routines ###
-geos_boundary = topology(lgeos.GEOSBoundary)
-geos_buffer = topology(lgeos.GEOSBuffer, c_double, c_int)
-geos_centroid = topology(lgeos.GEOSGetCentroid)
-geos_convexhull = topology(lgeos.GEOSConvexHull)
-geos_difference = topology(lgeos.GEOSDifference, GEOM_PTR)
-geos_envelope = topology(lgeos.GEOSEnvelope)
-geos_intersection = topology(lgeos.GEOSIntersection, GEOM_PTR)
-geos_linemerge = topology(lgeos.GEOSLineMerge)
-geos_pointonsurface = topology(lgeos.GEOSPointOnSurface)
-geos_preservesimplify = topology(lgeos.GEOSTopologyPreserveSimplify, c_double)
-geos_simplify = topology(lgeos.GEOSSimplify, c_double)
-geos_symdifference = topology(lgeos.GEOSSymDifference, GEOM_PTR)
-geos_union = topology(lgeos.GEOSUnion, GEOM_PTR)
+geos_boundary = topology(GEOSFunc('GEOSBoundary'))
+geos_buffer = topology(GEOSFunc('GEOSBuffer'), c_double, c_int)
+geos_centroid = topology(GEOSFunc('GEOSGetCentroid'))
+geos_convexhull = topology(GEOSFunc('GEOSConvexHull'))
+geos_difference = topology(GEOSFunc('GEOSDifference'), GEOM_PTR)
+geos_envelope = topology(GEOSFunc('GEOSEnvelope'))
+geos_intersection = topology(GEOSFunc('GEOSIntersection'), GEOM_PTR)
+geos_linemerge = topology(GEOSFunc('GEOSLineMerge'))
+geos_pointonsurface = topology(GEOSFunc('GEOSPointOnSurface'))
+geos_preservesimplify = topology(GEOSFunc('GEOSTopologyPreserveSimplify'), c_double)
+geos_simplify = topology(GEOSFunc('GEOSSimplify'), c_double)
+geos_symdifference = topology(GEOSFunc('GEOSSymDifference'), GEOM_PTR)
+geos_union = topology(GEOSFunc('GEOSUnion'), GEOM_PTR)
 
 # GEOSRelate returns a string, not a geometry.
-geos_relate = lgeos.GEOSRelate
+geos_relate = GEOSFunc('GEOSRelate')
 geos_relate.argtypes = [GEOM_PTR, GEOM_PTR]
 geos_relate.restype = geos_char_p
 geos_relate.errcheck = check_string
 
 # Routines only in GEOS 3.1+
 if GEOS_PREPARE:
-    geos_cascaded_union = lgeos.GEOSUnionCascaded
+    geos_cascaded_union = GEOSFunc('GEOSUnionCascaded')
     geos_cascaded_union.argtypes = [GEOM_PTR]
     geos_cascaded_union.restype = GEOM_PTR
     __all__.append('geos_cascaded_union')
--- a/web/lib/django/contrib/gis/geos/tests/test_geos.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/tests/test_geos.py	Tue May 25 02:43:45 2010 +0200
@@ -71,6 +71,49 @@
             geom = fromstr(g.wkt)
             self.assertEqual(g.hex, geom.hex)
 
+    def test01b_hexewkb(self):
+        "Testing (HEX)EWKB output."
+        from binascii import a2b_hex
+
+        pnt_2d = Point(0, 1, srid=4326)
+        pnt_3d = Point(0, 1, 2, srid=4326)
+        
+        # OGC-compliant HEX will not have SRID nor Z value.
+        self.assertEqual(ogc_hex, pnt_2d.hex)
+        self.assertEqual(ogc_hex, pnt_3d.hex)
+
+        # HEXEWKB should be appropriate for its dimension -- have to use an
+        # a WKBWriter w/dimension set accordingly, else GEOS will insert
+        # garbage into 3D coordinate if there is none.  Also, GEOS has a
+        # a bug in versions prior to 3.1 that puts the X coordinate in
+        # place of Z; an exception should be raised on those versions.
+        self.assertEqual(hexewkb_2d, pnt_2d.hexewkb)
+        if GEOS_PREPARE:
+            self.assertEqual(hexewkb_3d, pnt_3d.hexewkb)
+            self.assertEqual(True, GEOSGeometry(hexewkb_3d).hasz)
+        else:
+            try:
+                hexewkb = pnt_3d.hexewkb
+            except GEOSException:
+                pass
+            else:
+                self.fail('Should have raised GEOSException.')
+
+        # Same for EWKB.
+        self.assertEqual(buffer(a2b_hex(hexewkb_2d)), pnt_2d.ewkb)
+        if GEOS_PREPARE:
+            self.assertEqual(buffer(a2b_hex(hexewkb_3d)), pnt_3d.ewkb)
+        else:
+            try:
+                ewkb = pnt_3d.ewkb
+            except GEOSException:
+                pass
+            else:
+                self.fail('Should have raised GEOSException')
+        
+        # Redundant sanity check.
+        self.assertEqual(4326, GEOSGeometry(hexewkb_2d).srid)
+
     def test01c_kml(self):
         "Testing KML output."
         for tg in wkt_out:
@@ -778,7 +821,7 @@
 
     def test22_copy(self):
         "Testing use with the Python `copy` module."
-        import copy
+        import django.utils.copycompat as copy
         poly = GEOSGeometry('POLYGON((0 0, 0 23, 23 23, 23 0, 0 0), (5 5, 5 10, 10 10, 10 5, 5 5))')
         cpy1 = copy.copy(poly)
         cpy2 = copy.deepcopy(poly)
--- a/web/lib/django/contrib/gis/geos/tests/test_geos_mutation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/geos/tests/test_geos_mutation.py	Tue May 25 02:43:45 2010 +0200
@@ -2,9 +2,11 @@
 # Modified from original contribution by Aryeh Leib Taurog, which was
 # released under the New BSD license.
 import unittest
+
+import django.utils.copycompat as copy
+
 from django.contrib.gis.geos import *
 from django.contrib.gis.geos.error import GEOSIndexError
-import copy
 
 def getItem(o,i): return o[i]
 def delItem(o,i): del o[i]
--- a/web/lib/django/contrib/gis/management/commands/inspectdb.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/management/commands/inspectdb.py	Tue May 25 02:43:45 2010 +0200
@@ -1,188 +1,32 @@
-"""
- This overrides the traditional `inspectdb` command so that geographic databases
- may be introspected.
-"""
-
-from django.core.management.commands.inspectdb import Command as InspectCommand
-from django.contrib.gis.db.backend import SpatialBackend
-
-class Command(InspectCommand):
-
-    # Mapping from lower-case OGC type to the corresponding GeoDjango field.
-    geofield_mapping = {'point' : 'PointField',
-                        'linestring' : 'LineStringField',
-                        'polygon' : 'PolygonField',
-                        'multipoint' : 'MultiPointField',
-                        'multilinestring' : 'MultiLineStringField',
-                        'multipolygon' : 'MultiPolygonField',
-                        'geometrycollection' : 'GeometryCollectionField',
-                        'geometry' : 'GeometryField',
-                        }
-
-    def geometry_columns(self):
-        """
-        Returns a datastructure of metadata information associated with the
-        `geometry_columns` (or equivalent) table.
-        """
-        # The `geo_cols` is a dictionary data structure that holds information
-        # about any geographic columns in the database.
-        geo_cols = {}
-        def add_col(table, column, coldata):
-            if table in geo_cols:
-                # If table already has a geometry column.
-                geo_cols[table][column] = coldata
-            else:
-                # Otherwise, create a dictionary indexed by column.
-                geo_cols[table] = { column : coldata }
+from optparse import make_option
 
-        if SpatialBackend.name == 'postgis':
-            # PostGIS holds all geographic column information in the `geometry_columns` table.
-            from django.contrib.gis.models import GeometryColumns
-            for geo_col in GeometryColumns.objects.all():
-                table = geo_col.f_table_name
-                column = geo_col.f_geometry_column
-                coldata = {'type' : geo_col.type, 'srid' : geo_col.srid, 'dim' : geo_col.coord_dimension}
-                add_col(table, column, coldata)
-            return geo_cols
-        elif SpatialBackend.name == 'mysql':
-            # On MySQL have to get all table metadata before hand; this means walking through
-            # each table and seeing if any column types are spatial.  Can't detect this with
-            # `cursor.description` (what the introspection module does) because all spatial types
-            # have the same integer type (255 for GEOMETRY).
-            from django.db import connection
-            cursor = connection.cursor()
-            cursor.execute('SHOW TABLES')
-            tables = cursor.fetchall();
-            for table_tup in tables:
-                table = table_tup[0]
-                table_desc = cursor.execute('DESCRIBE `%s`' % table)
-                col_info = cursor.fetchall()
-                for column, typ, null, key, default, extra in col_info:
-                    if typ in self.geofield_mapping: add_col(table, column, {'type' : typ})
-            return geo_cols
-        else:
-            # TODO: Oracle (has incomplete `geometry_columns` -- have to parse
-            #  SDO SQL to get specific type, SRID, and other information).
-            raise NotImplementedError('Geographic database inspection not available.')
+from django.core.management.base import CommandError
+from django.core.management.commands.inspectdb import Command as InspectDBCommand
 
-    def handle_inspection(self):
-        "Overloaded from Django's version to handle geographic database tables."
-        from django.db import connection
-        import keyword
-
-        geo_cols = self.geometry_columns()
-
-        table2model = lambda table_name: table_name.title().replace('_', '')
-
-        cursor = connection.cursor()
-        yield "# This is an auto-generated Django model module."
-        yield "# You'll have to do the following manually to clean this up:"
-        yield "#     * Rearrange models' order"
-        yield "#     * Make sure each model has one field with primary_key=True"
-        yield "# Feel free to rename the models, but don't rename db_table values or field names."
-        yield "#"
-        yield "# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'"
-        yield "# into your database."
-        yield ''
-        yield 'from django.contrib.gis.db import models'
-        yield ''
-        for table_name in connection.introspection.get_table_list(cursor):
-            # Getting the geographic table dictionary.
-            geo_table = geo_cols.get(table_name, {})
+class Command(InspectDBCommand):
+    db_module = 'django.contrib.gis.db'
+    gis_tables = {}
 
-            yield 'class %s(models.Model):' % table2model(table_name)
-            try:
-                relations = connection.introspection.get_relations(cursor, table_name)
-            except NotImplementedError:
-                relations = {}
-            try:
-                indexes = connection.introspection.get_indexes(cursor, table_name)
-            except NotImplementedError:
-                indexes = {}
-            for i, row in enumerate(connection.introspection.get_table_description(cursor, table_name)):
-                att_name, iatt_name = row[0].lower(), row[0]
-                comment_notes = [] # Holds Field notes, to be displayed in a Python comment.
-                extra_params = {}  # Holds Field parameters such as 'db_column'.
-
-                if ' ' in att_name:
-                    extra_params['db_column'] = att_name
-                    att_name = att_name.replace(' ', '')
-                    comment_notes.append('Field renamed to remove spaces.')
-                if keyword.iskeyword(att_name):
-                    extra_params['db_column'] = att_name
-                    att_name += '_field'
-                    comment_notes.append('Field renamed because it was a Python reserved word.')
-
-                if i in relations:
-                    rel_to = relations[i][1] == table_name and "'self'" or table2model(relations[i][1])
-                    field_type = 'ForeignKey(%s' % rel_to
-                    if att_name.endswith('_id'):
-                        att_name = att_name[:-3]
-                    else:
-                        extra_params['db_column'] = att_name
-                else:
-                    if iatt_name in geo_table:
-                        ## Customization for Geographic Columns ##
-                        geo_col = geo_table[iatt_name]
-                        field_type = self.geofield_mapping[geo_col['type'].lower()]
-                        # Adding extra keyword arguments for the SRID and dimension (if not defaults).
-                        dim, srid = geo_col.get('dim', 2), geo_col.get('srid', 4326)
-                        if dim != 2: extra_params['dim'] = dim
-                        if srid != 4326: extra_params['srid'] = srid
-                    else:
-                        try:
-                            field_type = connection.introspection.get_field_type(row[1], row)
-                        except KeyError:
-                            field_type = 'TextField'
-                            comment_notes.append('This field type is a guess.')
+    def get_field_type(self, connection, table_name, row):
+        field_type, field_params, field_notes = super(Command, self).get_field_type(connection, table_name, row)
+        if field_type == 'GeometryField':
+            geo_col = row[0]
+            # Getting a more specific field type and any additional parameters
+            # from the `get_geometry_type` routine for the spatial backend.
+            field_type, geo_params = connection.introspection.get_geometry_type(table_name, geo_col)
+            field_params.update(geo_params)
+            # Adding the table name and column to the `gis_tables` dictionary, this
+            # allows us to track which tables need a GeoManager.
+            if table_name in self.gis_tables:
+                self.gis_tables[table_name].append(geo_col)
+            else:
+                self.gis_tables[table_name] = [geo_col]
+        return field_type, field_params, field_notes
 
-                    # This is a hook for data_types_reverse to return a tuple of
-                    # (field_type, extra_params_dict).
-                    if type(field_type) is tuple:
-                        field_type, new_params = field_type
-                        extra_params.update(new_params)
-
-                    # Add max_length for all CharFields.
-                    if field_type == 'CharField' and row[3]:
-                        extra_params['max_length'] = row[3]
-
-                    if field_type == 'DecimalField':
-                        extra_params['max_digits'] = row[4]
-                        extra_params['decimal_places'] = row[5]
-
-                    # Add primary_key and unique, if necessary.
-                    column_name = extra_params.get('db_column', att_name)
-                    if column_name in indexes:
-                        if indexes[column_name]['primary_key']:
-                            extra_params['primary_key'] = True
-                        elif indexes[column_name]['unique']:
-                            extra_params['unique'] = True
-
-                    field_type += '('
-
-                # Don't output 'id = meta.AutoField(primary_key=True)', because
-                # that's assumed if it doesn't exist.
-                if att_name == 'id' and field_type == 'AutoField(' and extra_params == {'primary_key': True}:
-                    continue
-
-                # Add 'null' and 'blank', if the 'null_ok' flag was present in the
-                # table description.
-                if row[6]: # If it's NULL...
-                    extra_params['blank'] = True
-                    if not field_type in ('TextField(', 'CharField('):
-                        extra_params['null'] = True
-
-                field_desc = '%s = models.%s' % (att_name, field_type)
-                if extra_params:
-                    if not field_desc.endswith('('):
-                        field_desc += ', '
-                    field_desc += ', '.join(['%s=%r' % (k, v) for k, v in extra_params.items()])
-                field_desc += ')'
-                if comment_notes:
-                    field_desc += ' # ' + ' '.join(comment_notes)
-                yield '    %s' % field_desc
-            if table_name in geo_cols:
-                yield '    objects = models.GeoManager()'
-            yield '    class Meta:'
-            yield '        db_table = %r' % table_name
-            yield ''
+    def get_meta(self, table_name):
+        meta_lines = super(Command, self).get_meta(table_name)
+        if table_name in self.gis_tables:
+            # If the table is a geographic one, then we need make
+            # GeoManager the default manager for the model.
+            meta_lines.insert(0, '    objects = models.GeoManager()')
+        return meta_lines
--- a/web/lib/django/contrib/gis/measure.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/measure.py	Tue May 25 02:43:45 2010 +0200
@@ -27,7 +27,7 @@
 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 """
-Distance and Area objects to allow for sensible and convienient calculation 
+Distance and Area objects to allow for sensible and convienient calculation
 and conversions.
 
 Authors: Robert Coup, Justin Bronn
@@ -70,7 +70,7 @@
     @classmethod
     def unit_attname(cls, unit_str):
         """
-        Retrieves the unit attribute name for the given unit string.  
+        Retrieves the unit attribute name for the given unit string.
         For example, if the given unit string is 'metre', 'm' would be returned.
         An exception is raised if an attribute cannot be found.
         """
@@ -165,51 +165,51 @@
         self.m, self._default_unit = self.default_units(kwargs)
         if default_unit and isinstance(default_unit, str):
             self._default_unit = default_unit
-    
+
     def __getattr__(self, name):
         if name in self.UNITS:
             return self.m / self.UNITS[name]
         else:
             raise AttributeError('Unknown unit type: %s' % name)
-    
+
     def __repr__(self):
         return 'Distance(%s=%s)' % (self._default_unit, getattr(self, self._default_unit))
 
     def __str__(self):
         return '%s %s' % (getattr(self, self._default_unit), self._default_unit)
-        
+
     def __cmp__(self, other):
         if isinstance(other, Distance):
             return cmp(self.m, other.m)
         else:
             return NotImplemented
-        
+
     def __add__(self, other):
         if isinstance(other, Distance):
             return Distance(default_unit=self._default_unit, m=(self.m + other.m))
         else:
             raise TypeError('Distance must be added with Distance')
-    
+
     def __iadd__(self, other):
         if isinstance(other, Distance):
             self.m += other.m
             return self
         else:
             raise TypeError('Distance must be added with Distance')
-    
+
     def __sub__(self, other):
         if isinstance(other, Distance):
             return Distance(default_unit=self._default_unit, m=(self.m - other.m))
         else:
             raise TypeError('Distance must be subtracted from Distance')
-    
+
     def __isub__(self, other):
         if isinstance(other, Distance):
             self.m -= other.m
             return self
         else:
             raise TypeError('Distance must be subtracted from Distance')
-    
+
     def __mul__(self, other):
         if isinstance(other, (int, float, long, Decimal)):
             return Distance(default_unit=self._default_unit, m=(self.m * float(other)))
@@ -217,14 +217,17 @@
             return Area(default_unit='sq_' + self._default_unit, sq_m=(self.m * other.m))
         else:
             raise TypeError('Distance must be multiplied with number or Distance')
-    
+
     def __imul__(self, other):
         if isinstance(other, (int, float, long, Decimal)):
             self.m *= float(other)
             return self
         else:
             raise TypeError('Distance must be multiplied with number')
-    
+
+    def __rmul__(self, other):
+        return self * other
+
     def __div__(self, other):
         if isinstance(other, (int, float, long, Decimal)):
             return Distance(default_unit=self._default_unit, m=(self.m / float(other)))
@@ -251,13 +254,13 @@
         self.sq_m, self._default_unit = self.default_units(kwargs)
         if default_unit and isinstance(default_unit, str):
             self._default_unit = default_unit
-    
+
     def __getattr__(self, name):
         if name in self.UNITS:
             return self.sq_m / self.UNITS[name]
         else:
             raise AttributeError('Unknown unit type: ' + name)
-    
+
     def __repr__(self):
         return 'Area(%s=%s)' % (self._default_unit, getattr(self, self._default_unit))
 
@@ -269,46 +272,49 @@
             return cmp(self.sq_m, other.sq_m)
         else:
             return NotImplemented
-        
+
     def __add__(self, other):
         if isinstance(other, Area):
             return Area(default_unit=self._default_unit, sq_m=(self.sq_m + other.sq_m))
         else:
             raise TypeError('Area must be added with Area')
-    
+
     def __iadd__(self, other):
         if isinstance(other, Area):
             self.sq_m += other.sq_m
             return self
         else:
             raise TypeError('Area must be added with Area')
-    
+
     def __sub__(self, other):
         if isinstance(other, Area):
             return Area(default_unit=self._default_unit, sq_m=(self.sq_m - other.sq_m))
         else:
             raise TypeError('Area must be subtracted from Area')
-    
+
     def __isub__(self, other):
         if isinstance(other, Area):
             self.sq_m -= other.sq_m
             return self
         else:
             raise TypeError('Area must be subtracted from Area')
-    
+
     def __mul__(self, other):
         if isinstance(other, (int, float, long, Decimal)):
             return Area(default_unit=self._default_unit, sq_m=(self.sq_m * float(other)))
         else:
             raise TypeError('Area must be multiplied with number')
-    
+
     def __imul__(self, other):
         if isinstance(other, (int, float, long, Decimal)):
             self.sq_m *= float(other)
             return self
         else:
             raise TypeError('Area must be multiplied with number')
-    
+
+    def __rmul__(self, other):
+        return self * other
+
     def __div__(self, other):
         if isinstance(other, (int, float, long, Decimal)):
             return Area(default_unit=self._default_unit, sq_m=(self.sq_m / float(other)))
@@ -324,7 +330,7 @@
 
     def __nonzero__(self):
         return bool(self.sq_m)
-        
+
 # Shortcuts
 D = Distance
 A = Area
--- a/web/lib/django/contrib/gis/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/models.py	Tue May 25 02:43:45 2010 +0200
@@ -1,233 +1,9 @@
-"""
- Imports the SpatialRefSys and GeometryColumns models dependent on the
- spatial database backend.
-"""
-import re
-from django.conf import settings
-
-# Checking for the presence of GDAL (needed for the SpatialReference object)
-from django.contrib.gis.gdal import HAS_GDAL, PYTHON23
-if HAS_GDAL:
-    from django.contrib.gis.gdal import SpatialReference
-
-class SpatialRefSysMixin(object):
-    """
-    The SpatialRefSysMixin is a class used by the database-dependent
-    SpatialRefSys objects to reduce redundnant code.
-    """
-    # For pulling out the spheroid from the spatial reference string. This
-    # regular expression is used only if the user does not have GDAL installed.
-    # TODO: Flattening not used in all ellipsoids, could also be a minor axis,
-    # or 'b' parameter.
-    spheroid_regex = re.compile(r'.+SPHEROID\[\"(?P<name>.+)\",(?P<major>\d+(\.\d+)?),(?P<flattening>\d{3}\.\d+),')
-
-    # For pulling out the units on platforms w/o GDAL installed.
-    # TODO: Figure out how to pull out angular units of projected coordinate system and
-    # fix for LOCAL_CS types.  GDAL should be highly recommended for performing
-    # distance queries.
-    units_regex = re.compile(r'.+UNIT ?\["(?P<unit_name>[\w \'\(\)]+)", ?(?P<unit>[\d\.]+)(,AUTHORITY\["(?P<unit_auth_name>[\w \'\(\)]+)","(?P<unit_auth_val>\d+)"\])?\]([\w ]+)?(,AUTHORITY\["(?P<auth_name>[\w \'\(\)]+)","(?P<auth_val>\d+)"\])?\]$')
-
-    def srs(self):
-        """
-        Returns a GDAL SpatialReference object, if GDAL is installed.
-        """
-        if HAS_GDAL:
-            # TODO: Is caching really necessary here?  Is complexity worth it?
-            if hasattr(self, '_srs'):
-                # Returning a clone of the cached SpatialReference object.
-                return self._srs.clone()
-            else:
-                # Attempting to cache a SpatialReference object.
-
-                # Trying to get from WKT first.
-                try:
-                    self._srs = SpatialReference(self.wkt)
-                    return self.srs
-                except Exception, msg:
-                    pass
-
-                try:
-                    self._srs = SpatialReference(self.proj4text)
-                    return self.srs
-                except Exception, msg:
-                    pass
-
-                raise Exception('Could not get OSR SpatialReference from WKT: %s\nError:\n%s' % (self.wkt, msg))
-        else:
-            raise Exception('GDAL is not installed.')
-    srs = property(srs)
-
-    def ellipsoid(self):
-        """
-        Returns a tuple of the ellipsoid parameters:
-        (semimajor axis, semiminor axis, and inverse flattening).
-        """
-        if HAS_GDAL:
-            return self.srs.ellipsoid
-        else:
-            m = self.spheroid_regex.match(self.wkt)
-            if m: return (float(m.group('major')), float(m.group('flattening')))
-            else: return None
-    ellipsoid = property(ellipsoid)
-
-    def name(self):
-        "Returns the projection name."
-        return self.srs.name
-    name = property(name)
-
-    def spheroid(self):
-        "Returns the spheroid name for this spatial reference."
-        return self.srs['spheroid']
-    spheroid = property(spheroid)
-
-    def datum(self):
-        "Returns the datum for this spatial reference."
-        return self.srs['datum']
-    datum = property(datum)
-
-    def projected(self):
-        "Is this Spatial Reference projected?"
-        if HAS_GDAL:
-            return self.srs.projected
-        else:
-            return self.wkt.startswith('PROJCS')
-    projected = property(projected)
-
-    def local(self):
-        "Is this Spatial Reference local?"
-        if HAS_GDAL:
-            return self.srs.local
-        else:
-            return self.wkt.startswith('LOCAL_CS')
-    local = property(local)
-
-    def geographic(self):
-        "Is this Spatial Reference geographic?"
-        if HAS_GDAL:
-            return self.srs.geographic
-        else:
-            return self.wkt.startswith('GEOGCS')
-    geographic = property(geographic)
+from django.db import connection
 
-    def linear_name(self):
-        "Returns the linear units name."
-        if HAS_GDAL:
-            return self.srs.linear_name
-        elif self.geographic:
-            return None
-        else:
-            m = self.units_regex.match(self.wkt)
-            return m.group('unit_name')
-    linear_name = property(linear_name)
-
-    def linear_units(self):
-        "Returns the linear units."
-        if HAS_GDAL:
-            return self.srs.linear_units
-        elif self.geographic:
-            return None
-        else:
-            m = self.units_regex.match(self.wkt)
-            return m.group('unit')
-    linear_units = property(linear_units)
-
-    def angular_name(self):
-        "Returns the name of the angular units."
-        if HAS_GDAL:
-            return self.srs.angular_name
-        elif self.projected:
-            return None
-        else:
-            m = self.units_regex.match(self.wkt)
-            return m.group('unit_name')
-    angular_name = property(angular_name)
-
-    def angular_units(self):
-        "Returns the angular units."
-        if HAS_GDAL:
-            return self.srs.angular_units
-        elif self.projected:
-            return None
-        else:
-            m = self.units_regex.match(self.wkt)
-            return m.group('unit')
-    angular_units = property(angular_units)
-
-    def units(self):
-        "Returns a tuple of the units and the name."
-        if self.projected or self.local:
-            return (self.linear_units, self.linear_name)
-        elif self.geographic:
-            return (self.angular_units, self.angular_name)
-        else:
-            return (None, None)
-    units = property(units)
-
-    def get_units(cls, wkt):
-        """
-        Class method used by GeometryField on initialization to
-        retrive the units on the given WKT, without having to use
-        any of the database fields.
-        """
-        if HAS_GDAL:
-            return SpatialReference(wkt).units
-        else:
-            m = cls.units_regex.match(wkt)
-            return m.group('unit'), m.group('unit_name')
-    get_units = classmethod(get_units)
-
-    def get_spheroid(cls, wkt, string=True):
-        """
-        Class method used by GeometryField on initialization to
-        retrieve the `SPHEROID[..]` parameters from the given WKT.
-        """
-        if HAS_GDAL:
-            srs = SpatialReference(wkt)
-            sphere_params = srs.ellipsoid
-            sphere_name = srs['spheroid']
-        else:
-            m = cls.spheroid_regex.match(wkt)
-            if m:
-                sphere_params = (float(m.group('major')), float(m.group('flattening')))
-                sphere_name = m.group('name')
-            else:
-                return None
-
-        if not string:
-            return sphere_name, sphere_params
-        else:
-            # `string` parameter used to place in format acceptable by PostGIS
-            if len(sphere_params) == 3:
-                radius, flattening = sphere_params[0], sphere_params[2]
-            else:
-                radius, flattening = sphere_params
-            return 'SPHEROID["%s",%s,%s]' % (sphere_name, radius, flattening)
-    get_spheroid = classmethod(get_spheroid)
-
-    def __unicode__(self):
-        """
-        Returns the string representation.  If GDAL is installed,
-        it will be 'pretty' OGC WKT.
-        """
-        try:
-            return unicode(self.srs)
-        except:
-            return unicode(self.wkt)
-
-# Django test suite on 2.3 platforms will choke on code inside this
-# conditional.
-if not PYTHON23:
-    try:
-        # try/except'ing the importation of SpatialBackend.  Have to fail
-        # silently because this module may be inadvertently invoked by
-        # non-GeoDjango users (e.g., when the Django test suite executes
-        # the models.py of all contrib apps).
-        from django.contrib.gis.db.backend import SpatialBackend
-        if SpatialBackend.mysql: raise Exception
-
-        # Exposing the SpatialRefSys and GeometryColumns models.
-        class SpatialRefSys(SpatialBackend.SpatialRefSys, SpatialRefSysMixin):
-            pass
-        GeometryColumns = SpatialBackend.GeometryColumns
-    except:
-        pass
+if (hasattr(connection.ops, 'spatial_version') and
+    not connection.ops.mysql):
+    # Getting the `SpatialRefSys` and `GeometryColumns`
+    # models for the default spatial backend.  These
+    # aliases are provided for backwards-compatibility.
+    SpatialRefSys = connection.ops.spatial_ref_sys()
+    GeometryColumns = connection.ops.geometry_columns()
--- a/web/lib/django/contrib/gis/sitemaps/views.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/sitemaps/views.py	Tue May 25 02:43:45 2010 +0200
@@ -1,11 +1,11 @@
 from django.http import HttpResponse, Http404
 from django.template import loader
-from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.sites.models import Site
 from django.core import urlresolvers
 from django.core.paginator import EmptyPage, PageNotAnInteger
+from django.contrib.gis.db.models.fields import GeometryField
+from django.db import connections, DEFAULT_DB_ALIAS
 from django.db.models import get_model
-from django.contrib.gis.db.models.fields import GeometryField
 from django.utils.encoding import smart_str
 
 from django.contrib.gis.shortcuts import render_to_kml, render_to_kmz
@@ -25,7 +25,7 @@
             pages = site.paginator.num_pages
         sitemap_url = urlresolvers.reverse('django.contrib.gis.sitemaps.views.sitemap', kwargs={'section': section})
         sites.append('%s://%s%s' % (protocol, current_site.domain, sitemap_url))
-      
+
         if pages > 1:
             for page in range(2, pages+1):
                 sites.append('%s://%s%s?p=%s' % (protocol, current_site.domain, sitemap_url, page))
@@ -59,7 +59,7 @@
     xml = smart_str(loader.render_to_string('gis/sitemaps/geo_sitemap.xml', {'urlset': urls}))
     return HttpResponse(xml, mimetype='application/xml')
 
-def kml(request, label, model, field_name=None, compress=False):
+def kml(request, label, model, field_name=None, compress=False, using=DEFAULT_DB_ALIAS):
     """
     This view generates KML for the given app label, model, and field name.
 
@@ -79,17 +79,19 @@
         except:
             raise Http404('Invalid geometry field.')
 
-    if SpatialBackend.postgis:
+    connection = connections[using]
+
+    if connection.ops.postgis:
         # PostGIS will take care of transformation.
-        placemarks = klass._default_manager.kml(field_name=field_name)
+        placemarks = klass._default_manager.using(using).kml(field_name=field_name)
     else:
         # There's no KML method on Oracle or MySQL, so we use the `kml`
         # attribute of the lazy geometry instead.
         placemarks = []
-        if SpatialBackend.oracle:
-            qs = klass._default_manager.transform(4326, field_name=field_name)
+        if connection.ops.oracle:
+            qs = klass._default_manager.using(using).transform(4326, field_name=field_name)
         else:
-            qs = klass._default_manager.all()
+            qs = klass._default_manager.using(using).all()
         for mod in qs:
             setattr(mod, 'kml', getattr(mod, field_name).kml)
             placemarks.append(mod)
@@ -101,8 +103,8 @@
         render = render_to_kml
     return render('gis/kml/placemarks.kml', {'places' : placemarks})
 
-def kmz(request, label, model, field_name=None):
+def kmz(request, label, model, field_name=None, using=DEFAULT_DB_ALIAS):
     """
     This view returns KMZ for the given app label, model, and field name.
     """
-    return kml(request, label, model, field_name, True)
+    return kml(request, label, model, field_name, compress=True, using=using)
--- a/web/lib/django/contrib/gis/templates/gis/admin/openlayers.js	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/templates/gis/admin/openlayers.js	Tue May 25 02:43:45 2010 +0200
@@ -1,6 +1,7 @@
 {# Author: Justin Bronn, Travis Pinney & Dane Springmeyer #}
 {% block vars %}var {{ module }} = {};
-{{ module }}.map = null; {{ module }}.controls = null; {{ module }}.panel = null; {{ module }}.re = new RegExp("^SRID=\d+;(.+)", "i"); {{ module }}.layers = {}; 
+{{ module }}.map = null; {{ module }}.controls = null; {{ module }}.panel = null; {{ module }}.re = new RegExp("^SRID=\d+;(.+)", "i"); {{ module }}.layers = {};
+{{ module }}.modifiable = {{ modifiable|yesno:"true,false" }};
 {{ module }}.wkt_f = new OpenLayers.Format.WKT();
 {{ module }}.is_collection = {{ is_collection|yesno:"true,false" }};
 {{ module }}.collection_type = '{{ collection_type }}';
@@ -43,10 +44,10 @@
 {{ module }}.modify_wkt = function(event){
   if ({{ module }}.is_collection){
     if ({{ module }}.is_point){
-      {{ module }}.add_wkt(event); 
+      {{ module }}.add_wkt(event);
       return;
     } else {
-      // When modifying the selected components are added to the 
+      // When modifying the selected components are added to the
       // vector layer so we only increment to the `num_geom` value.
       var feat = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.{{ geom_type }}());
       for (var i = 0; i < {{ module }}.num_geom; i++){
@@ -69,7 +70,7 @@
   {{ module }}.map.setCenter(new OpenLayers.LonLat({{ default_lon }}, {{ default_lat }}), {{ default_zoom }});
 }
 // Add Select control
-{{ module }}.addSelectControl = function(){   
+{{ module }}.addSelectControl = function(){
   var select = new OpenLayers.Control.SelectFeature({{ module }}.layers.vector, {'toggle' : true, 'clickout' : true});
   {{ module }}.map.addControl(select);
   select.activate();
@@ -88,16 +89,20 @@
   } else if ({{ module }}.is_point){
     draw_ctl = new OpenLayers.Control.DrawFeature(lyr, OpenLayers.Handler.Point, {'displayClass': 'olControlDrawFeaturePoint'});
   }
-  {% if modifiable %}
-  var mod = new OpenLayers.Control.ModifyFeature(lyr, {'displayClass': 'olControlModifyFeature'});
-  {{ module }}.controls = [nav, draw_ctl, mod];
-  {% else %}
-  {{ module }}.controls = [nav, darw_ctl];
-  {% endif %}  
+  if ({{ module }}.modifiable){
+    var mod = new OpenLayers.Control.ModifyFeature(lyr, {'displayClass': 'olControlModifyFeature'});
+    {{ module }}.controls = [nav, draw_ctl, mod];
+  } else {
+    if(!lyr.features.length){
+      {{ module }}.controls = [nav, draw_ctl];
+    } else {
+      {{ module }}.controls = [nav];
+    }
+  }
 }
 {{ module }}.init = function(){
     {% block map_options %}// The options hash, w/ zoom, resolution, and projection settings.
-    var options = { 
+    var options = {
 {% autoescape off %}{% for item in map_options.items %}      '{{ item.0 }}' : {{ item.1 }}{% if not forloop.last %},{% endif %}
 {% endfor %}{% endautoescape %}    };{% endblock %}
     // The admin map for this geometry field.
@@ -112,7 +117,7 @@
     // Read WKT from the text field.
     var wkt = document.getElementById('{{ id }}').value;
     if (wkt){
-      // After reading into geometry, immediately write back to 
+      // After reading into geometry, immediately write back to
       // WKT <textarea> as EWKT (so that SRID is included).
       var admin_geom = {{ module }}.read_wkt(wkt);
       {{ module }}.write_wkt(admin_geom);
@@ -128,14 +133,14 @@
       // Zooming to the bounds.
       {{ module }}.map.zoomToExtent(admin_geom.geometry.getBounds());
       if ({{ module }}.is_point){
-          {{ module }}.map.zoomTo({{ point_zoom }}); 
+          {{ module }}.map.zoomTo({{ point_zoom }});
       }
     } else {
       {{ module }}.map.setCenter(new OpenLayers.LonLat({{ default_lon }}, {{ default_lat }}), {{ default_zoom }});
     }
     // This allows editing of the geographic fields -- the modified WKT is
     // written back to the content field (as EWKT, so that the ORM will know
-    // to transform back to original SRID). 
+    // to transform back to original SRID).
     {{ module }}.layers.vector.events.on({"featuremodified" : {{ module }}.modify_wkt});
     {{ module }}.layers.vector.events.on({"featureadded" : {{ module }}.add_wkt});
     {% block controls %}
@@ -153,7 +158,9 @@
     {% if not scrollable %}{{ module }}.map.getControlsByClass('OpenLayers.Control.Navigation')[0].disableZoomWheel();{% endif %}
     {% endblock %}
     if (wkt){
-      {{ module }}.enableEditing();
+      if ({{ module }}.modifiable){
+        {{ module }}.enableEditing();
+      }
     } else {
       {{ module }}.enableDrawing();
     }
--- a/web/lib/django/contrib/gis/tests/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,8 @@
-import sys, unittest
-from django.utils.importlib import import_module
+import sys
+
+def run_tests(*args, **kwargs):
+    from django.test.simple import run_tests as base_run_tests
+    return base_run_tests(*args, **kwargs)
 
 def geo_suite():
     """
@@ -9,37 +12,45 @@
     some backends).
     """
     from django.conf import settings
+    from django.contrib.gis.geos import GEOS_PREPARE
     from django.contrib.gis.gdal import HAS_GDAL
     from django.contrib.gis.utils import HAS_GEOIP
-    from django.contrib.gis.tests.utils import mysql
+    from django.contrib.gis.tests.utils import postgis, mysql
+    from django.db import connection
+    from django.utils.importlib import import_module
 
-    # The test suite.
-    s = unittest.TestSuite()
+    gis_tests = []
 
     # Adding the GEOS tests.
     from django.contrib.gis.geos import tests as geos_tests
-    s.addTest(geos_tests.suite())
+    gis_tests.append(geos_tests.suite())
 
     # Tests that require use of a spatial database (e.g., creation of models)
     test_apps = ['geoapp', 'relatedapp']
+    if postgis and connection.ops.geography:
+        # Test geography support with PostGIS 1.5+.
+        test_apps.append('geogapp')
 
     # Tests that do not require setting up and tearing down a spatial database.
     test_suite_names = [
         'test_measure',
         ]
 
-    # Tests applications that require a test spatial db.
-    if not mysql:
-        test_apps.append('distapp')
-
     if HAS_GDAL:
         # These tests require GDAL.
+        if not mysql:
+            test_apps.append('distapp')
+
+        # Only PostGIS using GEOS 3.1+ can support 3D so far.
+        if postgis and GEOS_PREPARE:
+            test_apps.append('geo3d')
+
         test_suite_names.extend(['test_spatialrefsys', 'test_geoforms'])
         test_apps.append('layermap')
-
+        
         # Adding the GDAL tests.
         from django.contrib.gis.gdal import tests as gdal_tests
-        s.addTest(gdal_tests.suite())
+        gis_tests.append(gdal_tests.suite())
     else:
         print >>sys.stderr, "GDAL not available - no tests requiring GDAL will be run."
 
@@ -50,9 +61,9 @@
     # in the `test_suite_names`.
     for suite_name in test_suite_names:
         tsuite = import_module('django.contrib.gis.tests.' + suite_name)
-        s.addTest(tsuite.suite())
+        gis_tests.append(tsuite.suite())
 
-    return s, test_apps
+    return gis_tests, test_apps
 
 def run_gis_tests(test_labels, **kwargs):
     """
@@ -78,21 +89,13 @@
     # Setting the URLs.
     settings.ROOT_URLCONF = 'django.contrib.gis.tests.urls'
 
-    # Creating the test suite, adding the test models to INSTALLED_APPS, and
-    # adding the model test suites to our suite package.
-    gis_suite, test_apps = geo_suite()
+    # Creating the test suite, adding the test models to INSTALLED_APPS
+    # so they will be tested.
+    gis_tests, test_apps = geo_suite()
     for test_model in test_apps:
         module_name = 'django.contrib.gis.tests.%s' % test_model
-        if mysql:
-            test_module = 'tests_mysql'
-        else:
-            test_module = 'tests'
         new_installed.append(module_name)
 
-        # Getting the model test suite
-        tsuite = import_module(module_name + '.' + test_module)
-        gis_suite.addTest(tsuite.suite())
-
     # Resetting the loaded flag to take into account what we appended to
     # the INSTALLED_APPS (since this routine is invoked through
     # django/core/management, it caches the apps; this ensures that syncdb
@@ -100,84 +103,13 @@
     settings.INSTALLED_APPS = new_installed
     loading.cache.loaded = False
 
+    kwargs['extra_tests'] = gis_tests
+
     # Running the tests using the GIS test runner.
-    result = run_tests(test_labels, suite=gis_suite, **kwargs)
+    result = run_tests(test_labels, **kwargs)
 
     # Restoring modified settings.
     settings.INSTALLED_APPS = old_installed
     settings.ROOT_URLCONF = old_root_urlconf
 
     return result
-
-def run_tests(test_labels, verbosity=1, interactive=True, extra_tests=[], suite=None):
-    """
-    Set `TEST_RUNNER` in your settings with this routine in order to
-    scaffold test spatial databases correctly for your GeoDjango models.
-    For more documentation, please consult the following URL:
-      http://geodjango.org/docs/testing.html.
-    """
-    from django.conf import settings
-    from django.db import connection
-    from django.db.models import get_app, get_apps
-    from django.test.simple import build_suite, build_test, reorder_suite, TestCase
-    from django.test.utils import setup_test_environment, teardown_test_environment
-
-    # The `create_test_spatial_db` routine abstracts away all the steps needed
-    # to properly construct a spatial database for the backend.
-    from django.contrib.gis.db.backend import create_test_spatial_db
-
-    # Setting up for testing.
-    setup_test_environment()
-    settings.DEBUG = False
-    old_name = settings.DATABASE_NAME
-
-    # Creating the test spatial database.
-    create_test_spatial_db(verbosity=verbosity, autoclobber=not interactive)
-
-    # The suite may be passed in manually, e.g., when we run the GeoDjango test,
-    # we want to build it and pass it in due to some customizations.  Otherwise,
-    # the normal test suite creation process from `django.test.simple.run_tests`
-    # is used to create the test suite.
-    if suite is None:
-        suite = unittest.TestSuite()
-        if test_labels:
-            for label in test_labels:
-                if '.' in label:
-                    suite.addTest(build_test(label))
-                else:
-                    app = get_app(label)
-                    suite.addTest(build_suite(app))
-        else:
-            for app in get_apps():
-                suite.addTest(build_suite(app))
-
-        for test in extra_tests:
-            suite.addTest(test)
-
-    suite = reorder_suite(suite, (TestCase,))
-
-    # Executing the tests (including the model tests), and destorying the
-    # test database after the tests have completed.
-    result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
-    connection.creation.destroy_test_db(old_name, verbosity)
-    teardown_test_environment()
-
-    # Returning the total failures and errors
-    return len(result.failures) + len(result.errors)
-
-# Class for creating a fake module with a run method.  This is for the
-# GEOS and GDAL tests that were moved to their respective modules.
-class _DeprecatedTestModule(object):
-    def __init__(self, mod_name):
-        self.mod_name = mod_name
-
-    def run(self):
-        from warnings import warn
-        warn('This test module is deprecated because it has moved to ' \
-             '`django.contrib.gis.%s.tests` and will disappear in 1.2.' %
-             self.mod_name, DeprecationWarning)
-        tests = import_module('django.contrib.gis.%s.tests' % self.mod_name)
-        tests.run()
-
-test_geos = _DeprecatedTestModule('geos')
-test_gdal = _DeprecatedTestModule('gdal')
--- a/web/lib/django/contrib/gis/tests/data/test_vrt/test_vrt.vrt	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/data/test_vrt/test_vrt.vrt	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,7 @@
 <OGRVRTDataSource>
 <OGRVRTLayer name="test_vrt">
 <SrcDataSource relativeToVRT="1">test_vrt.csv</SrcDataSource>
-<GeometryType>wkbPoint</GeometryType>
+<GeometryType>wkbPoint25D</GeometryType>
 <GeometryField encoding="PointFromColumns" x="POINT_X" y="POINT_Y" z="NUM"/>
 </OGRVRTLayer>
 </OGRVRTDataSource>
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/distapp/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/distapp/models.py	Tue May 25 02:43:45 2010 +0200
@@ -26,11 +26,12 @@
     name = models.CharField(max_length=5)
     poly = models.PolygonField(srid=4269)
     objects = models.GeoManager()
+    def __unicode__(self): return self.name
 
 class SouthTexasZipcode(models.Model):
     "Model for a few South Texas ZIP codes."
     name = models.CharField(max_length=5)
-    poly = models.PolygonField(srid=32140)
+    poly = models.PolygonField(srid=32140, null=True)
     objects = models.GeoManager()
     def __unicode__(self): return self.name
 
--- a/web/lib/django/contrib/gis/tests/distapp/tests.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/distapp/tests.py	Tue May 25 02:43:45 2010 +0200
@@ -1,6 +1,7 @@
 import os, unittest
 from decimal import Decimal
 
+from django.db import connection
 from django.db.models import Q
 from django.contrib.gis.gdal import DataSource
 from django.contrib.gis.geos import GEOSGeometry, Point, LineString
@@ -96,9 +97,9 @@
             # Creating the query set.
             qs = AustraliaCity.objects.order_by('name')
             if type_error:
-                # A TypeError should be raised on PostGIS when trying to pass
+                # A ValueError should be raised on PostGIS when trying to pass
                 # Distance objects into a DWithin query using a geodetic field.
-                self.assertRaises(TypeError, AustraliaCity.objects.filter, point__dwithin=(self.au_pnt, dist))
+                self.assertRaises(ValueError, AustraliaCity.objects.filter(point__dwithin=(self.au_pnt, dist)).count)
             else:
                 self.assertEqual(au_cities, self.get_names(qs.filter(point__dwithin=(self.au_pnt, dist))))
 
@@ -147,21 +148,52 @@
         if oracle: tol = 2
         else: tol = 5
 
-        # Now testing geodetic distance aggregation.
-        hillsdale = AustraliaCity.objects.get(name='Hillsdale')
-        if not oracle:
-            # PostGIS is limited to disance queries only to/from point geometries,
-            # ensuring a TypeError is raised if something else is put in.
-            self.assertRaises(ValueError, AustraliaCity.objects.distance, 'LINESTRING(0 0, 1 1)')
-            self.assertRaises(ValueError, AustraliaCity.objects.distance, LineString((0, 0), (1, 1)))
+        # Testing geodetic distance calculation with a non-point geometry
+        # (a LineString of Wollongong and Shellharbour coords).
+        ls = LineString( ( (150.902, -34.4245), (150.87, -34.5789) ) )
+        if oracle or connection.ops.geography:
+            # Reference query:
+            #  SELECT ST_distance_sphere(point, ST_GeomFromText('LINESTRING(150.9020 -34.4245,150.8700 -34.5789)', 4326)) FROM distapp_australiacity ORDER BY name;
+            distances = [1120954.92533513, 140575.720018241, 640396.662906304,
+                         60580.9693849269, 972807.955955075, 568451.8357838,
+                         40435.4335201384, 0, 68272.3896586844, 12375.0643697706, 0]
+            qs = AustraliaCity.objects.distance(ls).order_by('name')
+            for city, distance in zip(qs, distances):
+                # Testing equivalence to within a meter.
+                self.assertAlmostEqual(distance, city.distance.m, 0)
+        else:
+            # PostGIS 1.4 and below is limited to disance queries only
+            # to/from point geometries, check for raising of ValueError.
+            self.assertRaises(ValueError, AustraliaCity.objects.distance, ls)
+            self.assertRaises(ValueError, AustraliaCity.objects.distance, ls.wkt)
 
         # Got the reference distances using the raw SQL statements:
         #  SELECT ST_distance_spheroid(point, ST_GeomFromText('POINT(151.231341 -33.952685)', 4326), 'SPHEROID["WGS 84",6378137.0,298.257223563]') FROM distapp_australiacity WHERE (NOT (id = 11));
-        spheroid_distances = [60504.0628825298, 77023.948962654, 49154.8867507115, 90847.435881812, 217402.811862568, 709599.234619957, 640011.483583758, 7772.00667666425, 1047861.7859506, 1165126.55237647]
         #  SELECT ST_distance_sphere(point, ST_GeomFromText('POINT(151.231341 -33.952685)', 4326)) FROM distapp_australiacity WHERE (NOT (id = 11));  st_distance_sphere
-        sphere_distances = [60580.7612632291, 77143.7785056615, 49199.2725132184, 90804.4414289463, 217712.63666124, 709131.691061906, 639825.959074112, 7786.80274606706, 1049200.46122281, 1162619.7297006]
+        if connection.ops.postgis and connection.ops.proj_version_tuple() >= (4, 7, 0):
+            # PROJ.4 versions 4.7+ have updated datums, and thus different
+            # distance values.
+            spheroid_distances = [60504.0628957201, 77023.9489850262, 49154.8867574404,
+                                  90847.4358768573, 217402.811919332, 709599.234564757,
+                                  640011.483550888, 7772.00667991925, 1047861.78619339,
+                                  1165126.55236034]
+            sphere_distances = [60580.9693849267, 77144.0435286473, 49199.4415344719,
+                                90804.7533823494, 217713.384600405, 709134.127242793,
+                                639828.157159169, 7786.82949717788, 1049204.06569028,
+                                1162623.7238134]
+
+        else:
+            spheroid_distances = [60504.0628825298, 77023.948962654, 49154.8867507115,
+                                  90847.435881812, 217402.811862568, 709599.234619957,
+                                  640011.483583758, 7772.00667666425, 1047861.7859506,
+                                  1165126.55237647]
+            sphere_distances = [60580.7612632291, 77143.7785056615, 49199.2725132184,
+                                90804.4414289463, 217712.63666124, 709131.691061906,
+                                639825.959074112, 7786.80274606706, 1049200.46122281,
+                                1162619.7297006]
 
         # Testing with spheroid distances first.
+        hillsdale = AustraliaCity.objects.get(name='Hillsdale')
         qs = AustraliaCity.objects.exclude(id=hillsdale.id).distance(hillsdale.point, spheroid=True)
         for i, c in enumerate(qs):
             self.assertAlmostEqual(spheroid_distances[i], c.distance.m, tol)
@@ -175,8 +207,9 @@
     def test03c_distance_method(self):
         "Testing the `distance` GeoQuerySet method used with `transform` on a geographic field."
         # Normally you can't compute distances from a geometry field
-        # that is not a PointField (on PostGIS).
-        self.assertRaises(ValueError, CensusZipcode.objects.distance, self.stx_pnt)
+        # that is not a PointField (on PostGIS 1.4 and below).
+        if not connection.ops.geography:
+            self.assertRaises(ValueError, CensusZipcode.objects.distance, self.stx_pnt)
 
         # We'll be using a Polygon (created by buffering the centroid
         # of 77005 to 100m) -- which aren't allowed in geographic distance
@@ -230,22 +263,37 @@
         qs = SouthTexasZipcode.objects.exclude(name='77005').filter(poly__distance_lte=(z.poly, D(m=300)))
         self.assertEqual(['77002', '77025', '77401'], self.get_names(qs))
 
-    @no_spatialite
     def test05_geodetic_distance_lookups(self):
         "Testing distance lookups on geodetic coordinate systems."
-        if not oracle:
-            # Oracle doesn't have this limitation -- PostGIS only allows geodetic
-            # distance queries from Points to PointFields.
-            mp = GEOSGeometry('MULTIPOINT(0 0, 5 23)')
-            self.assertRaises(TypeError,
-                              AustraliaCity.objects.filter(point__distance_lte=(mp, D(km=100))))
-            # Too many params (4 in this case) should raise a ValueError.
-            self.assertRaises(ValueError,
-                              AustraliaCity.objects.filter, point__distance_lte=('POINT(5 23)', D(km=100), 'spheroid', '4'))
+        # Line is from Canberra to Sydney.  Query is for all other cities within
+        # a 100km of that line (which should exclude only Hobart & Adelaide).
+        line = GEOSGeometry('LINESTRING(144.9630 -37.8143,151.2607 -33.8870)', 4326)
+        dist_qs = AustraliaCity.objects.filter(point__distance_lte=(line, D(km=100)))
+
+        if oracle or connection.ops.geography:
+            # Oracle and PostGIS 1.5 can do distance lookups on arbitrary geometries.
+            self.assertEqual(9, dist_qs.count())
+            self.assertEqual(['Batemans Bay', 'Canberra', 'Hillsdale',
+                              'Melbourne', 'Mittagong', 'Shellharbour',
+                              'Sydney', 'Thirroul', 'Wollongong'],
+                             self.get_names(dist_qs))
+        else:
+            # PostGIS 1.4 and below only allows geodetic distance queries (utilizing
+            # ST_Distance_Sphere/ST_Distance_Spheroid) from Points to PointFields
+            # on geometry columns.
+            self.assertRaises(ValueError, dist_qs.count)
+
+            # Ensured that a ValueError was raised, none of the rest of the test is
+            # support on this backend, so bail now.
+            if spatialite: return
+
+        # Too many params (4 in this case) should raise a ValueError.
+        self.assertRaises(ValueError, len,
+                          AustraliaCity.objects.filter(point__distance_lte=('POINT(5 23)', D(km=100), 'spheroid', '4')))
 
         # Not enough params should raise a ValueError.
-        self.assertRaises(ValueError,
-                          AustraliaCity.objects.filter, point__distance_lte=('POINT(5 23)',))
+        self.assertRaises(ValueError, len,
+                          AustraliaCity.objects.filter(point__distance_lte=('POINT(5 23)',)))
 
         # Getting all cities w/in 550 miles of Hobart.
         hobart = AustraliaCity.objects.get(name='Hobart')
@@ -324,6 +372,17 @@
         for i, c in enumerate(SouthTexasCity.objects.perimeter(model_att='perim')):
             self.assertEqual(0, c.perim.m)
 
+    def test09_measurement_null_fields(self):
+        "Testing the measurement GeoQuerySet methods on fields with NULL values."
+        # Creating SouthTexasZipcode w/NULL value.
+        SouthTexasZipcode.objects.create(name='78212')
+        # Performing distance/area queries against the NULL PolygonField,
+        # and ensuring the result of the operations is None.
+        htown = SouthTexasCity.objects.get(name='Downtown Houston')
+        z = SouthTexasZipcode.objects.distance(htown.point).area().get(name='78212')
+        self.assertEqual(None, z.distance)
+        self.assertEqual(None, z.area)
+
 def suite():
     s = unittest.TestSuite()
     s.addTest(unittest.makeSuite(DistanceTest))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/tests/geo3d/models.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,69 @@
+from django.contrib.gis.db import models
+
+class City3D(models.Model):
+    name = models.CharField(max_length=30)
+    point = models.PointField(dim=3)
+    objects = models.GeoManager()
+
+    def __unicode__(self):
+        return self.name
+
+class Interstate2D(models.Model):
+    name = models.CharField(max_length=30)
+    line = models.LineStringField(srid=4269)
+    objects = models.GeoManager()
+
+    def __unicode__(self):
+        return self.name
+
+class Interstate3D(models.Model):
+    name = models.CharField(max_length=30)
+    line = models.LineStringField(dim=3, srid=4269)
+    objects = models.GeoManager()
+
+    def __unicode__(self):
+        return self.name
+
+class InterstateProj2D(models.Model):
+    name = models.CharField(max_length=30)
+    line = models.LineStringField(srid=32140)
+    objects = models.GeoManager()
+
+    def __unicode__(self):
+        return self.name
+
+class InterstateProj3D(models.Model):
+    name = models.CharField(max_length=30)
+    line = models.LineStringField(dim=3, srid=32140)
+    objects = models.GeoManager()
+
+    def __unicode__(self):
+        return self.name
+
+class Polygon2D(models.Model):
+    name = models.CharField(max_length=30)
+    poly = models.PolygonField(srid=32140)
+    objects = models.GeoManager()
+    
+    def __unicode__(self):
+        return self.name
+
+class Polygon3D(models.Model):
+    name = models.CharField(max_length=30)
+    poly = models.PolygonField(dim=3, srid=32140)
+    objects = models.GeoManager()
+    
+    def __unicode__(self):
+        return self.name
+
+class Point2D(models.Model):
+    point = models.PointField()
+    objects = models.GeoManager()
+
+class Point3D(models.Model):
+    point = models.PointField(dim=3)
+    objects = models.GeoManager()
+
+class MultiPoint3D(models.Model):
+    mpoint = models.MultiPointField(dim=3)
+    objects = models.GeoManager()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/tests/geo3d/tests.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,234 @@
+import os, re, unittest
+from django.contrib.gis.db.models import Union, Extent3D
+from django.contrib.gis.geos import GEOSGeometry, Point, Polygon
+from django.contrib.gis.utils import LayerMapping, LayerMapError
+
+from models import City3D, Interstate2D, Interstate3D, \
+    InterstateProj2D, InterstateProj3D, \
+    Point2D, Point3D, MultiPoint3D, Polygon2D, Polygon3D
+
+data_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'data'))
+city_file = os.path.join(data_path, 'cities', 'cities.shp')
+vrt_file = os.path.join(data_path, 'test_vrt', 'test_vrt.vrt')
+
+# The coordinates of each city, with Z values corresponding to their
+# altitude in meters.
+city_data = (
+    ('Houston', (-95.363151, 29.763374, 18)),
+    ('Dallas', (-96.801611, 32.782057, 147)),
+    ('Oklahoma City', (-97.521157, 34.464642, 380)),
+    ('Wellington', (174.783117, -41.315268, 14)),
+    ('Pueblo', (-104.609252, 38.255001, 1433)),
+    ('Lawrence', (-95.235060, 38.971823, 251)),
+    ('Chicago', (-87.650175, 41.850385, 181)),
+    ('Victoria', (-123.305196, 48.462611, 15)),
+)
+
+# Reference mapping of city name to its altitude (Z value).
+city_dict = dict((name, coords) for name, coords in city_data)
+
+# 3D freeway data derived from the National Elevation Dataset: 
+#  http://seamless.usgs.gov/products/9arc.php
+interstate_data = (
+    ('I-45', 
+     'LINESTRING(-95.3708481 29.7765870 11.339,-95.3694580 29.7787980 4.536,-95.3690305 29.7797359 9.762,-95.3691886 29.7812450 12.448,-95.3696447 29.7850144 10.457,-95.3702511 29.7868518 9.418,-95.3706724 29.7881286 14.858,-95.3711632 29.7896157 15.386,-95.3714525 29.7936267 13.168,-95.3717848 29.7955007 15.104,-95.3717719 29.7969804 16.516,-95.3717305 29.7982117 13.923,-95.3717254 29.8000778 14.385,-95.3719875 29.8013539 15.160,-95.3720575 29.8026785 15.544,-95.3721321 29.8040912 14.975,-95.3722074 29.8050998 15.688,-95.3722779 29.8060430 16.099,-95.3733818 29.8076750 15.197,-95.3741563 29.8103686 17.268,-95.3749458 29.8129927 19.857,-95.3763564 29.8144557 15.435)',
+     ( 11.339,   4.536,   9.762,  12.448,  10.457,   9.418,  14.858,
+       15.386,  13.168,  15.104,  16.516,  13.923,  14.385,  15.16 ,
+       15.544,  14.975,  15.688,  16.099,  15.197,  17.268,  19.857,
+       15.435),
+     ),
+    )
+
+# Bounding box polygon for inner-loop of Houston (in projected coordinate
+# system 32140), with elevation values from the National Elevation Dataset
+# (see above).
+bbox_wkt = 'POLYGON((941527.97 4225693.20,962596.48 4226349.75,963152.57 4209023.95,942051.75 4208366.38,941527.97 4225693.20))'
+bbox_z = (21.71, 13.21, 9.12, 16.40, 21.71)
+def gen_bbox():
+    bbox_2d = GEOSGeometry(bbox_wkt, srid=32140)
+    bbox_3d = Polygon(tuple((x, y, z) for (x, y), z in zip(bbox_2d[0].coords, bbox_z)), srid=32140)    
+    return bbox_2d, bbox_3d
+
+class Geo3DTest(unittest.TestCase):
+    """
+    Only a subset of the PostGIS routines are 3D-enabled, and this TestCase
+    tries to test the features that can handle 3D and that are also 
+    available within GeoDjango.  For more information, see the PostGIS docs
+    on the routines that support 3D:
+
+    http://postgis.refractions.net/documentation/manual-1.4/ch08.html#PostGIS_3D_Functions
+    """
+
+    def test01_3d(self):
+        "Test the creation of 3D models."
+        # 3D models for the rest of the tests will be populated in here.
+        # For each 3D data set create model (and 2D version if necessary), 
+        # retrieve, and assert geometry is in 3D and contains the expected
+        # 3D values.
+        for name, pnt_data in city_data:
+            x, y, z = pnt_data
+            pnt = Point(x, y, z, srid=4326)
+            City3D.objects.create(name=name, point=pnt)
+            city = City3D.objects.get(name=name)
+            self.failUnless(city.point.hasz)
+            self.assertEqual(z, city.point.z)
+
+        # Interstate (2D / 3D and Geographic/Projected variants)
+        for name, line, exp_z in interstate_data:
+            line_3d = GEOSGeometry(line, srid=4269)
+            # Using `hex` attribute because it omits 3D.
+            line_2d = GEOSGeometry(line_3d.hex, srid=4269)
+
+            # Creating a geographic and projected version of the
+            # interstate in both 2D and 3D.
+            Interstate3D.objects.create(name=name, line=line_3d)
+            InterstateProj3D.objects.create(name=name, line=line_3d)
+            Interstate2D.objects.create(name=name, line=line_2d)
+            InterstateProj2D.objects.create(name=name, line=line_2d)
+
+            # Retrieving and making sure it's 3D and has expected
+            # Z values -- shouldn't change because of coordinate system.
+            interstate = Interstate3D.objects.get(name=name)
+            interstate_proj = InterstateProj3D.objects.get(name=name)
+            for i in [interstate, interstate_proj]:
+                self.failUnless(i.line.hasz)
+                self.assertEqual(exp_z, tuple(i.line.z))
+
+        # Creating 3D Polygon.
+        bbox2d, bbox3d = gen_bbox()
+        Polygon2D.objects.create(name='2D BBox', poly=bbox2d)
+        Polygon3D.objects.create(name='3D BBox', poly=bbox3d)
+        p3d = Polygon3D.objects.get(name='3D BBox')
+        self.failUnless(p3d.poly.hasz)
+        self.assertEqual(bbox3d, p3d.poly)
+
+    def test01a_3d_layermapping(self):
+        "Testing LayerMapping on 3D models."
+        from models import Point2D, Point3D
+
+        point_mapping = {'point' : 'POINT'}
+        mpoint_mapping = {'mpoint' : 'MULTIPOINT'}
+
+        # The VRT is 3D, but should still be able to map sans the Z.
+        lm = LayerMapping(Point2D, vrt_file, point_mapping, transform=False)
+        lm.save()
+        self.assertEqual(3, Point2D.objects.count())
+
+        # The city shapefile is 2D, and won't be able to fill the coordinates
+        # in the 3D model -- thus, a LayerMapError is raised.
+        self.assertRaises(LayerMapError, LayerMapping,
+                          Point3D, city_file, point_mapping, transform=False)
+        
+        # 3D model should take 3D data just fine.
+        lm = LayerMapping(Point3D, vrt_file, point_mapping, transform=False)
+        lm.save()
+        self.assertEqual(3, Point3D.objects.count())
+
+        # Making sure LayerMapping.make_multi works right, by converting
+        # a Point25D into a MultiPoint25D.
+        lm = LayerMapping(MultiPoint3D, vrt_file, mpoint_mapping, transform=False)
+        lm.save()
+        self.assertEqual(3, MultiPoint3D.objects.count())
+
+    def test02a_kml(self):
+        "Test GeoQuerySet.kml() with Z values."
+        h = City3D.objects.kml(precision=6).get(name='Houston')
+        # KML should be 3D.
+        # `SELECT ST_AsKML(point, 6) FROM geo3d_city3d WHERE name = 'Houston';`
+        ref_kml_regex = re.compile(r'^<Point><coordinates>-95.363\d+,29.763\d+,18</coordinates></Point>$')
+        self.failUnless(ref_kml_regex.match(h.kml))
+
+    def test02b_geojson(self):
+        "Test GeoQuerySet.geojson() with Z values."
+        h = City3D.objects.geojson(precision=6).get(name='Houston')
+        # GeoJSON should be 3D
+        # `SELECT ST_AsGeoJSON(point, 6) FROM geo3d_city3d WHERE name='Houston';`
+        ref_json_regex = re.compile(r'^{"type":"Point","coordinates":\[-95.363151,29.763374,18(\.0+)?\]}$')
+        self.failUnless(ref_json_regex.match(h.geojson))
+
+    def test03a_union(self):
+        "Testing the Union aggregate of 3D models."
+        # PostGIS query that returned the reference EWKT for this test:
+        #  `SELECT ST_AsText(ST_Union(point)) FROM geo3d_city3d;`
+        ref_ewkt = 'SRID=4326;MULTIPOINT(-123.305196 48.462611 15,-104.609252 38.255001 1433,-97.521157 34.464642 380,-96.801611 32.782057 147,-95.363151 29.763374 18,-95.23506 38.971823 251,-87.650175 41.850385 181,174.783117 -41.315268 14)'
+        ref_union = GEOSGeometry(ref_ewkt)
+        union = City3D.objects.aggregate(Union('point'))['point__union']
+        self.failUnless(union.hasz)
+        self.assertEqual(ref_union, union)
+
+    def test03b_extent(self):
+        "Testing the Extent3D aggregate for 3D models."
+        # `SELECT ST_Extent3D(point) FROM geo3d_city3d;`
+        ref_extent3d = (-123.305196, -41.315268, 14,174.783117, 48.462611, 1433)
+        extent1 = City3D.objects.aggregate(Extent3D('point'))['point__extent3d']
+        extent2 = City3D.objects.extent3d()
+
+        def check_extent3d(extent3d, tol=6):
+            for ref_val, ext_val in zip(ref_extent3d, extent3d):
+                self.assertAlmostEqual(ref_val, ext_val, tol)
+
+        for e3d in [extent1, extent2]:
+            check_extent3d(e3d)
+
+    def test04_perimeter(self):
+        "Testing GeoQuerySet.perimeter() on 3D fields."
+        # Reference query for values below:
+        #  `SELECT ST_Perimeter3D(poly), ST_Perimeter2D(poly) FROM geo3d_polygon3d;`
+        ref_perim_3d = 76859.2620451
+        ref_perim_2d = 76859.2577803
+        tol = 6
+        self.assertAlmostEqual(ref_perim_2d,
+                               Polygon2D.objects.perimeter().get(name='2D BBox').perimeter.m,
+                               tol)
+        self.assertAlmostEqual(ref_perim_3d,
+                               Polygon3D.objects.perimeter().get(name='3D BBox').perimeter.m,
+                               tol)
+
+    def test05_length(self):
+        "Testing GeoQuerySet.length() on 3D fields."
+        # ST_Length_Spheroid Z-aware, and thus does not need to use
+        # a separate function internally.
+        # `SELECT ST_Length_Spheroid(line, 'SPHEROID["GRS 1980",6378137,298.257222101]') 
+        #    FROM geo3d_interstate[2d|3d];`
+        tol = 3
+        ref_length_2d = 4368.1721949481
+        ref_length_3d = 4368.62547052088
+        self.assertAlmostEqual(ref_length_2d,
+                               Interstate2D.objects.length().get(name='I-45').length.m,
+                               tol)
+        self.assertAlmostEqual(ref_length_3d,
+                               Interstate3D.objects.length().get(name='I-45').length.m,
+                               tol)
+
+        # Making sure `ST_Length3D` is used on for a projected
+        # and 3D model rather than `ST_Length`.
+        # `SELECT ST_Length(line) FROM geo3d_interstateproj2d;`
+        ref_length_2d = 4367.71564892392
+        # `SELECT ST_Length3D(line) FROM geo3d_interstateproj3d;`
+        ref_length_3d = 4368.16897234101
+        self.assertAlmostEqual(ref_length_2d,
+                               InterstateProj2D.objects.length().get(name='I-45').length.m,
+                               tol)
+        self.assertAlmostEqual(ref_length_3d,
+                               InterstateProj3D.objects.length().get(name='I-45').length.m,
+                               tol)
+        
+    def test06_scale(self):
+        "Testing GeoQuerySet.scale() on Z values."
+        # Mapping of City name to reference Z values.
+        zscales = (-3, 4, 23)
+        for zscale in zscales:
+            for city in City3D.objects.scale(1.0, 1.0, zscale):
+                self.assertEqual(city_dict[city.name][2] * zscale, city.scale.z)
+
+    def test07_translate(self):
+        "Testing GeoQuerySet.translate() on Z values."
+        ztranslations = (5.23, 23, -17)
+        for ztrans in ztranslations:
+            for city in City3D.objects.translate(0, 0, ztrans):
+                self.assertEqual(city_dict[city.name][2] + ztrans, city.translate.z)
+
+def suite():
+    s = unittest.TestSuite()
+    s.addTest(unittest.makeSuite(Geo3DTest))
+    return s
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/tests/geo3d/views.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+# Create your views here.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/tests/geoapp/fixtures/initial_data.json	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,97 @@
+[ {
+    "pk": 1,
+    "model": "geoapp.country",
+    "fields": {
+      "name": "Texas",
+      "mpoly": "SRID=4326;MULTIPOLYGON (((-103.00243399999998 36.500397,-102.90421904194784 36.500393342967676,-102.8402359524855 36.500390960558398,-102.840235952479716 36.500390960558398,-102.840235952474345 36.500390960558398,-102.840235952468362 36.500390960558398,-102.840235952461725 36.500390960558398,-102.840235952455885 36.500390960558398,-102.792077446284736 36.500389167377229,-102.643207699865854 36.500383624214699,-102.366462330167067 36.500373319605465,-102.250452999999979 36.500368999999999,-102.24499 36.500703999999999,-102.162463000000002 36.500326,-102.12545 36.500323999999999,-102.124752896301885 36.500398159967887,-102.122066000000004 36.500684,-101.930244999999999 36.500526,-101.925344139375468 36.500484781341967,-101.914929315957153 36.500397187533892,-101.826564999999988 36.499653999999992,-101.826498 36.499535000000002,-101.81449312121488 36.499579719643286,-101.788110000000003 36.499678000000003,-101.783359000000004 36.499709000000003,-101.781987 36.499718,-101.780609999999982 36.499727,-101.779435000000007 36.499733999999997,-101.773235954788092 36.499732939140301,-101.709314000000006 36.499721999999998,-101.698684999999998 36.499507999999999,-101.653707999999995 36.499572999999998,-101.649966000000006 36.499572999999998,-101.623914999999997 36.499527999999998,-101.414793008557069 36.499417763984319,-101.392608849457574 36.499406069885133,-101.340061173170298 36.499378370041477,-101.085155999999984 36.499243999999997,-101.052418000000003 36.499562999999995,-101.04533099999999 36.499540000000003,-100.977087999999995 36.499594999999999,-100.936058000000003 36.499602000000003,-100.918513000000004 36.499620999999998,-100.884174000000002 36.499682,-100.884079999999997 36.499682,-100.859656999999984 36.499687000000002,-100.850840000000005 36.49969999999999,-100.824235999999999 36.499617999999998,-100.824218000000002 36.499617999999998,-100.80619 36.499673999999999,-100.806172000000004 36.499634,-100.802909 36.499620999999998,-100.802886 36.499620999999998,-100.761810999999994 36.499617999999998,-100.761810999999994 36.499580000000002,-100.724361999999999 36.499580000000002,-100.724361000000002 36.499558,-100.708625999999995 36.499552999999999,-100.708628000000004 36.499520999999994,-100.657762999999989 36.499482999999991,-100.657762999999989 36.499499999999998,-100.648342999999997 36.499495000000003,-100.648343999999994 36.499462999999999,-100.592613999999998 36.499468999999998,-100.592555999999988 36.499468999999998,-100.592551 36.499428999999999,-100.583539000000002 36.499482999999991,-100.583378999999994 36.499442999999999,-100.578113999999999 36.499462999999999,-100.578113999999999 36.499439000000002,-100.546144999999996 36.499343000000003,-100.531215000000003 36.499341,-100.531215000000003 36.499290000000002,-100.530478000000002 36.49924,-100.530314000000004 36.499357000000003,-100.522227 36.499290999999999,-100.441064999999995 36.499490000000002,-100.441063999999997 36.499462,-100.433959000000002 36.499456000000002,-100.421327999999988 36.499447000000004,-100.421300999999985 36.499487999999999,-100.413634000000002 36.499443999999997,-100.41355 36.499468999999998,-100.378634000000005 36.499516999999997,-100.378591999999998 36.499445,-100.35185199999998 36.499487000000002,-100.351841999999991 36.499473000000002,-100.334463999999997 36.49942,-100.334440999999998 36.49944,-100.324150000000003 36.499679,-100.311244999999985 36.499631,-100.311018000000004 36.499687999999999,-100.310642999999985 36.499642,-100.253572851827684 36.499638031344489,-100.181220999999994 36.499633000000003,-100.090020999999993 36.499634,-100.000405999999984 36.499701999999999,-100.0004059967807 36.499497793115623,-100.00040222345956 36.260147946939995,-100.000399000000002 36.055677000000003,-100.000396170268971 35.879197994164429,-100.000394020347557 35.745115995014778,-100.000391999999991 35.619115,-100.000390396259149 35.519130234823749,-100.000386875554753 35.299632926398459,-100.000386874882437 35.299591010324292,-100.000386852473085 35.298193905884737,-100.000384999999994 35.182701999999999,-100.000381972929958 34.852568985943549,-100.000381605014198 34.812443999872983,-100.000381000000004 34.746460999999996,-100.000381000000004 34.570853999999997,-100.000381000000004 34.570647,-100.000381000000004 34.560509000000003,-99.998254592787575 34.560446149085699,-99.997501461048799 34.560423888524269,-99.985833 34.560079000000002,-99.974761999999998 34.561317999999993,-99.971554999999995 34.562179,-99.965608000000003 34.565843999999998,-99.958898000000005 34.571271000000003,-99.957540999999992 34.572708999999996,-99.95755299999999 34.574168999999998,-99.956716999999998 34.576523999999992,-99.954566999999997 34.578195,-99.94571999999998 34.579273,-99.930492488760507 34.576894921075187,-99.930189904388058 34.576847666503667,-99.929333999999997 34.576714000000003,-99.923210999999995 34.574551999999997,-99.921801000000002 34.570253,-99.915771000000007 34.565975000000002,-99.914151070156151 34.564995899308187,-99.898943000000003 34.555804000000002,-99.896006999999997 34.555529999999997,-99.89376 34.554219000000003,-99.887146999999999 34.549047000000002,-99.885392392967745 34.547401436342639,-99.884583851343237 34.546643143067669,-99.87806651563541 34.540530839522475,-99.87650823800611 34.539069404005723,-99.874403 34.537095,-99.873254000000003 34.535350999999999,-99.872356999999994 34.532096000000003,-99.868953000000005 34.52761499999999,-99.867217250163094 34.525864500605081,-99.853065999999998 34.511592999999998,-99.832903999999985 34.500067999999999,-99.825324999999992 34.497596,-99.818185999999997 34.487839999999991,-99.818738999999979 34.484975999999996,-99.814544624457952 34.476663062301249,-99.814312999999984 34.476204000000003,-99.793683999999999 34.453893999999998,-99.783787954821193 34.445078397966533,-99.782985999999994 34.444364,-99.775743000000006 34.444225000000003,-99.774224411180043 34.443216449834381,-99.765598999999995 34.437488000000002,-99.764825999999999 34.436433999999998,-99.764881999999986 34.435265999999999,-99.767647999999994 34.431854,-99.767234000000002 34.430501999999997,-99.754248000000004 34.421288999999994,-99.740907000000007 34.414763,-99.735679661059166 34.413018903486261,-99.730348000000006 34.411239999999992,-99.720258999999999 34.406295,-99.719721039768913 34.405807854123296,-99.716415999999995 34.402814999999997,-99.715089000000006 34.400753999999999,-99.714231999999996 34.397821999999998,-99.714838 34.394523999999997,-99.712682 34.390928000000002,-99.707900999999993 34.387538999999997,-99.696461999999997 34.381036000000002,-99.678282999999979 34.379798999999998,-99.672337448339604 34.378003970284972,-99.671377000000007 34.377713999999997,-99.666676988468737 34.374633899592595,-99.665992000000003 34.374184999999997,-99.665404581506792 34.374094751646162,-99.662705000000003 34.373679999999993,-99.659863615570984 34.374283464835351,-99.659362000000002 34.374389999999998,-99.654194000000004 34.376519000000002,-99.649662000000006 34.379885000000002,-99.630904999999998 34.376007,-99.628541546335526 34.375150829397036,-99.624196999999995 34.373576999999997,-99.600026 34.374687999999999,-99.596322999999998 34.377136999999998,-99.587595999999991 34.385866999999998,-99.587235087741874 34.386377538370702,-99.585718954359294 34.388522226586467,-99.585441999999986 34.388914,-99.584530999999984 34.391204999999999,-99.585306000000003 34.398122,-99.584479999999985 34.407673000000003,-99.580059999999989 34.416652999999997,-99.574366999999995 34.418281,-99.569695999999993 34.418418000000003,-99.563067665646059 34.417445690943012,-99.562203999999994 34.417318999999999,-99.561530791054494 34.417028950664999,-99.555986000000004 34.414639999999999,-99.549242000000007 34.412714999999992,-99.529786 34.411451999999997,-99.528744576810823 34.411579971493573,-99.523649999999989 34.412205999999998,-99.517623999999998 34.414493999999991,-99.514279999999999 34.414034999999998,-99.499874999999989 34.409607999999999,-99.497090999999983 34.407730999999991,-99.494103999999993 34.404755000000002,-99.490425999999999 34.399693999999997,-99.487218999999982 34.397955000000003,-99.477547 34.396355,-99.477019613816751 34.396364300212412,-99.474810232095294 34.396403261641368,-99.472297823530695 34.396447566809115,-99.470968999999997 34.396470999999991,-99.463286816319666 34.393024688790533,-99.452647999999996 34.388252,-99.445020999999983 34.379891999999998,-99.440759999999997 34.374122999999997,-99.430994999999982 34.373413999999997,-99.43081720973791 34.373532661492725,-99.420432000000005 34.380464000000003,-99.408847999999992 34.372776000000002,-99.407167999999999 34.372605,-99.406018176721332 34.372844364351735,-99.404336527339453 34.373194441551952,-99.402959999999979 34.373480999999998,-99.399602999999999 34.375078999999999,-99.397253000000006 34.377870999999999,-99.396160718377317 34.383134276834824,-99.391492 34.405631,-99.393918999999997 34.415273999999989,-99.396488000000005 34.417290999999999,-99.396901999999997 34.418688000000003,-99.397009999999995 34.424002999999999,-99.395768462359129 34.43494110377263,-99.394955999999993 34.442098999999999,-99.381011 34.456935999999999,-99.376037841709419 34.458617501802458,-99.375365000000002 34.458844999999997,-99.369609999999994 34.458699000000003,-99.358795 34.455862999999994,-99.354671999999994 34.451856999999997,-99.35478257092818 34.450383391084422,-99.354837000000003 34.449657999999999,-99.356770999999995 34.446542,-99.357101999999998 34.444915000000002,-99.356712999999999 34.442143999999999,-99.350407000000004 34.437083,-99.342020261837703 34.431514649700844,-99.341336999999996 34.431061,-99.341016600261696 34.430906286427735,-99.334036999999995 34.427536000000003,-99.331050066208874 34.424666026137302,-99.328674000000007 34.422383000000004,-99.325094009617374 34.416010263301388,-99.324222000000006 34.414458000000003,-99.321411663781888 34.411055277053073,-99.319798627189357 34.409102230797522,-99.319605999999979 34.408869000000003,-99.318363000000005 34.408295999999993,-99.316372999999999 34.408204999999995,-99.308273999999997 34.410013999999997,-99.299098 34.414227999999994,-99.294647999999981 34.415373000000002,-99.289922000000004 34.414731000000003,-99.287844819286008 34.413958196831629,-99.264167 34.405149000000002,-99.261320999999981 34.403498999999996,-99.261255940568432 34.403158389836314,-99.260996786434447 34.401801622187399,-99.259199386422964 34.392391568987605,-99.258998120407611 34.391337867029385,-99.258979999999994 34.391243000000003,-99.259239630132384 34.391043961974496,-99.260703756811225 34.389921531074158,-99.261190999999997 34.389547999999998,-99.262646013804954 34.388906249865343,-99.264243556741917 34.388201635660714,-99.264508000000006 34.388084999999997,-99.271031915197597 34.387722560266795,-99.271781628057255 34.38768090955238,-99.273607516746409 34.387579471291865,-99.273957999999993 34.38756,-99.27534 34.386598999999997,-99.274925999999994 34.384903999999999,-99.271845396288441 34.382114976063626,-99.271280999999988 34.381603999999996,-99.258696 34.372633999999998,-99.254722 34.372405,-99.251407999999984 34.375079999999997,-99.248969000000002 34.375984000000003,-99.242944999999992 34.372667999999997,-99.239138083830497 34.366035888164781,-99.237232999999989 34.362716999999996,-99.237183660287812 34.362563767173611,-99.235448627455725 34.357175329079247,-99.234251999999984 34.353459,-99.233273999999994 34.344101000000002,-99.23260599999999 34.342379999999999,-99.229993999999991 34.340538000000002,-99.226152999999982 34.339725999999999,-99.221975 34.340020000000003,-99.219768999999999 34.341377,-99.217335000000006 34.341520000000003,-99.213134999999994 34.340369000000003,-99.210957832415772 34.336710386428308,-99.210716000000005 34.336303999999998,-99.20972399999998 34.324934999999996,-99.211600000000004 34.313969999999998,-99.213476 34.310671999999997,-99.213233598142949 34.308226764636807,-99.211647999999997 34.292231999999991,-99.211468055040228 34.291676209875057,-99.209990337717599 34.287112032604114,-99.209742000000006 34.286344999999997,-99.209514950796304 34.286049346749877,-99.207560999999998 34.283504999999998,-99.203681000000003 34.281925999999999,-99.200221999999997 34.281151999999999,-99.196259999999995 34.281463000000002,-99.196052113016066 34.281264951942028,-99.19571031750732 34.280939333014615,-99.195605 34.280839,-99.194569999999985 34.272424,-99.196926000000005 34.260928999999997,-99.197153 34.244298,-99.19555299999999 34.24006,-99.191138999999993 34.23234,-99.190145999999984 34.229660000000003,-99.190036000000006 34.227186000000003,-99.192076 34.222192,-99.192683000000002 34.218825000000002,-99.192104 34.216693999999997,-99.189758414718312 34.214539281858485,-99.189510999999996 34.214312,-99.188483307800709 34.214128939694163,-99.159015999999994 34.20888,-99.143985 34.214762999999998,-99.138220000000004 34.219158999999998,-99.130609000000007 34.219408,-99.128513999999996 34.218766000000002,-99.127549000000002 34.217986000000003,-99.126614000000004 34.21532899999999,-99.127525000000006 34.213771,-99.130089999999996 34.212192000000002,-99.131552999999997 34.209352000000003,-99.131884999999997 34.207382000000003,-99.129791999999995 34.204402999999999,-99.126566999999994 34.203004,-99.119203999999996 34.201746999999997,-99.108757999999995 34.203400999999999,-99.102001344898341 34.205813362825268,-99.092190999999985 34.209316,-99.08119261238302 34.211229594305671,-99.079534999999993 34.211517999999991,-99.075978000000006 34.211221000000002,-99.06646499999998 34.208404000000002,-99.060343999999986 34.204760999999991,-99.059158999999994 34.202928999999997,-99.058800000000005 34.201256,-99.058083999999994 34.200569000000002,-99.048792000000006 34.198208999999999,-99.043470999999997 34.198208,-99.040961999999993 34.200842000000002,-99.039004000000006 34.204667,-99.037458999999998 34.206454,-99.036272999999994 34.206912000000003,-99.013074999999986 34.203221999999997,-99.005790000000005 34.206646999999997,-99.002916243275195 34.208781598893673,-99.002945441244265 34.209102775846141,-99.003147197273819 34.211322087284138,-99.003432988816769 34.214465787333673,-99.000760999999997 34.217643000000002,-98.99085199999999 34.221632999999997,-98.987293999999991 34.221223000000002,-98.981363999999999 34.217582999999991,-98.978684999999984 34.210231,-98.976586999999995 34.206291,-98.974131999999983 34.203566000000002,-98.969003 34.201298999999999,-98.966301999999999 34.201323000000002,-98.962469999999996 34.204667999999998,-98.962085000000002 34.206386000000002,-98.962306999999981 34.211312,-98.960791 34.213029999999996,-98.958474999999993 34.213854999999995,-98.952512999999982 34.212649999999996,-98.950395999999984 34.21168,-98.940219999999997 34.203685999999998,-98.928145 34.192689,-98.927456000000006 34.191155000000002,-98.923128999999989 34.185977999999999,-98.920704 34.183435000000003,-98.918333000000004 34.181831000000003,-98.909348999999992 34.177498999999997,-98.892677318093561 34.17250349095427,-98.87651287834953 34.167659972141138,-98.872921999999988 34.166584,-98.871543000000003 34.165026999999995,-98.871211000000002 34.163012000000002,-98.872229000000004 34.160446,-98.874954999999986 34.157031000000003,-98.874871999999996 34.155656999999998,-98.873271000000003 34.153596,-98.868116 34.149635000000004,-98.862549999999999 34.149110999999998,-98.860124999999996 34.149912999999998,-98.858418999999998 34.152732,-98.8579 34.159627,-98.857321999999982 34.161093999999999,-98.855585000000005 34.161620999999997,-98.854264541670545 34.16164976192438,-98.831114999999983 34.162154,-98.812953999999991 34.158444000000003,-98.806809999999984 34.155901,-98.804411553093104 34.153928907629435,-98.792015000000006 34.143735999999997,-98.779288744496085 34.140194111533035,-98.773070373738221 34.138463455122455,-98.767587610783494 34.136937528280072,-98.765569999999983 34.136375999999998,-98.764702233233265 34.135780085954792,-98.763778343962841 34.135145631382905,-98.761796999999987 34.133785000000003,-98.760558000000003 34.132387999999999,-98.759485999999995 34.128881999999997,-98.759653 34.126911999999997,-98.757118934362524 34.12470437936247,-98.757036999999983 34.124633000000003,-98.753813984496389 34.124468645349353,-98.749290999999999 34.124237999999998,-98.741966000000005 34.125529999999998,-98.740191287161664 34.126850584722824,-98.739461000000006 34.127394000000002,-98.737231999999992 34.130991999999999,-98.736819999999994 34.133374000000003,-98.735471000000004 34.135207999999999,-98.734286999999995 34.135758000000003,-98.730242646678789 34.1359250861193,-98.717536999999993 34.136450000000004,-98.716104 34.135947000000002,-98.70640034274598 34.134745066348501,-98.696517999999998 34.133521000000002,-98.690291400890658 34.133167457450512,-98.690072 34.133155000000002,-98.688275858887323 34.134465065675442,-98.685589983550884 34.136424083851644,-98.676900633591032 34.14276190388366,-98.676457484208683 34.143085127260051,-98.670573548505118 34.147376740066704,-98.655654999999982 34.158257999999996,-98.650582999999997 34.163113000000003,-98.648072999999997 34.164440999999997,-98.643223000000006 34.164530999999997,-98.635729999999995 34.161617999999997,-98.634085211037615 34.161100728840964,-98.630950281399748 34.160114822001631,-98.621666000000005 34.157195000000002,-98.620507214282355 34.157012478916968,-98.617663812339856 34.156564612849806,-98.616732999999996 34.156418000000002,-98.615748434938936 34.156446107485429,-98.612133570686254 34.156549305078279,-98.611829 34.156557999999997,-98.610173632571488 34.157093658210222,-98.610154152422197 34.157099961766605,-98.608852999999996 34.157521000000003,-98.603977999999998 34.160249,-98.599789 34.160570999999997,-98.577135999999996 34.148961999999997,-98.572451 34.145091,-98.560191000000003 34.133201999999997,-98.558593000000002 34.128253999999998,-98.550916999999998 34.119334000000002,-98.536257000000006 34.107343,-98.530610999999993 34.099843,-98.528199999999998 34.094960999999998,-98.504182 34.072370999999997,-98.487068052145446 34.063003092954936,-98.486783271268621 34.06284720836274,-98.486328 34.062598,-98.483944186894661 34.06241565608709,-98.482821069121968 34.062329745958955,-98.482039999999998 34.062269999999998,-98.475065999999998 34.064269000000003,-98.449033999999983 34.073461999999999,-98.446378999999993 34.075429999999997,-98.445784000000003 34.076827000000002,-98.445590305319797 34.079232123390703,-98.445584999999994 34.079298,-98.445259148452962 34.079797720749731,-98.443724000000003 34.082152,-98.442807999999999 34.083143999999997,-98.442148160210323 34.083427517317581,-98.441104460406791 34.083875970068213,-98.440092000000007 34.084311,-98.439068026005657 34.084479541105658,-98.434822808733685 34.08517828308225,-98.432126999999994 34.085622,-98.43151641213494 34.085605425226575,-98.43092946822253 34.085589492282431,-98.428479999999993 34.085523000000002,-98.425229999999999 34.084798999999997,-98.422252999999998 34.083036999999997,-98.419995 34.082487999999998,-98.419161945519861 34.082694545588339,-98.41804644206556 34.082971120917755,-98.417812999999995 34.083029000000003,-98.414426000000006 34.085073999999999,-98.400747497198822 34.098985940284976,-98.399776999999986 34.099972999999999,-98.398505572550647 34.104180252359392,-98.39838899999998 34.104565999999998,-98.398160000000004 34.121395999999997,-98.400493999999995 34.121777999999999,-98.400966999999994 34.122236,-98.398441000000005 34.128456,-98.384381000000005 34.146317000000003,-98.381237999999996 34.149453999999999,-98.367493999999994 34.156190999999993,-98.366862955318183 34.156357896864854,-98.364023000000003 34.157108999999998,-98.34173552164826 34.153594120579292,-98.339428832109121 34.153230340726623,-98.331172907733077 34.151928328079421,-98.326986688030772 34.151268134169193,-98.325445000000002 34.151024999999997,-98.324621914768684 34.150650086831803,-98.323612587945547 34.150190341106089,-98.322580000000002 34.149720000000002,-98.320651676675396 34.148059023851737,-98.318749999999994 34.146420999999997,-98.315432139066189 34.144301906683673,-98.312023538956254 34.142124858924547,-98.300208999999995 34.134579000000002,-98.299345719035045 34.134365643147696,-98.29862570169189 34.134187693395319,-98.293901000000005 34.133020000000002,-98.280321 34.130749999999999,-98.258217018239392 34.129574098564007,-98.256467 34.129480999999998,-98.254901718278489 34.129708262798985,-98.247953999999993 34.13071699999999,-98.241012999999995 34.133102999999998,-98.225282000000007 34.127245000000002,-98.223600000000005 34.125093,-98.216463000000005 34.121820999999997,-98.203710999999998 34.117676000000003,-98.200074999999998 34.116782999999998,-98.191455000000005 34.115752999999998,-98.169120000000007 34.114170999999999,-98.157411999999994 34.120466999999998,-98.154353999999998 34.122734,-98.142753999999996 34.136358999999999,-98.136769999999999 34.144992000000002,-98.130815999999996 34.150531999999998,-98.123377000000005 34.154539999999997,-98.114506000000006 34.154727,-98.109461999999979 34.154110999999993,-98.107064999999992 34.152531000000003,-98.101937000000007 34.146829999999994,-98.092021474678845 34.132735952269094,-98.090223999999992 34.130181,-98.089754999999982 34.128211,-98.090659999999986 34.12198,-98.092421000000002 34.116917,-98.095117999999999 34.11119,-98.096177285423778 34.109455137055363,-98.096466125075011 34.108982084942461,-98.099327999999986 34.104295,-98.101378023037029 34.101786489578267,-98.103538246996251 34.099143131812454,-98.104308999999986 34.098199999999999,-98.119416999999999 34.084474,-98.121038999999996 34.081265999999999,-98.120207999999991 34.072127000000002,-98.11802999999999 34.067064999999999,-98.114587 34.06228,-98.100919767943822 34.050244792175462,-98.099096110217346 34.048638900093685,-98.096177018664264 34.044625138601674,-98.096541898037387 34.040976263553816,-98.09727167092565 34.038969381040054,-98.097731364247636 34.038509687718062,-98.098001443813914 34.038239608151798,-98.102015208841422 34.03732738850595,-98.104022094890695 34.036232725638037,-98.104083244997014 34.036133356900422,-98.105481647738245 34.033860956680144,-98.105481647738245 34.032444902147553,-98.105481647738245 34.031306746267951,-98.103616999999986 34.029206999999992,-98.088202999999993 34.005481000000003,-98.085260000000005 34.003259,-98.082839000000007 34.002412,-98.055197000000007 33.995840999999999,-98.050169864666017 33.994989457544634,-98.041117 33.993456000000002,-98.027671999999981 33.993357000000003,-98.019485000000003 33.993803999999997,-98.018481521828946 33.993960861546498,-98.005667000000003 33.995964,-97.987387999999996 33.999822999999999,-97.982805999999997 34.001949000000003,-97.978243000000006 34.005386999999999,-97.974597608872358 34.00657735007583,-97.974172999999993 34.006715999999997,-97.973934144800623 34.006593661859519,-97.971670000000003 34.005434,-97.968339999999998 34.000529999999998,-97.965354903485249 33.996992503283089,-97.963375425210828 33.994646717187933,-97.96302799999998 33.994235000000003,-97.962715090700769 33.994009516348072,-97.958325000000002 33.990845999999998,-97.955849999999998 33.990136,-97.952687999999995 33.990113999999998,-97.947571999999994 33.991053,-97.946472999999997 33.990731999999994,-97.945729999999998 33.989839000000003,-97.945949999999982 33.988395999999995,-97.952184120103468 33.971402949359636,-97.95307606469359 33.968971674482539,-97.95691699999999 33.958502000000003,-97.960351000000003 33.951928000000002,-97.965737000000004 33.947392,-97.972662 33.944527,-97.974172999999993 33.942832000000003,-97.974062000000004 33.940289,-97.972493999999998 33.937907000000003,-97.971175000000002 33.937128999999999,-97.965952999999999 33.936191,-97.963425 33.936236999999998,-97.955511 33.938186000000002,-97.954466999999994 33.937773999999997,-97.953395 33.936444999999999,-97.952679000000003 33.929482,-97.953694999999996 33.924373000000003,-97.957155 33.914453999999999,-97.960615000000004 33.910353999999998,-97.961188664141474 33.909913087050903,-97.963139679674441 33.908413554571595,-97.964461 33.907398,-97.964803587866868 33.907309441163022,-97.9693952279504 33.906122503898267,-97.969873000000007 33.905999,-97.970298415583201 33.906261144464871,-97.973142999999993 33.908014,-97.976962999999998 33.912548999999999,-97.978803999999997 33.912548,-97.979984999999999 33.911402000000002,-97.983551999999989 33.904001999999991,-97.984539999999996 33.900703,-97.984566 33.899076999999998,-97.984416725907181 33.89872544733722,-97.984025057628415 33.897803036597892,-97.98383498894799 33.897355409354304,-97.983768999999995 33.897199999999991,-97.977858999999995 33.889929000000002,-97.974177999999995 33.886642999999999,-97.967776999999998 33.882429999999999,-97.958438 33.879179,-97.951215000000005 33.878424000000003,-97.946463999999992 33.878883000000002,-97.942729999999997 33.879845000000003,-97.938801999999995 33.879891,-97.936743000000007 33.879204,-97.933120450042608 33.877388671138185,-97.918328311832767 33.869976048610916,-97.905467000000002 33.863530999999995,-97.896737999999985 33.857984999999999,-97.877386999999999 33.850236000000002,-97.871447000000003 33.849001,-97.865764999999982 33.849392999999999,-97.835425213046037 33.857383352392631,-97.834333 33.857671000000003,-97.833886750888084 33.857971936447115,-97.833218553718808 33.858422547723912,-97.806802470257153 33.876236728393856,-97.805423000000005 33.877167,-97.803472999999997 33.880189999999999,-97.801578000000006 33.885137999999998,-97.784656999999982 33.890631999999997,-97.78061799999999 33.895533,-97.779683000000006 33.899242999999998,-97.780339999999995 33.904833000000004,-97.783716999999996 33.910559999999997,-97.772672 33.914382000000003,-97.765445999999997 33.913531999999989,-97.763769999999994 33.914240999999997,-97.762914903547767 33.914953098088951,-97.761142192227695 33.916429357685161,-97.760223999999994 33.917194000000002,-97.759399000000002 33.91881999999999,-97.759833999999984 33.92521,-97.762660999999994 33.930846000000003,-97.762767999999994 33.934396,-97.752956999999995 33.937049000000002,-97.738478 33.937421,-97.736553999999998 33.936574999999998,-97.735919542935619 33.936533987763056,-97.734773489745407 33.936459905200778,-97.733722999999998 33.936391999999998,-97.732266999999993 33.936691000000003,-97.725289000000004 33.941045000000003,-97.720699142354164 33.94461309292862,-97.716772000000006 33.947665999999998,-97.714693355370301 33.94981590741822,-97.712051708440285 33.952548118711093,-97.709683999999996 33.954996999999999,-97.708350195107343 33.95701014009046,-97.70415899999999 33.963335999999998,-97.69792099999998 33.977331,-97.69310999999999 33.983699,-97.688023 33.986606999999999,-97.671772000000004 33.991370000000003,-97.661489000000003 33.990817999999997,-97.656210000000002 33.989488,-97.633778000000007 33.981256999999999,-97.609091000000006 33.968093000000003,-97.589597999999995 33.953553999999997,-97.588828000000007 33.951881999999998,-97.591270649549756 33.930345579062646,-97.591514000000004 33.928199999999997,-97.595084 33.922953999999997,-97.596154999999996 33.922105999999999,-97.59697899999999 33.920228000000002,-97.597115000000002 33.917867999999999,-97.596955673755872 33.917077348335745,-97.596288999999985 33.913769000000002,-97.593782375104212 33.910260437761373,-97.589253999999997 33.903922,-97.587440999999984 33.902479,-97.582744000000005 33.900784999999999,-97.578907598302408 33.900207204108142,-97.558269999999993 33.897098999999997,-97.555002000000002 33.897281999999997,-97.551541 33.897947000000002,-97.543245999999996 33.901288999999998,-97.533617322522971 33.906127586572126,-97.532723000000004 33.906576999999999,-97.525277000000003 33.911750999999995,-97.519170999999986 33.913637999999999,-97.504870374844515 33.918353570482601,-97.500960000000006 33.919643,-97.495648860558163 33.919307898609453,-97.494857999999979 33.919257999999999,-97.492061582842766 33.918500058129531,-97.487115891787269 33.917159576320657,-97.48650499999998 33.916993999999995,-97.484158940985964 33.915822631562747,-97.460375999999982 33.903948,-97.458068999999995 33.901634999999999,-97.451065249608234 33.891558064966901,-97.450953999999996 33.891398000000002,-97.451469000000003 33.87093,-97.452287410342421 33.86882620086994,-97.455665873415143 33.860141550511862,-97.457616999999999 33.855125999999998,-97.459565999999995 33.853316,-97.461485999999994 33.849559999999997,-97.462857 33.841771999999999,-97.459067999999988 33.834581,-97.453056999999987 33.828536,-97.444192999999999 33.823773000000003,-97.426492999999994 33.819398,-97.410387 33.818845000000003,-97.403235695189224 33.818961304668854,-97.384901622687948 33.819259479377855,-97.372940999999997 33.819454,-97.368744000000007 33.821471000000003,-97.365506999999994 33.823762999999992,-97.358512999999988 33.830018000000003,-97.348337999999984 33.843876000000002,-97.340900078515631 33.860236176367188,-97.339391593410966 33.867629740388111,-97.337846311291798 33.870430566802547,-97.336524008254173 33.872827243260353,-97.33293952159849 33.874440259476913,-97.329175814777756 33.874440259476913,-97.327562805507441 33.873902588562437,-97.326564370247013 33.872737756024428,-97.326487449786001 33.872648016149064,-97.324157539016809 33.866016724171544,-97.322365295688968 33.864941382342593,-97.318243141591921 33.865120602507631,-97.31654836796514 33.865642075591225,-97.315913230822716 33.865837504006514,-97.314412999999988 33.866988999999997,-97.310479256695203 33.873361218982971,-97.307489695517361 33.878203969770759,-97.302471419756401 33.880175433263638,-97.299245387323282 33.880175433263638,-97.295170524880618 33.877119286431629,-97.294227111562321 33.876411726442917,-97.286921603026471 33.869423850720118,-97.28598279642199 33.868525862052032,-97.284253187903744 33.867526845294535,-97.279107999999979 33.864555000000003,-97.275347999999994 33.863225,-97.271531999999993 33.862560000000002,-97.257971626565464 33.863220416657512,-97.256624999999985 33.863286000000002,-97.255635999999996 33.863697999999999,-97.254234999999994 33.865322999999997,-97.249208999999993 33.875100999999994,-97.246418496348156 33.898356425448434,-97.246179999999981 33.900343999999997,-97.245398270620598 33.902084836575838,-97.245057441245748 33.90284383100218,-97.244945999999999 33.903092,-97.242092 33.906277000000003,-97.241794392023195 33.906436890220043,-97.238755934556053 33.908069304909361,-97.226522000000003 33.914642,-97.210920999999999 33.916063999999999,-97.210512235443105 33.915911440173737,-97.206141000000002 33.914279999999998,-97.185457999999997 33.9007,-97.180845000000005 33.895203999999993,-97.179608999999999 33.892249999999997,-97.170773789281327 33.861660975771436,-97.166629 33.847310999999998,-97.166824000000005 33.840395,-97.171627 33.835335,-97.180939422624874 33.831550006302521,-97.181369999999987 33.831375,-97.186254000000005 33.830894,-97.193690000000004 33.831307000000002,-97.195830999999998 33.830803000000003,-97.197477000000006 33.829794999999997,-97.199700000000007 33.827322000000002,-97.203513999999998 33.821824999999997,-97.204994999999997 33.81886999999999,-97.205652 33.809823999999999,-97.205556910941183 33.806237292333442,-97.205445103342427 33.802019970418343,-97.205431000000004 33.801487999999999,-97.205114487332324 33.800890302957832,-97.203236000000004 33.797342999999998,-97.194785999999993 33.785344000000002,-97.190397000000004 33.781153000000003,-97.187792000000002 33.769702000000002,-97.181842999999986 33.755869999999994,-97.173532726140948 33.740090726508434,-97.172577000695028 33.738276026602087,-97.172191999999995 33.737544999999997,-97.168438536634085 33.734131892706188,-97.163454368039083 33.729599677915004,-97.163149000000004 33.729322000000003,-97.162807288850388 33.729115696596551,-97.155066000000005 33.724442000000003,-97.152609597300682 33.723370138808036,-97.150103410774264 33.72227655424301,-97.149393999999987 33.721966999999999,-97.137529999999998 33.718663999999997,-97.126102000000003 33.716940999999998,-97.121101999999993 33.717174,-97.119522126797463 33.717502594273334,-97.114921749218269 33.718459416457094,-97.113264999999998 33.718803999999999,-97.112398501853761 33.719102240295193,-97.110065570752283 33.719905212653977,-97.108936 33.720294000000003,-97.108097026518521 33.720734123472262,-97.106518853348803 33.721562029324609,-97.104524999999995 33.722608,-97.097154000000003 33.727809,-97.094085000000007 33.730992,-97.092697209381924 33.732891057656268,-97.092130098039192 33.733667094850453,-97.091071999999983 33.735115,-97.089936943375889 33.737167271747261,-97.087911027802278 33.740830286618703,-97.086195000000004 33.743932999999998,-97.084820762198987 33.752363244406453,-97.084693 33.753146999999998,-97.08461299999999 33.759993,-97.085217999999998 33.765512,-97.087362453285593 33.77250304797397,-97.087851999999998 33.774099,-97.093101265647221 33.787040841586602,-97.093917000000005 33.789051999999998,-97.094675961767678 33.791977368936216,-97.095047178759813 33.793408200769441,-97.095235999999986 33.794136000000002,-97.095080023591905 33.79561056406444,-97.094877682854474 33.797523445530629,-97.094770999999994 33.798532000000002,-97.093897185962049 33.800360798466031,-97.09266432242093 33.802941048788071,-97.092111999999986 33.804096999999999,-97.087998999999982 33.808746999999997,-97.078589999999991 33.812755999999993,-97.067977124183287 33.814475679891196,-97.064604445188394 33.815487484896828,-97.062631847535258 33.816079264957295,-97.058622892638837 33.818751903281317,-97.055415722506638 33.823829921794093,-97.055412197115942 33.8238546000754,-97.055148464371385 33.82570077017467,-97.055682980641905 33.830778788687446,-97.057821087157734 33.834520485448607,-97.058282726048489 33.836367011192308,-97.058622892638837 33.837727655580807,-97.057553829022481 33.840133030590344,-97.055415722506638 33.841202089027483,-97.052208542016004 33.841736615656437,-97.048734113748537 33.840934820533782,-97.045339940802535 33.839496399893775,-97.041245000000004 33.837761,-97.038858000000005 33.838264000000002,-97.023899 33.844213000000003,-97.017857000000006 33.850141999999998,-97.010381749407998 33.858564100233409,-96.999664164722446 33.87063922351804,-96.985567000000003 33.886521999999999,-96.983970999999997 33.892082999999992,-96.984938999999997 33.904865999999991,-96.985275905099471 33.906070041818985,-96.988744999999994 33.918467999999997,-96.993996999999979 33.928978999999998,-96.995022999999989 33.932034999999999,-96.995140238436761 33.933014648420269,-96.996024643022366 33.940404763634284,-96.996183000000002 33.941727999999998,-96.996167702736543 33.941832622020257,-96.995421139189489 33.946938567064805,-96.995367999999999 33.947302,-96.994947208134789 33.948043840473474,-96.994456760007211 33.948908482357652,-96.994287999999983 33.949205999999997,-96.990835000000004 33.952700999999998,-96.988126301178397 33.954514162310069,-96.987892000000002 33.954670999999998,-96.982723774786024 33.956016867344054,-96.981537499896135 33.956325787441237,-96.981336999999982 33.956377999999994,-96.979415000000003 33.956178,-96.979347000000004 33.955129999999997,-96.980675999999988 33.951813999999999,-96.981031000000002 33.949159999999999,-96.97981799999998 33.941588000000003,-96.976955000000004 33.937452999999998,-96.973806999999979 33.935696999999998,-96.97254199999999 33.935794999999999,-96.952313000000004 33.944581999999997,-96.944610999999995 33.949216999999997,-96.933309804512817 33.955134148312766,-96.932252000000005 33.955688000000002,-96.924267999999998 33.959159,-96.922113999999979 33.959578999999998,-96.921429967464036 33.959451233053208,-96.919039990098355 33.959004821377064,-96.918617999999995 33.958925999999998,-96.91833921313939 33.958790334953079,-96.917063225391544 33.958169405626251,-96.916299999999993 33.957797999999997,-96.91417790611122 33.956157267456653,-96.911732563120111 33.95426660943896,-96.911336000000006 33.953960000000002,-96.910857206749995 33.953482904168467,-96.908421363636307 33.951055696608989,-96.907387 33.950024999999997,-96.905252999999988 33.947218999999997,-96.902433999999985 33.942017999999997,-96.901946611333699 33.940667581536225,-96.899441999999993 33.933728000000002,-96.896468999999996 33.91331799999999,-96.897193999999999 33.902954,-96.895728000000005 33.896414,-96.887761838797758 33.878628251663962,-96.883009999999999 33.868018999999997,-96.875280999999987 33.860505000000003,-96.87198767019855 33.857765462058182,-96.866438000000002 33.853149000000002,-96.85608999999998 33.84749,-96.850593000000003 33.847211,-96.845895999999996 33.848974999999996,-96.841592000000006 33.852893999999999,-96.840818999999996 33.863644999999998,-96.839777999999995 33.868395999999997,-96.837412999999984 33.871349000000002,-96.833926235310372 33.873661568818115,-96.832156999999995 33.874834999999997,-96.812777999999994 33.872646000000003,-96.794275999999996 33.868886000000003,-96.786859371055769 33.865207582975678,-96.783484999999999 33.863533999999994,-96.780568999999986 33.860098,-96.779588000000004 33.857939000000002,-96.777202000000003 33.848162000000002,-96.776765999999995 33.841976000000003,-96.770675999999995 33.829621000000003,-96.769378000000003 33.827477000000002,-96.766316855179326 33.825510582121247,-96.766234999999995 33.825457999999998,-96.761588000000003 33.824406000000003,-96.754041 33.824657999999999,-96.746233969152598 33.825673509073113,-96.746037999999984 33.825699,-96.741799282455162 33.826447231494264,-96.71318112067361 33.831498997677379,-96.712421999999989 33.831632999999997,-96.708134 33.833060000000003,-96.704457000000005 33.835020999999998,-96.700318655907978 33.838434731313264,-96.699573999999998 33.839049000000003,-96.695480719177567 33.844085960723298,-96.693127324791789 33.84698191524042,-96.690708 33.849958999999998,-96.688190999999989 33.854613,-96.687524326814838 33.85620885855986,-96.684726999999995 33.862904999999998,-96.682762564556768 33.871464102957781,-96.682209 33.873876000000003,-96.682102999999998 33.876645000000003,-96.683464 33.884217,-96.681051007513375 33.895708672998403,-96.680947000000003 33.89620399999999,-96.675306000000006 33.909114000000002,-96.673449000000005 33.912278,-96.670618000000005 33.914913999999996,-96.667186999999998 33.916939999999997,-96.665308436653305 33.917161206414967,-96.66440999999999 33.917267000000002,-96.659896000000003 33.916665999999999,-96.65150600931733 33.910998546998165,-96.644049999999979 33.905962000000002,-96.630116999999998 33.895422000000003,-96.628293999999997 33.894477000000002,-96.616355751891987 33.894625565889051,-96.614680358047494 33.89464641537834,-96.611821556077771 33.89468199182577,-96.607562 33.894734999999997,-96.592948000000007 33.895615999999997,-96.588319642127203 33.894847991673281,-96.587934000000004 33.894784,-96.58760387584924 33.894318075382706,-96.585452000000004 33.891280999999999,-96.585359999999994 33.888947999999999,-96.587494000000007 33.884250999999999,-96.590112000000005 33.880665,-96.597347999999982 33.875100999999994,-96.601685999999987 33.872822999999997,-96.611969999999999 33.869016000000002,-96.625399000000002 33.856541999999997,-96.628968999999998 33.852406999999999,-96.629746999999995 33.850866000000003,-96.630021999999983 33.847541,-96.629842405402627 33.847037300944812,-96.629577623992816 33.846294683138318,-96.629289999999997 33.845488000000003,-96.627812273090953 33.844523322531259,-96.626623854929747 33.84374750920842,-96.623154999999997 33.84148299999999,-96.622548607895212 33.841284829387497,-96.620258613641042 33.840536452948584,-96.605267599881515 33.835637348301233,-96.601258 33.834327000000002,-96.599141379811712 33.83346048638235,-96.597030984690946 33.832596521217091,-96.595164098773168 33.831832245189069,-96.592925999999991 33.830916000000002,-96.587067000000005 33.828009000000002,-96.573054340771023 33.81917200025552,-96.572936999999996 33.819097999999997,-96.568822993124115 33.818734252140963,-96.566549213959448 33.818533211567136,-96.566298000000003 33.818511,-96.551222999999993 33.81912899999999,-96.541502252916899 33.82118138128849,-96.537683599711926 33.821987629236112,-96.532865 33.823005000000002,-96.532141353898353 33.822830017549641,-96.529233999999988 33.822127000000002,-96.526655000000005 33.820891000000003,-96.526331240434345 33.820568979830284,-96.523863000000006 33.818114,-96.519910999999993 33.811346999999998,-96.517492044660074 33.805400310572544,-96.516583999999995 33.803167999999999,-96.515958999999995 33.798933999999996,-96.515952403498957 33.797370629253059,-96.5159410675722 33.794684014612457,-96.515912 33.787795000000003,-96.51191399999999 33.781477999999993,-96.502285999999998 33.773459999999993,-96.500268000000005 33.772582999999997,-96.486059999999995 33.773009999999999,-96.459153999999998 33.775232000000003,-96.456254 33.776035,-96.450509999999994 33.780588000000002,-96.448044999999993 33.781030999999999,-96.436454999999995 33.780050000000003,-96.430214000000007 33.778654000000003,-96.423664429058576 33.776393528613141,-96.422642999999994 33.776040999999999,-96.422322840041474 33.775682043625913,-96.420980388055867 33.774176915691271,-96.419961 33.773034000000003,-96.419583102042878 33.772404537625398,-96.417562000000004 33.769038000000002,-96.416145999999998 33.76609899999999,-96.413408000000004 33.757714,-96.411885201063754 33.755703128434462,-96.408468999999997 33.751191999999996,-96.403507000000005 33.746288999999997,-96.384116000000006 33.730141000000003,-96.383299027856694 33.729391180874664,-96.380090129695702 33.726446045924753,-96.379450023740389 33.7258585550397,-96.370956555983966 33.718063228581727,-96.370761536889887 33.717884239557762,-96.369590000000002 33.716808999999998,-96.369084597701828 33.715741445126696,-96.366945 33.711221999999999,-96.363253 33.701050000000002,-96.363143372320295 33.69469995601051,-96.363135 33.694215,-96.362964209763192 33.693778090504111,-96.362198000000006 33.691817999999998,-96.356236230636398 33.68737146600408,-96.355945999999989 33.687154999999997,-96.355455421824701 33.68710517164083,-96.352724507664888 33.686827790830883,-96.348305999999994 33.686378999999995,-96.346643697131185 33.686554630652331,-96.344174978865311 33.686815463144171,-96.342664999999997 33.686974999999997,-96.337175125435976 33.689043696356201,-96.321102999999994 33.695099999999996,-96.318759999999997 33.696753,-96.318590686098233 33.696960051986665,-96.318010443675675 33.697669623646739,-96.316924999999998 33.698996999999999,-96.314798583555884 33.702507526903553,-96.309963999999994 33.710489000000003,-96.308342766341951 33.715746247280322,-96.307034999999985 33.719987000000003,-96.307001890234133 33.720499786556005,-96.306595999999999 33.726785999999997,-96.307389 33.735005,-96.3061 33.741002000000002,-96.30525491425243 33.743702118680943,-96.304087485467235 33.747432149959735,-96.303009000000003 33.750878,-96.301705999999982 33.753756000000003,-96.294866999999996 33.764771000000003,-96.292482000000007 33.766418999999999,-96.277269000000004 33.769734999999997,-96.269895999999989 33.768405,-96.251497151236435 33.760405611313516,-96.248231999999987 33.758986,-96.23960043273749 33.754058875473291,-96.229595766085112 33.748347949873668,-96.229022999999998 33.748021,-96.220521000000005 33.747390000000003,-96.1999 33.752116999999998,-96.196336040977513 33.753254070097242,-96.186553999999987 33.756374999999998,-96.178059000000005 33.760517999999998,-96.174632999999986 33.763699000000003,-96.169932696734321 33.769534234627457,-96.169452000000007 33.770130999999999,-96.167888847884015 33.774482610028038,-96.162756999999985 33.788769000000002,-96.162122572851359 33.796140263149638,-96.162213638666273 33.796174412747511,-96.166837334419654 33.79790829445497,-96.170373408451042 33.799381659586444,-96.173025461119408 33.800560352833699,-96.175150000000002 33.801951000000003,-96.17734 33.805117000000003,-96.17895107878303 33.810509748931381,-96.178963999999993 33.810552999999999,-96.176910000000007 33.813934000000003,-96.175889999999981 33.814627000000002,-96.164217431250009 33.817001137011715,-96.150765000000007 33.816986999999997,-96.148792 33.819197000000003,-96.151629999999983 33.831945999999995,-96.150147000000004 33.835856,-96.148457006953691 33.837436961236868,-96.14806999999999 33.83779899999999,-96.147446683377808 33.837891494337825,-96.138904999999994 33.839159000000002,-96.128108733462625 33.839703753325978,-96.122951 33.839963999999995,-96.118168999999995 33.837883999999995,-96.109992999999989 33.832396000000003,-96.104074999999995 33.830730000000003,-96.099360000000004 33.830469999999998,-96.097448 33.832724999999996,-96.097637999999989 33.837935000000002,-96.099152999999987 33.842409000000004,-96.100785000000002 33.844230000000003,-96.101348999999999 33.845720999999998,-96.101472999999999 33.846708999999997,-96.100094999999996 33.847971,-96.084626 33.846656000000003,-96.063924 33.841522999999995,-96.055357999999984 33.838262,-96.049381559404907 33.836618570443349,-96.048833999999999 33.836468000000004,-96.044074587870469 33.838420736557822,-96.037191000000007 33.841245,-96.031783693249977 33.849934429642978,-96.031271075997878 33.850758194920559,-96.029462717056688 33.852402158173604,-96.025188419607474 33.852073366797306,-96.022229284477689 33.850922593794486,-96.021900493101384 33.849114234853282,-96.022507000000004 33.846130000000002,-96.022064891975305 33.843195970965255,-96.021407302851145 33.841880802274289,-96.019950829321616 33.840821548098475,-96.019598947095744 33.84056563358331,-96.005296 33.845505000000003,-96.000534603789163 33.849305889934179,-95.998351 33.851049000000003,-95.997709 33.852181999999992,-95.997673906338932 33.852568581878202,-95.997405462294296 33.855525685805766,-95.9977342536706 33.860950759443568,-95.997376655326022 33.862202357114477,-95.996747879541701 33.864403078452035,-95.993624351909531 33.866211440579008,-95.991487204777812 33.866869023331596,-95.988856861024331 33.866869023331596,-95.984753921632091 33.864671017651808,-95.984253769013037 33.864403078452035,-95.980965842506947 33.859306796190523,-95.9735403792467 33.856832331211713,-95.972155999999998 33.856371000000003,-95.971744371228908 33.856383941655046,-95.951609000000005 33.857016999999999,-95.945502988542614 33.859346036998218,-95.944283999999982 33.859811,-95.943359355023844 33.860365112733476,-95.941777921153459 33.861312819872232,-95.941266999999996 33.861618999999997,-95.936631000000006 33.870615,-95.93550004724635 33.874497995518659,-95.935325000000006 33.875098999999999,-95.935308000000006 33.878723999999998,-95.935637 33.880370999999997,-95.936817000000005 33.882385999999997,-95.937201999999999 33.884652000000003,-95.936131999999986 33.886825999999999,-95.935198 33.887100999999994,-95.922712000000004 33.883758,-95.915960999999996 33.881148000000003,-95.905343000000002 33.875629000000004,-95.893305999999995 33.868161,-95.887490999999997 33.863855999999998,-95.881292000000002 33.860627,-95.859469000000004 33.852455999999997,-95.849863999999997 33.844951999999999,-95.843772999999999 33.838949,-95.841300369514457 33.837329726167006,-95.840012000000002 33.836486,-95.839442445999168 33.836292954052603,-95.838335071878717 33.835917618112738,-95.837515999999994 33.835639999999998,-95.831947999999997 33.835160999999999,-95.828244999999995 33.836053999999997,-95.827967044704152 33.836191602640042,-95.826538854622555 33.836898632614485,-95.822787000000005 33.838755999999989,-95.821905415666805 33.839551758599306,-95.821112514659319 33.840267467546653,-95.820784000000003 33.840564,-95.819357999999994 33.842784999999999,-95.818975999999992 33.844456,-95.819524999999999 33.848438999999999,-95.820676999999989 33.850750999999995,-95.821665999999979 33.855443,-95.821665999999979 33.856633000000002,-95.82138191533943 33.857119395418813,-95.820824189768416 33.858074304994595,-95.820595999999995 33.858464999999995,-95.820256321913618 33.858527429344676,-95.805149 33.861303999999997,-95.800842000000003 33.861212000000002,-95.790314669347865 33.857829825250164,-95.789867 33.857685999999994,-95.789358977006231 33.85733891951336,-95.788304168820886 33.85661827626933,-95.787891000000002 33.856335999999999,-95.776255000000006 33.845145000000002,-95.773281999999995 33.843834,-95.772067000000007 33.843817,-95.763621999999984 33.847954,-95.758311274366889 33.849968021173019,-95.758015999999998 33.850079999999998,-95.757640875431136 33.850475976069447,-95.754310000000004 33.853991999999998,-95.753512999999984 33.856464000000003,-95.753688987366843 33.856976705401074,-95.75729390188404 33.867478931648478,-95.757457999999986 33.86795699999999,-95.758009454152003 33.868443703186436,-95.760805000000005 33.870911,-95.762558999999996 33.874366999999992,-95.76194240701966 33.883030946465368,-95.761915999999999 33.883401999999997,-95.758343999999994 33.890610999999993,-95.756366999999997 33.892625000000002,-95.747335000000007 33.895755999999999,-95.737508000000005 33.895966999999999,-95.729445045960333 33.893952819075864,-95.728448999999998 33.893704,-95.723226300470785 33.890698381785455,-95.717160861060378 33.887207774089354,-95.713910181462765 33.885337036216413,-95.713539999999981 33.885123999999998,-95.710877999999994 33.884551999999999,-95.696961999999999 33.885218000000002,-95.684831000000003 33.890231999999997,-95.676924999999983 33.897236999999997,-95.669978 33.905844000000002,-95.665338000000006 33.908132000000002,-95.659818 33.909092,-95.647272999999998 33.905976000000003,-95.636977999999999 33.906613,-95.609439392746168 33.923623282239362,-95.603656999999998 33.927194999999998,-95.599677999999983 33.934246999999999,-95.585944999999981 33.93448,-95.570311428427317 33.932892416047835,-95.564667905744443 33.932319318211334,-95.563423999999998 33.932192999999998,-95.562724847986416 33.932007581530534,-95.561592737930383 33.931707340510293,-95.561007000000004 33.931551999999996,-95.560415995740641 33.931042615914556,-95.559931936825777 33.930625407571753,-95.559414000000004 33.930179000000003,-95.558286100391328 33.928753215740784,-95.557777967458279 33.928110882033096,-95.556914999999989 33.927019999999999,-95.551147999999984 33.914566,-95.549144999999996 33.90795,-95.549475 33.901310999999993,-95.552330999999981 33.894419999999997,-95.55209457427955 33.888655441173519,-95.552085000000005 33.888421999999998,-95.551943532854764 33.888208369560985,-95.548485831718622 33.882986873004867,-95.548324999999991 33.882744000000002,-95.547838962671932 33.882363312195096,-95.545708294665019 33.880694470565629,-95.545197000000002 33.880293999999999,-95.54352178779898 33.880173169084813,-95.541265054919734 33.880010393826282,-95.539789999999996 33.879904000000003,-95.537358049249164 33.88037416967029,-95.534038375697051 33.881015963020303,-95.533282999999997 33.881161999999996,-95.531798241123994 33.881968630089013,-95.525321999999989 33.885486999999998,-95.521418133191162 33.888379988113826,-95.520137966641357 33.88932866459119,-95.515301759339067 33.891142240377064,-95.510062536063273 33.890134704348199,-95.506233872599807 33.886306036979761,-95.506495 33.878588999999998,-95.506084999999999 33.87639,-95.502407477038815 33.874787101867227,-95.502303999999995 33.874741999999998,-95.492028000000005 33.874822000000002,-95.480004545492946 33.87882505156746,-95.478574999999992 33.879300999999998,-95.477829321179073 33.879890044047791,-95.469962325642697 33.886104525088022,-95.467351237093553 33.886417854985297,-95.464924614258621 33.886709049048328,-95.462909526581015 33.885903021006229,-95.461498966768687 33.883686425341857,-95.46277824472287 33.878821065729895,-95.464211000000006 33.873372000000003,-95.463346 33.872312999999998,-95.461127233926518 33.871832054399569,-95.447370000000006 33.868850000000002,-95.418546279096461 33.866998581211959,-95.411345060268999 33.866536029139695,-95.407794999999979 33.866307999999989,-95.406882133018115 33.866362247208706,-95.404325916920058 33.866514150597617,-95.375232999999994 33.868243,-95.352338000000003 33.867789000000002,-95.339561303488324 33.868836967540759,-95.339121999999989 33.868873,-95.339014688391742 33.869073090388603,-95.33835013321854 33.870312202400832,-95.334854000000007 33.876830999999996,-95.334836460323601 33.877305631062114,-95.334523000000004 33.885787999999998,-95.333451999999994 33.886285999999998,-95.325571999999994 33.885703999999997,-95.310579050797429 33.880679668661742,-95.294789354523203 33.875388337067108,-95.287864786488143 33.87494634339312,-95.28344485260331 33.877745636185885,-95.281676877907344 33.882902226669891,-95.281529544303439 33.887616824907447,-95.281317419351268 33.889260797911334,-95.280350898312903 33.896751357029835,-95.279761569607459 33.899108654721076,-95.277846267017765 33.900876629417048,-95.275341635722626 33.901760616765031,-95.272542342929853 33.902055281117747,-95.267212735027385 33.900338966530455,-95.263849803053915 33.899255988324974,-95.261050510261143 33.899992642069066,-95.255746586173245 33.902939265610648,-95.253094626984378 33.90544389690578,-95.250884657186859 33.913105118684925,-95.250737329293145 33.917083057468233,-95.251326652288412 33.924154956252103,-95.253020000000006 33.927236999999998,-95.253623000000005 33.92971,-95.252905999999982 33.933647999999998,-95.250453815364224 33.936614470603772,-95.23166760862577 33.959340626388752,-95.231194814374604 33.959912577712174,-95.230491 33.960763999999998,-95.226393000000002 33.961953999999999,-95.219358 33.961567000000002,-95.184075000000007 33.950353,-95.174181557651636 33.944707625858101,-95.173657196254922 33.944408415920272,-95.168745999999999 33.941605999999993,-95.166685999999984 33.939728000000002,-95.161108999999982 33.937598,-95.149462 33.936335999999997,-95.131725657216535 33.936903570678005,-95.131056 33.936924999999995,-95.130760550144942 33.936820411866918,-95.124700000000004 33.934674999999991,-95.121184 33.931306999999997,-95.121974867397924 33.925542192115131,-95.122499622273722 33.921717137430115,-95.122365486317321 33.918632002634986,-95.119951031304154 33.915815139752631,-95.110963896232136 33.912998276870283,-95.103318123323447 33.913668959251616,-95.10214780889666 33.912991409673538,-95.100769532353866 33.912193461131935,-95.098489218495843 33.909913139475762,-95.095001673232161 33.904815960136006,-95.095247706914634 33.899772255341666,-95.095269945144935 33.899316370327696,-95.09392858558104 33.895962961020395,-95.090441035118587 33.893280234094433,-95.084002493615529 33.893280234094433,-95.079139333602001 33.898143394107954,-95.078905311676394 33.898377416033576,-95.074957661870556 33.900039583313315,-95.073630040977179 33.900598581227868,-95.071259538767663 33.901596686785098,-95.065491679645973 33.899584642240477,-95.06106518008815 33.895292278639054,-95.058834000000004 33.886812999999997,-95.049025 33.864089999999997,-95.046567999999994 33.862564999999996,-95.038661112238941 33.860609605793528,-95.037206999999995 33.86025,-95.033518790033554 33.860141698175291,-95.03143098776043 33.86008039125462,-95.030255193062573 33.860045864827867,-95.022324999999995 33.859813000000003,-95.016999191469623 33.861237606415294,-95.016422000000006 33.861392000000002,-95.008375999999984 33.866088999999995,-95.000223000000005 33.862504999999999,-94.995524000000003 33.857438000000002,-94.992810330111539 33.852698351540766,-94.992671 33.852454999999999,-94.992523097811741 33.852403566519136,-94.990494037024106 33.851697953840834,-94.988486999999992 33.850999999999999,-94.98739725328582 33.851074415574232,-94.983303000000006 33.851354,-94.981650000000002 33.852283999999997,-94.976208 33.859846999999995,-94.973410999999999 33.861730999999999,-94.971435 33.862122999999997,-94.968895000000003 33.860916000000003,-94.965888000000007 33.848421999999999,-94.964400999999995 33.837020999999993,-94.957676000000006 33.835003999999998,-94.949533421399437 33.825707838785306,-94.949112883549958 33.821754768331147,-94.948729542346143 33.818151347643564,-94.948715939727023 33.818023482549535,-94.944301522854289 33.81213759866646,-94.939560116480934 33.810502632153295,-94.935799688114457 33.810339132650462,-94.932366255585293 33.810993121156741,-94.928442330884351 33.812628087669893,-94.92451840618341 33.812791587172725,-94.924196338046286 33.812670811231236,-94.921902464831703 33.811810605997493,-94.919450010309433 33.810175636315982,-94.917815040627914 33.808704169305649,-94.917091634856007 33.805689966907131,-94.916834062621035 33.804616745101868,-94.916997555787162 33.801510305241678,-94.91961350347556 33.794152948011565,-94.920034399525505 33.790224602097751,-94.920103995647338 33.789575041141042,-94.920095560257593 33.789518805381888,-94.91961350347556 33.786305103362189,-94.913003475392784 33.779908559849432,-94.912450337640749 33.77937328682863,-94.911427000000003 33.778382999999998,-94.906244999999998 33.778191999999997,-94.902276 33.776288999999998,-94.89497736748055 33.771540270803243,-94.89019868072495 33.768431100796676,-94.888367999999986 33.76724,-94.887910246679809 33.766674529711281,-94.886225692565191 33.764593571999796,-94.885411379435553 33.764756432942491,-94.881447983999394 33.765549103837166,-94.879218389137634 33.764912090842074,-94.876033253179955 33.760771407616105,-94.875653319149677 33.757021753168047,-94.875534806260347 33.755852122792213,-94.875497398046861 33.755482932714841,-94.877080000000007 33.75222,-94.874668 33.749164,-94.870299604394191 33.746484207390097,-94.869443369718425 33.745958950164457,-94.869299999999996 33.745871,-94.8570941233355 33.742035460072337,-94.849295999999981 33.739584999999991,-94.841633779899112 33.739430990835892,-94.830804318260235 33.740068022348083,-94.828875382311935 33.74092532536806,-94.827937698058648 33.741342073027738,-94.826026615866809 33.743890180559411,-94.824752565187154 33.749304914465036,-94.82447272313469 33.749460382205008,-94.821885938813196 33.750897483986968,-94.817426749089677 33.752171534666616,-94.815635414888177 33.752066164468857,-94.813744972719192 33.751954964523563,-94.81275807295215 33.751896912919612,-94.812012015184067 33.751853028169073,-94.80914539498248 33.749304914465036,-94.798634446013509 33.744527205899239,-94.789716054221742 33.746119775421171,-94.777638928565466 33.753471071068567,-94.775064434371529 33.755038154868203,-94.770923763490302 33.754401129528375,-94.768057130944001 33.753445597691005,-94.766464573766783 33.750897483986968,-94.766146067269247 33.748030863785381,-94.766818924318841 33.746124416643802,-94.768057130944001 33.742616129879757,-94.767738636791165 33.737519908644046,-94.767244154304578 33.736926531576607,-94.76296091588064 33.731786662068515,-94.759138751496963 33.729557067206756,-94.758159820145337 33.729557067206756,-94.753087004596253 33.729557067206756,-94.750011775433265 33.728811557489699,-94.742576055627282 33.727008959675082,-94.742176780415733 33.726449974997927,-94.739390916583417 33.72254976995157,-94.737479828219207 33.716179498036198,-94.737788227808608 33.71500758055268,-94.73907239774114 33.71012773879076,-94.73746132453816 33.705563045258067,-94.73716130937693 33.704713004885136,-94.732383613155861 33.700253815161624,-94.728242929929891 33.699616789821789,-94.725694828570582 33.702483410023376,-94.724525908047042 33.704821269192259,-94.724102271393392 33.705668549067234,-94.721872664186904 33.707261118589173,-94.719006043985303 33.708216656598914,-94.714865360759347 33.707261118589173,-94.711043208720398 33.705668549067234,-94.709450639198465 33.699616789821789,-94.710289486124168 33.697309952648205,-94.710724689878106 33.696113138108018,-94.710724689878106 33.691653948384499,-94.710106194192988 33.688252279047049,-94.71008765219355 33.688150299756906,-94.707858069676533 33.686876245991066,-94.691547961569825 33.685092048879412,-94.684792000000002 33.684353000000002,-94.659166999999997 33.692138,-94.652265035786613 33.690979104454883,-94.649628372726468 33.688049476940073,-94.649099284135872 33.686462209886628,-94.648456523423718 33.684533926193204,-94.64818493525776 33.682632803768527,-94.647928021538007 33.680834402751707,-94.647870600191638 33.680432452214262,-94.648456523423718 33.673401362074948,-94.647827859209684 33.672301196274027,-94.646112824818204 33.669299876741562,-94.642890235687361 33.668420997570671,-94.635273213800133 33.669885811328072,-94.631328876730365 33.67284406472757,-94.630585813750528 33.673401362074948,-94.627656194751552 33.677795791992715,-94.62121101648988 33.681018386800773,-94.616816575217669 33.679553573043371,-94.614284398758912 33.677302743466427,-94.611543254774574 33.674866164477912,-94.611424034353576 33.674789522931938,-94.607441775118403 33.672229504256364,-94.60304734520065 33.671350625085473,-94.596895128555005 33.671350625085473,-94.593672545101384 33.673987285307021,-94.590449961647764 33.677502836053897,-94.590316660066918 33.67755410593854,-94.586641449284855 33.678967649811298,-94.579620000000006 33.677622999999997,-94.576973687569549 33.673401362074948,-94.5728722135906 33.669885811328072,-94.571305222138406 33.668005422800071,-94.569942586075811 33.666370260581196,-94.569356662843745 33.663440621711956,-94.571445361022185 33.660423619728157,-94.571993323065286 33.659632120703485,-94.572286279004103 33.656995454804722,-94.570821465246695 33.654944723492456,-94.568770728257221 33.65465176187643,-94.564669254278257 33.655823608340576,-94.563858010166513 33.65591721375597,-94.557052229552454 33.656702498865904,-94.552071876402621 33.653479904057846,-94.551192985877293 33.650257320604226,-94.551311999999982 33.644569999999995,-94.553536678805585 33.642054372646328,-94.552657799634687 33.638245860283412,-94.549142248887819 33.635902161677912,-94.543868917090279 33.635902161677912,-94.538888563940446 33.637952898667386,-94.538195599937964 33.637916426989378,-94.537583502619341 33.637884211439605,-94.533322276204103 33.637659937051346,-94.529220802225154 33.63443734792051,-94.528408204203203 33.630103504051213,-94.528341911699826 33.629749945032266,-94.52980672545722 33.627406252103981,-94.528927834931892 33.621839964367631,-94.526291174710352 33.619203298468861,-94.521363727720257 33.61686924674752,-94.520724886974008 33.61656663824732,-94.504615 33.620682000000002,-94.493418698303032 33.624467326832118,-94.492501061148843 33.624777568252533,-94.491502999999994 33.625115,-94.491295462081894 33.62531395337146,-94.487514000000004 33.628939000000003,-94.485874999999993 33.637867,-94.481313 33.638818999999998,-94.476415000000003 33.638947000000002,-94.466075000000004 33.636262000000002,-94.464185999999998 33.637655000000002,-94.461453000000006 33.643615999999994,-94.459197999999986 33.645145999999997,-94.454819999999998 33.644902999999999,-94.448637000000005 33.642766000000002,-94.446871000000002 33.640177999999999,-94.447513999999998 33.636254999999991,-94.448451000000006 33.634497000000003,-94.458816999999982 33.632444,-94.462736000000007 33.63091,-94.461129 33.625414999999997,-94.460285999999996 33.624420999999998,-94.45525499999998 33.622917,-94.452710999999994 33.622621000000002,-94.452325000000002 33.618817,-94.452961000000002 33.616985999999997,-94.454768999999999 33.615155999999992,-94.462335999999993 33.610567000000003,-94.469451000000007 33.60731599999999,-94.472166 33.604199,-94.471974000000003 33.602665000000002,-94.471151999999989 33.601588,-94.468086 33.599435999999997,-94.461794602929331 33.598691554192769,-94.458900358388505 33.598349085232492,-94.458231999999995 33.598269999999999,-94.454858239556387 33.593453869357283,-94.453995999999989 33.592222999999997,-94.453435550445548 33.592019500625121,-94.452150252013013 33.591552808439438,-94.451622 33.591360999999999,-94.449112 33.590893999999992,-94.442363999999998 33.591242999999999,-94.441536999999997 33.591501999999991,-94.439518000000007 33.594154000000003,-94.430358101189597 33.59122600196271,-94.430038999999994 33.591124,-94.429672337173542 33.590855074196774,-94.427920122643982 33.589569927010331,-94.427577999999983 33.589319000000003,-94.425982000000005 33.586424999999998,-94.413155000000003 33.569367999999997,-94.412481642075306 33.56890283335202,-94.412480771235352 33.568902231761562,-94.412480202418593 33.568901838813659,-94.412175000000005 33.568691,-94.408900999999986 33.568196999999998,-94.403341999999995 33.568424,-94.397341999999981 33.571607999999998,-94.385926999999995 33.581887999999999,-94.382886999999997 33.58326799999999,-94.379649 33.580607,-94.378075999999993 33.577019,-94.377759999999981 33.574609000000002,-94.378561000000005 33.571328999999999,-94.380090999999993 33.568942999999997,-94.382534000000007 33.567056999999998,-94.388052000000002 33.565511,-94.392357000000004 33.565286999999998,-94.394655618773015 33.564059042448399,-94.397398454287298 33.562313601959417,-94.399227012370631 33.559903231990447,-94.399393244337958 33.557077279687135,-94.399143896386974 33.555498071165481,-94.397957000000005 33.554389999999998,-94.392572999999999 33.551141999999999,-94.389515000000003 33.546778000000003,-94.386086000000006 33.544922999999997,-94.381666999999993 33.544035,-94.373392999999993 33.544471,-94.371597999999992 33.545000999999999,-94.363297000000003 33.544956999999997,-94.361350999999999 33.544612999999998,-94.358969999999999 33.54323,-94.355945000000006 33.54318,-94.348944999999986 33.548358999999998,-94.347382999999979 33.55107799999999,-94.34729 33.552197,-94.352653000000004 33.560611000000002,-94.352433000000005 33.56217199999999,-94.345512999999997 33.567312999999999,-94.344023000000007 33.567824000000002,-94.340576999999996 33.567878,-94.340047258358467 33.56768232744934,-94.338972839399958 33.567285465504582,-94.33842199999998 33.567081999999999,-94.337996277272822 33.566655299162022,-94.334939999999989 33.563592,-94.334379999999996 33.562536,-94.333929800646288 33.557825151092565,-94.333894999999998 33.557461000000004,-94.333202999999997 33.555365999999992,-94.331833000000003 33.553348,-94.33059 33.552692,-94.323660000000004 33.549835000000002,-94.319491999999997 33.548864000000002,-94.309582000000006 33.551673,-94.30641 33.555616,-94.306214999999995 33.557676,-94.307180999999986 33.559797000000003,-94.303577000000004 33.56828,-94.301022999999986 33.573022000000002,-94.298392000000007 33.576217999999997,-94.293257999999994 33.580418999999999,-94.289129000000003 33.582143999999992,-94.287025 33.582410000000003,-94.283581999999996 33.581890999999999,-94.282647999999995 33.580978000000002,-94.280849000000003 33.577187000000002,-94.280604999999994 33.574907999999994,-94.282171999999989 33.572989,-94.290372000000005 33.567905000000003,-94.291686999999996 33.563481000000003,-94.290901000000005 33.558872,-94.289439999999999 33.557634999999998,-94.287571999999997 33.557178,-94.279089999999997 33.557026,-94.275600999999995 33.557963999999998,-94.274473 33.558652000000002,-94.271997999999996 33.561517999999992,-94.270978999999997 33.563220999999999,-94.270853000000002 33.564782999999998,-94.265668999999988 33.573588999999998,-94.262754999999999 33.577354,-94.257801 33.582507999999997,-94.257524288354617 33.582703553652586,-94.252656000000002 33.586143999999997,-94.245931999999996 33.589113999999995,-94.242777000000004 33.589708999999999,-94.240178999999998 33.589536000000003,-94.236971999999994 33.587411000000003,-94.236362999999997 33.585991999999997,-94.236835999999997 33.580914,-94.237975000000006 33.577756999999998,-94.238867999999997 33.576721999999997,-94.244365999999999 33.573549,-94.251108000000002 33.56528,-94.252330999999984 33.561855,-94.252283000000006 33.560445,-94.251569000000003 33.558188,-94.250197 33.556764999999999,-94.237903999999986 33.552675,-94.233128263729824 33.552212399803537,-94.233017493976078 33.552201670126067,-94.231843999999981 33.552087999999998,-94.226392000000004 33.552911999999999,-94.222920999999999 33.554088,-94.21922099999999 33.556095999999997,-94.213604000000004 33.563133999999998,-94.21268334130005 33.563763266722709,-94.208078 33.566910999999998,-94.205634000000003 33.567228999999998,-94.203593999999981 33.566546000000002,-94.202594978382763 33.562850001484037,-94.201237000000006 33.557825999999999,-94.199485999999993 33.556085000000003,-94.197816999999986 33.555238000000003,-94.196394999999995 33.555123000000002,-94.193247999999997 33.556153999999999,-94.191332999999986 33.55766599999999,-94.189883999999992 33.562454000000002,-94.192482999999996 33.570425,-94.194399000000004 33.573678,-94.196366991504703 33.574779501237479,-94.201105911663163 33.575851400157113,-94.204265191768783 33.575005164570705,-94.207404999999994 33.574353000000002,-94.209665 33.573509999999999,-94.211329000000006 33.573774,-94.216140999999993 33.576391999999998,-94.217408000000006 33.579259999999998,-94.217197999999982 33.580736999999999,-94.214431000000005 33.583187000000002,-94.212997 33.583486999999991,-94.210966999999997 33.583143,-94.205788416261612 33.581380140341984,-94.203588205048902 33.580815984742067,-94.199751933850294 33.581098061448763,-94.196536237091394 33.581718635888464,-94.194464999999994 33.582886000000002,-94.190890999999979 33.587474,-94.183913000000004 33.594681999999999,-94.180879999999988 33.592612000000003,-94.176327 33.591076999999999,-94.162266000000002 33.588906,-94.161081999999993 33.587972,-94.162009999999995 33.580877,-94.161276999999998 33.579270999999999,-94.156782000000007 33.575749000000002,-94.152625999999998 33.575923000000003,-94.148731999999995 33.580196999999998,-94.146047999999993 33.581975,-94.144383000000005 33.582097999999995,-94.142160000000004 33.581389999999999,-94.141852 33.579590000000003,-94.143023999999983 33.577725,-94.145668999999984 33.575599999999994,-94.149506000000002 33.573602,-94.151257 33.571793,-94.151754999999994 33.569476000000002,-94.151455999999996 33.568387,-94.148520000000005 33.565677999999991,-94.145239000000004 33.564987000000002,-94.143401999999995 33.565504999999995,-94.136863999999989 33.570999999999998,-94.136045999999993 33.571387999999999,-94.135142000000002 33.571033,-94.134308000000004 33.569209,-94.133047999999988 33.557952999999998,-94.131382000000002 33.552934,-94.128658 33.550952000000002,-94.126897999999983 33.550646999999991,-94.123897999999997 33.552100000000003,-94.122878999999983 33.553111999999999,-94.12071899999998 33.560555,-94.120354999999989 33.5655,-94.119902152897509 33.566998927274319,-94.112842999999998 33.566991000000002,-94.103176000000005 33.570349999999998,-94.100106999999994 33.57256799999999,-94.097439999999992 33.573718999999997,-94.088943 33.575322,-94.082640999999995 33.575491999999997,-94.072670000000002 33.572234000000002,-94.072231491265512 33.572605318678747,-94.072031926011121 33.573523317998088,-94.072031926011121 33.573846369634623,-94.072031926011121 33.574161925883949,-94.071815412538413 33.574459631515609,-94.071712621294751 33.574600969288895,-94.071353404455635 33.574840447439463,-94.070395493400298 33.574561056392717,-94.069534727631535 33.574169799087244,-94.069517406590393 33.574161925883949,-94.068559493988133 33.573563230894273,-94.068280102941401 33.571966710019424,-94.06782332144887 33.570215714974232,-94.067801146640278 33.570130711574109,-94.066845999999998 33.568908999999998,-94.061283000000003 33.568804999999998,-94.056597999999994 33.567824999999999,-94.056095999999997 33.567252000000003,-94.055662999999996 33.561886999999999,-94.056442000000004 33.560997999999991,-94.059849999999997 33.559249,-94.061179999999993 33.559159,-94.066685000000007 33.560953999999995,-94.067984999999993 33.560960999999999,-94.071719999999999 33.559682000000002,-94.073744000000005 33.558284999999998,-94.073825999999997 33.555833999999997,-94.072156000000007 33.553863999999997,-94.069091999999998 33.553406000000003,-94.06547999999998 33.550908999999997,-94.061896000000004 33.549764000000003,-94.056095999999997 33.550725999999997,-94.051882000000006 33.552585,-94.050211999999988 33.551082999999998,-94.046040000000005 33.551321000000002,-94.043449999999993 33.552253,-94.043428000000006 33.551424999999995,-94.043374999999997 33.542315000000002,-94.043020107474533 33.494534442391668,-94.043008999999998 33.493039000000003,-94.043278999999998 33.491029999999995,-94.043271947583932 33.489425304099555,-94.043188 33.470323999999991,-94.043130608695648 33.460424000000003,-94.043089437732434 33.453322008844353,-94.043061045958495 33.448424427841935,-94.043010021810147 33.439622762252007,-94.042987999999994 33.435823999999997,-94.042987999999994 33.434442436873745,-94.042987999999994 33.431023999999994,-94.042886999999993 33.420225000000002,-94.042890126641851 33.419424334827802,-94.042891364631132 33.419107312620362,-94.042967439944888 33.399626074590046,-94.043053 33.377715999999999,-94.042868999999996 33.371169999999999,-94.043127999999996 33.358756999999997,-94.043066999999979 33.352097,-94.043066999999979 33.347351000000003,-94.043066999999979 33.339614667914582,-94.043066999999979 33.330497999999999,-94.042990000000003 33.271227000000003,-94.043049999999994 33.260903999999996,-94.043003999999996 33.250127999999997,-94.042730000000006 33.241822999999997,-94.042876000000007 33.215218999999998,-94.042891999999995 33.202666,-94.042874999999995 33.199784999999999,-94.042718999999991 33.160290999999994,-94.043184999999994 33.143476,-94.043076999999982 33.138162,-94.043007000000003 33.13389,-94.042951563372725 33.117233519058104,-94.042869999999994 33.092726999999996,-94.043036 33.079484999999998,-94.042963999999998 33.019219,-94.042986850316112 33.007494023677346,-94.043068075862834 32.965815492539427,-94.043087999999997 32.955592000000003,-94.043066999999979 32.937902999999999,-94.043092 32.910021,-94.042884999999998 32.898910999999998,-94.042859000000007 32.892771000000003,-94.042885999999996 32.880965000000003,-94.043025 32.880445999999999,-94.042784999999995 32.871485999999997,-94.042921087938623 32.829694015190334,-94.043025999999983 32.797476000000003,-94.042747000000006 32.786973000000003,-94.042828999999998 32.785277,-94.042937999999992 32.780557999999999,-94.043026999999995 32.776862999999999,-94.042946999999998 32.767991000000002,-94.042974715046569 32.757603400545236,-94.04314699999999 32.693030999999998,-94.042912999999999 32.655126999999993,-94.042779999999993 32.643465999999997,-94.042823999999996 32.640304999999998,-94.042925999999994 32.622014999999998,-94.042929 32.618259999999992,-94.042918999999998 32.610142000000003,-94.042939007208048 32.604544739553475,-94.043082999999996 32.564261000000002,-94.043142000000003 32.559502000000002,-94.043081 32.513612999999999,-94.042884999999998 32.505144999999999,-94.042911000000004 32.492851999999999,-94.043088999999995 32.486561000000002,-94.043071999999995 32.48429999999999,-94.042955000000006 32.480260999999999,-94.042995000000005 32.478003999999999,-94.042901999999998 32.472905999999995,-94.042874999999995 32.471347999999992,-94.042902999999981 32.470385999999998,-94.042907999999997 32.439890999999996,-94.042985999999999 32.435507,-94.042898999999991 32.400658999999997,-94.042923000000002 32.399918,-94.042900999999986 32.392282999999999,-94.042762999999994 32.373331999999998,-94.042738999999997 32.363559000000002,-94.042733519218956 32.277818574933548,-94.042732999999998 32.269696000000003,-94.042732 32.269620000000003,-94.042671451745775 32.225096273752321,-94.042662000000007 32.218145999999997,-94.042600205901905 32.185155675879351,-94.042565999999994 32.166893999999999,-94.042538999999991 32.166826,-94.042591000000002 32.158096999999998,-94.042681000000002 32.137956000000003,-94.042751999999993 32.125163,-94.042337000000003 32.119914,-94.042699999999996 32.056012000000003,-94.042717288248511 32.00695918811028,-94.042720000000003 31.999265,-94.042490448495869 31.997488887291052,-94.042251674184627 31.995641414801661,-94.041832999999997 31.992401999999998,-94.038411999999994 31.992436999999999,-94.029282999999992 31.995864999999998,-94.027080554152732 31.994823406342874,-94.018664 31.990842999999998,-94.011671046736083 31.979908989829021,-94.008352361284565 31.974719974671689,-94.002944198469422 31.966263903968002,-93.995504541226836 31.954631438414648,-93.994147015257326 31.952508844111783,-93.977461000000005 31.926418999999996,-93.971711999999982 31.920383999999995,-93.953546000000003 31.910562999999996,-93.943541310721315 31.908563758569336,-93.938002035663573 31.906916949339585,-93.935007833635339 31.903773037645127,-93.932462763507019 31.895538979891644,-93.931327794714704 31.894581351390723,-93.92767203678045 31.891496810199779,-93.923929283519882 31.889849995167665,-93.919587694495533 31.890748256066246,-93.915948999999998 31.892861000000003,-93.909557114944889 31.893143619429534,-93.905252294448232 31.890856686636408,-93.90476638821832 31.890598549301192,-93.901173350426333 31.885957535142037,-93.901888 31.880063,-93.898135577976262 31.874953416991548,-93.896981462364707 31.873381885463036,-93.889196542313442 31.867692899288475,-93.888241004857136 31.85786451213389,-93.888148571748644 31.856913771406646,-93.887306164689562 31.854968889155742,-93.884117000000003 31.847605999999995,-93.880377455095243 31.844791786271248,-93.879654915472827 31.84424803536659,-93.874821999999995 31.840611000000003,-93.874804231839249 31.835091218914506,-93.874787826198073 31.829994712349503,-93.874761000000007 31.821660999999999,-93.870917000000006 31.816836999999996,-93.868473098390325 31.815251608244314,-93.853390000000005 31.805467,-93.846187999999998 31.802021,-93.839950728453459 31.798597132180646,-93.836868453653821 31.794158659336233,-93.836868453653821 31.791454071635616,-93.836868453653821 31.788733862378688,-93.834649214842401 31.783309060642711,-93.831197070889573 31.780226788232302,-93.827450999999996 31.777740999999999,-93.823442999999997 31.775098,-93.822597999999985 31.773558999999995,-93.826519525540022 31.761832440276638,-93.827342999999999 31.759369999999997,-93.830112066651125 31.754555168030393,-93.830647423185951 31.745811043570992,-93.824579 31.734396999999998,-93.819048075401312 31.72885814427071,-93.818932598107111 31.728523867973351,-93.815657495541259 31.719043310199801,-93.815835943108667 31.711905251886723,-93.815525624652665 31.710796971318612,-93.814600367558683 31.707492480599399,-93.814586782471608 31.707443962415162,-93.811060073548262 31.705827553684028,-93.810303944025605 31.705480994217723,-93.807270273132957 31.704231833580664,-93.806045429297654 31.703104120446881,-93.803419352361757 31.700686292667093,-93.802693549340276 31.697783082925291,-93.802451615781152 31.693186330065117,-93.804479 31.685663999999999,-93.812820813246589 31.676953615984285,-93.81562111199878 31.674029590143711,-93.817425 31.672146,-93.821829497696953 31.673879806810671,-93.822051000000002 31.673966999999998,-93.822341750589956 31.673502431839047,-93.826462000000006 31.666919,-93.8257324849111 31.66154827530681,-93.825660999999997 31.661021999999996,-93.825228912080746 31.660277861177896,-93.81803699999999 31.647891999999999,-93.817707248836442 31.6409111211136,-93.816838000000004 31.622509,-93.818717000000007 31.614555999999997,-93.823976999999999 31.614227999999997,-93.825414416100287 31.615089707767993,-93.827851999999993 31.616550999999998,-93.838056999999992 31.606795000000002,-93.839382999999998 31.599074999999999,-93.837534908858984 31.593743346167731,-93.834924 31.586210999999999,-93.822958 31.568129999999996,-93.822219025006859 31.564792487143556,-93.820763999999997 31.558221000000003,-93.818582000000006 31.554825999999998,-93.798086999999995 31.534044000000002,-93.787687000000005 31.527343999999996,-93.781574079702807 31.525595412174177,-93.780834999999996 31.525383999999999,-93.777170583402579 31.525128039451072,-93.760062000000005 31.523933,-93.753860000000003 31.525331,-93.751899169046524 31.525601857922521,-93.749869902733366 31.526210635456998,-93.746826003263621 31.526007705679731,-93.743376259969125 31.525196002300419,-93.742401241878753 31.523787647735123,-93.74154991556837 31.522557958452786,-93.741111000000004 31.520101,-93.740752889151466 31.518711098615515,-93.740332360499409 31.517078940980245,-93.739317727342822 31.515049678599539,-93.734411826534469 31.513527159467717,-93.733432858180635 31.513223342063657,-93.726736285639134 31.511599931372594,-93.725924582259807 31.504091651519342,-93.728765551952293 31.496786301443361,-93.730997740177827 31.492118989316349,-93.733996137544537 31.48847587643743,-93.737167999999997 31.484621999999998,-93.741884999999982 31.483535,-93.745608448194673 31.481972669547908,-93.746355058504165 31.481633300507966,-93.747840636420193 31.480958036391328,-93.749869902733366 31.478928770078173,-93.749869902733366 31.475276095040186,-93.749626709600278 31.47120988033301,-93.749476 31.468689999999999,-93.709416000000004 31.442995,-93.706857276389258 31.44142369846492,-93.700929751125955 31.437783629836048,-93.697919763270235 31.429300939077926,-93.697603150134782 31.428408665937056,-93.704678 31.418899999999997,-93.704697874245824 31.418107106580852,-93.704878999999991 31.410881,-93.701611 31.409333999999998,-93.695865999999995 31.409391999999997,-93.689953513429003 31.406208353384852,-93.678362516190631 31.399967047179565,-93.675064666986117 31.398191282223291,-93.674659331220113 31.397973024503138,-93.674116999999981 31.397680999999995,-93.671643999999986 31.393352,-93.670181999999983 31.387184,-93.668532759396427 31.379357124595749,-93.668145986696857 31.37510269235548,-93.669064113561134 31.373151679996884,-93.669693055010129 31.371815184369147,-93.669512094168894 31.370548454097019,-93.668919524600994 31.366400452767671,-93.667402247962755 31.365414223393856,-93.665051865060306 31.363886475190469,-93.663891561951601 31.361952641672623,-93.663698175601809 31.360018811902275,-93.664665092360735 31.357698213179859,-93.665825387974422 31.355184231855155,-93.668439000000006 31.353011999999996,-93.669515978941746 31.350266666374935,-93.673736148309771 31.339509006758242,-93.677277000000004 31.330482999999997,-93.687850999999995 31.309835,-93.686922292404276 31.305369360695714,-93.686880000000002 31.305166,-93.686723586265984 31.304979085312567,-93.684737187533131 31.30260533533086,-93.684038999999999 31.301770999999995,-93.683824154244718 31.301752735987076,-93.675439999999995 31.30104,-93.668927999999994 31.297974999999997,-93.657003999999986 31.281735999999999,-93.647719584117951 31.27389987096868,-93.642516 31.269508000000002,-93.632650200244299 31.270182983909681,-93.620343000000005 31.271025000000002,-93.615257056394739 31.261768439618621,-93.61394199999998 31.259374999999995,-93.614287999999988 31.251631,-93.616308000000004 31.244595000000004,-93.616007481020262 31.233959925788763,-93.613835693061347 31.232449117569455,-93.609977782626956 31.229765355202261,-93.609827614285464 31.229660890324059,-93.608033931702224 31.227867209671889,-93.60740940488401 31.227242683526022,-93.605259887151632 31.224152751460338,-93.604319472818304 31.220794125122111,-93.604319472818304 31.215285983654958,-93.607287999999997 31.205403,-93.602442999999994 31.182541,-93.600307999999998 31.176157999999997,-93.598827999999997 31.174679,-93.595531708436056 31.171774432382691,-93.588772842417583 31.16581877494577,-93.588502999999989 31.165581,-93.588046655571759 31.165671453282986,-93.583339301771971 31.166604510813709,-93.579215000000005 31.167421999999995,-93.578993496784307 31.167654977688123,-93.574136071231791 31.172764031170193,-93.569563000000002 31.177574,-93.560942999999995 31.182481999999997,-93.552649000000002 31.185575,-93.548930999999996 31.186601,-93.535096999999993 31.185614,-93.533756450961803 31.184752004501149,-93.533306999999994 31.184463,-93.5330935917342 31.183965183917415,-93.531744000000003 31.180816999999998,-93.533193520062923 31.174490811082034,-93.53417786817559 31.170194787673282,-93.536829999999981 31.158620000000003,-93.540253000000007 31.156578999999997,-93.544009577425854 31.153014849431809,-93.544887639546317 31.148844041597808,-93.544887639546317 31.143136612291205,-93.544701999999987 31.135888999999999,-93.540277800652078 31.128868068802213,-93.539619249807799 31.121843550568837,-93.541375382556595 31.113501939154769,-93.541635919885238 31.113241401693255,-93.548470239502265 31.106407078590973,-93.549716998224596 31.105160319232844,-93.55112206776522 31.099540038044921,-93.551692642249563 31.097257738879012,-93.551034091405285 31.091111287020031,-93.546643772295099 31.082989189009115,-93.540128999999993 31.078002999999995,-93.53104031045666 31.074698717981779,-93.527873992025093 31.072210897922254,-93.526043656150705 31.070772777782928,-93.524020490083288 31.067083472240864,-93.523009982318626 31.065240780256033,-93.523659621286654 31.063941504256789,-93.525329858273139 31.060601035263321,-93.529255791555698 31.057567354514948,-93.532069000000007 31.055264,-93.531218761655126 31.051678447674814,-93.523247999999995 31.037841999999998,-93.516942620821894 31.032584114108545,-93.516407263768343 31.029550433360171,-93.516883288197775 31.024314186160638,-93.516942620821894 31.023661529978199,-93.539525999999995 31.008497999999999,-93.540062152267268 31.008345085566372,-93.540618575989114 31.008186389569964,-93.555580999999989 31.003918999999996,-93.562626264226125 31.00599480945781,-93.566016847371429 31.004567194682853,-93.567979815741779 31.001533515663564,-93.569764334642755 30.996715319472376,-93.571101253513504 30.991033414001794,-93.571905755076102 30.987614282198351,-93.567971999999997 30.977981,-93.560533000000007 30.971285999999999,-93.55046299120518 30.967360467203815,-93.549841 30.967117999999996,-93.539153617393822 30.956968324013513,-93.532549000000003 30.950695999999997,-93.526524876707626 30.939912016599852,-93.526293050708773 30.939497017171423,-93.526245000000003 30.939411,-93.526242458076936 30.939167805401102,-93.526231146824912 30.938085618677029,-93.526146999999995 30.930035,-93.526269219450654 30.929894609689271,-93.530935999999983 30.924533999999998,-93.542488999999989 30.920064,-93.54502991280485 30.920837107400992,-93.546884259495414 30.92151141825828,-93.549244331161987 30.921005686748707,-93.550358562122057 30.920030731622223,-93.551941554990407 30.918645608548566,-93.555650241837967 30.911228247920597,-93.555751501305451 30.910053639118178,-93.555774257662236 30.909789665608852,-93.556493125509377 30.9014508058257,-93.562447641167196 30.896531852982324,-93.563812214002311 30.895404595987301,-93.564247644832776 30.895044891882932,-93.567787752332634 30.888301832311882,-93.567450600170787 30.878524390216981,-93.566008182600839 30.875519355165832,-93.565853452041281 30.875197,-93.565427680666076 30.874309976760035,-93.563763247930751 30.87311591407202,-93.559394659034922 30.869981891957959,-93.55904186947815 30.86972880101742,-93.558616999999984 30.869423999999999,-93.558608112367665 30.868835818489011,-93.558593354020289 30.867859114376206,-93.558393833586933 30.854654896933653,-93.558352334289978 30.851908482785802,-93.558231866260058 30.843935935637496,-93.558171999999999 30.839973999999998,-93.553625999999994 30.835139999999999,-93.55374115920948 30.832414921630001,-93.554057 30.824940999999995,-93.561666000000002 30.807738999999998,-93.563243 30.806218000000005,-93.564501487304341 30.805543276361082,-93.569303000000005 30.802969,-93.578395 30.802046999999998,-93.584264999999988 30.796662999999995,-93.588934854633479 30.787551489258888,-93.589380999999989 30.786681000000002,-93.589895999999996 30.77776,-93.591925627378814 30.768225181611253,-93.592827999999997 30.763985999999996,-93.607757000000007 30.757656999999995,-93.611581311334461 30.752392350515215,-93.615058988962588 30.747604886281291,-93.619129 30.742001999999996,-93.617688 30.738479000000005,-93.609908791486006 30.729403419430973,-93.609718999999998 30.729181999999998,-93.609544 30.723138999999996,-93.61030547238029 30.720788970554505,-93.611192000000003 30.718053,-93.61618399999999 30.713980000000003,-93.616977218405893 30.712276394979256,-93.620773999999997 30.704122000000005,-93.621061387132315 30.696047232392139,-93.621092999999988 30.695159,-93.62235785978659 30.692974242186811,-93.629903999999996 30.679939999999995,-93.632922525899005 30.677439880221801,-93.638212999999993 30.673057999999997,-93.646373493696458 30.671658473870171,-93.653439445062318 30.670446661945991,-93.654970999999989 30.670183999999999,-93.666219386787546 30.661299653678171,-93.670353999999989 30.658033999999997,-93.670860468306827 30.657347728689221,-93.683099999999996 30.640763000000003,-93.685120999999981 30.625201,-93.684323003112922 30.617258061147268,-93.683396999999985 30.608040999999997,-93.680812614601606 30.602993111696524,-93.680648411741274 30.602453589051585,-93.679828117977763 30.599758343304948,-93.681234543283509 30.596101640780542,-93.683902548646543 30.593069810094963,-93.684328672415049 30.59258557751615,-93.684347894395486 30.592579170189346,-93.687282162286593 30.59160108089231,-93.689533999999995 30.592759,-93.692869000000002 30.594382000000003,-93.712453999999994 30.588479,-93.72107859525056 30.580404159651369,-93.727657631584904 30.574244488790981,-93.727844000000005 30.574069999999995,-93.727840097341868 30.573768021870688,-93.72780696123904 30.571204031383882,-93.727747245613443 30.566583382517752,-93.727745999999996 30.566486999999999,-93.725846999999987 30.556978,-93.728764326223569 30.546403128121515,-93.729195000000004 30.544841999999999,-93.736587760607577 30.541316766984647,-93.740252999999996 30.539569,-93.738909526480768 30.537838512460276,-93.732793 30.529960000000003,-93.727721000000003 30.525671000000003,-93.718711305261792 30.520890798500346,-93.714321999999996 30.518561999999996,-93.710116999999997 30.506399999999996,-93.713193644304937 30.50058809182816,-93.716678000000002 30.494005999999995,-93.71365216083376 30.483878530555742,-93.711446941284677 30.476497671106777,-93.710595424186792 30.473647647388944,-93.709703157003446 30.47066123332699,-93.708899372668625 30.467970970942378,-93.705844999999997 30.457747999999999,-93.697828 30.443837999999996,-93.6978 30.440583,-93.698862234241474 30.438260713588438,-93.702220303997905 30.430919206922557,-93.702664999999996 30.429947000000002,-93.722313999999997 30.420729,-93.729486046484141 30.413342592858086,-93.738025291703323 30.404548123662593,-93.738321805525445 30.404242747530638,-93.745333000000002 30.397022,-93.751243378615428 30.396311282781173,-93.751436999999996 30.396287999999998,-93.754787283332149 30.393127406185759,-93.75746720581121 30.390599218098316,-93.757654000000002 30.390422999999995,-93.757872622462301 30.389610210267922,-93.758470934573069 30.387385818798332,-93.75855399999999 30.387077,-93.758091991038413 30.3842338214119,-93.758032188807945 30.383865801664729,-93.757931393201204 30.383245510859378,-93.75589426835937 30.370709152880856,-93.756044740613035 30.365928314513319,-93.75610723110799 30.3639428524199,-93.756352000000007 30.356166000000002,-93.758519945992674 30.350935458285047,-93.760658351649255 30.34577618769989,-93.763244572034736 30.339536487238696,-93.765822 30.333317999999995,-93.764264999999995 30.330222999999997,-93.760690955159149 30.32995156504764,-93.760328 30.329923999999998,-93.747921244232074 30.314935395431327,-93.743830002049762 30.309992764786195,-93.741160171732417 30.306767342150266,-93.738698999999997 30.303793999999996,-93.734966161369201 30.301561360829975,-93.729390287632427 30.298226388348422,-93.724220000000003 30.295133999999997,-93.718684474451791 30.295009979388311,-93.714319430116035 30.294282471059141,-93.71311219174963 30.293184979315004,-93.711118400234781 30.291372437742464,-93.709949692759622 30.289928741213533,-93.708644873043468 30.288316906143507,-93.708448001046747 30.287627854154977,-93.707590519980414 30.284626670422831,-93.706607851977495 30.281187332412603,-93.706635817233519 30.280914670488997,-93.707189856385114 30.275512775340033,-93.709131999999997 30.271826999999995,-93.707538803456245 30.253087036355307,-93.707271000000006 30.249936999999996,-93.705637767078656 30.244573755694763,-93.705083000000002 30.242751999999996,-93.707646217538425 30.23733474070027,-93.713358999999997 30.225261,-93.71802168481895 30.219915738218987,-93.719219999999993 30.218541999999999,-93.720945999999998 30.209852,-93.717397000000005 30.193439,-93.710467999999992 30.180670999999997,-93.706634735424259 30.17682001000631,-93.705927274531248 30.176109277739844,-93.705791510460429 30.175972885881706,-93.703764000000007 30.173936,-93.703646997347349 30.173527735424756,-93.702964616901454 30.171146663230584,-93.701744610591902 30.166889619937699,-93.701686103512344 30.166685467574972,-93.697748000000004 30.152943999999998,-93.696083741705934 30.150925109485563,-93.688211999999979 30.141376,-93.69286799999999 30.135216999999997,-93.69498 30.135185,-93.698276000000007 30.138608000000005,-93.700984936503929 30.137486558544058,-93.701251999999997 30.137376,-93.7012922571502 30.136537706048752,-93.701585086407604 30.130439981942867,-93.701656556414648 30.128951727699913,-93.701742498922442 30.127162105630983,-93.701985639262489 30.122099077688652,-93.702366286953335 30.114172668214064,-93.702403861450691 30.11339023643033,-93.702436000000006 30.112720999999997,-93.70268530105453 30.112503701678254,-93.704703872918159 30.110744253531749,-93.710410303455276 30.105770356484715,-93.714491639657382 30.10221294069715,-93.723764999999986 30.094129999999996,-93.727140999999989 30.092110594495406,-93.7293848599641 30.090768395691203,-93.72996305770063 30.09042253796256,-93.732484999999997 30.088913999999995,-93.734084999999979 30.086129999999997,-93.731705540540531 30.081478540540548,-93.731605000000002 30.081282000000002,-93.729179922109864 30.079341937687897,-93.727017487667368 30.077611990133899,-93.71640499999998 30.069121999999997,-93.716151269697463 30.069056930886212,-93.707507094464489 30.066840132907302,-93.702179999999998 30.065473999999995,-93.700580000000002 30.063666,-93.699479012508235 30.0595596142199,-93.699395999999993 30.059249999999995,-93.699786698153744 30.05843348475733,-93.700658293446523 30.056611948527472,-93.700819999999993 30.056273999999998,-93.702099264262131 30.055460929156467,-93.703267223154896 30.054718601437116,-93.703940000000003 30.054290999999999,-93.704473210548429 30.054251542735575,-93.709782747672762 30.053858640136632,-93.710785394684464 30.05378444485228,-93.720804999999999 30.053042999999995,-93.729054152595779 30.045230570163486,-93.729990027439044 30.044344241966268,-93.737446000000006 30.037282999999999,-93.739158000000003 30.032626999999998,-93.739733999999999 30.023987000000002,-93.741078000000002 30.021571000000002,-93.744068611359822 30.019549890100706,-93.74834924745744 30.01665695787004,-93.753252045558341 30.013343557169065,-93.766227014667976 30.004574835541469,-93.782835629207284 29.993350429819579,-93.786934999999986 29.990579999999998,-93.789430999999993 29.987812000000002,-93.803328792953494 29.962666096659486,-93.807814999999991 29.954549,-93.813734999999994 29.935126,-93.816550000000007 29.920725999999995,-93.818997999999993 29.914822,-93.830374000000006 29.894358999999998,-93.838374000000002 29.882854999999999,-93.853129483564672 29.866348149842587,-93.854474509531912 29.864843479256791,-93.855140000000006 29.864098999999996,-93.857517787207271 29.862146563102172,-93.862474802662518 29.858076283033213,-93.863569999999996 29.857177,-93.864820388168837 29.856398395289631,-93.872445999999997 29.851650000000003,-93.890679000000006 29.843159000000004,-93.900728 29.836967,-93.911111176241661 29.828996955749506,-93.916359999999997 29.824967999999998,-93.922743999999994 29.818808,-93.927992000000003 29.809640000000002,-93.929208000000003 29.802952,-93.928808000000004 29.79708,-93.926503999999994 29.789559999999998,-93.922407000000007 29.785048,-93.898470000000003 29.771576999999997,-93.893861999999999 29.767289000000002,-93.890820999999988 29.761672999999995,-93.891780610698319 29.758916671398389,-93.892526767476923 29.756773455119472,-93.893828999999997 29.753032999999999,-93.891732576672823 29.744984915009951,-93.891637000000003 29.744618000000003,-93.891484462723341 29.744488863328282,-93.888820999999993 29.742234000000003,-93.873941000000002 29.737770000000005,-93.870019999999997 29.735482,-93.863203999999996 29.724059,-93.837970999999982 29.690618999999998,-93.852868 29.675885,-93.866980999999996 29.673085,-93.889989999999997 29.674012999999999,-93.930999999999997 29.679611999999999,-93.955443390383635 29.680262610936268,-93.955453232202885 29.68026287289646,-93.991585827226885 29.681224615973395,-94.000169999999997 29.681453101326589,-94.000222586816207 29.681454501032487,-94.001406000000003 29.681486,-94.010062765207763 29.679864152681674,-94.056505999999999 29.671163,-94.132576999999984 29.646217,-94.354166823921716 29.561457673765378,-94.370794193562546 29.555097613439198,-94.391123278008692 29.54732162684321,-94.45341877657637 29.523493256060661,-94.456196753642018 29.522430664556182,-94.45805240375158 29.521720868184531,-94.499046371673685 29.506040450016997,-94.499089575343746 29.506023924375612,-94.500455432020999 29.505501476685335,-94.500806999999995 29.505367,-94.552043946167103 29.48495633977835,-94.552044379602123 29.484956167115939,-94.568074121423052 29.478570587212708,-94.593696728539513 29.46836361027578,-94.594852999999986 29.467903,-94.599458690353401 29.465813271763974,-94.62931993394271 29.452264405230761,-94.631084 29.451464,-94.634656044789836 29.449584234717392,-94.661528069434993 29.435443006940758,-94.670389 29.430779999999999,-94.674924987623086 29.427889211977174,-94.680871144138621 29.42409972235215,-94.694158000000002 29.415631999999999,-94.708472999999998 29.403049000000003,-94.723958999999979 29.383268000000005,-94.730956033155138 29.369322304827527,-94.731047000000004 29.369140999999996,-94.731324722869132 29.369141342444962,-94.731537324603394 29.369141604592603,-94.742750849251038 29.369155431380086,-94.744595216508316 29.369157705569055,-94.744833999999997 29.369157999999999,-94.761491000000007 29.361882999999999,-94.772184717669788 29.3616343088914,-94.778690999999995 29.361483,-94.780073439975141 29.362532749099824,-94.782355999999993 29.364266,-94.782645420567292 29.368514320481975,-94.783130999999997 29.375641999999996,-94.766847999999996 29.393488999999999,-94.754099999999994 29.400999999999996,-94.743385419572206 29.410035318862811,-94.73704402931665 29.415382843516582,-94.727822669267709 29.423158969605012,-94.723817999999994 29.426535999999995,-94.716270519001597 29.430976788539081,-94.706539419927282 29.436702374764607,-94.706364999999991 29.436804999999996,-94.686385999999999 29.466508999999995,-94.681540999999996 29.471388999999999,-94.672399999999996 29.476842999999999,-94.665852999999998 29.478401000000002,-94.656737000000007 29.478032999999996,-94.645948000000004 29.473769,-94.628217000000006 29.475986000000002,-94.608557000000005 29.483344999999996,-94.594211 29.492127,-94.595122262498009 29.503650874486677,-94.595439999999996 29.507669,-94.591407000000004 29.513857999999999,-94.580274000000003 29.525295,-94.566674000000006 29.531987999999995,-94.553989999999985 29.529558999999999,-94.546993999999998 29.524379,-94.532347999999999 29.5178,-94.511044999999996 29.519649999999995,-94.495024999999984 29.525030999999998,-94.503428999999997 29.543249999999997,-94.509486999999993 29.542589999999997,-94.523742999999996 29.545987,-94.523871183237745 29.546315590042923,-94.5261306113389 29.55210749848424,-94.526336 29.552633999999998,-94.542531999999994 29.568999999999999,-94.546193009360195 29.571896121601313,-94.546385 29.572047999999995,-94.546803832691651 29.57214903106096,-94.55398799999999 29.573882,-94.570006000000006 29.572232,-94.578210999999982 29.567281,-94.593518000000003 29.561319,-94.625889999999998 29.552807999999999,-94.634988842169335 29.550728838088908,-94.643914431984982 29.54868926579681,-94.666855093063802 29.543447131924982,-94.691625000000002 29.537787000000002,-94.693243673136905 29.537529479678042,-94.718275999999989 29.533546999999995,-94.740699000000006 29.525857999999999,-94.757688999999999 29.524616999999999,-94.768675999999999 29.525659,-94.780938000000006 29.531093000000002,-94.785987568065153 29.540133852805589,-94.789123822994313 29.545749069554745,-94.789562096440733 29.546533763545689,-94.78971899677407 29.546814681200559,-94.790604999999999 29.548400999999998,-94.779438999999996 29.549472000000002,-94.772471009935998 29.548613672580952,-94.771052999999995 29.548438999999995,-94.762972090755014 29.555767305595641,-94.75523699999998 29.562781999999999,-94.750081379755628 29.56810096117977,-94.734626000000006 29.584046,-94.731874420576986 29.588423440241069,-94.724443803393115 29.600244680945409,-94.708741000000003 29.625226,-94.705273448792255 29.640626536822896,-94.703938528752261 29.6465553563269,-94.702680930363101 29.65214076491651,-94.702542126991759 29.652757236398369,-94.699660909360375 29.665553672721437,-94.69780371146922 29.673802100155214,-94.694887994254785 29.686751760487848,-94.693153999999993 29.694452999999999,-94.692434000000006 29.70361,-94.692611750388934 29.704808689927841,-94.695098387970873 29.721577752663908,-94.695317000000003 29.723051999999999,-94.695611486157915 29.72357178078331,-94.697558868014866 29.727008993840069,-94.705700105090941 29.741378628781629,-94.713878412983604 29.755813695314995,-94.714586470042065 29.757063446593907,-94.722078339612551 29.770286919851305,-94.724615999999983 29.774766,-94.735270999999997 29.785433,-94.738125273271791 29.786265833277604,-94.740919000000005 29.787080999999997,-94.749144589762409 29.783534045463153,-94.75591801041729 29.780613280409739,-94.771512 29.773888999999997,-94.792237999999998 29.767432999999997,-94.798897371247961 29.764438558858895,-94.816085 29.756710000000002,-94.81943931055217 29.753325616252695,-94.823987131664666 29.748737021482022,-94.851107999999996 29.721373000000003,-94.856932183541645 29.710462974624775,-94.860426638443812 29.703917062844585,-94.864167858487249 29.696908903620852,-94.865007000000006 29.695336999999999,-94.865123196353878 29.694545038919138,-94.867438000000007 29.678768000000002,-94.872550999999987 29.67125,-94.893107 29.661335999999999,-94.915413 29.656613999999998,-94.921317999999999 29.658177999999999,-94.928410408640929 29.669495826038883,-94.930071799099807 29.672147016790593,-94.930110565443542 29.672208878811933,-94.930656833967475 29.673080595662611,-94.931474856161643 29.67438596783704,-94.934166999999988 29.678681999999998,-94.935264231405057 29.686686879688732,-94.935319060033862 29.687086883348073,-94.935997030967087 29.692033037575822,-94.936088999999996 29.692703999999999,-94.936280063994801 29.692851065945039,-94.941277009519624 29.696697319220664,-94.942680999999993 29.697778,-94.942922907078852 29.697804516058127,-94.95311095436017 29.698921254167477,-94.965343618259496 29.700262107971746,-94.965962999999988 29.70033,-94.972666000000004 29.684869999999997,-94.980123280315652 29.679059463608382,-94.986438191421769 29.674139034277729,-94.988580124776774 29.672470090483102,-95.001800051879343 29.662169436052462,-95.002396227716986 29.661704909944582,-95.005398 29.659365999999995,-95.011683000000005 29.649802000000005,-95.013860566469219 29.644103309100927,-95.014229369455222 29.643138151779844,-95.015636 29.639457,-95.015582911847446 29.639202042718885,-95.014543866006605 29.634211997110764,-95.013498999999996 29.629193999999998,-95.006633444897872 29.623869765921089,-95.00056235200779 29.61916163683599,-95.000370188745762 29.619012614335521,-94.997782627529062 29.617005962082896,-94.997731096758997 29.616965999999998,-94.995478872439179 29.615219401320278,-94.993499353954022 29.613684285860323,-94.988871000000003 29.610095,-94.988045541621688 29.608923290953985,-94.982835617337045 29.60152798723708,-94.982705999999993 29.601344000000005,-94.982886347998431 29.601051719777942,-94.983895794498991 29.599415764569699,-94.98693593300419 29.594488776939745,-94.988992999999994 29.591155,-94.991605757589539 29.588791109774153,-94.991811610459919 29.588604864563266,-94.992208959522046 29.588245363334387,-95.006677600766466 29.575154872369662,-95.007235451984087 29.574650156950938,-95.007670000000005 29.574256999999996,-95.00815781845921 29.573398130166158,-95.016627 29.558487,-95.018253 29.554884999999999,-95.016926355758628 29.548485488141377,-95.015164999999996 29.539988999999998,-95.012091452887788 29.536262245236642,-95.011587670186657 29.535651395780732,-95.011086587278399 29.535043819893005,-95.001666768519442 29.523622047865974,-94.999580999999992 29.521093,-94.989064037839412 29.515168017977793,-94.982063906682782 29.511224326765198,-94.981915999999998 29.511140999999995,-94.981645984265953 29.511070508097891,-94.961088181447877 29.505703566689924,-94.958443000000003 29.505013000000002,-94.958183821928699 29.504969740154092,-94.957844913785792 29.504913172428417,-94.95747910332102 29.504852114391142,-94.955724072517796 29.504559179260749,-94.952845264169682 29.504078672538427,-94.930551536860648 29.500357589179547,-94.927405495678158 29.499832478177321,-94.909464999999997 29.496837999999997,-94.913072085311995 29.488019044482122,-94.913385000000005 29.487254,-94.917178632618899 29.481741136316387,-94.925104227340569 29.470223752399235,-94.925293406029382 29.469948840084836,-94.925914000000006 29.469047,-94.930860999999993 29.450503999999999,-94.923011455799639 29.448810114938265,-94.920334997737442 29.448232551169699,-94.919400999999993 29.448030999999997,-94.916063708203708 29.446327523795176,-94.890799999999984 29.433432,-94.888257132054065 29.420136433311271,-94.887299999999996 29.415132,-94.887087039327696 29.40154064293051,-94.886938304445962 29.392048238229908,-94.886925408340758 29.391225196262944,-94.886904215833582 29.389872669858736,-94.886764190565785 29.380936121184895,-94.886591910643261 29.369941049100753,-94.886536208040312 29.366386054846032,-94.886982892003275 29.364738908620176,-94.888420210858001 29.359438798199445,-94.888544709543254 29.358979709544975,-94.888781730376067 29.358105695694917,-94.894234145274325 29.337999926591962,-94.894147383920654 29.327241695272729,-94.894002695197727 29.309300588032027,-94.893993580875261 29.308170430590454,-94.891329624021282 29.304475264201969,-94.888683946869179 29.30080545353194,-94.886599269217157 29.297913803549264,-94.886536208040312 29.297826331584119,-94.885816422022174 29.297499155955627,-94.884216982863776 29.296772137788121,-94.876917125093229 29.293454018939102,-94.875951551627523 29.293015121686942,-94.86617837453683 29.293883848703121,-94.865126326153927 29.293977364132552,-94.861112574100105 29.294855372432302,-94.849730461009372 29.297345209778594,-94.825607939204673 29.30577638202961,-94.824952733476934 29.30600538596191,-94.823862547308252 29.313200608971236,-94.822547126780194 29.321882377573708,-94.82230657170463 29.344254498409398,-94.810695999999993 29.353434999999998,-94.797913847039041 29.344567105809805,-94.79693012269928 29.343884625840758,-94.784895000000006 29.335535,-94.779995 29.334935000000002,-94.777063999999996 29.336811,-94.773074869484503 29.336485139838025,-94.745528999999991 29.334235,-94.744945 29.33641,-94.731319999999997 29.338066,-94.722529999999992 29.331445999999996,-94.731082 29.331833,-94.769694999999999 29.304936,-94.780304129101268 29.295750693651897,-94.786095000000003 29.290737,-94.793321795438203 29.286014946162535,-94.795651468635626 29.284492716516493,-94.803695000000005 29.279236999999998,-94.809348860129617 29.275904173901317,-94.81020919937113 29.275397022855465,-94.819018398045671 29.270204194137058,-94.82210781776098 29.268383049216432,-94.825036245866656 29.266656805306088,-94.825782574142963 29.266216861214712,-94.826962003659688 29.265521613475173,-94.833188167130103 29.261851427154124,-94.844390135018429 29.255248113651685,-94.870677905110114 29.23975205180561,-94.881596387366812 29.233315846843187,-94.896165027201874 29.224727954332334,-94.925556066041452 29.207402583865772,-94.927613957028456 29.206189502425392,-94.940693735267132 29.198479261054111,-94.968741214129224 29.181945889621023,-94.978383546115566 29.176261947153485,-94.981700088962569 29.174306918145966,-95.026218999999998 29.148064000000002,-95.076832914261459 29.114498139229923,-95.081772999999998 29.111222,-95.084611040272236 29.108948681405003,-95.100241410561338 29.096428488590096,-95.110484 29.088224,-95.116308293211759 29.081343778536318,-95.119264367911811 29.077851775668329,-95.119484217932538 29.077592067446851,-95.122403192505772 29.074143890856067,-95.122524999999996 29.074000000000002,-95.122638295373392 29.073709965581063,-95.125134000000003 29.067321,-95.183550616106302 29.028323983126334,-95.191390999999996 29.023089999999996,-95.192301227546167 29.02243038040822,-95.237672480263356 28.989550945676651,-95.238923999999997 28.988644,-95.240558404572027 28.987315672512366,-95.251568580535192 28.978367386619187,-95.251619678822578 28.978325857575001,-95.272266000000002 28.961545999999995,-95.29656403895315 28.934716691525271,-95.297146999999981 28.934073,-95.309703999999996 28.928262,-95.334686660244515 28.911063042846731,-95.353450999999993 28.898145,-95.376979000000006 28.876159999999999,-95.377903963555724 28.874482723635413,-95.38239 28.866347999999999,-95.416173999999998 28.859482,-95.436326577581042 28.85908617652915,-95.439594 28.859022000000003,-95.449516932572138 28.854239851149391,-95.480746000949352 28.839189657836059,-95.485144835951402 28.837069731735976,-95.486768999999995 28.836286999999995,-95.506945757563287 28.824808612805594,-95.536465934189138 28.808014833314715,-95.564052739104355 28.79232093268277,-95.564094788066555 28.792297011382839,-95.564132228771385 28.792275711681647,-95.568135999999981 28.789997999999997,-95.576201168007842 28.785870627961152,-95.606319447682353 28.770457515020929,-95.613122366343802 28.766976102576891,-95.695711236705606 28.724711019702028,-95.715243498124195 28.714715330888584,-95.812504000000004 28.664942,-95.854124934570734 28.646410960033691,-95.884026000000006 28.633098,-95.920915435374582 28.618912188118028,-95.97832748198536 28.596834417485056,-96.000681999999983 28.588238,-96.000998496292368 28.588108377001081,-96.024040703743012 28.578671299526803,-96.035336417502748 28.574045070633311,-96.05294532761279 28.566833233429691,-96.077867999999995 28.556625999999998,-96.194412 28.502223999999998,-96.220123346321373 28.492065891861738,-96.220376184174313 28.491966,-96.226882700448613 28.487451845000788,-96.241923733725443 28.477016528665938,-96.244750999999994 28.475055,-96.270391000000004 28.461929999999999,-96.303212000000002 28.441870999999999,-96.321560000000005 28.425148,-96.328817 28.423658999999997,-96.341616999999999 28.417333999999997,-96.371116999999998 28.397660999999999,-96.372100999999986 28.393874999999998,-96.370716999999985 28.387667,-96.378616389014681 28.383909329746462,-96.379349732835649 28.386024690464755,-96.381702691108558 28.392811896356477,-96.381863685354148 28.393276290946375,-96.375880899310658 28.401794149460329,-96.37413840285555 28.404274990018202,-96.340801887331921 28.432913073072363,-96.338559687910475 28.434839257985413,-96.335119195902806 28.437794848703732,-96.312964581561445 28.451131053409146,-96.280819757359396 28.470480970729877,-96.274497619264608 28.474286648703266,-96.268341347214189 28.477992481854848,-96.252027698910211 28.484249764669329,-96.250247000000002 28.484932771712327,-96.223824788704931 28.495067307260509,-96.218978121459415 28.500382701101032,-96.21505000939203 28.509679222336811,-96.145447855080619 28.544740658174199,-96.10473518795402 28.559498996555909,-96.046210731424992 28.586980036018211,-96.032979113622659 28.589015683181284,-96.007533711461477 28.59970275682273,-95.986159544454679 28.60631857558586,-95.982088289576367 28.614461085342473,-95.98565064745685 28.621076904105603,-95.983106103295938 28.641942154390655,-95.97852589224803 28.650593590730978,-95.986065974637228 28.655467849280154,-95.996337701374344 28.658736120211515,-96.002953500413568 28.656191585912577,-96.006515878017979 28.648049056432036,-96.010005951759737 28.648641710656278,-96.010506546843942 28.648726717396318,-96.011440067305529 28.648885239790378,-96.014343010193883 28.649378192516537,-96.026200716522851 28.65139176594381,-96.03348799089656 28.652629228032097,-96.039323368019012 28.651170385770797,-96.047737442142406 28.649066870151618,-96.049244844336243 28.648218956037223,-96.052682972641108 28.646285007998213,-96.05836686193534 28.643087818836001,-96.072165030584017 28.635326345489485,-96.092812363862251 28.627145317384699,-96.098878916233431 28.624741586366319,-96.099137163186526 28.624639261986079,-96.099760206508392 28.62447226081035,-96.102639895829256 28.623700385909448,-96.141413249033207 28.613307536255487,-96.148501276515404 28.611407654045699,-96.187178316202875 28.593595864643298,-96.198374286842139 28.586980055742131,-96.221784081288092 28.580364246840958,-96.228908787187095 28.580873158631725,-96.233997875508891 28.596649310733014,-96.233997875508891 28.601738394123839,-96.222292978285921 28.607336389305434,-96.214150448805384 28.613443281484855,-96.212623728226021 28.62260364440889,-96.2309444244882 28.64143324753087,-96.208552463485731 28.662298487953962,-96.214659365527126 28.665351929112688,-96.192267404524671 28.68774389011514,-96.1912495908051 28.694359708878277,-96.195829762405154 28.698939880478335,-96.202445561444364 28.700975507917487,-96.208747675276499 28.700187749031503,-96.21684000834783 28.699176214258408,-96.221467818495611 28.69859774191346,-96.222801895007663 28.698430983480506,-96.223384071149837 28.698294,-96.224163927167865 28.698110503315906,-96.227000018566372 28.697443183508955,-96.229623268039219 28.696825944469072,-96.231453341209956 28.69639533631743,-96.233964222112746 28.695240331316239,-96.23422531976 28.695120226420762,-96.234426397558138 28.695027730650764,-96.243315632596989 28.690938683290845,-96.256898753233088 28.684690448956413,-96.263514562134276 28.683672635236839,-96.268603640594122 28.688761723558645,-96.287942160437836 28.68316371851509,-96.304227224329892 28.671458831154069,-96.305245042980445 28.660262850652849,-96.303866760710434 28.646480081370939,-96.303718312539132 28.644995605411349,-96.322902111893882 28.641863561491792,-96.322903115546453 28.641863397630402,-96.328654788116609 28.640924350533034,-96.373438710121519 28.626674919011112,-96.376492171004159 28.620059100247982,-96.384634680760783 28.615987845369677,-96.473693647496702 28.573239550803915,-96.48794308888057 28.569677192923439,-96.482854000558774 28.580364266564878,-96.480309456397848 28.596649335387912,-96.485907441717487 28.60784531588914,-96.490487633041468 28.610898766909834,-96.510843966604781 28.614970031650095,-96.510335069606953 28.617514575811001,-96.497612348802434 28.625148188569788,-96.496594535082863 28.630746183751381,-96.49964797624159 28.635835272073191,-96.506263795004728 28.638379806372129,-96.513590449607946 28.639711925390898,-96.518002756430107 28.640514162994929,-96.524548246905439 28.641704252172264,-96.541744210187403 28.644830790950802,-96.545449731689985 28.645504522133091,-96.555118991611849 28.64601343885484,-96.5632615210924 28.64448670841351,-96.564664053901609 28.647882315216158,-96.572092291837293 28.665866475800886,-96.572930781014264 28.667896502859467,-96.570386236853366 28.674003385176928,-96.559190266214102 28.687235002979271,-96.559699163211917 28.6913062775815,-96.561225893653244 28.696395346179383,-96.566823878972883 28.697922096344637,-96.575158129308363 28.702846874961025,-96.578019859474111 28.704537895383844,-96.57828826199534 28.705826226653553,-96.579938546079447 28.713747585140421,-96.580564403635009 28.716751699466613,-96.584126761515478 28.722858581784067,-96.584439828543964 28.722940967911413,-96.591359183115401 28.724761852179114,-96.593796021437342 28.725403125944972,-96.611342043876562 28.720366765465901,-96.616906294097589 28.718769618875786,-96.625254999999996 28.716373230030175,-96.632357663078409 28.714334501780041,-96.638120426114043 28.71268037463507,-96.643733366943522 28.711069252030907,-96.64589364157122 28.710449172933409,-96.648758110223909 28.709626963981723,-96.65548660082564 28.704200766225345,-96.664534272187169 28.696904262901135,-96.657918463285995 28.687743919701024,-96.642136214348383 28.67476740345478,-96.635017595423747 28.668914316579048,-96.634564255386636 28.662567599984854,-96.634358790297441 28.659691108644115,-96.634304719917793 28.658934128568227,-96.633999771842213 28.654664885057134,-96.627892869800831 28.650084693733149,-96.626425176648581 28.649921620227584,-96.623312698200763 28.64957579673532,-96.621378075676532 28.648286046719594,-96.615940371111847 28.64466090565978,-96.615679075580019 28.64448670841351,-96.614055987266909 28.642701311583636,-96.613585709918453 28.642184006591457,-96.613038272810982 28.641581825879328,-96.612716570908134 28.641227953848528,-96.611999586497333 28.640439271135588,-96.610589997120172 28.638888723093881,-96.610589997120172 28.638695619081329,-96.610589997120172 28.63634418879494,-96.61975034032028 28.62769274259265,-96.620390401117646 28.626519297452973,-96.620672695530928 28.626001757543317,-96.621575870071126 28.624345937066781,-96.622336527533278 28.62295139797671,-96.622803791340985 28.622094747411062,-96.621924089240224 28.619379144726071,-96.621515564809087 28.618118047314677,-96.621338841511317 28.617572510068054,-96.620571817957583 28.61520474122884,-96.620437729127232 28.614790814755992,-96.617253050911174 28.604959849584038,-96.615239196090883 28.598743166058551,-96.614649885719274 28.596923990196654,-96.613008078443599 28.591855801497097,-96.611528402529856 28.587288105363601,-96.611113505533794 28.586007336117376,-96.611098903979951 28.585962261746474,-96.608298572876635 28.583628658523324,-96.608045443097311 28.583417717585569,-96.607377235577218 28.583437664220053,-96.600365219155734 28.58364697962633,-96.593251058093557 28.583859344147964,-96.573948594733835 28.584435541167107,-96.565297148531556 28.582399903865994,-96.564279334811971 28.57629300182461,-96.563658896232639 28.575155527088082,-96.562968608029692 28.573889994257026,-96.561225893653244 28.570695006643017,-96.557566061723506 28.569051817003789,-96.543745727976315 28.562846769979732,-96.536289388489891 28.559499026141786,-96.535271536438941 28.559346348925885,-96.526111211846271 28.557972305562419,-96.524846286909124 28.55686549700842,-96.523547686998668 28.555729222873186,-96.522039937244045 28.554409942750958,-96.516783301381025 28.541093122164042,-96.514406314623301 28.535071417976255,-96.512075206364955 28.532603188828926,-96.505754868421008 28.525911074776143,-96.496773944100411 28.520225902118948,-96.493684489370622 28.518270192113103,-96.482894459981281 28.511439806078794,-96.464303363514816 28.49967112954555,-96.450283853050735 28.49079639296917,-96.41974938229167 28.46738661824714,-96.410828816467941 28.459457253614527,-96.410588999643707 28.459244083835621,-96.409758652296418 28.458206146634446,-96.408886828651134 28.457116363910039,-96.40506625078595 28.452340627696451,-96.402446489887097 28.449065917053971,-96.402758256176753 28.447714917044181,-96.403973200604497 28.442450108152798,-96.407195206365273 28.441281062045864,-96.417343901660857 28.437598792799108,-96.461479843413926 28.421584870195201,-96.476120924474287 28.411702150055138,-96.481836236149007 28.407844318412668,-96.504737094149291 28.397666161492985,-96.511137484289378 28.396220910815867,-96.520513236388609 28.394103803612502,-96.534249520963641 28.388796609353736,-96.542905217114992 28.385452367272176,-96.559699173073881 28.377818734789468,-96.57038624671533 28.368658381727396,-96.577905378446388 28.364719789411506,-96.5917603939982 28.357462401226169,-96.600411840200493 28.354408960067438,-96.650793747525029 28.34677533744669,-96.672676831253582 28.335579347083499,-96.688452973492915 28.347284234444516,-96.694559875534281 28.347284234444516,-96.698122233414779 28.342704062844462,-96.705246949175717 28.348810964885843,-96.700157860853906 28.369676195446971,-96.705755865897487 28.400210705653887,-96.710336037497541 28.406826524417021,-96.710425531143088 28.406841439843959,-96.711757514930511 28.407063434453107,-96.711949596522956 28.407095447664108,-96.71209813364915 28.407120203551969,-96.7125191933293 28.40719037931537,-96.712878460543081 28.407250256459115,-96.722549831718325 28.408862132132249,-96.749013067323034 28.408862132132249,-96.762244685125353 28.411915593014903,-96.76554491144303 28.411090543097366,-96.768351577304784 28.410388882297497,-96.775985199925543 28.405808690973519,-96.777118787058129 28.404067826336821,-96.778115367638478 28.402537364460464,-96.780337941159374 28.399124129135416,-96.780820705165937 28.398382742114745,-96.790234641309425 28.383925636830853,-96.794392274787313 28.366371177405831,-96.794814812909479 28.364587126849088,-96.794810066932399 28.364444747076842,-96.79477772408616 28.363474458555832,-96.794305906049686 28.349319871745632,-96.794064195689629 28.347593374049037,-96.792754716842737 28.338239980125699,-96.790743538307225 28.323874459722486,-96.791161640090152 28.319066463411133,-96.791737095961722 28.312448960638157,-96.791761391474679 28.312169572361466,-96.791798306096766 28.312130020933203,-96.806010803272656 28.29690232711997,-96.809573161153153 28.290286508356836,-96.806010803272656 28.282143978876302,-96.799480493673911 28.2729662335258,-96.799349781293685 28.272782529381054,-96.787181219874626 28.255680743271615,-96.787181219874626 28.250082757951983,-96.800412817953031 28.224128419345121,-96.810027933605966 28.21709297064087,-96.81015126416365 28.217002728792142,-96.823379937963566 28.207323213817581,-96.836184503007971 28.197954022244446,-96.84100213695676 28.194428925121734,-96.842143298799229 28.193593928862132,-96.847274602334139 28.190686192954498,-96.857267971405633 28.185023289193378,-96.872677809006134 28.176291056181483,-96.877474270970822 28.171878306563691,-96.886067200578026 28.1639728030657,-96.898123211167331 28.152881261735526,-96.906497631141988 28.149042991548708,-96.910337015250093 28.147283276415891,-96.926704620510804 28.131597659113019,-96.934764623415617 28.123873491831901,-96.962356663895278 28.123371819605953,-96.962754569737697 28.123364584972112,-96.979717515560068 28.129783000626698,-96.995398793779131 28.135716460690723,-97.000413785843605 28.137614026355994,-97.007520616950742 28.136091128354632,-97.007538501604586 28.136087295914667,-97.009222611239821 28.135094102666635,-97.00939982996681 28.134989589017771,-97.027385928308092 28.12438239869169,-97.028912648887456 28.117257682930727,-97.025203084589847 28.111384210119862,-97.023365428929196 28.108474590635566,-97.022805746846075 28.107588427939849,-97.02290356380766 28.107197159145706,-97.023379876854563 28.105291902342927,-97.02382356056566 28.10351716319958,-97.025496807419856 28.101530180660298,-97.031966099908146 28.09384788848477,-97.033883146887263 28.088918342142531,-97.035528457788629 28.084687545284659,-97.035528457788629 28.083043098067591,-97.035528457788629 28.081818766572983,-97.035528457788629 28.074000471643224,-97.033022532693735 28.061470870449408,-97.032801767679686 28.060367047518316,-97.031459273912688 28.053654591691117,-97.031457183186404 28.053644138079921,-97.025859197866765 28.041939250718904,-97.030948266464648 28.033287814378582,-97.03239348781301 28.032603236465789,-97.040617526386512 28.028707642778524,-97.041168915404441 28.028259640036232,-97.046718327422383 28.023750751173218,-97.048760075590963 28.022091833877354,-97.050263648357429 28.019142519014494,-97.059727497080047 28.000578821719444,-97.061991693393324 27.99613751499442,-97.06790259446116 27.99219690579767,-97.073772658186698 27.988283521554418,-97.075732208193486 27.986977152070377,-97.083740513918784 27.975854507337193,-97.090858162154831 27.965968886660271,-97.094600599978094 27.960771057335059,-97.101378519421061 27.951357282114685,-97.101544336287489 27.951126980954953,-97.101629253046639 27.951009041034034,-97.112670327945679 27.935674217691009,-97.118292397880069 27.927865788706086,-97.121533983365822 27.923363587495643,-97.122089895488358 27.923104160785101,-97.123659587861624 27.92237163470331,-97.129167576400675 27.91980122961516,-97.134800331352182 27.902469771509406,-97.13578341488774 27.899444915775788,-97.139044920333077 27.897526377912126,-97.141761509630356 27.895928379836029,-97.144434841366106 27.894355827453982,-97.155121915007527 27.880615312653809,-97.156735458496229 27.877916799393841,-97.171211094589736 27.85370753808861,-97.17159000749372 27.853073838716419,-97.18273536107327 27.834434189625789,-97.184638591770963 27.831251199324921,-97.187183135931861 27.824126483563962,-97.18941247112663 27.823657146727278,-97.196852395853725 27.822090836400886,-97.201135366472329 27.822090836400886,-97.208766105658313 27.822090836400886,-97.209575096934316 27.822090836400886,-97.21103842611052 27.822356897891609,-97.21191517248603 27.822516307306422,-97.214117494684729 27.822916731993345,-97.215541825234411 27.823175702780983,-97.217387510601711 27.823511284007832,-97.220771087297493 27.824126483563962,-97.222189700736266 27.82464074101355,-97.223091414240102 27.824967618564596,-97.225175600069406 27.825723150734085,-97.225442194074731 27.826156365185522,-97.225555528799433 27.826340533769983,-97.225696025109201 27.826568839847944,-97.22598639723725 27.82704069367685,-97.227317456819009 27.829203661466853,-97.227317456819009 27.832884543697009,-97.227317456819009 27.832951908184537,-97.22711696094737 27.834288541284948,-97.22651425924083 27.838306534493725,-97.227537582741903 27.841230302974814,-97.228388390382094 27.843661171179477,-97.233100025453197 27.847817700825228,-97.234045759551762 27.848652012430087,-97.234511621821596 27.849062988727319,-97.238500481248579 27.854279199579018,-97.239439164419366 27.855506710708827,-97.241127420860792 27.857714434929608,-97.24139627838295 27.858969111470945,-97.242350826195675 27.863423696705052,-97.242654131578206 27.86483913096664,-97.243132066142749 27.865496290124597,-97.244364366034702 27.867190700237273,-97.250796680782656 27.876035121329831,-97.263010484865433 27.88010639593206,-97.267085449659064 27.88068852838779,-97.272090543185925 27.881403535150675,-97.273697558506882 27.881633106649463,-97.276628649874411 27.881144591421538,-97.283916343274228 27.879929975854907,-97.291452123510041 27.878674012482271,-97.291709327200167 27.878631145200583,-97.295071705789752 27.87807074876898,-97.29826066531912 27.876989746639367,-97.302276298241679 27.875628516526195,-97.30641171632756 27.874226681314273,-97.315889353880934 27.871013926092836,-97.325097299274915 27.867892591849294,-97.326845878314657 27.866807265961079,-97.334190606350404 27.862248465187459,-97.346213303335873 27.854786094892546,-97.354613966176373 27.849571885725148,-97.359768343966266 27.850509060182219,-97.360211961357962 27.850589719168646,-97.360654441244435 27.850290746360063,-97.363614400263117 27.848290774636723,-97.376904444631478 27.839311017562139,-97.379041564479934 27.837867018088055,-97.379057154646048 27.837837708581311,-97.379081675001302 27.837791610322164,-97.37968928125764 27.836649310776913,-97.391764280353456 27.813948316782309,-97.391812130016405 27.812975373996721,-97.391812459346511 27.812968677620422,-97.39203202611381 27.808504155006624,-97.392068018906713 27.807772301822137,-97.392095751995882 27.807208395884746,-97.393123788240075 27.786304999999999,-97.393168763213623 27.785390509210199,-97.393291005863816 27.782904909577571,-97.393142269808052 27.782564941361908,-97.39298939956177 27.782215523565412,-97.390949955785928 27.777553936582201,-97.390465068726371 27.776445623015572,-97.390185233729682 27.775805999999999,-97.389524844304646 27.774296538065283,-97.38835420640342 27.771620793596586,-97.388306220610531 27.771511111755789,-97.388011229692253 27.770836846624743,-97.38704242749894 27.768622441036733,-97.386166290102864 27.766619840754537,-97.385225495384532 27.765302728148875,-97.378862356737287 27.756394334042721,-97.375764970087644 27.752057992733249,-97.373069654276961 27.748284550598278,-97.368354500700462 27.741683335591173,-97.365855345900911 27.739779218033028,-97.354970329043653 27.731485873530172,-97.352272255056832 27.729430198526604,-97.34997871774064 27.727682741876539,-97.347507961666906 27.725800261438444,-97.346980343555629 27.725398266768138,-97.343485766084669 27.723942192633796,-97.323096068004702 27.715446484002907,-97.316445853072636 27.712675560756566,-97.312489136070184 27.711663774861414,-97.307771479065892 27.710457406346261,-97.30518751069485 27.709796650788128,-97.285725857752936 27.704820043684109,-97.259850586867117 27.698203387982087,-97.253955150197811 27.696695845323848,-97.254014647303208 27.696526337654994,-97.255455364792269 27.692421723465429,-97.259957004258851 27.67959652118169,-97.261636792970123 27.679316557300702,-97.26241778482418 27.679186392412099,-97.266063906300232 27.678578707462119,-97.266172011465457 27.678349884642419,-97.272736281666539 27.664455499360063,-97.273042341106247 27.663807672923248,-97.273584380560237 27.662660354976065,-97.276535709391737 27.656413369610792,-97.277059923980644 27.655303780997631,-97.278846463786479 27.651522268106756,-97.280071982275985 27.648928251476995,-97.280889132874719 27.647198614380269,-97.282300269490932 27.644211705671331,-97.282869528026779 27.64300677394548,-97.287959956150573 27.632232024058997,-97.288756326795195 27.630546371240786,-97.290370933329072 27.627128784125372,-97.290610159422798 27.626622421740255,-97.291264204229464 27.625238025568656,-97.291996439564016 27.623688125953898,-97.292910903535031 27.621752508687905,-97.293983233844585 27.619482740684056,-97.29528946695001 27.616717877953022,-97.296598377059297 27.613947348891728,-97.297587499071795 27.609496333379006,-97.298634024222366 27.60478700569162,-97.29761621050281 27.598680093788271,-97.294053852622326 27.594099922188217,-97.294182769084571 27.593971005725969,-97.300049926927869 27.588103847882682,-97.302196382102863 27.585957392707677,-97.311120578488044 27.579146819865922,-97.321534901946578 27.571199044464009,-97.325080504595888 27.561034984604785,-97.336802147188081 27.527432946040641,-97.343417965951204 27.517763686118776,-97.347489240553443 27.503005347737066,-97.350542661988243 27.478577729709574,-97.359194108190536 27.458221396146271,-97.365809926953673 27.450587783387487,-97.371916828995055 27.425142361502377,-97.369881181831957 27.412419660421783,-97.372934622990698 27.401223670058592,-97.379550422029908 27.390027689557368,-97.399397858595393 27.344734850830708,-97.401942402756291 27.335574497768633,-97.404995863638931 27.329976512448997,-97.413138393119482 27.321325066246711,-97.42026310888042 27.317253791644482,-97.430441285524054 27.313691423902039,-97.450797599363412 27.313691423902039,-97.482858840011673 27.297915271800758,-97.508304242172855 27.275014394076553,-97.532222933616623 27.278576761818989,-97.544436737699399 27.284174747138625,-97.546981281860297 27.290790556039799,-97.536803105216677 27.289263825598471,-97.526624948296998 27.291808369759369,-97.524589320857856 27.297915271800758,-97.51746460509689 27.305039987561717,-97.504741884292372 27.305039987561717,-97.498126085253162 27.308602345442196,-97.502706237129289 27.322342870104325,-97.499143898972747 27.327940855423961,-97.483876634007316 27.33862793892736,-97.483876634007316 27.351350640007954,-97.486930094889971 27.358984272490666,-97.501688443133645 27.366617904973374,-97.514411144214236 27.361528796927644,-97.520518046255617 27.352877370449281,-97.538329835658018 27.335574478044709,-97.570899973304094 27.315727061203152,-97.584131581244463 27.309620159161771,-97.609068086407831 27.285192570720163,-97.621790807212349 27.287228188297352,-97.63146005727225 27.286210384439741,-97.63654914066305 27.282139109837512,-97.636657939024673 27.281797172172649,-97.640111498543547 27.270943129336285,-97.639093679892994 27.253131339933887,-97.635022415152719 27.247024437892502,-97.628915513111338 27.242953173152234,-97.597363199046811 27.242444266292445,-97.5826048606651 27.240408628991332,-97.573953414462821 27.238881903480983,-97.56123071338223 27.232775006370584,-97.542910007258072 27.229212648490105,-97.520009129533875 27.231248285791217,-97.509830972614182 27.235319550531486,-97.503215153851045 27.23989972213154,-97.500161712692318 27.244479898662579,-97.485148876501881 27.25084127385778,-97.467082638600573 27.253640266517596,-97.45843119239828 27.259492710198106,-97.450288657986775 27.262546171080761,-97.424079880742951 27.264072891660124,-97.422298701802717 27.257711541119829,-97.434766954384401 27.202240525749552,-97.444945121166043 27.144733882940127,-97.443672849085587 27.116235010034327,-97.452324285425917 27.115217201245734,-97.455886653168363 27.110382571284802,-97.456650008527049 27.09969549764336,-97.46173908698691 27.095624227972113,-97.475479621510999 27.098423220631929,-97.480568699970846 27.102494490303176,-97.491510231973166 27.101222218222723,-97.495835955074313 27.09409750739275,-97.4932914109134 27.078066891999608,-97.477515248950155 27.066107546277717,-97.479041969529504 27.06279964182713,-97.482256963728076 27.061942305056665,-97.48693005051112 27.057710553505324,-97.487693415731783 27.053639288765055,-97.486675602012198 27.034809685643079,-97.477515248950141 27.032519589981089,-97.473952881207694 27.029211690461484,-97.473443984209865 27.022850330059228,-97.478300083716704 27.000269498406993,-97.478533072531675 26.999186101907302,-97.480568690108868 26.997659376396957,-97.483967678435022 27.000330000000002,-97.484131057851314 27.000458369056773,-97.492988547644813 27.000330000000002,-97.49889841702128 27.000244349959733,-97.533497176854453 26.999742920066073,-97.536803065768822 26.999695008767091,-97.549271318350492 26.995878197456715,-97.555378215460905 26.990280207206101,-97.551052502221722 26.980865400714134,-97.549525776711377 26.965343697111763,-97.552324769371197 26.95211208177491,-97.555378205598956 26.947277449348487,-97.555378205598956 26.938880461507075,-97.540874325578116 26.906310323861007,-97.540110950495503 26.900966796902246,-97.547999041339082 26.895114353221743,-97.552324764440229 26.888498544320569,-97.552324764440229 26.875332999999998,-97.552324764440229 26.873831771434514,-97.552324764440229 26.871753101924,-97.552324764440229 26.867633303897481,-97.555396527456509 26.865969429990074,-97.558431656619632 26.864325399446898,-97.558453748966258 26.864224239771101,-97.559853702000524 26.857813929560987,-97.562641307980527 26.845049630589628,-97.563266286580571 26.842187886943357,-97.552579212939136 26.827938454188693,-97.547744582978211 26.824630549738107,-97.537566416196555 26.824885004400745,-97.509830908511418 26.8035108521869,-97.48438549155729 26.763561555211936,-97.478024141017002 26.757200199740662,-97.471662790476714 26.758726925251008,-97.468609339456009 26.740915130917632,-97.467337057513589 26.710126182073765,-97.444945096511148 26.633535472850511,-97.445708451869848 26.609362327976836,-97.441206258760758 26.5999011976768,-97.435205432977895 26.587290766879221,-97.432741093635642 26.582112082834445,-97.429217375703914 26.574707168454967,-97.428151110966368 26.572466467229631,-97.418145193925739 26.555638334425574,-97.416955130465126 26.553636864107652,-97.41864075483771 26.543121778291471,-97.42039414733226 26.532183948458435,-97.422284917775215 26.520389141863415,-97.422298667285844 26.520303371102887,-97.425861015304378 26.516741008291426,-97.430695645265303 26.506562841509776,-97.430695645265303 26.494603495787885,-97.42802638225659 26.488322868889494,-97.42636993202612 26.484425333937217,-97.429168909893022 26.478063961207511,-97.43553026043331 26.470175880225888,-97.441382709044788 26.466613522345408,-97.441382709044788 26.455417541844177,-97.43756589773443 26.449819546662585,-97.425861005442428 26.446002740283195,-97.421026375481503 26.446766095641895,-97.417209564171131 26.449819546662585,-97.411611568989528 26.447275002501684,-97.412883841069984 26.433025580841726,-97.421789740702152 26.417249413947498,-97.419499649971158 26.413178149207234,-97.406013578738921 26.409106884466965,-97.398125502688274 26.410888063407203,-97.394308686446919 26.414450416356704,-97.395072051667569 26.417249413947498,-97.382484933201752 26.411326066613285,-97.377769169124974 26.409106884466965,-97.369626639644437 26.394602999515151,-97.374461259743413 26.38086247238753,-97.388965149626202 26.365849678110436,-97.392018610508856 26.339386444971247,-97.391000786927322 26.332261729210284,-97.38794734576858 26.330480545339064,-97.376242448545611 26.336332993950553,-97.372171183805335 26.339895346900054,-97.36937219114553 26.348546788171358,-97.358176200782339 26.356434874083959,-97.343417852538664 26.35923386920927,-97.342332537534404 26.358759043566288,-97.335275323058127 26.355671510096041,-97.335020017473738 26.355402767481841,-97.331108052904881 26.351284911668415,-97.330440693097202 26.350582427937965,-97.333762617526986 26.340749518544904,-97.336802038706509 26.331752819885011,-97.343786761143846 26.325987658774913,-97.344677525679145 26.325252425399061,-97.352414066956698 26.31886671611711,-97.352832659030639 26.318521211944631,-97.354359379610003 26.313941040344577,-97.348998828460125 26.312092573442666,-97.347821984790102 26.311686765063648,-97.346980205488165 26.311396496183672,-97.34736083223585 26.297503848546928,-97.347437236753805 26.2947151295396,-97.347489122209922 26.292821341560611,-97.347051378510429 26.289694600417153,-97.344137846000223 26.268883651035111,-97.343926764329439 26.267375924606483,-97.342629246748771 26.266550231912309,-97.341127771669619 26.265594748131736,-97.335282658907644 26.265594748131736,-97.331967408745584 26.265594748131736,-97.330307576264516 26.266747410222209,-97.323817586106017 26.271254350355399,-97.322807065545476 26.271956101137519,-97.313207351206557 26.273518846137112,-97.312102101648151 26.273698770576502,-97.311865543405119 26.273737280077761,-97.307030913444194 26.253126493084562,-97.308048727163751 26.249055213551365,-97.321280340035131 26.236078054109896,-97.321280340035131 26.228698889850026,-97.304486359421333 26.202490107675235,-97.296598288301666 26.200708923804015,-97.294817109361432 26.192311940893585,-97.296089381441874 26.182388227541828,-97.303096384204423 26.167373221160254,-97.305986772892751 26.161179530923267,-97.306776455083323 26.159487354748606,-97.300965235160419 26.149753561518516,-97.296881711355638 26.142913659244432,-97.296598288301666 26.14243892563589,-97.285549237329036 26.12861437636975,-97.28536038956149 26.128378090441405,-97.284582435540926 26.126454238998875,-97.282094393487881 26.120301403270393,-97.282839179410786 26.118439442973433,-97.28311220967295 26.117756868971455,-97.285501587752023 26.116923364107649,-97.294053737977038 26.113940052730097,-97.295071554162092 26.108342057548505,-97.292023254217796 26.105090538920617,-97.291924538345086 26.104985242032239,-97.291541272704407 26.104576425513905,-97.287190793518263 26.099935916255493,-97.286650074642992 26.099359149688052,-97.286603231473521 26.09930918366079,-97.283195451762182 26.095674220102872,-97.282639002190891 26.095080674133143,-97.282108002623801 26.094514274823585,-97.280435495761154 26.092730268223651,-97.279905974795895 26.09216544608875,-97.27980430522237 26.092056998587434,-97.27089841052117 26.086459003405839,-97.267086875013263 26.085485845069449,-97.24859983335169 26.080765747704277,-97.246979719077387 26.080352101364454,-97.229515030031649 26.08000965739204,-97.220290685310772 26.079828788368793,-97.208048240752987 26.079588741074772,-97.205005053278043 26.078666562185607,-97.199651252911579 26.077044196913871,-97.199152512570265 26.073220535461079,-97.199134106850465 26.073079425477676,-97.198725011196004 26.069943037351702,-97.198302051934135 26.066700361972018,-97.196018989165054 26.049196947106083,-97.195939794821285 26.0485897927724,-97.195071061587612 26.04192952989985,-97.204994779870347 26.030224637607851,-97.214918488291119 26.030733549398622,-97.224842206573854 26.027425644948035,-97.226114478654296 26.024372193927345,-97.219244211392265 25.99612778184791,-97.216954125592238 25.993837693582392,-97.208557137750816 25.991802058746771,-97.195834416946283 25.993074335758202,-97.174460269663413 26.000071824804216,-97.167208324722026 26.007069313850227,-97.162755377371425 26.014575709756024,-97.16262814819099 26.023481604457221,-97.172042954682937 26.044728528107019,-97.178658763584124 26.045491893327686,-97.182730028324386 26.053125515948434,-97.164981847348457 26.063876207878327,-97.152009000000007 26.062107999999998,-97.152012551274964 26.062039393270581,-97.15321 26.038906,-97.151921999999999 26.017652999999999,-97.14747181118706 25.985075937251509,-97.145567 25.971132,-97.146880999999993 25.969781,-97.146293999999997 25.955606,-97.147784999999985 25.953132,-97.156608000000006 25.949021999999999,-97.160293999999993 25.950243,-97.168198638692317 25.959262149012673,-97.178362000000007 25.962114,-97.187583000000004 25.958174,-97.206945000000005 25.960899,-97.214339285966162 25.960186817526893,-97.227626420907342 25.958907063854085,-97.229225999999997 25.958753000000002,-97.239867000000004 25.954974,-97.244841570811701 25.950784663302475,-97.248032999999992 25.948097,-97.255343503388133 25.949129556975723,-97.276707000000002 25.952147,-97.28138899999999 25.948036999999996,-97.277163000000002 25.935438,-97.284201820237172 25.935775045516863,-97.290083634347766 25.936056689174489,-97.293963761326751 25.936242484429805,-97.303601999999998 25.936703999999999,-97.316138101068788 25.931602038234757,-97.320560999999984 25.929801999999999,-97.324914000000007 25.924040999999999,-97.332235861490744 25.923541683060932,-97.33463605770983 25.923378000829199,-97.338346 25.923124999999999,-97.339310160867683 25.923294280152341,-97.350397999999998 25.925241,-97.367642000000004 25.915679999999998,-97.369283543255307 25.913688286645449,-97.373641276386991 25.908400972256459,-97.374430000000004 25.907443999999998,-97.372365000000002 25.905015999999996,-97.365976000000003 25.902446999999999,-97.365883578347024 25.900015396466173,-97.365521 25.890476,-97.364300486696564 25.885628504434479,-97.362421560218849 25.878165998501085,-97.360082000000006 25.868874000000002,-97.364783621478566 25.852096838905283,-97.36542 25.849826,-97.372864000000007 25.840116999999996,-97.394513000000003 25.837377,-97.422635999999997 25.840377999999998,-97.42853949246836 25.842912007889609,-97.434188204901034 25.845336654308195,-97.441181027463472 25.848338244915578,-97.445113000000006 25.850026,-97.445601387363794 25.851485440010176,-97.447179184935308 25.856200346812667,-97.448271000000005 25.859463000000002,-97.449172000000004 25.871677999999996,-97.452166849899044 25.875807172885114,-97.453724626189043 25.87795496921364,-97.454727000000005 25.879337,-97.45488774919265 25.879394304385261,-97.462586893331732 25.882138919861518,-97.468261999999982 25.884162,-97.468599721544905 25.884059457735212,-97.481532785459223 25.880132596436578,-97.486059999999995 25.878758,-97.490359999998347 25.879275544671589,-97.494739403174762 25.879802646248233,-97.496860999999996 25.880057999999998,-97.519591990380178 25.88590026892226,-97.521761999999995 25.886458,-97.52344767329889 25.891064017588189,-97.524375103029939 25.893598172727145,-97.528116959024402 25.903822606212749,-97.528119935206945 25.903830738482007,-97.52812430798204 25.903842686870224,-97.528627999999998 25.905218999999999,-97.528849446448064 25.906732522417784,-97.530321999999998 25.916796999999999,-97.530415259581318 25.916820899843632,-97.539878370214808 25.919246032588486,-97.542957 25.920034999999999,-97.545169999999999 25.923974999999999,-97.545468770003851 25.926387609575503,-97.545470694802859 25.92640315259677,-97.546397824784293 25.933889856891241,-97.546420999999995 25.934076999999998,-97.546611329705271 25.934141994258589,-97.555160182125618 25.937061277530951,-97.555378999999988 25.937135999999999,-97.555477252221124 25.937015705749829,-97.559364000000002 25.932257,-97.582565000000002 25.937856999999997,-97.580418999999992 25.945115999999995,-97.583044 25.955442999999999,-97.598043000000004 25.957556,-97.5981230356591 25.957681442330628,-97.607733999999994 25.972745,-97.60783562843973 25.973457509771446,-97.607844088251909 25.973516820913719,-97.608283 25.976593999999999,-97.609461531117333 25.977846566488182,-97.613191727531174 25.981811093986448,-97.613466053312663 25.982102652924251,-97.616041456343709 25.984839842874308,-97.624938181905222 25.994295461083137,-97.627225999999993 25.996727,-97.634804000000003 25.999508999999996,-97.635072411453706 25.99971613545971,-97.639164724998494 26.00287420951236,-97.642117661027001 26.005153015998879,-97.644011365977178 26.006614404624422,-97.643848619841975 26.01214811069886,-97.643707610985203 26.016942704231127,-97.649175518723894 26.021499311673544,-97.65096419129361 26.02118629315062,-97.659123404318109 26.019758427116106,-97.661326460130226 26.019372891335045,-97.66298585459532 26.019511685247039,-97.668297999999993 26.019955999999997,-97.669519566971061 26.021667429940447,-97.671350987084779 26.024233271429612,-97.671567999996611 26.024226704244594,-97.691453959129774 26.023624920821636,-97.697068999999999 26.023454999999998,-97.703247203861338 26.030308742132775,-97.706066818770353 26.031284762516545,-97.709294717923569 26.032402112038366,-97.711145328137576 26.033042707775564,-97.719920000000002 26.030837999999999,-97.723585926686539 26.030959832537771,-97.729354247932832 26.031151535557555,-97.735180242251758 26.031345155270547,-97.758837769919694 26.032131383932391,-97.76309059882324 26.033650253079866,-97.763351431657455 26.034258862745556,-97.76491324062286 26.037903081983409,-97.769788888528993 26.041344719068825,-97.770077387482857 26.041548365582649,-97.776788595669075 26.042443189872706,-97.779190602367677 26.042763456191249,-97.784050976575529 26.040637041739476,-97.789822674626535 26.0424596835391,-97.792252861730461 26.04428232533872,-97.793102878401371 26.047342389307317,-97.793537334820812 26.048906434437896,-97.794638769549053 26.052871604582215,-97.795290594138677 26.055218176136449,-97.801344 26.060016999999998,-97.803973303988229 26.059548218630308,-97.8082126910423 26.058792373859696,-97.819424117916668 26.056793476786609,-97.820997703829306 26.056512920501468,-97.825546000000003 26.055702,-97.826721102251625 26.055271667399982,-97.830409376527257 26.053920989485444,-97.836607999999984 26.051650999999996,-97.848759348822554 26.052295281844582,-97.85186756815483 26.052460084066457,-97.859824237628374 26.052881958029587,-97.860225497621784 26.05290323340671,-97.860503999999992 26.052917999999998,-97.861874999990562 26.053580848914272,-97.869705222636284 26.057366592615971,-97.871187000000006 26.058082999999996,-97.876982999999996 26.064482999999999,-97.886529999999993 26.066338999999999,-97.901546631929207 26.060958662441269,-97.905109129229899 26.05968224852101,-97.913882 26.056539,-97.935419999999993 26.052687999999996,-97.944344999999984 26.059620999999996,-97.950095000000005 26.061827999999998,-97.96210735288345 26.054793018383155,-97.96735799999999 26.051718,-97.971403108419892 26.054550391225565,-97.978769 26.059707999999997,-97.979877702655912 26.062937323324391,-97.981335 26.067181999999995,-98.010970999999998 26.063862999999998,-98.015122209308288 26.064471399070538,-98.026123959861238 26.06608380989196,-98.028288992822496 26.066401115993269,-98.028758999999994 26.066469999999999,-98.029241090705753 26.065867136858621,-98.033102 26.061039,-98.034402999999998 26.051375,-98.034479464439173 26.051215303797409,-98.034525269179767 26.051119640464091,-98.039238999999981 26.041274999999995,-98.054365285842039 26.044575736209502,-98.070020999999997 26.047992,-98.070022345126233 26.049160242153427,-98.070025 26.051466,-98.071425788568789 26.055027814897404,-98.076094939927231 26.066900165398668,-98.076139697069991 26.067013970337847,-98.076205751241318 26.067181927684643,-98.076543999999998 26.068041999999998,-98.076994427275579 26.068371469710563,-98.080289992888041 26.070782045417982,-98.080494999999999 26.070931999999999,-98.080906883185932 26.070920010911959,-98.084755 26.070808,-98.085506402845155 26.069709056167966,-98.085848999999982 26.069208,-98.085628527723046 26.069048386721494,-98.081567000000007 26.066108,-98.081855064865067 26.063941606819231,-98.081884000000002 26.063724,-98.082307152201508 26.063513440869801,-98.091037999999998 26.059169,-98.093593108176947 26.058759459973995,-98.094431999999998 26.058624999999996,-98.095078111969258 26.058956205325877,-98.096949561841043 26.059915534659098,-98.097643000000005 26.060270999999997,-98.105504999999994 26.067537000000002,-98.122952624574893 26.063250384797335,-98.12786358062813 26.062043837809401,-98.128331000000003 26.061928999999999,-98.142925292417388 26.051941751725515,-98.14645163947533 26.049528582072455,-98.146621999999994 26.049412,-98.146852932570667 26.049588146033326,-98.149462999999997 26.051579,-98.149462999999997 26.055813,-98.151730999999998 26.058187,-98.158277994458601 26.062311711597108,-98.16142849281799 26.064296576133319,-98.161911645017582 26.064600969774318,-98.167608590156348 26.068190136655492,-98.172071527808072 26.071001859012309,-98.177897000000002 26.074672,-98.179863281323136 26.072661506851002,-98.189059999999998 26.063257999999998,-98.191534000000004 26.057117999999999,-98.197046 26.056152999999998,-98.200871000000006 26.059161,-98.203328791159265 26.063523594334541,-98.204415309491765 26.065452171017675,-98.20496 26.066419,-98.205720285634712 26.066905180236589,-98.2057544964389 26.066927057036718,-98.220672999999991 26.076467,-98.228363119990576 26.077028417928002,-98.230097 26.077155,-98.231072909449267 26.07694353295701,-98.240214327563166 26.074962705064888,-98.248806000000002 26.073101,-98.250234708208026 26.074229377516481,-98.260964088277859 26.082703320039151,-98.264514000000005 26.085506999999996,-98.272091468517374 26.0934369782697,-98.272527821536428 26.09389363077193,-98.277218000000005 26.098801999999999,-98.277020629370639 26.099144109090908,-98.272932087266241 26.106230915405163,-98.272897999999998 26.10629,-98.272099931737145 26.106512924095771,-98.270258188934392 26.107027377392626,-98.270033999999995 26.107089999999999,-98.269661374787887 26.108231250649609,-98.268046405073434 26.113177467856264,-98.266755660647689 26.117130670341034,-98.265753950746401 26.120198637935399,-98.265698 26.12037,-98.266046753689267 26.120369439652073,-98.268388964369507 26.120365676386069,-98.271048543344023 26.120361403199535,-98.2713587738927 26.120360904747326,-98.279433560913844 26.12034793086255,-98.289509742149562 26.120331741306838,-98.296194999999997 26.120321,-98.299522999999979 26.11749,-98.299575546893735 26.117376878214852,-98.299577897643644 26.117371817572689,-98.299619756950364 26.117281703787395,-98.301477861619162 26.113281617347607,-98.302978999999993 26.110049999999998,-98.307788398559808 26.112633359128559,-98.31093219000293 26.114322040617914,-98.314784784069062 26.116391454064445,-98.31781148535309 26.118017240801439,-98.323055746360907 26.120834185452331,-98.323827999999992 26.121248999999995,-98.324165904650499 26.121735183484471,-98.335204000000004 26.137616999999999,-98.337914801547555 26.149187638321976,-98.338210450252006 26.150449569219312,-98.338419999999999 26.151344000000002,-98.338123748811455 26.151776768193923,-98.337139471603692 26.153214615149455,-98.336278203634194 26.154472768358826,-98.335109254490916 26.156180386856505,-98.334230366689056 26.157464279382136,-98.333315999999996 26.158799999999999,-98.333279392301918 26.159609030127591,-98.333194378655719 26.161487831708563,-98.333156000000002 26.162336,-98.33332593363771 26.162525092143447,-98.336569396995017 26.166134227137082,-98.336837000000003 26.166432,-98.337709251548077 26.166391430160555,-98.345513373134324 26.166028447761192,-98.345781000000002 26.166015999999999,-98.345955918391979 26.165759937155421,-98.34781294946896 26.163041431373035,-98.354645000000005 26.15304,-98.380009845764519 26.156864235849298,-98.386243919298991 26.157804141722139,-98.386694000000006 26.157872,-98.386714843024777 26.157901012682096,-98.387178289965661 26.158546112849205,-98.389418830831929 26.161664858836595,-98.394322667090904 26.168490808715738,-98.402249554153599 26.179524728065878,-98.404432999999997 26.182563999999999,-98.41082579547016 26.183537375155975,-98.418120000000002 26.184647999999999,-98.44253599999999 26.199151,-98.444302622216625 26.201317032456906,-98.444376000000005 26.201407,-98.444366742625562 26.201566115583965,-98.444174812576264 26.204865005795593,-98.443681770155465 26.213339409994948,-98.45054565332704 26.219516919037407,-98.450975699346984 26.219903961344286,-98.465077324681431 26.222335272645303,-98.467962758220992 26.221802674698019,-98.47639547470331 26.220246150374404,-98.481645999999998 26.219277000000002,-98.483269000000007 26.216439,-98.496684404575589 26.212853148677059,-98.500574513964963 26.213825676024403,-98.503492081872309 26.214798198660183,-98.504399410834864 26.216045775617395,-98.509275818143593 26.222750833698164,-98.509327236533252 26.222821533963195,-98.516621175147847 26.223550930651591,-98.520846190978133 26.222726536052498,-98.524733007990875 26.221968131567948,-98.526589565145571 26.221605875956907,-98.528323413163747 26.222421776495104,-98.535240999999999 26.225677,-98.538016739096946 26.231331135295655,-98.538505426714039 26.231595841236214,-98.543851889046309 26.23449184328507,-98.556093449912439 26.231976454911809,-98.561600478976516 26.23084487397777,-98.564343479612191 26.231667774301364,-98.575891642961039 26.235132223865481,-98.57618836327309 26.235221239973473,-98.581780384919284 26.243001439905978,-98.583095590242166 26.247416774401941,-98.585184223567666 26.254428618568909,-98.588002268837087 26.255070784392117,-98.599153999999999 26.257611999999998,-98.610401443364651 26.253223367217647,-98.613465000000005 26.252027999999999,-98.617434734670965 26.252082931217494,-98.618976176235122 26.252104260920568,-98.625299999997523 26.252191766854153,-98.626653663614832 26.252210498179227,-98.633391522135483 26.243617562727948,-98.63418 26.242612,-98.636673745354344 26.241784277127035,-98.654221000000007 26.235959999999999,-98.669397000000004 26.236319999999996,-98.675206000000003 26.239989,-98.678410535728389 26.244637915883345,-98.679041999999995 26.245553999999998,-98.678977427258005 26.246060764449961,-98.677766000000005 26.255568,-98.679196310064967 26.258571609080832,-98.681167000000002 26.262709999999998,-98.687156000000002 26.26512,-98.698855915315121 26.265619481498664,-98.707451416076225 26.272152066874316,-98.710601999999994 26.279018,-98.709170532219119 26.284185773270103,-98.710647239525585 26.288123668959596,-98.711233447604599 26.289686894290245,-98.722550749196131 26.295571625529284,-98.729196000000002 26.299026999999999,-98.73263614407044 26.29899082409209,-98.734613221934339 26.298970033513189,-98.745271658069271 26.303095890935232,-98.745297595683382 26.304159357241051,-98.745599830797417 26.316551278053844,-98.745615470637418 26.317192526042046,-98.748245116157776 26.32061106368975,-98.74905366960931 26.321662182706675,-98.754840366886953 26.324877004144408,-98.755242435754027 26.32510037501579,-98.766685638772316 26.325769085950686,-98.779858354339893 26.326538865087553,-98.779911999999996 26.326541999999996,-98.779946859358333 26.326559704051515,-98.789821999999987 26.331575,-98.796251999999996 26.349104,-98.797592059971961 26.356670995104565,-98.798210999999995 26.360166,-98.807348000000005 26.369420999999999,-98.808280016253249 26.369491024329768,-98.813413043374013 26.369876679389535,-98.81818280466733 26.370235041528161,-98.81932575812273 26.370320914010964,-98.824571000000006 26.370715,-98.828353477559162 26.367368473620303,-98.832909 26.363337999999999,-98.838554497099707 26.360957856802237,-98.842229804437778 26.359408346173527,-98.844057000000006 26.358637999999999,-98.847707 26.359594999999999,-98.853132332741467 26.364754198689674,-98.853414999999998 26.365023,-98.853852117327648 26.365076242531281,-98.854321671505204 26.365133435992636,-98.861354000000006 26.365989999999996,-98.861661690067152 26.365902494757481,-98.869113443480302 26.363783259984523,-98.874117355796216 26.362360176799562,-98.876164212939671 26.361778062685843,-98.882912762903771 26.359858814831277,-98.890964919192157 26.357568829017531,-98.895015448091129 26.359360408468842,-98.900432100164338 26.361756234493352,-98.900829697862818 26.361932094951143,-98.905559653818443 26.364024190108832,-98.91296803413384 26.372226331500926,-98.915344992389564 26.37485796579432,-98.921277034399395 26.381425588572444,-98.922831447878195 26.38166472803821,-98.923508557916591 26.381768898347495,-98.924925720775448 26.381986922427696,-98.926689551972586 26.38116380140492,-98.934437533628781 26.377548077521784,-98.937555770591459 26.376092900630621,-98.942046463189357 26.375531566775365,-98.950185820407469 26.380302920861933,-98.952073083609605 26.383491745197549,-98.952938578460817 26.384954133189183,-98.953327659277917 26.385611545667039,-98.958325183064531 26.394055638388448,-98.960041959595969 26.394835991082342,-98.96758721887106 26.398265653180793,-98.981979903868819 26.396488780147621,-98.98323657723455 26.396333635432413,-98.985344372930967 26.396073413984297,-98.99032130527651 26.395458978465552,-99.008003378826189 26.395458978465552,-99.014739404125635 26.398826987036053,-99.018845438188137 26.404005475794783,-99.021934999999999 26.407902,-99.025336792347318 26.409271761295809,-99.030462148109507 26.411335530401477,-99.031104888479149 26.411594335405351,-99.032315999999994 26.412082000000002,-99.033086386506682 26.412180127570064,-99.037216923343138 26.412706252494743,-99.039107 26.412946999999999,-99.039645291109963 26.412681959983438,-99.045466000000005 26.409815999999999,-99.053184999999999 26.402006,-99.062093000000004 26.397371,-99.082001999999989 26.396509999999996,-99.085125999999988 26.398782,-99.089412999999979 26.408099999999997,-99.092044248326658 26.410330707587079,-99.0977332288968 26.415153685331873,-99.099649490160544 26.416778244479925,-99.110855 26.426278,-99.113807999999992 26.434002,-99.110485406379198 26.436329519428725,-99.103082999999998 26.441514999999999,-99.097481906444941 26.458865277747179,-99.094712087984234 26.467445230774196,-99.091634999999997 26.476977000000002,-99.105030999999997 26.500335,-99.114051328117867 26.510193091438737,-99.123438026388797 26.520451579672599,-99.126618350727256 26.523927276756307,-99.127319211298612 26.524693229780183,-99.127781999999996 26.525199,-99.128040494672888 26.525242991472329,-99.131554903978838 26.52584108518932,-99.136510932879688 26.526684518463242,-99.143658999999985 26.527901,-99.157083944984777 26.532657279516766,-99.166741999999985 26.536078999999997,-99.170704 26.540316,-99.171403999999995 26.549848,-99.167459686682065 26.559874693319248,-99.167410000000004 26.560001,-99.168618869529794 26.566870928153797,-99.16946034016965 26.571652951934592,-99.178064000000006 26.620546999999998,-99.200522000000007 26.656442999999999,-99.209947999999997 26.693937999999999,-99.208906999999982 26.724761,-99.240022999999979 26.745850999999998,-99.242444000000006 26.788262,-99.243132825912184 26.78921716914337,-99.262208 26.815667999999999,-99.268613000000002 26.843212999999999,-99.274832961326339 26.850997131057774,-99.280470999999991 26.858053000000002,-99.295146000000003 26.86544,-99.316753000000006 26.865831,-99.328801222539823 26.879647723469141,-99.328900000000004 26.879760999999998,-99.328852280051947 26.879943529980665,-99.328653604395157 26.88070346927794,-99.326247644284351 26.88990632616278,-99.321819000000005 26.906846000000002,-99.324684000000005 26.915973,-99.337297000000007 26.922758999999999,-99.361143999999996 26.928920999999999,-99.367053999999996 26.929033999999998,-99.379148999999998 26.934489999999997,-99.388253000000006 26.944216999999998,-99.393748000000002 26.960730000000002,-99.390189000000007 26.966348,-99.377312000000003 26.973818999999999,-99.376593 26.977716999999998,-99.378434999999996 26.980034,-99.385448615007036 26.981891053234623,-99.387366999999998 26.982399,-99.403694000000002 26.997355999999996,-99.407320999999996 27.005808999999999,-99.415475999999998 27.017239999999997,-99.420446999999996 27.016567999999999,-99.429379999999981 27.010833000000002,-99.432154999999995 27.010698999999995,-99.438721 27.01463,-99.445682828533535 27.022104842939122,-99.446523999999997 27.023008,-99.446589518313687 27.0234513503828,-99.446929167151652 27.025749691622671,-99.446969999999979 27.026026000000002,-99.446787747918748 27.026353589968604,-99.444062000000002 27.031253,-99.443973 27.036457999999996,-99.447729715193731 27.048260380671568,-99.452315999999996 27.062668999999996,-99.450282 27.067705,-99.439210578806851 27.075275465844946,-99.434470000000005 27.078517000000002,-99.429209 27.090981999999997,-99.430274999999995 27.094871999999999,-99.437646 27.100442,-99.442122999999995 27.106839,-99.441108999999997 27.110041999999996,-99.433369999999982 27.119218,-99.430581000000004 27.126611999999998,-99.431354999999996 27.13758,-99.438264999999987 27.144791999999995,-99.439971 27.151071999999996,-99.437950999999998 27.154121,-99.42998399999999 27.159148999999999,-99.426616441133064 27.174998569551711,-99.42634799999999 27.176261999999998,-99.426389092127664 27.176475083747437,-99.428025433058153 27.184960350328335,-99.432794999999999 27.209693,-99.441928000000004 27.217984999999995,-99.442101400955139 27.218265584747954,-99.445237999999989 27.223341,-99.443121431464945 27.230753685991843,-99.441406999999998 27.236757999999998,-99.441548999999995 27.249919999999999,-99.452207395848959 27.263806782859465,-99.452390999999992 27.264046,-99.452635348600225 27.264144272092288,-99.454218033886534 27.264780796280988,-99.462735864984637 27.268206496624611,-99.463308999999981 27.268436999999995,-99.463731957038988 27.268231398925973,-99.480688 27.259988999999997,-99.487909999999999 27.260721,-99.492407 27.264118,-99.496069429210138 27.270723950024919,-99.496615000000006 27.271707999999997,-99.496412995851571 27.272119287725655,-99.490870463706145 27.283404082904614,-99.487572835142558 27.290118173493504,-99.487513000000007 27.29024,-99.487552182270463 27.290674424182523,-99.487937000000002 27.294941,-99.493651777311726 27.30231355132117,-99.494603999999995 27.303542,-99.494999311050705 27.30367917804087,-99.501697839297435 27.306003653868146,-99.502036000000004 27.306121,-99.50260564894451 27.305998370990778,-99.511531000000005 27.304076999999999,-99.522353224815092 27.304131436852781,-99.523657999999983 27.304137999999995,-99.527521386758664 27.305370598210363,-99.529216737576675 27.305911493159478,-99.529653999999994 27.306051,-99.533911450776046 27.310119063512179,-99.536090758332008 27.312201427353024,-99.536443000000006 27.312538,-99.537771000000006 27.316072999999996,-99.53137599999998 27.323809,-99.52136037329538 27.324774325824137,-99.521259999999998 27.324784,-99.520793197388144 27.325167862222077,-99.515101491997058 27.329848278790703,-99.509737777509301 27.334258981108004,-99.504836999999995 27.338289,-99.507830999999996 27.348637,-99.507785758525344 27.353517859091919,-99.507778999999999 27.354247,-99.505884699626023 27.358359262089539,-99.503847413823948 27.362781925614613,-99.502763417847504 27.36513512979511,-99.502013099315448 27.366763966750881,-99.499076000000002 27.373139999999999,-99.492143999999996 27.380516999999998,-99.488110785984318 27.408328989964531,-99.487887470616073 27.409868914391197,-99.487633320470721 27.411621467383494,-99.487521 27.412396,-99.487591555014376 27.412624523015491,-99.489856740583164 27.419961308946796,-99.495313182879073 27.437634363915539,-99.495699000000002 27.438884000000002,-99.495681276107845 27.439260342274874,-99.495103999999998 27.451518,-99.489866073767956 27.458841813736395,-99.48498035355378 27.465673163249864,-99.484933241276849 27.465739036942171,-99.483818999999997 27.467296999999995,-99.483170086267094 27.470026063960816,-99.480813109028745 27.479938539705284,-99.480418999999998 27.481595999999996,-99.480219000000005 27.485795999999997,-99.483519 27.491095999999999,-99.494943552274876 27.498766770813134,-99.497518999999997 27.500495999999998,-99.501722168778215 27.500229993495459,-99.502529258718056 27.500178915086504,-99.513319999999993 27.499496,-99.516119999999361 27.498282666666942,-99.519319999999979 27.496896,-99.525819999999982 27.496696,-99.528319999999994 27.498895999999998,-99.525855930815595 27.516294999999385,-99.525849791073696 27.516338353233991,-99.525316190784537 27.520106149807926,-99.523876376642917 27.530272798702207,-99.522431296340699 27.540476632400054,-99.521918999999997 27.544094,-99.518818999999993 27.553194,-99.514319 27.556994,-99.511118999999994 27.564493999999996,-99.512219000000002 27.568093999999995,-99.515978000000004 27.572130999999999,-99.51621006287597 27.572263354504685,-99.516956092136581 27.572688844074506,-99.522907946893667 27.576083418863931,-99.530137999999994 27.580207,-99.536560517954015 27.595669560441458,-99.539721999999998 27.603280999999999,-99.549741780062789 27.610632655019803,-99.554405160028892 27.614054243170667,-99.554950000000005 27.614453999999999,-99.555217670042637 27.614437037021997,-99.556811999999994 27.614335999999998,-99.559466999999998 27.609075999999998,-99.562869000000006 27.607264,-99.580005999999997 27.602250999999995,-99.584175941853502 27.603675176957196,-99.584843000000006 27.603902999999999,-99.584876722760043 27.604178863233781,-99.585148000000004 27.606397999999999,-99.578360965974085 27.610254799100861,-99.578159999999983 27.610368999999999,-99.578158133228257 27.610639131051315,-99.578098999999995 27.619195999999999,-99.584782000000004 27.622006999999996,-99.591372000000007 27.627464,-99.592626330929548 27.632690692534315,-99.594037999999998 27.638573,-99.596231000000003 27.639857999999997,-99.603532999999999 27.641991999999998,-99.612907806834755 27.638651258855042,-99.615318942915422 27.637792043123689,-99.624515000000002 27.634515,-99.625321999999997 27.631136999999999,-99.638929000000005 27.626757999999999,-99.654323999999988 27.629615999999999,-99.665948 27.635967999999998,-99.665422000000007 27.640274999999999,-99.660175716081199 27.644678795569117,-99.659499999999994 27.645246,-99.659300532255756 27.646059100049566,-99.658294999999995 27.650158,-99.661845 27.655753,-99.668942 27.659973999999998,-99.672015651285406 27.660163655087903,-99.685812999999982 27.661014999999999,-99.699355999999995 27.655417,-99.704600999999997 27.654953999999996,-99.711511000000002 27.658365,-99.721518999999986 27.666154999999996,-99.723715999999996 27.673328,-99.727277746539684 27.678262316066267,-99.732288643517421 27.685204233237535,-99.732448000000005 27.685424999999999,-99.732610774853441 27.685596448480599,-99.757538999999994 27.711853,-99.758533999999997 27.717071,-99.770740000000004 27.732133999999999,-99.774900999999986 27.73354,-99.785365999999996 27.730354999999999,-99.788844999999981 27.730718,-99.796341999999981 27.735586,-99.801651000000007 27.741771,-99.805670000000006 27.758687999999999,-99.813085999999998 27.773952,-99.817390803736785 27.775433523363962,-99.819091999999998 27.776019000000002,-99.822192999999999 27.766855,-99.825793000000004 27.764373999999997,-99.835127 27.762881,-99.841707999999997 27.766463999999999,-99.843346625073153 27.773142384459568,-99.844736999999981 27.778808999999999,-99.849281022020321 27.790032142335203,-99.850876999999997 27.793973999999999,-99.857944055165163 27.794214491272228,-99.870065999999994 27.794626999999998,-99.877441689362087 27.799278597548025,-99.877677000000006 27.799427,-99.877679299916537 27.799779028327777,-99.877693551047656 27.801960325692491,-99.877840000000006 27.824375999999997,-99.876677795668783 27.832975173255242,-99.876002999999997 27.837968,-99.877201999999997 27.842179000000002,-99.882014999999996 27.850391999999996,-99.89364999999998 27.856193,-99.901486000000006 27.864162,-99.904385000000005 27.875283999999997,-99.901231999999993 27.884405999999995,-99.894091000000003 27.892949999999999,-99.893456 27.899208000000002,-99.895827999999995 27.904177999999998,-99.900080000000003 27.912141999999999,-99.905861237749605 27.914081496997749,-99.917461000000003 27.917973,-99.925935042520848 27.927688375003317,-99.93714199999998 27.940536999999999,-99.938541 27.954059,-99.932160999999979 27.96771,-99.931811999999994 27.980967,-99.962768999999994 27.983536,-99.984922999999995 27.990729000000002,-99.991446999999994 27.99456,-99.998749958954292 28.00705628754028,-100.000278657311796 28.009672084008166,-100.008630999999994 28.023963999999999,-100.012838999999985 28.037203000000002,-100.014975394500183 28.048814882934586,-100.016570970484992 28.057487270710915,-100.017914000000005 28.064786999999999,-100.028724999999994 28.073118,-100.046108000000004 28.079067999999999,-100.053122999999985 28.08473,-100.056983000000002 28.094207,-100.05559599999998 28.101140999999998,-100.056492999999989 28.104185999999995,-100.064147158981442 28.110644603904401,-100.067651999999995 28.113602,-100.075474 28.124881999999999,-100.083393 28.144034999999999,-100.090288999999984 28.148312999999998,-100.119627999999992 28.155588000000002,-100.12658652988236 28.159659080291213,-100.141098 28.168149,-100.159890345070792 28.168159605160877,-100.160589999999999 28.16816,-100.1644540887186 28.169825181963088,-100.168437999999995 28.171541999999999,-100.173949604741296 28.178834844700365,-100.174413 28.179448,-100.17569869464343 28.180169771489844,-100.185693999999998 28.185780999999999,-100.195825662217615 28.189941498404405,-100.196499000000003 28.190218000000002,-100.19841872968675 28.190245400986015,-100.202449991411854 28.190302940621361,-100.208059000000006 28.190382999999997,-100.21208061434919 28.196473071951928,-100.212104999999994 28.196509999999996,-100.212111438897693 28.196576571978802,-100.212136678181992 28.196837521783539,-100.213449999999995 28.210415999999999,-100.217564999999993 28.226934,-100.220284000000007 28.232209999999995,-100.22363 28.235223999999995,-100.227575000000002 28.235856999999999,-100.246200000000002 28.234092,-100.251633999999996 28.236177,-100.261135590980771 28.244561246718906,-100.267604000000006 28.250268999999999,-100.280518 28.267969,-100.289383999999998 28.273491,-100.293468000000004 28.278475,-100.294296000000003 28.284381,-100.287553999999986 28.301093000000002,-100.286470999999992 28.312295999999996,-100.288638999999989 28.316977999999995,-100.314198000000005 28.345859,-100.317245999999997 28.357382,-100.320392999999996 28.362116999999998,-100.341869000000003 28.384952999999996,-100.344399999999979 28.389662,-100.34934096344108 28.4019924953441,-100.349585999999988 28.402603999999997,-100.349394820211828 28.402858691740477,-100.345766407828719 28.407692501181913,-100.343945000000005 28.410119000000002,-100.337058999999996 28.427150999999995,-100.336185999999998 28.430180999999997,-100.337474638078888 28.440402915586755,-100.337648113426326 28.441778981052359,-100.337796999999995 28.442959999999999,-100.338752462381066 28.444650728533539,-100.341532999999998 28.449570999999995,-100.350785999999999 28.459246,-100.353875644654778 28.461269551534915,-100.357498000000007 28.463642,-100.35795880406117 28.464220845064407,-100.358193534884933 28.464515705266944,-100.367961112704847 28.47678537623738,-100.368288000000007 28.477195999999999,-100.368051363629903 28.477598261305609,-100.365982000000002 28.481116,-100.356642877924983 28.482149981508559,-100.352234999999979 28.482638,-100.344180999999992 28.486249,-100.337140000000005 28.491728999999999,-100.33381399999999 28.499251999999998,-100.338517999999993 28.501833,-100.362147999999991 28.508399,-100.379079000000004 28.511638999999999,-100.388859999999994 28.515747999999995,-100.405057999999983 28.535779999999999,-100.411413999999994 28.551898999999999,-100.40430324537553 28.563833042228197,-100.397270000000006 28.575637,-100.396799999999999 28.580400999999998,-100.398385000000005 28.584883999999999,-100.403243426032972 28.586668145075244,-100.425819035320046 28.594958517689108,-100.429856 28.596440999999995,-100.431892715674053 28.597943579291371,-100.447320000000005 28.609324999999998,-100.448648000000006 28.616773999999999,-100.447280739633683 28.625703494601449,-100.445528999999993 28.637143999999996,-100.44560646842767 28.637394606891831,-100.447014715516048 28.641950223113035,-100.447091 28.642196999999999,-100.447325484276334 28.642184618041064,-100.447599559425257 28.642170145483281,-100.456522261830528 28.641698981546444,-100.462866000000005 28.641363999999999,-100.474494000000007 28.647071,-100.479445543783555 28.654922981332383,-100.479495071011698 28.655001519842354,-100.479635999999999 28.655225000000002,-100.481416494659797 28.655591917738484,-100.492493911747701 28.657874710783531,-100.493322226012125 28.658045406716248,-100.495863 28.658568999999996,-100.496129521434568 28.658770241190073,-100.500353999999987 28.661960000000004,-100.502122125123847 28.667202406240314,-100.505211969634487 28.676363647108229,-100.509438609439442 28.688895431533517,-100.510054999999994 28.690722999999995,-100.510127443340068 28.69126843161186,-100.510538898440004 28.694366309458967,-100.51077198772829 28.696121257064849,-100.511998000000006 28.705352,-100.511351260759739 28.706743032691019,-100.510646631791559 28.708258576930099,-100.509872363628347 28.709923903942272,-100.509406561254394 28.710925770365975,-100.508636802312012 28.712581398765199,-100.507069450532313 28.715952521820881,-100.506701000000007 28.716745000000003,-100.506745928327234 28.717920131927187,-100.506786973330165 28.718993692782757,-100.507152057645129 28.728542729239727,-100.507513721430456 28.738002299344281,-100.507590113222051 28.740000380261673,-100.507613000000006 28.740599,-100.507694735304739 28.740708529390524,-100.51442566685138 28.749728313832868,-100.519226000000003 28.756160999999999,-100.533017 28.763279999999998,-100.537772000000004 28.780775999999996,-100.534846642084489 28.786410367511117,-100.532431000000003 28.791062999999998,-100.535830000000004 28.805887999999999,-100.546431879116881 28.824270186264151,-100.546968759195195 28.825201061771438,-100.547323999999989 28.825817,-100.548186025546428 28.826178082695296,-100.553129999999982 28.828249,-100.561442999999997 28.829174000000002,-100.570509999999999 28.826317,-100.574698999999995 28.828786999999998,-100.576846000000003 28.836168000000004,-100.572991999999999 28.848463999999996,-100.580501999999996 28.856007999999999,-100.591040000000007 28.863054000000002,-100.598061272695219 28.874286065303028,-100.598877000000002 28.875590999999996,-100.602654 28.887660000000004,-100.602394435759351 28.893839359355621,-100.602053999999995 28.901944,-100.615584686670886 28.902906942475386,-100.627205999999987 28.903734,-100.631611000000007 28.902838999999997,-100.633502414453218 28.905240591668694,-100.640568000000002 28.914211999999999,-100.639169999999979 28.916288999999999,-100.638857000000002 28.927621999999996,-100.651511999999997 28.943431999999998,-100.64789859018552 28.954344193790252,-100.646992999999995 28.957078999999997,-100.646600907687997 28.967547400926616,-100.64647463428885 28.970918751315974,-100.645893999999998 28.986421,-100.647406325643686 28.99295674936236,-100.647835962928511 28.994813493392339,-100.648681241069511 28.998466493719445,-100.65094599999999 29.008254000000004,-100.653757999999996 29.015356,-100.656109999999998 29.017223999999999,-100.660207999999997 29.031497000000002,-100.663212 29.048041999999995,-100.662508000000003 29.058106999999996,-100.664064999999994 29.073205999999999,-100.666359117032755 29.07896154562156,-100.668483863047285 29.084292168447689,-100.674655999999999 29.099777000000003,-100.684472 29.110657,-100.692326999999992 29.115227999999995,-100.70996599999998 29.119684000000003,-100.727461999999989 29.129122999999996,-100.737795000000006 29.139078999999999,-100.739115999999996 29.141658,-100.737590999999995 29.147406999999998,-100.739681000000004 29.150486000000004,-100.746139999999997 29.154149000000004,-100.752330696165359 29.155516457617566,-100.759726 29.157149999999998,-100.76337082361762 29.160348915845475,-100.772648999999987 29.168492,-100.775904999999995 29.173344,-100.772154104961558 29.17809434863841,-100.766030999999998 29.185848999999997,-100.767059000000003 29.195287,-100.768348510582513 29.197581465531123,-100.775064591152173 29.209531592641572,-100.785521000000003 29.228136999999997,-100.791371999999996 29.225944999999999,-100.795681000000002 29.227729999999998,-100.79704599999998 29.235585999999998,-100.795234211471239 29.241421249558652,-100.795010188783237 29.242142762180318,-100.794911999999997 29.242459,-100.795310930062826 29.24310735172228,-100.797670999999994 29.246943000000002,-100.805332448258866 29.251327106905226,-100.815767091023289 29.257298117587734,-100.823532999999998 29.261742000000002,-100.834039999999987 29.261399999999998,-100.839016 29.263259,-100.841581161127962 29.265429071012271,-100.848663999999999 29.271420999999997,-100.856469000000004 29.275663999999999,-100.864659000000003 29.276076,-100.874739696506666 29.279181633366278,-100.876048999999995 29.279585,-100.876625364221198 29.280115401513385,-100.878513170701353 29.281852663087207,-100.878882999999988 29.282193000000003,-100.879105716359817 29.283377353454046,-100.880504361011205 29.290815018226784,-100.882051999999987 29.299044999999996,-100.886842 29.307848,-100.895590728097048 29.309871687341737,-100.904835000000006 29.31201,-100.906461302333199 29.313095095005444,-100.914770068080642 29.318638836799305,-100.916744062319239 29.319955917421627,-100.92203960930695 29.323489191321695,-100.922232587658954 29.323617949573855,-100.924041970395777 29.324825198761538,-100.926468967605715 29.326444530233299,-100.926628772437255 29.326551154580446,-100.926677999999981 29.326584,-100.92692137104487 29.32669794102517,-100.927819078352698 29.327118228044156,-100.92782883100196 29.32712279402223,-100.930446231588661 29.328348203997709,-100.940614999999994 29.333109,-100.941560773525751 29.336361493535293,-100.943196 29.341985,-100.945807189162338 29.344363370184055,-100.948971999999998 29.347245999999998,-100.95603875001359 29.347290187325033,-100.964324999999988 29.347342,-100.971743000000004 29.351370999999997,-100.972915999999998 29.354545000000005,-100.995606999999993 29.363403000000005,-101.004206999999994 29.364771999999999,-101.010614000000004 29.368669,-101.010768998319776 29.36895846820963,-101.014103165002794 29.375185214807839,-101.024016000000003 29.393697999999997,-101.036603999999997 29.406107999999996,-101.038600000000002 29.410713999999999,-101.037642000000005 29.414681000000002,-101.043363999999997 29.42988,-101.056956999999983 29.440773,-101.06011415724447 29.458454662113137,-101.060150999999991 29.458660999999999,-101.063843258270609 29.460131584976065,-101.087148999999997 29.469414,-101.103699000000006 29.470549999999999,-101.115253999999993 29.468458999999996,-101.130037999999985 29.47842,-101.137502999999995 29.473541999999998,-101.144336999999993 29.473246,-101.151876999999999 29.477004999999998,-101.163854997623304 29.493316894569897,-101.168923969306405 29.50021992913986,-101.171662999999995 29.503950000000003,-101.173821000000004 29.514566000000002,-101.192719999999994 29.520285,-101.227418999999998 29.522349999999996,-101.235274999999987 29.524854,-101.254895000000005 29.520341999999996,-101.260836999999981 29.529933,-101.261174999999994 29.536777,-101.252755240314642 29.553001111955531,-101.244355179006547 29.569187266927752,-101.24384013276574 29.574337712700849,-101.242022713082847 29.59251185083151,-101.251352546644355 29.604174135250076,-101.252152766968493 29.604494220898598,-101.259127443101093 29.607284069726152,-101.265347312053251 29.607284069726152,-101.274677145614746 29.602619152945408,-101.277624046978673 29.599940160672645,-101.283229510623855 29.594844301688571,-101.297224215766221 29.587069435365102,-101.30733154801338 29.587846934050759,-101.312894947857018 29.594028488101586,-101.314328915651188 29.595621785307589,-101.313192213312618 29.602947206633093,-101.31110792457288 29.616379301091623,-101.30733154801338 29.640715970810437,-101.311218981175116 29.64849082206727,-101.316661381574889 29.655488204771718,-101.325213716450733 29.657820655628775,-101.350093282659174 29.654710721152696,-101.353062961800887 29.655502634567405,-101.361755552011104 29.657820655628775,-101.364595571422868 29.66106639883844,-101.367197952410862 29.664040554714198,-101.371300910394638 29.676075888592084,-101.372874548462477 29.680691889931673,-101.378860251896057 29.698249939417508,-101.396947999999995 29.713947,-101.398362000000006 29.717000000000002,-101.396293999999997 29.727055,-101.397008999999997 29.733962999999999,-101.400635999999992 29.738078999999999,-101.410024000000007 29.741498,-101.415583999999996 29.746534,-101.415509877418046 29.750619769974676,-101.415402087456428 29.756561346443686,-101.424731921017937 29.758116313681725,-101.430388403484372 29.756500180308258,-101.441059122217254 29.75345141196761,-101.446501522617027 29.755006409338922,-101.451652003139955 29.758440048234313,-101.453498905321467 29.759671311053037,-101.455223999999987 29.771874,-101.467493655663716 29.779885945414083,-101.475268506920557 29.780663444099741,-101.503223000000006 29.764581999999997,-101.522695143280473 29.759671311053037,-101.526552276219391 29.761451532447605,-101.532802460460985 29.764336242900427,-101.53746737724174 29.782995910023434,-101.53804719015173 29.783865628452077,-101.546797210803248 29.796990645299058,-101.56156944476453 29.794658179375361,-101.572592853930203 29.778735448896484,-101.575564187573463 29.774443514881042,-101.582561562744587 29.771333610538232,-101.598573641854728 29.773657690388074,-101.603680999999995 29.774398999999999,-101.607256216824311 29.773863608191139,-101.625957999999997 29.771063000000002,-101.630319 29.768729,-101.632632680380155 29.763891873249722,-101.63512799999998 29.758675,-101.646417999999997 29.754303999999998,-101.652400999999983 29.758794999999996,-101.65328091488901 29.761368862201802,-101.654578 29.765162999999998,-101.662452999999985 29.77128,-101.689992000000004 29.771212999999996,-101.706636000000003 29.762736999999998,-101.714223999999987 29.767659999999999,-101.735201999999987 29.771591999999998,-101.754322999999999 29.777661999999999,-101.760919284561496 29.782457957985276,-101.763273999999981 29.784169999999996,-101.776796131253491 29.789191504347542,-101.777161000000007 29.789327,-101.777360180704861 29.789301830227139,-101.785668 29.788251999999996,-101.791002820423358 29.783037559970925,-101.796869557069002 29.782618516634159,-101.806507764952315 29.786389987871868,-101.809441149516488 29.790161459109573,-101.813855730843954 29.79253854440006,-101.814888826583982 29.793094827432377,-101.818909248247508 29.792167038125061,-101.830044431332681 29.789597381341238,-101.831231874027822 29.789323356194672,-101.852603555202364 29.801894932400803,-101.862241763085706 29.800218726571018,-101.866487373818487 29.79821962567333,-101.875399999999985 29.794022999999999,-101.878152615094365 29.794637055896249,-101.892739000000006 29.797891,-101.912406000000004 29.797849999999997,-101.917556726002999 29.792675767854249,-101.917942403066036 29.792482929945557,-101.922585359733716 29.790161459109573,-101.929709258872364 29.789323356194672,-101.932572380438657 29.791613852338052,-101.938090312383324 29.796028195755184,-101.946471365894325 29.797704401584976,-101.952535620779244 29.796990962273608,-101.953595265032959 29.796866298670082,-101.959462001678588 29.799380623656123,-101.965427194081556 29.806464275410743,-101.966166845299441 29.8073426094683,-101.970357372054934 29.81027599403247,-101.974547898810414 29.81027599403247,-101.982165144097308 29.804870201524977,-101.987538526473998 29.801056829485908,-101.993568005272067 29.802652866652032,-102.001318622543394 29.804704498914084,-102.001786318660763 29.804828300723614,-102.021918999999997 29.802490999999996,-102.032489182844799 29.803756293694118,-102.034758999999994 29.804027999999999,-102.039012999999997 29.802655,-102.041088000000002 29.799609999999998,-102.038411999999994 29.792831999999997,-102.039226999999997 29.790977000000002,-102.041308736499772 29.78984019520162,-102.048982832584102 29.785649487466547,-102.050044 29.785069999999997,-102.053123037129694 29.785312127485501,-102.073645999999982 29.786926,-102.076299925656656 29.790865308882584,-102.077348 29.792421,-102.084438999999989 29.794962000000002,-102.091420021879856 29.792967151942147,-102.091815999999994 29.792853999999995,-102.098789196918744 29.792718427915432,-102.115682000000007 29.792389999999997,-102.142325999999997 29.802854,-102.159600999999995 29.814355999999997,-102.161673999999991 29.819486999999999,-102.181894 29.846033999999996,-102.182859740836193 29.846584944255238,-102.18326563789924 29.846816503951921,-102.184058205433814 29.847268654791659,-102.186149999999998 29.848461999999998,-102.187393471220204 29.848699156882201,-102.188384798592551 29.848888224473839,-102.188671999999997 29.848942999999998,-102.189026115519184 29.848805138880103,-102.189342793483831 29.848681852617602,-102.205381000000003 29.842438,-102.216284162639099 29.842976962035557,-102.227553 29.843533999999995,-102.261388999999994 29.853283,-102.264041000000006 29.855964,-102.261776999999995 29.864001999999999,-102.264954000000003 29.867805999999998,-102.268816999999984 29.867990999999996,-102.276754999999994 29.862977999999998,-102.281249000000003 29.863116999999999,-102.297330999999986 29.875194,-102.301381000000006 29.877673999999995,-102.315388999999996 29.879919999999998,-102.320618999999994 29.878979999999995,-102.320667125014978 29.878900015386019,-102.320698585434869 29.878847727619664,-102.324634000000003 29.872306999999996,-102.333383999999995 29.868046,-102.341032999999996 29.869305000000004,-102.349861000000004 29.862316999999997,-102.361383773688715 29.849029038788231,-102.364542 29.845386999999995,-102.363642671554629 29.839963091609825,-102.362514000000004 29.833155999999995,-102.369522000000003 29.820395,-102.377253999999994 29.800163,-102.377312999999987 29.789971,-102.385270832882995 29.770348713937391,-102.386677616883858 29.766879890389689,-102.391739211722737 29.765814289574276,-102.392906191083 29.765568609270456,-102.402175111261812 29.766775086101941,-102.412062000000006 29.768061999999997,-102.433301 29.776608,-102.460890018677347 29.77909171043791,-102.468946430597143 29.779816991558327,-102.469957868267898 29.780012383523857,-102.481595292961757 29.782260529257879,-102.490330613701886 29.783948039559665,-102.492674483475767 29.783853017496881,-102.508312776666344 29.783219030534834,-102.508509848222559 29.783087649355906,-102.512686811979108 29.780303003853621,-102.512942156326147 29.774953626291172,-102.513380999999995 29.76576,-102.526400256170959 29.758693706517125,-102.535832205630967 29.753574449155192,-102.539417050278132 29.751628749336795,-102.545492105079163 29.750899740311965,-102.551081152293932 29.752357753652575,-102.556670813570321 29.757783010503054,-102.559343229460382 29.760376824671383,-102.565661280990938 29.761591836573395,-102.572255912443325 29.757095496286663,-102.57574472309652 29.754716761401177,-102.57635337725236 29.754301769870359,-102.585948674897452 29.751239442391949,-102.587774480184081 29.750656738873374,-102.597160000000002 29.751608,-102.612879000000007 29.748181999999996,-102.622534000000002 29.736632,-102.630150999999984 29.734314999999999,-102.64566499999998 29.733910000000002,-102.661251958261417 29.736122779697027,-102.66726872436665 29.739732837494621,-102.670971460158171 29.741954477821469,-102.677191937153026 29.738261067251376,-102.678467215476147 29.736427653943998,-102.6852530581628 29.72667193704833,-102.688163999999986 29.722486999999997,-102.690237999999979 29.707481999999999,-102.695507594622001 29.699754690880447,-102.698346999999984 29.695590999999997,-102.699316999999994 29.685029,-102.693466 29.676507,-102.697798916570122 29.672550546488289,-102.711337549653422 29.6601882100483,-102.724231000000003 29.648415000000004,-102.736947999999984 29.641537999999997,-102.742030999999997 29.632142000000002,-102.74048425929719 29.62775763619268,-102.738427999999999 29.621928999999998,-102.739991000000003 29.599041,-102.746201999999997 29.592875000000003,-102.757065999999995 29.597798999999998,-102.761810999999994 29.598396999999999,-102.768340999999992 29.594733999999999,-102.766929734823805 29.591197739636346,-102.762241000000003 29.579448999999997,-102.766124000000005 29.572347999999998,-102.768792219428661 29.572598581791439,-102.773961 29.573084,-102.776343296957975 29.562015327831393,-102.777530999999996 29.556497,-102.77572499999998 29.552188999999995,-102.771428999999998 29.548545999999998,-102.79216136048494 29.533953841063816,-102.807296321997939 29.523301326891541,-102.808565712504773 29.522407885546979,-102.808691999999979 29.522319000000003,-102.808681334358837 29.522097795383676,-102.808577631171161 29.519946998869006,-102.807327 29.494009000000002,-102.813953999999995 29.482805999999997,-102.814096473430837 29.482483316434472,-102.814383778328263 29.481832608662831,-102.822314986984821 29.463869465126457,-102.82537225240516 29.456945161410285,-102.827007089548758 29.453242470491304,-102.830969999999979 29.444267,-102.832538999999997 29.433109000000002,-102.830570753051859 29.427471931628293,-102.827354999999983 29.418261999999995,-102.825211066354328 29.40389180477127,-102.824564449740322 29.399557712155943,-102.831802092379931 29.389471209449322,-102.832669213065941 29.388262775214326,-102.84047188579207 29.377388836904565,-102.840778422425643 29.376961642203423,-102.841560439245441 29.370344567434586,-102.842457529677418 29.362753791491347,-102.843015380341285 29.358033509958585,-102.843020777220957 29.357987843989019,-102.861629999999991 29.351638999999995,-102.871857000000006 29.352092999999996,-102.876866000000007 29.354058999999996,-102.879534000000007 29.353326999999997,-102.883721999999992 29.348058999999999,-102.881857488401977 29.34363024944906,-102.879805000000005 29.338754999999999,-102.890489000000002 29.309498999999995,-102.88922161316745 29.299205074185686,-102.888328 29.291947,-102.891022000000007 29.287113000000002,-102.902604999999994 29.279440999999998,-102.90311226801488 29.27677066200776,-102.906295999999998 29.260010999999995,-102.903188999999983 29.254028999999999,-102.887901999999997 29.245611999999998,-102.881135 29.246022,-102.871347 29.241624999999999,-102.870795537867835 29.239589944231255,-102.86823682221636 29.230147538772215,-102.866845999999995 29.225014999999999,-102.878020000000006 29.214697999999999,-102.890063999999995 29.208813999999997,-102.899231 29.208863,-102.908656596973657 29.219194069767902,-102.908787000000004 29.219336999999996,-102.909098471667448 29.219296482603067,-102.910575587951939 29.219104333804097,-102.912131000000002 29.218902,-102.912650757516516 29.218481184275788,-102.915803535402844 29.215928573746115,-102.915865999999994 29.215877999999996,-102.915845750043147 29.215583596781208,-102.915608148145267 29.212129230727648,-102.915554 29.211341999999998,-102.915202931298523 29.21076702044931,-102.914525807203304 29.209658028088604,-102.912447999999998 29.206254999999999,-102.91453363655873 29.20019781620671,-102.917367531146525 29.191967513425833,-102.917805 29.190697,-102.922897000000006 29.192704085059273,-102.925481999999988 29.193722999999995,-102.932612000000006 29.194113000000005,-102.944911000000005 29.188819999999996,-102.947155999999993 29.180776999999999,-102.95089 29.176834999999997,-102.953474999999997 29.176307999999995,-102.977266 29.186226,-102.981742305424802 29.185103060319207,-102.989431999999994 29.183174,-102.98978258837333 29.182935350109393,-102.991725524817895 29.181612768970929,-102.994653 29.17962,-102.994906329461855 29.17910907354543,-102.99809599999999 29.172675999999996,-102.995688 29.161218999999999,-103.00243399999998 29.150260999999997,-103.0050672680876 29.149386797638936,-103.008362000000005 29.148292999999995,-103.010324999999995 29.137821999999996,-103.015028 29.125769999999996,-103.016945338084582 29.124525732477775,-103.024896087692937 29.119366048020158,-103.032982999999987 29.114118,-103.033302941039096 29.107355634443419,-103.034095953658579 29.105913798143234,-103.035682683422891 29.103028844591982,-103.04044215980575 29.099351067768175,-103.049126083320303 29.097714968852063,-103.055369601981923 29.096538655622457,-103.061557539334615 29.093936906572154,-103.06671291432167 29.091769303506382,-103.074407490743866 29.088534080562461,-103.076354546596249 29.085721668416742,-103.076667707631657 29.079576983004682,-103.076847 29.076059,-103.091926967746744 29.064237268591206,-103.100265999999991 29.057699999999997,-103.101359249603803 29.049403674773888,-103.102531654124817 29.040506667933872,-103.100975335951205 29.030701853789079,-103.100368259199087 29.026877266486249,-103.101607999999999 29.018122999999999,-103.107810999999998 29.013812,-103.117237999999986 29.000208999999998,-103.113922000000002 28.988546999999997,-103.115062910480361 28.985887850893185,-103.115327999999991 28.98527,-103.115773294260094 28.985147329619764,-103.126748000000006 28.982123999999995,-103.134930999999995 28.983525,-103.143274000000005 28.978073999999999,-103.156645999999995 28.972830999999999,-103.163865 28.972099,-103.165923000000006 28.974001999999999,-103.166234999999986 28.978836000000005,-103.174329720990258 28.980505274886987,-103.182663652045193 28.982223879127538,-103.194928465619142 28.984753100989199,-103.195705106971403 28.984913258196226,-103.207825367468075 28.987412670652219,-103.227338454203803 28.991436614861634,-103.227579101883322 28.991486240676846,-103.227800999999999 28.991532000000003,-103.228011662384262 28.991347921912006,-103.228737472224623 28.990713704806197,-103.239108999999985 28.981650999999996,-103.245121150470112 28.980239630911282,-103.2474464632202 28.980649978816817,-103.249155161185584 28.980951512720708,-103.25190330878641 28.984768118238364,-103.253285000000005 28.986686999999996,-103.26030800838916 28.989731411362609,-103.266003072061508 28.990206003834011,-103.270357000000004 28.988113999999996,-103.270725571428585 28.987466542857135,-103.27232562100086 28.984655789108508,-103.273357000000004 28.982844,-103.273647076585334 28.982817854078331,-103.281189929980513 28.982137982403092,-103.282424051550748 28.983865752282551,-103.284749352823042 28.987121173462914,-103.285935817906974 28.994002716014545,-103.289257951411443 28.999697788883793,-103.296614077237592 29.004443676810233,-103.302399476821606 29.006455988366771,-103.312987409437454 29.010138745081029,-103.315449022736544 29.011725838031147,-103.323993942362023 29.017235063099889,-103.331021803791103 29.021766184756,-103.332920159881368 29.026986669752301,-103.332783823258595 29.028827200289001,-103.332445567409962 29.033393619832523,-103.334818511373186 29.039800579109659,-103.341462759988346 29.041224342728523,-103.347869719265475 29.037427630547988,-103.350815999999995 29.028566999999999,-103.355428000000003 29.021529,-103.355590463621823 29.021464336016578,-103.361777791205157 29.019001647792766,-103.361998 29.018913999999999,-103.382125000000002 29.024248999999998,-103.386095607142025 29.025822707722725,-103.399799910010643 29.031254261761571,-103.402689272115182 29.032399429564627,-103.427474921518822 29.04222295692054,-103.427754276336316 29.042333676218103,-103.430481680804888 29.047455485683194,-103.434668000000002 29.055316999999995,-103.439550459717495 29.058547821156772,-103.449722032594721 29.065278554178825,-103.453029264571228 29.067467015663059,-103.457386392383299 29.068596640465525,-103.460381908910477 29.067681344107211,-103.463195887793432 29.066821517562918,-103.469166763983068 29.069242141692889,-103.471264639062966 29.073115142802621,-103.471299587628792 29.074897490538035,-103.471426016715213 29.08134526859719,-103.474814887995407 29.086670637304994,-103.484429000000006 29.094524,-103.49531945696836 29.1087608679228,-103.500928937954981 29.116094025764934,-103.503236 29.119109999999996,-103.506163032831353 29.119368513261239,-103.513192088151087 29.119989313955617,-103.524613000000002 29.120998,-103.524225442342612 29.124905426308125,-103.523383999999993 29.133389,-103.525026999999994 29.137353999999998,-103.539240927934515 29.144791265038371,-103.551909954693073 29.151420179312847,-103.558678999999984 29.154961999999998,-103.579462000000007 29.149964999999998,-103.592359999999999 29.150259999999999,-103.598960126757959 29.155019048637598,-103.606437999999997 29.160411,-103.607894091053709 29.162314354517299,-103.610539999999986 29.165772999999998,-103.624537921955991 29.163185608071569,-103.629433693714475 29.1622806680118,-103.638195234739996 29.160661174732635,-103.645634999999999 29.159286000000002,-103.653180000000006 29.162863999999995,-103.656807999999984 29.169098999999999,-103.660202999999996 29.170933999999999,-103.667724667668963 29.172878689431396,-103.669696386484915 29.173388467437,-103.688670000000002 29.178293999999998,-103.688830238367032 29.178273608722382,-103.690116124218548 29.178109972160996,-103.697314000000006 29.177194,-103.699305464408098 29.178139630948273,-103.713769999999997 29.185008,-103.724743000000004 29.191469999999999,-103.73193762439729 29.198544108660482,-103.742175000000003 29.20861,-103.750912464183997 29.219357091602017,-103.755265634411842 29.22471149629115,-103.75594348727293 29.225545256136954,-103.768569999999997 29.227360999999995,-103.777623396259372 29.232265264832392,-103.780085146052983 29.242351446713872,-103.780352362214714 29.243446273985068,-103.781659908552058 29.248803500057083,-103.789034484601103 29.257501704713096,-103.792700821322356 29.259284649416337,-103.795120675584712 29.260461427946989,-103.80876361213285 29.267096007175422,-103.816641821688407 29.27092719156084,-103.818617217853202 29.271599921312173,-103.838302999999982 29.278303999999999,-103.854966933859771 29.281484400071786,-103.856892999999999 29.281852,-103.880606 29.284961999999997,-103.896615144488038 29.284634799403065,-103.910231251371073 29.284356508561018,-103.916269383748329 29.284233099060927,-103.91710599999999 29.284215999999997,-103.91776286712728 29.284516760669142,-103.918698764585329 29.284945281345607,-103.918909999999997 29.285042,-103.918905327188597 29.285488562070029,-103.918900778480648 29.285923264066316,-103.918857000000003 29.290106999999995,-103.924975999999987 29.293913000000003,-103.943697999999983 29.294945999999996,-103.965795999999983 29.298586999999998,-103.975234999999998 29.296016999999999,-103.983459597310627 29.299165977024781,-103.998789342279238 29.305035323921498,-104.012357062242771 29.310230038851625,-104.018558084893087 29.312604243583909,-104.038281999999995 29.320155999999997,-104.047006656168747 29.325575022319434,-104.055595999999994 29.330909999999996,-104.056467149578211 29.334496091467582,-104.057243999999997 29.337694000000003,-104.068917843404819 29.342306667996301,-104.075923999999986 29.345075,-104.082149999999999 29.345922999999996,-104.091021999999995 29.353691999999995,-104.093326000000005 29.359926000000002,-104.098377999999983 29.366755999999999,-104.106466999999981 29.373127,-104.122882935723638 29.379859019095424,-104.125474999999994 29.380922000000002,-104.132831527553293 29.381873417846823,-104.136236243923818 29.382313748953422,-104.143691999999987 29.383277999999997,-104.1467332019064 29.385415391432094,-104.148888696362661 29.386930297552944,-104.151718842950046 29.388919356896473,-104.157422367906094 29.392927859373117,-104.166562999999996 29.399352,-104.180069999999986 29.412763999999999,-104.181273000000004 29.426265,-104.182051945448123 29.427144615030393,-104.195989999999995 29.442884000000003,-104.208194000000006 29.448201,-104.212529153241931 29.452438774515159,-104.213947876032222 29.456222068892099,-104.21370324326665 29.462011765001886,-104.213238514637069 29.473010445135856,-104.218538498245692 29.476600759818915,-104.220568643482977 29.477976020723915,-104.227547514371139 29.480496161448666,-104.229081071868791 29.481049944541308,-104.233824999999996 29.486544999999996,-104.233486999999997 29.492733999999995,-104.235847000000007 29.496744,-104.238313284768751 29.498023301020304,-104.246870092866089 29.50246185307569,-104.254473621536903 29.506405923975272,-104.260293266516271 29.50942466611497,-104.26168489846043 29.511073814728768,-104.264155000000002 29.514001,-104.271046277211582 29.51559593462645,-104.274575430964404 29.516412730896519,-104.293481117436073 29.520788310787555,-104.306646311930564 29.523835296697214,-104.308812834933008 29.524336722260216,-104.311570786550874 29.52540915148019,-104.318073989469781 29.527937921306467,-104.320711000000003 29.526326414398167,-104.326090351466348 29.523039031981277,-104.327483437129615 29.522187701603762,-104.334811000000002 29.519462999999998,-104.338113000000007 29.519967,-104.353150868059984 29.530471948300562,-104.369085650105362 29.541603450512167,-104.37074044290263 29.542759433043344,-104.371174999999994 29.543062999999997,-104.371454921502831 29.543072731712495,-104.371996954766473 29.543091575966443,-104.375901661123379 29.543227326450971,-104.381040999999996 29.543405999999997,-104.394588999999982 29.556087000000002,-104.394583075653415 29.556197720561212,-104.394577025204526 29.556310797858156,-104.394552364240909 29.55677168847231,-104.394503136758885 29.55769170460702,-104.394351 29.560534999999998,-104.39571704642303 29.563607040276512,-104.39636925661604 29.56507376640522,-104.397848504811165 29.56840038104859,-104.399550133070164 29.572227096202102,-104.399591 29.572319,-104.399981791506633 29.572551361916329,-104.452301000000006 29.60366,-104.466520000000003 29.609296,-104.483502 29.627740999999997,-104.486693164979016 29.629712817604439,-104.493658999999994 29.634016999999997,-104.503232654335022 29.63787621670291,-104.507568060311556 29.63962385355849,-104.51068846437596 29.64315687341222,-104.513969549435132 29.646871821353749,-104.51818442992635 29.651644041921735,-104.53325150001281 29.668703453669117,-104.535568725458901 29.671327089370656,-104.539761023554547 29.676073741438437,-104.540155514025756 29.678572204873163,-104.540559188867974 29.681128836544634,-104.537934834631798 29.684482179324355,-104.535770155740693 29.687248158943191,-104.536302269386866 29.690440851131939,-104.537991394981006 29.693268523024599,-104.544269904764263 29.703779029587054,-104.545505621253113 29.70584767433138,-104.552240999999995 29.717122999999997,-104.555600999999996 29.731220999999998,-104.554914970831931 29.738152096413199,-104.554660236582549 29.740725729903364,-104.557361904757329 29.745049367744027,-104.565950999999998 29.758794999999996,-104.565687999999994 29.770461999999998,-104.571279565966023 29.778773775962186,-104.586447318468245 29.801320404476364,-104.592472 29.810276000000002,-104.594023000000007 29.809220999999997,-104.599148999999997 29.811007,-104.610166000000007 29.819117999999996,-104.610205623651026 29.819231101342197,-104.610356932717465 29.819662996386217,-104.613081011852316 29.827438579869643,-104.615248982559379 29.833626813172685,-104.619039 29.844444999999997,-104.624350000000007 29.845221999999996,-104.629290740007292 29.852171499068138,-104.629713747950376 29.852766489555783,-104.630103000000005 29.853313999999997,-104.630111961493199 29.853664893019587,-104.630290851730521 29.860669455113747,-104.630338938536084 29.862552324858758,-104.630359999999996 29.863376999999996,-104.630588419131911 29.86393398222631,-104.633274999999998 29.870484999999999,-104.63616345635748 29.872800876528242,-104.645854762904364 29.880571071602066,-104.65678299999999 29.889332999999997,-104.658422170930251 29.891285606400047,-104.65864999999998 29.891556999999999,-104.658665881124946 29.891956296855856,-104.659041999999999 29.901413000000002,-104.661965712024596 29.903547518850328,-104.666224133352003 29.906656470935726,-104.672326999999996 29.911111999999996,-104.679772 29.924658999999998,-104.680850906343153 29.932111041680564,-104.684321999999995 29.956085999999999,-104.679660999999982 29.975271999999997,-104.680379178583593 29.977083,-104.685479 29.989943,-104.689640999999995 30.014949999999999,-104.693591999999995 30.019077000000003,-104.701242868742796 30.021046973658397,-104.702310999999995 30.021321999999998,-104.702447580064685 30.021555813412469,-104.7030116881661 30.022521518330599,-104.703997999999999 30.02421,-104.703882705803636 30.024660825787098,-104.703121214098445 30.027638426639932,-104.701101999999992 30.035533999999998,-104.706873999999999 30.050685,-104.706630611705322 30.051708605996314,-104.703831250551389 30.063481739403372,-104.703581999999997 30.06453,-104.699792220462342 30.065066336345112,-104.698848962238912 30.065199827927678,-104.698233000000002 30.065286999999998,-104.697787990647399 30.065651654776563,-104.69277799999999 30.069756999999996,-104.687313590037505 30.080921966773531,-104.685080632167896 30.08548438075637,-104.685002999999995 30.085643,-104.685554782105299 30.093963293324606,-104.685687 30.095957000000002,-104.686861171517634 30.098036494960315,-104.692093999999983 30.107303999999996,-104.693655813605488 30.119154117533654,-104.695366000000007 30.13213,-104.692122999999995 30.138662999999998,-104.690080458880587 30.149079251722458,-104.687506999999997 30.162202999999998,-104.687296000000003 30.179464000000003,-104.702787999999998 30.211735999999995,-104.707897632633845 30.218501061672534,-104.711235999999985 30.222920999999999,-104.713166 30.237956999999998,-104.722357186598074 30.248308653999679,-104.724410584274111 30.250621311025988,-104.72532436157617 30.251650460675243,-104.73347160041142 30.260826359409911,-104.733822000000004 30.261220999999999,-104.734059376092361 30.261231667834558,-104.737359999999995 30.261379999999996,-104.740448 30.259454000000002,-104.749663999999996 30.26126,-104.751566999999994 30.263643999999999,-104.754655151309422 30.272796681105522,-104.757893999999993 30.282395999999999,-104.761634 30.301147999999998,-104.779356000000007 30.313188,-104.790279572675416 30.323632238875831,-104.797291 30.330335999999999,-104.809794338457337 30.334925849121163,-104.810755485390246 30.338091979227556,-104.81211787963197 30.342579864771171,-104.813478341684558 30.347061385458392,-104.814379749150064 30.356375955470707,-104.814778573671205 30.360497153782266,-104.817595751374526 30.365914799658352,-104.824313633436745 30.370465624210016,-104.837492999999995 30.373909,-104.849824017938076 30.383147747051474,-104.859521 30.390413000000002,-104.857439999999997 30.408957,-104.852419999999995 30.418792,-104.861074000000002 30.428896999999996,-104.86474141169117 30.441297336779865,-104.865463293164552 30.443738179024677,-104.868454614768496 30.453852504447951,-104.869872 30.458644999999997,-104.86871099999999 30.463229999999996,-104.866118999999983 30.46479,-104.866094000000004 30.467379999999999,-104.870137228360662 30.483875070981508,-104.873288503237063 30.496731258693877,-104.873335488188886 30.496922942181985,-104.876786999999979 30.511004000000003,-104.878566789651714 30.514416830422793,-104.880108146577356 30.517372454871531,-104.88208573587417 30.521164575423189,-104.889375999999999 30.535143999999995,-104.890392881954469 30.540947215529823,-104.892228000000003 30.551419999999997,-104.895440150997459 30.560421421221292,-104.899000999999998 30.570399999999996,-104.909330873116318 30.584188648619556,-104.909747767935556 30.584745133303247,-104.918689620637082 30.596681007395873,-104.924796 30.604831999999998,-104.927016167130404 30.604700501077968,-104.934922481779466 30.604232215677584,-104.939873000000006 30.603939,-104.953391370086464 30.606003357240429,-104.967167000000003 30.608106999999997,-104.971627504383378 30.61006529240159,-104.972071 30.61026,-104.972794851616513 30.611297344530712,-104.980135850742045 30.621817657146149,-104.980290999999994 30.622039999999995,-104.982191641583043 30.62882153037463,-104.983981 30.635206,-104.985513855292751 30.652294791670293,-104.9863 30.661059000000002,-105.001239999999996 30.672583000000003,-105.002056999999994 30.680971999999997,-105.006614566555172 30.685839873047019,-105.006800999999996 30.686039,-105.007528432885024 30.6859080282745,-105.007959930235828 30.685830338698263,-105.020141999999993 30.683637,-105.035888798004834 30.686138071331488,-105.042930223005172 30.687256464175281,-105.044973600167665 30.685364445024991,-105.049769587265445 30.680923708581364,-105.049884734287517 30.6808170907847,-105.050688284649809 30.681171184306308,-105.054688384336032 30.682933873306403,-105.062333999999993 30.686302999999995,-105.062477471553692 30.692159292631892,-105.062625999999995 30.698222,-105.084504902225902 30.710918832086001,-105.098281999999998 30.718914000000002,-105.108075999999997 30.730049999999995,-105.110705999999993 30.737749999999995,-105.110681999999983 30.743366000000002,-105.113815999999986 30.746001,-105.119547104826722 30.748125675649064,-105.123265000000004 30.749504000000005,-105.140207000000004 30.752502,-105.152361999999982 30.751451999999997,-105.157640215066564 30.754007791997694,-105.16015278062757 30.757058756266805,-105.160271207191187 30.758203550015399,-105.161229588477383 30.767467931854636,-105.164076390339474 30.771453450048199,-105.164818961888187 30.77249304906519,-105.164868027003308 30.772491740665838,-105.170370203038615 30.772345016388588,-105.178279098267282 30.772134113115257,-105.183436 30.776644999999995,-105.185930999999997 30.784391999999997,-105.195143999999999 30.792138,-105.195988495740664 30.791702299374609,-105.203522176185984 30.787815448176353,-105.206160999999994 30.786453999999996,-105.212916518294108 30.785414778041517,-105.215967484302155 30.786491589369188,-105.216685356202021 30.789542555377231,-105.215888956387687 30.792967070566242,-105.214890669496626 30.797259699168034,-105.218659510882389 30.801566944478708,-105.222008841883465 30.801829013843189,-105.231580057313238 30.802577916338681,-105.238364256021057 30.803108747911697,-105.249792715464977 30.799033957074698,-105.255416052233826 30.797028969328842,-105.261224946310648 30.798054073736733,-105.261360733612406 30.798078036329223,-105.27276013440985 30.808707209360072,-105.27887297001547 30.814407016614517,-105.283004544196217 30.818259431108679,-105.287237620233441 30.822206489243744,-105.289317685342255 30.822206489243744,-105.295630129130572 30.822206489243744,-105.300778681061615 30.818848737795758,-105.303672944509898 30.816961174571279,-105.314862960890409 30.816961174571279,-105.316949659843416 30.82296045428,-105.31766045482081 30.825003996727105,-105.320108268786385 30.827451797139727,-105.322675464925993 30.828439452154051,-105.330102631610075 30.831296841312803,-105.347695000000002 30.838065,-105.353219571709047 30.842032277683753,-105.358103536812379 30.84553952616983,-105.359771122039604 30.846737044096301,-105.360672052753856 30.84738401593513,-105.36720323988537 30.847875849249167,-105.377416999999994 30.848644999999998,-105.387780492422849 30.851314552204784,-105.394242074789418 30.852979003795937,-105.396689881978517 30.855426817761515,-105.396237319899697 30.858492407966825,-105.394628539050657 30.86939005724841,-105.394248999999988 30.871960999999999,-105.395681745186749 30.87649980844607,-105.399608999999998 30.888940999999996,-105.399828021807267 30.889112280223049,-105.402824820246408 30.891455847338634,-105.413505 30.899808,-105.430088999999995 30.905791999999998,-105.44547819369545 30.915748838601054,-105.448693870984556 30.917829388134351,-105.452149246331331 30.920065022782566,-105.4597280766598 30.924968540917344,-105.469954295993247 30.931584924947412,-105.472488639470896 30.933224650164071,-105.476269681741059 30.935670991952524,-105.488027000000002 30.943277999999999,-105.495516502166126 30.9493992090351,-105.4968561000139 30.950494069316512,-105.497422439936116 30.953962910943051,-105.497963910074574 30.957279424722472,-105.502256687477072 30.962680017552614,-105.507558525965123 30.966493977230062,-105.533087999999992 30.984859,-105.541468808393844 30.984769556162778,-105.543675999999991 30.984745999999998,-105.557430349577899 30.990228688381027,-105.570063935625512 31.008532833135739,-105.575218046011173 31.016000355201566,-105.578084306850855 31.020153131231776,-105.578407858220658 31.020621907958049,-105.57911399999999 31.021644999999999,-105.580554486932016 31.024917232759986,-105.581339666024604 31.026700857930102,-105.581404000000006 31.026847000000004,-105.581361569643192 31.027041810483581,-105.581235244876609 31.027621805343596,-105.579823718925667 31.034102543987302,-105.579541999999989 31.035395999999995,-105.579765234089464 31.036249085539566,-105.579847333127134 31.036562825712579,-105.585323000000002 31.057487999999996,-105.592709163135751 31.0626132919136,-105.595921000000004 31.064841999999999,-105.598772999999994 31.074925999999998,-105.60333 31.082624999999997,-105.627348999999995 31.098545,-105.641890000000004 31.098321999999996,-105.646730999999988 31.113907999999999,-105.647031366805422 31.114192798578223,-105.648833999999994 31.115902000000002,-105.662869191777489 31.12063916934996,-105.673930643060629 31.124372639388369,-105.709491 31.136374999999997,-105.717005999999998 31.141438,-105.717653520299876 31.143411480377267,-105.719539999999995 31.149160999999996,-105.742677999999998 31.164897,-105.763531 31.164121000000005,-105.773256999999987 31.166896999999999,-105.774148788612138 31.168976038235485,-105.780021000000005 31.182666,-105.779878030009812 31.18682806893737,-105.779724999999999 31.191282999999995,-105.782894999999996 31.197562999999999,-105.790659746923424 31.200723362140888,-105.794386000000003 31.20224,-105.818835000000007 31.230680999999997,-105.825806058218902 31.23733997673531,-105.835722000000004 31.246811999999995,-105.851073632158958 31.265902599748792,-105.86604427072389 31.284519412988434,-105.869353000000004 31.288633999999998,-105.869862116496506 31.288859823963843,-105.876014999999981 31.291588999999995,-105.890871999999987 31.290013999999996,-105.895034999999993 31.290977999999999,-105.903460999999993 31.306768999999999,-105.908770999999987 31.312773999999997,-105.914613899052299 31.312859252963214,-105.93196564998388 31.313112430054005,-105.932552999999999 31.313120999999995,-105.933375187723101 31.313903465142818,-105.938451999999984 31.318735,-105.948091000000005 31.340069,-105.945903 31.352809999999998,-105.953942999999995 31.364749,-105.970101 31.365936999999995,-105.997579969562565 31.386863626037869,-106.00418474278807 31.391893495117941,-106.004925999999998 31.392457999999998,-106.006143777923754 31.392558937255828,-106.022866323827969 31.393945009265412,-106.080091217088636 31.398688175961098,-106.080258 31.398702,-106.080335505244278 31.398768097394733,-106.096409750603954 31.412476405141465,-106.100621535494 31.416068265421309,-106.102641400977276 31.417790830744398,-106.10264993125142 31.41779810546371,-106.106876999999997 31.421403000000005,-106.112168999999994 31.423577999999996,-106.132782000000006 31.425367000000005,-106.143572676566535 31.431101721097118,-106.158218000000005 31.438885000000003,-106.175305198785026 31.455910533348611,-106.175674999999998 31.456278999999995,-106.17677981450808 31.456634312625521,-106.182946895641223 31.45861766980741,-106.20560859826729 31.465905761156737,-106.205826999999999 31.465975999999998,-106.205998876707866 31.466165148890862,-106.212686244283063 31.473524541419071,-106.218538531147885 31.479964934554566,-106.218843000000007 31.480299999999996,-106.218893022078106 31.480498686193428,-106.223908999999992 31.500422,-106.236804000000006 31.513376,-106.242649095206133 31.530650094003715,-106.245874455325477 31.540182047193959,-106.246202999999994 31.541153,-106.246406806009631 31.541315626597875,-106.254779999999997 31.547997000000002,-106.280345588488331 31.561810530102129,-106.280548572587122 31.561920205925162,-106.280811 31.562061999999997,-106.287785 31.584444999999999,-106.292254713772053 31.594651759250389,-106.295141086978958 31.601242900860864,-106.303535999999994 31.620412999999996,-106.308594276522342 31.627497440426588,-106.330970256390501 31.658836434185069,-106.33473699999999 31.664111999999999,-106.338265602146336 31.671883697950737,-106.346992532059133 31.691104641686092,-106.349537999999995 31.696711,-106.357472918704602 31.702103016258707,-106.368303742040567 31.709462886938788,-106.370138999999995 31.710709999999999,-106.373839000000004 31.714809999999996,-106.378039 31.72831,-106.381039 31.732109999999999,-106.38595139194058 31.734759025425479,-106.394642915450532 31.739445961452269,-106.404086535473255 31.744538468290354,-106.417940000000002 31.752009,-106.421739999999616 31.752623660686648,-106.431540999999996 31.754208999999996,-106.434644983693715 31.755853956158482,-106.444263765046571 31.76095142933643,-106.451540999999992 31.764807999999999,-106.467641999999998 31.759607999999997,-106.470742 31.753508,-106.472156160715315 31.752506597443457,-106.47367184987327 31.751433300058491,-106.475016438009845 31.750481163584279,-106.475542000000004 31.750108999999998,-106.48261401078824 31.748321568701869,-106.484641999999994 31.747809000000004,-106.486162292248409 31.747994847970777,-106.488078402545341 31.748229082678503,-106.489542 31.748407999999998,-106.507341999999994 31.761208,-106.509102011460428 31.762827435120251,-106.511609062807707 31.765134242258316,-106.523643000000007 31.776206999999996,-106.528643000000002 31.781807,-106.528542999999999 31.783906999999996,-106.528542999999999 31.784407000000002,-106.527996999999999 31.786944999999999,-106.527623000000006 31.789119000000003,-106.527737999999985 31.789760999999995,-106.527942999999993 31.790507000000002,-106.530514999999994 31.792103,-106.532480000000007 31.791913999999998,-106.533 31.791829,-106.533043000000006 31.791906999999995,-106.534743000000006 31.796106999999999,-106.535154000000006 31.797088999999996,-106.535342999999997 31.797507,-106.535842999999986 31.798607,-106.542096999999998 31.802145999999997,-106.542143999999993 31.802106999999996,-106.544713999999999 31.804286999999999,-106.545344 31.805007,-106.546561898485905 31.806561850400339,-106.546615562760394 31.806630361790774,-106.547143999999989 31.807304999999996,-106.551861034152338 31.808599471053657,-106.558443999999994 31.810406,-106.560680020141419 31.810752754512048,-106.560847305685968 31.810778696593822,-106.562944999999999 31.811104,-106.56344399999999 31.812605999999995,-106.566844000000003 31.813305999999997,-106.569123704016391 31.811582321353455,-106.570943999999997 31.810205999999997,-106.577243999999993 31.810406,-106.581344 31.813905999999996,-106.582144 31.815505999999999,-106.588044999999994 31.822105999999998,-106.589044999999984 31.822705999999997,-106.593826000000007 31.824901,-106.602727000000002 31.825023999999996,-106.605266999999998 31.827911999999998,-106.603310537982878 31.834798487166189,-106.601945 31.839604999999999,-106.60204499999999 31.844404999999998,-106.605244999999982 31.845904999999998,-106.605845000000002 31.846304999999997,-106.614637000000002 31.846489999999996,-106.621857000000006 31.852854,-106.625763000000006 31.856276,-106.627808000000002 31.860592999999998,-106.629708357956787 31.861913746439043,-106.635925999999998 31.866235,-106.635879999999986 31.871514,-106.634872999999999 31.874477999999996,-106.630798999999996 31.879696999999997,-106.629271361585637 31.8835303997664,-106.629197000000005 31.883717000000004,-106.629948941610351 31.885072003811555,-106.630443527558498 31.88596325099838,-106.630530381920593 31.886119763139838,-106.630691999999982 31.886410999999999,-106.633926999999986 31.889183999999997,-106.635073463799642 31.889856364267651,-106.636317332120683 31.890585853164694,-106.638154 31.891662999999998,-106.638364165758659 31.89171923904625,-106.642899999999983 31.892932999999999,-106.645296000000002 31.894859,-106.645645999999999 31.895648999999995,-106.645478999999995 31.898669999999999,-106.640839999999997 31.904598,-106.63512839833713 31.908732779117901,-106.633668 31.90979,-106.633408736085542 31.909871832166754,-106.625946999999996 31.912227,-106.62344499999999 31.914034,-106.618336531290581 31.916262323146238,-106.614677480394235 31.917858407661853,-106.614345999999998 31.918002999999995,-106.611846 31.920003,-106.616063629645311 31.921863544491501,-106.623932999999994 31.925334999999997,-106.624022586877501 31.92530240401349,-106.628663000000003 31.923614,-106.629746999999995 31.926570000000002,-106.625321999999983 31.930053000000004,-106.622529 31.934863000000004,-106.622117000000003 31.936620999999999,-106.622377 31.940863,-106.623659000000004 31.945509999999995,-106.616135999999983 31.948439,-106.614701999999994 31.956,-106.617707999999993 31.956008,-106.622819000000007 31.952891,-106.625123000000002 31.954530999999999,-106.625534999999985 31.957475999999996,-106.624298999999993 31.961054,-106.620453999999981 31.963402999999996,-106.619370999999987 31.964777000000005,-106.618745000000004 31.966954999999995,-106.619568999999998 31.971578,-106.621872999999994 31.972933,-106.623215999999999 31.972909999999999,-106.626465999999994 31.97069,-106.630114000000006 31.971257999999999,-106.638186000000005 31.976819999999996,-106.639528999999996 31.980347999999996,-106.63649199999999 31.985719,-106.631181999999995 31.989809,-106.629494617643616 31.990072722748106,-106.628337072326531 31.990253636712819,-106.62822051159516 31.990271854111079,-106.626910882874782 31.990476537349483,-106.623567999999992 31.990998999999999,-106.619448000000006 31.994733,-106.618486000000004 32.000494999999994,-106.599096000000003 32.000731000000002,-106.598639000000006 32.000753999999993,-106.595332999999997 32.000777999999997,-106.587971999999979 32.000748999999999,-106.582805114232855 32.000751357586125,-106.566056000000003 32.000759000000002,-106.565141999999994 32.000736000000003,-106.564298514026802 32.00073927393025,-106.562131862706067 32.000747683631808,-106.55942760630407 32.000758180008894,-106.517043115844388 32.000922692365819,-106.411074999999983 32.001334,-106.409326934223301 32.001349629127162,-106.409108574114072 32.001351581443814,-106.394297999999992 32.001483999999998,-106.376861000000005 32.001171999999997,-106.32356972407176 32.001457096670784,-106.313306999999995 32.001511999999998,-106.205915000000005 32.001761999999999,-106.200699 32.001784999999998,-106.18183999999998 32.002049999999997,-106.125534000000002 32.002532999999993,-106.05045734599986 32.002412317859424,-105.998002999999997 32.002327999999999,-105.900599999999997 32.002099999999992,-105.886159000000006 32.001969999999993,-105.854061000000002 32.00235,-105.750527000000005 32.002206,-105.731362000000004 32.001564000000002,-105.563520259526442 32.001015604709174,-105.429281000000003 32.000577,-105.428582000000006 32.000599999999999,-105.427048999999997 32.000638000000002,-105.390395999999981 32.000607000000002,-105.340142768272344 32.000583616714373,-105.200871148394683 32.000518812363367,-105.153993999999997 32.000497000000003,-105.150310000000005 32.000497000000003,-105.14824 32.000484999999998,-105.132915999999994 32.000518,-105.131377 32.000523999999999,-105.118039999999993 32.000484999999998,-105.078604999999996 32.000532999999997,-105.077045999999996 32.000578999999995,-104.918272000000002 32.000495999999991,-104.643525999999994 32.000442999999997,-104.640917999999999 32.000396000000002,-104.531936999999999 32.000311000000004,-104.531756 32.000117000000003,-104.024520999999993 32.000010000000003,-103.980179000000007 32.000124999999997,-103.875476000000006 32.000554,-103.748317 32.000197999999997,-103.72373965094468 32.000208021677786,-103.713395184678689 32.000212239744897,-103.713395184670219 32.000212239744904,-103.713395184654971 32.000212239744911,-103.713395184639609 32.000212239744918,-103.60161412595366 32.000257819670985,-103.326500999999993 32.00036999999999,-103.278520999999998 32.000419,-103.270382999999995 32.000326,-103.267707999999999 32.000323999999992,-103.267633000000004 32.000475000000002,-103.215641000000005 32.000512999999998,-103.133028835827503 32.000473953106116,-103.088697999999994 32.000452999999993,-103.085875999999985 32.000464999999998,-103.064422999999991 32.000518,-103.064344000000006 32.087051000000002,-103.064347999999995 32.123041,-103.064421999999993 32.145006000000002,-103.064695999999998 32.522193,-103.064761000000004 32.587983,-103.064787999999993 32.600397,-103.064761000000004 32.601863000000002,-103.064814999999996 32.624536999999997,-103.064633 32.646419999999992,-103.064864 32.682647000000003,-103.064797999999996 32.690761000000002,-103.064798999999994 32.708694,-103.064826999999994 32.726627999999998,-103.064807000000002 32.777302999999996,-103.064698000000007 32.783602000000002,-103.064711000000003 32.784593,-103.064699000000005 32.827531,-103.064672000000002 32.828470000000003,-103.064888999999994 32.849359,-103.064915999999982 32.857259999999997,-103.064807000000002 32.857695999999997,-103.064862000000005 32.868346000000003,-103.064700999999985 32.879354999999997,-103.064569000000006 32.900013999999999,-103.064656999999997 32.959097,-103.064678999999998 32.964373000000002,-103.064625000000007 32.999898999999999,-103.064452000000003 33.010289999999998,-103.06398 33.038693000000002,-103.063904999999991 33.042054999999998,-103.063382198608849 33.066417104805645,-103.0628188509327 33.092668632365545,-103.062136190569035 33.12448003074244,-103.060102999999984 33.219225000000002,-103.059719999999999 33.256262,-103.059241999999998 33.260370999999992,-103.057856 33.315233999999997,-103.057486999999995 33.32947699999999,-103.056655000000006 33.388437999999994,-103.052609999999987 33.570599,-103.051664000000002 33.629489,-103.051362999999995 33.64195,-103.051535 33.650486999999998,-103.051086999999981 33.658186,-103.050532000000004 33.672407999999997,-103.050147999999993 33.701971,-103.049608000000006 33.737766,-103.049096000000006 33.746270000000003,-103.047346000000005 33.824674999999999,-103.046907000000004 33.850299999999997,-103.045643999999996 33.901536999999998,-103.045698000000002 33.90629899999999,-103.044893000000002 33.945616999999999,-103.043949999999981 33.974629,-103.043616999999998 34.003633,-103.043531000000002 34.018014,-103.043554999999984 34.032713999999991,-103.043745999999999 34.037294000000003,-103.043771000000007 34.041538000000003,-103.043720999999991 34.042319999999997,-103.043767000000003 34.043544999999995,-103.043744000000004 34.049985999999997,-103.04368599999998 34.063077999999997,-103.043515999999983 34.079382000000003,-103.043569000000005 34.087947,-103.043571175003294 34.092846731402311,-103.043572866326429 34.096656853966635,-103.04358003846437 34.112813863799865,-103.043644 34.256903,-103.043718999999982 34.289440999999997,-103.043935999999988 34.302584999999993,-103.043978999999979 34.312763999999994,-103.043947553639484 34.376410480771497,-103.043947499824213 34.37651940122479,-103.043946000000005 34.379555000000003,-103.043943999999982 34.37966,-103.043919000000002 34.380915999999992,-103.043693000000005 34.383578,-103.043629999999993 34.384689999999999,-103.043614000000005 34.384968999999998,-103.043612999999993 34.388679000000003,-103.043612999999993 34.390442,-103.043606047260084 34.391254973944719,-103.043584999999993 34.393715999999998,-103.043610999999999 34.397105000000003,-103.043582999999998 34.400677999999999,-103.043537999999998 34.405462999999997,-103.043582 34.455657000000002,-103.043587999999986 34.459662000000002,-103.043588999999997 34.459774000000003,-103.043593999999985 34.46266,-103.043434927764125 34.510540742996007,-103.043071999999981 34.619782,-103.043277851519235 34.65183038816317,-103.0432796163159 34.65210514391012,-103.043285999999995 34.653098999999997,-103.042827000000003 34.671187999999994,-103.042768999999993 34.747360999999998,-103.042770000000004 34.792223999999997,-103.042781000000005 34.850242999999999,-103.042520999999979 34.899546,-103.0425974544018 35.032467348285799,-103.042641999999987 35.109912999999999,-103.043261 35.125058000000003,-103.042519999999996 35.135596,-103.042599999999993 35.142766000000002,-103.042710999999997 35.144734999999997,-103.042568000000003 35.159317999999999,-103.042394999999999 35.178573,-103.042338999999984 35.181922,-103.042366 35.182786,-103.042377000000002 35.183149,-103.042496999999997 35.211862000000004,-103.042775000000006 35.241236999999998,-103.042366 35.250056,-103.041554000000005 35.622487,-103.041484634909168 35.651235429903174,-103.041145999999998 35.791583000000003,-103.041916999999998 35.796441000000002,-103.041715999999994 35.814072000000003,-103.042186 35.825216999999995,-103.04130499999998 35.837693999999999,-103.040823999999986 36.055230999999992,-103.041387523024824 36.229129564686382,-103.041674 36.317534000000002,-103.041745000000006 36.318266999999999,-103.041923999999995 36.500439,-103.00243399999998 36.500397)),((-96.818513748151517 28.172441936006489,-96.816443421354066 28.174808025412563,-96.791958210781445 28.188687337716829,-96.733036581469989 28.190913261798631,-96.70383764358462 28.198245729538105,-96.697421731775194 28.2029594609741,-96.702659211994316 28.211208487181011,-96.703313894801497 28.216445964862743,-96.686815839850283 28.218410020896432,-96.662461568376486 28.227313732447904,-96.66062845144161 28.228884976259902,-96.663116248646261 28.233205895474203,-96.651855673914184 28.251275190431315,-96.607991796426646 28.277069769155677,-96.608122730450688 28.280081317680857,-96.611527096272326 28.281390688369981,-96.610479598706064 28.283092866206033,-96.592934048725994 28.296972182316367,-96.581018783574592 28.302209665072866,-96.553260151988255 28.302340591484768,-96.546975176740276 28.305614018207578,-96.542130508742858 28.315958034472228,-96.528905880514458 28.322504882843088,-96.476269225261575 28.330753906512612,-96.45099839278295 28.337038879223222,-96.434107525610045 28.344764159184386,-96.418918843885365 28.35484630740093,-96.415252604940861 28.362833452872817,-96.417216660974546 28.367154372087118,-96.412895739222876 28.36951123780511,-96.403206408302779 28.371475291301415,-96.401242352269094 28.366892498964241,-96.400558825492723 28.362187299887704,-96.398667286465624 28.349166496619617,-96.397846 28.343512999999998,-96.413700000000006 28.327342999999999,-96.439098999999999 28.319051999999999,-96.495600517783487 28.293964130304811,-96.547774000000004 28.270797999999999,-96.587113635820756 28.248878526668094,-96.611036668198281 28.235548960715661,-96.621533999999983 28.229699999999998,-96.694665999999998 28.18212,-96.758140999999995 28.136872999999998,-96.830820125734775 28.079724674840076,-96.849624000000006 28.064938999999999,-96.854049189790473 28.060788472935577,-96.855594496383262 28.059339080448503,-96.859762278796424 28.055429983997605,-96.896530613737951 28.020943786452513,-96.898080497387397 28.019490100997579,-96.929052999999996 27.990439999999996,-96.96699599999998 27.950531000000002,-97.001440999999986 27.911442,-97.031660000000002 27.869974999999997,-97.041798999999997 27.852925999999997,-97.045408776308051 27.837452569961062,-97.045409609838757 27.837448997003069,-97.04598 27.835004,-97.050599498412936 27.830109781194331,-97.058265753683145 27.821987615677948,-97.076304165860961 27.802876463727326,-97.079565315161531 27.799421374709375,-97.083535350812468 27.795215242050556,-97.085211615730273 27.793439290085495,-97.085394999999991 27.793244999999999,-97.11422230692618 27.755303327915222,-97.116276999999997 27.752599,-97.117304906633777 27.751048809529347,-97.118830196202964 27.748748513687826,-97.139140047561696 27.718119138409879,-97.139351757288111 27.717799858049549,-97.143807202733072 27.711080581371732,-97.165547551982726 27.678293865995041,-97.166583141799606 27.676732088482499,-97.166681999999994 27.676583,-97.184850261879149 27.644709535797791,-97.192144670654784 27.631912600211269,-97.198729900630283 27.620359811436909,-97.201865999999995 27.614857999999998,-97.211651066704889 27.596044174137351,-97.213608899397855 27.592279833590187,-97.221943360361436 27.576255098965802,-97.265194083077162 27.493096589152017,-97.265746568141566 27.492034321708481,-97.276090999999994 27.472145,-97.304469999999995 27.407734,-97.326522999999995 27.347611999999998,-97.347445832595042 27.277936119324231,-97.350397999999998 27.268104999999998,-97.363400999999996 27.210366,-97.370941000000002 27.161165999999998,-97.377001000000007 27.101020999999999,-97.379130000000004 27.047996,-97.378361999999996 26.992877,-97.370730999999992 26.909706,-97.365301177044699 26.875333999999995,-97.365282052674758 26.875212938438843,-97.364726000000005 26.871692999999997,-97.363633430415348 26.866515420001111,-97.352028350385282 26.811520085064032,-97.35141299999998 26.808603999999999,-97.350529648372714 26.805138580575584,-97.333027999999999 26.736478999999996,-97.304204860681779 26.646364129642233,-97.300690000000003 26.635375,-97.297812715808362 26.627503004299889,-97.297022484076606 26.625340999999999,-97.287871455917369 26.600304594305239,-97.275119000000004 26.565415000000002,-97.269391999999982 26.554046,-97.269132970349304 26.553256905349773,-97.257954534248029 26.519203490608863,-97.229844 26.433568999999999,-97.223724090442104 26.411478908273114,-97.206682644704898 26.34996703527348,-97.194643999999997 26.306512999999999,-97.185844000000003 26.267102999999995,-97.177979856301576 26.220346386353309,-97.177168840972797 26.215524458900923,-97.173264999999986 26.192314,-97.170387765328073 26.167037808112223,-97.169872392484734 26.162510314053797,-97.167099005951158 26.138146416702778,-97.161470999999992 26.088705,-97.158662630175101 26.080176913346069,-97.154270970414501 26.066840900880429,-97.161462285840642 26.067639941946975,-97.169842256221145 26.077853024187579,-97.171781452365479 26.102521767945923,-97.179531587141199 26.146202099560895,-97.178745972847352 26.177103221942961,-97.183983445454302 26.214289306886101,-97.194458400817808 26.271639686993655,-97.214884565299002 26.353606215503973,-97.226930759399721 26.385554824668418,-97.240286324189555 26.405980989149626,-97.240845398636537 26.411470089808617,-97.243166933615896 26.434263367616055,-97.247618791929028 26.456260775909261,-97.254165635225121 26.471187589585856,-97.262545605605609 26.482971915638458,-97.27642492679071 26.521729238684483,-97.292399243108349 26.528014213932472,-97.310730412457033 26.556558470596535,-97.308111681228326 26.5712234060755,-97.308635417324538 26.576722756880109,-97.317015387705027 26.597672667607057,-97.318434072834165 26.60022630157264,-97.324871601690262 26.611813856840271,-97.338489044677715 26.647428701777493,-97.33639404954522 26.666021744249065,-97.345821512417203 26.700589103038251,-97.363105189274393 26.710540307081217,-97.370437657013895 26.723895871871047,-97.370961403259614 26.736203954318924,-97.367557047587525 26.740393934434408,-97.364152671616353 26.758986971196869,-97.364646278833362 26.767121661774897,-97.368866408127118 26.774699404876429,-97.370437646864346 26.781508126370166,-97.368342661881371 26.795649318140761,-97.373056398392137 26.808481136684847,-97.387459455673451 26.820789208983193,-97.383531343606066 26.875520854055946,-97.385626348888096 26.88887641440536,-97.391649435788921 26.901970109878395,-97.389554460955466 26.945964918852653,-97.390340075249313 27.05228571820243,-97.389816329003565 27.067212531879022,-97.386411973331462 27.083186832972341,-97.387459455673422 27.090519300711819,-97.390601943297412 27.094185534581555,-97.390078197051665 27.156511519247964,-97.377508246555678 27.199458835730731,-97.379865109736301 27.202863196477598,-97.386673841379576 27.204696313412462,-97.382221972916923 27.229050589961044,-97.37488951532697 27.25026236588155,-97.373318276589728 27.276449754290233,-97.372896734486858 27.277942715507475,-97.367033301341749 27.298709035706306,-97.36467643816114 27.302637142698917,-97.359962701650375 27.304732132756659,-97.357605838469766 27.307874620380655,-97.362319574980518 27.32672953597509,-97.366771423144115 27.333276389420721,-97.36179581858525 27.359987519000377,-97.346607126710992 27.390364889744752,-97.336132171347501 27.402411088920228,-97.331156576938184 27.412362295500575,-97.329585328051422 27.418123524502818,-97.330894688591016 27.425455992242295,-97.329847196099536 27.434359703793774,-97.317277255753083 27.463689574751687,-97.293708603647858 27.497209429631152,-97.282971770086746 27.521563701104967,-97.267627232015485 27.541048841138782,-97.26651977444007 27.542455137362143,-97.266473727822444 27.542513609294531,-97.257831889393842 27.556392930479635,-97.261144559602045 27.562355746269706,-97.261759991311692 27.563463525096239,-97.260450620622564 27.56739163716362,-97.260303240478223 27.567589679048492,-97.252732825146552 27.577762415194865,-97.252070650242061 27.578652211895708,-97.247885553160842 27.581360217573209,-97.247618802078478 27.581532821322067,-97.236881968517352 27.598292751933528,-97.24107194863285 27.602482732049012,-97.241084821027414 27.602523494839662,-97.242643187370078 27.607458346757408,-97.231683715414945 27.631671123728168,-97.231553918442799 27.631957884363242,-97.231382612637987 27.632336350521356,-97.221955159915538 27.632860099304484,-97.221711030183002 27.632638163711842,-97.219074540339648 27.630241360463614,-97.217418907944051 27.630677052710489,-97.214098935780783 27.631550728615359,-97.200743370990949 27.650143776161688,-97.197339005169326 27.664546838517776,-97.19760088336696 27.678426154628117,-97.203474366386629 27.684532651921231,-97.20308902068453 27.688000774441392,-97.200450811776179 27.688974477466285,-97.190006537429824 27.692829222058965,-97.188284576858237 27.695272543577584,-97.170627865440125 27.720325976082009,-97.166176017276527 27.732372180332245,-97.161200407642937 27.734074342943998,-97.153606061705801 27.733288721037997,-97.147321086457822 27.735383711095739,-97.130823034043985 27.751619892924076,-97.127942424617643 27.75580987303956,-97.127680546420009 27.759999858229808,-97.125046985317312 27.763143140340585,-97.103326269871417 27.789067861139614,-97.102999946318647 27.791923200131116,-97.10255066693685 27.795854405604921,-97.102495980878558 27.796332909939515,-97.102278777379922 27.798233445813956,-97.100865886772965 27.802472121847156,-97.098874421707819 27.808446522979796,-97.095168997779496 27.812151946908138,-97.092851314507953 27.81446963017968,-97.092589446459854 27.819183356540908,-97.098874421707819 27.822849590410645,-97.104263831428213 27.822227735056668,-97.126109297533233 27.819707102786651,-97.130299287798252 27.820492727230029,-97.134489267913736 27.825206463740791,-97.132394272781227 27.827301438574235,-97.10670775348396 27.832389859144307,-97.087681973298601 27.836158807756469,-97.056712719518927 27.842293721800239,-97.055822986229373 27.843403727743151,-97.04322620548075 27.859119113080268,-97.013634476624247 27.906780143237341,-97.017955395838555 27.911493874673329,-97.016384146951765 27.917255079570445,-96.985744902767337 27.954048356415132,-96.977888688782102 27.976438572489602,-96.978805242174786 27.978271691961854,-96.980900237307296 27.978271691961854,-96.986006780964971 27.976176699366729,-96.986661461234775 27.980759491703903,-96.978281501003806 28.001709402430844,-96.967806540565562 28.020040576854303,-96.966759042999328 28.020367911280101,-96.965187799187319 28.013297317932185,-96.962569062883844 28.012380759464751,-96.952617853766114 28.01643980428749,-96.946987563862692 28.02652194996665,-96.932453562407773 28.035425661518129,-96.926430465357427 28.043412814602167,-96.929572952981431 28.051399967686208,-96.927085150701998 28.057292130712504,-96.906004298338829 28.076147047258459,-96.890946545563423 28.076801730065643,-96.886232814127425 28.084396073465374,-96.88832780925992 28.086622002621937,-96.889113433703315 28.099453823703399,-96.886887499471996 28.117130312782294,-96.879424092633712 28.131402425890027,-96.874972236857971 28.133235547899659,-96.87078225420511 28.13127149186597,-96.86462821551855 28.126295887307109,-96.857164811217643 28.115559058820768,-96.845380482627661 28.108881273888468,-96.830128556765757 28.111822717849165,-96.827049318353744 28.112416571196771,-96.816574357915513 28.119618104912195,-96.810420321766344 28.126034014184238,-96.810944073086844 28.136378030448888,-96.816836228500989 28.158048094801106,-96.820248352517055 28.163388807027481,-96.822859330626116 28.167475552598326,-96.818513748151517 28.172441936006489)))"
+    }
+  },
+  {
+    "pk": 2,
+    "model": "geoapp.country",
+    "fields": {
+      "name": "New Zealand",
+      "mpoly": "SRID=4326;MULTIPOLYGON (((174.616364000000004 -36.100861000000002,174.634978999999987 -36.124718,174.708862000000011 -36.205559,174.781096999999988 -36.266945,174.812744000000009 -36.339165,174.768311000000011 -36.34639,174.710784999999987 -36.525832999999999,174.708587999999992 -36.533332999999999,174.70773299999999 -36.541671999999998,174.714690999999988 -36.595832999999999,174.717194000000006 -36.603057999999997,174.774414000000007 -36.730277999999998,174.808319000000012 -36.805275000000002,174.854400999999996 -36.847777999999998,174.896636999999998 -36.878334000000002,175.011658000000011 -36.871941,175.020813000000004 -36.873610999999997,175.055542000000003 -36.880279999999999,175.076629999999994 -36.890839,175.082458000000003 -36.895279000000002,175.087463000000014 -36.900832999999999,175.091644000000002 -36.925559999999997,175.161652000000004 -36.955559,175.221069 -36.937775000000002,175.230255 -36.939438000000003,175.278320000000008 -36.965279000000002,175.310516000000007 -36.995002999999997,175.319976999999994 -37.005836000000002,175.323853000000014 -37.012222,175.328856999999999 -37.026947,175.330261000000007 -37.035277999999998,175.330535999999995 -37.044449,175.321899000000002 -37.06472,175.31942699999999 -37.095275999999998,175.317748999999992 -37.144165,175.319121999999993 -37.152495999999999,175.328856999999999 -37.168892,175.373290999999995 -37.216659999999997,175.385254000000003 -37.225830000000002,175.404967999999997 -37.228050000000003,175.579131999999987 -37.244446000000003,175.58914200000001 -37.169449,175.551636000000002 -37.024718999999997,175.547484999999995 -37.009171000000002,175.542480000000012 -36.994446000000003,175.536102 -36.980826999999998,175.524993999999992 -36.961669999999998,175.498566000000011 -36.927222999999998,175.484406000000007 -36.920279999999998,175.476348999999999 -36.917777999999998,175.464416999999997 -36.90889,175.435241999999988 -36.866942999999999,175.46691899999999 -36.809998,175.509430000000009 -36.776108,175.486358999999993 -36.679726000000002,175.463593000000003 -36.621383999999999,175.378296000000006 -36.570557,175.366364000000004 -36.561667999999997,175.361633000000012 -36.556389000000003,175.356628 -36.541671999999998,175.353850999999992 -36.525002,175.35244800000001 -36.489998,175.353577 -36.481940999999999,175.360229000000004 -36.478050000000003,175.538025000000005 -36.514724999999999,175.542755 -36.519996999999996,175.604950000000002 -36.622771999999998,175.631072999999986 -36.710555999999997,175.763610999999997 -36.713614999999997,175.840789999999998 -36.754173000000002,175.733582000000013 -36.805832000000002,175.701629999999994 -36.844161999999997,175.707458000000003 -36.869995000000003,175.709960999999993 -36.875275000000002,175.714690999999988 -36.880828999999999,175.720519999999993 -36.885277000000002,175.735779000000008 -36.891387999999999,175.74383499999999 -36.893889999999999,175.758330999999998 -36.876106,175.761382999999995 -36.869446000000003,175.757751000000013 -36.863059999999997,175.753051999999997 -36.857779999999998,175.749114999999989 -36.851394999999997,175.75 -36.843055999999997,175.752196999999995 -36.835555999999997,175.756378000000012 -36.830002,175.765533000000005 -36.828055999999997,175.808013999999986 -36.824173000000002,175.817200000000014 -36.825836000000002,175.833587999999992 -36.830832999999998,175.845519999999993 -36.839722000000002,175.849120999999997 -36.846107000000003,175.878570999999994 -36.914444000000003,175.881072999999986 -36.921669,175.918304000000006 -37.067504999999997,175.917480000000012 -37.075836000000002,175.915253000000007 -37.083061,175.898314999999997 -37.115004999999996,175.884154999999993 -37.168892,175.883330999999998 -37.176949,175.887206999999989 -37.244163999999998,175.892212 -37.249724999999998,175.921082000000013 -37.251671000000002,175.927185000000009 -37.256110999999997,175.93081699999999 -37.262504999999997,175.936371000000008 -37.278885000000002,175.940093999999988 -37.299717,175.974396000000013 -37.418059999999997,175.976074000000011 -37.453055999999997,176.026931999999988 -37.483108999999999,176.035583000000003 -37.487282,176.059417999999994 -37.502502,176.088287000000008 -37.525557999999997,176.093291999999991 -37.531112999999998,176.165526999999997 -37.613892,176.169433999999995 -37.620277000000002,176.167205999999993 -37.625832000000003,176.160247999999996 -37.624167999999997,176.082458000000003 -37.602500999999997,176.066924999999998 -37.59639,176.061095999999992 -37.591942000000003,176.057189999999991 -37.585555999999997,176.062744000000009 -37.580832999999998,176.070800999999989 -37.577781999999999,176.088287000000008 -37.580002,176.095245000000006 -37.576110999999997,176.090239999999994 -37.570838999999999,176.062468999999993 -37.546669,176.023087000000004 -37.528221000000002,176.018767999999994 -37.526057999999999,176.013931000000014 -37.524554999999999,176.007598999999999 -37.524222999999999,175.955535999999995 -37.521110999999998,175.946349999999995 -37.523055999999997,175.940796000000006 -37.527779000000002,175.953583000000009 -37.558891000000003,175.994415000000004 -37.638893000000003,176.071899000000002 -37.655273,176.14498900000001 -37.675277999999999,176.242187999999999 -37.709442000000003,176.267486999999988 -37.676392,176.488281 -37.756667999999998,176.521636999999998 -37.769447,176.527771 -37.773887999999999,176.537475999999998 -37.784447,176.549712999999997 -37.793334999999999,176.656646999999992 -37.855559999999997,176.671082000000013 -37.862502999999997,176.686645999999996 -37.868332000000002,176.759154999999993 -37.892775999999998,176.784149000000014 -37.900275999999998,176.80304000000001 -37.903328000000002,176.819702000000007 -37.904442000000003,176.838287000000008 -37.907501000000003,176.917755 -37.926108999999997,176.943848000000003 -37.932502999999997,177.08273299999999 -37.967216,177.107468000000011 -37.987220999999998,177.159424 -38.013336000000002,177.415253000000007 -37.982498,177.47357199999999 -37.962502,177.545806999999996 -37.919167000000002,177.552459999999996 -37.915000999999997,177.571625000000012 -37.902222000000002,177.599120999999997 -37.878051999999997,177.603577 -37.872498,177.646941999999996 -37.805,177.732178000000005 -37.682502999999997,177.738861000000014 -37.678336999999999,177.746917999999994 -37.675277999999999,177.791931000000005 -37.666946000000003,177.849396000000013 -37.657218999999998,177.858856000000003 -37.656661999999997,177.868010999999996 -37.654442000000003,177.875792999999987 -37.651389999999999,178.0 -37.592224000000002,178.006653 -37.588332999999999,178.012206999999989 -37.583328000000002,178.018004999999988 -37.550831000000002,178.05581699999999 -37.542777999999998,178.064972000000012 -37.542228999999999,178.187744000000009 -37.546951,178.281921000000011 -37.560828999999998,178.306915000000004 -37.568061999999998,178.311919999999986 -37.573334000000003,178.312468999999993 -37.578887999999999,178.306915000000004 -37.583610999999998,178.321075000000008 -37.602500999999997,178.336365 -37.618332000000002,178.34970100000001 -37.626944999999999,178.367737000000005 -37.630828999999999,178.448028999999991 -37.645279000000002,178.457458000000003 -37.646667,178.468018 -37.646949999999997,178.488861000000014 -37.644165,178.497192000000013 -37.646667,178.504424999999998 -37.649994,178.550536999999991 -37.6875,178.555542000000003 -37.692497000000003,178.559692000000013 -37.698883000000002,178.56552099999999 -37.713332999999999,178.562468999999993 -37.719994,178.483306999999996 -37.826393000000003,178.455230999999998 -37.860000999999997,178.449982000000006 -37.865004999999996,178.429687999999999 -37.876944999999999,178.419983000000002 -37.887779000000002,178.350525000000005 -38.004722999999998,178.347473000000008 -38.011116,178.347197999999992 -38.019722000000002,178.348846000000009 -38.027779000000002,178.354950000000002 -38.032218999999998,178.360229000000004 -38.037506,178.364136000000002 -38.043616999999998,178.375792999999987 -38.072777000000002,178.378296000000006 -38.089995999999999,178.377746999999999 -38.09861,178.353850999999992 -38.185555,178.319976999999994 -38.248055,178.318024000000008 -38.255561999999998,178.317474000000004 -38.263893000000003,178.320800999999989 -38.398612999999997,178.302459999999996 -38.528885000000002,178.300536999999991 -38.536391999999999,178.296356000000003 -38.541946000000003,178.158874999999995 -38.649169999999998,178.074982000000006 -38.713889999999999,178.068297999999999 -38.717773,178.060241999999988 -38.721107000000003,178.050812000000008 -38.721381999999998,178.044433999999995 -38.717216,177.928864000000004 -38.722220999999998,177.941070999999994 -38.793616999999998,177.923858999999993 -38.918334999999999,177.917786000000007 -38.942802,177.909697999999992 -38.969718999999998,177.897705000000002 -39.047942999999997,177.893859999999989 -39.064776999999999,177.906708000000009 -39.064278000000002,177.923034999999999 -39.089165,177.942200000000014 -39.091942000000003,177.967743000000013 -39.098334999999999,177.991332999999997 -39.115004999999996,177.996612999999996 -39.120277000000002,177.999390000000005 -39.127495000000003,177.909973000000008 -39.256950000000003,177.898865 -39.267502,177.874968999999993 -39.286118000000002,177.868010999999996 -39.290283000000002,177.861908 -39.285834999999999,177.844970999999987 -39.251396,177.839416999999997 -39.236946000000003,177.824127000000004 -39.193053999999997,177.823577999999998 -39.183883999999999,177.826629999999994 -39.177222999999998,177.841644000000002 -39.152779000000002,177.822021000000007 -39.114445000000003,177.823195999999996 -39.110115,177.82351700000001 -39.105110000000003,177.82119800000001 -39.101275999999999,177.816696000000007 -39.099274,177.680266999999986 -39.075279000000002,177.628845000000013 -39.071114,177.426085999999998 -39.064163,177.387755999999996 -39.077781999999999,177.246917999999994 -39.128334000000002,177.206085000000002 -39.143616000000002,177.149138999999991 -39.165000999999997,177.054961999999989 -39.204445,176.935790999999995 -39.349997999999999,176.931365999999997 -39.355559999999997,176.903870000000012 -39.398055999999997,176.898865 -39.412216,176.89776599999999 -39.438048999999999,176.899414000000007 -39.446387999999999,176.946625000000012 -39.664444000000003,177.01080300000001 -39.654998999999997,177.107178000000005 -39.660828000000002,177.116913000000011 -39.662216,177.120789000000002 -39.66861,177.119110000000006 -39.676108999999997,177.115783999999991 -39.682502999999997,177.08273299999999 -39.729996,177.073577999999998 -39.741385999999999,177.068024000000008 -39.746108999999997,177.059692000000013 -39.749167999999997,177.050262000000004 -39.751396,177.033874999999995 -39.757506999999997,177.028045999999989 -39.762504999999997,177.023590000000013 -39.768059,177.020263999999997 -39.774718999999997,176.894713999999993 -40.034728999999999,176.890533000000005 -40.049728000000002,176.889983999999998 -40.058052000000004,176.89498900000001 -40.082779000000002,176.893035999999995 -40.090279000000002,176.874114999999989 -40.121383999999999,176.834136999999998 -40.181671,176.808319000000012 -40.216659999999997,176.796935999999988 -40.226387000000003,176.687195000000003 -40.321387999999999,176.644135000000006 -40.379997000000003,176.628296000000006 -40.421944000000003,176.539977999999991 -40.495002999999997,176.521362000000011 -40.513893000000003,176.500823999999994 -40.535004,176.441924999999998 -40.600281000000003,176.405243000000013 -40.643889999999999,176.386108000000007 -40.675002999999997,176.35522499999999 -40.688606,176.349396000000013 -40.693610999999997,176.288574000000011 -40.793892,176.239136000000002 -40.90889,176.22079500000001 -40.931671,176.195526 -40.941665999999998,176.172760000000011 -40.952224999999999,176.158600000000007 -40.959999000000003,176.152771 -40.964722000000002,176.142212 -40.975273,176.134154999999993 -40.987502999999997,176.120789000000002 -41.013618,176.11300700000001 -41.035277999999998,176.098297000000002 -41.087218999999997,176.087463000000014 -41.116112,176.080811000000011 -41.129165999999998,176.062195000000003 -41.151938999999999,175.984679999999997 -41.231383999999998,175.955230999999998 -41.255279999999999,175.819121999999993 -41.347220999999998,175.743561 -41.392226999999998,175.736358999999993 -41.396110999999998,175.557738999999998 -41.485000999999997,175.471069 -41.541389000000002,175.427459999999996 -41.564444999999999,175.323028999999991 -41.614449,175.313292999999987 -41.616394,175.230804000000006 -41.620834000000002,175.222197999999992 -41.618332000000002,175.21691899999999 -41.612777999999999,175.184692000000013 -41.535834999999999,175.181915000000004 -41.519447,175.181091000000009 -41.500838999999999,175.188568000000004 -41.461112999999997,175.193024000000008 -41.446106,175.193848000000003 -41.437775000000002,175.191070999999994 -41.430557,175.186095999999992 -41.425002999999997,175.080261000000007 -41.385559,175.063018999999997 -41.380279999999999,175.05304000000001 -41.378608999999997,175.045532000000009 -41.378608999999997,175.027190999999988 -41.381667999999998,174.993286000000012 -41.393332999999998,174.985779000000008 -41.397224,174.972747999999996 -41.405830000000002,174.960509999999999 -41.415275999999999,174.949982000000006 -41.425559999999997,174.944976999999994 -41.431114,174.94165000000001 -41.437775000000002,174.936919999999986 -41.443328999999999,174.918578999999994 -41.448051,174.908600000000007 -41.448334000000003,174.872467 -41.429442999999999,174.86605800000001 -41.425002999999997,174.861084000000005 -41.419724000000002,174.861633000000012 -41.347496,174.863861000000014 -41.340279000000002,174.870789000000002 -41.327224999999999,174.87912 -41.315002,174.883881000000002 -41.309441,174.894440000000003 -41.290000999999997,174.89776599999999 -41.282501000000003,174.899993999999992 -41.275002,174.901916999999997 -41.258338999999999,174.901916999999997 -41.251114,174.898865 -41.234444000000003,174.89498900000001 -41.228050000000003,174.887482000000006 -41.224442000000003,174.827179 -41.218887000000002,174.818848000000003 -41.221938999999999,174.787475999999998 -41.244446000000003,174.778045999999989 -41.255836000000002,174.774414000000007 -41.262222,174.771087999999992 -41.278053,174.778594999999996 -41.281387000000002,174.796082000000013 -41.286949,174.818024000000008 -41.284728999999999,174.824127000000004 -41.289169,174.829407000000003 -41.294724000000002,174.833313000000004 -41.301108999999997,174.832184000000012 -41.309441,174.82995600000001 -41.316665999999998,174.826355000000007 -41.323334000000003,174.821625000000012 -41.328887999999999,174.815796000000006 -41.333610999999998,174.807189999999991 -41.336387999999999,174.744689999999991 -41.347496,174.700531000000012 -41.344444000000003,174.671906000000007 -41.338332999999999,174.654694000000006 -41.333061,174.648314999999997 -41.328612999999997,174.629669000000007 -41.315002,174.59191899999999 -41.27861,174.591644000000002 -41.271385000000002,174.594116000000014 -41.263893000000003,174.601074000000011 -41.250838999999999,174.608306999999996 -41.237777999999999,174.61300700000001 -41.232216,174.619110000000006 -41.23111,174.627746999999999 -41.233887000000003,174.637482000000006 -41.235557999999997,174.648590000000013 -41.234444000000003,174.666931000000005 -41.229720999999998,174.681365999999997 -41.221938999999999,174.694702000000007 -41.213614999999997,174.712738000000002 -41.199440000000003,174.718567000000007 -41.194716999999997,174.800812000000008 -41.100281000000003,174.844421000000011 -41.041671999999998,174.874390000000005 -41.018059,174.882721000000004 -41.015006999999997,174.892486999999988 -41.013061999999998,174.901093000000003 -41.010283999999999,174.908324999999991 -41.006393000000003,174.932189999999991 -40.987502999999997,174.94165000000001 -40.976387000000003,174.945251000000013 -40.969718999999998,174.947478999999987 -40.962218999999997,175.014983999999998 -40.84861,175.09857199999999 -40.755836000000002,175.112731999999994 -40.738892,175.120789000000002 -40.726944000000003,175.127746999999999 -40.713614999999997,175.164153999999996 -40.631943,175.169708000000014 -40.616942999999999,175.171906000000007 -40.609726000000002,175.187468999999993 -40.530830000000002,175.23800700000001 -40.329726999999998,175.23135400000001 -40.280830000000002,175.201629999999994 -40.181671,175.196349999999995 -40.166946000000003,175.178314 -40.134171000000002,175.15554800000001 -40.095832999999999,175.071625000000012 -40.003059,175.055542000000003 -39.987777999999999,175.022217000000012 -39.958053999999997,174.986358999999993 -39.93,174.974120999999997 -39.920836999999999,174.960784999999987 -39.912773,174.938873 -39.902222000000002,174.923034999999999 -39.895836000000003,174.836638999999991 -39.865004999999996,174.828307999999993 -39.862502999999997,174.790802000000014 -39.854720999999998,174.781096999999988 -39.853057999999997,174.751373 -39.865555,174.740509000000003 -39.866661,174.729674999999986 -39.865836999999999,174.57607999999999 -39.829169999999998,174.558013999999986 -39.824722,174.549408 -39.822226999999998,174.542205999999993 -39.818610999999997,174.523865 -39.805,174.421356000000003 -39.726944000000003,174.410521999999986 -39.716942000000003,174.376068000000004 -39.678612,174.353577 -39.639999000000003,174.348846000000009 -39.634444999999999,174.336638999999991 -39.625557,174.316070999999994 -39.613892,174.30886799999999 -39.610283000000003,174.217194000000006 -39.579726999999998,174.208862000000011 -39.577224999999999,174.040802000000014 -39.552779999999998,173.997741999999988 -39.551392,173.986908 -39.550552000000003,173.970245000000006 -39.545279999999998,173.963012999999989 -39.541671999999998,173.871062999999992 -39.483330000000002,173.851898000000006 -39.470551,173.839966000000004 -39.461387999999999,173.810790999999995 -39.4375,173.79525799999999 -39.421944000000003,173.786652000000004 -39.409996,173.775817999999987 -39.390839,173.769713999999993 -39.376944999999999,173.762206999999989 -39.354720999999998,173.754424999999998 -39.305,173.751923000000005 -39.288612,173.751647999999989 -39.269996999999996,173.781921000000011 -39.191383000000002,173.785247999999996 -39.184998,173.800536999999991 -39.169167000000002,173.82995600000001 -39.145836000000003,173.844421000000011 -39.138336000000002,173.868010999999996 -39.128883000000002,173.892761000000007 -39.120552000000004,174.011108000000007 -39.073334000000003,174.114685000000009 -39.024445,174.187744000000009 -38.988608999999997,174.209136999999998 -38.977218999999998,174.226623999999987 -38.972496,174.248016000000007 -38.970551,174.259978999999987 -38.970275999999998,174.281372000000005 -38.969994,174.293029999999987 -38.969994,174.313292999999987 -38.972496,174.351348999999999 -38.979438999999999,174.375244000000009 -38.979163999999997,174.384704999999997 -38.977218999999998,174.392761000000007 -38.974442000000003,174.456359999999989 -38.940277000000002,174.546082000000013 -38.871941,174.557738999999998 -38.860557999999997,174.568024000000008 -38.850281000000003,174.587738000000002 -38.828887999999999,174.594421000000011 -38.815834000000002,174.603302000000014 -38.786118000000002,174.608582000000013 -38.763061999999998,174.625518999999997 -38.677779999999998,174.642486999999988 -38.590836000000003,174.681091000000009 -38.379165999999998,174.724396000000013 -38.185828999999998,174.838561999999996 -38.157218999999998,174.848021999999986 -38.156944000000003,174.85635400000001 -38.154167,174.926636000000002 -38.116112,174.932465000000008 -38.111389000000003,174.940246999999999 -38.101112,174.898590000000013 -38.075004999999997,174.877166999999986 -38.064163,174.892486999999988 -37.976387000000003,174.893585000000002 -37.969994,174.868286000000012 -37.943610999999997,174.861084000000005 -37.939995000000003,174.85522499999999 -37.944716999999997,174.834686000000005 -37.963614999999997,174.830261000000007 -37.969161999999997,174.828033000000005 -37.976661999999997,174.828583000000009 -37.995002999999997,174.822754000000003 -37.999724999999998,174.814696999999995 -38.002502,174.804137999999995 -38.001944999999999,174.797211000000004 -37.998336999999999,174.791077 -37.993614,174.786376999999987 -37.988334999999999,174.783874999999995 -37.980826999999998,174.783600000000007 -37.971663999999997,174.788025000000005 -37.868332000000002,174.788879000000009 -37.860000999999997,174.791077 -37.852783000000002,174.795532000000009 -37.846947,174.819702000000007 -37.829169999999998,174.826629999999994 -37.825279000000002,174.841339000000005 -37.818610999999997,174.872741999999988 -37.806106999999997,174.883330999999998 -37.805,174.903045999999989 -37.807502999999997,174.945251000000013 -37.810555,174.967467999999997 -37.809165999999998,174.975525000000005 -37.806389000000003,174.974975999999998 -37.75,174.974670000000003 -37.740836999999999,174.966644000000002 -37.739998,174.951355000000007 -37.743057,174.94442699999999 -37.745002999999997,174.93081699999999 -37.752502,174.906921000000011 -37.774169999999998,174.870789000000002 -37.783057999999997,174.861633000000012 -37.785004,174.848297000000002 -37.769722000000002,174.828307999999993 -37.710830999999999,174.764160000000004 -37.527779000000002,174.744415000000004 -37.487502999999997,174.724975999999998 -37.447220000000002,174.717467999999997 -37.425002999999997,174.714690999999988 -37.408607000000003,174.714690999999988 -37.399445,174.719116000000014 -37.393616000000002,174.725799999999992 -37.389999000000003,174.744415000000004 -37.385834000000003,174.760528999999991 -37.380279999999999,174.767486999999988 -37.376389000000003,174.773041000000006 -37.371665999999998,174.831635000000006 -37.308052000000004,174.840789999999998 -37.296951,174.840515000000011 -37.291389000000002,174.82995600000001 -37.290557999999997,174.821899000000002 -37.291671999999998,174.812744000000009 -37.293616999999998,174.804687999999999 -37.296393999999999,174.797760000000011 -37.300277999999999,174.766083000000009 -37.321114,174.754700000000014 -37.330559,174.751373 -37.336945,174.744965000000008 -37.359169,174.740509000000003 -37.364722999999998,174.733582000000013 -37.368606999999997,174.724120999999997 -37.368889000000003,174.717194000000006 -37.365279999999998,174.711365 -37.360557999999997,174.701629999999994 -37.349724000000002,174.69442699999999 -37.336945,174.660187000000008 -37.273311999999997,174.645813000000004 -37.236389000000003,174.639709000000011 -37.224442000000003,174.599975999999998 -37.153885000000002,174.578307999999993 -37.115555,174.569976999999994 -37.103614999999998,174.555542000000003 -37.087502,174.551909999999992 -37.080832999999998,174.549712999999997 -37.073616,174.55304000000001 -37.067222999999998,174.558593999999999 -37.0625,174.568848000000003 -37.061385999999999,174.644135000000006 -37.061110999999997,174.661376999999987 -37.065551999999997,174.664977999999991 -37.071944999999999,174.666381999999999 -37.080283999999999,174.661925999999994 -37.085830999999999,174.650542999999999 -37.095275999999998,174.646087999999992 -37.100838000000003,174.648590000000013 -37.108055,174.703856999999999 -37.197777000000002,174.733856000000003 -37.196106,174.716644000000002 -37.154167,174.72357199999999 -37.150275999999998,174.87912 -37.088889999999999,174.887482000000006 -37.059165999999998,174.795532000000009 -37.023055999999997,174.804413000000011 -36.972220999999998,174.824982000000006 -36.960830999999999,174.829407000000003 -36.955002,174.83273299999999 -36.948608,174.828033000000005 -36.943053999999997,174.818848000000003 -36.941383000000002,174.770263999999997 -36.936661,174.696625000000012 -36.93972,174.686095999999992 -36.940834000000002,174.659697999999992 -36.947495000000004,174.653045999999989 -36.951393000000003,174.641662999999994 -36.960830999999999,174.622467 -36.982216,174.619110000000006 -36.988892,174.617187999999999 -36.996108999999997,174.600525000000005 -37.022224,174.524688999999995 -37.045555,174.515533000000005 -37.045555,174.508605999999986 -37.041946000000003,174.502472000000012 -37.037506,174.498016000000007 -37.031944000000003,174.490783999999991 -37.019165,174.484679999999997 -37.005561999999998,174.459228999999993 -36.944031000000003,174.451904000000013 -36.923889000000003,174.446930000000009 -36.909163999999997,174.443024000000008 -36.893616000000002,174.439147999999989 -36.868606999999997,174.436645999999996 -36.852226000000002,174.43386799999999 -36.835555999999997,174.427764999999994 -36.812775000000002,174.422760000000011 -36.798057999999997,174.416655999999989 -36.784171999999998,174.409697999999992 -36.771385000000002,174.406096999999988 -36.765006999999997,174.390533000000005 -36.740279999999998,174.344299000000007 -36.679336999999997,174.301085999999998 -36.62722,174.284973000000008 -36.612777999999999,174.267486999999988 -36.599167,174.236908 -36.568061999999998,174.208862000000011 -36.535277999999998,174.187744000000009 -36.496948000000003,174.17804000000001 -36.467498999999997,174.177764999999994 -36.458336000000003,174.178864000000004 -36.449997000000003,174.181091000000009 -36.442497000000003,174.184417999999994 -36.436110999999997,174.189972000000012 -36.431389000000003,174.196930000000009 -36.427779999999998,174.20495600000001 -36.428612,174.24383499999999 -36.440834000000002,174.251923000000005 -36.443610999999997,174.257751000000013 -36.448051,174.300262000000004 -36.515839,174.348846000000009 -36.601944000000003,174.367919999999998 -36.629165999999998,174.370728000000014 -36.6325,174.422484999999995 -36.667220999999998,174.430542000000003 -36.668059999999997,174.453033000000005 -36.651108,174.456359999999989 -36.644722000000002,174.465515000000011 -36.582779000000002,174.465515000000011 -36.532218999999998,174.442474000000004 -36.414718999999998,174.422211000000004 -36.366112,174.41885400000001 -36.370834000000002,174.391937000000013 -36.395004,174.384978999999987 -36.398887999999999,174.377166999999986 -36.401665,174.303864000000004 -36.395279000000002,174.296935999999988 -36.391669999999998,174.285247999999996 -36.3825,174.276916999999997 -36.370552000000004,174.26998900000001 -36.357779999999998,174.268585000000002 -36.349442000000003,174.268585000000002 -36.342224000000002,174.292205999999993 -36.316947999999996,174.299988000000013 -36.314163,174.308013999999986 -36.316947999999996,174.325531000000012 -36.330283999999999,174.334686000000005 -36.332222000000002,174.36883499999999 -36.331673000000002,174.376891999999998 -36.330832999999998,174.421248999999989 -36.310611999999999,174.50692699999999 -36.267220000000002,174.518311000000011 -36.258057,174.521636999999998 -36.251396,174.519135000000006 -36.245834000000002,174.505248999999992 -36.231383999999998,174.413299999999992 -36.263061999999998,174.378296000000006 -36.286667,174.364685000000009 -36.294167000000002,174.346619000000004 -36.298057999999997,174.336365 -36.298889000000003,174.305237000000005 -36.287506,174.365233999999987 -36.260002,174.442200000000014 -36.169724000000002,174.396087999999992 -36.144447,174.396362000000011 -36.151938999999999,174.394135000000006 -36.159163999999997,174.373290999999995 -36.206389999999999,174.369965000000008 -36.213057999999997,174.358856000000003 -36.222220999999998,174.345245000000006 -36.229720999999998,174.337463000000014 -36.232773000000002,174.33273299999999 -36.229163999999997,174.307738999999998 -36.176949,174.282745000000006 -36.121108999999997,174.274993999999992 -36.118332000000002,174.239409999999992 -36.111389000000003,174.229126000000008 -36.112502999999997,174.195251000000013 -36.131110999999997,174.188568000000004 -36.144165,174.185790999999995 -36.171944000000003,174.191345000000013 -36.176392,174.19830300000001 -36.18,174.217743000000013 -36.182502999999997,174.226898000000006 -36.182502999999997,174.236084000000005 -36.180557,174.244110000000006 -36.183059999999998,174.287749999999988 -36.210281000000002,174.312468999999993 -36.236663999999998,174.314696999999995 -36.243889000000003,174.267212 -36.270279000000002,174.259430000000009 -36.273055999999997,174.251373 -36.272499000000003,174.065796000000006 -36.168334999999999,173.999114999999989 -36.121108999999997,173.994415000000004 -36.115836999999999,173.99105800000001 -36.109444000000003,173.931091000000009 -35.981940999999999,173.938568000000004 -35.934998,173.947478999999987 -35.923889000000003,173.948577999999998 -35.915550000000003,173.946075000000008 -35.908051,173.913879000000009 -35.86972,173.908324999999991 -35.874442999999999,173.903870000000012 -35.879997000000003,173.904967999999997 -35.888336000000002,173.921356000000003 -36.003059,173.980804000000006 -36.121383999999999,173.987731999999994 -36.134171000000002,173.992461999999989 -36.139724999999999,174.124390000000005 -36.263618,174.176085999999998 -36.276947,174.180542000000003 -36.282501000000003,174.198853000000014 -36.343887000000002,174.199982000000006 -36.352226000000002,174.198028999999991 -36.368606999999997,174.194702000000007 -36.375275000000002,174.189147999999989 -36.379722999999998,174.115233999999987 -36.40361,174.089966000000004 -36.411385000000003,174.080811000000011 -36.409438999999999,174.06942699999999 -36.400275999999998,174.065796000000006 -36.393889999999999,174.057465000000008 -36.374718,174.049133000000012 -36.353614999999998,174.044433999999995 -36.338889999999999,174.039703000000003 -36.323334000000003,174.031096999999988 -36.293059999999997,174.020537999999988 -36.273887999999999,173.82607999999999 -36.032501000000003,173.737457000000006 -35.933608999999997,173.727172999999993 -35.923614999999998,173.590515000000011 -35.778053,173.398865 -35.573891000000003,173.395537999999988 -35.567504999999997,173.398865 -35.553612,173.446625000000012 -35.440277000000002,173.465789999999998 -35.429169000000002,173.501923000000005 -35.419724000000002,173.506378000000012 -35.425277999999999,173.540253000000007 -35.430832000000002,173.629943999999995 -35.356667000000002,173.65554800000001 -35.322502,173.65554800000001 -35.313332000000003,173.564147999999989 -35.278053,173.556091000000009 -35.280830000000002,173.551636000000002 -35.286391999999999,173.549712999999997 -35.302779999999998,173.549712999999997 -35.321114,173.551909999999992 -35.328612999999997,173.566924999999998 -35.344161999999997,173.568024000000008 -35.361671,173.566924999999998 -35.36972,173.559143000000006 -35.372771999999998,173.439696999999995 -35.376106,173.416077 -35.384444999999999,173.410247999999996 -35.388893000000003,173.391356999999999 -35.423057999999997,173.39498900000001 -35.449722,173.396087999999992 -35.458053999999997,173.392761000000007 -35.482773000000002,173.386382999999995 -35.523330999999999,173.380524000000008 -35.528053,173.37384 -35.524169999999998,173.306915000000004 -35.449165,173.237731999999994 -35.370277000000002,173.154144000000002 -35.276665,173.103302000000014 -35.226104999999997,173.09191899999999 -35.216942000000003,173.087463000000014 -35.211387999999999,173.09191899999999 -35.1875,173.098846000000009 -35.183608999999997,173.119110000000006 -35.185555,173.12802099999999 -35.1875,173.134704999999997 -35.191108999999997,173.14498900000001 -35.191940000000002,173.152771 -35.189163,173.163879000000009 -35.179169000000002,173.168578999999994 -35.173614999999998,173.18081699999999 -35.156104999999997,173.187468999999993 -35.143332999999998,173.191924999999998 -35.128334000000002,173.196349999999995 -35.104446000000003,173.197478999999987 -35.09639,173.198577999999998 -35.078887999999999,173.198577999999998 -35.051108999999997,173.193848000000003 -35.027222000000002,173.189423000000005 -35.012779000000002,173.179413000000011 -34.993332000000002,173.175812000000008 -34.986946000000003,173.159149000000014 -34.958336000000003,173.151093000000003 -34.946663,173.137755999999996 -34.93,172.947204999999997 -34.716942000000003,172.828033000000005 -34.584442000000003,172.812468999999993 -34.568893000000003,172.722473000000008 -34.495277000000002,172.739136000000002 -34.435555,172.900817999999987 -34.414718999999998,172.911925999999994 -34.414718999999998,173.020813000000004 -34.422226000000002,173.038879000000009 -34.436942999999999,173.043304000000006 -34.517775999999998,173.039977999999991 -34.522224,173.033324999999991 -34.525832999999999,173.024414000000007 -34.527779000000002,173.016662999999994 -34.52861,173.007476999999994 -34.526947,172.997467 -34.498336999999999,172.984130999999991 -34.472771000000002,172.961914000000007 -34.465279000000002,172.955230999999998 -34.468887000000002,172.908324999999991 -34.544167000000002,172.912749999999988 -34.549728000000002,172.923858999999993 -34.558891000000003,172.936095999999992 -34.567222999999998,172.973021999999986 -34.581116000000002,173.053314 -34.665550000000003,173.057738999999998 -34.680283000000003,173.110503999999992 -34.791389000000002,173.120789000000002 -34.810555,173.128570999999994 -34.822502,173.133026 -34.828055999999997,173.13857999999999 -34.832504,173.151916999999997 -34.839995999999999,173.213593000000003 -34.871941,173.242737000000005 -34.884726999999998,173.273314999999997 -34.940834000000002,173.268859999999989 -34.946387999999999,173.262206999999989 -34.959167,173.259978999999987 -34.966659999999997,173.258881000000002 -34.974716,173.259978999999987 -34.983055,173.264709000000011 -35.014449999999997,173.269135000000006 -35.019722000000002,173.317474000000004 -35.018889999999999,173.328583000000009 -35.009444999999999,173.358856000000003 -34.98111,173.36300700000001 -34.975555,173.366364000000004 -34.968887000000002,173.373259999999988 -34.936774999999997,173.371246000000014 -34.927444,173.400817999999987 -34.863334999999999,173.426085999999998 -34.82,173.450806 -34.807777000000002,173.500274999999988 -34.864722999999998,173.499114999999989 -34.871108999999997,173.492461999999989 -34.874718,173.452453999999989 -34.887779000000002,173.443297999999999 -34.889724999999999,173.433319000000012 -34.890555999999997,173.413025000000005 -34.888893000000003,173.405243000000013 -34.892502,173.399719000000005 -34.897224,173.399719000000005 -34.906387000000002,173.402190999999988 -34.913887000000003,173.411590999999987 -34.931778,173.419128 -34.945830999999998,173.426909999999992 -34.957779000000002,173.431641000000013 -34.963332999999999,173.44165000000001 -34.973328000000002,173.454131999999987 -34.981667000000002,173.467467999999997 -34.988892,173.475525000000005 -34.991669000000002,173.493286000000012 -34.995277000000002,173.541655999999989 -34.988608999999997,173.561645999999996 -34.958893000000003,173.562468999999993 -34.950836000000002,173.566924999999998 -34.936110999999997,173.572478999999987 -34.931389000000003,173.579131999999987 -34.927779999999998,173.589416999999997 -34.928612,173.83914200000001 -35.004173000000002,174.101074000000011 -35.121108999999997,174.098297000000002 -35.161667,174.091644000000002 -35.158051,174.056641000000013 -35.155555999999997,174.021911999999986 -35.164161999999997,174.008026 -35.207504,174.008026 -35.215004,174.011382999999995 -35.221381999999998,174.018311000000011 -35.224997999999999,174.093841999999995 -35.225273,174.100525000000005 -35.228881999999999,174.143585000000002 -35.328612999999997,174.208008000000007 -35.323334000000003,174.218018 -35.322226999999998,174.247741999999988 -35.27861,174.319976999999994 -35.232773000000002,174.383881000000002 -35.337775999999998,174.461638999999991 -35.445273999999998,174.491913000000011 -35.485275,174.575806 -35.601944000000003,174.577179 -35.610000999999997,174.577147999999994 -35.618088,174.569976999999994 -35.648055999999997,174.563292999999987 -35.651665,174.530272999999994 -35.649445,174.520263999999997 -35.648612999999997,174.513306 -35.645004,174.505248999999992 -35.642502,174.479126000000008 -35.641945,174.47357199999999 -35.646393000000003,174.474975999999998 -35.654716,174.518311000000011 -35.724167,174.523041000000006 -35.729438999999999,174.554137999999995 -35.750281999999999,174.561919999999986 -35.753059,174.583862000000011 -35.764724999999999,174.60244800000001 -35.844444000000003,174.596924 -35.849167,174.58914200000001 -35.851944000000003,174.577758999999986 -35.852226000000002,174.560790999999995 -35.847777999999998,174.554961999999989 -35.843330000000002,174.538574000000011 -35.819450000000003,174.523314999999997 -35.796669,174.519713999999993 -35.790283000000002,174.49105800000001 -35.769447,174.361908 -35.723328000000002,174.357451999999995 -35.72361,174.34857199999999 -35.734726000000002,174.346924 -35.833061,174.350525000000005 -35.839438999999999,174.35522499999999 -35.845001000000003,174.360779000000008 -35.849442000000003,174.381348000000003 -35.851112,174.384704999999997 -35.844718999999998,174.385528999999991 -35.828887999999999,174.391083000000009 -35.824173000000002,174.398865 -35.821387999999999,174.437468999999993 -35.822777000000002,174.476074000000011 -35.824173000000002,174.486358999999993 -35.824722,174.519713999999993 -35.844718999999998,174.525542999999999 -35.849167,174.524414000000007 -35.855559999999997,174.521362000000011 -35.862220999999998,174.501373 -35.889999000000003,174.496917999999994 -35.895553999999997,174.487182999999987 -35.915000999999997,174.495513999999986 -35.988608999999997,174.498016000000007 -35.994163999999998,174.514160000000004 -36.008614,174.56942699999999 -36.037224000000002,174.578583000000009 -36.038894999999997,174.587738000000002 -36.038894999999997,174.596619000000004 -36.036667,174.606902999999988 -36.037506,174.612731999999994 -36.042228999999999,174.622192000000013 -36.053055,174.62912 -36.065834000000002,174.629394999999988 -36.075004999999997,174.616364000000004 -36.100861000000002)),((171.185241999999988 -44.938332000000003,171.182129000000003 -44.94173,171.175017999999994 -44.949902000000002,171.167923000000002 -44.959850000000003,171.165436 -44.966599000000002,171.164703000000003 -44.970275999999998,171.163299999999992 -44.978332999999999,171.149719000000005 -44.996665999999998,171.07995600000001 -45.067222999999998,171.02664200000001 -45.103332999999999,170.975525000000005 -45.151108,170.966063999999989 -45.163055,170.961914000000007 -45.169167000000002,170.921630999999991 -45.243057,170.873566000000011 -45.358055,170.873290999999995 -45.367218,170.876891999999998 -45.373885999999999,170.871338000000009 -45.424171,170.859955000000014 -45.487502999999997,170.855804000000006 -45.493889000000003,170.750274999999988 -45.61972,170.674682999999987 -45.745002999999997,170.616913000000011 -45.839438999999999,170.55886799999999 -45.881667999999998,170.554413000000011 -45.888053999999997,170.555542000000003 -45.896110999999998,170.591063999999989 -45.894165,170.600525000000005 -45.891669999999998,170.608582000000013 -45.888053999999997,170.658600000000007 -45.858612,170.718018 -45.817504999999997,170.724670000000003 -45.813057,170.773314999999997 -45.782775999999998,170.781096999999988 -45.786391999999999,170.790802000000014 -45.806946000000003,170.790802000000014 -45.84639,170.788879000000009 -45.863892,170.783051 -45.878334000000002,170.776366999999993 -45.882773999999998,170.699982000000006 -45.911667,170.664429000000013 -45.908332999999999,170.57330300000001 -45.916663999999997,170.550536999999991 -45.919167000000002,170.484406000000007 -45.926949,170.452453999999989 -45.931946000000003,170.424408 -45.939438000000003,170.382721000000004 -45.956108,170.342467999999997 -45.97361,170.315246999999999 -45.991385999999999,170.309692000000013 -45.996948000000003,170.294433999999995 -46.013893000000003,170.281646999999992 -46.029442000000003,170.263610999999997 -46.051940999999999,170.256378000000012 -46.065551999999997,170.253051999999997 -46.081947,170.252472000000012 -46.09111,170.254424999999998 -46.107779999999998,170.252777000000009 -46.115836999999999,170.240783999999991 -46.146949999999997,170.237731999999994 -46.154167,170.226623999999987 -46.165000999999997,170.214416999999997 -46.174720999999998,170.193848000000003 -46.188048999999999,170.169433999999995 -46.198608,170.067748999999992 -46.246665999999998,169.911925999999994 -46.340279000000002,169.863585999999998 -46.371383999999999,169.858001999999999 -46.376663,169.849396000000013 -46.389442000000003,169.848021999999986 -46.416946000000003,169.849975999999998 -46.433326999999998,169.852172999999993 -46.440834000000002,169.853850999999992 -46.457504,169.850799999999992 -46.464722000000002,169.845245000000006 -46.469994,169.701904000000013 -46.558052000000004,169.631348000000003 -46.581947,169.458008000000007 -46.623328999999998,169.266388000000006 -46.656387000000002,169.133026 -46.670836999999999,169.107727000000011 -46.669167000000002,169.097197999999992 -46.666946000000003,169.084411999999986 -46.657501000000003,169.067200000000014 -46.635002,169.061919999999986 -46.675002999999997,169.053864000000004 -46.678612,169.008026 -46.680832000000002,168.883330999999998 -46.667777999999998,168.878296000000006 -46.661942000000003,168.861908 -46.628334000000002,168.862457000000006 -46.619446000000003,168.864409999999992 -46.611114999999998,168.864959999999996 -46.603889000000002,168.844970999999987 -46.563614,168.835784999999987 -46.560555,168.823853000000014 -46.561110999999997,168.733306999999996 -46.577499000000003,168.640533000000005 -46.603889000000002,168.633605999999986 -46.606392,168.614685000000009 -46.611114999999998,168.593018 -46.614165999999997,168.568848000000003 -46.615004999999996,168.516937000000013 -46.614165999999997,168.492737000000005 -46.613334999999999,168.442138999999997 -46.601500999999999,168.436630000000008 -46.599666999999997,168.446625000000012 -46.584003000000003,168.442200000000014 -46.575004999999997,168.454407000000003 -46.574447999999997,168.490509000000003 -46.573059,168.502472000000012 -46.574173000000002,168.506103999999993 -46.578887999999999,168.499114999999989 -46.583328000000002,168.505553999999989 -46.588051,168.551636000000002 -46.594444000000003,168.561371000000008 -46.591942000000003,168.566924999999998 -46.586661999999997,168.563599000000011 -46.580002,168.550812000000008 -46.570557,168.541655999999989 -46.567504999999997,168.391356999999999 -46.540000999999997,168.361908 -46.544449,168.353577 -46.547783000000003,168.351623999999987 -46.556106999999997,168.352172999999993 -46.564444999999999,168.362731999999994 -46.583885000000002,168.348236000000014 -46.582165000000003,168.352904999999993 -46.584499,168.359267999999986 -46.585830999999999,168.365082 -46.592666999999999,168.367248999999987 -46.596668,168.367599000000013 -46.601497999999999,168.364928999999989 -46.605331,168.35775799999999 -46.604500000000002,168.351409999999987 -46.603164999999997,168.275269000000009 -46.557777000000002,168.269135000000006 -46.535561,168.268311000000011 -46.529167,168.27664200000001 -46.525832999999999,168.286102 -46.523330999999999,168.307738999999998 -46.520553999999997,168.318297999999999 -46.520836000000003,168.318848000000003 -46.529167,168.321075000000008 -46.536667,168.328856999999999 -46.540557999999997,168.339416999999997 -46.539169,168.386658000000011 -46.497779999999999,168.392486999999988 -46.492226000000002,168.395537999999988 -46.485000999999997,168.396087999999992 -46.477775999999999,168.394135000000006 -46.470275999999998,168.37384 -46.421944000000003,168.36883499999999 -46.416106999999997,168.359679999999997 -46.415000999999997,168.350249999999988 -46.417503000000004,168.250274999999988 -46.400832999999999,168.211090000000013 -46.355277999999998,168.206085000000002 -46.351394999999997,168.194702000000007 -46.345551,168.185516000000007 -46.342498999999997,168.174988000000013 -46.340279000000002,168.116364000000004 -46.343612999999998,168.063873 -46.351669,167.955535999999995 -46.371383999999999,167.893035999999995 -46.387222,167.850799999999992 -46.399445,167.832184000000012 -46.398612999999997,167.824401999999992 -46.394447,167.753875999999991 -46.333885000000002,167.776916999999997 -46.312775000000002,167.781372000000005 -46.306389000000003,167.783600000000007 -46.298340000000003,167.781372000000005 -46.290840000000003,167.778045999999989 -46.284171999999998,167.701904000000013 -46.209442000000003,167.596924 -46.166389000000002,167.556641000000013 -46.156387000000002,167.546356000000003 -46.154167,167.534424 -46.152779000000002,167.483032000000009 -46.149726999999999,167.471069 -46.149994,167.460236000000009 -46.151389999999999,167.451904000000013 -46.154716,167.446075000000008 -46.159996,167.415526999999997 -46.204720000000002,167.356628 -46.254447999999996,167.280272999999994 -46.273055999999997,167.261108000000007 -46.267775999999998,167.238555999999988 -46.263893000000003,167.086638999999991 -46.240555,167.001373 -46.229163999999997,166.966063999999989 -46.224716,166.949982000000006 -46.223885000000003,166.915253000000007 -46.226104999999997,166.883026 -46.229996,166.836365 -46.232498,166.823028999999991 -46.231667000000002,166.768035999999995 -46.22361,166.726348999999999 -46.214165,166.717467999999997 -46.210830999999999,166.705230999999998 -46.201110999999997,166.670806999999996 -46.161667,166.67025799999999 -46.15361,166.684417999999994 -46.145004,166.693848000000003 -46.142775999999998,166.709411999999986 -46.135277000000002,166.738861000000014 -46.119163999999998,166.761230000000012 -46.093612999999998,166.784911999999991 -46.064945000000002,166.804748999999987 -46.033279,166.82995600000001 -46.003891000000003,166.854674999999986 -45.994163999999998,166.886932000000002 -45.990279999999998,166.943297999999999 -45.956108,166.949127000000004 -45.950836000000002,166.946930000000009 -45.945273999999998,166.939147999999989 -45.944716999999997,166.929687999999999 -45.947220000000002,166.836365 -45.981383999999998,166.828033000000005 -45.984444000000003,166.791350999999992 -46.005004999999997,166.785797000000002 -46.010283999999999,166.781096999999988 -46.016396,166.759308000000004 -46.035553,166.762969999999996 -46.038387,166.764969000000008 -46.042392999999997,166.763656999999995 -46.047221999999998,166.760162000000008 -46.050392000000002,166.740982000000002 -46.066059000000003,166.737793000000011 -46.066558999999998,166.670532000000009 -46.087218999999997,166.615783999999991 -46.090836000000003,166.613585999999998 -46.086387999999999,166.617461999999989 -46.059722999999998,166.621062999999992 -46.052498,166.640807999999993 -46.015006999999997,166.661652000000004 -45.991942999999999,166.625792999999987 -45.967216,166.492461999999989 -46.013061999999998,166.484406000000007 -46.014449999999997,166.474975999999998 -46.002785000000003,166.467194000000006 -45.990555,166.465239999999994 -45.983055,166.464690999999988 -45.839438999999999,166.468841999999995 -45.823059,166.472473000000008 -45.815834000000002,166.476898000000006 -45.809722999999998,166.537475999999998 -45.798889000000003,166.613861000000014 -45.801108999999997,166.652190999999988 -45.800277999999999,166.699982000000006 -45.798889000000003,166.881348000000003 -45.779998999999997,166.890807999999993 -45.777779000000002,166.974120999999997 -45.735000999999997,166.987182999999987 -45.709724,166.923034999999999 -45.705832999999998,166.912475999999998 -45.705275999999998,166.887482000000006 -45.705002,166.854126000000008 -45.707779000000002,166.825806 -45.714722000000002,166.809417999999994 -45.721381999999998,166.787475999999998 -45.689995000000003,166.775817999999987 -45.662773,166.81153900000001 -45.617942999999997,166.811217999999997 -45.613109999999999,166.812531000000007 -45.608111999999998,166.816710999999998 -45.605606000000002,166.869689999999991 -45.588779000000002,166.881026999999989 -45.586112999999997,166.88736 -45.585278000000002,166.895203000000009 -45.585608999999998,166.901366999999993 -45.587108999999998,166.912871999999993 -45.590946000000002,166.980255 -45.578612999999997,166.991913000000011 -45.580002,167.0 -45.576949999999997,167.005829000000006 -45.571671000000002,167.032470999999987 -45.527779000000002,167.041350999999992 -45.501396,166.989685000000009 -45.519165,166.891693000000004 -45.544724000000002,166.796875 -45.569389,166.791199000000006 -45.570720999999999,166.784836000000013 -45.571556,166.777023000000014 -45.571219999999997,166.710509999999999 -45.579445,166.704407000000003 -45.574447999999997,166.697204999999997 -45.554718,166.699127000000004 -45.546669,166.757476999999994 -45.425277999999999,166.801361000000014 -45.353614999999998,166.821625000000012 -45.320557,166.86883499999999 -45.279724000000002,166.880797999999999 -45.279167,167.008330999999998 -45.341667,167.038299999999992 -45.357779999999998,167.146941999999996 -45.427222999999998,167.16885400000001 -45.472496,167.205230999999998 -45.477775999999999,167.211914000000007 -45.475273,167.21414200000001 -45.467216,167.209411999999986 -45.461387999999999,167.173584000000005 -45.422775,167.158019999999993 -45.406661999999997,167.134978999999987 -45.386116,167.12912 -45.381385999999999,167.115509000000003 -45.372222999999998,167.097747999999996 -45.366112,167.087463000000014 -45.363616999999998,167.061645999999996 -45.345001000000003,167.051085999999998 -45.333328000000002,167.081421000000006 -45.325333,167.08407600000001 -45.321666999999998,167.092407000000009 -45.316498000000003,167.097243999999989 -45.314498999999998,167.114227 -45.310333,167.163574000000011 -45.302833999999997,167.169922000000014 -45.302998000000002,167.173584000000005 -45.305999999999997,167.176422000000002 -45.309330000000003,167.17756700000001 -45.313834999999997,167.212738000000002 -45.313332000000003,167.218841999999995 -45.318336000000002,167.232178000000005 -45.327224999999999,167.239685000000009 -45.331116000000002,167.248566000000011 -45.334167,167.260254000000003 -45.335830999999999,167.270813000000004 -45.334442000000003,167.301636000000002 -45.329445,167.309692000000013 -45.326110999999997,167.307738999999998 -45.318610999999997,167.300262000000004 -45.314444999999999,167.19464099999999 -45.271445999999997,167.138290000000012 -45.268943999999998,167.099471999999992 -45.272114000000002,167.094146999999992 -45.271278000000002,167.08964499999999 -45.268776000000003,167.002196999999995 -45.201110999999997,166.996917999999994 -45.145836000000003,167.146362000000011 -45.001671000000002,167.198577999999998 -44.956108,167.204407000000003 -44.951110999999997,167.228302000000014 -44.930832000000002,167.24105800000001 -44.921387000000003,167.260528999999991 -44.907501000000003,167.267486999999988 -44.903053,167.312744000000009 -44.875,167.320800999999989 -44.871383999999999,167.393462999999997 -44.862999000000002,167.398987000000005 -44.861496000000002,167.404312000000004 -44.863498999999997,167.421798999999993 -44.894168999999998,167.422974000000011 -44.898665999999999,167.420638999999994 -44.908496999999997,167.417968999999999 -44.912166999999997,167.440796000000006 -44.928612,167.439972000000012 -44.9375,167.441924999999998 -44.945,167.459686000000005 -44.99472,167.497741999999988 -45.003891000000003,167.507202000000007 -45.001396,167.508224000000013 -45.0,167.511658000000011 -44.995277000000002,167.511108000000007 -44.986946000000003,167.47908000000001 -44.903446000000002,167.465912000000003 -44.876441999999997,167.462752999999992 -44.867947,167.461578000000003 -44.863444999999999,167.460097999999988 -44.853946999999998,167.459411999999986 -44.843944999999998,167.459914999999995 -44.838444000000003,167.448577999999998 -44.795279999999998,167.453033000000005 -44.788894999999997,167.458587999999992 -44.783614999999998,167.59970100000001 -44.683883999999999,167.743010999999996 -44.611671,167.838866999999993 -44.498610999999997,167.850249999999988 -44.488052000000003,167.949982000000006 -44.40361,167.963593000000003 -44.395004,168.034973000000008 -44.353614999999998,168.12802099999999 -44.316947999999996,168.141662999999994 -44.308052000000004,168.144713999999993 -44.300834999999999,168.144135000000006 -44.292503000000004,168.124099999999999 -44.251404,168.143311000000011 -44.253059,168.153594999999996 -44.251396,168.169708000000014 -44.24472,168.288299999999992 -44.172775,168.29385400000001 -44.167503000000004,168.336638999999991 -44.123885999999999,168.339966000000004 -44.116661,168.337738000000002 -44.109169,168.334411999999986 -44.102783000000002,168.336365 -44.094444000000003,168.369689999999991 -44.043334999999999,168.374968999999993 -44.037781000000003,168.383026 -44.034447,168.402771 -44.029724000000002,168.672211000000004 -43.987777999999999,168.676909999999992 -43.993614,168.683043999999995 -43.998336999999999,168.690246999999999 -44.002228000000002,168.715239999999994 -44.012222,168.723021999999986 -44.012504999999997,168.753875999999991 -44.010002,168.764160000000004 -44.008614,168.824401999999992 -43.988334999999999,168.858582000000013 -43.976661999999997,168.866364000000004 -43.973328000000002,168.879669000000007 -43.964447,168.885254000000003 -43.959167,168.961914000000007 -43.90361,169.080765000000014 -43.848472999999998,169.142212 -43.794167000000002,169.224396000000013 -43.743332000000002,169.271636999999998 -43.722496,169.387482000000006 -43.679169000000002,169.491318000000007 -43.643467,169.539153999999996 -43.633614,169.62661700000001 -43.613892,169.64498900000001 -43.608893999999999,169.652771 -43.605559999999997,169.660521999999986 -43.601944000000003,169.721619000000004 -43.573334000000003,169.728302000000014 -43.568893000000003,169.739136000000002 -43.558052000000004,169.767486999999988 -43.522773999999998,169.790526999999997 -43.496665999999998,169.871062999999992 -43.406661999999997,169.884154999999993 -43.397781000000002,169.961638999999991 -43.371941,170.021911999999986 -43.352500999999997,170.028594999999996 -43.347777999999998,170.033874999999995 -43.342498999999997,170.038025000000005 -43.336112999999997,170.049408 -43.306946000000003,170.111358999999993 -43.254173000000002,170.288299999999992 -43.107779999999998,170.418029999999987 -43.052498,170.523041000000006 -43.010559,170.531921000000011 -43.008057,170.583037999999988 -42.990555,170.674347000000012 -42.958739999999999,170.704407000000003 -42.945830999999998,170.750549000000007 -42.924720999999998,170.781096999999988 -42.910553,170.794128 -42.901389999999999,171.065796000000006 -42.648055999999997,171.108306999999996 -42.608055,171.149719000000005 -42.563614,171.153594999999996 -42.55722,171.196075000000008 -42.476661999999997,171.225799999999992 -42.433608999999997,171.230255 -42.40889,171.235779000000008 -42.394165,171.247467 -42.375,171.260254000000003 -42.366112,171.270537999999988 -42.355003000000004,171.297760000000011 -42.310279999999999,171.304413000000011 -42.296669,171.309692000000013 -42.281944000000003,171.31665000000001 -42.249724999999998,171.321075000000008 -42.224716,171.322754000000003 -42.207222000000002,171.324401999999992 -42.18972,171.326355000000007 -42.172226000000002,171.329131999999987 -42.155830000000002,171.343841999999995 -42.110832000000002,171.361084000000005 -42.067779999999999,171.461638999999991 -41.859726000000002,171.51080300000001 -41.764449999999997,171.533051 -41.766396,171.557738999999998 -41.766663,171.569121999999993 -41.766112999999997,171.650817999999987 -41.761391000000003,171.663025000000005 -41.757781999999999,171.685790999999995 -41.746948000000003,171.790526999999997 -41.696387999999999,171.85522499999999 -41.652779000000002,171.886658000000011 -41.629997000000003,171.942200000000014 -41.550277999999999,172.02276599999999 -41.443053999999997,172.053864000000004 -41.417503000000004,172.064972000000012 -41.40361,172.122192000000013 -41.277779000000002,172.111633000000012 -41.236114999999998,172.10522499999999 -41.153053,172.106078999999994 -40.911385000000003,172.10635400000001 -40.893059,172.108856000000003 -40.885559,172.113861000000014 -40.879997000000003,172.186645999999996 -40.813332000000003,172.218567000000007 -40.785834999999999,172.22470100000001 -40.781109,172.255248999999992 -40.776947,172.263884999999988 -40.774169999999998,172.271362000000011 -40.770553999999997,172.299408 -40.755004999999997,172.348297000000002 -40.727493000000003,172.382721000000004 -40.698334000000003,172.426909999999992 -40.657775999999998,172.478302000000014 -40.613892,172.513320999999991 -40.598441999999999,172.517639000000003 -40.596783000000002,172.523482999999999 -40.597946,172.522644000000014 -40.602943000000003,172.521132999999992 -40.607277000000003,172.520813000000004 -40.625,172.519440000000003 -40.631385999999999,172.525542999999999 -40.6325,172.534149000000014 -40.631667999999998,172.571899000000002 -40.617775000000002,172.596343999999988 -40.601394999999997,172.62802099999999 -40.573891000000003,172.631621999999993 -40.567222999999998,172.631621999999993 -40.559998,172.608582000000013 -40.556946000000003,172.601348999999999 -40.558891000000003,172.597014999999999 -40.553333000000002,172.589690999999988 -40.558838000000002,172.583862000000011 -40.560004999999997,172.581024000000014 -40.556671,172.581848000000008 -40.551665999999997,172.589843999999999 -40.541172000000003,172.627166999999986 -40.511947999999997,172.633330999999998 -40.509171000000002,172.661376999999987 -40.502785000000003,172.712188999999995 -40.495552000000004,172.817748999999992 -40.504173000000002,172.861358999999993 -40.507781999999999,172.981628 -40.527222000000002,172.991332999999997 -40.529167,172.989959999999996 -40.53389,172.978026999999997 -40.53389,172.945251000000013 -40.530830000000002,172.895263999999997 -40.524445,172.797211000000004 -40.516112999999997,172.739959999999996 -40.516945,172.731628 -40.519722000000002,172.656921000000011 -40.653328000000002,172.701355000000007 -40.748336999999999,172.855804000000006 -40.853057999999997,172.865509000000003 -40.853057999999997,172.875244000000009 -40.851112,172.907195999999999 -40.828887999999999,172.930266999999986 -40.802222999999998,172.935241999999988 -40.796669,172.976623999999987 -40.781944000000003,172.985229000000004 -40.781112999999998,173.002196999999995 -40.786667,173.008330999999998 -40.791114999999998,173.013306 -40.796669,173.020537999999988 -40.809722999999998,173.051085999999998 -40.869446000000003,173.059692000000013 -40.962775999999998,173.059692000000013 -40.971938999999999,173.056091000000009 -40.978606999999997,173.031646999999992 -41.027495999999999,173.075806 -41.291114999999998,173.079680999999994 -41.297500999999997,173.085784999999987 -41.302222999999998,173.105529999999987 -41.313332000000003,173.168029999999987 -41.316108999999997,173.188873 -41.313332000000003,173.198853000000014 -41.311385999999999,173.207184000000012 -41.308608999999997,173.272217000000012 -41.274445,173.278320000000008 -41.269722000000002,173.32607999999999 -41.222496,173.340515000000011 -41.205832999999998,173.351623999999987 -41.195549,173.377166999999986 -41.178055,173.426085999999998 -41.150275999999998,173.598021999999986 -41.053612,173.606628 -41.052498,173.639709000000011 -41.073616,173.672760000000011 -41.070557,173.720519999999993 -41.060279999999999,173.727753000000007 -41.056389000000003,173.739959999999996 -41.047226000000002,173.744689999999991 -41.032501000000003,173.743286000000012 -41.024169999999998,173.738281 -41.018608,173.72744800000001 -41.019447,173.718841999999995 -41.022499000000003,173.696930000000009 -41.033614999999998,173.690796000000006 -41.038338000000003,173.682189999999991 -41.041114999999998,173.676085999999998 -41.036391999999999,173.673584000000005 -41.029167,173.674682999999987 -41.020836000000003,173.678314 -41.014449999999997,173.696625000000012 -41.000281999999999,173.751373 -40.976944000000003,173.800262000000004 -40.969161999999997,173.913299999999992 -40.931671,173.984679999999997 -40.896949999999997,173.994415000000004 -40.896667,174.02276599999999 -40.913055,174.027771 -40.91861,174.030272999999994 -40.925834999999999,174.03054800000001 -40.935271999999998,174.02941899999999 -40.943610999999997,174.022217000000012 -40.947220000000002,173.929961999999989 -40.992226000000002,173.832184000000012 -40.995002999999997,173.821075000000008 -40.994163999999998,173.782195999999999 -41.009171000000002,173.778594999999996 -41.015555999999997,173.769713999999993 -41.09861,173.778594999999996 -41.114449,173.794433999999995 -41.109444000000003,173.822204999999997 -41.080832999999998,173.821899000000002 -41.062218,173.836638999999991 -41.055,173.846343999999988 -41.053055,173.93081699999999 -41.049446000000003,173.946625000000012 -41.055832000000002,173.953033000000005 -41.060555,173.917755 -41.087502,173.887482000000006 -41.103332999999999,173.848846000000009 -41.144165,173.820526 -41.245834000000002,173.763306 -41.267502,173.76080300000001 -41.273055999999997,173.775817999999987 -41.289726000000002,173.788025000000005 -41.290557999999997,173.806365999999997 -41.289444000000003,174.03720100000001 -41.218330000000002,174.09970100000001 -41.198334000000003,174.128845000000013 -41.187218,174.133605999999986 -41.181671,174.133605999999986 -41.176108999999997,174.126068000000004 -41.174171,174.008605999999986 -41.175277999999999,174.001099000000011 -41.178885999999999,174.001373 -41.186385999999999,174.000274999999988 -41.194716999999997,173.993010999999996 -41.198334000000003,173.981902999999988 -41.199440000000003,173.932738999999998 -41.199997000000003,173.908324999999991 -41.199997000000003,173.899719000000005 -41.197495000000004,173.893585000000002 -41.192771999999998,173.887206999999989 -41.169724000000002,173.88580300000001 -41.161667,173.888031000000012 -41.154167,173.89776599999999 -41.133614,173.902466000000004 -41.128334000000002,174.032745000000006 -40.999724999999998,174.084411999999986 -41.021385000000002,174.094116000000014 -41.023330999999999,174.246338000000009 -41.044724000000002,174.258330999999998 -41.035277999999998,174.299408 -41.003616,174.315246999999999 -41.000557,174.323853000000014 -41.003334000000002,174.323853000000014 -41.010834000000003,174.321625000000012 -41.018059,174.209960999999993 -41.197495000000004,174.161376999999987 -41.225555,174.152771 -41.226661999999997,174.114685000000009 -41.231383999999998,174.052185000000009 -41.235000999999997,174.02664200000001 -41.236114999999998,174.053864000000004 -41.254173000000002,174.206359999999989 -41.269447,174.214966000000004 -41.266663,174.291655999999989 -41.238892,174.303588999999988 -41.229720999999998,174.320800999999989 -41.220275999999998,174.326904000000013 -41.222771000000002,174.288574000000011 -41.276947,174.249114999999989 -41.322502,174.241637999999995 -41.326110999999997,174.231902999999988 -41.328055999999997,174.208587999999992 -41.329445,174.193572999999986 -41.320281999999999,174.155243000000013 -41.305,174.148041000000006 -41.308608999999997,174.111633000000012 -41.336661999999997,174.052764999999994 -41.421112,174.049133000000012 -41.427779999999998,174.044433999999995 -41.442497000000003,174.045806999999996 -41.450836000000002,174.049988000000013 -41.466392999999997,174.063873 -41.493057,174.084136999999998 -41.526108,174.097473000000008 -41.519447,174.096069 -41.511116,174.100799999999992 -41.505561999999998,174.108306999999996 -41.509171000000002,174.114685000000009 -41.513893000000003,174.125792999999987 -41.523887999999999,174.151093000000003 -41.551392,174.176085999999998 -41.578612999999997,174.178864000000004 -41.586112999999997,174.179961999999989 -41.594444000000003,174.179137999999995 -41.602783000000002,174.174133000000012 -41.608336999999999,174.163299999999992 -41.618606999999997,174.157195999999999 -41.623328999999998,174.193024000000008 -41.685555,174.287749999999988 -41.734444000000003,174.291655999999989 -41.740836999999999,174.289153999999996 -41.748336999999999,174.283324999999991 -41.762222,174.236358999999993 -41.837218999999997,174.212188999999995 -41.865279999999998,174.201355000000007 -41.875557,174.184143000000006 -41.890555999999997,174.17804000000001 -41.895004,174.164703000000003 -41.90361,174.157195999999999 -41.907218999999998,174.143585000000002 -41.915832999999999,174.088561999999996 -41.957779000000002,174.009154999999993 -42.027495999999999,173.979674999999986 -42.061110999999997,173.965239999999994 -42.086945,173.959136999999998 -42.100838000000003,173.954407000000003 -42.115555,173.953307999999993 -42.123885999999999,173.953583000000009 -42.133330999999998,173.956359999999989 -42.166389000000002,173.933319000000012 -42.196944999999999,173.928314 -42.202499000000003,173.884154999999993 -42.243614,173.87802099999999 -42.248055,173.870513999999986 -42.251944999999999,173.86300700000001 -42.255561999999998,173.834686000000005 -42.271385000000002,173.801361000000014 -42.293059999999997,173.794983000000002 -42.297500999999997,173.568572999999986 -42.476944000000003,173.558593999999999 -42.487777999999999,173.541350999999992 -42.511947999999997,173.533874999999995 -42.525002,173.531372000000005 -42.532218999999998,173.500823999999994 -42.599724000000002,173.480804000000006 -42.621941,173.466063999999989 -42.656944000000003,173.459960999999993 -42.670836999999999,173.448853000000014 -42.690277000000002,173.387755999999996 -42.793616999999998,173.351623999999987 -42.840836000000003,173.328033000000005 -42.898887999999999,173.328033000000005 -42.906387000000002,173.325806 -42.913612,173.285521999999986 -42.958053999999997,173.106902999999988 -43.057777000000002,173.099396000000013 -43.061385999999999,173.090515000000011 -43.064444999999999,173.026366999999993 -43.081947,172.975799999999992 -43.09111,172.953033000000005 -43.092773,172.935516000000007 -43.098334999999999,172.92025799999999 -43.105834999999999,172.838012999999989 -43.148055999999997,172.818024000000008 -43.160828000000002,172.797760000000011 -43.183059999999998,172.772217000000012 -43.219718999999998,172.76080300000001 -43.239165999999997,172.758026 -43.246665999999998,172.726944000000003 -43.415539000000003,172.726593000000008 -43.423355,172.775817999999987 -43.612220999999998,172.894135000000006 -43.61972,172.90554800000001 -43.620834000000002,173.059692000000013 -43.653053,173.100525000000005 -43.697220000000002,173.105529999999987 -43.703612999999997,173.114409999999992 -43.741385999999999,173.116913000000011 -43.762504999999997,173.116913000000011 -43.769996999999996,173.112182999999987 -43.825004999999997,173.110779000000008 -43.833328000000002,173.091644000000002 -43.856392,173.058593999999999 -43.871108999999997,173.006088000000005 -43.869498999999998,173.002242999999993 -43.868999000000002,172.999236999999994 -43.865668999999997,172.990905999999995 -43.849670000000003,172.965239999999994 -43.802222999999998,172.961365 -43.764449999999997,172.958862000000011 -43.756950000000003,172.951355000000007 -43.755279999999999,172.939972000000012 -43.756110999999997,172.927185000000009 -43.766112999999997,172.921906000000007 -43.771667,172.920532000000009 -43.824173000000002,172.920532000000009 -43.833328000000002,172.917572000000007 -43.869221000000003,172.923584000000005 -43.875884999999997,172.931243999999992 -43.881390000000003,172.937408000000005 -43.887886000000002,172.938904000000008 -43.892384,172.938247999999987 -43.896220999999997,172.870789000000002 -43.904442000000003,172.861633000000012 -43.901389999999999,172.811919999999986 -43.882216999999997,172.804413000000011 -43.878334000000002,172.745789000000002 -43.837775999999998,172.740783999999991 -43.832222000000002,172.736908 -43.825836000000002,172.715239999999994 -43.808334000000002,172.642761000000007 -43.772224,172.513031000000012 -43.729438999999999,172.495238999999998 -43.723885000000003,172.483582000000013 -43.722771000000002,172.472197999999992 -43.72361,172.424988000000013 -43.733612,172.413299999999992 -43.743614,172.390258999999986 -43.763893000000003,172.384978999999987 -43.77861,172.382445999999987 -43.795006,172.383330999999998 -43.8125,172.384704999999997 -43.820838999999999,172.394713999999993 -43.850281000000003,172.393311000000011 -43.858612,172.386932000000002 -43.863334999999999,172.367461999999989 -43.867775000000002,172.297211000000004 -43.881110999999997,172.286925999999994 -43.883057,172.275542999999999 -43.883887999999999,172.189696999999995 -43.909163999999997,172.050812000000008 -43.965279000000002,171.978577 -43.995834000000002,171.955230999999998 -44.006667999999998,171.941070999999994 -44.015006999999997,171.782470999999987 -44.076949999999997,171.654694000000006 -44.122498,171.583587999999992 -44.153885000000002,171.547211000000004 -44.173889000000003,171.538483000000014 -44.178775999999999,171.355559999999997 -44.285491999999998,171.346465999999992 -44.292186999999998,171.342467999999997 -44.295555,171.319976999999994 -44.316391000000003,171.293578999999994 -44.343612999999998,171.285521999999986 -44.356392,171.278594999999996 -44.369995000000003,171.271911999999986 -44.383887999999999,171.269135000000006 -44.391112999999997,171.275542999999999 -44.395836000000003,171.279144000000002 -44.402495999999999,171.278594999999996 -44.420836999999999,171.277190999999988 -44.428885999999999,171.275542999999999 -44.437218,171.26998900000001 -44.451942000000003,171.263306 -44.465553,171.254974000000004 -44.478332999999999,171.214966000000004 -44.533057999999997,171.208313000000004 -44.537506,171.200531000000012 -44.541114999999998,171.196075000000008 -44.560279999999999,171.192200000000014 -44.645836000000003,171.193024000000008 -44.663330000000002,171.20495600000001 -44.700279000000002,171.21414200000001 -44.739165999999997,171.215239999999994 -44.747498,171.207184000000012 -44.851112,171.198577999999998 -44.919998,171.195800999999989 -44.927498,171.185241999999988 -44.938332000000003)))"
+    }
+  },
+  {
+    "pk": 1,
+    "model": "geoapp.city",
+    "fields": {
+      "name": "Houston",
+      "point": "SRID=4326;POINT (-95.363151 29.763374)"
+    }
+  },
+  {
+    "pk": 2,
+    "model": "geoapp.city",
+    "fields": {
+      "name": "Dallas",
+      "point": "SRID=4326;POINT (-96.801611 32.782057)"
+    }
+  },
+  {
+    "pk": 3,
+    "model": "geoapp.city",
+    "fields": {
+      "name": "Oklahoma City",
+      "point": "SRID=4326;POINT (-97.521157 34.464642)"
+    }
+  },
+  {
+    "pk": 4,
+    "model": "geoapp.city",
+    "fields": {
+      "name": "Wellington",
+      "point": "SRID=4326;POINT (174.783117 -41.315268)"
+    }
+  },
+  {
+    "pk": 5,
+    "model": "geoapp.city",
+    "fields": {
+      "name": "Pueblo",
+      "point": "SRID=4326;POINT (-104.609252 38.255001)"
+    }
+  },
+  {
+    "pk": 6,
+    "model": "geoapp.city",
+    "fields": {
+      "name": "Lawrence",
+      "point": "SRID=4326;POINT (-95.235060 38.971823)"
+    }
+  },
+  {
+    "pk": 7,
+    "model": "geoapp.city",
+    "fields": {
+      "name": "Chicago",
+      "point": "SRID=4326;POINT (-87.650175 41.850385)"
+    }
+  },
+  {
+    "pk": 8,
+    "model": "geoapp.city",
+    "fields": {
+      "name": "Victoria",
+      "point": "SRID=4326;POINT (-123.305196 48.462611)"
+    }
+  },
+  {
+    "pk": 1,
+    "model": "geoapp.state",
+    "fields": {
+      "name": "Colorado",
+      "poly": "SRID=4326;POLYGON ((-107.9184209999999800 41.0020359999999970, -107.6913358243141800 41.0021042503422490, -107.6256240000000000 41.0021240000000020, -107.5215053632723100 41.0025067105257720, -107.3674429999999900 41.0030730000000010, -107.3177944624011200 41.0029672133671140, -107.3053129562196700 41.0029406188977600, -107.2411939999999900 41.0028039999999980, -107.0006060000000000 41.0034439999999950, -106.8577729999999900 41.0026629999999910, -106.4538589999999900 41.0020569999999940, -106.4395630000000100 41.0019780000000010, -106.4374190000000100 41.0017949999999940, -106.4309500000000000 41.0017519999999960, -106.3918520000000000 41.0011760000000010, -106.3863560000000100 41.0011439999999960, -106.3211649999999900 40.9991229999999970, -106.2175730000000000 40.9977340000000010, -106.1946242545105400 40.9976261471179200, -106.1905405794911800 40.9976069549524670, -106.0611809999999900 40.9969990000000020, -105.7642468572674100 40.9968975561793200, -105.7304210000000100 40.9968860000000030, -105.7248040000000100 40.9969100000000000, -105.5544177044212800 40.9973907108230620, -105.4122207031675800 40.9977918911954480, -105.2771379999999800 40.9981730000000010, -105.2565270000000100 40.9981909999999980, -105.2547790000000000 40.9982100000000000, -105.1734357616781100 40.9981770152523170, -104.9433706805682100 40.9980837236793720, -104.8552730000000000 40.9980479999999970, -104.8295039999999900 40.9992700000000030, -104.6759990000000000 41.0009570000000000, -104.4971489999999900 41.0018280000000030, -104.4970580000000000 41.0018049999999970, -104.4676719999999800 41.0014729999999970, -104.2146920000000000 41.0016570000000020, -104.2141910000000000 41.0015679999999990, -104.2114730000000000 41.0015909999999980, -104.1235859999999900 41.0016259999999950, -104.1045900000000000 41.0015429999999910, -104.0860679999999800 41.0015629999999970, -104.0669609999999900 41.0015039999999970, -104.0532489999999900 41.0014059999999960, -104.0392380000000000 41.0015020000000020, -104.0233829999999800 41.0018870000000040, -104.0182230000000100 41.0016170000000030, -104.0108048867797200 41.0016166745085400, -103.9726419999999800 41.0016150000000010, -103.9713730000000000 41.0015240000000030, -103.9535250000000000 41.0015959999999990, -103.9063240000000000 41.0013870000000010, -103.8962070000000000 41.0017500000000010, -103.8779670000000000 41.0016729999999900, -103.8584489999999900 41.0016809999999980, -103.7504979999999900 41.0020540000000010, -103.5745220000000000 41.0017210000000030, -103.4974469999999900 41.0016350000000000, -103.4866970000000100 41.0019139999999990, -103.4219750000000000 41.0020069999999990, -103.4219250000000000 41.0019689999999950, -103.3969909999999900 41.0025580000000010, -103.3653139999999800 41.0018460000000000, -103.3629790000000000 41.0018439999999910, -103.0778040000000000 41.0022980000000030, -103.0765360000000000 41.0022530000000030, -103.0595379999999900 41.0023679999999970, -103.0579980000000000 41.0023679999999970, -103.0434439999999900 41.0023440000000010, -103.0387040000000000 41.0022510000000010, -103.0020260000000000 41.0024859999999980, -103.0001019999999800 41.0024000000000020, -102.9826900000000100 41.0021569999999970, -102.9814830000000000 41.0021119999999970, -102.9636689999999800 41.0021859999999950, -102.9625220000000100 41.0020719999999980, -102.9607060000000000 41.0020589999999960, -102.9596239999999900 41.0020949999999970, -102.9448300000000000 41.0023029999999980, -102.9431090000000100 41.0020510000000020, -102.9255680000000000 41.0022799999999990, -102.9240290000000000 41.0021419999999990, -102.9065469999999900 41.0022759999999950, -102.9047960000000000 41.0022069999999990, -102.8874069999999800 41.0021780000000010, -102.8857460000000000 41.0021309999999990, -102.8678220000000000 41.0021830000000020, -102.8657839999999900 41.0019879999999970, -102.8492629999999900 41.0023010000000030, -102.8464550000000100 41.0022560000000030, -102.8303029999999900 41.0023509999999970, -102.8272800000000000 41.0021429999999970, -102.7735460000000000 41.0024140000000020, -102.7667230000000000 41.0022749999999900, -102.7546170000000000 41.0023609999999930, -102.7396239999999900 41.0022299999999970, -102.6534629999999900 41.0023320000000030, -102.6210330000000000 41.0025970000000020, -102.5786959999999900 41.0022910000000000, -102.5757380000000000 41.0022680000000010, -102.5754960000000000 41.0022000000000020, -102.5660479999999900 41.0022000000000020, -102.5567889999999900 41.0022189999999970, -102.5177010715824500 41.0023473358779430, -102.4879549999999900 41.0024449999999940, -102.4705369999999800 41.0023819999999970, -102.4692230000000000 41.0024239999999980, -102.4603345936969100 41.0024118023655500, -102.3877509894849600 41.0023121952773270, -102.3803729919328400 41.0023020703894620, -102.3795930000000000 41.0023010000000030, -102.3640659999999900 41.0021739999999970, -102.2928330000000000 41.0022069999999990, -102.2926219999999900 41.0022299999999970, -102.2925530000000000 41.0022069999999990, -102.2913540000000000 41.0022069999999990, -102.2778034555739900 41.0022337435695480, -102.2720999999999900 41.0022450000000020, -102.2678119999999900 41.0023830000000020, -102.2319310000000000 41.0023270000000010, -102.2121999999999800 41.0024620000000010, -102.2093610000000000 41.0024420000000020, -102.2090839362510100 41.0024402293320020, -102.2077760551977500 41.0024318708833140, -102.1912100000000000 41.0023259999999960, -102.1249720000000000 41.0023380000000020, -102.0705980000000000 41.0024230000000000, -102.0516140000000000 41.0023770000000030, -102.0512919999999900 40.7495910000000020, -102.0516344326070000 40.5821295926172280, -102.0517250000000000 40.5378389999999910, -102.0515190000000000 40.5200940000000000, -102.0514649999999900 40.4400079999999990, -102.0518400000000000 40.3963960000000030, -102.0515719999999900 40.3930799999999980, -102.0517979999999900 40.3600690000000030, -102.0515855426165400 40.3506461457410240, -102.0513090000000000 40.3383809999999980, -102.0519220000000000 40.2353439999999980, -102.0518939999999900 40.2291929999999950, -102.0519089999999900 40.1626740000000030, -102.0520010000000000 40.1483589999999990, -102.0518526008886700 40.0644696175368220, -102.0517440000000000 40.0030780000000020, -102.0517155646578700 39.9781730274562650, -102.0515690000000000 39.8498050000000030, -102.0513629999999900 39.8434710000000010, -102.0513179999999900 39.8333110000000020, -102.0512540000000000 39.8189920000000010, -102.0505939999999900 39.6755939999999900, -102.0500990000000000 39.6538120000000020, -102.0504219999999800 39.6460479999999930, -102.0499540000000000 39.5923310000000010, -102.0498059999999900 39.5740580000000010, -102.0495539999999900 39.5389320000000030, -102.0496730000000000 39.5366909999999980, -102.0496790000000000 39.5061830000000000, -102.0493690000000000 39.4233330000000000, -102.0493700000000000 39.4182100000000020, -102.0491669999999800 39.4035969999999980, -102.0489599999999800 39.3737119999999900, -102.0484490000000100 39.3031379999999900, -102.0472500000000100 39.1370200000000000, -102.0471339999999900 39.1297009999999970, -102.0465709999999900 39.0470380000000010, -102.0453879999999900 38.8133919999999930, -102.0453340000000000 38.7994630000000030, -102.0454479999999900 38.7834530000000020, -102.0453710000000000 38.7700639999999980, -102.0452870000000000 38.7555279999999980, -102.0453750000000100 38.7543389999999950, -102.0452119999999900 38.6975669999999990, -102.0451560000000100 38.6885550000000010, -102.0451269999999900 38.6867250000000030, -102.0451600000000000 38.6752210000000010, -102.0451020000000000 38.6749459999999980, -102.0450740000000000 38.6696170000000020, -102.0452880000000000 38.6152489999999990, -102.0452109999999900 38.5816089999999930, -102.0451889999999800 38.5587319999999920, -102.0452229999999900 38.5437969999999980, -102.0451120000000000 38.5237839999999990, -102.0452619999999900 38.5055319999999950, -102.0452629999999900 38.5053950000000000, -102.0453239999999800 38.4536469999999970, -102.0449360000000100 38.4196800000000000, -102.0444419999999900 38.4158019999999990, -102.0449440000000000 38.3844190000000010, -102.0446130000000000 38.3123239999999970, -102.0445680000000000 38.2688190000000010, -102.0443980000000000 38.2500149999999980, -102.0442510000000000 38.1417779999999950, -102.0445353236236500 38.1276753800285280, -102.0445890000000000 38.1250129999999960, -102.0445402773320500 38.1232621932310920, -102.0442550000000100 38.1130109999999930, -102.0446235449346800 38.0490802965374900, -102.0446310070721800 38.0477858554663160, -102.0446440000000100 38.0455320000000010, -102.0446200858831200 38.0420217065706370, -102.0445393420861100 38.0301695264644910, -102.0438440000000100 37.9281019999999960, -102.0438450000000000 37.9261350000000020, -102.0432189999999900 37.8679289999999900, -102.0430329999999900 37.8241459999999990, -102.0429530000000000 37.8035349999999970, -102.0426680000000100 37.7887580000000010, -102.0421580000000000 37.7601640000000030, -102.0418760000000000 37.7238750000000000, -102.0415740000000000 37.6804360000000000, -102.0416940000000100 37.6656809999999990, -102.0415819999999900 37.6544949999999970, -102.0415850000000000 37.6442819999999970, -102.0416180000000000 37.6078680000000030, -102.0417794058394900 37.5786915552958260, -102.0418940000000000 37.5579770000000010, -102.0418990000000000 37.5411860000000030, -102.0420159999999900 37.5352609999999980, -102.0417860000000000 37.5060659999999970, -102.0418009999999900 37.4694879999999980, -102.0417549999999900 37.4348549999999920, -102.0416690000000000 37.4347399999999980, -102.0416759999999800 37.4098979999999910, -102.0415240000000000 37.3750179999999970, -102.0420890000000000 37.3528189999999970, -102.0419740000000000 37.3526129999999980, -102.0418169999999900 37.3094899999999970, -102.0416640000000000 37.2976499999999900, -102.0419630000000000 37.2581640000000010, -102.0420020000000000 37.1417440000000030, -102.0421350000000000 37.1250209999999970, -102.0420920000000000 37.1250209999999970, -102.0418089999999900 37.1119729999999990, -102.0419830000000000 37.1065510000000030, -102.0419199999999900 37.0350830000000000, -102.0417490000000000 37.0343969999999980, -102.0419210000000000 37.0321780000000020, -102.0419500000000000 37.0308050000000010, -102.0419519999999900 37.0247419999999960, -102.0422400000000100 36.9930829999999990, -102.0545030000000000 36.9931089999999970, -102.1842710000000000 36.9935929999999970, -102.2083160000000000 36.9937299999999990, -102.2607890000000000 36.9943880000000010, -102.2703456818352900 36.9943999333374620, -102.3075936504973800 36.9944464445206690, -102.3552880000000000 36.9945059999999940, -102.3553670000000000 36.9945749999999980, -102.6981420000000000 36.9951489999999980, -102.7420599999999800 36.9976890000000010, -102.7598600000000000 37.0000190000000020, -102.7785689999999900 36.9992420000000020, -102.8067620000000100 37.0000190000000020, -102.8146160000000000 37.0007829999999980, -102.8419890000000000 36.9995979999999990, -102.9796130000000000 36.9985489999999970, -102.9858069999999900 36.9985709999999980, -102.9869760000000000 36.9985240000000030, -103.0021990000000000 37.0001040000000000, -103.0861049694139500 37.0001738656940380, -103.1054053653286500 37.0001899364881130, -103.1559220000000000 37.0002319999999970, -103.2006317284721000 37.0000603865096880, -103.3271777694062600 36.9995746531243130, -103.4256788724330500 36.9991965672206930, -103.7332470000000100 36.9980159999999930, -103.7343639999999900 36.9980410000000010, -104.0078549999999900 36.9962390000000030, -104.2154754884639700 36.9948744321965890, -104.2505359999999800 36.9946440000000010, -104.2975706429598400 36.9940532503817470, -104.3388329999999900 36.9935350000000010, -104.3556505253503100 36.9935565317715810, -104.3664476855351100 36.9935703555644370, -104.3992028820832900 36.9936122926149620, -104.4297693866500100 36.9936514274448880, -104.4806103169752700 36.9937165199763950, -104.5192570000000000 36.9937659999999940, -104.6245560000000000 36.9943769999999930, -104.6255450000000000 36.9935990000000030, -104.6450289999999900 36.9933779999999930, -104.7061122072671500 36.9934264441886570, -104.7320310000000100 36.9934470000000030, -104.7321199999999800 36.9934840000000020, -104.8399904125201100 36.9933955928282070, -105.0005539999999800 36.9932640000000030, -105.0292279999999900 36.9927289999999900, -105.1208000000000000 36.9954279999999970, -105.1550419641015100 36.9953391471581630, -105.2206130000000000 36.9951689999999970, -105.2512960000000000 36.9956049999999980, -105.4193100000000000 36.9958560000000030, -105.4381027436132300 36.9959680306975970, -105.4424590000000000 36.9959940000000030, -105.4472550000000000 36.9960169999999950, -105.4651820000000000 36.9959909999999970, -105.4708767069258500 36.9959784767062560, -105.5088359999999900 36.9958949999999900, -105.5124850000000000 36.9957769999999970, -105.5339220000000000 36.9958749999999980, -105.6274699999999900 36.9956790000000030, -105.6647199999999900 36.9958740000000010, -105.7164710000000000 36.9958489999999930, -105.7184073045491700 36.9958460161492080, -105.9961590000000100 36.9954180000000010, -105.9974720000000000 36.9954170000000030, -106.0066339999999900 36.9953429999999980, -106.0998058674331200 36.9947591067049760, -106.1639713822180900 36.9943569916150140, -106.2014689999999900 36.9941219999999970, -106.2477050000000000 36.9942660000000030, -106.2486750000000100 36.9942879999999900, -106.2932790000000000 36.9938900000000000, -106.3254286788247500 36.9941092316646730, -106.3431389999999800 36.9942300000000020, -106.4762779528519600 36.9938393350510210, -106.5005890000000100 36.9937679999999960, -106.6171590000000000 36.9929670000000000, -106.6171249999999900 36.9930039999999990, -106.6286520000000000 36.9931750000000010, -106.6287329999999800 36.9931609999999940, -106.6613440000000000 36.9932430000000000, -106.6756259999999900 36.9931229999999970, -106.7505910000000000 36.9924609999999990, -106.7820952897146500 36.9924517499673660, -106.8697959999999900 36.9924259999999950, -106.8772919999999800 37.0001389999999900, -106.9188864633427000 37.0001287471619240, -106.9560183645763800 37.0001195943242540, -107.1072626267445100 37.0000823133304520, -107.2552027234696400 37.0000458467977750, -107.4209130000000000 37.0000049999999940, -107.4224150136806600 37.0000049896361030, -107.4421819991443200 37.0000048532438730, -107.4817370013986600 37.0000045803142900, -107.5240868464170200 37.0000042881002860, -107.6007136407778000 37.0000037593752680, -107.7124779008385600 37.0000029882016790, -107.8556954995019300 37.0000020000000020, -107.8663089376175300 37.0000019267672610, -107.8691399085863600 37.0000019072335460, -107.8691806993063300 37.0000019069521000, -108.0006230000000000 37.0000009999999970, -108.1791870752784600 36.9992931616249270, -108.1871395402988700 36.9992616375912750, -108.2493580000000000 36.9990150000000000, -108.2506349999999900 36.9995610000000000, -108.2880860000000100 36.9995550000000010, -108.2884000000000000 36.9995199999999970, -108.3204640000000000 36.9994990000000000, -108.3207209999999900 36.9995100000000010, -108.3791655704288800 36.9994589777070430, -108.6196889999999900 36.9992489999999990, -108.6203090000000100 36.9992870000000020, -108.7492698254058500 36.9991399338227680, -108.9544040000000000 36.9989059999999980, -108.9588680000000000 36.9989130000000020, -109.0452229999999900 36.9990840000000030, -109.0451659999999800 37.0727419999999980, -109.0450580000000000 37.0746609999999990, -109.0449950000000000 37.0864290000000030, -109.0451889999999900 37.0962709999999940, -109.0451730000000100 37.1094640000000030, -109.0452029999999900 37.1119579999999940, -109.0451559999999900 37.1120639999999970, -109.0459950000000000 37.1772789999999990, -109.0459780000000100 37.2018309999999990, -109.0458015051062800 37.2050708135988660, -109.0454869999999900 37.2108440000000020, -109.0455598795331900 37.2397756720027080, -109.0455601977475200 37.2399019965338450, -109.0455839999999900 37.2493509999999970, -109.0460389999999900 37.2499930000000030, -109.0458980422733100 37.3269349905485300, -109.0458100000000000 37.3749930000000030, -109.0437991323256200 37.4690283342420190, -109.0434637832608200 37.4847104508718160, -109.0434249427800400 37.4865267700853340, -109.0431370000000000 37.4999919999999990, -109.0419150000000000 37.5306530000000010, -109.0418650000000000 37.5307260000000010, -109.0418059999999900 37.6041710000000010, -109.0421310000000000 37.6176620000000030, -109.0420890000000000 37.6237950000000010, -109.0422690000000000 37.6660669999999980, -109.0417320000000000 37.7112139999999980, -109.0417600000000000 37.7131820000000030, -109.0416360000000000 37.7402099999999980, -109.0420980000000000 37.7499899999999970, -109.0420421489000700 37.7543839997998490, -109.0414610000000000 37.8001050000000020, -109.0417540000000000 37.8358259999999900, -109.0417229999999900 37.8420509999999980, -109.0418440000000000 37.8727880000000000, -109.0416528185789500 37.8811669027885570, -109.0410580000000100 37.9072359999999970, -109.0431209999999900 37.9742600000000010, -109.0428189999999900 37.9970679999999990, -109.0428199999999900 37.9993010000000030, -109.0419724039658400 38.1317991668174590, -109.0418366569747100 38.1530194495367920, -109.0417619999999900 38.1646900000000000, -109.0546480000000000 38.2449209999999980, -109.0600619999999900 38.2754890000000000, -109.0599620000000000 38.4999869999999900, -109.0602530000000000 38.5993279999999930, -109.0595410000000000 38.7198879999999970, -109.0573880000000000 38.7954559999999940, -109.0572160449167600 38.7997308495970760, -109.0541889999999900 38.8749839999999980, -109.0539429999999900 38.9044140000000030, -109.0537970000000000 38.9052839999999950, -109.0532330000000100 38.9424670000000010, -109.0532919999999800 38.9428780000000000, -109.0524359999999900 38.9999850000000020, -109.0515879125035400 39.1157342577700790, -109.0515835157382700 39.1163343400931040, -109.0515807806367500 39.1167076340895430, -109.0515120000000000 39.1260949999999990, -109.0507650000000000 39.3666770000000030, -109.0513629999999800 39.4976740000000040, -109.0510402483332400 39.6604720118441210, -109.0506149999999900 39.8749699999999980, -109.0508730000000000 40.0589149999999990, -109.0508130000000100 40.0595789999999920, -109.0509440000000000 40.1807119999999930, -109.0509730000000000 40.1808490000000020, -109.0509687158226500 40.2226624122704100, -109.0509460000000000 40.4443679999999970, -109.0503140000000000 40.4950920000000000, -109.0506979999999800 40.4999630000000010, -109.0499550000000000 40.5399010000000000, -109.0500740000000000 40.5403579999999980, -109.0500719640466700 40.5404371043087370, -109.0480440000000000 40.6192309999999990, -109.0482490000000000 40.6536009999999950, -109.0490880000000000 40.7145620000000010, -109.0484550000000000 40.8260810000000020, -109.0500760000000000 41.0006589999999990, -108.8841379999999900 41.0000939999999970, -108.6311080000000000 41.0001559999999900, -108.5266670000000000 40.9996080000000020, -108.5006590000000000 41.0001120000000010, -108.2506490000000000 41.0001140000000040, -108.1812270000000100 41.0004549999999950, -108.0892190031385500 41.0015541392473680, -108.0465390000000000 41.0020639999999970, -107.9232341223959400 41.0020370519008000, -107.9184209999999800 41.0020359999999970))"
+    }
+  },
+  {
+    "pk": 2,
+    "model": "geoapp.state",
+    "fields": {
+      "name": "Kansas",
+      "poly": "SRID=4326;POLYGON ((-102.051743999999999 40.003078000000002,-101.916696000000002 40.003141999999997,-101.904176000000007 40.003162000000003,-101.861740775252272 40.002907997451267,-101.841025000000002 40.002783999999991,-101.832160999999999 40.002932999999999,-101.807687 40.002797999999999,-101.804861999999986 40.002752,-101.783266423091504 40.002735966476642,-101.748492901329186 40.002710149056902,-101.627071 40.00262,-101.625809000000004 40.002710999999998,-101.579641080501318 40.002654627564297,-101.54227299999998 40.002608999999993,-101.417209 40.002423999999998,-101.411050023557621 40.002364583193085,-101.409952999999987 40.002353999999997,-101.387325211262052 40.00246006676732,-101.374325999999996 40.002520999999994,-101.342859000000004 40.002580000000002,-101.324035999999992 40.002695999999993,-101.293991000000005 40.002558999999998,-101.286555000000007 40.002558999999998,-101.248672999999997 40.002543000000003,-101.215033000000005 40.002555,-101.19221899999998 40.002490999999999,-101.186892990733696 40.002481867883319,-101.178804999999997 40.002468,-101.168704000000005 40.002547,-101.130906999999993 40.002426999999997,-101.104950380573442 40.002382874850099,-101.104950380567658 40.002382874850092,-101.060316999999998 40.002307000000002,-101.027686000000003 40.002255999999996,-100.962089380046322 40.00217532965339,-100.937427 40.002144999999999,-100.764559455237134 40.002296963384197,-100.758829999999989 40.002301999999993,-100.752183000000002 40.002127999999992,-100.7388309887763 40.002228385746484,-100.733295999999996 40.002270000000003,-100.729904000000005 40.002110999999999,-100.721127999999993 40.002068999999999,-100.683435000000003 40.002234,-100.660229999999984 40.002161999999998,-100.645444999999995 40.001882999999999,-100.626504856699498 40.001892789287538,-100.600944999999996 40.001905999999998,-100.594756999999987 40.001976999999997,-100.567238000000003 40.001888999999998,-100.551885999999996 40.001888999999998,-100.514429898999168 40.001844039098764,-100.511064999999988 40.00184,-100.487159000000005 40.001767,-100.477018 40.001752000000003,-100.475853999999998 40.001767999999998,-100.468772999999985 40.001724000000003,-100.447071999999991 40.001795,-100.439081000000002 40.001773999999997,-100.402449685831499 40.001800164690437,-100.390079999999998 40.001809000000002,-100.290126736823893 40.001691651381378,-100.231651999999997 40.001623000000002,-100.229478999999998 40.001692999999996,-100.215406000000002 40.001629,-100.196958999999993 40.001494,-100.19359 40.001573,-100.190323000000006 40.001586000000003,-100.188181 40.001541000000003,-100.177823000000004 40.001593,-99.990926000000002 40.001503,-99.986610999999996 40.001550000000002,-99.948166999999998 40.001812999999999,-99.944417 40.001584,-99.930432999999979 40.001516000000002,-99.906657999999993 40.001511999999998,-99.850154757615712 40.001444140609848,-99.813400999999999 40.001399999999997,-99.775639999999981 40.001646999999998,-99.772120999999984 40.001804,-99.764213999999996 40.001550999999999,-99.756834999999995 40.001342,-99.746628 40.001820000000002,-99.737774855821357 40.001824224692157,-99.731959000000003 40.001826999999992,-99.719639 40.001807999999997,-99.628345999999993 40.001866,-99.625979999999984 40.001865000000002,-99.515340365578794 40.002008435606839,-99.501791999999995 40.002026,-99.498998999999984 40.00195699999999,-99.497659999999982 40.001911999999997,-99.493464999999986 40.001936999999998,-99.480727999999999 40.001942,-99.423564999999996 40.002270000000003,-99.412644999999998 40.001867999999995,-99.403389000000004 40.001969000000003,-99.366747146128873 40.001962496644857,-99.290702999999979 40.001949000000003,-99.286655999999994 40.002017000000002,-99.282966999999999 40.001879000000002,-99.254012000000003 40.002074,-99.25036999999999 40.00195699999999,-99.216375999999997 40.002015999999998,-99.197591999999986 40.002032999999997,-99.188905000000005 40.002023,-99.186961999999994 40.001976999999997,-99.178965000000005 40.001976999999997,-99.169815999999997 40.001925,-99.123032999999992 40.002164999999998,-99.113510000000005 40.002192999999998,-99.085596999999993 40.002132999999994,-99.067047050731574 40.00217023690761,-99.020337999999995 40.00226399999999,-99.018700999999993 40.002333,-98.992135000000005 40.002192,-98.972286999999994 40.002245000000002,-98.971721000000002 40.002268,-98.961009000000004 40.002316999999998,-98.96091899999999 40.002271,-98.953888072580213 40.002253239016738,-98.934791999999987 40.002204999999996,-98.8435956659672 40.002348607685946,-98.842134005327992 40.002350909376077,-98.834455999999989 40.002363000000003,-98.820589999999982 40.002319,-98.777203 40.002358999999998,-98.774940999999998 40.002336,-98.729330606936671 40.002229113826232,-98.726294999999993 40.002222000000003,-98.710403999999997 40.002180000000003,-98.693095999999997 40.002372999999999,-98.691443000000007 40.002504999999999,-98.690286999999998 40.002547999999997,-98.672819000000004 40.002364,-98.669723999999988 40.002409999999998,-98.653832999999992 40.002268999999998,-98.652494000000004 40.002245000000002,-98.640709999999984 40.002493,-98.616372379820518 40.002409030470169,-98.613754999999998 40.002400000000002,-98.593342000000007 40.002475999999994,-98.575219000000004 40.002479999999991,-98.560578000000007 40.002274,-98.543186000000006 40.002285,-98.523053000000004 40.002336,-98.506634585466017 40.002329436673158,-98.504454999999979 40.002328565375151,-98.50084801790743 40.002327123469641,-98.490532999999999 40.002322999999997,-98.441997554675297 40.002366263566756,-98.391848301995964 40.002410965650498,-98.274015000000006 40.002516,-98.268218000000005 40.002490000000002,-98.25000799999998 40.002307000000002,-98.213290432425865 40.002506421375415,-98.193483 40.002614,-98.179315000000003 40.002482999999998,-98.172269 40.002437999999991,-98.156873151934732 40.002445128178877,-98.142031000000003 40.002451999999998,-98.099659000000003 40.002226999999998,-98.076034000000007 40.002300999999996,-98.068701000000004 40.002355,-98.050056999999981 40.002277999999997,-98.047469000000007 40.002186000000002,-98.042767978165202 40.002191261754177,-98.014411999999979 40.002223,-98.010157000000007 40.002153,-97.972185999999994 40.002113999999999,-97.931810999999996 40.002049999999997,-97.876261 40.002102,-97.85745 40.002065000000002,-97.838378999999989 40.001909999999995,-97.821597999999994 40.002003999999992,-97.819426000000007 40.001957999999995,-97.777154999999993 40.002167,-97.770775999999998 40.001976999999997,-97.769204000000002 40.001995,-97.767746000000002 40.001994000000003,-97.714825952022949 40.001974503868432,-97.706952472912022 40.001971603221314,-97.701160424072398 40.001969469388285,-97.61370959051284 40.001937251863488,-97.595964207410262 40.001930714334961,-97.593671575073259 40.001929869712491,-97.51530799999999 40.001900999999997,-97.511381 40.001899000000002,-97.510264000000006 40.001835,-97.48896951184885 40.0019310946697,-97.481234094494141 40.001966001936331,-97.463284999999999 40.00204699999999,-97.444661999999994 40.001957999999995,-97.425443 40.002048000000002,-97.417825999999991 40.002023999999999,-97.415833000000006 40.002000999999993,-97.369102999999996 40.00206,-97.350896000000006 40.001930000000002,-97.350272000000004 40.001975999999999,-97.256541388870858 40.001563097676062,-97.24516899999999 40.001513000000003,-97.245080000000002 40.001466999999998,-97.202309999999997 40.00144199999999,-97.200190000000006 40.001548999999997,-97.181775000000002 40.001550000000002,-97.165136038800085 40.001526729909067,-97.164288093539042 40.001525544031956,-97.157705785150654 40.001516338474417,-97.144150390621661 40.001497380844818,-97.142447999999987 40.001494999999998,-97.137865999999988 40.001814000000003,-97.049662999999995 40.001322999999999,-97.030802999999992 40.001342,-97.009164999999996 40.001463,-96.918187714380807 40.001505032225388,-96.916093000000004 40.001505999999999,-96.880459000000002 40.001448000000003,-96.878253 40.001466,-96.875056999999998 40.001448000000003,-96.873812 40.001449999999998,-96.868892342573133 40.001444286089438,-96.805301797100199 40.001370429180717,-96.693246065483095 40.001240282633297,-96.622400999999996 40.001157999999997,-96.610348999999999 40.000881,-96.604883999999984 40.000891000000003,-96.581788013355691 40.000963078853125,-96.580851999999993 40.000965999999998,-96.570853999999997 40.001090999999995,-96.557862999999998 40.000968,-96.538977000000003 40.000850999999997,-96.527110999999991 40.001030999999998,-96.469944999999996 40.000965999999998,-96.467535999999996 40.001035000000002,-96.463639999999998 40.000967000000003,-96.354812913341547 40.000735780492882,-96.350953725714731 40.00072758106856,-96.341811057717251 40.000708156095854,-96.304554999999993 40.000629000000004,-96.301066000000006 40.000632000000003,-96.239171999999996 40.000691000000003,-96.223838999999998 40.000729,-96.220170999999993 40.00072,-96.154364999999984 40.000495,-96.154246 40.00045,-96.147166999999982 40.000478999999999,-96.125936999999979 40.000432000000004,-96.125788 40.000467,-96.089781000000002 40.000518999999997,-96.081394999999986 40.000602999999998,-96.051691000000005 40.000726999999998,-96.02409 40.000718999999997,-96.014716997898134 40.000662392993569,-96.010677999999999 40.000638000000002,-95.995389500007406 40.000603953777215,-95.958139000000003 40.000520999999999,-95.901560435593936 40.000482839492363,-95.882524000000004 40.00047,-95.788023999999993 40.000452000000003,-95.784575000000004 40.000463000000003,-95.672891827756033 40.000336669594915,-95.658762261555324 40.000320686938032,-95.63965170807073 40.000299070038061,-95.565216789143676 40.000214872989645,-95.463103327781397 40.00009936736172,-95.455130658279359 40.000090349077695,-95.452048066669519 40.000086862204618,-95.438655850967621 40.000071713601649,-95.436011808705814 40.000068722793607,-95.426269559489981 40.00005770284973,-95.42148745056565 40.000052293567869,-95.41484447973599 40.000044779372317,-95.375257000000005 40.0,-95.339895999999982 39.999999000000003,-95.326448603970363 39.999998574530281,-95.30829 39.999997999999998,-95.308403999999996 39.993758,-95.307779999999994 39.990617999999998,-95.307111000000006 39.989114,-95.302506999999991 39.984357000000003,-95.289715 39.977705999999998,-95.274756999999994 39.972115000000002,-95.269885999999985 39.969396000000003,-95.261854 39.960617999999997,-95.257651999999993 39.954886000000002,-95.250253999999998 39.948644000000002,-95.241382999999999 39.944949,-95.236761 39.943930999999999,-95.231114000000005 39.943784,-95.220212000000004 39.944432999999997,-95.216440000000006 39.943953,-95.213736999999995 39.943205999999996,-95.204427999999993 39.938949,-95.201277000000005 39.934193999999998,-95.200689999999994 39.928154999999997,-95.20201 39.922438,-95.205744999999993 39.915168999999999,-95.206326000000004 39.912120999999999,-95.206195999999991 39.909557,-95.205732999999981 39.908275000000003,-95.202631127107011 39.904826841138963,-95.201935000000006 39.904052999999998,-95.19982446963148 39.902956959499498,-95.199773390195176 39.902930432929807,-95.199730682369619 39.902908253904485,-95.199347000000003 39.902709000000002,-95.193815999999984 39.900689999999997,-95.189565000000002 39.899959000000003,-95.179452999999995 39.900061999999991,-95.172296000000003 39.902025999999999,-95.159833999999989 39.906984,-95.156023999999988 39.907243,-95.153185481864639 39.906665666721331,-95.151701132402337 39.906363761184394,-95.149656999999991 39.905947999999995,-95.148243978290679 39.905255611516672,-95.146055000000004 39.904183000000003,-95.143801999999994 39.901917999999995,-95.142562999999981 39.897992000000002,-95.142444999999995 39.895419999999994,-95.143403000000006 39.889355999999992,-95.142718000000002 39.885888999999992,-95.140601000000004 39.88168799999999,-95.137091999999996 39.878350999999995,-95.134747000000004 39.876852,-95.128165999999993 39.874164999999998,-95.105912000000004 39.869163999999998,-95.090958483530287 39.863446088154532,-95.090158000000002 39.86314,-95.085003 39.861882999999999,-95.081534000000005 39.861718000000003,-95.079786043666886 39.861878094210859,-95.052535000000006 39.864373999999998,-95.042141999999998 39.864804999999997,-95.037767000000002 39.865541999999998,-95.034318031759739 39.867229060943565,-95.032053000000005 39.868336999999997,-95.031002514960235 39.869148692103728,-95.027930999999981 39.871521999999999,-95.025918959417425 39.87568321107333,-95.025422000000006 39.876711,-95.025119000000004 39.878833,-95.02586205726584 39.885935119809076,-95.025947000000002 39.886747,-95.025771840138887 39.887478608302466,-95.025475064075451 39.888718183571669,-95.025239999999997 39.889699999999998,-95.024388999999999 39.891202,-95.021897459019584 39.893924778577606,-95.019088516216428 39.896994416745422,-95.018742999999986 39.89737199999999,-95.018224596337973 39.897611313155366,-95.013151999999991 39.899952999999996,-95.010684182587667 39.900289758615472,-95.008439999999993 39.900596,-95.003818999999993 39.900400999999995,-94.990284000000003 39.897010000000002,-94.989784913598129 39.896958718834505,-94.987823822157509 39.896757216540813,-94.986975 39.89667,-94.985308455245701 39.896814869812808,-94.979390624873346 39.897329296428744,-94.977748999999989 39.897472,-94.963345000000004 39.901136,-94.959276000000003 39.901671,-94.958440298615102 39.901548064610132,-94.95153999999998 39.900532999999996,-94.943866999999983 39.898130000000002,-94.935306395585215 39.893779379194363,-94.934493000000003 39.893366,-94.929574000000002 39.888753999999992,-94.927897000000002 39.88611199999999,-94.927358999999996 39.883966,-94.927251999999996 39.880257999999991,-94.928466 39.876344000000003,-94.931084167287821 39.873075003673321,-94.931462999999994 39.872602,-94.938790999999995 39.866954,-94.940742999999998 39.864409999999999,-94.942407000000003 39.861065999999994,-94.942566999999983 39.856601999999995,-94.939767000000003 39.851930000000003,-94.937655000000007 39.849786000000002,-94.926149999999993 39.841321999999998,-94.916917999999995 39.836137999999998,-94.909941999999987 39.834426,-94.903156999999979 39.833849999999998,-94.892677000000006 39.834377999999994,-94.889493000000002 39.834026,-94.886932999999999 39.833098,-94.881012999999996 39.828921999999991,-94.878676999999996 39.826521999999997,-94.877043999999998 39.823754,-94.876543999999996 39.820594,-94.875944000000004 39.813293999999999,-94.87632679569893 39.807169268817198,-94.876344000000003 39.806894,-94.876705972386588 39.80614007495069,-94.880932 39.797338000000003,-94.884084 39.794234000000003,-94.890292000000002 39.791626,-94.892965000000004 39.791097999999991,-94.912908274541266 39.790276806342419,-94.92474489359239 39.789789416146199,-94.925605000000004 39.789753999999995,-94.925940683661906 39.789631963361245,-94.927258709273417 39.789152799691166,-94.929653999999999 39.788281999999995,-94.93035270914757 39.787827111232048,-94.930442023078356 39.787768964141691,-94.930979872832452 39.787418801541357,-94.932726000000002 39.786282,-94.932913349551853 39.786043884763131,-94.935059195246907 39.783316584105528,-94.935205999999994 39.78313,-94.935782000000003 39.778905999999999,-94.935301999999993 39.77561,-94.935036741896766 39.775108050050804,-94.934624304242575 39.774327591105198,-94.934262000000004 39.773642000000002,-94.929652999999988 39.769098,-94.929421387607832 39.768921584953624,-94.928626586797606 39.768316199289764,-94.926229000000006 39.76648999999999,-94.923991330811134 39.765173947104167,-94.916788999999994 39.760937999999996,-94.912293000000005 39.759337999999993,-94.906244 39.759417999999997,-94.905921454535701 39.759501730763866,-94.900921941190049 39.760799572828766,-94.899156000000005 39.761257999999998,-94.899025621234756 39.761323457651685,-94.895268000000002 39.76321,-94.895041000000006 39.763350000000003,-94.894070999999997 39.763945999999997,-94.893918999999997 39.76404,-94.893724000000006 39.764159999999997,-94.893646000000004 39.764208000000004,-94.883923999999993 39.770186000000002,-94.881460000000004 39.771258000000003,-94.881422 39.771258000000003,-94.874706321154179 39.772392308082928,-94.871144 39.772993999999997,-94.869643999999994 39.772894,-94.867142999999999 39.771693999999997,-94.865243000000007 39.770094,-94.863142999999994 39.767294,-94.860742999999999 39.763094000000002,-94.859442999999999 39.753694000000003,-94.860369889104035 39.749534984666809,-94.860371 39.74953,-94.862942999999987 39.742994000000003,-94.870142999999999 39.734594,-94.875642999999997 39.730494,-94.884142999999995 39.726793999999998,-94.891743999999989 39.724893999999999,-94.899315999999999 39.724041999999997,-94.900553640444031 39.724102079633198,-94.901582061073228 39.724152002964722,-94.902612000000005 39.724201999999998,-94.906055088082866 39.724933471502588,-94.907014260749904 39.725137244236571,-94.907785666538786 39.725301126582274,-94.910067999999995 39.725785999999999,-94.911087398893699 39.726157408899255,-94.918323999999998 39.728793999999994,-94.93000499999998 39.735370000000003,-94.939221000000003 39.74157799999999,-94.944740999999979 39.744377,-94.948658825773634 39.745572502168315,-94.948680784417533 39.745579202723142,-94.948725999999994 39.745593,-94.952629999999999 39.745961,-94.955286 39.745688999999999,-94.960086000000004 39.743065,-94.963779819772341 39.740240978767318,-94.964692434782606 39.73954326086956,-94.965317999999982 39.739064999999989,-94.965565209393333 39.738728671232884,-94.970224508542714 39.732389687437191,-94.970421999999985 39.732120999999999,-94.971205999999981 39.729304999999997,-94.971078000000006 39.723146,-94.968452999999997 39.707402000000002,-94.968980999999999 39.692954,-94.969909 39.689050000000002,-94.971316999999999 39.686410000000002,-94.976096392737759 39.68160006801152,-94.976325000000003 39.68137,-94.981556999999995 39.678634000000002,-94.984149000000002 39.677849999999992,-94.986445080691666 39.677537608069159,-94.990587390516794 39.676974028501114,-94.993556999999996 39.676569999999998,-94.998766892420107 39.676509388876212,-95.001379 39.676479,-95.004602740773237 39.676177881356345,-95.008105239221649 39.675850724907868,-95.009022999999999 39.675764999999998,-95.010225986948086 39.675477408241932,-95.013209713780839 39.674764104372102,-95.015309999999985 39.674261999999999,-95.018317999999994 39.672868999999999,-95.021521942351953 39.670631293568427,-95.024595000000005 39.668484999999997,-95.027643999999995 39.665453999999997,-95.037464 39.652904999999997,-95.039049000000006 39.649639,-95.044554000000005 39.644370000000002,-95.049518000000006 39.637875999999999,-95.053366999999994 39.630347,-95.054924999999997 39.624994999999991,-95.055024819926729 39.623527163368095,-95.055152000000007 39.621656999999992,-95.054958456554544 39.620961328886679,-95.053131423647116 39.614394255464305,-95.053011999999981 39.613965,-95.052555891387243 39.613278556984888,-95.047910999999999 39.606287999999999,-95.046445000000006 39.601605999999997,-95.046361000000005 39.599556999999997,-95.047165000000007 39.595117000000002,-95.049277000000004 39.589582999999998,-95.054804000000004 39.582487999999998,-95.056897000000006 39.580567000000002,-95.059518999999995 39.579132,-95.064519000000004 39.577114999999999,-95.066275551338904 39.576786470694117,-95.068266439890465 39.576414113098046,-95.069315000000003 39.576217999999997,-95.072159999999982 39.576121999999991,-95.075842551355763 39.576644128527029,-95.076688000000004 39.576763999999997,-95.088569515113861 39.580713698327401,-95.089515000000006 39.581028000000003,-95.09068217809525 39.58095107619048,-95.095736000000002 39.580618,-95.099095000000005 39.579690999999997,-95.100375015351446 39.579100080742663,-95.10182940536555 39.578428661399109,-95.103228 39.577782999999997,-95.106109962410699 39.575487768136732,-95.106244982404746 39.575380236480051,-95.106274453941239 39.575356764970024,-95.106406000000007 39.575251999999999,-95.107454000000004 39.573842999999997,-95.108931052511622 39.56997896968771,-95.109155613535791 39.569391508783276,-95.112830712234896 39.559777298955126,-95.112877844119652 39.559653999999995,-95.113077000000004 39.559132999999996,-95.113262990573148 39.557121201967142,-95.113516735173974 39.554376531201555,-95.113557 39.553940999999995,-95.113330390574859 39.553319942050457,-95.109694540741444 39.543355336910984,-95.109303999999995 39.542284999999993,-95.106595999999996 39.537657000000003,-95.106363136618171 39.537386330858773,-95.106309238275287 39.537323682029822,-95.102887999999993 39.533346999999999,-95.096713422649174 39.527826015970483,-95.095319522838992 39.526579663685382,-95.092703999999998 39.524241000000004,-95.082713999999996 39.516711999999998,-95.077440999999993 39.513551999999997,-95.059460999999985 39.506143000000002,-95.05637999999999 39.503971999999997,-95.052176999999986 39.499995999999996,-95.050551999999996 39.497514000000002,-95.049844999999991 39.494414999999989,-95.048370000000006 39.480420000000002,-95.047133000000002 39.474970999999996,-95.045715999999999 39.472459,-95.040779999999998 39.466386999999997,-95.03749999999998 39.463689000000002,-95.033407999999994 39.460875999999992,-95.028497999999999 39.458286999999999,-95.015825000000007 39.452809000000002,-94.995767999999998 39.448174000000002,-94.990172 39.446192000000003,-94.982144000000005 39.440551999999997,-94.978797999999998 39.436241000000003,-94.976606000000004 39.426701,-94.972952000000006 39.421705000000003,-94.968547467194298 39.418879728230785,-94.966981164652054 39.417875029083376,-94.966065999999998 39.417287999999999,-94.965430539155946 39.417093446959996,-94.954817000000006 39.413843999999997,-94.951209000000006 39.411706999999993,-94.947863999999996 39.408603999999997,-94.946292999999983 39.405645999999997,-94.946662000000003 39.399717000000003,-94.946226999999993 39.395648,-94.945577 39.393850999999998,-94.942038999999994 39.389499,-94.939696999999995 39.387949999999996,-94.938205659338905 39.38711651736979,-94.938199994953891 39.387113351650086,-94.938198708293527 39.387112632559479,-94.937157999999982 39.386530999999998,-94.933651999999995 39.385545999999998,-94.932170703908099 39.385397898493565,-94.923109999999994 39.384492000000002,-94.919224999999997 39.385173999999999,-94.915858999999998 39.386347999999998,-94.909581000000003 39.388865000000003,-94.901822999999993 39.392797999999999,-94.896448416922993 39.39340032396553,-94.894979000000006 39.393565000000002,-94.891845000000004 39.393312999999999,-94.888971999999995 39.392431999999999,-94.888058227506249 39.391822741147728,-94.885025999999996 39.389800999999999,-94.880978999999996 39.383899,-94.879281000000006 39.37977999999999,-94.879087999999996 39.375702999999994,-94.881359999999987 39.370382999999997,-94.885216 39.366911000000002,-94.890928000000002 39.364030999999997,-94.896832000000003 39.363135,-94.899023999999997 39.362431,-94.902496999999997 39.360382999999999,-94.90716104958679 39.35683832231404,-94.907297 39.356735,-94.907510470967722 39.356484333333356,-94.909408999999997 39.354254999999995,-94.910016999999996 39.352542999999997,-94.91007929967077 39.352122876579188,-94.910166635146069 39.351533921963672,-94.910234386079424 39.351077037464393,-94.910640999999998 39.348334999999999,-94.910055514481613 39.342727430625168,-94.908683540921714 39.329587162119807,-94.908064999999993 39.323663000000003,-94.906599414484603 39.317389801180319,-94.905982468129508 39.31474906332776,-94.905548856768945 39.312893060899633,-94.905328999999995 39.311951999999998,-94.904604536115073 39.31007473956825,-94.903592654247163 39.307452709910535,-94.903137 39.306272,-94.902341179156608 39.304705098857582,-94.900693838394318 39.301461629999167,-94.900362755471093 39.300809756886117,-94.900048999999996 39.300192000000003,-94.895217000000002 39.29420799999999,-94.889432625546704 39.288730528394183,-94.887056 39.286479999999997,-94.882576 39.283327999999997,-94.881425972827699 39.282735692772164,-94.879585687759075 39.281787876778168,-94.878319999999988 39.281135999999996,-94.869470269042495 39.278423959123423,-94.867567999999991 39.277841000000002,-94.866576416802303 39.277461598502107,-94.857072000000002 39.273825000000002,-94.850573678793964 39.270595179638669,-94.850470600187833 39.270543947117169,-94.846320000000006 39.268481,-94.844203868589133 39.266965084952687,-94.840994595225254 39.264666085108807,-94.837855000000005 39.262416999999999,-94.836102527271095 39.260730409704507,-94.834879550067882 39.259553409087879,-94.832501320107042 39.257264586268427,-94.832102355305352 39.256880620143498,-94.831470999999993 39.256273,-94.827487000000005 39.249888999999996,-94.826571473591798 39.245793223963304,-94.825663000000006 39.241728999999999,-94.826110999999983 39.238289000000002,-94.826405091238243 39.237538367125239,-94.827108391663188 39.2357432765168,-94.827791000000005 39.234000999999999,-94.828117769197533 39.233533772937683,-94.83244435695299 39.227347452739551,-94.834698551534771 39.224124319346686,-94.834896 39.223841999999998,-94.834917496024659 39.223414229109203,-94.835039139715306 39.220993519665384,-94.835046603087861 39.220844998551456,-94.835055999999994 39.220658,-94.833551999999997 39.217793999999998,-94.831678999999994 39.215938,-94.823791 39.209873999999999,-94.820687000000007 39.208626000000002,-94.811662999999996 39.206594000000003,-94.800359054554335 39.206051410618606,-94.799662999999995 39.206018,-94.798924306591658 39.206116812235138,-94.793913945984244 39.206787029303406,-94.788135068391796 39.207560047994349,-94.787343000000007 39.207666000000003,-94.783838000000003 39.207154000000003,-94.781518000000005 39.206145999999997,-94.780294078498926 39.205273290755756,-94.778971577769184 39.204330290235411,-94.777838000000003 39.203522,-94.775537999999997 39.200602000000003,-94.770897097034492 39.191141697801093,-94.770859400196969 39.191064854247678,-94.770337999999995 39.190002,-94.763137999999998 39.179903000000003,-94.75233799999998 39.173202999999994,-94.74193799999999 39.170203,-94.736536999999998 39.169203000000003,-94.723636999999997 39.169002999999989,-94.714136999999994 39.170403,-94.696331999999998 39.178562999999997,-94.687235999999999 39.183503000000002,-94.680335999999983 39.184303,-94.669134999999997 39.182003000000002,-94.663835000000006 39.179102999999998,-94.660314999999997 39.168050999999991,-94.662434999999988 39.157602999999995,-94.650734999999983 39.154102999999999,-94.640034999999997 39.153102999999994,-94.623934000000006 39.156602999999997,-94.615834000000007 39.160003000000003,-94.608834000000002 39.160502999999999,-94.601732999999996 39.15960299999999,-94.596033000000006 39.157702999999998,-94.591932999999997 39.155003,-94.589933000000002 39.140402999999999,-94.592533000000003 39.135902999999992,-94.600433999999993 39.128503000000002,-94.605733999999998 39.122204000000004,-94.607033999999999 39.119404000000003,-94.607354 39.113444,-94.607234000000005 39.089604,-94.607333999999994 39.081703999999995,-94.607275518421304 39.072346947409343,-94.607234000000005 39.065703999999997,-94.607342812841125 39.057404745686583,-94.60738379566331 39.05427894858029,-94.607437239929951 39.050202705779334,-94.607518499034526 39.044004999999999,-94.607559479691474 39.040879368039988,-94.607612854426819 39.036808428453341,-94.60764748233197 39.034167326647299,-94.607654028188094 39.033668068249817,-94.60769507925167 39.030537066312085,-94.607898722639391 39.015005000000002,-94.607914652765047 39.013789994834404,-94.607991843462372 39.007902590176151,-94.608087526605189 39.000604749887366,-94.608092759229436 39.000205652880325,-94.608190956218394 38.992716079262479,-94.608212339138063 38.991085184540211,-94.608264438806202 38.98711149548862,-94.608279957450691 38.985927874365181,-94.608301211867541 38.984306780669819,-94.608333999999999 38.981805999999999,-94.608294286905348 38.97390309416464,-94.608273484679671 38.969763451253407,-94.608249262127771 38.964943163424849,-94.608207879518076 38.956708024096379,-94.608134000000007 38.942005999999999,-94.608134000000007 38.940005999999997,-94.607866 38.937398000000002,-94.607977999999989 38.936869999999992,-94.608002838442587 38.912906322207348,-94.608006216770249 38.909646973100827,-94.608010407202343 38.90560412040071,-94.608022064178897 38.894357681354862,-94.60802273861259 38.893706999999999,-94.608033000000006 38.883806999999997,-94.608033000000006 38.869207000000003,-94.608033000000006 38.868107000000002,-94.607992999999993 38.867271000000002,-94.608033000000006 38.861207,-94.608033000000006 38.855007,-94.608033000000006 38.850107,-94.608033000000006 38.847206999999997,-94.607624999999999 38.827559999999991,-94.607668973053535 38.825816299300072,-94.608041 38.811064000000002,-94.608617609754887 38.781926100280451,-94.609398999999996 38.742440000000002,-94.60945599999998 38.74069999999999,-94.609507757106428 38.73815999467709,-94.609625656590424 38.7323740198146,-94.610322172686637 38.698192151600097,-94.61071084056907 38.679118085101081,-94.61073851283922 38.677760054904219,-94.611602000000005 38.635384000000002,-94.611464999999995 38.625011,-94.611857999999998 38.620485000000002,-94.611908 38.609271999999997,-94.611905562149673 38.605890005062435,-94.611886999999996 38.580139000000003,-94.611902 38.580109999999998,-94.612176000000005 38.576546,-94.612156999999996 38.549816999999997,-94.612272000000004 38.547916999999998,-94.612464742072774 38.518760616499996,-94.612644000000003 38.491644,-94.612725999999995 38.484366999999999,-94.612696 38.483153999999999,-94.612865999999997 38.477570999999998,-94.613365000000002 38.403421999999999,-94.613264999999998 38.392426,-94.613275404637193 38.388718047420433,-94.613328999999993 38.369617999999996,-94.613311999999993 38.364407,-94.613085455228386 38.3436360393057,-94.612999999999985 38.335800999999996,-94.612825 38.324387000000002,-94.612787999999995 38.320141999999997,-94.612673 38.314832000000003,-94.612673 38.302526999999998,-94.612689368276676 38.301464114946214,-94.612843999999996 38.291422999999995,-94.612848999999997 38.289914000000003,-94.612707829046002 38.272362044447966,-94.612691999999996 38.270394000000003,-94.612613999999994 38.237766,-94.612634999999997 38.226987,-94.612658999999994 38.219251,-94.61265866950464 38.21872154645218,-94.612657999999982 38.217649000000002,-94.612821999999994 38.203918000000002,-94.612848 38.200713999999998,-94.613073 38.190551999999997,-94.61341774677895 38.168183959706163,-94.613422 38.16790799999999,-94.613748 38.160632999999997,-94.613855999999998 38.149768999999999,-94.613889466360249 38.136312911169284,-94.613919497343275 38.124238112111762,-94.614061000000007 38.067343,-94.614088999999993 38.065900999999997,-94.614054999999993 38.060088,-94.613980999999995 38.036949,-94.614211999999981 37.992462000000003,-94.614464999999996 37.987798999999995,-94.614511123427164 37.979395512107736,-94.614514360688489 37.978805697169918,-94.614557000000005 37.971036999999995,-94.614561999999992 37.951517000000003,-94.614593999999997 37.949977999999994,-94.614611999999994 37.944361999999998,-94.614754000000005 37.940769000000003,-94.614834999999999 37.936700000000002,-94.614778 37.934199999999997,-94.615181000000007 37.915944000000003,-94.615392999999983 37.906391999999997,-94.61546899999999 37.901775,-94.615706000000003 37.886842999999999,-94.615921 37.878331000000003,-94.615834000000007 37.872509999999998,-94.616 37.863126,-94.616282760205394 37.851281931678621,-94.616426000000004 37.845281999999997,-94.616433230053673 37.842955730230052,-94.61645 37.837560000000003,-94.616861999999998 37.819456000000002,-94.6176681324215 37.775831003788085,-94.617720999999989 37.77297,-94.617737774720197 37.764628336555312,-94.617744979193901 37.761045725680312,-94.617807999999997 37.729706999999998,-94.617975 37.722175999999997,-94.61780499999999 37.690178000000003,-94.617650999999995 37.687671000000002,-94.617687000000004 37.686652999999993,-94.617885 37.682214000000002,-94.617733999999999 37.673127,-94.617576 37.653671000000003,-94.617517909436387 37.643988652624088,-94.61747699999998 37.637169999999998,-94.617472819127315 37.636539916507168,-94.6173 37.610495,-94.617428000000004 37.609521999999998,-94.617283 37.571896000000002,-94.617315000000005 37.571498999999996,-94.617080999999999 37.567013000000003,-94.61711240153133 37.563155381499406,-94.617159999999984 37.557307999999999,-94.617186000000004 37.553485000000002,-94.617167532949537 37.551779056391354,-94.616988484457494 37.535238968895172,-94.616907999999981 37.527804000000003,-94.616788999999997 37.521509999999999,-94.616880369657522 37.506771761864755,-94.617022999999989 37.483764999999998,-94.617182999999997 37.469664999999999,-94.617180000000005 37.465203000000002,-94.617221999999998 37.460476,-94.617204999999984 37.46037299999999,-94.617200999999994 37.454788,-94.617131999999998 37.439818000000002,-94.617265000000003 37.425535999999994,-94.617510999999993 37.410908999999997,-94.617557000000005 37.396374999999999,-94.61759158917468 37.381725975861251,-94.617625000000004 37.367576,-94.617626 37.367444999999989,-94.617536999999999 37.364355000000003,-94.617636000000005 37.338417,-94.617694999999998 37.336841999999997,-94.617648000000003 37.323588999999998,-94.61807499999999 37.240436000000003,-94.618157999999994 37.237596999999994,-94.618122999999997 37.229334,-94.61815 37.228121000000002,-94.618218999999996 37.207771999999999,-94.618305000000007 37.207337000000003,-94.618319 37.188774000000002,-94.618504999999985 37.181184000000002,-94.618472999999994 37.174782,-94.618351000000004 37.160210999999997,-94.618071999999998 37.132345,-94.61807499999999 37.129755000000003,-94.61816441512984 37.118929895303054,-94.618212 37.113168999999992,-94.618150999999997 37.103968000000002,-94.618059000000002 37.096676000000002,-94.618088 37.093670999999993,-94.618089999999995 37.093494,-94.618085255103864 37.089305442941992,-94.618082 37.086432000000002,-94.61811999999999 37.085934000000002,-94.617981999999998 37.075077,-94.617954311863897 37.070346986543974,-94.617947706480578 37.069218577181687,-94.617910161110728 37.062804634983031,-94.617893975984089 37.060039701061122,-94.617874999999998 37.056798,-94.617877538275181 37.056339390079508,-94.617964999999998 37.040537,-94.617972200190749 37.032971759572447,-94.617994999999979 37.009015999999995,-94.618027702303792 37.004829720380044,-94.618080000000006 36.998134999999998,-94.625223999999989 36.998671999999999,-94.699735000000004 36.998804999999997,-94.701796999999999 36.998814000000003,-94.711286363060864 36.99879670415919,-94.712770000000006 36.99879399999999,-94.722629184733563 36.998741903378082,-94.732834603466486 36.998687977231512,-94.736330645670293 36.998669503899912,-94.737183000000002 36.998665000000003,-94.739323999999996 36.998686999999997,-94.745992043692311 36.998700535427304,-94.749560781475736 36.99870777958963,-94.749834600019099 36.998708335412474,-94.777257000000006 36.998764,-94.831280000000007 36.998812,-94.831539962039543 36.998812565955092,-94.840925999999996 36.998832999999998,-94.846637705524785 36.998860673615503,-94.849800999999999 36.998875999999996,-94.853196999999994 36.998874,-94.896852168601683 36.999075231107383,-94.904605402657381 36.99911097010289,-94.9407882710602 36.999277757196154,-94.995293000000004 36.999528999999995,-95.007620000000003 36.999513999999998,-95.011432999999997 36.999535000000002,-95.030323999999993 36.999516999999997,-95.037857000000002 36.999496999999998,-95.049498999999983 36.999580000000002,-95.073509 36.999509000000003,-95.1405498515593 36.999533623834409,-95.155186999999998 36.999538999999999,-95.155372 36.999540000000003,-95.159067907556633 36.999536629205572,-95.177300999999986 36.999519999999997,-95.195307 36.999564999999997,-95.267905305061163 36.999446910377756,-95.285983101167361 36.999417504731007,-95.322564999999997 36.999357999999994,-95.328057999999999 36.999364999999997,-95.328326999999987 36.999366000000002,-95.331209999999999 36.999380000000002,-95.377252424658963 36.999296311678272,-95.381753803085687 36.999288129815376,-95.407683000000006 36.999240999999998,-95.511578 36.999234999999999,-95.522414951940931 36.999281058114107,-95.534401000000003 36.999332000000003,-95.573598000000004 36.999309999999994,-95.601517312742303 36.999317968253862,-95.612139999999997 36.999321000000002,-95.615933999999996 36.999364999999997,-95.621011943860609 36.999361983160732,-95.624350000000007 36.999360000000003,-95.630078999999995 36.999319999999997,-95.638122589416028 36.999320470082949,-95.664300999999995 36.999321999999999,-95.674044398562955 36.999333876292773,-95.686452000000003 36.999349000000002,-95.696658999999997 36.999215,-95.71038 36.999370999999996,-95.710782524132014 36.999362783399121,-95.714887000000004 36.999279,-95.718053999999995 36.999254999999998,-95.741907999999995 36.999243999999997,-95.746466244276931 36.999250838506164,-95.759905000000003 36.999270999999993,-95.768719000000004 36.999205000000003,-95.786761999999996 36.999309999999994,-95.807979999999986 36.999124000000002,-95.819364496908179 36.999150471530008,-95.866899000000004 36.999260999999997,-95.873943999999995 36.999299999999998,-95.875256999999991 36.999302,-95.877150999999998 36.999304000000002,-95.910179999999997 36.999336,-95.928122000000002 36.999245000000002,-95.936991999999989 36.999267999999994,-95.964270378114222 36.999093604402042,-96.00081 36.99886,-96.095164142267308 36.998935940299688,-96.14121 36.998972999999999,-96.143207000000004 36.999133999999998,-96.147143 36.999021999999997,-96.149709 36.99904,-96.152383999999998 36.999050999999994,-96.154016999999982 36.999161,-96.184768000000005 36.999211000000003,-96.200028000000003 36.999028000000003,-96.217571000000007 36.999070000000003,-96.235320025971774 36.999130675786525,-96.27480962492784 36.999265672629733,-96.276368000000005 36.999270999999993,-96.279078999999996 36.999271999999991,-96.381556872639493 36.999226629434901,-96.394272 36.999220999999999,-96.415412000000003 36.999113,-96.500287999999998 36.998643,-96.525212323286397 36.998711038495294,-96.525495980566973 36.998711812823821,-96.551130926932458 36.998781791180214,-96.551130927020779 36.998781791180456,-96.624487489749981 36.998982040153741,-96.705431000000004 36.999203,-96.710481999999999 36.999270999999993,-96.731983006833033 36.99928335311408,-96.736589999999993 36.999285999999998,-96.741269999999986 36.999239000000003,-96.749837999999997 36.998987999999997,-96.792060000000006 36.999179999999996,-96.795198999999997 36.99886,-96.822790999999995 36.999181999999998,-96.867517000000007 36.999217000000002,-96.876289999999997 36.999232999999997,-96.902083000000005 36.999155000000002,-96.903509999999997 36.999132000000003,-96.917092999999994 36.999181999999998,-96.921914999999998 36.999150999999998,-96.924934279563146 36.999131784030439,-96.934641999999997 36.999070000000003,-96.967371 36.999066999999997,-96.975561999999996 36.999018999999997,-97.030081999999979 36.998928999999997,-97.039783999999983 36.999000000000002,-97.045562883576096 36.99899981011751,-97.100651999999997 36.998998,-97.104275999999999 36.999020000000002,-97.120284999999996 36.999014000000003,-97.122596999999999 36.999035999999997,-97.147721000000004 36.999110999999999,-97.202000013134437 36.999050609464689,-97.255829185181881 36.998990719420135,-97.342808466604069 36.998893946743877,-97.362376892203329 36.998872175019791,-97.364929972745273 36.99886933447624,-97.372421000000003 36.998860999999998,-97.384924999999996 36.998843,-97.462279999999993 36.998685000000002,-97.472860999999995 36.998721000000003,-97.527292000000003 36.998749999999994,-97.545899999999989 36.998708999999991,-97.546497999999985 36.998746999999995,-97.564536000000004 36.998711,-97.582460039051355 36.99869862770732,-97.606549 36.998682000000002,-97.637136999999996 36.999090000000002,-97.650465999999994 36.999003999999999,-97.692180007144742 36.998844793059916,-97.697103999999982 36.998826,-97.768704 36.998749999999994,-97.783432000000005 36.998961,-97.783489000000003 36.998846999999998,-97.802297999999979 36.998713000000002,-97.965379045838461 36.998468720211747,-98.033955000000006 36.998365999999997,-98.03989 36.998348999999997,-98.045341999999991 36.998327000000003,-98.111985000000004 36.998133000000003,-98.128185436781749 36.99814624647324,-98.147452 36.998162,-98.177595999999994 36.998008999999996,-98.190367496841162 36.998003995168112,-98.208218000000002 36.997996999999998,-98.219498999999999 36.997824,-98.237712000000002 36.99797199999999,-98.346187999999984 36.997962,-98.347186011230875 36.997961873429141,-98.354073 36.997960999999997,-98.408991 36.998513000000003,-98.418267999999998 36.998538000000003,-98.420209 36.998516000000002,-98.476584655565659 36.998733519956424,-98.485495952453391 36.998767903324406,-98.544871999999984 36.998997000000003,-98.622244241689657 36.999025734091177,-98.714511999999999 36.99906,-98.718464999999995 36.999179999999996,-98.761596999999995 36.999425000000002,-98.791936000000007 36.999254999999998,-98.793711000000002 36.999226999999991,-98.797451999999993 36.999228999999993,-98.811832237742053 36.99924038482925,-98.869449000000003 36.999285999999998,-98.880009 36.999262999999999,-98.880579999999995 36.999308999999997,-98.994371 36.999493,-99.000846251360556 36.99951188908193,-99.029336999999998 36.999594999999999,-99.044703416105833 36.999312701167916,-99.049695 36.999220999999999,-99.124882999999997 36.99942,-99.12944899999998 36.999422000000003,-99.215429691089184 36.999525607779709,-99.221470798208784 36.999532887387339,-99.22594390512576 36.999538277535649,-99.248119999999986 36.999564999999997,-99.277506000000002 36.999578999999997,-99.375390999999993 37.000176999999994,-99.375813215185289 37.000169016042221,-99.396673054015949 36.999774562980598,-99.407015 36.999578999999997,-99.456202999999988 36.999471,-99.484333000000007 36.999625999999999,-99.500394999999983 36.99957599999999,-99.500394999999983 36.999637,-99.502664999999993 36.999645,-99.504092999999997 36.999648,-99.508573999999982 36.999657999999997,-99.541115670095081 36.999572526667627,-99.558068000000006 36.999527999999998,-99.625399000000002 36.999670999999999,-99.648651999999998 36.999603999999998,-99.657657999999998 37.000197,-99.675479899119665 37.000294824261658,-99.700804554289192 37.000433831091229,-99.722499410223932 37.000552913981863,-99.774254999999997 37.000836999999997,-99.774816 37.000841,-99.786016000000004 37.000931,-99.875408999999991 37.001658999999997,-99.904897139036905 37.001652107487203,-99.995200999999994 37.001631000000003,-100.001285999999993 37.001699000000002,-100.002562999999995 37.001705999999999,-100.005706000000004 37.001725999999998,-100.08949117994996 37.002091554886341,-100.115721999999991 37.002206,-100.187546999999995 37.002082,-100.19237099999998 37.002035999999997,-100.193753999999998 37.002133,-100.201675999999992 37.002080999999997,-100.269984573601874 37.001795796937508,-100.395563941387664 37.001271475927872,-100.434302684862132 37.001109733298897,-100.434343961694367 37.0011095609592,-100.436759028295029 37.001099477534027,-100.462594151135718 37.000991610310841,-100.526354155903263 37.000725398506596,-100.551597999999998 37.000619999999998,-100.552683000000002 37.000734999999999,-100.591328000000004 37.000376000000003,-100.591413000000003 37.000399000000002,-100.629769999999994 37.000025,-100.63332699999998 36.999935999999998,-100.675551999999996 36.999687999999999,-100.734516999999997 36.999059000000003,-100.756894000000003 36.999356999999996,-100.759718826764541 36.999297806889686,-100.765484 36.999177000000003,-100.806116000000003 36.999091,-100.814277000000004 36.999085,-100.850054835707368 36.998687920265262,-100.855633999999981 36.998626000000002,-100.891659999999987 36.998604,-100.904274 36.998745,-100.904588000000004 36.998561000000002,-100.945565999999985 36.998151999999997,-100.958261085233985 36.99812508251128,-100.996501999999992 36.998044,-101.012641000000002 36.998176,-101.053589000000002 36.997966999999996,-101.066742000000005 36.997920999999998,-101.096255470166753 36.997758490771822,-101.211485999999979 36.997123999999999,-101.212908999999996 36.997044000000002,-101.283204233333976 36.996668964004151,-101.357796999999991 36.996271,-101.359673999999998 36.996231999999999,-101.37818 36.996164,-101.413867999999994 36.996008000000003,-101.415004999999994 36.995966000000003,-101.485326 36.995610999999997,-101.519065999999995 36.99554599999999,-101.555239 36.99541399999999,-101.600396000000003 36.995152999999995,-101.601592999999994 36.995094999999999,-101.672152845644291 36.994768289529276,-101.672152845650672 36.994768289529254,-101.718235173867967 36.994554916342196,-101.761767880686108 36.994353348566563,-101.826607533764985 36.994053124077894,-101.862548907230888 36.993886706153717,-101.881050066963184 36.993801040963412,-101.899294480822903 36.993716564573397,-101.902439999999999 36.993701999999999,-101.905152836625547 36.993689460946754,-101.93521516037174 36.99355050931414,-102.000446999999994 36.993248999999992,-102.000446999999994 36.993271999999997,-102.028206999999981 36.993124999999999,-102.042240000000007 36.993082999999999,-102.041951999999995 37.024741999999996,-102.04195 37.030805,-102.041921000000002 37.032178000000002,-102.041748999999996 37.034396999999998,-102.04191999999999 37.035083,-102.041983000000002 37.106551000000003,-102.041808999999986 37.111972999999999,-102.042091999999997 37.125020999999997,-102.042135000000002 37.125020999999997,-102.042121535383529 37.12671399835564,-102.042001999999997 37.141744000000003,-102.041962999999996 37.258164,-102.041663999999997 37.29764999999999,-102.041816999999995 37.309489999999997,-102.041973999999996 37.352612999999998,-102.042089000000004 37.352818999999997,-102.041523999999995 37.375017999999997,-102.041585760607518 37.389190434149839,-102.041675999999981 37.409897999999991,-102.041668999999999 37.434739999999998,-102.041754999999995 37.434854999999992,-102.041800999999992 37.469487999999998,-102.041786000000002 37.506065999999997,-102.04201599999999 37.535260999999998,-102.041899 37.541186000000003,-102.041893999999999 37.557977,-102.041618 37.607868000000003,-102.041584999999998 37.644281999999997,-102.041581999999991 37.654494999999997,-102.041694000000007 37.665680999999999,-102.041573999999997 37.680436,-102.041876000000002 37.723875,-102.041989965869121 37.73854062916552,-102.042158 37.760164000000003,-102.042668000000006 37.788758,-102.042952999999997 37.803534999999997,-102.043032999999994 37.824145999999999,-102.043218999999993 37.86792899999999,-102.043714531331204 37.914003914798144,-102.043845000000005 37.926135000000002,-102.043844000000007 37.928101999999996,-102.044644000000005 38.045532,-102.044255000000007 38.113010999999993,-102.044450868202546 38.120049353793199,-102.044589000000002 38.125012999999996,-102.044415729020699 38.133607343100145,-102.044251000000003 38.141777999999995,-102.044296878804843 38.175558844899406,-102.044398 38.250014999999998,-102.044510721728557 38.262483349316234,-102.044567999999998 38.268819,-102.044612999999998 38.312323999999997,-102.044944 38.384419,-102.044441999999989 38.415801999999999,-102.044936000000007 38.41968,-102.045323999999979 38.453646999999997,-102.045262999999991 38.505395,-102.045261999999994 38.505531999999995,-102.045112000000003 38.523783999999999,-102.045222999999993 38.543796999999998,-102.045188999999979 38.558731999999992,-102.045210999999995 38.581608999999993,-102.045287999999999 38.615248999999999,-102.045074 38.669617000000002,-102.045102 38.674945999999998,-102.045159999999996 38.675221,-102.045126999999994 38.686725000000003,-102.045156000000006 38.688555,-102.045211999999992 38.697566999999999,-102.045375000000007 38.754338999999995,-102.045287000000002 38.755527999999998,-102.045371000000003 38.770063999999998,-102.045447999999993 38.783453000000002,-102.045333999999997 38.799463000000003,-102.045387999999988 38.813391999999993,-102.046570999999986 39.047038,-102.047133999999986 39.129700999999997,-102.047188612927897 39.133146793270186,-102.047250000000005 39.13702,-102.047851021058236 39.220289738242592,-102.048449000000005 39.30313799999999,-102.04895999999998 39.37371199999999,-102.049100972149461 39.394064428437375,-102.049166999999983 39.403596999999998,-102.049369999999996 39.418210000000002,-102.049368999999999 39.423333,-102.049678999999998 39.506183,-102.049672999999999 39.536690999999998,-102.049553999999986 39.538932000000003,-102.049763758475066 39.568170000775439,-102.04980599999999 39.574058,-102.049954 39.592331,-102.050258163748609 39.627242889069393,-102.050421999999983 39.646047999999993,-102.050099000000003 39.653812000000002,-102.05059399999999 39.67559399999999,-102.050898693231389 39.741794606053567,-102.051254 39.818992,-102.051317999999995 39.833311000000002,-102.051362999999995 39.843471,-102.051569 39.849805000000003,-102.051743999999999 40.003078000000002))"
+    }
+  }
+]
--- a/web/lib/django/contrib/gis/tests/geoapp/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/geoapp/models.py	Tue May 25 02:43:45 2010 +0200
@@ -27,6 +27,12 @@
     objects = models.GeoManager()
     def __unicode__(self): return self.name
 
+class Track(models.Model):
+    name = models.CharField(max_length=30)
+    line = models.LineStringField()
+    objects = models.GeoManager()
+    def __unicode__(self): return self.name
+
 if not spatialite:
     class Feature(models.Model):
         name = models.CharField(max_length=20)
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/city.mysql.sql	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-INSERT INTO geoapp_city (`name`, `point`) VALUES ('Houston', GeomFromText('POINT (-95.363151 29.763374)'));
-INSERT INTO geoapp_city (`name`, `point`) VALUES ('Dallas', GeomFromText('POINT (-96.801611 32.782057)'));
-INSERT INTO geoapp_city (`name`, `point`) VALUES ('Oklahoma City', GeomFromText('POINT (-97.521157 34.464642)'));
-INSERT INTO geoapp_city (`name`, `point`) VALUES ('Wellington', GeomFromText('POINT (174.783117 -41.315268)'));
-INSERT INTO geoapp_city (`name`, `point`) VALUES ('Pueblo', GeomFromText('POINT (-104.609252 38.255001)'));
-INSERT INTO geoapp_city (`name`, `point`) VALUES ('Lawrence', GeomFromText('POINT (-95.235060 38.971823)'));
-INSERT INTO geoapp_city (`name`, `point`) VALUES ('Chicago', GeomFromText('POINT (-87.650175 41.850385)'));
-INSERT INTO geoapp_city (`name`, `point`) VALUES ('Victoria', GeomFromText('POINT (-123.305196 48.462611)'));
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/city.oracle.sql	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-INSERT INTO GEOAPP_CITY ("NAME", "POINT") VALUES ('Houston', SDO_GEOMETRY('POINT (-95.363151 29.763374)', 4326));
-INSERT INTO GEOAPP_CITY ("NAME", "POINT") VALUES ('Dallas', SDO_GEOMETRY('POINT (-96.801611 32.782057)', 4326));
-INSERT INTO GEOAPP_CITY ("NAME", "POINT") VALUES ('Oklahoma City', SDO_GEOMETRY('POINT (-97.521157 34.464642)', 4326));
-INSERT INTO GEOAPP_CITY ("NAME", "POINT") VALUES ('Wellington', SDO_GEOMETRY('POINT (174.783117 -41.315268)', 4326));
-INSERT INTO GEOAPP_CITY ("NAME", "POINT") VALUES ('Pueblo', SDO_GEOMETRY('POINT (-104.609252 38.255001)', 4326));
-INSERT INTO GEOAPP_CITY ("NAME", "POINT") VALUES ('Lawrence', SDO_GEOMETRY('POINT (-95.235060 38.971823)', 4326));
-INSERT INTO GEOAPP_CITY ("NAME", "POINT") VALUES ('Chicago', SDO_GEOMETRY('POINT (-87.650175 41.850385)', 4326));
-INSERT INTO GEOAPP_CITY ("NAME", "POINT") VALUES ('Victoria', SDO_GEOMETRY('POINT (-123.305196 48.462611)', 4326));
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/city.postgresql_psycopg2.sql	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-INSERT INTO geoapp_city ("name", "point") VALUES ('Houston', 'SRID=4326;POINT (-95.363151 29.763374)');
-INSERT INTO geoapp_city ("name", "point") VALUES ('Dallas', 'SRID=4326;POINT (-96.801611 32.782057)');
-INSERT INTO geoapp_city ("name", "point") VALUES ('Oklahoma City', 'SRID=4326;POINT (-97.521157 34.464642)');
-INSERT INTO geoapp_city ("name", "point") VALUES ('Wellington', 'SRID=4326;POINT (174.783117 -41.315268)');
-INSERT INTO geoapp_city ("name", "point") VALUES ('Pueblo', 'SRID=4326;POINT (-104.609252 38.255001)');
-INSERT INTO geoapp_city ("name", "point") VALUES ('Lawrence', 'SRID=4326;POINT (-95.235060 38.971823)');
-INSERT INTO geoapp_city ("name", "point") VALUES ('Chicago', 'SRID=4326;POINT (-87.650175 41.850385)');
-INSERT INTO geoapp_city ("name", "point") VALUES ('Victoria', 'SRID=4326;POINT (-123.305196 48.462611)');
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/city.sqlite3.sql	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-INSERT INTO geoapp_city ("name", "point") VALUES ('Houston', GeomFromText('POINT (-95.363151 29.763374)', 4326));
-INSERT INTO geoapp_city ("name", "point") VALUES ('Dallas', GeomFromText('POINT (-96.801611 32.782057)', 4326));
-INSERT INTO geoapp_city ("name", "point") VALUES ('Oklahoma City', GeomFromText('POINT (-97.521157 34.464642)', 4326));
-INSERT INTO geoapp_city ("name", "point") VALUES ('Wellington', GeomFromText('POINT (174.783117 -41.315268)', 4326));
-INSERT INTO geoapp_city ("name", "point") VALUES ('Pueblo', GeomFromText('POINT (-104.609252 38.255001)', 4326));
-INSERT INTO geoapp_city ("name", "point") VALUES ('Lawrence', GeomFromText('POINT (-95.235060 38.971823)', 4326));
-INSERT INTO geoapp_city ("name", "point") VALUES ('Chicago', GeomFromText('POINT (-87.650175 41.850385)', 4326));
-INSERT INTO geoapp_city ("name", "point") VALUES ('Victoria', GeomFromText('POINT (-123.305196 48.462611)', 4326));
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/co.wkt	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-POLYGON ((-107.9184209999999800 41.0020359999999970, -107.6913358243141800 41.0021042503422490, -107.6256240000000000 41.0021240000000020, -107.5215053632723100 41.0025067105257720, -107.3674429999999900 41.0030730000000010, -107.3177944624011200 41.0029672133671140, -107.3053129562196700 41.0029406188977600, -107.2411939999999900 41.0028039999999980, -107.0006060000000000 41.0034439999999950, -106.8577729999999900 41.0026629999999910, -106.4538589999999900 41.0020569999999940, -106.4395630000000100 41.0019780000000010, -106.4374190000000100 41.0017949999999940, -106.4309500000000000 41.0017519999999960, -106.3918520000000000 41.0011760000000010, -106.3863560000000100 41.0011439999999960, -106.3211649999999900 40.9991229999999970, -106.2175730000000000 40.9977340000000010, -106.1946242545105400 40.9976261471179200, -106.1905405794911800 40.9976069549524670, -106.0611809999999900 40.9969990000000020, -105.7642468572674100 40.9968975561793200, -105.7304210000000100 40.9968860000000030, -105.7248040000000100 40.9969100000000000, -105.5544177044212800 40.9973907108230620, -105.4122207031675800 40.9977918911954480, -105.2771379999999800 40.9981730000000010, -105.2565270000000100 40.9981909999999980, -105.2547790000000000 40.9982100000000000, -105.1734357616781100 40.9981770152523170, -104.9433706805682100 40.9980837236793720, -104.8552730000000000 40.9980479999999970, -104.8295039999999900 40.9992700000000030, -104.6759990000000000 41.0009570000000000, -104.4971489999999900 41.0018280000000030, -104.4970580000000000 41.0018049999999970, -104.4676719999999800 41.0014729999999970, -104.2146920000000000 41.0016570000000020, -104.2141910000000000 41.0015679999999990, -104.2114730000000000 41.0015909999999980, -104.1235859999999900 41.0016259999999950, -104.1045900000000000 41.0015429999999910, -104.0860679999999800 41.0015629999999970, -104.0669609999999900 41.0015039999999970, -104.0532489999999900 41.0014059999999960, -104.0392380000000000 41.0015020000000020, -104.0233829999999800 41.0018870000000040, -104.0182230000000100 41.0016170000000030, -104.0108048867797200 41.0016166745085400, -103.9726419999999800 41.0016150000000010, -103.9713730000000000 41.0015240000000030, -103.9535250000000000 41.0015959999999990, -103.9063240000000000 41.0013870000000010, -103.8962070000000000 41.0017500000000010, -103.8779670000000000 41.0016729999999900, -103.8584489999999900 41.0016809999999980, -103.7504979999999900 41.0020540000000010, -103.5745220000000000 41.0017210000000030, -103.4974469999999900 41.0016350000000000, -103.4866970000000100 41.0019139999999990, -103.4219750000000000 41.0020069999999990, -103.4219250000000000 41.0019689999999950, -103.3969909999999900 41.0025580000000010, -103.3653139999999800 41.0018460000000000, -103.3629790000000000 41.0018439999999910, -103.0778040000000000 41.0022980000000030, -103.0765360000000000 41.0022530000000030, -103.0595379999999900 41.0023679999999970, -103.0579980000000000 41.0023679999999970, -103.0434439999999900 41.0023440000000010, -103.0387040000000000 41.0022510000000010, -103.0020260000000000 41.0024859999999980, -103.0001019999999800 41.0024000000000020, -102.9826900000000100 41.0021569999999970, -102.9814830000000000 41.0021119999999970, -102.9636689999999800 41.0021859999999950, -102.9625220000000100 41.0020719999999980, -102.9607060000000000 41.0020589999999960, -102.9596239999999900 41.0020949999999970, -102.9448300000000000 41.0023029999999980, -102.9431090000000100 41.0020510000000020, -102.9255680000000000 41.0022799999999990, -102.9240290000000000 41.0021419999999990, -102.9065469999999900 41.0022759999999950, -102.9047960000000000 41.0022069999999990, -102.8874069999999800 41.0021780000000010, -102.8857460000000000 41.0021309999999990, -102.8678220000000000 41.0021830000000020, -102.8657839999999900 41.0019879999999970, -102.8492629999999900 41.0023010000000030, -102.8464550000000100 41.0022560000000030, -102.8303029999999900 41.0023509999999970, -102.8272800000000000 41.0021429999999970, -102.7735460000000000 41.0024140000000020, -102.7667230000000000 41.0022749999999900, -102.7546170000000000 41.0023609999999930, -102.7396239999999900 41.0022299999999970, -102.6534629999999900 41.0023320000000030, -102.6210330000000000 41.0025970000000020, -102.5786959999999900 41.0022910000000000, -102.5757380000000000 41.0022680000000010, -102.5754960000000000 41.0022000000000020, -102.5660479999999900 41.0022000000000020, -102.5567889999999900 41.0022189999999970, -102.5177010715824500 41.0023473358779430, -102.4879549999999900 41.0024449999999940, -102.4705369999999800 41.0023819999999970, -102.4692230000000000 41.0024239999999980, -102.4603345936969100 41.0024118023655500, -102.3877509894849600 41.0023121952773270, -102.3803729919328400 41.0023020703894620, -102.3795930000000000 41.0023010000000030, -102.3640659999999900 41.0021739999999970, -102.2928330000000000 41.0022069999999990, -102.2926219999999900 41.0022299999999970, -102.2925530000000000 41.0022069999999990, -102.2913540000000000 41.0022069999999990, -102.2778034555739900 41.0022337435695480, -102.2720999999999900 41.0022450000000020, -102.2678119999999900 41.0023830000000020, -102.2319310000000000 41.0023270000000010, -102.2121999999999800 41.0024620000000010, -102.2093610000000000 41.0024420000000020, -102.2090839362510100 41.0024402293320020, -102.2077760551977500 41.0024318708833140, -102.1912100000000000 41.0023259999999960, -102.1249720000000000 41.0023380000000020, -102.0705980000000000 41.0024230000000000, -102.0516140000000000 41.0023770000000030, -102.0512919999999900 40.7495910000000020, -102.0516344326070000 40.5821295926172280, -102.0517250000000000 40.5378389999999910, -102.0515190000000000 40.5200940000000000, -102.0514649999999900 40.4400079999999990, -102.0518400000000000 40.3963960000000030, -102.0515719999999900 40.3930799999999980, -102.0517979999999900 40.3600690000000030, -102.0515855426165400 40.3506461457410240, -102.0513090000000000 40.3383809999999980, -102.0519220000000000 40.2353439999999980, -102.0518939999999900 40.2291929999999950, -102.0519089999999900 40.1626740000000030, -102.0520010000000000 40.1483589999999990, -102.0518526008886700 40.0644696175368220, -102.0517440000000000 40.0030780000000020, -102.0517155646578700 39.9781730274562650, -102.0515690000000000 39.8498050000000030, -102.0513629999999900 39.8434710000000010, -102.0513179999999900 39.8333110000000020, -102.0512540000000000 39.8189920000000010, -102.0505939999999900 39.6755939999999900, -102.0500990000000000 39.6538120000000020, -102.0504219999999800 39.6460479999999930, -102.0499540000000000 39.5923310000000010, -102.0498059999999900 39.5740580000000010, -102.0495539999999900 39.5389320000000030, -102.0496730000000000 39.5366909999999980, -102.0496790000000000 39.5061830000000000, -102.0493690000000000 39.4233330000000000, -102.0493700000000000 39.4182100000000020, -102.0491669999999800 39.4035969999999980, -102.0489599999999800 39.3737119999999900, -102.0484490000000100 39.3031379999999900, -102.0472500000000100 39.1370200000000000, -102.0471339999999900 39.1297009999999970, -102.0465709999999900 39.0470380000000010, -102.0453879999999900 38.8133919999999930, -102.0453340000000000 38.7994630000000030, -102.0454479999999900 38.7834530000000020, -102.0453710000000000 38.7700639999999980, -102.0452870000000000 38.7555279999999980, -102.0453750000000100 38.7543389999999950, -102.0452119999999900 38.6975669999999990, -102.0451560000000100 38.6885550000000010, -102.0451269999999900 38.6867250000000030, -102.0451600000000000 38.6752210000000010, -102.0451020000000000 38.6749459999999980, -102.0450740000000000 38.6696170000000020, -102.0452880000000000 38.6152489999999990, -102.0452109999999900 38.5816089999999930, -102.0451889999999800 38.5587319999999920, -102.0452229999999900 38.5437969999999980, -102.0451120000000000 38.5237839999999990, -102.0452619999999900 38.5055319999999950, -102.0452629999999900 38.5053950000000000, -102.0453239999999800 38.4536469999999970, -102.0449360000000100 38.4196800000000000, -102.0444419999999900 38.4158019999999990, -102.0449440000000000 38.3844190000000010, -102.0446130000000000 38.3123239999999970, -102.0445680000000000 38.2688190000000010, -102.0443980000000000 38.2500149999999980, -102.0442510000000000 38.1417779999999950, -102.0445353236236500 38.1276753800285280, -102.0445890000000000 38.1250129999999960, -102.0445402773320500 38.1232621932310920, -102.0442550000000100 38.1130109999999930, -102.0446235449346800 38.0490802965374900, -102.0446310070721800 38.0477858554663160, -102.0446440000000100 38.0455320000000010, -102.0446200858831200 38.0420217065706370, -102.0445393420861100 38.0301695264644910, -102.0438440000000100 37.9281019999999960, -102.0438450000000000 37.9261350000000020, -102.0432189999999900 37.8679289999999900, -102.0430329999999900 37.8241459999999990, -102.0429530000000000 37.8035349999999970, -102.0426680000000100 37.7887580000000010, -102.0421580000000000 37.7601640000000030, -102.0418760000000000 37.7238750000000000, -102.0415740000000000 37.6804360000000000, -102.0416940000000100 37.6656809999999990, -102.0415819999999900 37.6544949999999970, -102.0415850000000000 37.6442819999999970, -102.0416180000000000 37.6078680000000030, -102.0417794058394900 37.5786915552958260, -102.0418940000000000 37.5579770000000010, -102.0418990000000000 37.5411860000000030, -102.0420159999999900 37.5352609999999980, -102.0417860000000000 37.5060659999999970, -102.0418009999999900 37.4694879999999980, -102.0417549999999900 37.4348549999999920, -102.0416690000000000 37.4347399999999980, -102.0416759999999800 37.4098979999999910, -102.0415240000000000 37.3750179999999970, -102.0420890000000000 37.3528189999999970, -102.0419740000000000 37.3526129999999980, -102.0418169999999900 37.3094899999999970, -102.0416640000000000 37.2976499999999900, -102.0419630000000000 37.2581640000000010, -102.0420020000000000 37.1417440000000030, -102.0421350000000000 37.1250209999999970, -102.0420920000000000 37.1250209999999970, -102.0418089999999900 37.1119729999999990, -102.0419830000000000 37.1065510000000030, -102.0419199999999900 37.0350830000000000, -102.0417490000000000 37.0343969999999980, -102.0419210000000000 37.0321780000000020, -102.0419500000000000 37.0308050000000010, -102.0419519999999900 37.0247419999999960, -102.0422400000000100 36.9930829999999990, -102.0545030000000000 36.9931089999999970, -102.1842710000000000 36.9935929999999970, -102.2083160000000000 36.9937299999999990, -102.2607890000000000 36.9943880000000010, -102.2703456818352900 36.9943999333374620, -102.3075936504973800 36.9944464445206690, -102.3552880000000000 36.9945059999999940, -102.3553670000000000 36.9945749999999980, -102.6981420000000000 36.9951489999999980, -102.7420599999999800 36.9976890000000010, -102.7598600000000000 37.0000190000000020, -102.7785689999999900 36.9992420000000020, -102.8067620000000100 37.0000190000000020, -102.8146160000000000 37.0007829999999980, -102.8419890000000000 36.9995979999999990, -102.9796130000000000 36.9985489999999970, -102.9858069999999900 36.9985709999999980, -102.9869760000000000 36.9985240000000030, -103.0021990000000000 37.0001040000000000, -103.0861049694139500 37.0001738656940380, -103.1054053653286500 37.0001899364881130, -103.1559220000000000 37.0002319999999970, -103.2006317284721000 37.0000603865096880, -103.3271777694062600 36.9995746531243130, -103.4256788724330500 36.9991965672206930, -103.7332470000000100 36.9980159999999930, -103.7343639999999900 36.9980410000000010, -104.0078549999999900 36.9962390000000030, -104.2154754884639700 36.9948744321965890, -104.2505359999999800 36.9946440000000010, -104.2975706429598400 36.9940532503817470, -104.3388329999999900 36.9935350000000010, -104.3556505253503100 36.9935565317715810, -104.3664476855351100 36.9935703555644370, -104.3992028820832900 36.9936122926149620, -104.4297693866500100 36.9936514274448880, -104.4806103169752700 36.9937165199763950, -104.5192570000000000 36.9937659999999940, -104.6245560000000000 36.9943769999999930, -104.6255450000000000 36.9935990000000030, -104.6450289999999900 36.9933779999999930, -104.7061122072671500 36.9934264441886570, -104.7320310000000100 36.9934470000000030, -104.7321199999999800 36.9934840000000020, -104.8399904125201100 36.9933955928282070, -105.0005539999999800 36.9932640000000030, -105.0292279999999900 36.9927289999999900, -105.1208000000000000 36.9954279999999970, -105.1550419641015100 36.9953391471581630, -105.2206130000000000 36.9951689999999970, -105.2512960000000000 36.9956049999999980, -105.4193100000000000 36.9958560000000030, -105.4381027436132300 36.9959680306975970, -105.4424590000000000 36.9959940000000030, -105.4472550000000000 36.9960169999999950, -105.4651820000000000 36.9959909999999970, -105.4708767069258500 36.9959784767062560, -105.5088359999999900 36.9958949999999900, -105.5124850000000000 36.9957769999999970, -105.5339220000000000 36.9958749999999980, -105.6274699999999900 36.9956790000000030, -105.6647199999999900 36.9958740000000010, -105.7164710000000000 36.9958489999999930, -105.7184073045491700 36.9958460161492080, -105.9961590000000100 36.9954180000000010, -105.9974720000000000 36.9954170000000030, -106.0066339999999900 36.9953429999999980, -106.0998058674331200 36.9947591067049760, -106.1639713822180900 36.9943569916150140, -106.2014689999999900 36.9941219999999970, -106.2477050000000000 36.9942660000000030, -106.2486750000000100 36.9942879999999900, -106.2932790000000000 36.9938900000000000, -106.3254286788247500 36.9941092316646730, -106.3431389999999800 36.9942300000000020, -106.4762779528519600 36.9938393350510210, -106.5005890000000100 36.9937679999999960, -106.6171590000000000 36.9929670000000000, -106.6171249999999900 36.9930039999999990, -106.6286520000000000 36.9931750000000010, -106.6287329999999800 36.9931609999999940, -106.6613440000000000 36.9932430000000000, -106.6756259999999900 36.9931229999999970, -106.7505910000000000 36.9924609999999990, -106.7820952897146500 36.9924517499673660, -106.8697959999999900 36.9924259999999950, -106.8772919999999800 37.0001389999999900, -106.9188864633427000 37.0001287471619240, -106.9560183645763800 37.0001195943242540, -107.1072626267445100 37.0000823133304520, -107.2552027234696400 37.0000458467977750, -107.4209130000000000 37.0000049999999940, -107.4224150136806600 37.0000049896361030, -107.4421819991443200 37.0000048532438730, -107.4817370013986600 37.0000045803142900, -107.5240868464170200 37.0000042881002860, -107.6007136407778000 37.0000037593752680, -107.7124779008385600 37.0000029882016790, -107.8556954995019300 37.0000020000000020, -107.8663089376175300 37.0000019267672610, -107.8691399085863600 37.0000019072335460, -107.8691806993063300 37.0000019069521000, -108.0006230000000000 37.0000009999999970, -108.1791870752784600 36.9992931616249270, -108.1871395402988700 36.9992616375912750, -108.2493580000000000 36.9990150000000000, -108.2506349999999900 36.9995610000000000, -108.2880860000000100 36.9995550000000010, -108.2884000000000000 36.9995199999999970, -108.3204640000000000 36.9994990000000000, -108.3207209999999900 36.9995100000000010, -108.3791655704288800 36.9994589777070430, -108.6196889999999900 36.9992489999999990, -108.6203090000000100 36.9992870000000020, -108.7492698254058500 36.9991399338227680, -108.9544040000000000 36.9989059999999980, -108.9588680000000000 36.9989130000000020, -109.0452229999999900 36.9990840000000030, -109.0451659999999800 37.0727419999999980, -109.0450580000000000 37.0746609999999990, -109.0449950000000000 37.0864290000000030, -109.0451889999999900 37.0962709999999940, -109.0451730000000100 37.1094640000000030, -109.0452029999999900 37.1119579999999940, -109.0451559999999900 37.1120639999999970, -109.0459950000000000 37.1772789999999990, -109.0459780000000100 37.2018309999999990, -109.0458015051062800 37.2050708135988660, -109.0454869999999900 37.2108440000000020, -109.0455598795331900 37.2397756720027080, -109.0455601977475200 37.2399019965338450, -109.0455839999999900 37.2493509999999970, -109.0460389999999900 37.2499930000000030, -109.0458980422733100 37.3269349905485300, -109.0458100000000000 37.3749930000000030, -109.0437991323256200 37.4690283342420190, -109.0434637832608200 37.4847104508718160, -109.0434249427800400 37.4865267700853340, -109.0431370000000000 37.4999919999999990, -109.0419150000000000 37.5306530000000010, -109.0418650000000000 37.5307260000000010, -109.0418059999999900 37.6041710000000010, -109.0421310000000000 37.6176620000000030, -109.0420890000000000 37.6237950000000010, -109.0422690000000000 37.6660669999999980, -109.0417320000000000 37.7112139999999980, -109.0417600000000000 37.7131820000000030, -109.0416360000000000 37.7402099999999980, -109.0420980000000000 37.7499899999999970, -109.0420421489000700 37.7543839997998490, -109.0414610000000000 37.8001050000000020, -109.0417540000000000 37.8358259999999900, -109.0417229999999900 37.8420509999999980, -109.0418440000000000 37.8727880000000000, -109.0416528185789500 37.8811669027885570, -109.0410580000000100 37.9072359999999970, -109.0431209999999900 37.9742600000000010, -109.0428189999999900 37.9970679999999990, -109.0428199999999900 37.9993010000000030, -109.0419724039658400 38.1317991668174590, -109.0418366569747100 38.1530194495367920, -109.0417619999999900 38.1646900000000000, -109.0546480000000000 38.2449209999999980, -109.0600619999999900 38.2754890000000000, -109.0599620000000000 38.4999869999999900, -109.0602530000000000 38.5993279999999930, -109.0595410000000000 38.7198879999999970, -109.0573880000000000 38.7954559999999940, -109.0572160449167600 38.7997308495970760, -109.0541889999999900 38.8749839999999980, -109.0539429999999900 38.9044140000000030, -109.0537970000000000 38.9052839999999950, -109.0532330000000100 38.9424670000000010, -109.0532919999999800 38.9428780000000000, -109.0524359999999900 38.9999850000000020, -109.0515879125035400 39.1157342577700790, -109.0515835157382700 39.1163343400931040, -109.0515807806367500 39.1167076340895430, -109.0515120000000000 39.1260949999999990, -109.0507650000000000 39.3666770000000030, -109.0513629999999800 39.4976740000000040, -109.0510402483332400 39.6604720118441210, -109.0506149999999900 39.8749699999999980, -109.0508730000000000 40.0589149999999990, -109.0508130000000100 40.0595789999999920, -109.0509440000000000 40.1807119999999930, -109.0509730000000000 40.1808490000000020, -109.0509687158226500 40.2226624122704100, -109.0509460000000000 40.4443679999999970, -109.0503140000000000 40.4950920000000000, -109.0506979999999800 40.4999630000000010, -109.0499550000000000 40.5399010000000000, -109.0500740000000000 40.5403579999999980, -109.0500719640466700 40.5404371043087370, -109.0480440000000000 40.6192309999999990, -109.0482490000000000 40.6536009999999950, -109.0490880000000000 40.7145620000000010, -109.0484550000000000 40.8260810000000020, -109.0500760000000000 41.0006589999999990, -108.8841379999999900 41.0000939999999970, -108.6311080000000000 41.0001559999999900, -108.5266670000000000 40.9996080000000020, -108.5006590000000000 41.0001120000000010, -108.2506490000000000 41.0001140000000040, -108.1812270000000100 41.0004549999999950, -108.0892190031385500 41.0015541392473680, -108.0465390000000000 41.0020639999999970, -107.9232341223959400 41.0020370519008000, -107.9184209999999800 41.0020359999999970))
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/country.mysql.sql	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
--- New Zealand bondary courtesy of 'world_borders.shp', which was assembled from public domain sources by Schuyler Erle. See: http://mappinghacks.com/data/
--- Texas boundary data is a data product from the U.S. Census Bureau.  See 'state.sql' for more information.
-INSERT INTO geoapp_country (`name`, `mpoly`) VALUES ('New Zealand', GeomFromText('MULTIPOLYGON (((174.616364000000004 -36.100861000000002,174.634978999999987 -36.124718,174.708862000000011 -36.205559,174.781096999999988 -36.266945,174.812744000000009 -36.339165,174.768311000000011 -36.34639,174.710784999999987 -36.525832999999999,174.708587999999992 -36.533332999999999,174.70773299999999 -36.541671999999998,174.714690999999988 -36.595832999999999,174.717194000000006 -36.603057999999997,174.774414000000007 -36.730277999999998,174.808319000000012 -36.805275000000002,174.854400999999996 -36.847777999999998,174.896636999999998 -36.878334000000002,175.011658000000011 -36.871941,175.020813000000004 -36.873610999999997,175.055542000000003 -36.880279999999999,175.076629999999994 -36.890839,175.082458000000003 -36.895279000000002,175.087463000000014 -36.900832999999999,175.091644000000002 -36.925559999999997,175.161652000000004 -36.955559,175.221069 -36.937775000000002,175.230255 -36.939438000000003,175.278320000000008 -36.965279000000002,175.310516000000007 -36.995002999999997,175.319976999999994 -37.005836000000002,175.323853000000014 -37.012222,175.328856999999999 -37.026947,175.330261000000007 -37.035277999999998,175.330535999999995 -37.044449,175.321899000000002 -37.06472,175.31942699999999 -37.095275999999998,175.317748999999992 -37.144165,175.319121999999993 -37.152495999999999,175.328856999999999 -37.168892,175.373290999999995 -37.216659999999997,175.385254000000003 -37.225830000000002,175.404967999999997 -37.228050000000003,175.579131999999987 -37.244446000000003,175.58914200000001 -37.169449,175.551636000000002 -37.024718999999997,175.547484999999995 -37.009171000000002,175.542480000000012 -36.994446000000003,175.536102 -36.980826999999998,175.524993999999992 -36.961669999999998,175.498566000000011 -36.927222999999998,175.484406000000007 -36.920279999999998,175.476348999999999 -36.917777999999998,175.464416999999997 -36.90889,175.435241999999988 -36.866942999999999,175.46691899999999 -36.809998,175.509430000000009 -36.776108,175.486358999999993 -36.679726000000002,175.463593000000003 -36.621383999999999,175.378296000000006 -36.570557,175.366364000000004 -36.561667999999997,175.361633000000012 -36.556389000000003,175.356628 -36.541671999999998,175.353850999999992 -36.525002,175.35244800000001 -36.489998,175.353577 -36.481940999999999,175.360229000000004 -36.478050000000003,175.538025000000005 -36.514724999999999,175.542755 -36.519996999999996,175.604950000000002 -36.622771999999998,175.631072999999986 -36.710555999999997,175.763610999999997 -36.713614999999997,175.840789999999998 -36.754173000000002,175.733582000000013 -36.805832000000002,175.701629999999994 -36.844161999999997,175.707458000000003 -36.869995000000003,175.709960999999993 -36.875275000000002,175.714690999999988 -36.880828999999999,175.720519999999993 -36.885277000000002,175.735779000000008 -36.891387999999999,175.74383499999999 -36.893889999999999,175.758330999999998 -36.876106,175.761382999999995 -36.869446000000003,175.757751000000013 -36.863059999999997,175.753051999999997 -36.857779999999998,175.749114999999989 -36.851394999999997,175.75 -36.843055999999997,175.752196999999995 -36.835555999999997,175.756378000000012 -36.830002,175.765533000000005 -36.828055999999997,175.808013999999986 -36.824173000000002,175.817200000000014 -36.825836000000002,175.833587999999992 -36.830832999999998,175.845519999999993 -36.839722000000002,175.849120999999997 -36.846107000000003,175.878570999999994 -36.914444000000003,175.881072999999986 -36.921669,175.918304000000006 -37.067504999999997,175.917480000000012 -37.075836000000002,175.915253000000007 -37.083061,175.898314999999997 -37.115004999999996,175.884154999999993 -37.168892,175.883330999999998 -37.176949,175.887206999999989 -37.244163999999998,175.892212 -37.249724999999998,175.921082000000013 -37.251671000000002,175.927185000000009 -37.256110999999997,175.93081699999999 -37.262504999999997,175.936371000000008 -37.278885000000002,175.940093999999988 -37.299717,175.974396000000013 -37.418059999999997,175.976074000000011 -37.453055999999997,176.026931999999988 -37.483108999999999,176.035583000000003 -37.487282,176.059417999999994 -37.502502,176.088287000000008 -37.525557999999997,176.093291999999991 -37.531112999999998,176.165526999999997 -37.613892,176.169433999999995 -37.620277000000002,176.167205999999993 -37.625832000000003,176.160247999999996 -37.624167999999997,176.082458000000003 -37.602500999999997,176.066924999999998 -37.59639,176.061095999999992 -37.591942000000003,176.057189999999991 -37.585555999999997,176.062744000000009 -37.580832999999998,176.070800999999989 -37.577781999999999,176.088287000000008 -37.580002,176.095245000000006 -37.576110999999997,176.090239999999994 -37.570838999999999,176.062468999999993 -37.546669,176.023087000000004 -37.528221000000002,176.018767999999994 -37.526057999999999,176.013931000000014 -37.524554999999999,176.007598999999999 -37.524222999999999,175.955535999999995 -37.521110999999998,175.946349999999995 -37.523055999999997,175.940796000000006 -37.527779000000002,175.953583000000009 -37.558891000000003,175.994415000000004 -37.638893000000003,176.071899000000002 -37.655273,176.14498900000001 -37.675277999999999,176.242187999999999 -37.709442000000003,176.267486999999988 -37.676392,176.488281 -37.756667999999998,176.521636999999998 -37.769447,176.527771 -37.773887999999999,176.537475999999998 -37.784447,176.549712999999997 -37.793334999999999,176.656646999999992 -37.855559999999997,176.671082000000013 -37.862502999999997,176.686645999999996 -37.868332000000002,176.759154999999993 -37.892775999999998,176.784149000000014 -37.900275999999998,176.80304000000001 -37.903328000000002,176.819702000000007 -37.904442000000003,176.838287000000008 -37.907501000000003,176.917755 -37.926108999999997,176.943848000000003 -37.932502999999997,177.08273299999999 -37.967216,177.107468000000011 -37.987220999999998,177.159424 -38.013336000000002,177.415253000000007 -37.982498,177.47357199999999 -37.962502,177.545806999999996 -37.919167000000002,177.552459999999996 -37.915000999999997,177.571625000000012 -37.902222000000002,177.599120999999997 -37.878051999999997,177.603577 -37.872498,177.646941999999996 -37.805,177.732178000000005 -37.682502999999997,177.738861000000014 -37.678336999999999,177.746917999999994 -37.675277999999999,177.791931000000005 -37.666946000000003,177.849396000000013 -37.657218999999998,177.858856000000003 -37.656661999999997,177.868010999999996 -37.654442000000003,177.875792999999987 -37.651389999999999,178.0 -37.592224000000002,178.006653 -37.588332999999999,178.012206999999989 -37.583328000000002,178.018004999999988 -37.550831000000002,178.05581699999999 -37.542777999999998,178.064972000000012 -37.542228999999999,178.187744000000009 -37.546951,178.281921000000011 -37.560828999999998,178.306915000000004 -37.568061999999998,178.311919999999986 -37.573334000000003,178.312468999999993 -37.578887999999999,178.306915000000004 -37.583610999999998,178.321075000000008 -37.602500999999997,178.336365 -37.618332000000002,178.34970100000001 -37.626944999999999,178.367737000000005 -37.630828999999999,178.448028999999991 -37.645279000000002,178.457458000000003 -37.646667,178.468018 -37.646949999999997,178.488861000000014 -37.644165,178.497192000000013 -37.646667,178.504424999999998 -37.649994,178.550536999999991 -37.6875,178.555542000000003 -37.692497000000003,178.559692000000013 -37.698883000000002,178.56552099999999 -37.713332999999999,178.562468999999993 -37.719994,178.483306999999996 -37.826393000000003,178.455230999999998 -37.860000999999997,178.449982000000006 -37.865004999999996,178.429687999999999 -37.876944999999999,178.419983000000002 -37.887779000000002,178.350525000000005 -38.004722999999998,178.347473000000008 -38.011116,178.347197999999992 -38.019722000000002,178.348846000000009 -38.027779000000002,178.354950000000002 -38.032218999999998,178.360229000000004 -38.037506,178.364136000000002 -38.043616999999998,178.375792999999987 -38.072777000000002,178.378296000000006 -38.089995999999999,178.377746999999999 -38.09861,178.353850999999992 -38.185555,178.319976999999994 -38.248055,178.318024000000008 -38.255561999999998,178.317474000000004 -38.263893000000003,178.320800999999989 -38.398612999999997,178.302459999999996 -38.528885000000002,178.300536999999991 -38.536391999999999,178.296356000000003 -38.541946000000003,178.158874999999995 -38.649169999999998,178.074982000000006 -38.713889999999999,178.068297999999999 -38.717773,178.060241999999988 -38.721107000000003,178.050812000000008 -38.721381999999998,178.044433999999995 -38.717216,177.928864000000004 -38.722220999999998,177.941070999999994 -38.793616999999998,177.923858999999993 -38.918334999999999,177.917786000000007 -38.942802,177.909697999999992 -38.969718999999998,177.897705000000002 -39.047942999999997,177.893859999999989 -39.064776999999999,177.906708000000009 -39.064278000000002,177.923034999999999 -39.089165,177.942200000000014 -39.091942000000003,177.967743000000013 -39.098334999999999,177.991332999999997 -39.115004999999996,177.996612999999996 -39.120277000000002,177.999390000000005 -39.127495000000003,177.909973000000008 -39.256950000000003,177.898865 -39.267502,177.874968999999993 -39.286118000000002,177.868010999999996 -39.290283000000002,177.861908 -39.285834999999999,177.844970999999987 -39.251396,177.839416999999997 -39.236946000000003,177.824127000000004 -39.193053999999997,177.823577999999998 -39.183883999999999,177.826629999999994 -39.177222999999998,177.841644000000002 -39.152779000000002,177.822021000000007 -39.114445000000003,177.823195999999996 -39.110115,177.82351700000001 -39.105110000000003,177.82119800000001 -39.101275999999999,177.816696000000007 -39.099274,177.680266999999986 -39.075279000000002,177.628845000000013 -39.071114,177.426085999999998 -39.064163,177.387755999999996 -39.077781999999999,177.246917999999994 -39.128334000000002,177.206085000000002 -39.143616000000002,177.149138999999991 -39.165000999999997,177.054961999999989 -39.204445,176.935790999999995 -39.349997999999999,176.931365999999997 -39.355559999999997,176.903870000000012 -39.398055999999997,176.898865 -39.412216,176.89776599999999 -39.438048999999999,176.899414000000007 -39.446387999999999,176.946625000000012 -39.664444000000003,177.01080300000001 -39.654998999999997,177.107178000000005 -39.660828000000002,177.116913000000011 -39.662216,177.120789000000002 -39.66861,177.119110000000006 -39.676108999999997,177.115783999999991 -39.682502999999997,177.08273299999999 -39.729996,177.073577999999998 -39.741385999999999,177.068024000000008 -39.746108999999997,177.059692000000013 -39.749167999999997,177.050262000000004 -39.751396,177.033874999999995 -39.757506999999997,177.028045999999989 -39.762504999999997,177.023590000000013 -39.768059,177.020263999999997 -39.774718999999997,176.894713999999993 -40.034728999999999,176.890533000000005 -40.049728000000002,176.889983999999998 -40.058052000000004,176.89498900000001 -40.082779000000002,176.893035999999995 -40.090279000000002,176.874114999999989 -40.121383999999999,176.834136999999998 -40.181671,176.808319000000012 -40.216659999999997,176.796935999999988 -40.226387000000003,176.687195000000003 -40.321387999999999,176.644135000000006 -40.379997000000003,176.628296000000006 -40.421944000000003,176.539977999999991 -40.495002999999997,176.521362000000011 -40.513893000000003,176.500823999999994 -40.535004,176.441924999999998 -40.600281000000003,176.405243000000013 -40.643889999999999,176.386108000000007 -40.675002999999997,176.35522499999999 -40.688606,176.349396000000013 -40.693610999999997,176.288574000000011 -40.793892,176.239136000000002 -40.90889,176.22079500000001 -40.931671,176.195526 -40.941665999999998,176.172760000000011 -40.952224999999999,176.158600000000007 -40.959999000000003,176.152771 -40.964722000000002,176.142212 -40.975273,176.134154999999993 -40.987502999999997,176.120789000000002 -41.013618,176.11300700000001 -41.035277999999998,176.098297000000002 -41.087218999999997,176.087463000000014 -41.116112,176.080811000000011 -41.129165999999998,176.062195000000003 -41.151938999999999,175.984679999999997 -41.231383999999998,175.955230999999998 -41.255279999999999,175.819121999999993 -41.347220999999998,175.743561 -41.392226999999998,175.736358999999993 -41.396110999999998,175.557738999999998 -41.485000999999997,175.471069 -41.541389000000002,175.427459999999996 -41.564444999999999,175.323028999999991 -41.614449,175.313292999999987 -41.616394,175.230804000000006 -41.620834000000002,175.222197999999992 -41.618332000000002,175.21691899999999 -41.612777999999999,175.184692000000013 -41.535834999999999,175.181915000000004 -41.519447,175.181091000000009 -41.500838999999999,175.188568000000004 -41.461112999999997,175.193024000000008 -41.446106,175.193848000000003 -41.437775000000002,175.191070999999994 -41.430557,175.186095999999992 -41.425002999999997,175.080261000000007 -41.385559,175.063018999999997 -41.380279999999999,175.05304000000001 -41.378608999999997,175.045532000000009 -41.378608999999997,175.027190999999988 -41.381667999999998,174.993286000000012 -41.393332999999998,174.985779000000008 -41.397224,174.972747999999996 -41.405830000000002,174.960509999999999 -41.415275999999999,174.949982000000006 -41.425559999999997,174.944976999999994 -41.431114,174.94165000000001 -41.437775000000002,174.936919999999986 -41.443328999999999,174.918578999999994 -41.448051,174.908600000000007 -41.448334000000003,174.872467 -41.429442999999999,174.86605800000001 -41.425002999999997,174.861084000000005 -41.419724000000002,174.861633000000012 -41.347496,174.863861000000014 -41.340279000000002,174.870789000000002 -41.327224999999999,174.87912 -41.315002,174.883881000000002 -41.309441,174.894440000000003 -41.290000999999997,174.89776599999999 -41.282501000000003,174.899993999999992 -41.275002,174.901916999999997 -41.258338999999999,174.901916999999997 -41.251114,174.898865 -41.234444000000003,174.89498900000001 -41.228050000000003,174.887482000000006 -41.224442000000003,174.827179 -41.218887000000002,174.818848000000003 -41.221938999999999,174.787475999999998 -41.244446000000003,174.778045999999989 -41.255836000000002,174.774414000000007 -41.262222,174.771087999999992 -41.278053,174.778594999999996 -41.281387000000002,174.796082000000013 -41.286949,174.818024000000008 -41.284728999999999,174.824127000000004 -41.289169,174.829407000000003 -41.294724000000002,174.833313000000004 -41.301108999999997,174.832184000000012 -41.309441,174.82995600000001 -41.316665999999998,174.826355000000007 -41.323334000000003,174.821625000000012 -41.328887999999999,174.815796000000006 -41.333610999999998,174.807189999999991 -41.336387999999999,174.744689999999991 -41.347496,174.700531000000012 -41.344444000000003,174.671906000000007 -41.338332999999999,174.654694000000006 -41.333061,174.648314999999997 -41.328612999999997,174.629669000000007 -41.315002,174.59191899999999 -41.27861,174.591644000000002 -41.271385000000002,174.594116000000014 -41.263893000000003,174.601074000000011 -41.250838999999999,174.608306999999996 -41.237777999999999,174.61300700000001 -41.232216,174.619110000000006 -41.23111,174.627746999999999 -41.233887000000003,174.637482000000006 -41.235557999999997,174.648590000000013 -41.234444000000003,174.666931000000005 -41.229720999999998,174.681365999999997 -41.221938999999999,174.694702000000007 -41.213614999999997,174.712738000000002 -41.199440000000003,174.718567000000007 -41.194716999999997,174.800812000000008 -41.100281000000003,174.844421000000011 -41.041671999999998,174.874390000000005 -41.018059,174.882721000000004 -41.015006999999997,174.892486999999988 -41.013061999999998,174.901093000000003 -41.010283999999999,174.908324999999991 -41.006393000000003,174.932189999999991 -40.987502999999997,174.94165000000001 -40.976387000000003,174.945251000000013 -40.969718999999998,174.947478999999987 -40.962218999999997,175.014983999999998 -40.84861,175.09857199999999 -40.755836000000002,175.112731999999994 -40.738892,175.120789000000002 -40.726944000000003,175.127746999999999 -40.713614999999997,175.164153999999996 -40.631943,175.169708000000014 -40.616942999999999,175.171906000000007 -40.609726000000002,175.187468999999993 -40.530830000000002,175.23800700000001 -40.329726999999998,175.23135400000001 -40.280830000000002,175.201629999999994 -40.181671,175.196349999999995 -40.166946000000003,175.178314 -40.134171000000002,175.15554800000001 -40.095832999999999,175.071625000000012 -40.003059,175.055542000000003 -39.987777999999999,175.022217000000012 -39.958053999999997,174.986358999999993 -39.93,174.974120999999997 -39.920836999999999,174.960784999999987 -39.912773,174.938873 -39.902222000000002,174.923034999999999 -39.895836000000003,174.836638999999991 -39.865004999999996,174.828307999999993 -39.862502999999997,174.790802000000014 -39.854720999999998,174.781096999999988 -39.853057999999997,174.751373 -39.865555,174.740509000000003 -39.866661,174.729674999999986 -39.865836999999999,174.57607999999999 -39.829169999999998,174.558013999999986 -39.824722,174.549408 -39.822226999999998,174.542205999999993 -39.818610999999997,174.523865 -39.805,174.421356000000003 -39.726944000000003,174.410521999999986 -39.716942000000003,174.376068000000004 -39.678612,174.353577 -39.639999000000003,174.348846000000009 -39.634444999999999,174.336638999999991 -39.625557,174.316070999999994 -39.613892,174.30886799999999 -39.610283000000003,174.217194000000006 -39.579726999999998,174.208862000000011 -39.577224999999999,174.040802000000014 -39.552779999999998,173.997741999999988 -39.551392,173.986908 -39.550552000000003,173.970245000000006 -39.545279999999998,173.963012999999989 -39.541671999999998,173.871062999999992 -39.483330000000002,173.851898000000006 -39.470551,173.839966000000004 -39.461387999999999,173.810790999999995 -39.4375,173.79525799999999 -39.421944000000003,173.786652000000004 -39.409996,173.775817999999987 -39.390839,173.769713999999993 -39.376944999999999,173.762206999999989 -39.354720999999998,173.754424999999998 -39.305,173.751923000000005 -39.288612,173.751647999999989 -39.269996999999996,173.781921000000011 -39.191383000000002,173.785247999999996 -39.184998,173.800536999999991 -39.169167000000002,173.82995600000001 -39.145836000000003,173.844421000000011 -39.138336000000002,173.868010999999996 -39.128883000000002,173.892761000000007 -39.120552000000004,174.011108000000007 -39.073334000000003,174.114685000000009 -39.024445,174.187744000000009 -38.988608999999997,174.209136999999998 -38.977218999999998,174.226623999999987 -38.972496,174.248016000000007 -38.970551,174.259978999999987 -38.970275999999998,174.281372000000005 -38.969994,174.293029999999987 -38.969994,174.313292999999987 -38.972496,174.351348999999999 -38.979438999999999,174.375244000000009 -38.979163999999997,174.384704999999997 -38.977218999999998,174.392761000000007 -38.974442000000003,174.456359999999989 -38.940277000000002,174.546082000000013 -38.871941,174.557738999999998 -38.860557999999997,174.568024000000008 -38.850281000000003,174.587738000000002 -38.828887999999999,174.594421000000011 -38.815834000000002,174.603302000000014 -38.786118000000002,174.608582000000013 -38.763061999999998,174.625518999999997 -38.677779999999998,174.642486999999988 -38.590836000000003,174.681091000000009 -38.379165999999998,174.724396000000013 -38.185828999999998,174.838561999999996 -38.157218999999998,174.848021999999986 -38.156944000000003,174.85635400000001 -38.154167,174.926636000000002 -38.116112,174.932465000000008 -38.111389000000003,174.940246999999999 -38.101112,174.898590000000013 -38.075004999999997,174.877166999999986 -38.064163,174.892486999999988 -37.976387000000003,174.893585000000002 -37.969994,174.868286000000012 -37.943610999999997,174.861084000000005 -37.939995000000003,174.85522499999999 -37.944716999999997,174.834686000000005 -37.963614999999997,174.830261000000007 -37.969161999999997,174.828033000000005 -37.976661999999997,174.828583000000009 -37.995002999999997,174.822754000000003 -37.999724999999998,174.814696999999995 -38.002502,174.804137999999995 -38.001944999999999,174.797211000000004 -37.998336999999999,174.791077 -37.993614,174.786376999999987 -37.988334999999999,174.783874999999995 -37.980826999999998,174.783600000000007 -37.971663999999997,174.788025000000005 -37.868332000000002,174.788879000000009 -37.860000999999997,174.791077 -37.852783000000002,174.795532000000009 -37.846947,174.819702000000007 -37.829169999999998,174.826629999999994 -37.825279000000002,174.841339000000005 -37.818610999999997,174.872741999999988 -37.806106999999997,174.883330999999998 -37.805,174.903045999999989 -37.807502999999997,174.945251000000013 -37.810555,174.967467999999997 -37.809165999999998,174.975525000000005 -37.806389000000003,174.974975999999998 -37.75,174.974670000000003 -37.740836999999999,174.966644000000002 -37.739998,174.951355000000007 -37.743057,174.94442699999999 -37.745002999999997,174.93081699999999 -37.752502,174.906921000000011 -37.774169999999998,174.870789000000002 -37.783057999999997,174.861633000000012 -37.785004,174.848297000000002 -37.769722000000002,174.828307999999993 -37.710830999999999,174.764160000000004 -37.527779000000002,174.744415000000004 -37.487502999999997,174.724975999999998 -37.447220000000002,174.717467999999997 -37.425002999999997,174.714690999999988 -37.408607000000003,174.714690999999988 -37.399445,174.719116000000014 -37.393616000000002,174.725799999999992 -37.389999000000003,174.744415000000004 -37.385834000000003,174.760528999999991 -37.380279999999999,174.767486999999988 -37.376389000000003,174.773041000000006 -37.371665999999998,174.831635000000006 -37.308052000000004,174.840789999999998 -37.296951,174.840515000000011 -37.291389000000002,174.82995600000001 -37.290557999999997,174.821899000000002 -37.291671999999998,174.812744000000009 -37.293616999999998,174.804687999999999 -37.296393999999999,174.797760000000011 -37.300277999999999,174.766083000000009 -37.321114,174.754700000000014 -37.330559,174.751373 -37.336945,174.744965000000008 -37.359169,174.740509000000003 -37.364722999999998,174.733582000000013 -37.368606999999997,174.724120999999997 -37.368889000000003,174.717194000000006 -37.365279999999998,174.711365 -37.360557999999997,174.701629999999994 -37.349724000000002,174.69442699999999 -37.336945,174.660187000000008 -37.273311999999997,174.645813000000004 -37.236389000000003,174.639709000000011 -37.224442000000003,174.599975999999998 -37.153885000000002,174.578307999999993 -37.115555,174.569976999999994 -37.103614999999998,174.555542000000003 -37.087502,174.551909999999992 -37.080832999999998,174.549712999999997 -37.073616,174.55304000000001 -37.067222999999998,174.558593999999999 -37.0625,174.568848000000003 -37.061385999999999,174.644135000000006 -37.061110999999997,174.661376999999987 -37.065551999999997,174.664977999999991 -37.071944999999999,174.666381999999999 -37.080283999999999,174.661925999999994 -37.085830999999999,174.650542999999999 -37.095275999999998,174.646087999999992 -37.100838000000003,174.648590000000013 -37.108055,174.703856999999999 -37.197777000000002,174.733856000000003 -37.196106,174.716644000000002 -37.154167,174.72357199999999 -37.150275999999998,174.87912 -37.088889999999999,174.887482000000006 -37.059165999999998,174.795532000000009 -37.023055999999997,174.804413000000011 -36.972220999999998,174.824982000000006 -36.960830999999999,174.829407000000003 -36.955002,174.83273299999999 -36.948608,174.828033000000005 -36.943053999999997,174.818848000000003 -36.941383000000002,174.770263999999997 -36.936661,174.696625000000012 -36.93972,174.686095999999992 -36.940834000000002,174.659697999999992 -36.947495000000004,174.653045999999989 -36.951393000000003,174.641662999999994 -36.960830999999999,174.622467 -36.982216,174.619110000000006 -36.988892,174.617187999999999 -36.996108999999997,174.600525000000005 -37.022224,174.524688999999995 -37.045555,174.515533000000005 -37.045555,174.508605999999986 -37.041946000000003,174.502472000000012 -37.037506,174.498016000000007 -37.031944000000003,174.490783999999991 -37.019165,174.484679999999997 -37.005561999999998,174.459228999999993 -36.944031000000003,174.451904000000013 -36.923889000000003,174.446930000000009 -36.909163999999997,174.443024000000008 -36.893616000000002,174.439147999999989 -36.868606999999997,174.436645999999996 -36.852226000000002,174.43386799999999 -36.835555999999997,174.427764999999994 -36.812775000000002,174.422760000000011 -36.798057999999997,174.416655999999989 -36.784171999999998,174.409697999999992 -36.771385000000002,174.406096999999988 -36.765006999999997,174.390533000000005 -36.740279999999998,174.344299000000007 -36.679336999999997,174.301085999999998 -36.62722,174.284973000000008 -36.612777999999999,174.267486999999988 -36.599167,174.236908 -36.568061999999998,174.208862000000011 -36.535277999999998,174.187744000000009 -36.496948000000003,174.17804000000001 -36.467498999999997,174.177764999999994 -36.458336000000003,174.178864000000004 -36.449997000000003,174.181091000000009 -36.442497000000003,174.184417999999994 -36.436110999999997,174.189972000000012 -36.431389000000003,174.196930000000009 -36.427779999999998,174.20495600000001 -36.428612,174.24383499999999 -36.440834000000002,174.251923000000005 -36.443610999999997,174.257751000000013 -36.448051,174.300262000000004 -36.515839,174.348846000000009 -36.601944000000003,174.367919999999998 -36.629165999999998,174.370728000000014 -36.6325,174.422484999999995 -36.667220999999998,174.430542000000003 -36.668059999999997,174.453033000000005 -36.651108,174.456359999999989 -36.644722000000002,174.465515000000011 -36.582779000000002,174.465515000000011 -36.532218999999998,174.442474000000004 -36.414718999999998,174.422211000000004 -36.366112,174.41885400000001 -36.370834000000002,174.391937000000013 -36.395004,174.384978999999987 -36.398887999999999,174.377166999999986 -36.401665,174.303864000000004 -36.395279000000002,174.296935999999988 -36.391669999999998,174.285247999999996 -36.3825,174.276916999999997 -36.370552000000004,174.26998900000001 -36.357779999999998,174.268585000000002 -36.349442000000003,174.268585000000002 -36.342224000000002,174.292205999999993 -36.316947999999996,174.299988000000013 -36.314163,174.308013999999986 -36.316947999999996,174.325531000000012 -36.330283999999999,174.334686000000005 -36.332222000000002,174.36883499999999 -36.331673000000002,174.376891999999998 -36.330832999999998,174.421248999999989 -36.310611999999999,174.50692699999999 -36.267220000000002,174.518311000000011 -36.258057,174.521636999999998 -36.251396,174.519135000000006 -36.245834000000002,174.505248999999992 -36.231383999999998,174.413299999999992 -36.263061999999998,174.378296000000006 -36.286667,174.364685000000009 -36.294167000000002,174.346619000000004 -36.298057999999997,174.336365 -36.298889000000003,174.305237000000005 -36.287506,174.365233999999987 -36.260002,174.442200000000014 -36.169724000000002,174.396087999999992 -36.144447,174.396362000000011 -36.151938999999999,174.394135000000006 -36.159163999999997,174.373290999999995 -36.206389999999999,174.369965000000008 -36.213057999999997,174.358856000000003 -36.222220999999998,174.345245000000006 -36.229720999999998,174.337463000000014 -36.232773000000002,174.33273299999999 -36.229163999999997,174.307738999999998 -36.176949,174.282745000000006 -36.121108999999997,174.274993999999992 -36.118332000000002,174.239409999999992 -36.111389000000003,174.229126000000008 -36.112502999999997,174.195251000000013 -36.131110999999997,174.188568000000004 -36.144165,174.185790999999995 -36.171944000000003,174.191345000000013 -36.176392,174.19830300000001 -36.18,174.217743000000013 -36.182502999999997,174.226898000000006 -36.182502999999997,174.236084000000005 -36.180557,174.244110000000006 -36.183059999999998,174.287749999999988 -36.210281000000002,174.312468999999993 -36.236663999999998,174.314696999999995 -36.243889000000003,174.267212 -36.270279000000002,174.259430000000009 -36.273055999999997,174.251373 -36.272499000000003,174.065796000000006 -36.168334999999999,173.999114999999989 -36.121108999999997,173.994415000000004 -36.115836999999999,173.99105800000001 -36.109444000000003,173.931091000000009 -35.981940999999999,173.938568000000004 -35.934998,173.947478999999987 -35.923889000000003,173.948577999999998 -35.915550000000003,173.946075000000008 -35.908051,173.913879000000009 -35.86972,173.908324999999991 -35.874442999999999,173.903870000000012 -35.879997000000003,173.904967999999997 -35.888336000000002,173.921356000000003 -36.003059,173.980804000000006 -36.121383999999999,173.987731999999994 -36.134171000000002,173.992461999999989 -36.139724999999999,174.124390000000005 -36.263618,174.176085999999998 -36.276947,174.180542000000003 -36.282501000000003,174.198853000000014 -36.343887000000002,174.199982000000006 -36.352226000000002,174.198028999999991 -36.368606999999997,174.194702000000007 -36.375275000000002,174.189147999999989 -36.379722999999998,174.115233999999987 -36.40361,174.089966000000004 -36.411385000000003,174.080811000000011 -36.409438999999999,174.06942699999999 -36.400275999999998,174.065796000000006 -36.393889999999999,174.057465000000008 -36.374718,174.049133000000012 -36.353614999999998,174.044433999999995 -36.338889999999999,174.039703000000003 -36.323334000000003,174.031096999999988 -36.293059999999997,174.020537999999988 -36.273887999999999,173.82607999999999 -36.032501000000003,173.737457000000006 -35.933608999999997,173.727172999999993 -35.923614999999998,173.590515000000011 -35.778053,173.398865 -35.573891000000003,173.395537999999988 -35.567504999999997,173.398865 -35.553612,173.446625000000012 -35.440277000000002,173.465789999999998 -35.429169000000002,173.501923000000005 -35.419724000000002,173.506378000000012 -35.425277999999999,173.540253000000007 -35.430832000000002,173.629943999999995 -35.356667000000002,173.65554800000001 -35.322502,173.65554800000001 -35.313332000000003,173.564147999999989 -35.278053,173.556091000000009 -35.280830000000002,173.551636000000002 -35.286391999999999,173.549712999999997 -35.302779999999998,173.549712999999997 -35.321114,173.551909999999992 -35.328612999999997,173.566924999999998 -35.344161999999997,173.568024000000008 -35.361671,173.566924999999998 -35.36972,173.559143000000006 -35.372771999999998,173.439696999999995 -35.376106,173.416077 -35.384444999999999,173.410247999999996 -35.388893000000003,173.391356999999999 -35.423057999999997,173.39498900000001 -35.449722,173.396087999999992 -35.458053999999997,173.392761000000007 -35.482773000000002,173.386382999999995 -35.523330999999999,173.380524000000008 -35.528053,173.37384 -35.524169999999998,173.306915000000004 -35.449165,173.237731999999994 -35.370277000000002,173.154144000000002 -35.276665,173.103302000000014 -35.226104999999997,173.09191899999999 -35.216942000000003,173.087463000000014 -35.211387999999999,173.09191899999999 -35.1875,173.098846000000009 -35.183608999999997,173.119110000000006 -35.185555,173.12802099999999 -35.1875,173.134704999999997 -35.191108999999997,173.14498900000001 -35.191940000000002,173.152771 -35.189163,173.163879000000009 -35.179169000000002,173.168578999999994 -35.173614999999998,173.18081699999999 -35.156104999999997,173.187468999999993 -35.143332999999998,173.191924999999998 -35.128334000000002,173.196349999999995 -35.104446000000003,173.197478999999987 -35.09639,173.198577999999998 -35.078887999999999,173.198577999999998 -35.051108999999997,173.193848000000003 -35.027222000000002,173.189423000000005 -35.012779000000002,173.179413000000011 -34.993332000000002,173.175812000000008 -34.986946000000003,173.159149000000014 -34.958336000000003,173.151093000000003 -34.946663,173.137755999999996 -34.93,172.947204999999997 -34.716942000000003,172.828033000000005 -34.584442000000003,172.812468999999993 -34.568893000000003,172.722473000000008 -34.495277000000002,172.739136000000002 -34.435555,172.900817999999987 -34.414718999999998,172.911925999999994 -34.414718999999998,173.020813000000004 -34.422226000000002,173.038879000000009 -34.436942999999999,173.043304000000006 -34.517775999999998,173.039977999999991 -34.522224,173.033324999999991 -34.525832999999999,173.024414000000007 -34.527779000000002,173.016662999999994 -34.52861,173.007476999999994 -34.526947,172.997467 -34.498336999999999,172.984130999999991 -34.472771000000002,172.961914000000007 -34.465279000000002,172.955230999999998 -34.468887000000002,172.908324999999991 -34.544167000000002,172.912749999999988 -34.549728000000002,172.923858999999993 -34.558891000000003,172.936095999999992 -34.567222999999998,172.973021999999986 -34.581116000000002,173.053314 -34.665550000000003,173.057738999999998 -34.680283000000003,173.110503999999992 -34.791389000000002,173.120789000000002 -34.810555,173.128570999999994 -34.822502,173.133026 -34.828055999999997,173.13857999999999 -34.832504,173.151916999999997 -34.839995999999999,173.213593000000003 -34.871941,173.242737000000005 -34.884726999999998,173.273314999999997 -34.940834000000002,173.268859999999989 -34.946387999999999,173.262206999999989 -34.959167,173.259978999999987 -34.966659999999997,173.258881000000002 -34.974716,173.259978999999987 -34.983055,173.264709000000011 -35.014449999999997,173.269135000000006 -35.019722000000002,173.317474000000004 -35.018889999999999,173.328583000000009 -35.009444999999999,173.358856000000003 -34.98111,173.36300700000001 -34.975555,173.366364000000004 -34.968887000000002,173.373259999999988 -34.936774999999997,173.371246000000014 -34.927444,173.400817999999987 -34.863334999999999,173.426085999999998 -34.82,173.450806 -34.807777000000002,173.500274999999988 -34.864722999999998,173.499114999999989 -34.871108999999997,173.492461999999989 -34.874718,173.452453999999989 -34.887779000000002,173.443297999999999 -34.889724999999999,173.433319000000012 -34.890555999999997,173.413025000000005 -34.888893000000003,173.405243000000013 -34.892502,173.399719000000005 -34.897224,173.399719000000005 -34.906387000000002,173.402190999999988 -34.913887000000003,173.411590999999987 -34.931778,173.419128 -34.945830999999998,173.426909999999992 -34.957779000000002,173.431641000000013 -34.963332999999999,173.44165000000001 -34.973328000000002,173.454131999999987 -34.981667000000002,173.467467999999997 -34.988892,173.475525000000005 -34.991669000000002,173.493286000000012 -34.995277000000002,173.541655999999989 -34.988608999999997,173.561645999999996 -34.958893000000003,173.562468999999993 -34.950836000000002,173.566924999999998 -34.936110999999997,173.572478999999987 -34.931389000000003,173.579131999999987 -34.927779999999998,173.589416999999997 -34.928612,173.83914200000001 -35.004173000000002,174.101074000000011 -35.121108999999997,174.098297000000002 -35.161667,174.091644000000002 -35.158051,174.056641000000013 -35.155555999999997,174.021911999999986 -35.164161999999997,174.008026 -35.207504,174.008026 -35.215004,174.011382999999995 -35.221381999999998,174.018311000000011 -35.224997999999999,174.093841999999995 -35.225273,174.100525000000005 -35.228881999999999,174.143585000000002 -35.328612999999997,174.208008000000007 -35.323334000000003,174.218018 -35.322226999999998,174.247741999999988 -35.27861,174.319976999999994 -35.232773000000002,174.383881000000002 -35.337775999999998,174.461638999999991 -35.445273999999998,174.491913000000011 -35.485275,174.575806 -35.601944000000003,174.577179 -35.610000999999997,174.577147999999994 -35.618088,174.569976999999994 -35.648055999999997,174.563292999999987 -35.651665,174.530272999999994 -35.649445,174.520263999999997 -35.648612999999997,174.513306 -35.645004,174.505248999999992 -35.642502,174.479126000000008 -35.641945,174.47357199999999 -35.646393000000003,174.474975999999998 -35.654716,174.518311000000011 -35.724167,174.523041000000006 -35.729438999999999,174.554137999999995 -35.750281999999999,174.561919999999986 -35.753059,174.583862000000011 -35.764724999999999,174.60244800000001 -35.844444000000003,174.596924 -35.849167,174.58914200000001 -35.851944000000003,174.577758999999986 -35.852226000000002,174.560790999999995 -35.847777999999998,174.554961999999989 -35.843330000000002,174.538574000000011 -35.819450000000003,174.523314999999997 -35.796669,174.519713999999993 -35.790283000000002,174.49105800000001 -35.769447,174.361908 -35.723328000000002,174.357451999999995 -35.72361,174.34857199999999 -35.734726000000002,174.346924 -35.833061,174.350525000000005 -35.839438999999999,174.35522499999999 -35.845001000000003,174.360779000000008 -35.849442000000003,174.381348000000003 -35.851112,174.384704999999997 -35.844718999999998,174.385528999999991 -35.828887999999999,174.391083000000009 -35.824173000000002,174.398865 -35.821387999999999,174.437468999999993 -35.822777000000002,174.476074000000011 -35.824173000000002,174.486358999999993 -35.824722,174.519713999999993 -35.844718999999998,174.525542999999999 -35.849167,174.524414000000007 -35.855559999999997,174.521362000000011 -35.862220999999998,174.501373 -35.889999000000003,174.496917999999994 -35.895553999999997,174.487182999999987 -35.915000999999997,174.495513999999986 -35.988608999999997,174.498016000000007 -35.994163999999998,174.514160000000004 -36.008614,174.56942699999999 -36.037224000000002,174.578583000000009 -36.038894999999997,174.587738000000002 -36.038894999999997,174.596619000000004 -36.036667,174.606902999999988 -36.037506,174.612731999999994 -36.042228999999999,174.622192000000013 -36.053055,174.62912 -36.065834000000002,174.629394999999988 -36.075004999999997,174.616364000000004 -36.100861000000002)),((171.185241999999988 -44.938332000000003,171.182129000000003 -44.94173,171.175017999999994 -44.949902000000002,171.167923000000002 -44.959850000000003,171.165436 -44.966599000000002,171.164703000000003 -44.970275999999998,171.163299999999992 -44.978332999999999,171.149719000000005 -44.996665999999998,171.07995600000001 -45.067222999999998,171.02664200000001 -45.103332999999999,170.975525000000005 -45.151108,170.966063999999989 -45.163055,170.961914000000007 -45.169167000000002,170.921630999999991 -45.243057,170.873566000000011 -45.358055,170.873290999999995 -45.367218,170.876891999999998 -45.373885999999999,170.871338000000009 -45.424171,170.859955000000014 -45.487502999999997,170.855804000000006 -45.493889000000003,170.750274999999988 -45.61972,170.674682999999987 -45.745002999999997,170.616913000000011 -45.839438999999999,170.55886799999999 -45.881667999999998,170.554413000000011 -45.888053999999997,170.555542000000003 -45.896110999999998,170.591063999999989 -45.894165,170.600525000000005 -45.891669999999998,170.608582000000013 -45.888053999999997,170.658600000000007 -45.858612,170.718018 -45.817504999999997,170.724670000000003 -45.813057,170.773314999999997 -45.782775999999998,170.781096999999988 -45.786391999999999,170.790802000000014 -45.806946000000003,170.790802000000014 -45.84639,170.788879000000009 -45.863892,170.783051 -45.878334000000002,170.776366999999993 -45.882773999999998,170.699982000000006 -45.911667,170.664429000000013 -45.908332999999999,170.57330300000001 -45.916663999999997,170.550536999999991 -45.919167000000002,170.484406000000007 -45.926949,170.452453999999989 -45.931946000000003,170.424408 -45.939438000000003,170.382721000000004 -45.956108,170.342467999999997 -45.97361,170.315246999999999 -45.991385999999999,170.309692000000013 -45.996948000000003,170.294433999999995 -46.013893000000003,170.281646999999992 -46.029442000000003,170.263610999999997 -46.051940999999999,170.256378000000012 -46.065551999999997,170.253051999999997 -46.081947,170.252472000000012 -46.09111,170.254424999999998 -46.107779999999998,170.252777000000009 -46.115836999999999,170.240783999999991 -46.146949999999997,170.237731999999994 -46.154167,170.226623999999987 -46.165000999999997,170.214416999999997 -46.174720999999998,170.193848000000003 -46.188048999999999,170.169433999999995 -46.198608,170.067748999999992 -46.246665999999998,169.911925999999994 -46.340279000000002,169.863585999999998 -46.371383999999999,169.858001999999999 -46.376663,169.849396000000013 -46.389442000000003,169.848021999999986 -46.416946000000003,169.849975999999998 -46.433326999999998,169.852172999999993 -46.440834000000002,169.853850999999992 -46.457504,169.850799999999992 -46.464722000000002,169.845245000000006 -46.469994,169.701904000000013 -46.558052000000004,169.631348000000003 -46.581947,169.458008000000007 -46.623328999999998,169.266388000000006 -46.656387000000002,169.133026 -46.670836999999999,169.107727000000011 -46.669167000000002,169.097197999999992 -46.666946000000003,169.084411999999986 -46.657501000000003,169.067200000000014 -46.635002,169.061919999999986 -46.675002999999997,169.053864000000004 -46.678612,169.008026 -46.680832000000002,168.883330999999998 -46.667777999999998,168.878296000000006 -46.661942000000003,168.861908 -46.628334000000002,168.862457000000006 -46.619446000000003,168.864409999999992 -46.611114999999998,168.864959999999996 -46.603889000000002,168.844970999999987 -46.563614,168.835784999999987 -46.560555,168.823853000000014 -46.561110999999997,168.733306999999996 -46.577499000000003,168.640533000000005 -46.603889000000002,168.633605999999986 -46.606392,168.614685000000009 -46.611114999999998,168.593018 -46.614165999999997,168.568848000000003 -46.615004999999996,168.516937000000013 -46.614165999999997,168.492737000000005 -46.613334999999999,168.442138999999997 -46.601500999999999,168.436630000000008 -46.599666999999997,168.446625000000012 -46.584003000000003,168.442200000000014 -46.575004999999997,168.454407000000003 -46.574447999999997,168.490509000000003 -46.573059,168.502472000000012 -46.574173000000002,168.506103999999993 -46.578887999999999,168.499114999999989 -46.583328000000002,168.505553999999989 -46.588051,168.551636000000002 -46.594444000000003,168.561371000000008 -46.591942000000003,168.566924999999998 -46.586661999999997,168.563599000000011 -46.580002,168.550812000000008 -46.570557,168.541655999999989 -46.567504999999997,168.391356999999999 -46.540000999999997,168.361908 -46.544449,168.353577 -46.547783000000003,168.351623999999987 -46.556106999999997,168.352172999999993 -46.564444999999999,168.362731999999994 -46.583885000000002,168.348236000000014 -46.582165000000003,168.352904999999993 -46.584499,168.359267999999986 -46.585830999999999,168.365082 -46.592666999999999,168.367248999999987 -46.596668,168.367599000000013 -46.601497999999999,168.364928999999989 -46.605331,168.35775799999999 -46.604500000000002,168.351409999999987 -46.603164999999997,168.275269000000009 -46.557777000000002,168.269135000000006 -46.535561,168.268311000000011 -46.529167,168.27664200000001 -46.525832999999999,168.286102 -46.523330999999999,168.307738999999998 -46.520553999999997,168.318297999999999 -46.520836000000003,168.318848000000003 -46.529167,168.321075000000008 -46.536667,168.328856999999999 -46.540557999999997,168.339416999999997 -46.539169,168.386658000000011 -46.497779999999999,168.392486999999988 -46.492226000000002,168.395537999999988 -46.485000999999997,168.396087999999992 -46.477775999999999,168.394135000000006 -46.470275999999998,168.37384 -46.421944000000003,168.36883499999999 -46.416106999999997,168.359679999999997 -46.415000999999997,168.350249999999988 -46.417503000000004,168.250274999999988 -46.400832999999999,168.211090000000013 -46.355277999999998,168.206085000000002 -46.351394999999997,168.194702000000007 -46.345551,168.185516000000007 -46.342498999999997,168.174988000000013 -46.340279000000002,168.116364000000004 -46.343612999999998,168.063873 -46.351669,167.955535999999995 -46.371383999999999,167.893035999999995 -46.387222,167.850799999999992 -46.399445,167.832184000000012 -46.398612999999997,167.824401999999992 -46.394447,167.753875999999991 -46.333885000000002,167.776916999999997 -46.312775000000002,167.781372000000005 -46.306389000000003,167.783600000000007 -46.298340000000003,167.781372000000005 -46.290840000000003,167.778045999999989 -46.284171999999998,167.701904000000013 -46.209442000000003,167.596924 -46.166389000000002,167.556641000000013 -46.156387000000002,167.546356000000003 -46.154167,167.534424 -46.152779000000002,167.483032000000009 -46.149726999999999,167.471069 -46.149994,167.460236000000009 -46.151389999999999,167.451904000000013 -46.154716,167.446075000000008 -46.159996,167.415526999999997 -46.204720000000002,167.356628 -46.254447999999996,167.280272999999994 -46.273055999999997,167.261108000000007 -46.267775999999998,167.238555999999988 -46.263893000000003,167.086638999999991 -46.240555,167.001373 -46.229163999999997,166.966063999999989 -46.224716,166.949982000000006 -46.223885000000003,166.915253000000007 -46.226104999999997,166.883026 -46.229996,166.836365 -46.232498,166.823028999999991 -46.231667000000002,166.768035999999995 -46.22361,166.726348999999999 -46.214165,166.717467999999997 -46.210830999999999,166.705230999999998 -46.201110999999997,166.670806999999996 -46.161667,166.67025799999999 -46.15361,166.684417999999994 -46.145004,166.693848000000003 -46.142775999999998,166.709411999999986 -46.135277000000002,166.738861000000014 -46.119163999999998,166.761230000000012 -46.093612999999998,166.784911999999991 -46.064945000000002,166.804748999999987 -46.033279,166.82995600000001 -46.003891000000003,166.854674999999986 -45.994163999999998,166.886932000000002 -45.990279999999998,166.943297999999999 -45.956108,166.949127000000004 -45.950836000000002,166.946930000000009 -45.945273999999998,166.939147999999989 -45.944716999999997,166.929687999999999 -45.947220000000002,166.836365 -45.981383999999998,166.828033000000005 -45.984444000000003,166.791350999999992 -46.005004999999997,166.785797000000002 -46.010283999999999,166.781096999999988 -46.016396,166.759308000000004 -46.035553,166.762969999999996 -46.038387,166.764969000000008 -46.042392999999997,166.763656999999995 -46.047221999999998,166.760162000000008 -46.050392000000002,166.740982000000002 -46.066059000000003,166.737793000000011 -46.066558999999998,166.670532000000009 -46.087218999999997,166.615783999999991 -46.090836000000003,166.613585999999998 -46.086387999999999,166.617461999999989 -46.059722999999998,166.621062999999992 -46.052498,166.640807999999993 -46.015006999999997,166.661652000000004 -45.991942999999999,166.625792999999987 -45.967216,166.492461999999989 -46.013061999999998,166.484406000000007 -46.014449999999997,166.474975999999998 -46.002785000000003,166.467194000000006 -45.990555,166.465239999999994 -45.983055,166.464690999999988 -45.839438999999999,166.468841999999995 -45.823059,166.472473000000008 -45.815834000000002,166.476898000000006 -45.809722999999998,166.537475999999998 -45.798889000000003,166.613861000000014 -45.801108999999997,166.652190999999988 -45.800277999999999,166.699982000000006 -45.798889000000003,166.881348000000003 -45.779998999999997,166.890807999999993 -45.777779000000002,166.974120999999997 -45.735000999999997,166.987182999999987 -45.709724,166.923034999999999 -45.705832999999998,166.912475999999998 -45.705275999999998,166.887482000000006 -45.705002,166.854126000000008 -45.707779000000002,166.825806 -45.714722000000002,166.809417999999994 -45.721381999999998,166.787475999999998 -45.689995000000003,166.775817999999987 -45.662773,166.81153900000001 -45.617942999999997,166.811217999999997 -45.613109999999999,166.812531000000007 -45.608111999999998,166.816710999999998 -45.605606000000002,166.869689999999991 -45.588779000000002,166.881026999999989 -45.586112999999997,166.88736 -45.585278000000002,166.895203000000009 -45.585608999999998,166.901366999999993 -45.587108999999998,166.912871999999993 -45.590946000000002,166.980255 -45.578612999999997,166.991913000000011 -45.580002,167.0 -45.576949999999997,167.005829000000006 -45.571671000000002,167.032470999999987 -45.527779000000002,167.041350999999992 -45.501396,166.989685000000009 -45.519165,166.891693000000004 -45.544724000000002,166.796875 -45.569389,166.791199000000006 -45.570720999999999,166.784836000000013 -45.571556,166.777023000000014 -45.571219999999997,166.710509999999999 -45.579445,166.704407000000003 -45.574447999999997,166.697204999999997 -45.554718,166.699127000000004 -45.546669,166.757476999999994 -45.425277999999999,166.801361000000014 -45.353614999999998,166.821625000000012 -45.320557,166.86883499999999 -45.279724000000002,166.880797999999999 -45.279167,167.008330999999998 -45.341667,167.038299999999992 -45.357779999999998,167.146941999999996 -45.427222999999998,167.16885400000001 -45.472496,167.205230999999998 -45.477775999999999,167.211914000000007 -45.475273,167.21414200000001 -45.467216,167.209411999999986 -45.461387999999999,167.173584000000005 -45.422775,167.158019999999993 -45.406661999999997,167.134978999999987 -45.386116,167.12912 -45.381385999999999,167.115509000000003 -45.372222999999998,167.097747999999996 -45.366112,167.087463000000014 -45.363616999999998,167.061645999999996 -45.345001000000003,167.051085999999998 -45.333328000000002,167.081421000000006 -45.325333,167.08407600000001 -45.321666999999998,167.092407000000009 -45.316498000000003,167.097243999999989 -45.314498999999998,167.114227 -45.310333,167.163574000000011 -45.302833999999997,167.169922000000014 -45.302998000000002,167.173584000000005 -45.305999999999997,167.176422000000002 -45.309330000000003,167.17756700000001 -45.313834999999997,167.212738000000002 -45.313332000000003,167.218841999999995 -45.318336000000002,167.232178000000005 -45.327224999999999,167.239685000000009 -45.331116000000002,167.248566000000011 -45.334167,167.260254000000003 -45.335830999999999,167.270813000000004 -45.334442000000003,167.301636000000002 -45.329445,167.309692000000013 -45.326110999999997,167.307738999999998 -45.318610999999997,167.300262000000004 -45.314444999999999,167.19464099999999 -45.271445999999997,167.138290000000012 -45.268943999999998,167.099471999999992 -45.272114000000002,167.094146999999992 -45.271278000000002,167.08964499999999 -45.268776000000003,167.002196999999995 -45.201110999999997,166.996917999999994 -45.145836000000003,167.146362000000011 -45.001671000000002,167.198577999999998 -44.956108,167.204407000000003 -44.951110999999997,167.228302000000014 -44.930832000000002,167.24105800000001 -44.921387000000003,167.260528999999991 -44.907501000000003,167.267486999999988 -44.903053,167.312744000000009 -44.875,167.320800999999989 -44.871383999999999,167.393462999999997 -44.862999000000002,167.398987000000005 -44.861496000000002,167.404312000000004 -44.863498999999997,167.421798999999993 -44.894168999999998,167.422974000000011 -44.898665999999999,167.420638999999994 -44.908496999999997,167.417968999999999 -44.912166999999997,167.440796000000006 -44.928612,167.439972000000012 -44.9375,167.441924999999998 -44.945,167.459686000000005 -44.99472,167.497741999999988 -45.003891000000003,167.507202000000007 -45.001396,167.508224000000013 -45.0,167.511658000000011 -44.995277000000002,167.511108000000007 -44.986946000000003,167.47908000000001 -44.903446000000002,167.465912000000003 -44.876441999999997,167.462752999999992 -44.867947,167.461578000000003 -44.863444999999999,167.460097999999988 -44.853946999999998,167.459411999999986 -44.843944999999998,167.459914999999995 -44.838444000000003,167.448577999999998 -44.795279999999998,167.453033000000005 -44.788894999999997,167.458587999999992 -44.783614999999998,167.59970100000001 -44.683883999999999,167.743010999999996 -44.611671,167.838866999999993 -44.498610999999997,167.850249999999988 -44.488052000000003,167.949982000000006 -44.40361,167.963593000000003 -44.395004,168.034973000000008 -44.353614999999998,168.12802099999999 -44.316947999999996,168.141662999999994 -44.308052000000004,168.144713999999993 -44.300834999999999,168.144135000000006 -44.292503000000004,168.124099999999999 -44.251404,168.143311000000011 -44.253059,168.153594999999996 -44.251396,168.169708000000014 -44.24472,168.288299999999992 -44.172775,168.29385400000001 -44.167503000000004,168.336638999999991 -44.123885999999999,168.339966000000004 -44.116661,168.337738000000002 -44.109169,168.334411999999986 -44.102783000000002,168.336365 -44.094444000000003,168.369689999999991 -44.043334999999999,168.374968999999993 -44.037781000000003,168.383026 -44.034447,168.402771 -44.029724000000002,168.672211000000004 -43.987777999999999,168.676909999999992 -43.993614,168.683043999999995 -43.998336999999999,168.690246999999999 -44.002228000000002,168.715239999999994 -44.012222,168.723021999999986 -44.012504999999997,168.753875999999991 -44.010002,168.764160000000004 -44.008614,168.824401999999992 -43.988334999999999,168.858582000000013 -43.976661999999997,168.866364000000004 -43.973328000000002,168.879669000000007 -43.964447,168.885254000000003 -43.959167,168.961914000000007 -43.90361,169.080765000000014 -43.848472999999998,169.142212 -43.794167000000002,169.224396000000013 -43.743332000000002,169.271636999999998 -43.722496,169.387482000000006 -43.679169000000002,169.491318000000007 -43.643467,169.539153999999996 -43.633614,169.62661700000001 -43.613892,169.64498900000001 -43.608893999999999,169.652771 -43.605559999999997,169.660521999999986 -43.601944000000003,169.721619000000004 -43.573334000000003,169.728302000000014 -43.568893000000003,169.739136000000002 -43.558052000000004,169.767486999999988 -43.522773999999998,169.790526999999997 -43.496665999999998,169.871062999999992 -43.406661999999997,169.884154999999993 -43.397781000000002,169.961638999999991 -43.371941,170.021911999999986 -43.352500999999997,170.028594999999996 -43.347777999999998,170.033874999999995 -43.342498999999997,170.038025000000005 -43.336112999999997,170.049408 -43.306946000000003,170.111358999999993 -43.254173000000002,170.288299999999992 -43.107779999999998,170.418029999999987 -43.052498,170.523041000000006 -43.010559,170.531921000000011 -43.008057,170.583037999999988 -42.990555,170.674347000000012 -42.958739999999999,170.704407000000003 -42.945830999999998,170.750549000000007 -42.924720999999998,170.781096999999988 -42.910553,170.794128 -42.901389999999999,171.065796000000006 -42.648055999999997,171.108306999999996 -42.608055,171.149719000000005 -42.563614,171.153594999999996 -42.55722,171.196075000000008 -42.476661999999997,171.225799999999992 -42.433608999999997,171.230255 -42.40889,171.235779000000008 -42.394165,171.247467 -42.375,171.260254000000003 -42.366112,171.270537999999988 -42.355003000000004,171.297760000000011 -42.310279999999999,171.304413000000011 -42.296669,171.309692000000013 -42.281944000000003,171.31665000000001 -42.249724999999998,171.321075000000008 -42.224716,171.322754000000003 -42.207222000000002,171.324401999999992 -42.18972,171.326355000000007 -42.172226000000002,171.329131999999987 -42.155830000000002,171.343841999999995 -42.110832000000002,171.361084000000005 -42.067779999999999,171.461638999999991 -41.859726000000002,171.51080300000001 -41.764449999999997,171.533051 -41.766396,171.557738999999998 -41.766663,171.569121999999993 -41.766112999999997,171.650817999999987 -41.761391000000003,171.663025000000005 -41.757781999999999,171.685790999999995 -41.746948000000003,171.790526999999997 -41.696387999999999,171.85522499999999 -41.652779000000002,171.886658000000011 -41.629997000000003,171.942200000000014 -41.550277999999999,172.02276599999999 -41.443053999999997,172.053864000000004 -41.417503000000004,172.064972000000012 -41.40361,172.122192000000013 -41.277779000000002,172.111633000000012 -41.236114999999998,172.10522499999999 -41.153053,172.106078999999994 -40.911385000000003,172.10635400000001 -40.893059,172.108856000000003 -40.885559,172.113861000000014 -40.879997000000003,172.186645999999996 -40.813332000000003,172.218567000000007 -40.785834999999999,172.22470100000001 -40.781109,172.255248999999992 -40.776947,172.263884999999988 -40.774169999999998,172.271362000000011 -40.770553999999997,172.299408 -40.755004999999997,172.348297000000002 -40.727493000000003,172.382721000000004 -40.698334000000003,172.426909999999992 -40.657775999999998,172.478302000000014 -40.613892,172.513320999999991 -40.598441999999999,172.517639000000003 -40.596783000000002,172.523482999999999 -40.597946,172.522644000000014 -40.602943000000003,172.521132999999992 -40.607277000000003,172.520813000000004 -40.625,172.519440000000003 -40.631385999999999,172.525542999999999 -40.6325,172.534149000000014 -40.631667999999998,172.571899000000002 -40.617775000000002,172.596343999999988 -40.601394999999997,172.62802099999999 -40.573891000000003,172.631621999999993 -40.567222999999998,172.631621999999993 -40.559998,172.608582000000013 -40.556946000000003,172.601348999999999 -40.558891000000003,172.597014999999999 -40.553333000000002,172.589690999999988 -40.558838000000002,172.583862000000011 -40.560004999999997,172.581024000000014 -40.556671,172.581848000000008 -40.551665999999997,172.589843999999999 -40.541172000000003,172.627166999999986 -40.511947999999997,172.633330999999998 -40.509171000000002,172.661376999999987 -40.502785000000003,172.712188999999995 -40.495552000000004,172.817748999999992 -40.504173000000002,172.861358999999993 -40.507781999999999,172.981628 -40.527222000000002,172.991332999999997 -40.529167,172.989959999999996 -40.53389,172.978026999999997 -40.53389,172.945251000000013 -40.530830000000002,172.895263999999997 -40.524445,172.797211000000004 -40.516112999999997,172.739959999999996 -40.516945,172.731628 -40.519722000000002,172.656921000000011 -40.653328000000002,172.701355000000007 -40.748336999999999,172.855804000000006 -40.853057999999997,172.865509000000003 -40.853057999999997,172.875244000000009 -40.851112,172.907195999999999 -40.828887999999999,172.930266999999986 -40.802222999999998,172.935241999999988 -40.796669,172.976623999999987 -40.781944000000003,172.985229000000004 -40.781112999999998,173.002196999999995 -40.786667,173.008330999999998 -40.791114999999998,173.013306 -40.796669,173.020537999999988 -40.809722999999998,173.051085999999998 -40.869446000000003,173.059692000000013 -40.962775999999998,173.059692000000013 -40.971938999999999,173.056091000000009 -40.978606999999997,173.031646999999992 -41.027495999999999,173.075806 -41.291114999999998,173.079680999999994 -41.297500999999997,173.085784999999987 -41.302222999999998,173.105529999999987 -41.313332000000003,173.168029999999987 -41.316108999999997,173.188873 -41.313332000000003,173.198853000000014 -41.311385999999999,173.207184000000012 -41.308608999999997,173.272217000000012 -41.274445,173.278320000000008 -41.269722000000002,173.32607999999999 -41.222496,173.340515000000011 -41.205832999999998,173.351623999999987 -41.195549,173.377166999999986 -41.178055,173.426085999999998 -41.150275999999998,173.598021999999986 -41.053612,173.606628 -41.052498,173.639709000000011 -41.073616,173.672760000000011 -41.070557,173.720519999999993 -41.060279999999999,173.727753000000007 -41.056389000000003,173.739959999999996 -41.047226000000002,173.744689999999991 -41.032501000000003,173.743286000000012 -41.024169999999998,173.738281 -41.018608,173.72744800000001 -41.019447,173.718841999999995 -41.022499000000003,173.696930000000009 -41.033614999999998,173.690796000000006 -41.038338000000003,173.682189999999991 -41.041114999999998,173.676085999999998 -41.036391999999999,173.673584000000005 -41.029167,173.674682999999987 -41.020836000000003,173.678314 -41.014449999999997,173.696625000000012 -41.000281999999999,173.751373 -40.976944000000003,173.800262000000004 -40.969161999999997,173.913299999999992 -40.931671,173.984679999999997 -40.896949999999997,173.994415000000004 -40.896667,174.02276599999999 -40.913055,174.027771 -40.91861,174.030272999999994 -40.925834999999999,174.03054800000001 -40.935271999999998,174.02941899999999 -40.943610999999997,174.022217000000012 -40.947220000000002,173.929961999999989 -40.992226000000002,173.832184000000012 -40.995002999999997,173.821075000000008 -40.994163999999998,173.782195999999999 -41.009171000000002,173.778594999999996 -41.015555999999997,173.769713999999993 -41.09861,173.778594999999996 -41.114449,173.794433999999995 -41.109444000000003,173.822204999999997 -41.080832999999998,173.821899000000002 -41.062218,173.836638999999991 -41.055,173.846343999999988 -41.053055,173.93081699999999 -41.049446000000003,173.946625000000012 -41.055832000000002,173.953033000000005 -41.060555,173.917755 -41.087502,173.887482000000006 -41.103332999999999,173.848846000000009 -41.144165,173.820526 -41.245834000000002,173.763306 -41.267502,173.76080300000001 -41.273055999999997,173.775817999999987 -41.289726000000002,173.788025000000005 -41.290557999999997,173.806365999999997 -41.289444000000003,174.03720100000001 -41.218330000000002,174.09970100000001 -41.198334000000003,174.128845000000013 -41.187218,174.133605999999986 -41.181671,174.133605999999986 -41.176108999999997,174.126068000000004 -41.174171,174.008605999999986 -41.175277999999999,174.001099000000011 -41.178885999999999,174.001373 -41.186385999999999,174.000274999999988 -41.194716999999997,173.993010999999996 -41.198334000000003,173.981902999999988 -41.199440000000003,173.932738999999998 -41.199997000000003,173.908324999999991 -41.199997000000003,173.899719000000005 -41.197495000000004,173.893585000000002 -41.192771999999998,173.887206999999989 -41.169724000000002,173.88580300000001 -41.161667,173.888031000000012 -41.154167,173.89776599999999 -41.133614,173.902466000000004 -41.128334000000002,174.032745000000006 -40.999724999999998,174.084411999999986 -41.021385000000002,174.094116000000014 -41.023330999999999,174.246338000000009 -41.044724000000002,174.258330999999998 -41.035277999999998,174.299408 -41.003616,174.315246999999999 -41.000557,174.323853000000014 -41.003334000000002,174.323853000000014 -41.010834000000003,174.321625000000012 -41.018059,174.209960999999993 -41.197495000000004,174.161376999999987 -41.225555,174.152771 -41.226661999999997,174.114685000000009 -41.231383999999998,174.052185000000009 -41.235000999999997,174.02664200000001 -41.236114999999998,174.053864000000004 -41.254173000000002,174.206359999999989 -41.269447,174.214966000000004 -41.266663,174.291655999999989 -41.238892,174.303588999999988 -41.229720999999998,174.320800999999989 -41.220275999999998,174.326904000000013 -41.222771000000002,174.288574000000011 -41.276947,174.249114999999989 -41.322502,174.241637999999995 -41.326110999999997,174.231902999999988 -41.328055999999997,174.208587999999992 -41.329445,174.193572999999986 -41.320281999999999,174.155243000000013 -41.305,174.148041000000006 -41.308608999999997,174.111633000000012 -41.336661999999997,174.052764999999994 -41.421112,174.049133000000012 -41.427779999999998,174.044433999999995 -41.442497000000003,174.045806999999996 -41.450836000000002,174.049988000000013 -41.466392999999997,174.063873 -41.493057,174.084136999999998 -41.526108,174.097473000000008 -41.519447,174.096069 -41.511116,174.100799999999992 -41.505561999999998,174.108306999999996 -41.509171000000002,174.114685000000009 -41.513893000000003,174.125792999999987 -41.523887999999999,174.151093000000003 -41.551392,174.176085999999998 -41.578612999999997,174.178864000000004 -41.586112999999997,174.179961999999989 -41.594444000000003,174.179137999999995 -41.602783000000002,174.174133000000012 -41.608336999999999,174.163299999999992 -41.618606999999997,174.157195999999999 -41.623328999999998,174.193024000000008 -41.685555,174.287749999999988 -41.734444000000003,174.291655999999989 -41.740836999999999,174.289153999999996 -41.748336999999999,174.283324999999991 -41.762222,174.236358999999993 -41.837218999999997,174.212188999999995 -41.865279999999998,174.201355000000007 -41.875557,174.184143000000006 -41.890555999999997,174.17804000000001 -41.895004,174.164703000000003 -41.90361,174.157195999999999 -41.907218999999998,174.143585000000002 -41.915832999999999,174.088561999999996 -41.957779000000002,174.009154999999993 -42.027495999999999,173.979674999999986 -42.061110999999997,173.965239999999994 -42.086945,173.959136999999998 -42.100838000000003,173.954407000000003 -42.115555,173.953307999999993 -42.123885999999999,173.953583000000009 -42.133330999999998,173.956359999999989 -42.166389000000002,173.933319000000012 -42.196944999999999,173.928314 -42.202499000000003,173.884154999999993 -42.243614,173.87802099999999 -42.248055,173.870513999999986 -42.251944999999999,173.86300700000001 -42.255561999999998,173.834686000000005 -42.271385000000002,173.801361000000014 -42.293059999999997,173.794983000000002 -42.297500999999997,173.568572999999986 -42.476944000000003,173.558593999999999 -42.487777999999999,173.541350999999992 -42.511947999999997,173.533874999999995 -42.525002,173.531372000000005 -42.532218999999998,173.500823999999994 -42.599724000000002,173.480804000000006 -42.621941,173.466063999999989 -42.656944000000003,173.459960999999993 -42.670836999999999,173.448853000000014 -42.690277000000002,173.387755999999996 -42.793616999999998,173.351623999999987 -42.840836000000003,173.328033000000005 -42.898887999999999,173.328033000000005 -42.906387000000002,173.325806 -42.913612,173.285521999999986 -42.958053999999997,173.106902999999988 -43.057777000000002,173.099396000000013 -43.061385999999999,173.090515000000011 -43.064444999999999,173.026366999999993 -43.081947,172.975799999999992 -43.09111,172.953033000000005 -43.092773,172.935516000000007 -43.098334999999999,172.92025799999999 -43.105834999999999,172.838012999999989 -43.148055999999997,172.818024000000008 -43.160828000000002,172.797760000000011 -43.183059999999998,172.772217000000012 -43.219718999999998,172.76080300000001 -43.239165999999997,172.758026 -43.246665999999998,172.726944000000003 -43.415539000000003,172.726593000000008 -43.423355,172.775817999999987 -43.612220999999998,172.894135000000006 -43.61972,172.90554800000001 -43.620834000000002,173.059692000000013 -43.653053,173.100525000000005 -43.697220000000002,173.105529999999987 -43.703612999999997,173.114409999999992 -43.741385999999999,173.116913000000011 -43.762504999999997,173.116913000000011 -43.769996999999996,173.112182999999987 -43.825004999999997,173.110779000000008 -43.833328000000002,173.091644000000002 -43.856392,173.058593999999999 -43.871108999999997,173.006088000000005 -43.869498999999998,173.002242999999993 -43.868999000000002,172.999236999999994 -43.865668999999997,172.990905999999995 -43.849670000000003,172.965239999999994 -43.802222999999998,172.961365 -43.764449999999997,172.958862000000011 -43.756950000000003,172.951355000000007 -43.755279999999999,172.939972000000012 -43.756110999999997,172.927185000000009 -43.766112999999997,172.921906000000007 -43.771667,172.920532000000009 -43.824173000000002,172.920532000000009 -43.833328000000002,172.917572000000007 -43.869221000000003,172.923584000000005 -43.875884999999997,172.931243999999992 -43.881390000000003,172.937408000000005 -43.887886000000002,172.938904000000008 -43.892384,172.938247999999987 -43.896220999999997,172.870789000000002 -43.904442000000003,172.861633000000012 -43.901389999999999,172.811919999999986 -43.882216999999997,172.804413000000011 -43.878334000000002,172.745789000000002 -43.837775999999998,172.740783999999991 -43.832222000000002,172.736908 -43.825836000000002,172.715239999999994 -43.808334000000002,172.642761000000007 -43.772224,172.513031000000012 -43.729438999999999,172.495238999999998 -43.723885000000003,172.483582000000013 -43.722771000000002,172.472197999999992 -43.72361,172.424988000000013 -43.733612,172.413299999999992 -43.743614,172.390258999999986 -43.763893000000003,172.384978999999987 -43.77861,172.382445999999987 -43.795006,172.383330999999998 -43.8125,172.384704999999997 -43.820838999999999,172.394713999999993 -43.850281000000003,172.393311000000011 -43.858612,172.386932000000002 -43.863334999999999,172.367461999999989 -43.867775000000002,172.297211000000004 -43.881110999999997,172.286925999999994 -43.883057,172.275542999999999 -43.883887999999999,172.189696999999995 -43.909163999999997,172.050812000000008 -43.965279000000002,171.978577 -43.995834000000002,171.955230999999998 -44.006667999999998,171.941070999999994 -44.015006999999997,171.782470999999987 -44.076949999999997,171.654694000000006 -44.122498,171.583587999999992 -44.153885000000002,171.547211000000004 -44.173889000000003,171.538483000000014 -44.178775999999999,171.355559999999997 -44.285491999999998,171.346465999999992 -44.292186999999998,171.342467999999997 -44.295555,171.319976999999994 -44.316391000000003,171.293578999999994 -44.343612999999998,171.285521999999986 -44.356392,171.278594999999996 -44.369995000000003,171.271911999999986 -44.383887999999999,171.269135000000006 -44.391112999999997,171.275542999999999 -44.395836000000003,171.279144000000002 -44.402495999999999,171.278594999999996 -44.420836999999999,171.277190999999988 -44.428885999999999,171.275542999999999 -44.437218,171.26998900000001 -44.451942000000003,171.263306 -44.465553,171.254974000000004 -44.478332999999999,171.214966000000004 -44.533057999999997,171.208313000000004 -44.537506,171.200531000000012 -44.541114999999998,171.196075000000008 -44.560279999999999,171.192200000000014 -44.645836000000003,171.193024000000008 -44.663330000000002,171.20495600000001 -44.700279000000002,171.21414200000001 -44.739165999999997,171.215239999999994 -44.747498,171.207184000000012 -44.851112,171.198577999999998 -44.919998,171.195800999999989 -44.927498,171.185241999999988 -44.938332000000003)))'));
-INSERT INTO geoapp_country (`name`, `mpoly`) VALUES ('Texas', GeomFromText('MULTIPOLYGON (((-103.00243399999998 36.500397,-102.90421904194784 36.500393342967676,-102.8402359524855 36.500390960558398,-102.840235952479716 36.500390960558398,-102.840235952474345 36.500390960558398,-102.840235952468362 36.500390960558398,-102.840235952461725 36.500390960558398,-102.840235952455885 36.500390960558398,-102.792077446284736 36.500389167377229,-102.643207699865854 36.500383624214699,-102.366462330167067 36.500373319605465,-102.250452999999979 36.500368999999999,-102.24499 36.500703999999999,-102.162463000000002 36.500326,-102.12545 36.500323999999999,-102.124752896301885 36.500398159967887,-102.122066000000004 36.500684,-101.930244999999999 36.500526,-101.925344139375468 36.500484781341967,-101.914929315957153 36.500397187533892,-101.826564999999988 36.499653999999992,-101.826498 36.499535000000002,-101.81449312121488 36.499579719643286,-101.788110000000003 36.499678000000003,-101.783359000000004 36.499709000000003,-101.781987 36.499718,-101.780609999999982 36.499727,-101.779435000000007 36.499733999999997,-101.773235954788092 36.499732939140301,-101.709314000000006 36.499721999999998,-101.698684999999998 36.499507999999999,-101.653707999999995 36.499572999999998,-101.649966000000006 36.499572999999998,-101.623914999999997 36.499527999999998,-101.414793008557069 36.499417763984319,-101.392608849457574 36.499406069885133,-101.340061173170298 36.499378370041477,-101.085155999999984 36.499243999999997,-101.052418000000003 36.499562999999995,-101.04533099999999 36.499540000000003,-100.977087999999995 36.499594999999999,-100.936058000000003 36.499602000000003,-100.918513000000004 36.499620999999998,-100.884174000000002 36.499682,-100.884079999999997 36.499682,-100.859656999999984 36.499687000000002,-100.850840000000005 36.49969999999999,-100.824235999999999 36.499617999999998,-100.824218000000002 36.499617999999998,-100.80619 36.499673999999999,-100.806172000000004 36.499634,-100.802909 36.499620999999998,-100.802886 36.499620999999998,-100.761810999999994 36.499617999999998,-100.761810999999994 36.499580000000002,-100.724361999999999 36.499580000000002,-100.724361000000002 36.499558,-100.708625999999995 36.499552999999999,-100.708628000000004 36.499520999999994,-100.657762999999989 36.499482999999991,-100.657762999999989 36.499499999999998,-100.648342999999997 36.499495000000003,-100.648343999999994 36.499462999999999,-100.592613999999998 36.499468999999998,-100.592555999999988 36.499468999999998,-100.592551 36.499428999999999,-100.583539000000002 36.499482999999991,-100.583378999999994 36.499442999999999,-100.578113999999999 36.499462999999999,-100.578113999999999 36.499439000000002,-100.546144999999996 36.499343000000003,-100.531215000000003 36.499341,-100.531215000000003 36.499290000000002,-100.530478000000002 36.49924,-100.530314000000004 36.499357000000003,-100.522227 36.499290999999999,-100.441064999999995 36.499490000000002,-100.441063999999997 36.499462,-100.433959000000002 36.499456000000002,-100.421327999999988 36.499447000000004,-100.421300999999985 36.499487999999999,-100.413634000000002 36.499443999999997,-100.41355 36.499468999999998,-100.378634000000005 36.499516999999997,-100.378591999999998 36.499445,-100.35185199999998 36.499487000000002,-100.351841999999991 36.499473000000002,-100.334463999999997 36.49942,-100.334440999999998 36.49944,-100.324150000000003 36.499679,-100.311244999999985 36.499631,-100.311018000000004 36.499687999999999,-100.310642999999985 36.499642,-100.253572851827684 36.499638031344489,-100.181220999999994 36.499633000000003,-100.090020999999993 36.499634,-100.000405999999984 36.499701999999999,-100.0004059967807 36.499497793115623,-100.00040222345956 36.260147946939995,-100.000399000000002 36.055677000000003,-100.000396170268971 35.879197994164429,-100.000394020347557 35.745115995014778,-100.000391999999991 35.619115,-100.000390396259149 35.519130234823749,-100.000386875554753 35.299632926398459,-100.000386874882437 35.299591010324292,-100.000386852473085 35.298193905884737,-100.000384999999994 35.182701999999999,-100.000381972929958 34.852568985943549,-100.000381605014198 34.812443999872983,-100.000381000000004 34.746460999999996,-100.000381000000004 34.570853999999997,-100.000381000000004 34.570647,-100.000381000000004 34.560509000000003,-99.998254592787575 34.560446149085699,-99.997501461048799 34.560423888524269,-99.985833 34.560079000000002,-99.974761999999998 34.561317999999993,-99.971554999999995 34.562179,-99.965608000000003 34.565843999999998,-99.958898000000005 34.571271000000003,-99.957540999999992 34.572708999999996,-99.95755299999999 34.574168999999998,-99.956716999999998 34.576523999999992,-99.954566999999997 34.578195,-99.94571999999998 34.579273,-99.930492488760507 34.576894921075187,-99.930189904388058 34.576847666503667,-99.929333999999997 34.576714000000003,-99.923210999999995 34.574551999999997,-99.921801000000002 34.570253,-99.915771000000007 34.565975000000002,-99.914151070156151 34.564995899308187,-99.898943000000003 34.555804000000002,-99.896006999999997 34.555529999999997,-99.89376 34.554219000000003,-99.887146999999999 34.549047000000002,-99.885392392967745 34.547401436342639,-99.884583851343237 34.546643143067669,-99.87806651563541 34.540530839522475,-99.87650823800611 34.539069404005723,-99.874403 34.537095,-99.873254000000003 34.535350999999999,-99.872356999999994 34.532096000000003,-99.868953000000005 34.52761499999999,-99.867217250163094 34.525864500605081,-99.853065999999998 34.511592999999998,-99.832903999999985 34.500067999999999,-99.825324999999992 34.497596,-99.818185999999997 34.487839999999991,-99.818738999999979 34.484975999999996,-99.814544624457952 34.476663062301249,-99.814312999999984 34.476204000000003,-99.793683999999999 34.453893999999998,-99.783787954821193 34.445078397966533,-99.782985999999994 34.444364,-99.775743000000006 34.444225000000003,-99.774224411180043 34.443216449834381,-99.765598999999995 34.437488000000002,-99.764825999999999 34.436433999999998,-99.764881999999986 34.435265999999999,-99.767647999999994 34.431854,-99.767234000000002 34.430501999999997,-99.754248000000004 34.421288999999994,-99.740907000000007 34.414763,-99.735679661059166 34.413018903486261,-99.730348000000006 34.411239999999992,-99.720258999999999 34.406295,-99.719721039768913 34.405807854123296,-99.716415999999995 34.402814999999997,-99.715089000000006 34.400753999999999,-99.714231999999996 34.397821999999998,-99.714838 34.394523999999997,-99.712682 34.390928000000002,-99.707900999999993 34.387538999999997,-99.696461999999997 34.381036000000002,-99.678282999999979 34.379798999999998,-99.672337448339604 34.378003970284972,-99.671377000000007 34.377713999999997,-99.666676988468737 34.374633899592595,-99.665992000000003 34.374184999999997,-99.665404581506792 34.374094751646162,-99.662705000000003 34.373679999999993,-99.659863615570984 34.374283464835351,-99.659362000000002 34.374389999999998,-99.654194000000004 34.376519000000002,-99.649662000000006 34.379885000000002,-99.630904999999998 34.376007,-99.628541546335526 34.375150829397036,-99.624196999999995 34.373576999999997,-99.600026 34.374687999999999,-99.596322999999998 34.377136999999998,-99.587595999999991 34.385866999999998,-99.587235087741874 34.386377538370702,-99.585718954359294 34.388522226586467,-99.585441999999986 34.388914,-99.584530999999984 34.391204999999999,-99.585306000000003 34.398122,-99.584479999999985 34.407673000000003,-99.580059999999989 34.416652999999997,-99.574366999999995 34.418281,-99.569695999999993 34.418418000000003,-99.563067665646059 34.417445690943012,-99.562203999999994 34.417318999999999,-99.561530791054494 34.417028950664999,-99.555986000000004 34.414639999999999,-99.549242000000007 34.412714999999992,-99.529786 34.411451999999997,-99.528744576810823 34.411579971493573,-99.523649999999989 34.412205999999998,-99.517623999999998 34.414493999999991,-99.514279999999999 34.414034999999998,-99.499874999999989 34.409607999999999,-99.497090999999983 34.407730999999991,-99.494103999999993 34.404755000000002,-99.490425999999999 34.399693999999997,-99.487218999999982 34.397955000000003,-99.477547 34.396355,-99.477019613816751 34.396364300212412,-99.474810232095294 34.396403261641368,-99.472297823530695 34.396447566809115,-99.470968999999997 34.396470999999991,-99.463286816319666 34.393024688790533,-99.452647999999996 34.388252,-99.445020999999983 34.379891999999998,-99.440759999999997 34.374122999999997,-99.430994999999982 34.373413999999997,-99.43081720973791 34.373532661492725,-99.420432000000005 34.380464000000003,-99.408847999999992 34.372776000000002,-99.407167999999999 34.372605,-99.406018176721332 34.372844364351735,-99.404336527339453 34.373194441551952,-99.402959999999979 34.373480999999998,-99.399602999999999 34.375078999999999,-99.397253000000006 34.377870999999999,-99.396160718377317 34.383134276834824,-99.391492 34.405631,-99.393918999999997 34.415273999999989,-99.396488000000005 34.417290999999999,-99.396901999999997 34.418688000000003,-99.397009999999995 34.424002999999999,-99.395768462359129 34.43494110377263,-99.394955999999993 34.442098999999999,-99.381011 34.456935999999999,-99.376037841709419 34.458617501802458,-99.375365000000002 34.458844999999997,-99.369609999999994 34.458699000000003,-99.358795 34.455862999999994,-99.354671999999994 34.451856999999997,-99.35478257092818 34.450383391084422,-99.354837000000003 34.449657999999999,-99.356770999999995 34.446542,-99.357101999999998 34.444915000000002,-99.356712999999999 34.442143999999999,-99.350407000000004 34.437083,-99.342020261837703 34.431514649700844,-99.341336999999996 34.431061,-99.341016600261696 34.430906286427735,-99.334036999999995 34.427536000000003,-99.331050066208874 34.424666026137302,-99.328674000000007 34.422383000000004,-99.325094009617374 34.416010263301388,-99.324222000000006 34.414458000000003,-99.321411663781888 34.411055277053073,-99.319798627189357 34.409102230797522,-99.319605999999979 34.408869000000003,-99.318363000000005 34.408295999999993,-99.316372999999999 34.408204999999995,-99.308273999999997 34.410013999999997,-99.299098 34.414227999999994,-99.294647999999981 34.415373000000002,-99.289922000000004 34.414731000000003,-99.287844819286008 34.413958196831629,-99.264167 34.405149000000002,-99.261320999999981 34.403498999999996,-99.261255940568432 34.403158389836314,-99.260996786434447 34.401801622187399,-99.259199386422964 34.392391568987605,-99.258998120407611 34.391337867029385,-99.258979999999994 34.391243000000003,-99.259239630132384 34.391043961974496,-99.260703756811225 34.389921531074158,-99.261190999999997 34.389547999999998,-99.262646013804954 34.388906249865343,-99.264243556741917 34.388201635660714,-99.264508000000006 34.388084999999997,-99.271031915197597 34.387722560266795,-99.271781628057255 34.38768090955238,-99.273607516746409 34.387579471291865,-99.273957999999993 34.38756,-99.27534 34.386598999999997,-99.274925999999994 34.384903999999999,-99.271845396288441 34.382114976063626,-99.271280999999988 34.381603999999996,-99.258696 34.372633999999998,-99.254722 34.372405,-99.251407999999984 34.375079999999997,-99.248969000000002 34.375984000000003,-99.242944999999992 34.372667999999997,-99.239138083830497 34.366035888164781,-99.237232999999989 34.362716999999996,-99.237183660287812 34.362563767173611,-99.235448627455725 34.357175329079247,-99.234251999999984 34.353459,-99.233273999999994 34.344101000000002,-99.23260599999999 34.342379999999999,-99.229993999999991 34.340538000000002,-99.226152999999982 34.339725999999999,-99.221975 34.340020000000003,-99.219768999999999 34.341377,-99.217335000000006 34.341520000000003,-99.213134999999994 34.340369000000003,-99.210957832415772 34.336710386428308,-99.210716000000005 34.336303999999998,-99.20972399999998 34.324934999999996,-99.211600000000004 34.313969999999998,-99.213476 34.310671999999997,-99.213233598142949 34.308226764636807,-99.211647999999997 34.292231999999991,-99.211468055040228 34.291676209875057,-99.209990337717599 34.287112032604114,-99.209742000000006 34.286344999999997,-99.209514950796304 34.286049346749877,-99.207560999999998 34.283504999999998,-99.203681000000003 34.281925999999999,-99.200221999999997 34.281151999999999,-99.196259999999995 34.281463000000002,-99.196052113016066 34.281264951942028,-99.19571031750732 34.280939333014615,-99.195605 34.280839,-99.194569999999985 34.272424,-99.196926000000005 34.260928999999997,-99.197153 34.244298,-99.19555299999999 34.24006,-99.191138999999993 34.23234,-99.190145999999984 34.229660000000003,-99.190036000000006 34.227186000000003,-99.192076 34.222192,-99.192683000000002 34.218825000000002,-99.192104 34.216693999999997,-99.189758414718312 34.214539281858485,-99.189510999999996 34.214312,-99.188483307800709 34.214128939694163,-99.159015999999994 34.20888,-99.143985 34.214762999999998,-99.138220000000004 34.219158999999998,-99.130609000000007 34.219408,-99.128513999999996 34.218766000000002,-99.127549000000002 34.217986000000003,-99.126614000000004 34.21532899999999,-99.127525000000006 34.213771,-99.130089999999996 34.212192000000002,-99.131552999999997 34.209352000000003,-99.131884999999997 34.207382000000003,-99.129791999999995 34.204402999999999,-99.126566999999994 34.203004,-99.119203999999996 34.201746999999997,-99.108757999999995 34.203400999999999,-99.102001344898341 34.205813362825268,-99.092190999999985 34.209316,-99.08119261238302 34.211229594305671,-99.079534999999993 34.211517999999991,-99.075978000000006 34.211221000000002,-99.06646499999998 34.208404000000002,-99.060343999999986 34.204760999999991,-99.059158999999994 34.202928999999997,-99.058800000000005 34.201256,-99.058083999999994 34.200569000000002,-99.048792000000006 34.198208999999999,-99.043470999999997 34.198208,-99.040961999999993 34.200842000000002,-99.039004000000006 34.204667,-99.037458999999998 34.206454,-99.036272999999994 34.206912000000003,-99.013074999999986 34.203221999999997,-99.005790000000005 34.206646999999997,-99.002916243275195 34.208781598893673,-99.002945441244265 34.209102775846141,-99.003147197273819 34.211322087284138,-99.003432988816769 34.214465787333673,-99.000760999999997 34.217643000000002,-98.99085199999999 34.221632999999997,-98.987293999999991 34.221223000000002,-98.981363999999999 34.217582999999991,-98.978684999999984 34.210231,-98.976586999999995 34.206291,-98.974131999999983 34.203566000000002,-98.969003 34.201298999999999,-98.966301999999999 34.201323000000002,-98.962469999999996 34.204667999999998,-98.962085000000002 34.206386000000002,-98.962306999999981 34.211312,-98.960791 34.213029999999996,-98.958474999999993 34.213854999999995,-98.952512999999982 34.212649999999996,-98.950395999999984 34.21168,-98.940219999999997 34.203685999999998,-98.928145 34.192689,-98.927456000000006 34.191155000000002,-98.923128999999989 34.185977999999999,-98.920704 34.183435000000003,-98.918333000000004 34.181831000000003,-98.909348999999992 34.177498999999997,-98.892677318093561 34.17250349095427,-98.87651287834953 34.167659972141138,-98.872921999999988 34.166584,-98.871543000000003 34.165026999999995,-98.871211000000002 34.163012000000002,-98.872229000000004 34.160446,-98.874954999999986 34.157031000000003,-98.874871999999996 34.155656999999998,-98.873271000000003 34.153596,-98.868116 34.149635000000004,-98.862549999999999 34.149110999999998,-98.860124999999996 34.149912999999998,-98.858418999999998 34.152732,-98.8579 34.159627,-98.857321999999982 34.161093999999999,-98.855585000000005 34.161620999999997,-98.854264541670545 34.16164976192438,-98.831114999999983 34.162154,-98.812953999999991 34.158444000000003,-98.806809999999984 34.155901,-98.804411553093104 34.153928907629435,-98.792015000000006 34.143735999999997,-98.779288744496085 34.140194111533035,-98.773070373738221 34.138463455122455,-98.767587610783494 34.136937528280072,-98.765569999999983 34.136375999999998,-98.764702233233265 34.135780085954792,-98.763778343962841 34.135145631382905,-98.761796999999987 34.133785000000003,-98.760558000000003 34.132387999999999,-98.759485999999995 34.128881999999997,-98.759653 34.126911999999997,-98.757118934362524 34.12470437936247,-98.757036999999983 34.124633000000003,-98.753813984496389 34.124468645349353,-98.749290999999999 34.124237999999998,-98.741966000000005 34.125529999999998,-98.740191287161664 34.126850584722824,-98.739461000000006 34.127394000000002,-98.737231999999992 34.130991999999999,-98.736819999999994 34.133374000000003,-98.735471000000004 34.135207999999999,-98.734286999999995 34.135758000000003,-98.730242646678789 34.1359250861193,-98.717536999999993 34.136450000000004,-98.716104 34.135947000000002,-98.70640034274598 34.134745066348501,-98.696517999999998 34.133521000000002,-98.690291400890658 34.133167457450512,-98.690072 34.133155000000002,-98.688275858887323 34.134465065675442,-98.685589983550884 34.136424083851644,-98.676900633591032 34.14276190388366,-98.676457484208683 34.143085127260051,-98.670573548505118 34.147376740066704,-98.655654999999982 34.158257999999996,-98.650582999999997 34.163113000000003,-98.648072999999997 34.164440999999997,-98.643223000000006 34.164530999999997,-98.635729999999995 34.161617999999997,-98.634085211037615 34.161100728840964,-98.630950281399748 34.160114822001631,-98.621666000000005 34.157195000000002,-98.620507214282355 34.157012478916968,-98.617663812339856 34.156564612849806,-98.616732999999996 34.156418000000002,-98.615748434938936 34.156446107485429,-98.612133570686254 34.156549305078279,-98.611829 34.156557999999997,-98.610173632571488 34.157093658210222,-98.610154152422197 34.157099961766605,-98.608852999999996 34.157521000000003,-98.603977999999998 34.160249,-98.599789 34.160570999999997,-98.577135999999996 34.148961999999997,-98.572451 34.145091,-98.560191000000003 34.133201999999997,-98.558593000000002 34.128253999999998,-98.550916999999998 34.119334000000002,-98.536257000000006 34.107343,-98.530610999999993 34.099843,-98.528199999999998 34.094960999999998,-98.504182 34.072370999999997,-98.487068052145446 34.063003092954936,-98.486783271268621 34.06284720836274,-98.486328 34.062598,-98.483944186894661 34.06241565608709,-98.482821069121968 34.062329745958955,-98.482039999999998 34.062269999999998,-98.475065999999998 34.064269000000003,-98.449033999999983 34.073461999999999,-98.446378999999993 34.075429999999997,-98.445784000000003 34.076827000000002,-98.445590305319797 34.079232123390703,-98.445584999999994 34.079298,-98.445259148452962 34.079797720749731,-98.443724000000003 34.082152,-98.442807999999999 34.083143999999997,-98.442148160210323 34.083427517317581,-98.441104460406791 34.083875970068213,-98.440092000000007 34.084311,-98.439068026005657 34.084479541105658,-98.434822808733685 34.08517828308225,-98.432126999999994 34.085622,-98.43151641213494 34.085605425226575,-98.43092946822253 34.085589492282431,-98.428479999999993 34.085523000000002,-98.425229999999999 34.084798999999997,-98.422252999999998 34.083036999999997,-98.419995 34.082487999999998,-98.419161945519861 34.082694545588339,-98.41804644206556 34.082971120917755,-98.417812999999995 34.083029000000003,-98.414426000000006 34.085073999999999,-98.400747497198822 34.098985940284976,-98.399776999999986 34.099972999999999,-98.398505572550647 34.104180252359392,-98.39838899999998 34.104565999999998,-98.398160000000004 34.121395999999997,-98.400493999999995 34.121777999999999,-98.400966999999994 34.122236,-98.398441000000005 34.128456,-98.384381000000005 34.146317000000003,-98.381237999999996 34.149453999999999,-98.367493999999994 34.156190999999993,-98.366862955318183 34.156357896864854,-98.364023000000003 34.157108999999998,-98.34173552164826 34.153594120579292,-98.339428832109121 34.153230340726623,-98.331172907733077 34.151928328079421,-98.326986688030772 34.151268134169193,-98.325445000000002 34.151024999999997,-98.324621914768684 34.150650086831803,-98.323612587945547 34.150190341106089,-98.322580000000002 34.149720000000002,-98.320651676675396 34.148059023851737,-98.318749999999994 34.146420999999997,-98.315432139066189 34.144301906683673,-98.312023538956254 34.142124858924547,-98.300208999999995 34.134579000000002,-98.299345719035045 34.134365643147696,-98.29862570169189 34.134187693395319,-98.293901000000005 34.133020000000002,-98.280321 34.130749999999999,-98.258217018239392 34.129574098564007,-98.256467 34.129480999999998,-98.254901718278489 34.129708262798985,-98.247953999999993 34.13071699999999,-98.241012999999995 34.133102999999998,-98.225282000000007 34.127245000000002,-98.223600000000005 34.125093,-98.216463000000005 34.121820999999997,-98.203710999999998 34.117676000000003,-98.200074999999998 34.116782999999998,-98.191455000000005 34.115752999999998,-98.169120000000007 34.114170999999999,-98.157411999999994 34.120466999999998,-98.154353999999998 34.122734,-98.142753999999996 34.136358999999999,-98.136769999999999 34.144992000000002,-98.130815999999996 34.150531999999998,-98.123377000000005 34.154539999999997,-98.114506000000006 34.154727,-98.109461999999979 34.154110999999993,-98.107064999999992 34.152531000000003,-98.101937000000007 34.146829999999994,-98.092021474678845 34.132735952269094,-98.090223999999992 34.130181,-98.089754999999982 34.128211,-98.090659999999986 34.12198,-98.092421000000002 34.116917,-98.095117999999999 34.11119,-98.096177285423778 34.109455137055363,-98.096466125075011 34.108982084942461,-98.099327999999986 34.104295,-98.101378023037029 34.101786489578267,-98.103538246996251 34.099143131812454,-98.104308999999986 34.098199999999999,-98.119416999999999 34.084474,-98.121038999999996 34.081265999999999,-98.120207999999991 34.072127000000002,-98.11802999999999 34.067064999999999,-98.114587 34.06228,-98.100919767943822 34.050244792175462,-98.099096110217346 34.048638900093685,-98.096177018664264 34.044625138601674,-98.096541898037387 34.040976263553816,-98.09727167092565 34.038969381040054,-98.097731364247636 34.038509687718062,-98.098001443813914 34.038239608151798,-98.102015208841422 34.03732738850595,-98.104022094890695 34.036232725638037,-98.104083244997014 34.036133356900422,-98.105481647738245 34.033860956680144,-98.105481647738245 34.032444902147553,-98.105481647738245 34.031306746267951,-98.103616999999986 34.029206999999992,-98.088202999999993 34.005481000000003,-98.085260000000005 34.003259,-98.082839000000007 34.002412,-98.055197000000007 33.995840999999999,-98.050169864666017 33.994989457544634,-98.041117 33.993456000000002,-98.027671999999981 33.993357000000003,-98.019485000000003 33.993803999999997,-98.018481521828946 33.993960861546498,-98.005667000000003 33.995964,-97.987387999999996 33.999822999999999,-97.982805999999997 34.001949000000003,-97.978243000000006 34.005386999999999,-97.974597608872358 34.00657735007583,-97.974172999999993 34.006715999999997,-97.973934144800623 34.006593661859519,-97.971670000000003 34.005434,-97.968339999999998 34.000529999999998,-97.965354903485249 33.996992503283089,-97.963375425210828 33.994646717187933,-97.96302799999998 33.994235000000003,-97.962715090700769 33.994009516348072,-97.958325000000002 33.990845999999998,-97.955849999999998 33.990136,-97.952687999999995 33.990113999999998,-97.947571999999994 33.991053,-97.946472999999997 33.990731999999994,-97.945729999999998 33.989839000000003,-97.945949999999982 33.988395999999995,-97.952184120103468 33.971402949359636,-97.95307606469359 33.968971674482539,-97.95691699999999 33.958502000000003,-97.960351000000003 33.951928000000002,-97.965737000000004 33.947392,-97.972662 33.944527,-97.974172999999993 33.942832000000003,-97.974062000000004 33.940289,-97.972493999999998 33.937907000000003,-97.971175000000002 33.937128999999999,-97.965952999999999 33.936191,-97.963425 33.936236999999998,-97.955511 33.938186000000002,-97.954466999999994 33.937773999999997,-97.953395 33.936444999999999,-97.952679000000003 33.929482,-97.953694999999996 33.924373000000003,-97.957155 33.914453999999999,-97.960615000000004 33.910353999999998,-97.961188664141474 33.909913087050903,-97.963139679674441 33.908413554571595,-97.964461 33.907398,-97.964803587866868 33.907309441163022,-97.9693952279504 33.906122503898267,-97.969873000000007 33.905999,-97.970298415583201 33.906261144464871,-97.973142999999993 33.908014,-97.976962999999998 33.912548999999999,-97.978803999999997 33.912548,-97.979984999999999 33.911402000000002,-97.983551999999989 33.904001999999991,-97.984539999999996 33.900703,-97.984566 33.899076999999998,-97.984416725907181 33.89872544733722,-97.984025057628415 33.897803036597892,-97.98383498894799 33.897355409354304,-97.983768999999995 33.897199999999991,-97.977858999999995 33.889929000000002,-97.974177999999995 33.886642999999999,-97.967776999999998 33.882429999999999,-97.958438 33.879179,-97.951215000000005 33.878424000000003,-97.946463999999992 33.878883000000002,-97.942729999999997 33.879845000000003,-97.938801999999995 33.879891,-97.936743000000007 33.879204,-97.933120450042608 33.877388671138185,-97.918328311832767 33.869976048610916,-97.905467000000002 33.863530999999995,-97.896737999999985 33.857984999999999,-97.877386999999999 33.850236000000002,-97.871447000000003 33.849001,-97.865764999999982 33.849392999999999,-97.835425213046037 33.857383352392631,-97.834333 33.857671000000003,-97.833886750888084 33.857971936447115,-97.833218553718808 33.858422547723912,-97.806802470257153 33.876236728393856,-97.805423000000005 33.877167,-97.803472999999997 33.880189999999999,-97.801578000000006 33.885137999999998,-97.784656999999982 33.890631999999997,-97.78061799999999 33.895533,-97.779683000000006 33.899242999999998,-97.780339999999995 33.904833000000004,-97.783716999999996 33.910559999999997,-97.772672 33.914382000000003,-97.765445999999997 33.913531999999989,-97.763769999999994 33.914240999999997,-97.762914903547767 33.914953098088951,-97.761142192227695 33.916429357685161,-97.760223999999994 33.917194000000002,-97.759399000000002 33.91881999999999,-97.759833999999984 33.92521,-97.762660999999994 33.930846000000003,-97.762767999999994 33.934396,-97.752956999999995 33.937049000000002,-97.738478 33.937421,-97.736553999999998 33.936574999999998,-97.735919542935619 33.936533987763056,-97.734773489745407 33.936459905200778,-97.733722999999998 33.936391999999998,-97.732266999999993 33.936691000000003,-97.725289000000004 33.941045000000003,-97.720699142354164 33.94461309292862,-97.716772000000006 33.947665999999998,-97.714693355370301 33.94981590741822,-97.712051708440285 33.952548118711093,-97.709683999999996 33.954996999999999,-97.708350195107343 33.95701014009046,-97.70415899999999 33.963335999999998,-97.69792099999998 33.977331,-97.69310999999999 33.983699,-97.688023 33.986606999999999,-97.671772000000004 33.991370000000003,-97.661489000000003 33.990817999999997,-97.656210000000002 33.989488,-97.633778000000007 33.981256999999999,-97.609091000000006 33.968093000000003,-97.589597999999995 33.953553999999997,-97.588828000000007 33.951881999999998,-97.591270649549756 33.930345579062646,-97.591514000000004 33.928199999999997,-97.595084 33.922953999999997,-97.596154999999996 33.922105999999999,-97.59697899999999 33.920228000000002,-97.597115000000002 33.917867999999999,-97.596955673755872 33.917077348335745,-97.596288999999985 33.913769000000002,-97.593782375104212 33.910260437761373,-97.589253999999997 33.903922,-97.587440999999984 33.902479,-97.582744000000005 33.900784999999999,-97.578907598302408 33.900207204108142,-97.558269999999993 33.897098999999997,-97.555002000000002 33.897281999999997,-97.551541 33.897947000000002,-97.543245999999996 33.901288999999998,-97.533617322522971 33.906127586572126,-97.532723000000004 33.906576999999999,-97.525277000000003 33.911750999999995,-97.519170999999986 33.913637999999999,-97.504870374844515 33.918353570482601,-97.500960000000006 33.919643,-97.495648860558163 33.919307898609453,-97.494857999999979 33.919257999999999,-97.492061582842766 33.918500058129531,-97.487115891787269 33.917159576320657,-97.48650499999998 33.916993999999995,-97.484158940985964 33.915822631562747,-97.460375999999982 33.903948,-97.458068999999995 33.901634999999999,-97.451065249608234 33.891558064966901,-97.450953999999996 33.891398000000002,-97.451469000000003 33.87093,-97.452287410342421 33.86882620086994,-97.455665873415143 33.860141550511862,-97.457616999999999 33.855125999999998,-97.459565999999995 33.853316,-97.461485999999994 33.849559999999997,-97.462857 33.841771999999999,-97.459067999999988 33.834581,-97.453056999999987 33.828536,-97.444192999999999 33.823773000000003,-97.426492999999994 33.819398,-97.410387 33.818845000000003,-97.403235695189224 33.818961304668854,-97.384901622687948 33.819259479377855,-97.372940999999997 33.819454,-97.368744000000007 33.821471000000003,-97.365506999999994 33.823762999999992,-97.358512999999988 33.830018000000003,-97.348337999999984 33.843876000000002,-97.340900078515631 33.860236176367188,-97.339391593410966 33.867629740388111,-97.337846311291798 33.870430566802547,-97.336524008254173 33.872827243260353,-97.33293952159849 33.874440259476913,-97.329175814777756 33.874440259476913,-97.327562805507441 33.873902588562437,-97.326564370247013 33.872737756024428,-97.326487449786001 33.872648016149064,-97.324157539016809 33.866016724171544,-97.322365295688968 33.864941382342593,-97.318243141591921 33.865120602507631,-97.31654836796514 33.865642075591225,-97.315913230822716 33.865837504006514,-97.314412999999988 33.866988999999997,-97.310479256695203 33.873361218982971,-97.307489695517361 33.878203969770759,-97.302471419756401 33.880175433263638,-97.299245387323282 33.880175433263638,-97.295170524880618 33.877119286431629,-97.294227111562321 33.876411726442917,-97.286921603026471 33.869423850720118,-97.28598279642199 33.868525862052032,-97.284253187903744 33.867526845294535,-97.279107999999979 33.864555000000003,-97.275347999999994 33.863225,-97.271531999999993 33.862560000000002,-97.257971626565464 33.863220416657512,-97.256624999999985 33.863286000000002,-97.255635999999996 33.863697999999999,-97.254234999999994 33.865322999999997,-97.249208999999993 33.875100999999994,-97.246418496348156 33.898356425448434,-97.246179999999981 33.900343999999997,-97.245398270620598 33.902084836575838,-97.245057441245748 33.90284383100218,-97.244945999999999 33.903092,-97.242092 33.906277000000003,-97.241794392023195 33.906436890220043,-97.238755934556053 33.908069304909361,-97.226522000000003 33.914642,-97.210920999999999 33.916063999999999,-97.210512235443105 33.915911440173737,-97.206141000000002 33.914279999999998,-97.185457999999997 33.9007,-97.180845000000005 33.895203999999993,-97.179608999999999 33.892249999999997,-97.170773789281327 33.861660975771436,-97.166629 33.847310999999998,-97.166824000000005 33.840395,-97.171627 33.835335,-97.180939422624874 33.831550006302521,-97.181369999999987 33.831375,-97.186254000000005 33.830894,-97.193690000000004 33.831307000000002,-97.195830999999998 33.830803000000003,-97.197477000000006 33.829794999999997,-97.199700000000007 33.827322000000002,-97.203513999999998 33.821824999999997,-97.204994999999997 33.81886999999999,-97.205652 33.809823999999999,-97.205556910941183 33.806237292333442,-97.205445103342427 33.802019970418343,-97.205431000000004 33.801487999999999,-97.205114487332324 33.800890302957832,-97.203236000000004 33.797342999999998,-97.194785999999993 33.785344000000002,-97.190397000000004 33.781153000000003,-97.187792000000002 33.769702000000002,-97.181842999999986 33.755869999999994,-97.173532726140948 33.740090726508434,-97.172577000695028 33.738276026602087,-97.172191999999995 33.737544999999997,-97.168438536634085 33.734131892706188,-97.163454368039083 33.729599677915004,-97.163149000000004 33.729322000000003,-97.162807288850388 33.729115696596551,-97.155066000000005 33.724442000000003,-97.152609597300682 33.723370138808036,-97.150103410774264 33.72227655424301,-97.149393999999987 33.721966999999999,-97.137529999999998 33.718663999999997,-97.126102000000003 33.716940999999998,-97.121101999999993 33.717174,-97.119522126797463 33.717502594273334,-97.114921749218269 33.718459416457094,-97.113264999999998 33.718803999999999,-97.112398501853761 33.719102240295193,-97.110065570752283 33.719905212653977,-97.108936 33.720294000000003,-97.108097026518521 33.720734123472262,-97.106518853348803 33.721562029324609,-97.104524999999995 33.722608,-97.097154000000003 33.727809,-97.094085000000007 33.730992,-97.092697209381924 33.732891057656268,-97.092130098039192 33.733667094850453,-97.091071999999983 33.735115,-97.089936943375889 33.737167271747261,-97.087911027802278 33.740830286618703,-97.086195000000004 33.743932999999998,-97.084820762198987 33.752363244406453,-97.084693 33.753146999999998,-97.08461299999999 33.759993,-97.085217999999998 33.765512,-97.087362453285593 33.77250304797397,-97.087851999999998 33.774099,-97.093101265647221 33.787040841586602,-97.093917000000005 33.789051999999998,-97.094675961767678 33.791977368936216,-97.095047178759813 33.793408200769441,-97.095235999999986 33.794136000000002,-97.095080023591905 33.79561056406444,-97.094877682854474 33.797523445530629,-97.094770999999994 33.798532000000002,-97.093897185962049 33.800360798466031,-97.09266432242093 33.802941048788071,-97.092111999999986 33.804096999999999,-97.087998999999982 33.808746999999997,-97.078589999999991 33.812755999999993,-97.067977124183287 33.814475679891196,-97.064604445188394 33.815487484896828,-97.062631847535258 33.816079264957295,-97.058622892638837 33.818751903281317,-97.055415722506638 33.823829921794093,-97.055412197115942 33.8238546000754,-97.055148464371385 33.82570077017467,-97.055682980641905 33.830778788687446,-97.057821087157734 33.834520485448607,-97.058282726048489 33.836367011192308,-97.058622892638837 33.837727655580807,-97.057553829022481 33.840133030590344,-97.055415722506638 33.841202089027483,-97.052208542016004 33.841736615656437,-97.048734113748537 33.840934820533782,-97.045339940802535 33.839496399893775,-97.041245000000004 33.837761,-97.038858000000005 33.838264000000002,-97.023899 33.844213000000003,-97.017857000000006 33.850141999999998,-97.010381749407998 33.858564100233409,-96.999664164722446 33.87063922351804,-96.985567000000003 33.886521999999999,-96.983970999999997 33.892082999999992,-96.984938999999997 33.904865999999991,-96.985275905099471 33.906070041818985,-96.988744999999994 33.918467999999997,-96.993996999999979 33.928978999999998,-96.995022999999989 33.932034999999999,-96.995140238436761 33.933014648420269,-96.996024643022366 33.940404763634284,-96.996183000000002 33.941727999999998,-96.996167702736543 33.941832622020257,-96.995421139189489 33.946938567064805,-96.995367999999999 33.947302,-96.994947208134789 33.948043840473474,-96.994456760007211 33.948908482357652,-96.994287999999983 33.949205999999997,-96.990835000000004 33.952700999999998,-96.988126301178397 33.954514162310069,-96.987892000000002 33.954670999999998,-96.982723774786024 33.956016867344054,-96.981537499896135 33.956325787441237,-96.981336999999982 33.956377999999994,-96.979415000000003 33.956178,-96.979347000000004 33.955129999999997,-96.980675999999988 33.951813999999999,-96.981031000000002 33.949159999999999,-96.97981799999998 33.941588000000003,-96.976955000000004 33.937452999999998,-96.973806999999979 33.935696999999998,-96.97254199999999 33.935794999999999,-96.952313000000004 33.944581999999997,-96.944610999999995 33.949216999999997,-96.933309804512817 33.955134148312766,-96.932252000000005 33.955688000000002,-96.924267999999998 33.959159,-96.922113999999979 33.959578999999998,-96.921429967464036 33.959451233053208,-96.919039990098355 33.959004821377064,-96.918617999999995 33.958925999999998,-96.91833921313939 33.958790334953079,-96.917063225391544 33.958169405626251,-96.916299999999993 33.957797999999997,-96.91417790611122 33.956157267456653,-96.911732563120111 33.95426660943896,-96.911336000000006 33.953960000000002,-96.910857206749995 33.953482904168467,-96.908421363636307 33.951055696608989,-96.907387 33.950024999999997,-96.905252999999988 33.947218999999997,-96.902433999999985 33.942017999999997,-96.901946611333699 33.940667581536225,-96.899441999999993 33.933728000000002,-96.896468999999996 33.91331799999999,-96.897193999999999 33.902954,-96.895728000000005 33.896414,-96.887761838797758 33.878628251663962,-96.883009999999999 33.868018999999997,-96.875280999999987 33.860505000000003,-96.87198767019855 33.857765462058182,-96.866438000000002 33.853149000000002,-96.85608999999998 33.84749,-96.850593000000003 33.847211,-96.845895999999996 33.848974999999996,-96.841592000000006 33.852893999999999,-96.840818999999996 33.863644999999998,-96.839777999999995 33.868395999999997,-96.837412999999984 33.871349000000002,-96.833926235310372 33.873661568818115,-96.832156999999995 33.874834999999997,-96.812777999999994 33.872646000000003,-96.794275999999996 33.868886000000003,-96.786859371055769 33.865207582975678,-96.783484999999999 33.863533999999994,-96.780568999999986 33.860098,-96.779588000000004 33.857939000000002,-96.777202000000003 33.848162000000002,-96.776765999999995 33.841976000000003,-96.770675999999995 33.829621000000003,-96.769378000000003 33.827477000000002,-96.766316855179326 33.825510582121247,-96.766234999999995 33.825457999999998,-96.761588000000003 33.824406000000003,-96.754041 33.824657999999999,-96.746233969152598 33.825673509073113,-96.746037999999984 33.825699,-96.741799282455162 33.826447231494264,-96.71318112067361 33.831498997677379,-96.712421999999989 33.831632999999997,-96.708134 33.833060000000003,-96.704457000000005 33.835020999999998,-96.700318655907978 33.838434731313264,-96.699573999999998 33.839049000000003,-96.695480719177567 33.844085960723298,-96.693127324791789 33.84698191524042,-96.690708 33.849958999999998,-96.688190999999989 33.854613,-96.687524326814838 33.85620885855986,-96.684726999999995 33.862904999999998,-96.682762564556768 33.871464102957781,-96.682209 33.873876000000003,-96.682102999999998 33.876645000000003,-96.683464 33.884217,-96.681051007513375 33.895708672998403,-96.680947000000003 33.89620399999999,-96.675306000000006 33.909114000000002,-96.673449000000005 33.912278,-96.670618000000005 33.914913999999996,-96.667186999999998 33.916939999999997,-96.665308436653305 33.917161206414967,-96.66440999999999 33.917267000000002,-96.659896000000003 33.916665999999999,-96.65150600931733 33.910998546998165,-96.644049999999979 33.905962000000002,-96.630116999999998 33.895422000000003,-96.628293999999997 33.894477000000002,-96.616355751891987 33.894625565889051,-96.614680358047494 33.89464641537834,-96.611821556077771 33.89468199182577,-96.607562 33.894734999999997,-96.592948000000007 33.895615999999997,-96.588319642127203 33.894847991673281,-96.587934000000004 33.894784,-96.58760387584924 33.894318075382706,-96.585452000000004 33.891280999999999,-96.585359999999994 33.888947999999999,-96.587494000000007 33.884250999999999,-96.590112000000005 33.880665,-96.597347999999982 33.875100999999994,-96.601685999999987 33.872822999999997,-96.611969999999999 33.869016000000002,-96.625399000000002 33.856541999999997,-96.628968999999998 33.852406999999999,-96.629746999999995 33.850866000000003,-96.630021999999983 33.847541,-96.629842405402627 33.847037300944812,-96.629577623992816 33.846294683138318,-96.629289999999997 33.845488000000003,-96.627812273090953 33.844523322531259,-96.626623854929747 33.84374750920842,-96.623154999999997 33.84148299999999,-96.622548607895212 33.841284829387497,-96.620258613641042 33.840536452948584,-96.605267599881515 33.835637348301233,-96.601258 33.834327000000002,-96.599141379811712 33.83346048638235,-96.597030984690946 33.832596521217091,-96.595164098773168 33.831832245189069,-96.592925999999991 33.830916000000002,-96.587067000000005 33.828009000000002,-96.573054340771023 33.81917200025552,-96.572936999999996 33.819097999999997,-96.568822993124115 33.818734252140963,-96.566549213959448 33.818533211567136,-96.566298000000003 33.818511,-96.551222999999993 33.81912899999999,-96.541502252916899 33.82118138128849,-96.537683599711926 33.821987629236112,-96.532865 33.823005000000002,-96.532141353898353 33.822830017549641,-96.529233999999988 33.822127000000002,-96.526655000000005 33.820891000000003,-96.526331240434345 33.820568979830284,-96.523863000000006 33.818114,-96.519910999999993 33.811346999999998,-96.517492044660074 33.805400310572544,-96.516583999999995 33.803167999999999,-96.515958999999995 33.798933999999996,-96.515952403498957 33.797370629253059,-96.5159410675722 33.794684014612457,-96.515912 33.787795000000003,-96.51191399999999 33.781477999999993,-96.502285999999998 33.773459999999993,-96.500268000000005 33.772582999999997,-96.486059999999995 33.773009999999999,-96.459153999999998 33.775232000000003,-96.456254 33.776035,-96.450509999999994 33.780588000000002,-96.448044999999993 33.781030999999999,-96.436454999999995 33.780050000000003,-96.430214000000007 33.778654000000003,-96.423664429058576 33.776393528613141,-96.422642999999994 33.776040999999999,-96.422322840041474 33.775682043625913,-96.420980388055867 33.774176915691271,-96.419961 33.773034000000003,-96.419583102042878 33.772404537625398,-96.417562000000004 33.769038000000002,-96.416145999999998 33.76609899999999,-96.413408000000004 33.757714,-96.411885201063754 33.755703128434462,-96.408468999999997 33.751191999999996,-96.403507000000005 33.746288999999997,-96.384116000000006 33.730141000000003,-96.383299027856694 33.729391180874664,-96.380090129695702 33.726446045924753,-96.379450023740389 33.7258585550397,-96.370956555983966 33.718063228581727,-96.370761536889887 33.717884239557762,-96.369590000000002 33.716808999999998,-96.369084597701828 33.715741445126696,-96.366945 33.711221999999999,-96.363253 33.701050000000002,-96.363143372320295 33.69469995601051,-96.363135 33.694215,-96.362964209763192 33.693778090504111,-96.362198000000006 33.691817999999998,-96.356236230636398 33.68737146600408,-96.355945999999989 33.687154999999997,-96.355455421824701 33.68710517164083,-96.352724507664888 33.686827790830883,-96.348305999999994 33.686378999999995,-96.346643697131185 33.686554630652331,-96.344174978865311 33.686815463144171,-96.342664999999997 33.686974999999997,-96.337175125435976 33.689043696356201,-96.321102999999994 33.695099999999996,-96.318759999999997 33.696753,-96.318590686098233 33.696960051986665,-96.318010443675675 33.697669623646739,-96.316924999999998 33.698996999999999,-96.314798583555884 33.702507526903553,-96.309963999999994 33.710489000000003,-96.308342766341951 33.715746247280322,-96.307034999999985 33.719987000000003,-96.307001890234133 33.720499786556005,-96.306595999999999 33.726785999999997,-96.307389 33.735005,-96.3061 33.741002000000002,-96.30525491425243 33.743702118680943,-96.304087485467235 33.747432149959735,-96.303009000000003 33.750878,-96.301705999999982 33.753756000000003,-96.294866999999996 33.764771000000003,-96.292482000000007 33.766418999999999,-96.277269000000004 33.769734999999997,-96.269895999999989 33.768405,-96.251497151236435 33.760405611313516,-96.248231999999987 33.758986,-96.23960043273749 33.754058875473291,-96.229595766085112 33.748347949873668,-96.229022999999998 33.748021,-96.220521000000005 33.747390000000003,-96.1999 33.752116999999998,-96.196336040977513 33.753254070097242,-96.186553999999987 33.756374999999998,-96.178059000000005 33.760517999999998,-96.174632999999986 33.763699000000003,-96.169932696734321 33.769534234627457,-96.169452000000007 33.770130999999999,-96.167888847884015 33.774482610028038,-96.162756999999985 33.788769000000002,-96.162122572851359 33.796140263149638,-96.162213638666273 33.796174412747511,-96.166837334419654 33.79790829445497,-96.170373408451042 33.799381659586444,-96.173025461119408 33.800560352833699,-96.175150000000002 33.801951000000003,-96.17734 33.805117000000003,-96.17895107878303 33.810509748931381,-96.178963999999993 33.810552999999999,-96.176910000000007 33.813934000000003,-96.175889999999981 33.814627000000002,-96.164217431250009 33.817001137011715,-96.150765000000007 33.816986999999997,-96.148792 33.819197000000003,-96.151629999999983 33.831945999999995,-96.150147000000004 33.835856,-96.148457006953691 33.837436961236868,-96.14806999999999 33.83779899999999,-96.147446683377808 33.837891494337825,-96.138904999999994 33.839159000000002,-96.128108733462625 33.839703753325978,-96.122951 33.839963999999995,-96.118168999999995 33.837883999999995,-96.109992999999989 33.832396000000003,-96.104074999999995 33.830730000000003,-96.099360000000004 33.830469999999998,-96.097448 33.832724999999996,-96.097637999999989 33.837935000000002,-96.099152999999987 33.842409000000004,-96.100785000000002 33.844230000000003,-96.101348999999999 33.845720999999998,-96.101472999999999 33.846708999999997,-96.100094999999996 33.847971,-96.084626 33.846656000000003,-96.063924 33.841522999999995,-96.055357999999984 33.838262,-96.049381559404907 33.836618570443349,-96.048833999999999 33.836468000000004,-96.044074587870469 33.838420736557822,-96.037191000000007 33.841245,-96.031783693249977 33.849934429642978,-96.031271075997878 33.850758194920559,-96.029462717056688 33.852402158173604,-96.025188419607474 33.852073366797306,-96.022229284477689 33.850922593794486,-96.021900493101384 33.849114234853282,-96.022507000000004 33.846130000000002,-96.022064891975305 33.843195970965255,-96.021407302851145 33.841880802274289,-96.019950829321616 33.840821548098475,-96.019598947095744 33.84056563358331,-96.005296 33.845505000000003,-96.000534603789163 33.849305889934179,-95.998351 33.851049000000003,-95.997709 33.852181999999992,-95.997673906338932 33.852568581878202,-95.997405462294296 33.855525685805766,-95.9977342536706 33.860950759443568,-95.997376655326022 33.862202357114477,-95.996747879541701 33.864403078452035,-95.993624351909531 33.866211440579008,-95.991487204777812 33.866869023331596,-95.988856861024331 33.866869023331596,-95.984753921632091 33.864671017651808,-95.984253769013037 33.864403078452035,-95.980965842506947 33.859306796190523,-95.9735403792467 33.856832331211713,-95.972155999999998 33.856371000000003,-95.971744371228908 33.856383941655046,-95.951609000000005 33.857016999999999,-95.945502988542614 33.859346036998218,-95.944283999999982 33.859811,-95.943359355023844 33.860365112733476,-95.941777921153459 33.861312819872232,-95.941266999999996 33.861618999999997,-95.936631000000006 33.870615,-95.93550004724635 33.874497995518659,-95.935325000000006 33.875098999999999,-95.935308000000006 33.878723999999998,-95.935637 33.880370999999997,-95.936817000000005 33.882385999999997,-95.937201999999999 33.884652000000003,-95.936131999999986 33.886825999999999,-95.935198 33.887100999999994,-95.922712000000004 33.883758,-95.915960999999996 33.881148000000003,-95.905343000000002 33.875629000000004,-95.893305999999995 33.868161,-95.887490999999997 33.863855999999998,-95.881292000000002 33.860627,-95.859469000000004 33.852455999999997,-95.849863999999997 33.844951999999999,-95.843772999999999 33.838949,-95.841300369514457 33.837329726167006,-95.840012000000002 33.836486,-95.839442445999168 33.836292954052603,-95.838335071878717 33.835917618112738,-95.837515999999994 33.835639999999998,-95.831947999999997 33.835160999999999,-95.828244999999995 33.836053999999997,-95.827967044704152 33.836191602640042,-95.826538854622555 33.836898632614485,-95.822787000000005 33.838755999999989,-95.821905415666805 33.839551758599306,-95.821112514659319 33.840267467546653,-95.820784000000003 33.840564,-95.819357999999994 33.842784999999999,-95.818975999999992 33.844456,-95.819524999999999 33.848438999999999,-95.820676999999989 33.850750999999995,-95.821665999999979 33.855443,-95.821665999999979 33.856633000000002,-95.82138191533943 33.857119395418813,-95.820824189768416 33.858074304994595,-95.820595999999995 33.858464999999995,-95.820256321913618 33.858527429344676,-95.805149 33.861303999999997,-95.800842000000003 33.861212000000002,-95.790314669347865 33.857829825250164,-95.789867 33.857685999999994,-95.789358977006231 33.85733891951336,-95.788304168820886 33.85661827626933,-95.787891000000002 33.856335999999999,-95.776255000000006 33.845145000000002,-95.773281999999995 33.843834,-95.772067000000007 33.843817,-95.763621999999984 33.847954,-95.758311274366889 33.849968021173019,-95.758015999999998 33.850079999999998,-95.757640875431136 33.850475976069447,-95.754310000000004 33.853991999999998,-95.753512999999984 33.856464000000003,-95.753688987366843 33.856976705401074,-95.75729390188404 33.867478931648478,-95.757457999999986 33.86795699999999,-95.758009454152003 33.868443703186436,-95.760805000000005 33.870911,-95.762558999999996 33.874366999999992,-95.76194240701966 33.883030946465368,-95.761915999999999 33.883401999999997,-95.758343999999994 33.890610999999993,-95.756366999999997 33.892625000000002,-95.747335000000007 33.895755999999999,-95.737508000000005 33.895966999999999,-95.729445045960333 33.893952819075864,-95.728448999999998 33.893704,-95.723226300470785 33.890698381785455,-95.717160861060378 33.887207774089354,-95.713910181462765 33.885337036216413,-95.713539999999981 33.885123999999998,-95.710877999999994 33.884551999999999,-95.696961999999999 33.885218000000002,-95.684831000000003 33.890231999999997,-95.676924999999983 33.897236999999997,-95.669978 33.905844000000002,-95.665338000000006 33.908132000000002,-95.659818 33.909092,-95.647272999999998 33.905976000000003,-95.636977999999999 33.906613,-95.609439392746168 33.923623282239362,-95.603656999999998 33.927194999999998,-95.599677999999983 33.934246999999999,-95.585944999999981 33.93448,-95.570311428427317 33.932892416047835,-95.564667905744443 33.932319318211334,-95.563423999999998 33.932192999999998,-95.562724847986416 33.932007581530534,-95.561592737930383 33.931707340510293,-95.561007000000004 33.931551999999996,-95.560415995740641 33.931042615914556,-95.559931936825777 33.930625407571753,-95.559414000000004 33.930179000000003,-95.558286100391328 33.928753215740784,-95.557777967458279 33.928110882033096,-95.556914999999989 33.927019999999999,-95.551147999999984 33.914566,-95.549144999999996 33.90795,-95.549475 33.901310999999993,-95.552330999999981 33.894419999999997,-95.55209457427955 33.888655441173519,-95.552085000000005 33.888421999999998,-95.551943532854764 33.888208369560985,-95.548485831718622 33.882986873004867,-95.548324999999991 33.882744000000002,-95.547838962671932 33.882363312195096,-95.545708294665019 33.880694470565629,-95.545197000000002 33.880293999999999,-95.54352178779898 33.880173169084813,-95.541265054919734 33.880010393826282,-95.539789999999996 33.879904000000003,-95.537358049249164 33.88037416967029,-95.534038375697051 33.881015963020303,-95.533282999999997 33.881161999999996,-95.531798241123994 33.881968630089013,-95.525321999999989 33.885486999999998,-95.521418133191162 33.888379988113826,-95.520137966641357 33.88932866459119,-95.515301759339067 33.891142240377064,-95.510062536063273 33.890134704348199,-95.506233872599807 33.886306036979761,-95.506495 33.878588999999998,-95.506084999999999 33.87639,-95.502407477038815 33.874787101867227,-95.502303999999995 33.874741999999998,-95.492028000000005 33.874822000000002,-95.480004545492946 33.87882505156746,-95.478574999999992 33.879300999999998,-95.477829321179073 33.879890044047791,-95.469962325642697 33.886104525088022,-95.467351237093553 33.886417854985297,-95.464924614258621 33.886709049048328,-95.462909526581015 33.885903021006229,-95.461498966768687 33.883686425341857,-95.46277824472287 33.878821065729895,-95.464211000000006 33.873372000000003,-95.463346 33.872312999999998,-95.461127233926518 33.871832054399569,-95.447370000000006 33.868850000000002,-95.418546279096461 33.866998581211959,-95.411345060268999 33.866536029139695,-95.407794999999979 33.866307999999989,-95.406882133018115 33.866362247208706,-95.404325916920058 33.866514150597617,-95.375232999999994 33.868243,-95.352338000000003 33.867789000000002,-95.339561303488324 33.868836967540759,-95.339121999999989 33.868873,-95.339014688391742 33.869073090388603,-95.33835013321854 33.870312202400832,-95.334854000000007 33.876830999999996,-95.334836460323601 33.877305631062114,-95.334523000000004 33.885787999999998,-95.333451999999994 33.886285999999998,-95.325571999999994 33.885703999999997,-95.310579050797429 33.880679668661742,-95.294789354523203 33.875388337067108,-95.287864786488143 33.87494634339312,-95.28344485260331 33.877745636185885,-95.281676877907344 33.882902226669891,-95.281529544303439 33.887616824907447,-95.281317419351268 33.889260797911334,-95.280350898312903 33.896751357029835,-95.279761569607459 33.899108654721076,-95.277846267017765 33.900876629417048,-95.275341635722626 33.901760616765031,-95.272542342929853 33.902055281117747,-95.267212735027385 33.900338966530455,-95.263849803053915 33.899255988324974,-95.261050510261143 33.899992642069066,-95.255746586173245 33.902939265610648,-95.253094626984378 33.90544389690578,-95.250884657186859 33.913105118684925,-95.250737329293145 33.917083057468233,-95.251326652288412 33.924154956252103,-95.253020000000006 33.927236999999998,-95.253623000000005 33.92971,-95.252905999999982 33.933647999999998,-95.250453815364224 33.936614470603772,-95.23166760862577 33.959340626388752,-95.231194814374604 33.959912577712174,-95.230491 33.960763999999998,-95.226393000000002 33.961953999999999,-95.219358 33.961567000000002,-95.184075000000007 33.950353,-95.174181557651636 33.944707625858101,-95.173657196254922 33.944408415920272,-95.168745999999999 33.941605999999993,-95.166685999999984 33.939728000000002,-95.161108999999982 33.937598,-95.149462 33.936335999999997,-95.131725657216535 33.936903570678005,-95.131056 33.936924999999995,-95.130760550144942 33.936820411866918,-95.124700000000004 33.934674999999991,-95.121184 33.931306999999997,-95.121974867397924 33.925542192115131,-95.122499622273722 33.921717137430115,-95.122365486317321 33.918632002634986,-95.119951031304154 33.915815139752631,-95.110963896232136 33.912998276870283,-95.103318123323447 33.913668959251616,-95.10214780889666 33.912991409673538,-95.100769532353866 33.912193461131935,-95.098489218495843 33.909913139475762,-95.095001673232161 33.904815960136006,-95.095247706914634 33.899772255341666,-95.095269945144935 33.899316370327696,-95.09392858558104 33.895962961020395,-95.090441035118587 33.893280234094433,-95.084002493615529 33.893280234094433,-95.079139333602001 33.898143394107954,-95.078905311676394 33.898377416033576,-95.074957661870556 33.900039583313315,-95.073630040977179 33.900598581227868,-95.071259538767663 33.901596686785098,-95.065491679645973 33.899584642240477,-95.06106518008815 33.895292278639054,-95.058834000000004 33.886812999999997,-95.049025 33.864089999999997,-95.046567999999994 33.862564999999996,-95.038661112238941 33.860609605793528,-95.037206999999995 33.86025,-95.033518790033554 33.860141698175291,-95.03143098776043 33.86008039125462,-95.030255193062573 33.860045864827867,-95.022324999999995 33.859813000000003,-95.016999191469623 33.861237606415294,-95.016422000000006 33.861392000000002,-95.008375999999984 33.866088999999995,-95.000223000000005 33.862504999999999,-94.995524000000003 33.857438000000002,-94.992810330111539 33.852698351540766,-94.992671 33.852454999999999,-94.992523097811741 33.852403566519136,-94.990494037024106 33.851697953840834,-94.988486999999992 33.850999999999999,-94.98739725328582 33.851074415574232,-94.983303000000006 33.851354,-94.981650000000002 33.852283999999997,-94.976208 33.859846999999995,-94.973410999999999 33.861730999999999,-94.971435 33.862122999999997,-94.968895000000003 33.860916000000003,-94.965888000000007 33.848421999999999,-94.964400999999995 33.837020999999993,-94.957676000000006 33.835003999999998,-94.949533421399437 33.825707838785306,-94.949112883549958 33.821754768331147,-94.948729542346143 33.818151347643564,-94.948715939727023 33.818023482549535,-94.944301522854289 33.81213759866646,-94.939560116480934 33.810502632153295,-94.935799688114457 33.810339132650462,-94.932366255585293 33.810993121156741,-94.928442330884351 33.812628087669893,-94.92451840618341 33.812791587172725,-94.924196338046286 33.812670811231236,-94.921902464831703 33.811810605997493,-94.919450010309433 33.810175636315982,-94.917815040627914 33.808704169305649,-94.917091634856007 33.805689966907131,-94.916834062621035 33.804616745101868,-94.916997555787162 33.801510305241678,-94.91961350347556 33.794152948011565,-94.920034399525505 33.790224602097751,-94.920103995647338 33.789575041141042,-94.920095560257593 33.789518805381888,-94.91961350347556 33.786305103362189,-94.913003475392784 33.779908559849432,-94.912450337640749 33.77937328682863,-94.911427000000003 33.778382999999998,-94.906244999999998 33.778191999999997,-94.902276 33.776288999999998,-94.89497736748055 33.771540270803243,-94.89019868072495 33.768431100796676,-94.888367999999986 33.76724,-94.887910246679809 33.766674529711281,-94.886225692565191 33.764593571999796,-94.885411379435553 33.764756432942491,-94.881447983999394 33.765549103837166,-94.879218389137634 33.764912090842074,-94.876033253179955 33.760771407616105,-94.875653319149677 33.757021753168047,-94.875534806260347 33.755852122792213,-94.875497398046861 33.755482932714841,-94.877080000000007 33.75222,-94.874668 33.749164,-94.870299604394191 33.746484207390097,-94.869443369718425 33.745958950164457,-94.869299999999996 33.745871,-94.8570941233355 33.742035460072337,-94.849295999999981 33.739584999999991,-94.841633779899112 33.739430990835892,-94.830804318260235 33.740068022348083,-94.828875382311935 33.74092532536806,-94.827937698058648 33.741342073027738,-94.826026615866809 33.743890180559411,-94.824752565187154 33.749304914465036,-94.82447272313469 33.749460382205008,-94.821885938813196 33.750897483986968,-94.817426749089677 33.752171534666616,-94.815635414888177 33.752066164468857,-94.813744972719192 33.751954964523563,-94.81275807295215 33.751896912919612,-94.812012015184067 33.751853028169073,-94.80914539498248 33.749304914465036,-94.798634446013509 33.744527205899239,-94.789716054221742 33.746119775421171,-94.777638928565466 33.753471071068567,-94.775064434371529 33.755038154868203,-94.770923763490302 33.754401129528375,-94.768057130944001 33.753445597691005,-94.766464573766783 33.750897483986968,-94.766146067269247 33.748030863785381,-94.766818924318841 33.746124416643802,-94.768057130944001 33.742616129879757,-94.767738636791165 33.737519908644046,-94.767244154304578 33.736926531576607,-94.76296091588064 33.731786662068515,-94.759138751496963 33.729557067206756,-94.758159820145337 33.729557067206756,-94.753087004596253 33.729557067206756,-94.750011775433265 33.728811557489699,-94.742576055627282 33.727008959675082,-94.742176780415733 33.726449974997927,-94.739390916583417 33.72254976995157,-94.737479828219207 33.716179498036198,-94.737788227808608 33.71500758055268,-94.73907239774114 33.71012773879076,-94.73746132453816 33.705563045258067,-94.73716130937693 33.704713004885136,-94.732383613155861 33.700253815161624,-94.728242929929891 33.699616789821789,-94.725694828570582 33.702483410023376,-94.724525908047042 33.704821269192259,-94.724102271393392 33.705668549067234,-94.721872664186904 33.707261118589173,-94.719006043985303 33.708216656598914,-94.714865360759347 33.707261118589173,-94.711043208720398 33.705668549067234,-94.709450639198465 33.699616789821789,-94.710289486124168 33.697309952648205,-94.710724689878106 33.696113138108018,-94.710724689878106 33.691653948384499,-94.710106194192988 33.688252279047049,-94.71008765219355 33.688150299756906,-94.707858069676533 33.686876245991066,-94.691547961569825 33.685092048879412,-94.684792000000002 33.684353000000002,-94.659166999999997 33.692138,-94.652265035786613 33.690979104454883,-94.649628372726468 33.688049476940073,-94.649099284135872 33.686462209886628,-94.648456523423718 33.684533926193204,-94.64818493525776 33.682632803768527,-94.647928021538007 33.680834402751707,-94.647870600191638 33.680432452214262,-94.648456523423718 33.673401362074948,-94.647827859209684 33.672301196274027,-94.646112824818204 33.669299876741562,-94.642890235687361 33.668420997570671,-94.635273213800133 33.669885811328072,-94.631328876730365 33.67284406472757,-94.630585813750528 33.673401362074948,-94.627656194751552 33.677795791992715,-94.62121101648988 33.681018386800773,-94.616816575217669 33.679553573043371,-94.614284398758912 33.677302743466427,-94.611543254774574 33.674866164477912,-94.611424034353576 33.674789522931938,-94.607441775118403 33.672229504256364,-94.60304734520065 33.671350625085473,-94.596895128555005 33.671350625085473,-94.593672545101384 33.673987285307021,-94.590449961647764 33.677502836053897,-94.590316660066918 33.67755410593854,-94.586641449284855 33.678967649811298,-94.579620000000006 33.677622999999997,-94.576973687569549 33.673401362074948,-94.5728722135906 33.669885811328072,-94.571305222138406 33.668005422800071,-94.569942586075811 33.666370260581196,-94.569356662843745 33.663440621711956,-94.571445361022185 33.660423619728157,-94.571993323065286 33.659632120703485,-94.572286279004103 33.656995454804722,-94.570821465246695 33.654944723492456,-94.568770728257221 33.65465176187643,-94.564669254278257 33.655823608340576,-94.563858010166513 33.65591721375597,-94.557052229552454 33.656702498865904,-94.552071876402621 33.653479904057846,-94.551192985877293 33.650257320604226,-94.551311999999982 33.644569999999995,-94.553536678805585 33.642054372646328,-94.552657799634687 33.638245860283412,-94.549142248887819 33.635902161677912,-94.543868917090279 33.635902161677912,-94.538888563940446 33.637952898667386,-94.538195599937964 33.637916426989378,-94.537583502619341 33.637884211439605,-94.533322276204103 33.637659937051346,-94.529220802225154 33.63443734792051,-94.528408204203203 33.630103504051213,-94.528341911699826 33.629749945032266,-94.52980672545722 33.627406252103981,-94.528927834931892 33.621839964367631,-94.526291174710352 33.619203298468861,-94.521363727720257 33.61686924674752,-94.520724886974008 33.61656663824732,-94.504615 33.620682000000002,-94.493418698303032 33.624467326832118,-94.492501061148843 33.624777568252533,-94.491502999999994 33.625115,-94.491295462081894 33.62531395337146,-94.487514000000004 33.628939000000003,-94.485874999999993 33.637867,-94.481313 33.638818999999998,-94.476415000000003 33.638947000000002,-94.466075000000004 33.636262000000002,-94.464185999999998 33.637655000000002,-94.461453000000006 33.643615999999994,-94.459197999999986 33.645145999999997,-94.454819999999998 33.644902999999999,-94.448637000000005 33.642766000000002,-94.446871000000002 33.640177999999999,-94.447513999999998 33.636254999999991,-94.448451000000006 33.634497000000003,-94.458816999999982 33.632444,-94.462736000000007 33.63091,-94.461129 33.625414999999997,-94.460285999999996 33.624420999999998,-94.45525499999998 33.622917,-94.452710999999994 33.622621000000002,-94.452325000000002 33.618817,-94.452961000000002 33.616985999999997,-94.454768999999999 33.615155999999992,-94.462335999999993 33.610567000000003,-94.469451000000007 33.60731599999999,-94.472166 33.604199,-94.471974000000003 33.602665000000002,-94.471151999999989 33.601588,-94.468086 33.599435999999997,-94.461794602929331 33.598691554192769,-94.458900358388505 33.598349085232492,-94.458231999999995 33.598269999999999,-94.454858239556387 33.593453869357283,-94.453995999999989 33.592222999999997,-94.453435550445548 33.592019500625121,-94.452150252013013 33.591552808439438,-94.451622 33.591360999999999,-94.449112 33.590893999999992,-94.442363999999998 33.591242999999999,-94.441536999999997 33.591501999999991,-94.439518000000007 33.594154000000003,-94.430358101189597 33.59122600196271,-94.430038999999994 33.591124,-94.429672337173542 33.590855074196774,-94.427920122643982 33.589569927010331,-94.427577999999983 33.589319000000003,-94.425982000000005 33.586424999999998,-94.413155000000003 33.569367999999997,-94.412481642075306 33.56890283335202,-94.412480771235352 33.568902231761562,-94.412480202418593 33.568901838813659,-94.412175000000005 33.568691,-94.408900999999986 33.568196999999998,-94.403341999999995 33.568424,-94.397341999999981 33.571607999999998,-94.385926999999995 33.581887999999999,-94.382886999999997 33.58326799999999,-94.379649 33.580607,-94.378075999999993 33.577019,-94.377759999999981 33.574609000000002,-94.378561000000005 33.571328999999999,-94.380090999999993 33.568942999999997,-94.382534000000007 33.567056999999998,-94.388052000000002 33.565511,-94.392357000000004 33.565286999999998,-94.394655618773015 33.564059042448399,-94.397398454287298 33.562313601959417,-94.399227012370631 33.559903231990447,-94.399393244337958 33.557077279687135,-94.399143896386974 33.555498071165481,-94.397957000000005 33.554389999999998,-94.392572999999999 33.551141999999999,-94.389515000000003 33.546778000000003,-94.386086000000006 33.544922999999997,-94.381666999999993 33.544035,-94.373392999999993 33.544471,-94.371597999999992 33.545000999999999,-94.363297000000003 33.544956999999997,-94.361350999999999 33.544612999999998,-94.358969999999999 33.54323,-94.355945000000006 33.54318,-94.348944999999986 33.548358999999998,-94.347382999999979 33.55107799999999,-94.34729 33.552197,-94.352653000000004 33.560611000000002,-94.352433000000005 33.56217199999999,-94.345512999999997 33.567312999999999,-94.344023000000007 33.567824000000002,-94.340576999999996 33.567878,-94.340047258358467 33.56768232744934,-94.338972839399958 33.567285465504582,-94.33842199999998 33.567081999999999,-94.337996277272822 33.566655299162022,-94.334939999999989 33.563592,-94.334379999999996 33.562536,-94.333929800646288 33.557825151092565,-94.333894999999998 33.557461000000004,-94.333202999999997 33.555365999999992,-94.331833000000003 33.553348,-94.33059 33.552692,-94.323660000000004 33.549835000000002,-94.319491999999997 33.548864000000002,-94.309582000000006 33.551673,-94.30641 33.555616,-94.306214999999995 33.557676,-94.307180999999986 33.559797000000003,-94.303577000000004 33.56828,-94.301022999999986 33.573022000000002,-94.298392000000007 33.576217999999997,-94.293257999999994 33.580418999999999,-94.289129000000003 33.582143999999992,-94.287025 33.582410000000003,-94.283581999999996 33.581890999999999,-94.282647999999995 33.580978000000002,-94.280849000000003 33.577187000000002,-94.280604999999994 33.574907999999994,-94.282171999999989 33.572989,-94.290372000000005 33.567905000000003,-94.291686999999996 33.563481000000003,-94.290901000000005 33.558872,-94.289439999999999 33.557634999999998,-94.287571999999997 33.557178,-94.279089999999997 33.557026,-94.275600999999995 33.557963999999998,-94.274473 33.558652000000002,-94.271997999999996 33.561517999999992,-94.270978999999997 33.563220999999999,-94.270853000000002 33.564782999999998,-94.265668999999988 33.573588999999998,-94.262754999999999 33.577354,-94.257801 33.582507999999997,-94.257524288354617 33.582703553652586,-94.252656000000002 33.586143999999997,-94.245931999999996 33.589113999999995,-94.242777000000004 33.589708999999999,-94.240178999999998 33.589536000000003,-94.236971999999994 33.587411000000003,-94.236362999999997 33.585991999999997,-94.236835999999997 33.580914,-94.237975000000006 33.577756999999998,-94.238867999999997 33.576721999999997,-94.244365999999999 33.573549,-94.251108000000002 33.56528,-94.252330999999984 33.561855,-94.252283000000006 33.560445,-94.251569000000003 33.558188,-94.250197 33.556764999999999,-94.237903999999986 33.552675,-94.233128263729824 33.552212399803537,-94.233017493976078 33.552201670126067,-94.231843999999981 33.552087999999998,-94.226392000000004 33.552911999999999,-94.222920999999999 33.554088,-94.21922099999999 33.556095999999997,-94.213604000000004 33.563133999999998,-94.21268334130005 33.563763266722709,-94.208078 33.566910999999998,-94.205634000000003 33.567228999999998,-94.203593999999981 33.566546000000002,-94.202594978382763 33.562850001484037,-94.201237000000006 33.557825999999999,-94.199485999999993 33.556085000000003,-94.197816999999986 33.555238000000003,-94.196394999999995 33.555123000000002,-94.193247999999997 33.556153999999999,-94.191332999999986 33.55766599999999,-94.189883999999992 33.562454000000002,-94.192482999999996 33.570425,-94.194399000000004 33.573678,-94.196366991504703 33.574779501237479,-94.201105911663163 33.575851400157113,-94.204265191768783 33.575005164570705,-94.207404999999994 33.574353000000002,-94.209665 33.573509999999999,-94.211329000000006 33.573774,-94.216140999999993 33.576391999999998,-94.217408000000006 33.579259999999998,-94.217197999999982 33.580736999999999,-94.214431000000005 33.583187000000002,-94.212997 33.583486999999991,-94.210966999999997 33.583143,-94.205788416261612 33.581380140341984,-94.203588205048902 33.580815984742067,-94.199751933850294 33.581098061448763,-94.196536237091394 33.581718635888464,-94.194464999999994 33.582886000000002,-94.190890999999979 33.587474,-94.183913000000004 33.594681999999999,-94.180879999999988 33.592612000000003,-94.176327 33.591076999999999,-94.162266000000002 33.588906,-94.161081999999993 33.587972,-94.162009999999995 33.580877,-94.161276999999998 33.579270999999999,-94.156782000000007 33.575749000000002,-94.152625999999998 33.575923000000003,-94.148731999999995 33.580196999999998,-94.146047999999993 33.581975,-94.144383000000005 33.582097999999995,-94.142160000000004 33.581389999999999,-94.141852 33.579590000000003,-94.143023999999983 33.577725,-94.145668999999984 33.575599999999994,-94.149506000000002 33.573602,-94.151257 33.571793,-94.151754999999994 33.569476000000002,-94.151455999999996 33.568387,-94.148520000000005 33.565677999999991,-94.145239000000004 33.564987000000002,-94.143401999999995 33.565504999999995,-94.136863999999989 33.570999999999998,-94.136045999999993 33.571387999999999,-94.135142000000002 33.571033,-94.134308000000004 33.569209,-94.133047999999988 33.557952999999998,-94.131382000000002 33.552934,-94.128658 33.550952000000002,-94.126897999999983 33.550646999999991,-94.123897999999997 33.552100000000003,-94.122878999999983 33.553111999999999,-94.12071899999998 33.560555,-94.120354999999989 33.5655,-94.119902152897509 33.566998927274319,-94.112842999999998 33.566991000000002,-94.103176000000005 33.570349999999998,-94.100106999999994 33.57256799999999,-94.097439999999992 33.573718999999997,-94.088943 33.575322,-94.082640999999995 33.575491999999997,-94.072670000000002 33.572234000000002,-94.072231491265512 33.572605318678747,-94.072031926011121 33.573523317998088,-94.072031926011121 33.573846369634623,-94.072031926011121 33.574161925883949,-94.071815412538413 33.574459631515609,-94.071712621294751 33.574600969288895,-94.071353404455635 33.574840447439463,-94.070395493400298 33.574561056392717,-94.069534727631535 33.574169799087244,-94.069517406590393 33.574161925883949,-94.068559493988133 33.573563230894273,-94.068280102941401 33.571966710019424,-94.06782332144887 33.570215714974232,-94.067801146640278 33.570130711574109,-94.066845999999998 33.568908999999998,-94.061283000000003 33.568804999999998,-94.056597999999994 33.567824999999999,-94.056095999999997 33.567252000000003,-94.055662999999996 33.561886999999999,-94.056442000000004 33.560997999999991,-94.059849999999997 33.559249,-94.061179999999993 33.559159,-94.066685000000007 33.560953999999995,-94.067984999999993 33.560960999999999,-94.071719999999999 33.559682000000002,-94.073744000000005 33.558284999999998,-94.073825999999997 33.555833999999997,-94.072156000000007 33.553863999999997,-94.069091999999998 33.553406000000003,-94.06547999999998 33.550908999999997,-94.061896000000004 33.549764000000003,-94.056095999999997 33.550725999999997,-94.051882000000006 33.552585,-94.050211999999988 33.551082999999998,-94.046040000000005 33.551321000000002,-94.043449999999993 33.552253,-94.043428000000006 33.551424999999995,-94.043374999999997 33.542315000000002,-94.043020107474533 33.494534442391668,-94.043008999999998 33.493039000000003,-94.043278999999998 33.491029999999995,-94.043271947583932 33.489425304099555,-94.043188 33.470323999999991,-94.043130608695648 33.460424000000003,-94.043089437732434 33.453322008844353,-94.043061045958495 33.448424427841935,-94.043010021810147 33.439622762252007,-94.042987999999994 33.435823999999997,-94.042987999999994 33.434442436873745,-94.042987999999994 33.431023999999994,-94.042886999999993 33.420225000000002,-94.042890126641851 33.419424334827802,-94.042891364631132 33.419107312620362,-94.042967439944888 33.399626074590046,-94.043053 33.377715999999999,-94.042868999999996 33.371169999999999,-94.043127999999996 33.358756999999997,-94.043066999999979 33.352097,-94.043066999999979 33.347351000000003,-94.043066999999979 33.339614667914582,-94.043066999999979 33.330497999999999,-94.042990000000003 33.271227000000003,-94.043049999999994 33.260903999999996,-94.043003999999996 33.250127999999997,-94.042730000000006 33.241822999999997,-94.042876000000007 33.215218999999998,-94.042891999999995 33.202666,-94.042874999999995 33.199784999999999,-94.042718999999991 33.160290999999994,-94.043184999999994 33.143476,-94.043076999999982 33.138162,-94.043007000000003 33.13389,-94.042951563372725 33.117233519058104,-94.042869999999994 33.092726999999996,-94.043036 33.079484999999998,-94.042963999999998 33.019219,-94.042986850316112 33.007494023677346,-94.043068075862834 32.965815492539427,-94.043087999999997 32.955592000000003,-94.043066999999979 32.937902999999999,-94.043092 32.910021,-94.042884999999998 32.898910999999998,-94.042859000000007 32.892771000000003,-94.042885999999996 32.880965000000003,-94.043025 32.880445999999999,-94.042784999999995 32.871485999999997,-94.042921087938623 32.829694015190334,-94.043025999999983 32.797476000000003,-94.042747000000006 32.786973000000003,-94.042828999999998 32.785277,-94.042937999999992 32.780557999999999,-94.043026999999995 32.776862999999999,-94.042946999999998 32.767991000000002,-94.042974715046569 32.757603400545236,-94.04314699999999 32.693030999999998,-94.042912999999999 32.655126999999993,-94.042779999999993 32.643465999999997,-94.042823999999996 32.640304999999998,-94.042925999999994 32.622014999999998,-94.042929 32.618259999999992,-94.042918999999998 32.610142000000003,-94.042939007208048 32.604544739553475,-94.043082999999996 32.564261000000002,-94.043142000000003 32.559502000000002,-94.043081 32.513612999999999,-94.042884999999998 32.505144999999999,-94.042911000000004 32.492851999999999,-94.043088999999995 32.486561000000002,-94.043071999999995 32.48429999999999,-94.042955000000006 32.480260999999999,-94.042995000000005 32.478003999999999,-94.042901999999998 32.472905999999995,-94.042874999999995 32.471347999999992,-94.042902999999981 32.470385999999998,-94.042907999999997 32.439890999999996,-94.042985999999999 32.435507,-94.042898999999991 32.400658999999997,-94.042923000000002 32.399918,-94.042900999999986 32.392282999999999,-94.042762999999994 32.373331999999998,-94.042738999999997 32.363559000000002,-94.042733519218956 32.277818574933548,-94.042732999999998 32.269696000000003,-94.042732 32.269620000000003,-94.042671451745775 32.225096273752321,-94.042662000000007 32.218145999999997,-94.042600205901905 32.185155675879351,-94.042565999999994 32.166893999999999,-94.042538999999991 32.166826,-94.042591000000002 32.158096999999998,-94.042681000000002 32.137956000000003,-94.042751999999993 32.125163,-94.042337000000003 32.119914,-94.042699999999996 32.056012000000003,-94.042717288248511 32.00695918811028,-94.042720000000003 31.999265,-94.042490448495869 31.997488887291052,-94.042251674184627 31.995641414801661,-94.041832999999997 31.992401999999998,-94.038411999999994 31.992436999999999,-94.029282999999992 31.995864999999998,-94.027080554152732 31.994823406342874,-94.018664 31.990842999999998,-94.011671046736083 31.979908989829021,-94.008352361284565 31.974719974671689,-94.002944198469422 31.966263903968002,-93.995504541226836 31.954631438414648,-93.994147015257326 31.952508844111783,-93.977461000000005 31.926418999999996,-93.971711999999982 31.920383999999995,-93.953546000000003 31.910562999999996,-93.943541310721315 31.908563758569336,-93.938002035663573 31.906916949339585,-93.935007833635339 31.903773037645127,-93.932462763507019 31.895538979891644,-93.931327794714704 31.894581351390723,-93.92767203678045 31.891496810199779,-93.923929283519882 31.889849995167665,-93.919587694495533 31.890748256066246,-93.915948999999998 31.892861000000003,-93.909557114944889 31.893143619429534,-93.905252294448232 31.890856686636408,-93.90476638821832 31.890598549301192,-93.901173350426333 31.885957535142037,-93.901888 31.880063,-93.898135577976262 31.874953416991548,-93.896981462364707 31.873381885463036,-93.889196542313442 31.867692899288475,-93.888241004857136 31.85786451213389,-93.888148571748644 31.856913771406646,-93.887306164689562 31.854968889155742,-93.884117000000003 31.847605999999995,-93.880377455095243 31.844791786271248,-93.879654915472827 31.84424803536659,-93.874821999999995 31.840611000000003,-93.874804231839249 31.835091218914506,-93.874787826198073 31.829994712349503,-93.874761000000007 31.821660999999999,-93.870917000000006 31.816836999999996,-93.868473098390325 31.815251608244314,-93.853390000000005 31.805467,-93.846187999999998 31.802021,-93.839950728453459 31.798597132180646,-93.836868453653821 31.794158659336233,-93.836868453653821 31.791454071635616,-93.836868453653821 31.788733862378688,-93.834649214842401 31.783309060642711,-93.831197070889573 31.780226788232302,-93.827450999999996 31.777740999999999,-93.823442999999997 31.775098,-93.822597999999985 31.773558999999995,-93.826519525540022 31.761832440276638,-93.827342999999999 31.759369999999997,-93.830112066651125 31.754555168030393,-93.830647423185951 31.745811043570992,-93.824579 31.734396999999998,-93.819048075401312 31.72885814427071,-93.818932598107111 31.728523867973351,-93.815657495541259 31.719043310199801,-93.815835943108667 31.711905251886723,-93.815525624652665 31.710796971318612,-93.814600367558683 31.707492480599399,-93.814586782471608 31.707443962415162,-93.811060073548262 31.705827553684028,-93.810303944025605 31.705480994217723,-93.807270273132957 31.704231833580664,-93.806045429297654 31.703104120446881,-93.803419352361757 31.700686292667093,-93.802693549340276 31.697783082925291,-93.802451615781152 31.693186330065117,-93.804479 31.685663999999999,-93.812820813246589 31.676953615984285,-93.81562111199878 31.674029590143711,-93.817425 31.672146,-93.821829497696953 31.673879806810671,-93.822051000000002 31.673966999999998,-93.822341750589956 31.673502431839047,-93.826462000000006 31.666919,-93.8257324849111 31.66154827530681,-93.825660999999997 31.661021999999996,-93.825228912080746 31.660277861177896,-93.81803699999999 31.647891999999999,-93.817707248836442 31.6409111211136,-93.816838000000004 31.622509,-93.818717000000007 31.614555999999997,-93.823976999999999 31.614227999999997,-93.825414416100287 31.615089707767993,-93.827851999999993 31.616550999999998,-93.838056999999992 31.606795000000002,-93.839382999999998 31.599074999999999,-93.837534908858984 31.593743346167731,-93.834924 31.586210999999999,-93.822958 31.568129999999996,-93.822219025006859 31.564792487143556,-93.820763999999997 31.558221000000003,-93.818582000000006 31.554825999999998,-93.798086999999995 31.534044000000002,-93.787687000000005 31.527343999999996,-93.781574079702807 31.525595412174177,-93.780834999999996 31.525383999999999,-93.777170583402579 31.525128039451072,-93.760062000000005 31.523933,-93.753860000000003 31.525331,-93.751899169046524 31.525601857922521,-93.749869902733366 31.526210635456998,-93.746826003263621 31.526007705679731,-93.743376259969125 31.525196002300419,-93.742401241878753 31.523787647735123,-93.74154991556837 31.522557958452786,-93.741111000000004 31.520101,-93.740752889151466 31.518711098615515,-93.740332360499409 31.517078940980245,-93.739317727342822 31.515049678599539,-93.734411826534469 31.513527159467717,-93.733432858180635 31.513223342063657,-93.726736285639134 31.511599931372594,-93.725924582259807 31.504091651519342,-93.728765551952293 31.496786301443361,-93.730997740177827 31.492118989316349,-93.733996137544537 31.48847587643743,-93.737167999999997 31.484621999999998,-93.741884999999982 31.483535,-93.745608448194673 31.481972669547908,-93.746355058504165 31.481633300507966,-93.747840636420193 31.480958036391328,-93.749869902733366 31.478928770078173,-93.749869902733366 31.475276095040186,-93.749626709600278 31.47120988033301,-93.749476 31.468689999999999,-93.709416000000004 31.442995,-93.706857276389258 31.44142369846492,-93.700929751125955 31.437783629836048,-93.697919763270235 31.429300939077926,-93.697603150134782 31.428408665937056,-93.704678 31.418899999999997,-93.704697874245824 31.418107106580852,-93.704878999999991 31.410881,-93.701611 31.409333999999998,-93.695865999999995 31.409391999999997,-93.689953513429003 31.406208353384852,-93.678362516190631 31.399967047179565,-93.675064666986117 31.398191282223291,-93.674659331220113 31.397973024503138,-93.674116999999981 31.397680999999995,-93.671643999999986 31.393352,-93.670181999999983 31.387184,-93.668532759396427 31.379357124595749,-93.668145986696857 31.37510269235548,-93.669064113561134 31.373151679996884,-93.669693055010129 31.371815184369147,-93.669512094168894 31.370548454097019,-93.668919524600994 31.366400452767671,-93.667402247962755 31.365414223393856,-93.665051865060306 31.363886475190469,-93.663891561951601 31.361952641672623,-93.663698175601809 31.360018811902275,-93.664665092360735 31.357698213179859,-93.665825387974422 31.355184231855155,-93.668439000000006 31.353011999999996,-93.669515978941746 31.350266666374935,-93.673736148309771 31.339509006758242,-93.677277000000004 31.330482999999997,-93.687850999999995 31.309835,-93.686922292404276 31.305369360695714,-93.686880000000002 31.305166,-93.686723586265984 31.304979085312567,-93.684737187533131 31.30260533533086,-93.684038999999999 31.301770999999995,-93.683824154244718 31.301752735987076,-93.675439999999995 31.30104,-93.668927999999994 31.297974999999997,-93.657003999999986 31.281735999999999,-93.647719584117951 31.27389987096868,-93.642516 31.269508000000002,-93.632650200244299 31.270182983909681,-93.620343000000005 31.271025000000002,-93.615257056394739 31.261768439618621,-93.61394199999998 31.259374999999995,-93.614287999999988 31.251631,-93.616308000000004 31.244595000000004,-93.616007481020262 31.233959925788763,-93.613835693061347 31.232449117569455,-93.609977782626956 31.229765355202261,-93.609827614285464 31.229660890324059,-93.608033931702224 31.227867209671889,-93.60740940488401 31.227242683526022,-93.605259887151632 31.224152751460338,-93.604319472818304 31.220794125122111,-93.604319472818304 31.215285983654958,-93.607287999999997 31.205403,-93.602442999999994 31.182541,-93.600307999999998 31.176157999999997,-93.598827999999997 31.174679,-93.595531708436056 31.171774432382691,-93.588772842417583 31.16581877494577,-93.588502999999989 31.165581,-93.588046655571759 31.165671453282986,-93.583339301771971 31.166604510813709,-93.579215000000005 31.167421999999995,-93.578993496784307 31.167654977688123,-93.574136071231791 31.172764031170193,-93.569563000000002 31.177574,-93.560942999999995 31.182481999999997,-93.552649000000002 31.185575,-93.548930999999996 31.186601,-93.535096999999993 31.185614,-93.533756450961803 31.184752004501149,-93.533306999999994 31.184463,-93.5330935917342 31.183965183917415,-93.531744000000003 31.180816999999998,-93.533193520062923 31.174490811082034,-93.53417786817559 31.170194787673282,-93.536829999999981 31.158620000000003,-93.540253000000007 31.156578999999997,-93.544009577425854 31.153014849431809,-93.544887639546317 31.148844041597808,-93.544887639546317 31.143136612291205,-93.544701999999987 31.135888999999999,-93.540277800652078 31.128868068802213,-93.539619249807799 31.121843550568837,-93.541375382556595 31.113501939154769,-93.541635919885238 31.113241401693255,-93.548470239502265 31.106407078590973,-93.549716998224596 31.105160319232844,-93.55112206776522 31.099540038044921,-93.551692642249563 31.097257738879012,-93.551034091405285 31.091111287020031,-93.546643772295099 31.082989189009115,-93.540128999999993 31.078002999999995,-93.53104031045666 31.074698717981779,-93.527873992025093 31.072210897922254,-93.526043656150705 31.070772777782928,-93.524020490083288 31.067083472240864,-93.523009982318626 31.065240780256033,-93.523659621286654 31.063941504256789,-93.525329858273139 31.060601035263321,-93.529255791555698 31.057567354514948,-93.532069000000007 31.055264,-93.531218761655126 31.051678447674814,-93.523247999999995 31.037841999999998,-93.516942620821894 31.032584114108545,-93.516407263768343 31.029550433360171,-93.516883288197775 31.024314186160638,-93.516942620821894 31.023661529978199,-93.539525999999995 31.008497999999999,-93.540062152267268 31.008345085566372,-93.540618575989114 31.008186389569964,-93.555580999999989 31.003918999999996,-93.562626264226125 31.00599480945781,-93.566016847371429 31.004567194682853,-93.567979815741779 31.001533515663564,-93.569764334642755 30.996715319472376,-93.571101253513504 30.991033414001794,-93.571905755076102 30.987614282198351,-93.567971999999997 30.977981,-93.560533000000007 30.971285999999999,-93.55046299120518 30.967360467203815,-93.549841 30.967117999999996,-93.539153617393822 30.956968324013513,-93.532549000000003 30.950695999999997,-93.526524876707626 30.939912016599852,-93.526293050708773 30.939497017171423,-93.526245000000003 30.939411,-93.526242458076936 30.939167805401102,-93.526231146824912 30.938085618677029,-93.526146999999995 30.930035,-93.526269219450654 30.929894609689271,-93.530935999999983 30.924533999999998,-93.542488999999989 30.920064,-93.54502991280485 30.920837107400992,-93.546884259495414 30.92151141825828,-93.549244331161987 30.921005686748707,-93.550358562122057 30.920030731622223,-93.551941554990407 30.918645608548566,-93.555650241837967 30.911228247920597,-93.555751501305451 30.910053639118178,-93.555774257662236 30.909789665608852,-93.556493125509377 30.9014508058257,-93.562447641167196 30.896531852982324,-93.563812214002311 30.895404595987301,-93.564247644832776 30.895044891882932,-93.567787752332634 30.888301832311882,-93.567450600170787 30.878524390216981,-93.566008182600839 30.875519355165832,-93.565853452041281 30.875197,-93.565427680666076 30.874309976760035,-93.563763247930751 30.87311591407202,-93.559394659034922 30.869981891957959,-93.55904186947815 30.86972880101742,-93.558616999999984 30.869423999999999,-93.558608112367665 30.868835818489011,-93.558593354020289 30.867859114376206,-93.558393833586933 30.854654896933653,-93.558352334289978 30.851908482785802,-93.558231866260058 30.843935935637496,-93.558171999999999 30.839973999999998,-93.553625999999994 30.835139999999999,-93.55374115920948 30.832414921630001,-93.554057 30.824940999999995,-93.561666000000002 30.807738999999998,-93.563243 30.806218000000005,-93.564501487304341 30.805543276361082,-93.569303000000005 30.802969,-93.578395 30.802046999999998,-93.584264999999988 30.796662999999995,-93.588934854633479 30.787551489258888,-93.589380999999989 30.786681000000002,-93.589895999999996 30.77776,-93.591925627378814 30.768225181611253,-93.592827999999997 30.763985999999996,-93.607757000000007 30.757656999999995,-93.611581311334461 30.752392350515215,-93.615058988962588 30.747604886281291,-93.619129 30.742001999999996,-93.617688 30.738479000000005,-93.609908791486006 30.729403419430973,-93.609718999999998 30.729181999999998,-93.609544 30.723138999999996,-93.61030547238029 30.720788970554505,-93.611192000000003 30.718053,-93.61618399999999 30.713980000000003,-93.616977218405893 30.712276394979256,-93.620773999999997 30.704122000000005,-93.621061387132315 30.696047232392139,-93.621092999999988 30.695159,-93.62235785978659 30.692974242186811,-93.629903999999996 30.679939999999995,-93.632922525899005 30.677439880221801,-93.638212999999993 30.673057999999997,-93.646373493696458 30.671658473870171,-93.653439445062318 30.670446661945991,-93.654970999999989 30.670183999999999,-93.666219386787546 30.661299653678171,-93.670353999999989 30.658033999999997,-93.670860468306827 30.657347728689221,-93.683099999999996 30.640763000000003,-93.685120999999981 30.625201,-93.684323003112922 30.617258061147268,-93.683396999999985 30.608040999999997,-93.680812614601606 30.602993111696524,-93.680648411741274 30.602453589051585,-93.679828117977763 30.599758343304948,-93.681234543283509 30.596101640780542,-93.683902548646543 30.593069810094963,-93.684328672415049 30.59258557751615,-93.684347894395486 30.592579170189346,-93.687282162286593 30.59160108089231,-93.689533999999995 30.592759,-93.692869000000002 30.594382000000003,-93.712453999999994 30.588479,-93.72107859525056 30.580404159651369,-93.727657631584904 30.574244488790981,-93.727844000000005 30.574069999999995,-93.727840097341868 30.573768021870688,-93.72780696123904 30.571204031383882,-93.727747245613443 30.566583382517752,-93.727745999999996 30.566486999999999,-93.725846999999987 30.556978,-93.728764326223569 30.546403128121515,-93.729195000000004 30.544841999999999,-93.736587760607577 30.541316766984647,-93.740252999999996 30.539569,-93.738909526480768 30.537838512460276,-93.732793 30.529960000000003,-93.727721000000003 30.525671000000003,-93.718711305261792 30.520890798500346,-93.714321999999996 30.518561999999996,-93.710116999999997 30.506399999999996,-93.713193644304937 30.50058809182816,-93.716678000000002 30.494005999999995,-93.71365216083376 30.483878530555742,-93.711446941284677 30.476497671106777,-93.710595424186792 30.473647647388944,-93.709703157003446 30.47066123332699,-93.708899372668625 30.467970970942378,-93.705844999999997 30.457747999999999,-93.697828 30.443837999999996,-93.6978 30.440583,-93.698862234241474 30.438260713588438,-93.702220303997905 30.430919206922557,-93.702664999999996 30.429947000000002,-93.722313999999997 30.420729,-93.729486046484141 30.413342592858086,-93.738025291703323 30.404548123662593,-93.738321805525445 30.404242747530638,-93.745333000000002 30.397022,-93.751243378615428 30.396311282781173,-93.751436999999996 30.396287999999998,-93.754787283332149 30.393127406185759,-93.75746720581121 30.390599218098316,-93.757654000000002 30.390422999999995,-93.757872622462301 30.389610210267922,-93.758470934573069 30.387385818798332,-93.75855399999999 30.387077,-93.758091991038413 30.3842338214119,-93.758032188807945 30.383865801664729,-93.757931393201204 30.383245510859378,-93.75589426835937 30.370709152880856,-93.756044740613035 30.365928314513319,-93.75610723110799 30.3639428524199,-93.756352000000007 30.356166000000002,-93.758519945992674 30.350935458285047,-93.760658351649255 30.34577618769989,-93.763244572034736 30.339536487238696,-93.765822 30.333317999999995,-93.764264999999995 30.330222999999997,-93.760690955159149 30.32995156504764,-93.760328 30.329923999999998,-93.747921244232074 30.314935395431327,-93.743830002049762 30.309992764786195,-93.741160171732417 30.306767342150266,-93.738698999999997 30.303793999999996,-93.734966161369201 30.301561360829975,-93.729390287632427 30.298226388348422,-93.724220000000003 30.295133999999997,-93.718684474451791 30.295009979388311,-93.714319430116035 30.294282471059141,-93.71311219174963 30.293184979315004,-93.711118400234781 30.291372437742464,-93.709949692759622 30.289928741213533,-93.708644873043468 30.288316906143507,-93.708448001046747 30.287627854154977,-93.707590519980414 30.284626670422831,-93.706607851977495 30.281187332412603,-93.706635817233519 30.280914670488997,-93.707189856385114 30.275512775340033,-93.709131999999997 30.271826999999995,-93.707538803456245 30.253087036355307,-93.707271000000006 30.249936999999996,-93.705637767078656 30.244573755694763,-93.705083000000002 30.242751999999996,-93.707646217538425 30.23733474070027,-93.713358999999997 30.225261,-93.71802168481895 30.219915738218987,-93.719219999999993 30.218541999999999,-93.720945999999998 30.209852,-93.717397000000005 30.193439,-93.710467999999992 30.180670999999997,-93.706634735424259 30.17682001000631,-93.705927274531248 30.176109277739844,-93.705791510460429 30.175972885881706,-93.703764000000007 30.173936,-93.703646997347349 30.173527735424756,-93.702964616901454 30.171146663230584,-93.701744610591902 30.166889619937699,-93.701686103512344 30.166685467574972,-93.697748000000004 30.152943999999998,-93.696083741705934 30.150925109485563,-93.688211999999979 30.141376,-93.69286799999999 30.135216999999997,-93.69498 30.135185,-93.698276000000007 30.138608000000005,-93.700984936503929 30.137486558544058,-93.701251999999997 30.137376,-93.7012922571502 30.136537706048752,-93.701585086407604 30.130439981942867,-93.701656556414648 30.128951727699913,-93.701742498922442 30.127162105630983,-93.701985639262489 30.122099077688652,-93.702366286953335 30.114172668214064,-93.702403861450691 30.11339023643033,-93.702436000000006 30.112720999999997,-93.70268530105453 30.112503701678254,-93.704703872918159 30.110744253531749,-93.710410303455276 30.105770356484715,-93.714491639657382 30.10221294069715,-93.723764999999986 30.094129999999996,-93.727140999999989 30.092110594495406,-93.7293848599641 30.090768395691203,-93.72996305770063 30.09042253796256,-93.732484999999997 30.088913999999995,-93.734084999999979 30.086129999999997,-93.731705540540531 30.081478540540548,-93.731605000000002 30.081282000000002,-93.729179922109864 30.079341937687897,-93.727017487667368 30.077611990133899,-93.71640499999998 30.069121999999997,-93.716151269697463 30.069056930886212,-93.707507094464489 30.066840132907302,-93.702179999999998 30.065473999999995,-93.700580000000002 30.063666,-93.699479012508235 30.0595596142199,-93.699395999999993 30.059249999999995,-93.699786698153744 30.05843348475733,-93.700658293446523 30.056611948527472,-93.700819999999993 30.056273999999998,-93.702099264262131 30.055460929156467,-93.703267223154896 30.054718601437116,-93.703940000000003 30.054290999999999,-93.704473210548429 30.054251542735575,-93.709782747672762 30.053858640136632,-93.710785394684464 30.05378444485228,-93.720804999999999 30.053042999999995,-93.729054152595779 30.045230570163486,-93.729990027439044 30.044344241966268,-93.737446000000006 30.037282999999999,-93.739158000000003 30.032626999999998,-93.739733999999999 30.023987000000002,-93.741078000000002 30.021571000000002,-93.744068611359822 30.019549890100706,-93.74834924745744 30.01665695787004,-93.753252045558341 30.013343557169065,-93.766227014667976 30.004574835541469,-93.782835629207284 29.993350429819579,-93.786934999999986 29.990579999999998,-93.789430999999993 29.987812000000002,-93.803328792953494 29.962666096659486,-93.807814999999991 29.954549,-93.813734999999994 29.935126,-93.816550000000007 29.920725999999995,-93.818997999999993 29.914822,-93.830374000000006 29.894358999999998,-93.838374000000002 29.882854999999999,-93.853129483564672 29.866348149842587,-93.854474509531912 29.864843479256791,-93.855140000000006 29.864098999999996,-93.857517787207271 29.862146563102172,-93.862474802662518 29.858076283033213,-93.863569999999996 29.857177,-93.864820388168837 29.856398395289631,-93.872445999999997 29.851650000000003,-93.890679000000006 29.843159000000004,-93.900728 29.836967,-93.911111176241661 29.828996955749506,-93.916359999999997 29.824967999999998,-93.922743999999994 29.818808,-93.927992000000003 29.809640000000002,-93.929208000000003 29.802952,-93.928808000000004 29.79708,-93.926503999999994 29.789559999999998,-93.922407000000007 29.785048,-93.898470000000003 29.771576999999997,-93.893861999999999 29.767289000000002,-93.890820999999988 29.761672999999995,-93.891780610698319 29.758916671398389,-93.892526767476923 29.756773455119472,-93.893828999999997 29.753032999999999,-93.891732576672823 29.744984915009951,-93.891637000000003 29.744618000000003,-93.891484462723341 29.744488863328282,-93.888820999999993 29.742234000000003,-93.873941000000002 29.737770000000005,-93.870019999999997 29.735482,-93.863203999999996 29.724059,-93.837970999999982 29.690618999999998,-93.852868 29.675885,-93.866980999999996 29.673085,-93.889989999999997 29.674012999999999,-93.930999999999997 29.679611999999999,-93.955443390383635 29.680262610936268,-93.955453232202885 29.68026287289646,-93.991585827226885 29.681224615973395,-94.000169999999997 29.681453101326589,-94.000222586816207 29.681454501032487,-94.001406000000003 29.681486,-94.010062765207763 29.679864152681674,-94.056505999999999 29.671163,-94.132576999999984 29.646217,-94.354166823921716 29.561457673765378,-94.370794193562546 29.555097613439198,-94.391123278008692 29.54732162684321,-94.45341877657637 29.523493256060661,-94.456196753642018 29.522430664556182,-94.45805240375158 29.521720868184531,-94.499046371673685 29.506040450016997,-94.499089575343746 29.506023924375612,-94.500455432020999 29.505501476685335,-94.500806999999995 29.505367,-94.552043946167103 29.48495633977835,-94.552044379602123 29.484956167115939,-94.568074121423052 29.478570587212708,-94.593696728539513 29.46836361027578,-94.594852999999986 29.467903,-94.599458690353401 29.465813271763974,-94.62931993394271 29.452264405230761,-94.631084 29.451464,-94.634656044789836 29.449584234717392,-94.661528069434993 29.435443006940758,-94.670389 29.430779999999999,-94.674924987623086 29.427889211977174,-94.680871144138621 29.42409972235215,-94.694158000000002 29.415631999999999,-94.708472999999998 29.403049000000003,-94.723958999999979 29.383268000000005,-94.730956033155138 29.369322304827527,-94.731047000000004 29.369140999999996,-94.731324722869132 29.369141342444962,-94.731537324603394 29.369141604592603,-94.742750849251038 29.369155431380086,-94.744595216508316 29.369157705569055,-94.744833999999997 29.369157999999999,-94.761491000000007 29.361882999999999,-94.772184717669788 29.3616343088914,-94.778690999999995 29.361483,-94.780073439975141 29.362532749099824,-94.782355999999993 29.364266,-94.782645420567292 29.368514320481975,-94.783130999999997 29.375641999999996,-94.766847999999996 29.393488999999999,-94.754099999999994 29.400999999999996,-94.743385419572206 29.410035318862811,-94.73704402931665 29.415382843516582,-94.727822669267709 29.423158969605012,-94.723817999999994 29.426535999999995,-94.716270519001597 29.430976788539081,-94.706539419927282 29.436702374764607,-94.706364999999991 29.436804999999996,-94.686385999999999 29.466508999999995,-94.681540999999996 29.471388999999999,-94.672399999999996 29.476842999999999,-94.665852999999998 29.478401000000002,-94.656737000000007 29.478032999999996,-94.645948000000004 29.473769,-94.628217000000006 29.475986000000002,-94.608557000000005 29.483344999999996,-94.594211 29.492127,-94.595122262498009 29.503650874486677,-94.595439999999996 29.507669,-94.591407000000004 29.513857999999999,-94.580274000000003 29.525295,-94.566674000000006 29.531987999999995,-94.553989999999985 29.529558999999999,-94.546993999999998 29.524379,-94.532347999999999 29.5178,-94.511044999999996 29.519649999999995,-94.495024999999984 29.525030999999998,-94.503428999999997 29.543249999999997,-94.509486999999993 29.542589999999997,-94.523742999999996 29.545987,-94.523871183237745 29.546315590042923,-94.5261306113389 29.55210749848424,-94.526336 29.552633999999998,-94.542531999999994 29.568999999999999,-94.546193009360195 29.571896121601313,-94.546385 29.572047999999995,-94.546803832691651 29.57214903106096,-94.55398799999999 29.573882,-94.570006000000006 29.572232,-94.578210999999982 29.567281,-94.593518000000003 29.561319,-94.625889999999998 29.552807999999999,-94.634988842169335 29.550728838088908,-94.643914431984982 29.54868926579681,-94.666855093063802 29.543447131924982,-94.691625000000002 29.537787000000002,-94.693243673136905 29.537529479678042,-94.718275999999989 29.533546999999995,-94.740699000000006 29.525857999999999,-94.757688999999999 29.524616999999999,-94.768675999999999 29.525659,-94.780938000000006 29.531093000000002,-94.785987568065153 29.540133852805589,-94.789123822994313 29.545749069554745,-94.789562096440733 29.546533763545689,-94.78971899677407 29.546814681200559,-94.790604999999999 29.548400999999998,-94.779438999999996 29.549472000000002,-94.772471009935998 29.548613672580952,-94.771052999999995 29.548438999999995,-94.762972090755014 29.555767305595641,-94.75523699999998 29.562781999999999,-94.750081379755628 29.56810096117977,-94.734626000000006 29.584046,-94.731874420576986 29.588423440241069,-94.724443803393115 29.600244680945409,-94.708741000000003 29.625226,-94.705273448792255 29.640626536822896,-94.703938528752261 29.6465553563269,-94.702680930363101 29.65214076491651,-94.702542126991759 29.652757236398369,-94.699660909360375 29.665553672721437,-94.69780371146922 29.673802100155214,-94.694887994254785 29.686751760487848,-94.693153999999993 29.694452999999999,-94.692434000000006 29.70361,-94.692611750388934 29.704808689927841,-94.695098387970873 29.721577752663908,-94.695317000000003 29.723051999999999,-94.695611486157915 29.72357178078331,-94.697558868014866 29.727008993840069,-94.705700105090941 29.741378628781629,-94.713878412983604 29.755813695314995,-94.714586470042065 29.757063446593907,-94.722078339612551 29.770286919851305,-94.724615999999983 29.774766,-94.735270999999997 29.785433,-94.738125273271791 29.786265833277604,-94.740919000000005 29.787080999999997,-94.749144589762409 29.783534045463153,-94.75591801041729 29.780613280409739,-94.771512 29.773888999999997,-94.792237999999998 29.767432999999997,-94.798897371247961 29.764438558858895,-94.816085 29.756710000000002,-94.81943931055217 29.753325616252695,-94.823987131664666 29.748737021482022,-94.851107999999996 29.721373000000003,-94.856932183541645 29.710462974624775,-94.860426638443812 29.703917062844585,-94.864167858487249 29.696908903620852,-94.865007000000006 29.695336999999999,-94.865123196353878 29.694545038919138,-94.867438000000007 29.678768000000002,-94.872550999999987 29.67125,-94.893107 29.661335999999999,-94.915413 29.656613999999998,-94.921317999999999 29.658177999999999,-94.928410408640929 29.669495826038883,-94.930071799099807 29.672147016790593,-94.930110565443542 29.672208878811933,-94.930656833967475 29.673080595662611,-94.931474856161643 29.67438596783704,-94.934166999999988 29.678681999999998,-94.935264231405057 29.686686879688732,-94.935319060033862 29.687086883348073,-94.935997030967087 29.692033037575822,-94.936088999999996 29.692703999999999,-94.936280063994801 29.692851065945039,-94.941277009519624 29.696697319220664,-94.942680999999993 29.697778,-94.942922907078852 29.697804516058127,-94.95311095436017 29.698921254167477,-94.965343618259496 29.700262107971746,-94.965962999999988 29.70033,-94.972666000000004 29.684869999999997,-94.980123280315652 29.679059463608382,-94.986438191421769 29.674139034277729,-94.988580124776774 29.672470090483102,-95.001800051879343 29.662169436052462,-95.002396227716986 29.661704909944582,-95.005398 29.659365999999995,-95.011683000000005 29.649802000000005,-95.013860566469219 29.644103309100927,-95.014229369455222 29.643138151779844,-95.015636 29.639457,-95.015582911847446 29.639202042718885,-95.014543866006605 29.634211997110764,-95.013498999999996 29.629193999999998,-95.006633444897872 29.623869765921089,-95.00056235200779 29.61916163683599,-95.000370188745762 29.619012614335521,-94.997782627529062 29.617005962082896,-94.997731096758997 29.616965999999998,-94.995478872439179 29.615219401320278,-94.993499353954022 29.613684285860323,-94.988871000000003 29.610095,-94.988045541621688 29.608923290953985,-94.982835617337045 29.60152798723708,-94.982705999999993 29.601344000000005,-94.982886347998431 29.601051719777942,-94.983895794498991 29.599415764569699,-94.98693593300419 29.594488776939745,-94.988992999999994 29.591155,-94.991605757589539 29.588791109774153,-94.991811610459919 29.588604864563266,-94.992208959522046 29.588245363334387,-95.006677600766466 29.575154872369662,-95.007235451984087 29.574650156950938,-95.007670000000005 29.574256999999996,-95.00815781845921 29.573398130166158,-95.016627 29.558487,-95.018253 29.554884999999999,-95.016926355758628 29.548485488141377,-95.015164999999996 29.539988999999998,-95.012091452887788 29.536262245236642,-95.011587670186657 29.535651395780732,-95.011086587278399 29.535043819893005,-95.001666768519442 29.523622047865974,-94.999580999999992 29.521093,-94.989064037839412 29.515168017977793,-94.982063906682782 29.511224326765198,-94.981915999999998 29.511140999999995,-94.981645984265953 29.511070508097891,-94.961088181447877 29.505703566689924,-94.958443000000003 29.505013000000002,-94.958183821928699 29.504969740154092,-94.957844913785792 29.504913172428417,-94.95747910332102 29.504852114391142,-94.955724072517796 29.504559179260749,-94.952845264169682 29.504078672538427,-94.930551536860648 29.500357589179547,-94.927405495678158 29.499832478177321,-94.909464999999997 29.496837999999997,-94.913072085311995 29.488019044482122,-94.913385000000005 29.487254,-94.917178632618899 29.481741136316387,-94.925104227340569 29.470223752399235,-94.925293406029382 29.469948840084836,-94.925914000000006 29.469047,-94.930860999999993 29.450503999999999,-94.923011455799639 29.448810114938265,-94.920334997737442 29.448232551169699,-94.919400999999993 29.448030999999997,-94.916063708203708 29.446327523795176,-94.890799999999984 29.433432,-94.888257132054065 29.420136433311271,-94.887299999999996 29.415132,-94.887087039327696 29.40154064293051,-94.886938304445962 29.392048238229908,-94.886925408340758 29.391225196262944,-94.886904215833582 29.389872669858736,-94.886764190565785 29.380936121184895,-94.886591910643261 29.369941049100753,-94.886536208040312 29.366386054846032,-94.886982892003275 29.364738908620176,-94.888420210858001 29.359438798199445,-94.888544709543254 29.358979709544975,-94.888781730376067 29.358105695694917,-94.894234145274325 29.337999926591962,-94.894147383920654 29.327241695272729,-94.894002695197727 29.309300588032027,-94.893993580875261 29.308170430590454,-94.891329624021282 29.304475264201969,-94.888683946869179 29.30080545353194,-94.886599269217157 29.297913803549264,-94.886536208040312 29.297826331584119,-94.885816422022174 29.297499155955627,-94.884216982863776 29.296772137788121,-94.876917125093229 29.293454018939102,-94.875951551627523 29.293015121686942,-94.86617837453683 29.293883848703121,-94.865126326153927 29.293977364132552,-94.861112574100105 29.294855372432302,-94.849730461009372 29.297345209778594,-94.825607939204673 29.30577638202961,-94.824952733476934 29.30600538596191,-94.823862547308252 29.313200608971236,-94.822547126780194 29.321882377573708,-94.82230657170463 29.344254498409398,-94.810695999999993 29.353434999999998,-94.797913847039041 29.344567105809805,-94.79693012269928 29.343884625840758,-94.784895000000006 29.335535,-94.779995 29.334935000000002,-94.777063999999996 29.336811,-94.773074869484503 29.336485139838025,-94.745528999999991 29.334235,-94.744945 29.33641,-94.731319999999997 29.338066,-94.722529999999992 29.331445999999996,-94.731082 29.331833,-94.769694999999999 29.304936,-94.780304129101268 29.295750693651897,-94.786095000000003 29.290737,-94.793321795438203 29.286014946162535,-94.795651468635626 29.284492716516493,-94.803695000000005 29.279236999999998,-94.809348860129617 29.275904173901317,-94.81020919937113 29.275397022855465,-94.819018398045671 29.270204194137058,-94.82210781776098 29.268383049216432,-94.825036245866656 29.266656805306088,-94.825782574142963 29.266216861214712,-94.826962003659688 29.265521613475173,-94.833188167130103 29.261851427154124,-94.844390135018429 29.255248113651685,-94.870677905110114 29.23975205180561,-94.881596387366812 29.233315846843187,-94.896165027201874 29.224727954332334,-94.925556066041452 29.207402583865772,-94.927613957028456 29.206189502425392,-94.940693735267132 29.198479261054111,-94.968741214129224 29.181945889621023,-94.978383546115566 29.176261947153485,-94.981700088962569 29.174306918145966,-95.026218999999998 29.148064000000002,-95.076832914261459 29.114498139229923,-95.081772999999998 29.111222,-95.084611040272236 29.108948681405003,-95.100241410561338 29.096428488590096,-95.110484 29.088224,-95.116308293211759 29.081343778536318,-95.119264367911811 29.077851775668329,-95.119484217932538 29.077592067446851,-95.122403192505772 29.074143890856067,-95.122524999999996 29.074000000000002,-95.122638295373392 29.073709965581063,-95.125134000000003 29.067321,-95.183550616106302 29.028323983126334,-95.191390999999996 29.023089999999996,-95.192301227546167 29.02243038040822,-95.237672480263356 28.989550945676651,-95.238923999999997 28.988644,-95.240558404572027 28.987315672512366,-95.251568580535192 28.978367386619187,-95.251619678822578 28.978325857575001,-95.272266000000002 28.961545999999995,-95.29656403895315 28.934716691525271,-95.297146999999981 28.934073,-95.309703999999996 28.928262,-95.334686660244515 28.911063042846731,-95.353450999999993 28.898145,-95.376979000000006 28.876159999999999,-95.377903963555724 28.874482723635413,-95.38239 28.866347999999999,-95.416173999999998 28.859482,-95.436326577581042 28.85908617652915,-95.439594 28.859022000000003,-95.449516932572138 28.854239851149391,-95.480746000949352 28.839189657836059,-95.485144835951402 28.837069731735976,-95.486768999999995 28.836286999999995,-95.506945757563287 28.824808612805594,-95.536465934189138 28.808014833314715,-95.564052739104355 28.79232093268277,-95.564094788066555 28.792297011382839,-95.564132228771385 28.792275711681647,-95.568135999999981 28.789997999999997,-95.576201168007842 28.785870627961152,-95.606319447682353 28.770457515020929,-95.613122366343802 28.766976102576891,-95.695711236705606 28.724711019702028,-95.715243498124195 28.714715330888584,-95.812504000000004 28.664942,-95.854124934570734 28.646410960033691,-95.884026000000006 28.633098,-95.920915435374582 28.618912188118028,-95.97832748198536 28.596834417485056,-96.000681999999983 28.588238,-96.000998496292368 28.588108377001081,-96.024040703743012 28.578671299526803,-96.035336417502748 28.574045070633311,-96.05294532761279 28.566833233429691,-96.077867999999995 28.556625999999998,-96.194412 28.502223999999998,-96.220123346321373 28.492065891861738,-96.220376184174313 28.491966,-96.226882700448613 28.487451845000788,-96.241923733725443 28.477016528665938,-96.244750999999994 28.475055,-96.270391000000004 28.461929999999999,-96.303212000000002 28.441870999999999,-96.321560000000005 28.425148,-96.328817 28.423658999999997,-96.341616999999999 28.417333999999997,-96.371116999999998 28.397660999999999,-96.372100999999986 28.393874999999998,-96.370716999999985 28.387667,-96.378616389014681 28.383909329746462,-96.379349732835649 28.386024690464755,-96.381702691108558 28.392811896356477,-96.381863685354148 28.393276290946375,-96.375880899310658 28.401794149460329,-96.37413840285555 28.404274990018202,-96.340801887331921 28.432913073072363,-96.338559687910475 28.434839257985413,-96.335119195902806 28.437794848703732,-96.312964581561445 28.451131053409146,-96.280819757359396 28.470480970729877,-96.274497619264608 28.474286648703266,-96.268341347214189 28.477992481854848,-96.252027698910211 28.484249764669329,-96.250247000000002 28.484932771712327,-96.223824788704931 28.495067307260509,-96.218978121459415 28.500382701101032,-96.21505000939203 28.509679222336811,-96.145447855080619 28.544740658174199,-96.10473518795402 28.559498996555909,-96.046210731424992 28.586980036018211,-96.032979113622659 28.589015683181284,-96.007533711461477 28.59970275682273,-95.986159544454679 28.60631857558586,-95.982088289576367 28.614461085342473,-95.98565064745685 28.621076904105603,-95.983106103295938 28.641942154390655,-95.97852589224803 28.650593590730978,-95.986065974637228 28.655467849280154,-95.996337701374344 28.658736120211515,-96.002953500413568 28.656191585912577,-96.006515878017979 28.648049056432036,-96.010005951759737 28.648641710656278,-96.010506546843942 28.648726717396318,-96.011440067305529 28.648885239790378,-96.014343010193883 28.649378192516537,-96.026200716522851 28.65139176594381,-96.03348799089656 28.652629228032097,-96.039323368019012 28.651170385770797,-96.047737442142406 28.649066870151618,-96.049244844336243 28.648218956037223,-96.052682972641108 28.646285007998213,-96.05836686193534 28.643087818836001,-96.072165030584017 28.635326345489485,-96.092812363862251 28.627145317384699,-96.098878916233431 28.624741586366319,-96.099137163186526 28.624639261986079,-96.099760206508392 28.62447226081035,-96.102639895829256 28.623700385909448,-96.141413249033207 28.613307536255487,-96.148501276515404 28.611407654045699,-96.187178316202875 28.593595864643298,-96.198374286842139 28.586980055742131,-96.221784081288092 28.580364246840958,-96.228908787187095 28.580873158631725,-96.233997875508891 28.596649310733014,-96.233997875508891 28.601738394123839,-96.222292978285921 28.607336389305434,-96.214150448805384 28.613443281484855,-96.212623728226021 28.62260364440889,-96.2309444244882 28.64143324753087,-96.208552463485731 28.662298487953962,-96.214659365527126 28.665351929112688,-96.192267404524671 28.68774389011514,-96.1912495908051 28.694359708878277,-96.195829762405154 28.698939880478335,-96.202445561444364 28.700975507917487,-96.208747675276499 28.700187749031503,-96.21684000834783 28.699176214258408,-96.221467818495611 28.69859774191346,-96.222801895007663 28.698430983480506,-96.223384071149837 28.698294,-96.224163927167865 28.698110503315906,-96.227000018566372 28.697443183508955,-96.229623268039219 28.696825944469072,-96.231453341209956 28.69639533631743,-96.233964222112746 28.695240331316239,-96.23422531976 28.695120226420762,-96.234426397558138 28.695027730650764,-96.243315632596989 28.690938683290845,-96.256898753233088 28.684690448956413,-96.263514562134276 28.683672635236839,-96.268603640594122 28.688761723558645,-96.287942160437836 28.68316371851509,-96.304227224329892 28.671458831154069,-96.305245042980445 28.660262850652849,-96.303866760710434 28.646480081370939,-96.303718312539132 28.644995605411349,-96.322902111893882 28.641863561491792,-96.322903115546453 28.641863397630402,-96.328654788116609 28.640924350533034,-96.373438710121519 28.626674919011112,-96.376492171004159 28.620059100247982,-96.384634680760783 28.615987845369677,-96.473693647496702 28.573239550803915,-96.48794308888057 28.569677192923439,-96.482854000558774 28.580364266564878,-96.480309456397848 28.596649335387912,-96.485907441717487 28.60784531588914,-96.490487633041468 28.610898766909834,-96.510843966604781 28.614970031650095,-96.510335069606953 28.617514575811001,-96.497612348802434 28.625148188569788,-96.496594535082863 28.630746183751381,-96.49964797624159 28.635835272073191,-96.506263795004728 28.638379806372129,-96.513590449607946 28.639711925390898,-96.518002756430107 28.640514162994929,-96.524548246905439 28.641704252172264,-96.541744210187403 28.644830790950802,-96.545449731689985 28.645504522133091,-96.555118991611849 28.64601343885484,-96.5632615210924 28.64448670841351,-96.564664053901609 28.647882315216158,-96.572092291837293 28.665866475800886,-96.572930781014264 28.667896502859467,-96.570386236853366 28.674003385176928,-96.559190266214102 28.687235002979271,-96.559699163211917 28.6913062775815,-96.561225893653244 28.696395346179383,-96.566823878972883 28.697922096344637,-96.575158129308363 28.702846874961025,-96.578019859474111 28.704537895383844,-96.57828826199534 28.705826226653553,-96.579938546079447 28.713747585140421,-96.580564403635009 28.716751699466613,-96.584126761515478 28.722858581784067,-96.584439828543964 28.722940967911413,-96.591359183115401 28.724761852179114,-96.593796021437342 28.725403125944972,-96.611342043876562 28.720366765465901,-96.616906294097589 28.718769618875786,-96.625254999999996 28.716373230030175,-96.632357663078409 28.714334501780041,-96.638120426114043 28.71268037463507,-96.643733366943522 28.711069252030907,-96.64589364157122 28.710449172933409,-96.648758110223909 28.709626963981723,-96.65548660082564 28.704200766225345,-96.664534272187169 28.696904262901135,-96.657918463285995 28.687743919701024,-96.642136214348383 28.67476740345478,-96.635017595423747 28.668914316579048,-96.634564255386636 28.662567599984854,-96.634358790297441 28.659691108644115,-96.634304719917793 28.658934128568227,-96.633999771842213 28.654664885057134,-96.627892869800831 28.650084693733149,-96.626425176648581 28.649921620227584,-96.623312698200763 28.64957579673532,-96.621378075676532 28.648286046719594,-96.615940371111847 28.64466090565978,-96.615679075580019 28.64448670841351,-96.614055987266909 28.642701311583636,-96.613585709918453 28.642184006591457,-96.613038272810982 28.641581825879328,-96.612716570908134 28.641227953848528,-96.611999586497333 28.640439271135588,-96.610589997120172 28.638888723093881,-96.610589997120172 28.638695619081329,-96.610589997120172 28.63634418879494,-96.61975034032028 28.62769274259265,-96.620390401117646 28.626519297452973,-96.620672695530928 28.626001757543317,-96.621575870071126 28.624345937066781,-96.622336527533278 28.62295139797671,-96.622803791340985 28.622094747411062,-96.621924089240224 28.619379144726071,-96.621515564809087 28.618118047314677,-96.621338841511317 28.617572510068054,-96.620571817957583 28.61520474122884,-96.620437729127232 28.614790814755992,-96.617253050911174 28.604959849584038,-96.615239196090883 28.598743166058551,-96.614649885719274 28.596923990196654,-96.613008078443599 28.591855801497097,-96.611528402529856 28.587288105363601,-96.611113505533794 28.586007336117376,-96.611098903979951 28.585962261746474,-96.608298572876635 28.583628658523324,-96.608045443097311 28.583417717585569,-96.607377235577218 28.583437664220053,-96.600365219155734 28.58364697962633,-96.593251058093557 28.583859344147964,-96.573948594733835 28.584435541167107,-96.565297148531556 28.582399903865994,-96.564279334811971 28.57629300182461,-96.563658896232639 28.575155527088082,-96.562968608029692 28.573889994257026,-96.561225893653244 28.570695006643017,-96.557566061723506 28.569051817003789,-96.543745727976315 28.562846769979732,-96.536289388489891 28.559499026141786,-96.535271536438941 28.559346348925885,-96.526111211846271 28.557972305562419,-96.524846286909124 28.55686549700842,-96.523547686998668 28.555729222873186,-96.522039937244045 28.554409942750958,-96.516783301381025 28.541093122164042,-96.514406314623301 28.535071417976255,-96.512075206364955 28.532603188828926,-96.505754868421008 28.525911074776143,-96.496773944100411 28.520225902118948,-96.493684489370622 28.518270192113103,-96.482894459981281 28.511439806078794,-96.464303363514816 28.49967112954555,-96.450283853050735 28.49079639296917,-96.41974938229167 28.46738661824714,-96.410828816467941 28.459457253614527,-96.410588999643707 28.459244083835621,-96.409758652296418 28.458206146634446,-96.408886828651134 28.457116363910039,-96.40506625078595 28.452340627696451,-96.402446489887097 28.449065917053971,-96.402758256176753 28.447714917044181,-96.403973200604497 28.442450108152798,-96.407195206365273 28.441281062045864,-96.417343901660857 28.437598792799108,-96.461479843413926 28.421584870195201,-96.476120924474287 28.411702150055138,-96.481836236149007 28.407844318412668,-96.504737094149291 28.397666161492985,-96.511137484289378 28.396220910815867,-96.520513236388609 28.394103803612502,-96.534249520963641 28.388796609353736,-96.542905217114992 28.385452367272176,-96.559699173073881 28.377818734789468,-96.57038624671533 28.368658381727396,-96.577905378446388 28.364719789411506,-96.5917603939982 28.357462401226169,-96.600411840200493 28.354408960067438,-96.650793747525029 28.34677533744669,-96.672676831253582 28.335579347083499,-96.688452973492915 28.347284234444516,-96.694559875534281 28.347284234444516,-96.698122233414779 28.342704062844462,-96.705246949175717 28.348810964885843,-96.700157860853906 28.369676195446971,-96.705755865897487 28.400210705653887,-96.710336037497541 28.406826524417021,-96.710425531143088 28.406841439843959,-96.711757514930511 28.407063434453107,-96.711949596522956 28.407095447664108,-96.71209813364915 28.407120203551969,-96.7125191933293 28.40719037931537,-96.712878460543081 28.407250256459115,-96.722549831718325 28.408862132132249,-96.749013067323034 28.408862132132249,-96.762244685125353 28.411915593014903,-96.76554491144303 28.411090543097366,-96.768351577304784 28.410388882297497,-96.775985199925543 28.405808690973519,-96.777118787058129 28.404067826336821,-96.778115367638478 28.402537364460464,-96.780337941159374 28.399124129135416,-96.780820705165937 28.398382742114745,-96.790234641309425 28.383925636830853,-96.794392274787313 28.366371177405831,-96.794814812909479 28.364587126849088,-96.794810066932399 28.364444747076842,-96.79477772408616 28.363474458555832,-96.794305906049686 28.349319871745632,-96.794064195689629 28.347593374049037,-96.792754716842737 28.338239980125699,-96.790743538307225 28.323874459722486,-96.791161640090152 28.319066463411133,-96.791737095961722 28.312448960638157,-96.791761391474679 28.312169572361466,-96.791798306096766 28.312130020933203,-96.806010803272656 28.29690232711997,-96.809573161153153 28.290286508356836,-96.806010803272656 28.282143978876302,-96.799480493673911 28.2729662335258,-96.799349781293685 28.272782529381054,-96.787181219874626 28.255680743271615,-96.787181219874626 28.250082757951983,-96.800412817953031 28.224128419345121,-96.810027933605966 28.21709297064087,-96.81015126416365 28.217002728792142,-96.823379937963566 28.207323213817581,-96.836184503007971 28.197954022244446,-96.84100213695676 28.194428925121734,-96.842143298799229 28.193593928862132,-96.847274602334139 28.190686192954498,-96.857267971405633 28.185023289193378,-96.872677809006134 28.176291056181483,-96.877474270970822 28.171878306563691,-96.886067200578026 28.1639728030657,-96.898123211167331 28.152881261735526,-96.906497631141988 28.149042991548708,-96.910337015250093 28.147283276415891,-96.926704620510804 28.131597659113019,-96.934764623415617 28.123873491831901,-96.962356663895278 28.123371819605953,-96.962754569737697 28.123364584972112,-96.979717515560068 28.129783000626698,-96.995398793779131 28.135716460690723,-97.000413785843605 28.137614026355994,-97.007520616950742 28.136091128354632,-97.007538501604586 28.136087295914667,-97.009222611239821 28.135094102666635,-97.00939982996681 28.134989589017771,-97.027385928308092 28.12438239869169,-97.028912648887456 28.117257682930727,-97.025203084589847 28.111384210119862,-97.023365428929196 28.108474590635566,-97.022805746846075 28.107588427939849,-97.02290356380766 28.107197159145706,-97.023379876854563 28.105291902342927,-97.02382356056566 28.10351716319958,-97.025496807419856 28.101530180660298,-97.031966099908146 28.09384788848477,-97.033883146887263 28.088918342142531,-97.035528457788629 28.084687545284659,-97.035528457788629 28.083043098067591,-97.035528457788629 28.081818766572983,-97.035528457788629 28.074000471643224,-97.033022532693735 28.061470870449408,-97.032801767679686 28.060367047518316,-97.031459273912688 28.053654591691117,-97.031457183186404 28.053644138079921,-97.025859197866765 28.041939250718904,-97.030948266464648 28.033287814378582,-97.03239348781301 28.032603236465789,-97.040617526386512 28.028707642778524,-97.041168915404441 28.028259640036232,-97.046718327422383 28.023750751173218,-97.048760075590963 28.022091833877354,-97.050263648357429 28.019142519014494,-97.059727497080047 28.000578821719444,-97.061991693393324 27.99613751499442,-97.06790259446116 27.99219690579767,-97.073772658186698 27.988283521554418,-97.075732208193486 27.986977152070377,-97.083740513918784 27.975854507337193,-97.090858162154831 27.965968886660271,-97.094600599978094 27.960771057335059,-97.101378519421061 27.951357282114685,-97.101544336287489 27.951126980954953,-97.101629253046639 27.951009041034034,-97.112670327945679 27.935674217691009,-97.118292397880069 27.927865788706086,-97.121533983365822 27.923363587495643,-97.122089895488358 27.923104160785101,-97.123659587861624 27.92237163470331,-97.129167576400675 27.91980122961516,-97.134800331352182 27.902469771509406,-97.13578341488774 27.899444915775788,-97.139044920333077 27.897526377912126,-97.141761509630356 27.895928379836029,-97.144434841366106 27.894355827453982,-97.155121915007527 27.880615312653809,-97.156735458496229 27.877916799393841,-97.171211094589736 27.85370753808861,-97.17159000749372 27.853073838716419,-97.18273536107327 27.834434189625789,-97.184638591770963 27.831251199324921,-97.187183135931861 27.824126483563962,-97.18941247112663 27.823657146727278,-97.196852395853725 27.822090836400886,-97.201135366472329 27.822090836400886,-97.208766105658313 27.822090836400886,-97.209575096934316 27.822090836400886,-97.21103842611052 27.822356897891609,-97.21191517248603 27.822516307306422,-97.214117494684729 27.822916731993345,-97.215541825234411 27.823175702780983,-97.217387510601711 27.823511284007832,-97.220771087297493 27.824126483563962,-97.222189700736266 27.82464074101355,-97.223091414240102 27.824967618564596,-97.225175600069406 27.825723150734085,-97.225442194074731 27.826156365185522,-97.225555528799433 27.826340533769983,-97.225696025109201 27.826568839847944,-97.22598639723725 27.82704069367685,-97.227317456819009 27.829203661466853,-97.227317456819009 27.832884543697009,-97.227317456819009 27.832951908184537,-97.22711696094737 27.834288541284948,-97.22651425924083 27.838306534493725,-97.227537582741903 27.841230302974814,-97.228388390382094 27.843661171179477,-97.233100025453197 27.847817700825228,-97.234045759551762 27.848652012430087,-97.234511621821596 27.849062988727319,-97.238500481248579 27.854279199579018,-97.239439164419366 27.855506710708827,-97.241127420860792 27.857714434929608,-97.24139627838295 27.858969111470945,-97.242350826195675 27.863423696705052,-97.242654131578206 27.86483913096664,-97.243132066142749 27.865496290124597,-97.244364366034702 27.867190700237273,-97.250796680782656 27.876035121329831,-97.263010484865433 27.88010639593206,-97.267085449659064 27.88068852838779,-97.272090543185925 27.881403535150675,-97.273697558506882 27.881633106649463,-97.276628649874411 27.881144591421538,-97.283916343274228 27.879929975854907,-97.291452123510041 27.878674012482271,-97.291709327200167 27.878631145200583,-97.295071705789752 27.87807074876898,-97.29826066531912 27.876989746639367,-97.302276298241679 27.875628516526195,-97.30641171632756 27.874226681314273,-97.315889353880934 27.871013926092836,-97.325097299274915 27.867892591849294,-97.326845878314657 27.866807265961079,-97.334190606350404 27.862248465187459,-97.346213303335873 27.854786094892546,-97.354613966176373 27.849571885725148,-97.359768343966266 27.850509060182219,-97.360211961357962 27.850589719168646,-97.360654441244435 27.850290746360063,-97.363614400263117 27.848290774636723,-97.376904444631478 27.839311017562139,-97.379041564479934 27.837867018088055,-97.379057154646048 27.837837708581311,-97.379081675001302 27.837791610322164,-97.37968928125764 27.836649310776913,-97.391764280353456 27.813948316782309,-97.391812130016405 27.812975373996721,-97.391812459346511 27.812968677620422,-97.39203202611381 27.808504155006624,-97.392068018906713 27.807772301822137,-97.392095751995882 27.807208395884746,-97.393123788240075 27.786304999999999,-97.393168763213623 27.785390509210199,-97.393291005863816 27.782904909577571,-97.393142269808052 27.782564941361908,-97.39298939956177 27.782215523565412,-97.390949955785928 27.777553936582201,-97.390465068726371 27.776445623015572,-97.390185233729682 27.775805999999999,-97.389524844304646 27.774296538065283,-97.38835420640342 27.771620793596586,-97.388306220610531 27.771511111755789,-97.388011229692253 27.770836846624743,-97.38704242749894 27.768622441036733,-97.386166290102864 27.766619840754537,-97.385225495384532 27.765302728148875,-97.378862356737287 27.756394334042721,-97.375764970087644 27.752057992733249,-97.373069654276961 27.748284550598278,-97.368354500700462 27.741683335591173,-97.365855345900911 27.739779218033028,-97.354970329043653 27.731485873530172,-97.352272255056832 27.729430198526604,-97.34997871774064 27.727682741876539,-97.347507961666906 27.725800261438444,-97.346980343555629 27.725398266768138,-97.343485766084669 27.723942192633796,-97.323096068004702 27.715446484002907,-97.316445853072636 27.712675560756566,-97.312489136070184 27.711663774861414,-97.307771479065892 27.710457406346261,-97.30518751069485 27.709796650788128,-97.285725857752936 27.704820043684109,-97.259850586867117 27.698203387982087,-97.253955150197811 27.696695845323848,-97.254014647303208 27.696526337654994,-97.255455364792269 27.692421723465429,-97.259957004258851 27.67959652118169,-97.261636792970123 27.679316557300702,-97.26241778482418 27.679186392412099,-97.266063906300232 27.678578707462119,-97.266172011465457 27.678349884642419,-97.272736281666539 27.664455499360063,-97.273042341106247 27.663807672923248,-97.273584380560237 27.662660354976065,-97.276535709391737 27.656413369610792,-97.277059923980644 27.655303780997631,-97.278846463786479 27.651522268106756,-97.280071982275985 27.648928251476995,-97.280889132874719 27.647198614380269,-97.282300269490932 27.644211705671331,-97.282869528026779 27.64300677394548,-97.287959956150573 27.632232024058997,-97.288756326795195 27.630546371240786,-97.290370933329072 27.627128784125372,-97.290610159422798 27.626622421740255,-97.291264204229464 27.625238025568656,-97.291996439564016 27.623688125953898,-97.292910903535031 27.621752508687905,-97.293983233844585 27.619482740684056,-97.29528946695001 27.616717877953022,-97.296598377059297 27.613947348891728,-97.297587499071795 27.609496333379006,-97.298634024222366 27.60478700569162,-97.29761621050281 27.598680093788271,-97.294053852622326 27.594099922188217,-97.294182769084571 27.593971005725969,-97.300049926927869 27.588103847882682,-97.302196382102863 27.585957392707677,-97.311120578488044 27.579146819865922,-97.321534901946578 27.571199044464009,-97.325080504595888 27.561034984604785,-97.336802147188081 27.527432946040641,-97.343417965951204 27.517763686118776,-97.347489240553443 27.503005347737066,-97.350542661988243 27.478577729709574,-97.359194108190536 27.458221396146271,-97.365809926953673 27.450587783387487,-97.371916828995055 27.425142361502377,-97.369881181831957 27.412419660421783,-97.372934622990698 27.401223670058592,-97.379550422029908 27.390027689557368,-97.399397858595393 27.344734850830708,-97.401942402756291 27.335574497768633,-97.404995863638931 27.329976512448997,-97.413138393119482 27.321325066246711,-97.42026310888042 27.317253791644482,-97.430441285524054 27.313691423902039,-97.450797599363412 27.313691423902039,-97.482858840011673 27.297915271800758,-97.508304242172855 27.275014394076553,-97.532222933616623 27.278576761818989,-97.544436737699399 27.284174747138625,-97.546981281860297 27.290790556039799,-97.536803105216677 27.289263825598471,-97.526624948296998 27.291808369759369,-97.524589320857856 27.297915271800758,-97.51746460509689 27.305039987561717,-97.504741884292372 27.305039987561717,-97.498126085253162 27.308602345442196,-97.502706237129289 27.322342870104325,-97.499143898972747 27.327940855423961,-97.483876634007316 27.33862793892736,-97.483876634007316 27.351350640007954,-97.486930094889971 27.358984272490666,-97.501688443133645 27.366617904973374,-97.514411144214236 27.361528796927644,-97.520518046255617 27.352877370449281,-97.538329835658018 27.335574478044709,-97.570899973304094 27.315727061203152,-97.584131581244463 27.309620159161771,-97.609068086407831 27.285192570720163,-97.621790807212349 27.287228188297352,-97.63146005727225 27.286210384439741,-97.63654914066305 27.282139109837512,-97.636657939024673 27.281797172172649,-97.640111498543547 27.270943129336285,-97.639093679892994 27.253131339933887,-97.635022415152719 27.247024437892502,-97.628915513111338 27.242953173152234,-97.597363199046811 27.242444266292445,-97.5826048606651 27.240408628991332,-97.573953414462821 27.238881903480983,-97.56123071338223 27.232775006370584,-97.542910007258072 27.229212648490105,-97.520009129533875 27.231248285791217,-97.509830972614182 27.235319550531486,-97.503215153851045 27.23989972213154,-97.500161712692318 27.244479898662579,-97.485148876501881 27.25084127385778,-97.467082638600573 27.253640266517596,-97.45843119239828 27.259492710198106,-97.450288657986775 27.262546171080761,-97.424079880742951 27.264072891660124,-97.422298701802717 27.257711541119829,-97.434766954384401 27.202240525749552,-97.444945121166043 27.144733882940127,-97.443672849085587 27.116235010034327,-97.452324285425917 27.115217201245734,-97.455886653168363 27.110382571284802,-97.456650008527049 27.09969549764336,-97.46173908698691 27.095624227972113,-97.475479621510999 27.098423220631929,-97.480568699970846 27.102494490303176,-97.491510231973166 27.101222218222723,-97.495835955074313 27.09409750739275,-97.4932914109134 27.078066891999608,-97.477515248950155 27.066107546277717,-97.479041969529504 27.06279964182713,-97.482256963728076 27.061942305056665,-97.48693005051112 27.057710553505324,-97.487693415731783 27.053639288765055,-97.486675602012198 27.034809685643079,-97.477515248950141 27.032519589981089,-97.473952881207694 27.029211690461484,-97.473443984209865 27.022850330059228,-97.478300083716704 27.000269498406993,-97.478533072531675 26.999186101907302,-97.480568690108868 26.997659376396957,-97.483967678435022 27.000330000000002,-97.484131057851314 27.000458369056773,-97.492988547644813 27.000330000000002,-97.49889841702128 27.000244349959733,-97.533497176854453 26.999742920066073,-97.536803065768822 26.999695008767091,-97.549271318350492 26.995878197456715,-97.555378215460905 26.990280207206101,-97.551052502221722 26.980865400714134,-97.549525776711377 26.965343697111763,-97.552324769371197 26.95211208177491,-97.555378205598956 26.947277449348487,-97.555378205598956 26.938880461507075,-97.540874325578116 26.906310323861007,-97.540110950495503 26.900966796902246,-97.547999041339082 26.895114353221743,-97.552324764440229 26.888498544320569,-97.552324764440229 26.875332999999998,-97.552324764440229 26.873831771434514,-97.552324764440229 26.871753101924,-97.552324764440229 26.867633303897481,-97.555396527456509 26.865969429990074,-97.558431656619632 26.864325399446898,-97.558453748966258 26.864224239771101,-97.559853702000524 26.857813929560987,-97.562641307980527 26.845049630589628,-97.563266286580571 26.842187886943357,-97.552579212939136 26.827938454188693,-97.547744582978211 26.824630549738107,-97.537566416196555 26.824885004400745,-97.509830908511418 26.8035108521869,-97.48438549155729 26.763561555211936,-97.478024141017002 26.757200199740662,-97.471662790476714 26.758726925251008,-97.468609339456009 26.740915130917632,-97.467337057513589 26.710126182073765,-97.444945096511148 26.633535472850511,-97.445708451869848 26.609362327976836,-97.441206258760758 26.5999011976768,-97.435205432977895 26.587290766879221,-97.432741093635642 26.582112082834445,-97.429217375703914 26.574707168454967,-97.428151110966368 26.572466467229631,-97.418145193925739 26.555638334425574,-97.416955130465126 26.553636864107652,-97.41864075483771 26.543121778291471,-97.42039414733226 26.532183948458435,-97.422284917775215 26.520389141863415,-97.422298667285844 26.520303371102887,-97.425861015304378 26.516741008291426,-97.430695645265303 26.506562841509776,-97.430695645265303 26.494603495787885,-97.42802638225659 26.488322868889494,-97.42636993202612 26.484425333937217,-97.429168909893022 26.478063961207511,-97.43553026043331 26.470175880225888,-97.441382709044788 26.466613522345408,-97.441382709044788 26.455417541844177,-97.43756589773443 26.449819546662585,-97.425861005442428 26.446002740283195,-97.421026375481503 26.446766095641895,-97.417209564171131 26.449819546662585,-97.411611568989528 26.447275002501684,-97.412883841069984 26.433025580841726,-97.421789740702152 26.417249413947498,-97.419499649971158 26.413178149207234,-97.406013578738921 26.409106884466965,-97.398125502688274 26.410888063407203,-97.394308686446919 26.414450416356704,-97.395072051667569 26.417249413947498,-97.382484933201752 26.411326066613285,-97.377769169124974 26.409106884466965,-97.369626639644437 26.394602999515151,-97.374461259743413 26.38086247238753,-97.388965149626202 26.365849678110436,-97.392018610508856 26.339386444971247,-97.391000786927322 26.332261729210284,-97.38794734576858 26.330480545339064,-97.376242448545611 26.336332993950553,-97.372171183805335 26.339895346900054,-97.36937219114553 26.348546788171358,-97.358176200782339 26.356434874083959,-97.343417852538664 26.35923386920927,-97.342332537534404 26.358759043566288,-97.335275323058127 26.355671510096041,-97.335020017473738 26.355402767481841,-97.331108052904881 26.351284911668415,-97.330440693097202 26.350582427937965,-97.333762617526986 26.340749518544904,-97.336802038706509 26.331752819885011,-97.343786761143846 26.325987658774913,-97.344677525679145 26.325252425399061,-97.352414066956698 26.31886671611711,-97.352832659030639 26.318521211944631,-97.354359379610003 26.313941040344577,-97.348998828460125 26.312092573442666,-97.347821984790102 26.311686765063648,-97.346980205488165 26.311396496183672,-97.34736083223585 26.297503848546928,-97.347437236753805 26.2947151295396,-97.347489122209922 26.292821341560611,-97.347051378510429 26.289694600417153,-97.344137846000223 26.268883651035111,-97.343926764329439 26.267375924606483,-97.342629246748771 26.266550231912309,-97.341127771669619 26.265594748131736,-97.335282658907644 26.265594748131736,-97.331967408745584 26.265594748131736,-97.330307576264516 26.266747410222209,-97.323817586106017 26.271254350355399,-97.322807065545476 26.271956101137519,-97.313207351206557 26.273518846137112,-97.312102101648151 26.273698770576502,-97.311865543405119 26.273737280077761,-97.307030913444194 26.253126493084562,-97.308048727163751 26.249055213551365,-97.321280340035131 26.236078054109896,-97.321280340035131 26.228698889850026,-97.304486359421333 26.202490107675235,-97.296598288301666 26.200708923804015,-97.294817109361432 26.192311940893585,-97.296089381441874 26.182388227541828,-97.303096384204423 26.167373221160254,-97.305986772892751 26.161179530923267,-97.306776455083323 26.159487354748606,-97.300965235160419 26.149753561518516,-97.296881711355638 26.142913659244432,-97.296598288301666 26.14243892563589,-97.285549237329036 26.12861437636975,-97.28536038956149 26.128378090441405,-97.284582435540926 26.126454238998875,-97.282094393487881 26.120301403270393,-97.282839179410786 26.118439442973433,-97.28311220967295 26.117756868971455,-97.285501587752023 26.116923364107649,-97.294053737977038 26.113940052730097,-97.295071554162092 26.108342057548505,-97.292023254217796 26.105090538920617,-97.291924538345086 26.104985242032239,-97.291541272704407 26.104576425513905,-97.287190793518263 26.099935916255493,-97.286650074642992 26.099359149688052,-97.286603231473521 26.09930918366079,-97.283195451762182 26.095674220102872,-97.282639002190891 26.095080674133143,-97.282108002623801 26.094514274823585,-97.280435495761154 26.092730268223651,-97.279905974795895 26.09216544608875,-97.27980430522237 26.092056998587434,-97.27089841052117 26.086459003405839,-97.267086875013263 26.085485845069449,-97.24859983335169 26.080765747704277,-97.246979719077387 26.080352101364454,-97.229515030031649 26.08000965739204,-97.220290685310772 26.079828788368793,-97.208048240752987 26.079588741074772,-97.205005053278043 26.078666562185607,-97.199651252911579 26.077044196913871,-97.199152512570265 26.073220535461079,-97.199134106850465 26.073079425477676,-97.198725011196004 26.069943037351702,-97.198302051934135 26.066700361972018,-97.196018989165054 26.049196947106083,-97.195939794821285 26.0485897927724,-97.195071061587612 26.04192952989985,-97.204994779870347 26.030224637607851,-97.214918488291119 26.030733549398622,-97.224842206573854 26.027425644948035,-97.226114478654296 26.024372193927345,-97.219244211392265 25.99612778184791,-97.216954125592238 25.993837693582392,-97.208557137750816 25.991802058746771,-97.195834416946283 25.993074335758202,-97.174460269663413 26.000071824804216,-97.167208324722026 26.007069313850227,-97.162755377371425 26.014575709756024,-97.16262814819099 26.023481604457221,-97.172042954682937 26.044728528107019,-97.178658763584124 26.045491893327686,-97.182730028324386 26.053125515948434,-97.164981847348457 26.063876207878327,-97.152009000000007 26.062107999999998,-97.152012551274964 26.062039393270581,-97.15321 26.038906,-97.151921999999999 26.017652999999999,-97.14747181118706 25.985075937251509,-97.145567 25.971132,-97.146880999999993 25.969781,-97.146293999999997 25.955606,-97.147784999999985 25.953132,-97.156608000000006 25.949021999999999,-97.160293999999993 25.950243,-97.168198638692317 25.959262149012673,-97.178362000000007 25.962114,-97.187583000000004 25.958174,-97.206945000000005 25.960899,-97.214339285966162 25.960186817526893,-97.227626420907342 25.958907063854085,-97.229225999999997 25.958753000000002,-97.239867000000004 25.954974,-97.244841570811701 25.950784663302475,-97.248032999999992 25.948097,-97.255343503388133 25.949129556975723,-97.276707000000002 25.952147,-97.28138899999999 25.948036999999996,-97.277163000000002 25.935438,-97.284201820237172 25.935775045516863,-97.290083634347766 25.936056689174489,-97.293963761326751 25.936242484429805,-97.303601999999998 25.936703999999999,-97.316138101068788 25.931602038234757,-97.320560999999984 25.929801999999999,-97.324914000000007 25.924040999999999,-97.332235861490744 25.923541683060932,-97.33463605770983 25.923378000829199,-97.338346 25.923124999999999,-97.339310160867683 25.923294280152341,-97.350397999999998 25.925241,-97.367642000000004 25.915679999999998,-97.369283543255307 25.913688286645449,-97.373641276386991 25.908400972256459,-97.374430000000004 25.907443999999998,-97.372365000000002 25.905015999999996,-97.365976000000003 25.902446999999999,-97.365883578347024 25.900015396466173,-97.365521 25.890476,-97.364300486696564 25.885628504434479,-97.362421560218849 25.878165998501085,-97.360082000000006 25.868874000000002,-97.364783621478566 25.852096838905283,-97.36542 25.849826,-97.372864000000007 25.840116999999996,-97.394513000000003 25.837377,-97.422635999999997 25.840377999999998,-97.42853949246836 25.842912007889609,-97.434188204901034 25.845336654308195,-97.441181027463472 25.848338244915578,-97.445113000000006 25.850026,-97.445601387363794 25.851485440010176,-97.447179184935308 25.856200346812667,-97.448271000000005 25.859463000000002,-97.449172000000004 25.871677999999996,-97.452166849899044 25.875807172885114,-97.453724626189043 25.87795496921364,-97.454727000000005 25.879337,-97.45488774919265 25.879394304385261,-97.462586893331732 25.882138919861518,-97.468261999999982 25.884162,-97.468599721544905 25.884059457735212,-97.481532785459223 25.880132596436578,-97.486059999999995 25.878758,-97.490359999998347 25.879275544671589,-97.494739403174762 25.879802646248233,-97.496860999999996 25.880057999999998,-97.519591990380178 25.88590026892226,-97.521761999999995 25.886458,-97.52344767329889 25.891064017588189,-97.524375103029939 25.893598172727145,-97.528116959024402 25.903822606212749,-97.528119935206945 25.903830738482007,-97.52812430798204 25.903842686870224,-97.528627999999998 25.905218999999999,-97.528849446448064 25.906732522417784,-97.530321999999998 25.916796999999999,-97.530415259581318 25.916820899843632,-97.539878370214808 25.919246032588486,-97.542957 25.920034999999999,-97.545169999999999 25.923974999999999,-97.545468770003851 25.926387609575503,-97.545470694802859 25.92640315259677,-97.546397824784293 25.933889856891241,-97.546420999999995 25.934076999999998,-97.546611329705271 25.934141994258589,-97.555160182125618 25.937061277530951,-97.555378999999988 25.937135999999999,-97.555477252221124 25.937015705749829,-97.559364000000002 25.932257,-97.582565000000002 25.937856999999997,-97.580418999999992 25.945115999999995,-97.583044 25.955442999999999,-97.598043000000004 25.957556,-97.5981230356591 25.957681442330628,-97.607733999999994 25.972745,-97.60783562843973 25.973457509771446,-97.607844088251909 25.973516820913719,-97.608283 25.976593999999999,-97.609461531117333 25.977846566488182,-97.613191727531174 25.981811093986448,-97.613466053312663 25.982102652924251,-97.616041456343709 25.984839842874308,-97.624938181905222 25.994295461083137,-97.627225999999993 25.996727,-97.634804000000003 25.999508999999996,-97.635072411453706 25.99971613545971,-97.639164724998494 26.00287420951236,-97.642117661027001 26.005153015998879,-97.644011365977178 26.006614404624422,-97.643848619841975 26.01214811069886,-97.643707610985203 26.016942704231127,-97.649175518723894 26.021499311673544,-97.65096419129361 26.02118629315062,-97.659123404318109 26.019758427116106,-97.661326460130226 26.019372891335045,-97.66298585459532 26.019511685247039,-97.668297999999993 26.019955999999997,-97.669519566971061 26.021667429940447,-97.671350987084779 26.024233271429612,-97.671567999996611 26.024226704244594,-97.691453959129774 26.023624920821636,-97.697068999999999 26.023454999999998,-97.703247203861338 26.030308742132775,-97.706066818770353 26.031284762516545,-97.709294717923569 26.032402112038366,-97.711145328137576 26.033042707775564,-97.719920000000002 26.030837999999999,-97.723585926686539 26.030959832537771,-97.729354247932832 26.031151535557555,-97.735180242251758 26.031345155270547,-97.758837769919694 26.032131383932391,-97.76309059882324 26.033650253079866,-97.763351431657455 26.034258862745556,-97.76491324062286 26.037903081983409,-97.769788888528993 26.041344719068825,-97.770077387482857 26.041548365582649,-97.776788595669075 26.042443189872706,-97.779190602367677 26.042763456191249,-97.784050976575529 26.040637041739476,-97.789822674626535 26.0424596835391,-97.792252861730461 26.04428232533872,-97.793102878401371 26.047342389307317,-97.793537334820812 26.048906434437896,-97.794638769549053 26.052871604582215,-97.795290594138677 26.055218176136449,-97.801344 26.060016999999998,-97.803973303988229 26.059548218630308,-97.8082126910423 26.058792373859696,-97.819424117916668 26.056793476786609,-97.820997703829306 26.056512920501468,-97.825546000000003 26.055702,-97.826721102251625 26.055271667399982,-97.830409376527257 26.053920989485444,-97.836607999999984 26.051650999999996,-97.848759348822554 26.052295281844582,-97.85186756815483 26.052460084066457,-97.859824237628374 26.052881958029587,-97.860225497621784 26.05290323340671,-97.860503999999992 26.052917999999998,-97.861874999990562 26.053580848914272,-97.869705222636284 26.057366592615971,-97.871187000000006 26.058082999999996,-97.876982999999996 26.064482999999999,-97.886529999999993 26.066338999999999,-97.901546631929207 26.060958662441269,-97.905109129229899 26.05968224852101,-97.913882 26.056539,-97.935419999999993 26.052687999999996,-97.944344999999984 26.059620999999996,-97.950095000000005 26.061827999999998,-97.96210735288345 26.054793018383155,-97.96735799999999 26.051718,-97.971403108419892 26.054550391225565,-97.978769 26.059707999999997,-97.979877702655912 26.062937323324391,-97.981335 26.067181999999995,-98.010970999999998 26.063862999999998,-98.015122209308288 26.064471399070538,-98.026123959861238 26.06608380989196,-98.028288992822496 26.066401115993269,-98.028758999999994 26.066469999999999,-98.029241090705753 26.065867136858621,-98.033102 26.061039,-98.034402999999998 26.051375,-98.034479464439173 26.051215303797409,-98.034525269179767 26.051119640464091,-98.039238999999981 26.041274999999995,-98.054365285842039 26.044575736209502,-98.070020999999997 26.047992,-98.070022345126233 26.049160242153427,-98.070025 26.051466,-98.071425788568789 26.055027814897404,-98.076094939927231 26.066900165398668,-98.076139697069991 26.067013970337847,-98.076205751241318 26.067181927684643,-98.076543999999998 26.068041999999998,-98.076994427275579 26.068371469710563,-98.080289992888041 26.070782045417982,-98.080494999999999 26.070931999999999,-98.080906883185932 26.070920010911959,-98.084755 26.070808,-98.085506402845155 26.069709056167966,-98.085848999999982 26.069208,-98.085628527723046 26.069048386721494,-98.081567000000007 26.066108,-98.081855064865067 26.063941606819231,-98.081884000000002 26.063724,-98.082307152201508 26.063513440869801,-98.091037999999998 26.059169,-98.093593108176947 26.058759459973995,-98.094431999999998 26.058624999999996,-98.095078111969258 26.058956205325877,-98.096949561841043 26.059915534659098,-98.097643000000005 26.060270999999997,-98.105504999999994 26.067537000000002,-98.122952624574893 26.063250384797335,-98.12786358062813 26.062043837809401,-98.128331000000003 26.061928999999999,-98.142925292417388 26.051941751725515,-98.14645163947533 26.049528582072455,-98.146621999999994 26.049412,-98.146852932570667 26.049588146033326,-98.149462999999997 26.051579,-98.149462999999997 26.055813,-98.151730999999998 26.058187,-98.158277994458601 26.062311711597108,-98.16142849281799 26.064296576133319,-98.161911645017582 26.064600969774318,-98.167608590156348 26.068190136655492,-98.172071527808072 26.071001859012309,-98.177897000000002 26.074672,-98.179863281323136 26.072661506851002,-98.189059999999998 26.063257999999998,-98.191534000000004 26.057117999999999,-98.197046 26.056152999999998,-98.200871000000006 26.059161,-98.203328791159265 26.063523594334541,-98.204415309491765 26.065452171017675,-98.20496 26.066419,-98.205720285634712 26.066905180236589,-98.2057544964389 26.066927057036718,-98.220672999999991 26.076467,-98.228363119990576 26.077028417928002,-98.230097 26.077155,-98.231072909449267 26.07694353295701,-98.240214327563166 26.074962705064888,-98.248806000000002 26.073101,-98.250234708208026 26.074229377516481,-98.260964088277859 26.082703320039151,-98.264514000000005 26.085506999999996,-98.272091468517374 26.0934369782697,-98.272527821536428 26.09389363077193,-98.277218000000005 26.098801999999999,-98.277020629370639 26.099144109090908,-98.272932087266241 26.106230915405163,-98.272897999999998 26.10629,-98.272099931737145 26.106512924095771,-98.270258188934392 26.107027377392626,-98.270033999999995 26.107089999999999,-98.269661374787887 26.108231250649609,-98.268046405073434 26.113177467856264,-98.266755660647689 26.117130670341034,-98.265753950746401 26.120198637935399,-98.265698 26.12037,-98.266046753689267 26.120369439652073,-98.268388964369507 26.120365676386069,-98.271048543344023 26.120361403199535,-98.2713587738927 26.120360904747326,-98.279433560913844 26.12034793086255,-98.289509742149562 26.120331741306838,-98.296194999999997 26.120321,-98.299522999999979 26.11749,-98.299575546893735 26.117376878214852,-98.299577897643644 26.117371817572689,-98.299619756950364 26.117281703787395,-98.301477861619162 26.113281617347607,-98.302978999999993 26.110049999999998,-98.307788398559808 26.112633359128559,-98.31093219000293 26.114322040617914,-98.314784784069062 26.116391454064445,-98.31781148535309 26.118017240801439,-98.323055746360907 26.120834185452331,-98.323827999999992 26.121248999999995,-98.324165904650499 26.121735183484471,-98.335204000000004 26.137616999999999,-98.337914801547555 26.149187638321976,-98.338210450252006 26.150449569219312,-98.338419999999999 26.151344000000002,-98.338123748811455 26.151776768193923,-98.337139471603692 26.153214615149455,-98.336278203634194 26.154472768358826,-98.335109254490916 26.156180386856505,-98.334230366689056 26.157464279382136,-98.333315999999996 26.158799999999999,-98.333279392301918 26.159609030127591,-98.333194378655719 26.161487831708563,-98.333156000000002 26.162336,-98.33332593363771 26.162525092143447,-98.336569396995017 26.166134227137082,-98.336837000000003 26.166432,-98.337709251548077 26.166391430160555,-98.345513373134324 26.166028447761192,-98.345781000000002 26.166015999999999,-98.345955918391979 26.165759937155421,-98.34781294946896 26.163041431373035,-98.354645000000005 26.15304,-98.380009845764519 26.156864235849298,-98.386243919298991 26.157804141722139,-98.386694000000006 26.157872,-98.386714843024777 26.157901012682096,-98.387178289965661 26.158546112849205,-98.389418830831929 26.161664858836595,-98.394322667090904 26.168490808715738,-98.402249554153599 26.179524728065878,-98.404432999999997 26.182563999999999,-98.41082579547016 26.183537375155975,-98.418120000000002 26.184647999999999,-98.44253599999999 26.199151,-98.444302622216625 26.201317032456906,-98.444376000000005 26.201407,-98.444366742625562 26.201566115583965,-98.444174812576264 26.204865005795593,-98.443681770155465 26.213339409994948,-98.45054565332704 26.219516919037407,-98.450975699346984 26.219903961344286,-98.465077324681431 26.222335272645303,-98.467962758220992 26.221802674698019,-98.47639547470331 26.220246150374404,-98.481645999999998 26.219277000000002,-98.483269000000007 26.216439,-98.496684404575589 26.212853148677059,-98.500574513964963 26.213825676024403,-98.503492081872309 26.214798198660183,-98.504399410834864 26.216045775617395,-98.509275818143593 26.222750833698164,-98.509327236533252 26.222821533963195,-98.516621175147847 26.223550930651591,-98.520846190978133 26.222726536052498,-98.524733007990875 26.221968131567948,-98.526589565145571 26.221605875956907,-98.528323413163747 26.222421776495104,-98.535240999999999 26.225677,-98.538016739096946 26.231331135295655,-98.538505426714039 26.231595841236214,-98.543851889046309 26.23449184328507,-98.556093449912439 26.231976454911809,-98.561600478976516 26.23084487397777,-98.564343479612191 26.231667774301364,-98.575891642961039 26.235132223865481,-98.57618836327309 26.235221239973473,-98.581780384919284 26.243001439905978,-98.583095590242166 26.247416774401941,-98.585184223567666 26.254428618568909,-98.588002268837087 26.255070784392117,-98.599153999999999 26.257611999999998,-98.610401443364651 26.253223367217647,-98.613465000000005 26.252027999999999,-98.617434734670965 26.252082931217494,-98.618976176235122 26.252104260920568,-98.625299999997523 26.252191766854153,-98.626653663614832 26.252210498179227,-98.633391522135483 26.243617562727948,-98.63418 26.242612,-98.636673745354344 26.241784277127035,-98.654221000000007 26.235959999999999,-98.669397000000004 26.236319999999996,-98.675206000000003 26.239989,-98.678410535728389 26.244637915883345,-98.679041999999995 26.245553999999998,-98.678977427258005 26.246060764449961,-98.677766000000005 26.255568,-98.679196310064967 26.258571609080832,-98.681167000000002 26.262709999999998,-98.687156000000002 26.26512,-98.698855915315121 26.265619481498664,-98.707451416076225 26.272152066874316,-98.710601999999994 26.279018,-98.709170532219119 26.284185773270103,-98.710647239525585 26.288123668959596,-98.711233447604599 26.289686894290245,-98.722550749196131 26.295571625529284,-98.729196000000002 26.299026999999999,-98.73263614407044 26.29899082409209,-98.734613221934339 26.298970033513189,-98.745271658069271 26.303095890935232,-98.745297595683382 26.304159357241051,-98.745599830797417 26.316551278053844,-98.745615470637418 26.317192526042046,-98.748245116157776 26.32061106368975,-98.74905366960931 26.321662182706675,-98.754840366886953 26.324877004144408,-98.755242435754027 26.32510037501579,-98.766685638772316 26.325769085950686,-98.779858354339893 26.326538865087553,-98.779911999999996 26.326541999999996,-98.779946859358333 26.326559704051515,-98.789821999999987 26.331575,-98.796251999999996 26.349104,-98.797592059971961 26.356670995104565,-98.798210999999995 26.360166,-98.807348000000005 26.369420999999999,-98.808280016253249 26.369491024329768,-98.813413043374013 26.369876679389535,-98.81818280466733 26.370235041528161,-98.81932575812273 26.370320914010964,-98.824571000000006 26.370715,-98.828353477559162 26.367368473620303,-98.832909 26.363337999999999,-98.838554497099707 26.360957856802237,-98.842229804437778 26.359408346173527,-98.844057000000006 26.358637999999999,-98.847707 26.359594999999999,-98.853132332741467 26.364754198689674,-98.853414999999998 26.365023,-98.853852117327648 26.365076242531281,-98.854321671505204 26.365133435992636,-98.861354000000006 26.365989999999996,-98.861661690067152 26.365902494757481,-98.869113443480302 26.363783259984523,-98.874117355796216 26.362360176799562,-98.876164212939671 26.361778062685843,-98.882912762903771 26.359858814831277,-98.890964919192157 26.357568829017531,-98.895015448091129 26.359360408468842,-98.900432100164338 26.361756234493352,-98.900829697862818 26.361932094951143,-98.905559653818443 26.364024190108832,-98.91296803413384 26.372226331500926,-98.915344992389564 26.37485796579432,-98.921277034399395 26.381425588572444,-98.922831447878195 26.38166472803821,-98.923508557916591 26.381768898347495,-98.924925720775448 26.381986922427696,-98.926689551972586 26.38116380140492,-98.934437533628781 26.377548077521784,-98.937555770591459 26.376092900630621,-98.942046463189357 26.375531566775365,-98.950185820407469 26.380302920861933,-98.952073083609605 26.383491745197549,-98.952938578460817 26.384954133189183,-98.953327659277917 26.385611545667039,-98.958325183064531 26.394055638388448,-98.960041959595969 26.394835991082342,-98.96758721887106 26.398265653180793,-98.981979903868819 26.396488780147621,-98.98323657723455 26.396333635432413,-98.985344372930967 26.396073413984297,-98.99032130527651 26.395458978465552,-99.008003378826189 26.395458978465552,-99.014739404125635 26.398826987036053,-99.018845438188137 26.404005475794783,-99.021934999999999 26.407902,-99.025336792347318 26.409271761295809,-99.030462148109507 26.411335530401477,-99.031104888479149 26.411594335405351,-99.032315999999994 26.412082000000002,-99.033086386506682 26.412180127570064,-99.037216923343138 26.412706252494743,-99.039107 26.412946999999999,-99.039645291109963 26.412681959983438,-99.045466000000005 26.409815999999999,-99.053184999999999 26.402006,-99.062093000000004 26.397371,-99.082001999999989 26.396509999999996,-99.085125999999988 26.398782,-99.089412999999979 26.408099999999997,-99.092044248326658 26.410330707587079,-99.0977332288968 26.415153685331873,-99.099649490160544 26.416778244479925,-99.110855 26.426278,-99.113807999999992 26.434002,-99.110485406379198 26.436329519428725,-99.103082999999998 26.441514999999999,-99.097481906444941 26.458865277747179,-99.094712087984234 26.467445230774196,-99.091634999999997 26.476977000000002,-99.105030999999997 26.500335,-99.114051328117867 26.510193091438737,-99.123438026388797 26.520451579672599,-99.126618350727256 26.523927276756307,-99.127319211298612 26.524693229780183,-99.127781999999996 26.525199,-99.128040494672888 26.525242991472329,-99.131554903978838 26.52584108518932,-99.136510932879688 26.526684518463242,-99.143658999999985 26.527901,-99.157083944984777 26.532657279516766,-99.166741999999985 26.536078999999997,-99.170704 26.540316,-99.171403999999995 26.549848,-99.167459686682065 26.559874693319248,-99.167410000000004 26.560001,-99.168618869529794 26.566870928153797,-99.16946034016965 26.571652951934592,-99.178064000000006 26.620546999999998,-99.200522000000007 26.656442999999999,-99.209947999999997 26.693937999999999,-99.208906999999982 26.724761,-99.240022999999979 26.745850999999998,-99.242444000000006 26.788262,-99.243132825912184 26.78921716914337,-99.262208 26.815667999999999,-99.268613000000002 26.843212999999999,-99.274832961326339 26.850997131057774,-99.280470999999991 26.858053000000002,-99.295146000000003 26.86544,-99.316753000000006 26.865831,-99.328801222539823 26.879647723469141,-99.328900000000004 26.879760999999998,-99.328852280051947 26.879943529980665,-99.328653604395157 26.88070346927794,-99.326247644284351 26.88990632616278,-99.321819000000005 26.906846000000002,-99.324684000000005 26.915973,-99.337297000000007 26.922758999999999,-99.361143999999996 26.928920999999999,-99.367053999999996 26.929033999999998,-99.379148999999998 26.934489999999997,-99.388253000000006 26.944216999999998,-99.393748000000002 26.960730000000002,-99.390189000000007 26.966348,-99.377312000000003 26.973818999999999,-99.376593 26.977716999999998,-99.378434999999996 26.980034,-99.385448615007036 26.981891053234623,-99.387366999999998 26.982399,-99.403694000000002 26.997355999999996,-99.407320999999996 27.005808999999999,-99.415475999999998 27.017239999999997,-99.420446999999996 27.016567999999999,-99.429379999999981 27.010833000000002,-99.432154999999995 27.010698999999995,-99.438721 27.01463,-99.445682828533535 27.022104842939122,-99.446523999999997 27.023008,-99.446589518313687 27.0234513503828,-99.446929167151652 27.025749691622671,-99.446969999999979 27.026026000000002,-99.446787747918748 27.026353589968604,-99.444062000000002 27.031253,-99.443973 27.036457999999996,-99.447729715193731 27.048260380671568,-99.452315999999996 27.062668999999996,-99.450282 27.067705,-99.439210578806851 27.075275465844946,-99.434470000000005 27.078517000000002,-99.429209 27.090981999999997,-99.430274999999995 27.094871999999999,-99.437646 27.100442,-99.442122999999995 27.106839,-99.441108999999997 27.110041999999996,-99.433369999999982 27.119218,-99.430581000000004 27.126611999999998,-99.431354999999996 27.13758,-99.438264999999987 27.144791999999995,-99.439971 27.151071999999996,-99.437950999999998 27.154121,-99.42998399999999 27.159148999999999,-99.426616441133064 27.174998569551711,-99.42634799999999 27.176261999999998,-99.426389092127664 27.176475083747437,-99.428025433058153 27.184960350328335,-99.432794999999999 27.209693,-99.441928000000004 27.217984999999995,-99.442101400955139 27.218265584747954,-99.445237999999989 27.223341,-99.443121431464945 27.230753685991843,-99.441406999999998 27.236757999999998,-99.441548999999995 27.249919999999999,-99.452207395848959 27.263806782859465,-99.452390999999992 27.264046,-99.452635348600225 27.264144272092288,-99.454218033886534 27.264780796280988,-99.462735864984637 27.268206496624611,-99.463308999999981 27.268436999999995,-99.463731957038988 27.268231398925973,-99.480688 27.259988999999997,-99.487909999999999 27.260721,-99.492407 27.264118,-99.496069429210138 27.270723950024919,-99.496615000000006 27.271707999999997,-99.496412995851571 27.272119287725655,-99.490870463706145 27.283404082904614,-99.487572835142558 27.290118173493504,-99.487513000000007 27.29024,-99.487552182270463 27.290674424182523,-99.487937000000002 27.294941,-99.493651777311726 27.30231355132117,-99.494603999999995 27.303542,-99.494999311050705 27.30367917804087,-99.501697839297435 27.306003653868146,-99.502036000000004 27.306121,-99.50260564894451 27.305998370990778,-99.511531000000005 27.304076999999999,-99.522353224815092 27.304131436852781,-99.523657999999983 27.304137999999995,-99.527521386758664 27.305370598210363,-99.529216737576675 27.305911493159478,-99.529653999999994 27.306051,-99.533911450776046 27.310119063512179,-99.536090758332008 27.312201427353024,-99.536443000000006 27.312538,-99.537771000000006 27.316072999999996,-99.53137599999998 27.323809,-99.52136037329538 27.324774325824137,-99.521259999999998 27.324784,-99.520793197388144 27.325167862222077,-99.515101491997058 27.329848278790703,-99.509737777509301 27.334258981108004,-99.504836999999995 27.338289,-99.507830999999996 27.348637,-99.507785758525344 27.353517859091919,-99.507778999999999 27.354247,-99.505884699626023 27.358359262089539,-99.503847413823948 27.362781925614613,-99.502763417847504 27.36513512979511,-99.502013099315448 27.366763966750881,-99.499076000000002 27.373139999999999,-99.492143999999996 27.380516999999998,-99.488110785984318 27.408328989964531,-99.487887470616073 27.409868914391197,-99.487633320470721 27.411621467383494,-99.487521 27.412396,-99.487591555014376 27.412624523015491,-99.489856740583164 27.419961308946796,-99.495313182879073 27.437634363915539,-99.495699000000002 27.438884000000002,-99.495681276107845 27.439260342274874,-99.495103999999998 27.451518,-99.489866073767956 27.458841813736395,-99.48498035355378 27.465673163249864,-99.484933241276849 27.465739036942171,-99.483818999999997 27.467296999999995,-99.483170086267094 27.470026063960816,-99.480813109028745 27.479938539705284,-99.480418999999998 27.481595999999996,-99.480219000000005 27.485795999999997,-99.483519 27.491095999999999,-99.494943552274876 27.498766770813134,-99.497518999999997 27.500495999999998,-99.501722168778215 27.500229993495459,-99.502529258718056 27.500178915086504,-99.513319999999993 27.499496,-99.516119999999361 27.498282666666942,-99.519319999999979 27.496896,-99.525819999999982 27.496696,-99.528319999999994 27.498895999999998,-99.525855930815595 27.516294999999385,-99.525849791073696 27.516338353233991,-99.525316190784537 27.520106149807926,-99.523876376642917 27.530272798702207,-99.522431296340699 27.540476632400054,-99.521918999999997 27.544094,-99.518818999999993 27.553194,-99.514319 27.556994,-99.511118999999994 27.564493999999996,-99.512219000000002 27.568093999999995,-99.515978000000004 27.572130999999999,-99.51621006287597 27.572263354504685,-99.516956092136581 27.572688844074506,-99.522907946893667 27.576083418863931,-99.530137999999994 27.580207,-99.536560517954015 27.595669560441458,-99.539721999999998 27.603280999999999,-99.549741780062789 27.610632655019803,-99.554405160028892 27.614054243170667,-99.554950000000005 27.614453999999999,-99.555217670042637 27.614437037021997,-99.556811999999994 27.614335999999998,-99.559466999999998 27.609075999999998,-99.562869000000006 27.607264,-99.580005999999997 27.602250999999995,-99.584175941853502 27.603675176957196,-99.584843000000006 27.603902999999999,-99.584876722760043 27.604178863233781,-99.585148000000004 27.606397999999999,-99.578360965974085 27.610254799100861,-99.578159999999983 27.610368999999999,-99.578158133228257 27.610639131051315,-99.578098999999995 27.619195999999999,-99.584782000000004 27.622006999999996,-99.591372000000007 27.627464,-99.592626330929548 27.632690692534315,-99.594037999999998 27.638573,-99.596231000000003 27.639857999999997,-99.603532999999999 27.641991999999998,-99.612907806834755 27.638651258855042,-99.615318942915422 27.637792043123689,-99.624515000000002 27.634515,-99.625321999999997 27.631136999999999,-99.638929000000005 27.626757999999999,-99.654323999999988 27.629615999999999,-99.665948 27.635967999999998,-99.665422000000007 27.640274999999999,-99.660175716081199 27.644678795569117,-99.659499999999994 27.645246,-99.659300532255756 27.646059100049566,-99.658294999999995 27.650158,-99.661845 27.655753,-99.668942 27.659973999999998,-99.672015651285406 27.660163655087903,-99.685812999999982 27.661014999999999,-99.699355999999995 27.655417,-99.704600999999997 27.654953999999996,-99.711511000000002 27.658365,-99.721518999999986 27.666154999999996,-99.723715999999996 27.673328,-99.727277746539684 27.678262316066267,-99.732288643517421 27.685204233237535,-99.732448000000005 27.685424999999999,-99.732610774853441 27.685596448480599,-99.757538999999994 27.711853,-99.758533999999997 27.717071,-99.770740000000004 27.732133999999999,-99.774900999999986 27.73354,-99.785365999999996 27.730354999999999,-99.788844999999981 27.730718,-99.796341999999981 27.735586,-99.801651000000007 27.741771,-99.805670000000006 27.758687999999999,-99.813085999999998 27.773952,-99.817390803736785 27.775433523363962,-99.819091999999998 27.776019000000002,-99.822192999999999 27.766855,-99.825793000000004 27.764373999999997,-99.835127 27.762881,-99.841707999999997 27.766463999999999,-99.843346625073153 27.773142384459568,-99.844736999999981 27.778808999999999,-99.849281022020321 27.790032142335203,-99.850876999999997 27.793973999999999,-99.857944055165163 27.794214491272228,-99.870065999999994 27.794626999999998,-99.877441689362087 27.799278597548025,-99.877677000000006 27.799427,-99.877679299916537 27.799779028327777,-99.877693551047656 27.801960325692491,-99.877840000000006 27.824375999999997,-99.876677795668783 27.832975173255242,-99.876002999999997 27.837968,-99.877201999999997 27.842179000000002,-99.882014999999996 27.850391999999996,-99.89364999999998 27.856193,-99.901486000000006 27.864162,-99.904385000000005 27.875283999999997,-99.901231999999993 27.884405999999995,-99.894091000000003 27.892949999999999,-99.893456 27.899208000000002,-99.895827999999995 27.904177999999998,-99.900080000000003 27.912141999999999,-99.905861237749605 27.914081496997749,-99.917461000000003 27.917973,-99.925935042520848 27.927688375003317,-99.93714199999998 27.940536999999999,-99.938541 27.954059,-99.932160999999979 27.96771,-99.931811999999994 27.980967,-99.962768999999994 27.983536,-99.984922999999995 27.990729000000002,-99.991446999999994 27.99456,-99.998749958954292 28.00705628754028,-100.000278657311796 28.009672084008166,-100.008630999999994 28.023963999999999,-100.012838999999985 28.037203000000002,-100.014975394500183 28.048814882934586,-100.016570970484992 28.057487270710915,-100.017914000000005 28.064786999999999,-100.028724999999994 28.073118,-100.046108000000004 28.079067999999999,-100.053122999999985 28.08473,-100.056983000000002 28.094207,-100.05559599999998 28.101140999999998,-100.056492999999989 28.104185999999995,-100.064147158981442 28.110644603904401,-100.067651999999995 28.113602,-100.075474 28.124881999999999,-100.083393 28.144034999999999,-100.090288999999984 28.148312999999998,-100.119627999999992 28.155588000000002,-100.12658652988236 28.159659080291213,-100.141098 28.168149,-100.159890345070792 28.168159605160877,-100.160589999999999 28.16816,-100.1644540887186 28.169825181963088,-100.168437999999995 28.171541999999999,-100.173949604741296 28.178834844700365,-100.174413 28.179448,-100.17569869464343 28.180169771489844,-100.185693999999998 28.185780999999999,-100.195825662217615 28.189941498404405,-100.196499000000003 28.190218000000002,-100.19841872968675 28.190245400986015,-100.202449991411854 28.190302940621361,-100.208059000000006 28.190382999999997,-100.21208061434919 28.196473071951928,-100.212104999999994 28.196509999999996,-100.212111438897693 28.196576571978802,-100.212136678181992 28.196837521783539,-100.213449999999995 28.210415999999999,-100.217564999999993 28.226934,-100.220284000000007 28.232209999999995,-100.22363 28.235223999999995,-100.227575000000002 28.235856999999999,-100.246200000000002 28.234092,-100.251633999999996 28.236177,-100.261135590980771 28.244561246718906,-100.267604000000006 28.250268999999999,-100.280518 28.267969,-100.289383999999998 28.273491,-100.293468000000004 28.278475,-100.294296000000003 28.284381,-100.287553999999986 28.301093000000002,-100.286470999999992 28.312295999999996,-100.288638999999989 28.316977999999995,-100.314198000000005 28.345859,-100.317245999999997 28.357382,-100.320392999999996 28.362116999999998,-100.341869000000003 28.384952999999996,-100.344399999999979 28.389662,-100.34934096344108 28.4019924953441,-100.349585999999988 28.402603999999997,-100.349394820211828 28.402858691740477,-100.345766407828719 28.407692501181913,-100.343945000000005 28.410119000000002,-100.337058999999996 28.427150999999995,-100.336185999999998 28.430180999999997,-100.337474638078888 28.440402915586755,-100.337648113426326 28.441778981052359,-100.337796999999995 28.442959999999999,-100.338752462381066 28.444650728533539,-100.341532999999998 28.449570999999995,-100.350785999999999 28.459246,-100.353875644654778 28.461269551534915,-100.357498000000007 28.463642,-100.35795880406117 28.464220845064407,-100.358193534884933 28.464515705266944,-100.367961112704847 28.47678537623738,-100.368288000000007 28.477195999999999,-100.368051363629903 28.477598261305609,-100.365982000000002 28.481116,-100.356642877924983 28.482149981508559,-100.352234999999979 28.482638,-100.344180999999992 28.486249,-100.337140000000005 28.491728999999999,-100.33381399999999 28.499251999999998,-100.338517999999993 28.501833,-100.362147999999991 28.508399,-100.379079000000004 28.511638999999999,-100.388859999999994 28.515747999999995,-100.405057999999983 28.535779999999999,-100.411413999999994 28.551898999999999,-100.40430324537553 28.563833042228197,-100.397270000000006 28.575637,-100.396799999999999 28.580400999999998,-100.398385000000005 28.584883999999999,-100.403243426032972 28.586668145075244,-100.425819035320046 28.594958517689108,-100.429856 28.596440999999995,-100.431892715674053 28.597943579291371,-100.447320000000005 28.609324999999998,-100.448648000000006 28.616773999999999,-100.447280739633683 28.625703494601449,-100.445528999999993 28.637143999999996,-100.44560646842767 28.637394606891831,-100.447014715516048 28.641950223113035,-100.447091 28.642196999999999,-100.447325484276334 28.642184618041064,-100.447599559425257 28.642170145483281,-100.456522261830528 28.641698981546444,-100.462866000000005 28.641363999999999,-100.474494000000007 28.647071,-100.479445543783555 28.654922981332383,-100.479495071011698 28.655001519842354,-100.479635999999999 28.655225000000002,-100.481416494659797 28.655591917738484,-100.492493911747701 28.657874710783531,-100.493322226012125 28.658045406716248,-100.495863 28.658568999999996,-100.496129521434568 28.658770241190073,-100.500353999999987 28.661960000000004,-100.502122125123847 28.667202406240314,-100.505211969634487 28.676363647108229,-100.509438609439442 28.688895431533517,-100.510054999999994 28.690722999999995,-100.510127443340068 28.69126843161186,-100.510538898440004 28.694366309458967,-100.51077198772829 28.696121257064849,-100.511998000000006 28.705352,-100.511351260759739 28.706743032691019,-100.510646631791559 28.708258576930099,-100.509872363628347 28.709923903942272,-100.509406561254394 28.710925770365975,-100.508636802312012 28.712581398765199,-100.507069450532313 28.715952521820881,-100.506701000000007 28.716745000000003,-100.506745928327234 28.717920131927187,-100.506786973330165 28.718993692782757,-100.507152057645129 28.728542729239727,-100.507513721430456 28.738002299344281,-100.507590113222051 28.740000380261673,-100.507613000000006 28.740599,-100.507694735304739 28.740708529390524,-100.51442566685138 28.749728313832868,-100.519226000000003 28.756160999999999,-100.533017 28.763279999999998,-100.537772000000004 28.780775999999996,-100.534846642084489 28.786410367511117,-100.532431000000003 28.791062999999998,-100.535830000000004 28.805887999999999,-100.546431879116881 28.824270186264151,-100.546968759195195 28.825201061771438,-100.547323999999989 28.825817,-100.548186025546428 28.826178082695296,-100.553129999999982 28.828249,-100.561442999999997 28.829174000000002,-100.570509999999999 28.826317,-100.574698999999995 28.828786999999998,-100.576846000000003 28.836168000000004,-100.572991999999999 28.848463999999996,-100.580501999999996 28.856007999999999,-100.591040000000007 28.863054000000002,-100.598061272695219 28.874286065303028,-100.598877000000002 28.875590999999996,-100.602654 28.887660000000004,-100.602394435759351 28.893839359355621,-100.602053999999995 28.901944,-100.615584686670886 28.902906942475386,-100.627205999999987 28.903734,-100.631611000000007 28.902838999999997,-100.633502414453218 28.905240591668694,-100.640568000000002 28.914211999999999,-100.639169999999979 28.916288999999999,-100.638857000000002 28.927621999999996,-100.651511999999997 28.943431999999998,-100.64789859018552 28.954344193790252,-100.646992999999995 28.957078999999997,-100.646600907687997 28.967547400926616,-100.64647463428885 28.970918751315974,-100.645893999999998 28.986421,-100.647406325643686 28.99295674936236,-100.647835962928511 28.994813493392339,-100.648681241069511 28.998466493719445,-100.65094599999999 29.008254000000004,-100.653757999999996 29.015356,-100.656109999999998 29.017223999999999,-100.660207999999997 29.031497000000002,-100.663212 29.048041999999995,-100.662508000000003 29.058106999999996,-100.664064999999994 29.073205999999999,-100.666359117032755 29.07896154562156,-100.668483863047285 29.084292168447689,-100.674655999999999 29.099777000000003,-100.684472 29.110657,-100.692326999999992 29.115227999999995,-100.70996599999998 29.119684000000003,-100.727461999999989 29.129122999999996,-100.737795000000006 29.139078999999999,-100.739115999999996 29.141658,-100.737590999999995 29.147406999999998,-100.739681000000004 29.150486000000004,-100.746139999999997 29.154149000000004,-100.752330696165359 29.155516457617566,-100.759726 29.157149999999998,-100.76337082361762 29.160348915845475,-100.772648999999987 29.168492,-100.775904999999995 29.173344,-100.772154104961558 29.17809434863841,-100.766030999999998 29.185848999999997,-100.767059000000003 29.195287,-100.768348510582513 29.197581465531123,-100.775064591152173 29.209531592641572,-100.785521000000003 29.228136999999997,-100.791371999999996 29.225944999999999,-100.795681000000002 29.227729999999998,-100.79704599999998 29.235585999999998,-100.795234211471239 29.241421249558652,-100.795010188783237 29.242142762180318,-100.794911999999997 29.242459,-100.795310930062826 29.24310735172228,-100.797670999999994 29.246943000000002,-100.805332448258866 29.251327106905226,-100.815767091023289 29.257298117587734,-100.823532999999998 29.261742000000002,-100.834039999999987 29.261399999999998,-100.839016 29.263259,-100.841581161127962 29.265429071012271,-100.848663999999999 29.271420999999997,-100.856469000000004 29.275663999999999,-100.864659000000003 29.276076,-100.874739696506666 29.279181633366278,-100.876048999999995 29.279585,-100.876625364221198 29.280115401513385,-100.878513170701353 29.281852663087207,-100.878882999999988 29.282193000000003,-100.879105716359817 29.283377353454046,-100.880504361011205 29.290815018226784,-100.882051999999987 29.299044999999996,-100.886842 29.307848,-100.895590728097048 29.309871687341737,-100.904835000000006 29.31201,-100.906461302333199 29.313095095005444,-100.914770068080642 29.318638836799305,-100.916744062319239 29.319955917421627,-100.92203960930695 29.323489191321695,-100.922232587658954 29.323617949573855,-100.924041970395777 29.324825198761538,-100.926468967605715 29.326444530233299,-100.926628772437255 29.326551154580446,-100.926677999999981 29.326584,-100.92692137104487 29.32669794102517,-100.927819078352698 29.327118228044156,-100.92782883100196 29.32712279402223,-100.930446231588661 29.328348203997709,-100.940614999999994 29.333109,-100.941560773525751 29.336361493535293,-100.943196 29.341985,-100.945807189162338 29.344363370184055,-100.948971999999998 29.347245999999998,-100.95603875001359 29.347290187325033,-100.964324999999988 29.347342,-100.971743000000004 29.351370999999997,-100.972915999999998 29.354545000000005,-100.995606999999993 29.363403000000005,-101.004206999999994 29.364771999999999,-101.010614000000004 29.368669,-101.010768998319776 29.36895846820963,-101.014103165002794 29.375185214807839,-101.024016000000003 29.393697999999997,-101.036603999999997 29.406107999999996,-101.038600000000002 29.410713999999999,-101.037642000000005 29.414681000000002,-101.043363999999997 29.42988,-101.056956999999983 29.440773,-101.06011415724447 29.458454662113137,-101.060150999999991 29.458660999999999,-101.063843258270609 29.460131584976065,-101.087148999999997 29.469414,-101.103699000000006 29.470549999999999,-101.115253999999993 29.468458999999996,-101.130037999999985 29.47842,-101.137502999999995 29.473541999999998,-101.144336999999993 29.473246,-101.151876999999999 29.477004999999998,-101.163854997623304 29.493316894569897,-101.168923969306405 29.50021992913986,-101.171662999999995 29.503950000000003,-101.173821000000004 29.514566000000002,-101.192719999999994 29.520285,-101.227418999999998 29.522349999999996,-101.235274999999987 29.524854,-101.254895000000005 29.520341999999996,-101.260836999999981 29.529933,-101.261174999999994 29.536777,-101.252755240314642 29.553001111955531,-101.244355179006547 29.569187266927752,-101.24384013276574 29.574337712700849,-101.242022713082847 29.59251185083151,-101.251352546644355 29.604174135250076,-101.252152766968493 29.604494220898598,-101.259127443101093 29.607284069726152,-101.265347312053251 29.607284069726152,-101.274677145614746 29.602619152945408,-101.277624046978673 29.599940160672645,-101.283229510623855 29.594844301688571,-101.297224215766221 29.587069435365102,-101.30733154801338 29.587846934050759,-101.312894947857018 29.594028488101586,-101.314328915651188 29.595621785307589,-101.313192213312618 29.602947206633093,-101.31110792457288 29.616379301091623,-101.30733154801338 29.640715970810437,-101.311218981175116 29.64849082206727,-101.316661381574889 29.655488204771718,-101.325213716450733 29.657820655628775,-101.350093282659174 29.654710721152696,-101.353062961800887 29.655502634567405,-101.361755552011104 29.657820655628775,-101.364595571422868 29.66106639883844,-101.367197952410862 29.664040554714198,-101.371300910394638 29.676075888592084,-101.372874548462477 29.680691889931673,-101.378860251896057 29.698249939417508,-101.396947999999995 29.713947,-101.398362000000006 29.717000000000002,-101.396293999999997 29.727055,-101.397008999999997 29.733962999999999,-101.400635999999992 29.738078999999999,-101.410024000000007 29.741498,-101.415583999999996 29.746534,-101.415509877418046 29.750619769974676,-101.415402087456428 29.756561346443686,-101.424731921017937 29.758116313681725,-101.430388403484372 29.756500180308258,-101.441059122217254 29.75345141196761,-101.446501522617027 29.755006409338922,-101.451652003139955 29.758440048234313,-101.453498905321467 29.759671311053037,-101.455223999999987 29.771874,-101.467493655663716 29.779885945414083,-101.475268506920557 29.780663444099741,-101.503223000000006 29.764581999999997,-101.522695143280473 29.759671311053037,-101.526552276219391 29.761451532447605,-101.532802460460985 29.764336242900427,-101.53746737724174 29.782995910023434,-101.53804719015173 29.783865628452077,-101.546797210803248 29.796990645299058,-101.56156944476453 29.794658179375361,-101.572592853930203 29.778735448896484,-101.575564187573463 29.774443514881042,-101.582561562744587 29.771333610538232,-101.598573641854728 29.773657690388074,-101.603680999999995 29.774398999999999,-101.607256216824311 29.773863608191139,-101.625957999999997 29.771063000000002,-101.630319 29.768729,-101.632632680380155 29.763891873249722,-101.63512799999998 29.758675,-101.646417999999997 29.754303999999998,-101.652400999999983 29.758794999999996,-101.65328091488901 29.761368862201802,-101.654578 29.765162999999998,-101.662452999999985 29.77128,-101.689992000000004 29.771212999999996,-101.706636000000003 29.762736999999998,-101.714223999999987 29.767659999999999,-101.735201999999987 29.771591999999998,-101.754322999999999 29.777661999999999,-101.760919284561496 29.782457957985276,-101.763273999999981 29.784169999999996,-101.776796131253491 29.789191504347542,-101.777161000000007 29.789327,-101.777360180704861 29.789301830227139,-101.785668 29.788251999999996,-101.791002820423358 29.783037559970925,-101.796869557069002 29.782618516634159,-101.806507764952315 29.786389987871868,-101.809441149516488 29.790161459109573,-101.813855730843954 29.79253854440006,-101.814888826583982 29.793094827432377,-101.818909248247508 29.792167038125061,-101.830044431332681 29.789597381341238,-101.831231874027822 29.789323356194672,-101.852603555202364 29.801894932400803,-101.862241763085706 29.800218726571018,-101.866487373818487 29.79821962567333,-101.875399999999985 29.794022999999999,-101.878152615094365 29.794637055896249,-101.892739000000006 29.797891,-101.912406000000004 29.797849999999997,-101.917556726002999 29.792675767854249,-101.917942403066036 29.792482929945557,-101.922585359733716 29.790161459109573,-101.929709258872364 29.789323356194672,-101.932572380438657 29.791613852338052,-101.938090312383324 29.796028195755184,-101.946471365894325 29.797704401584976,-101.952535620779244 29.796990962273608,-101.953595265032959 29.796866298670082,-101.959462001678588 29.799380623656123,-101.965427194081556 29.806464275410743,-101.966166845299441 29.8073426094683,-101.970357372054934 29.81027599403247,-101.974547898810414 29.81027599403247,-101.982165144097308 29.804870201524977,-101.987538526473998 29.801056829485908,-101.993568005272067 29.802652866652032,-102.001318622543394 29.804704498914084,-102.001786318660763 29.804828300723614,-102.021918999999997 29.802490999999996,-102.032489182844799 29.803756293694118,-102.034758999999994 29.804027999999999,-102.039012999999997 29.802655,-102.041088000000002 29.799609999999998,-102.038411999999994 29.792831999999997,-102.039226999999997 29.790977000000002,-102.041308736499772 29.78984019520162,-102.048982832584102 29.785649487466547,-102.050044 29.785069999999997,-102.053123037129694 29.785312127485501,-102.073645999999982 29.786926,-102.076299925656656 29.790865308882584,-102.077348 29.792421,-102.084438999999989 29.794962000000002,-102.091420021879856 29.792967151942147,-102.091815999999994 29.792853999999995,-102.098789196918744 29.792718427915432,-102.115682000000007 29.792389999999997,-102.142325999999997 29.802854,-102.159600999999995 29.814355999999997,-102.161673999999991 29.819486999999999,-102.181894 29.846033999999996,-102.182859740836193 29.846584944255238,-102.18326563789924 29.846816503951921,-102.184058205433814 29.847268654791659,-102.186149999999998 29.848461999999998,-102.187393471220204 29.848699156882201,-102.188384798592551 29.848888224473839,-102.188671999999997 29.848942999999998,-102.189026115519184 29.848805138880103,-102.189342793483831 29.848681852617602,-102.205381000000003 29.842438,-102.216284162639099 29.842976962035557,-102.227553 29.843533999999995,-102.261388999999994 29.853283,-102.264041000000006 29.855964,-102.261776999999995 29.864001999999999,-102.264954000000003 29.867805999999998,-102.268816999999984 29.867990999999996,-102.276754999999994 29.862977999999998,-102.281249000000003 29.863116999999999,-102.297330999999986 29.875194,-102.301381000000006 29.877673999999995,-102.315388999999996 29.879919999999998,-102.320618999999994 29.878979999999995,-102.320667125014978 29.878900015386019,-102.320698585434869 29.878847727619664,-102.324634000000003 29.872306999999996,-102.333383999999995 29.868046,-102.341032999999996 29.869305000000004,-102.349861000000004 29.862316999999997,-102.361383773688715 29.849029038788231,-102.364542 29.845386999999995,-102.363642671554629 29.839963091609825,-102.362514000000004 29.833155999999995,-102.369522000000003 29.820395,-102.377253999999994 29.800163,-102.377312999999987 29.789971,-102.385270832882995 29.770348713937391,-102.386677616883858 29.766879890389689,-102.391739211722737 29.765814289574276,-102.392906191083 29.765568609270456,-102.402175111261812 29.766775086101941,-102.412062000000006 29.768061999999997,-102.433301 29.776608,-102.460890018677347 29.77909171043791,-102.468946430597143 29.779816991558327,-102.469957868267898 29.780012383523857,-102.481595292961757 29.782260529257879,-102.490330613701886 29.783948039559665,-102.492674483475767 29.783853017496881,-102.508312776666344 29.783219030534834,-102.508509848222559 29.783087649355906,-102.512686811979108 29.780303003853621,-102.512942156326147 29.774953626291172,-102.513380999999995 29.76576,-102.526400256170959 29.758693706517125,-102.535832205630967 29.753574449155192,-102.539417050278132 29.751628749336795,-102.545492105079163 29.750899740311965,-102.551081152293932 29.752357753652575,-102.556670813570321 29.757783010503054,-102.559343229460382 29.760376824671383,-102.565661280990938 29.761591836573395,-102.572255912443325 29.757095496286663,-102.57574472309652 29.754716761401177,-102.57635337725236 29.754301769870359,-102.585948674897452 29.751239442391949,-102.587774480184081 29.750656738873374,-102.597160000000002 29.751608,-102.612879000000007 29.748181999999996,-102.622534000000002 29.736632,-102.630150999999984 29.734314999999999,-102.64566499999998 29.733910000000002,-102.661251958261417 29.736122779697027,-102.66726872436665 29.739732837494621,-102.670971460158171 29.741954477821469,-102.677191937153026 29.738261067251376,-102.678467215476147 29.736427653943998,-102.6852530581628 29.72667193704833,-102.688163999999986 29.722486999999997,-102.690237999999979 29.707481999999999,-102.695507594622001 29.699754690880447,-102.698346999999984 29.695590999999997,-102.699316999999994 29.685029,-102.693466 29.676507,-102.697798916570122 29.672550546488289,-102.711337549653422 29.6601882100483,-102.724231000000003 29.648415000000004,-102.736947999999984 29.641537999999997,-102.742030999999997 29.632142000000002,-102.74048425929719 29.62775763619268,-102.738427999999999 29.621928999999998,-102.739991000000003 29.599041,-102.746201999999997 29.592875000000003,-102.757065999999995 29.597798999999998,-102.761810999999994 29.598396999999999,-102.768340999999992 29.594733999999999,-102.766929734823805 29.591197739636346,-102.762241000000003 29.579448999999997,-102.766124000000005 29.572347999999998,-102.768792219428661 29.572598581791439,-102.773961 29.573084,-102.776343296957975 29.562015327831393,-102.777530999999996 29.556497,-102.77572499999998 29.552188999999995,-102.771428999999998 29.548545999999998,-102.79216136048494 29.533953841063816,-102.807296321997939 29.523301326891541,-102.808565712504773 29.522407885546979,-102.808691999999979 29.522319000000003,-102.808681334358837 29.522097795383676,-102.808577631171161 29.519946998869006,-102.807327 29.494009000000002,-102.813953999999995 29.482805999999997,-102.814096473430837 29.482483316434472,-102.814383778328263 29.481832608662831,-102.822314986984821 29.463869465126457,-102.82537225240516 29.456945161410285,-102.827007089548758 29.453242470491304,-102.830969999999979 29.444267,-102.832538999999997 29.433109000000002,-102.830570753051859 29.427471931628293,-102.827354999999983 29.418261999999995,-102.825211066354328 29.40389180477127,-102.824564449740322 29.399557712155943,-102.831802092379931 29.389471209449322,-102.832669213065941 29.388262775214326,-102.84047188579207 29.377388836904565,-102.840778422425643 29.376961642203423,-102.841560439245441 29.370344567434586,-102.842457529677418 29.362753791491347,-102.843015380341285 29.358033509958585,-102.843020777220957 29.357987843989019,-102.861629999999991 29.351638999999995,-102.871857000000006 29.352092999999996,-102.876866000000007 29.354058999999996,-102.879534000000007 29.353326999999997,-102.883721999999992 29.348058999999999,-102.881857488401977 29.34363024944906,-102.879805000000005 29.338754999999999,-102.890489000000002 29.309498999999995,-102.88922161316745 29.299205074185686,-102.888328 29.291947,-102.891022000000007 29.287113000000002,-102.902604999999994 29.279440999999998,-102.90311226801488 29.27677066200776,-102.906295999999998 29.260010999999995,-102.903188999999983 29.254028999999999,-102.887901999999997 29.245611999999998,-102.881135 29.246022,-102.871347 29.241624999999999,-102.870795537867835 29.239589944231255,-102.86823682221636 29.230147538772215,-102.866845999999995 29.225014999999999,-102.878020000000006 29.214697999999999,-102.890063999999995 29.208813999999997,-102.899231 29.208863,-102.908656596973657 29.219194069767902,-102.908787000000004 29.219336999999996,-102.909098471667448 29.219296482603067,-102.910575587951939 29.219104333804097,-102.912131000000002 29.218902,-102.912650757516516 29.218481184275788,-102.915803535402844 29.215928573746115,-102.915865999999994 29.215877999999996,-102.915845750043147 29.215583596781208,-102.915608148145267 29.212129230727648,-102.915554 29.211341999999998,-102.915202931298523 29.21076702044931,-102.914525807203304 29.209658028088604,-102.912447999999998 29.206254999999999,-102.91453363655873 29.20019781620671,-102.917367531146525 29.191967513425833,-102.917805 29.190697,-102.922897000000006 29.192704085059273,-102.925481999999988 29.193722999999995,-102.932612000000006 29.194113000000005,-102.944911000000005 29.188819999999996,-102.947155999999993 29.180776999999999,-102.95089 29.176834999999997,-102.953474999999997 29.176307999999995,-102.977266 29.186226,-102.981742305424802 29.185103060319207,-102.989431999999994 29.183174,-102.98978258837333 29.182935350109393,-102.991725524817895 29.181612768970929,-102.994653 29.17962,-102.994906329461855 29.17910907354543,-102.99809599999999 29.172675999999996,-102.995688 29.161218999999999,-103.00243399999998 29.150260999999997,-103.0050672680876 29.149386797638936,-103.008362000000005 29.148292999999995,-103.010324999999995 29.137821999999996,-103.015028 29.125769999999996,-103.016945338084582 29.124525732477775,-103.024896087692937 29.119366048020158,-103.032982999999987 29.114118,-103.033302941039096 29.107355634443419,-103.034095953658579 29.105913798143234,-103.035682683422891 29.103028844591982,-103.04044215980575 29.099351067768175,-103.049126083320303 29.097714968852063,-103.055369601981923 29.096538655622457,-103.061557539334615 29.093936906572154,-103.06671291432167 29.091769303506382,-103.074407490743866 29.088534080562461,-103.076354546596249 29.085721668416742,-103.076667707631657 29.079576983004682,-103.076847 29.076059,-103.091926967746744 29.064237268591206,-103.100265999999991 29.057699999999997,-103.101359249603803 29.049403674773888,-103.102531654124817 29.040506667933872,-103.100975335951205 29.030701853789079,-103.100368259199087 29.026877266486249,-103.101607999999999 29.018122999999999,-103.107810999999998 29.013812,-103.117237999999986 29.000208999999998,-103.113922000000002 28.988546999999997,-103.115062910480361 28.985887850893185,-103.115327999999991 28.98527,-103.115773294260094 28.985147329619764,-103.126748000000006 28.982123999999995,-103.134930999999995 28.983525,-103.143274000000005 28.978073999999999,-103.156645999999995 28.972830999999999,-103.163865 28.972099,-103.165923000000006 28.974001999999999,-103.166234999999986 28.978836000000005,-103.174329720990258 28.980505274886987,-103.182663652045193 28.982223879127538,-103.194928465619142 28.984753100989199,-103.195705106971403 28.984913258196226,-103.207825367468075 28.987412670652219,-103.227338454203803 28.991436614861634,-103.227579101883322 28.991486240676846,-103.227800999999999 28.991532000000003,-103.228011662384262 28.991347921912006,-103.228737472224623 28.990713704806197,-103.239108999999985 28.981650999999996,-103.245121150470112 28.980239630911282,-103.2474464632202 28.980649978816817,-103.249155161185584 28.980951512720708,-103.25190330878641 28.984768118238364,-103.253285000000005 28.986686999999996,-103.26030800838916 28.989731411362609,-103.266003072061508 28.990206003834011,-103.270357000000004 28.988113999999996,-103.270725571428585 28.987466542857135,-103.27232562100086 28.984655789108508,-103.273357000000004 28.982844,-103.273647076585334 28.982817854078331,-103.281189929980513 28.982137982403092,-103.282424051550748 28.983865752282551,-103.284749352823042 28.987121173462914,-103.285935817906974 28.994002716014545,-103.289257951411443 28.999697788883793,-103.296614077237592 29.004443676810233,-103.302399476821606 29.006455988366771,-103.312987409437454 29.010138745081029,-103.315449022736544 29.011725838031147,-103.323993942362023 29.017235063099889,-103.331021803791103 29.021766184756,-103.332920159881368 29.026986669752301,-103.332783823258595 29.028827200289001,-103.332445567409962 29.033393619832523,-103.334818511373186 29.039800579109659,-103.341462759988346 29.041224342728523,-103.347869719265475 29.037427630547988,-103.350815999999995 29.028566999999999,-103.355428000000003 29.021529,-103.355590463621823 29.021464336016578,-103.361777791205157 29.019001647792766,-103.361998 29.018913999999999,-103.382125000000002 29.024248999999998,-103.386095607142025 29.025822707722725,-103.399799910010643 29.031254261761571,-103.402689272115182 29.032399429564627,-103.427474921518822 29.04222295692054,-103.427754276336316 29.042333676218103,-103.430481680804888 29.047455485683194,-103.434668000000002 29.055316999999995,-103.439550459717495 29.058547821156772,-103.449722032594721 29.065278554178825,-103.453029264571228 29.067467015663059,-103.457386392383299 29.068596640465525,-103.460381908910477 29.067681344107211,-103.463195887793432 29.066821517562918,-103.469166763983068 29.069242141692889,-103.471264639062966 29.073115142802621,-103.471299587628792 29.074897490538035,-103.471426016715213 29.08134526859719,-103.474814887995407 29.086670637304994,-103.484429000000006 29.094524,-103.49531945696836 29.1087608679228,-103.500928937954981 29.116094025764934,-103.503236 29.119109999999996,-103.506163032831353 29.119368513261239,-103.513192088151087 29.119989313955617,-103.524613000000002 29.120998,-103.524225442342612 29.124905426308125,-103.523383999999993 29.133389,-103.525026999999994 29.137353999999998,-103.539240927934515 29.144791265038371,-103.551909954693073 29.151420179312847,-103.558678999999984 29.154961999999998,-103.579462000000007 29.149964999999998,-103.592359999999999 29.150259999999999,-103.598960126757959 29.155019048637598,-103.606437999999997 29.160411,-103.607894091053709 29.162314354517299,-103.610539999999986 29.165772999999998,-103.624537921955991 29.163185608071569,-103.629433693714475 29.1622806680118,-103.638195234739996 29.160661174732635,-103.645634999999999 29.159286000000002,-103.653180000000006 29.162863999999995,-103.656807999999984 29.169098999999999,-103.660202999999996 29.170933999999999,-103.667724667668963 29.172878689431396,-103.669696386484915 29.173388467437,-103.688670000000002 29.178293999999998,-103.688830238367032 29.178273608722382,-103.690116124218548 29.178109972160996,-103.697314000000006 29.177194,-103.699305464408098 29.178139630948273,-103.713769999999997 29.185008,-103.724743000000004 29.191469999999999,-103.73193762439729 29.198544108660482,-103.742175000000003 29.20861,-103.750912464183997 29.219357091602017,-103.755265634411842 29.22471149629115,-103.75594348727293 29.225545256136954,-103.768569999999997 29.227360999999995,-103.777623396259372 29.232265264832392,-103.780085146052983 29.242351446713872,-103.780352362214714 29.243446273985068,-103.781659908552058 29.248803500057083,-103.789034484601103 29.257501704713096,-103.792700821322356 29.259284649416337,-103.795120675584712 29.260461427946989,-103.80876361213285 29.267096007175422,-103.816641821688407 29.27092719156084,-103.818617217853202 29.271599921312173,-103.838302999999982 29.278303999999999,-103.854966933859771 29.281484400071786,-103.856892999999999 29.281852,-103.880606 29.284961999999997,-103.896615144488038 29.284634799403065,-103.910231251371073 29.284356508561018,-103.916269383748329 29.284233099060927,-103.91710599999999 29.284215999999997,-103.91776286712728 29.284516760669142,-103.918698764585329 29.284945281345607,-103.918909999999997 29.285042,-103.918905327188597 29.285488562070029,-103.918900778480648 29.285923264066316,-103.918857000000003 29.290106999999995,-103.924975999999987 29.293913000000003,-103.943697999999983 29.294945999999996,-103.965795999999983 29.298586999999998,-103.975234999999998 29.296016999999999,-103.983459597310627 29.299165977024781,-103.998789342279238 29.305035323921498,-104.012357062242771 29.310230038851625,-104.018558084893087 29.312604243583909,-104.038281999999995 29.320155999999997,-104.047006656168747 29.325575022319434,-104.055595999999994 29.330909999999996,-104.056467149578211 29.334496091467582,-104.057243999999997 29.337694000000003,-104.068917843404819 29.342306667996301,-104.075923999999986 29.345075,-104.082149999999999 29.345922999999996,-104.091021999999995 29.353691999999995,-104.093326000000005 29.359926000000002,-104.098377999999983 29.366755999999999,-104.106466999999981 29.373127,-104.122882935723638 29.379859019095424,-104.125474999999994 29.380922000000002,-104.132831527553293 29.381873417846823,-104.136236243923818 29.382313748953422,-104.143691999999987 29.383277999999997,-104.1467332019064 29.385415391432094,-104.148888696362661 29.386930297552944,-104.151718842950046 29.388919356896473,-104.157422367906094 29.392927859373117,-104.166562999999996 29.399352,-104.180069999999986 29.412763999999999,-104.181273000000004 29.426265,-104.182051945448123 29.427144615030393,-104.195989999999995 29.442884000000003,-104.208194000000006 29.448201,-104.212529153241931 29.452438774515159,-104.213947876032222 29.456222068892099,-104.21370324326665 29.462011765001886,-104.213238514637069 29.473010445135856,-104.218538498245692 29.476600759818915,-104.220568643482977 29.477976020723915,-104.227547514371139 29.480496161448666,-104.229081071868791 29.481049944541308,-104.233824999999996 29.486544999999996,-104.233486999999997 29.492733999999995,-104.235847000000007 29.496744,-104.238313284768751 29.498023301020304,-104.246870092866089 29.50246185307569,-104.254473621536903 29.506405923975272,-104.260293266516271 29.50942466611497,-104.26168489846043 29.511073814728768,-104.264155000000002 29.514001,-104.271046277211582 29.51559593462645,-104.274575430964404 29.516412730896519,-104.293481117436073 29.520788310787555,-104.306646311930564 29.523835296697214,-104.308812834933008 29.524336722260216,-104.311570786550874 29.52540915148019,-104.318073989469781 29.527937921306467,-104.320711000000003 29.526326414398167,-104.326090351466348 29.523039031981277,-104.327483437129615 29.522187701603762,-104.334811000000002 29.519462999999998,-104.338113000000007 29.519967,-104.353150868059984 29.530471948300562,-104.369085650105362 29.541603450512167,-104.37074044290263 29.542759433043344,-104.371174999999994 29.543062999999997,-104.371454921502831 29.543072731712495,-104.371996954766473 29.543091575966443,-104.375901661123379 29.543227326450971,-104.381040999999996 29.543405999999997,-104.394588999999982 29.556087000000002,-104.394583075653415 29.556197720561212,-104.394577025204526 29.556310797858156,-104.394552364240909 29.55677168847231,-104.394503136758885 29.55769170460702,-104.394351 29.560534999999998,-104.39571704642303 29.563607040276512,-104.39636925661604 29.56507376640522,-104.397848504811165 29.56840038104859,-104.399550133070164 29.572227096202102,-104.399591 29.572319,-104.399981791506633 29.572551361916329,-104.452301000000006 29.60366,-104.466520000000003 29.609296,-104.483502 29.627740999999997,-104.486693164979016 29.629712817604439,-104.493658999999994 29.634016999999997,-104.503232654335022 29.63787621670291,-104.507568060311556 29.63962385355849,-104.51068846437596 29.64315687341222,-104.513969549435132 29.646871821353749,-104.51818442992635 29.651644041921735,-104.53325150001281 29.668703453669117,-104.535568725458901 29.671327089370656,-104.539761023554547 29.676073741438437,-104.540155514025756 29.678572204873163,-104.540559188867974 29.681128836544634,-104.537934834631798 29.684482179324355,-104.535770155740693 29.687248158943191,-104.536302269386866 29.690440851131939,-104.537991394981006 29.693268523024599,-104.544269904764263 29.703779029587054,-104.545505621253113 29.70584767433138,-104.552240999999995 29.717122999999997,-104.555600999999996 29.731220999999998,-104.554914970831931 29.738152096413199,-104.554660236582549 29.740725729903364,-104.557361904757329 29.745049367744027,-104.565950999999998 29.758794999999996,-104.565687999999994 29.770461999999998,-104.571279565966023 29.778773775962186,-104.586447318468245 29.801320404476364,-104.592472 29.810276000000002,-104.594023000000007 29.809220999999997,-104.599148999999997 29.811007,-104.610166000000007 29.819117999999996,-104.610205623651026 29.819231101342197,-104.610356932717465 29.819662996386217,-104.613081011852316 29.827438579869643,-104.615248982559379 29.833626813172685,-104.619039 29.844444999999997,-104.624350000000007 29.845221999999996,-104.629290740007292 29.852171499068138,-104.629713747950376 29.852766489555783,-104.630103000000005 29.853313999999997,-104.630111961493199 29.853664893019587,-104.630290851730521 29.860669455113747,-104.630338938536084 29.862552324858758,-104.630359999999996 29.863376999999996,-104.630588419131911 29.86393398222631,-104.633274999999998 29.870484999999999,-104.63616345635748 29.872800876528242,-104.645854762904364 29.880571071602066,-104.65678299999999 29.889332999999997,-104.658422170930251 29.891285606400047,-104.65864999999998 29.891556999999999,-104.658665881124946 29.891956296855856,-104.659041999999999 29.901413000000002,-104.661965712024596 29.903547518850328,-104.666224133352003 29.906656470935726,-104.672326999999996 29.911111999999996,-104.679772 29.924658999999998,-104.680850906343153 29.932111041680564,-104.684321999999995 29.956085999999999,-104.679660999999982 29.975271999999997,-104.680379178583593 29.977083,-104.685479 29.989943,-104.689640999999995 30.014949999999999,-104.693591999999995 30.019077000000003,-104.701242868742796 30.021046973658397,-104.702310999999995 30.021321999999998,-104.702447580064685 30.021555813412469,-104.7030116881661 30.022521518330599,-104.703997999999999 30.02421,-104.703882705803636 30.024660825787098,-104.703121214098445 30.027638426639932,-104.701101999999992 30.035533999999998,-104.706873999999999 30.050685,-104.706630611705322 30.051708605996314,-104.703831250551389 30.063481739403372,-104.703581999999997 30.06453,-104.699792220462342 30.065066336345112,-104.698848962238912 30.065199827927678,-104.698233000000002 30.065286999999998,-104.697787990647399 30.065651654776563,-104.69277799999999 30.069756999999996,-104.687313590037505 30.080921966773531,-104.685080632167896 30.08548438075637,-104.685002999999995 30.085643,-104.685554782105299 30.093963293324606,-104.685687 30.095957000000002,-104.686861171517634 30.098036494960315,-104.692093999999983 30.107303999999996,-104.693655813605488 30.119154117533654,-104.695366000000007 30.13213,-104.692122999999995 30.138662999999998,-104.690080458880587 30.149079251722458,-104.687506999999997 30.162202999999998,-104.687296000000003 30.179464000000003,-104.702787999999998 30.211735999999995,-104.707897632633845 30.218501061672534,-104.711235999999985 30.222920999999999,-104.713166 30.237956999999998,-104.722357186598074 30.248308653999679,-104.724410584274111 30.250621311025988,-104.72532436157617 30.251650460675243,-104.73347160041142 30.260826359409911,-104.733822000000004 30.261220999999999,-104.734059376092361 30.261231667834558,-104.737359999999995 30.261379999999996,-104.740448 30.259454000000002,-104.749663999999996 30.26126,-104.751566999999994 30.263643999999999,-104.754655151309422 30.272796681105522,-104.757893999999993 30.282395999999999,-104.761634 30.301147999999998,-104.779356000000007 30.313188,-104.790279572675416 30.323632238875831,-104.797291 30.330335999999999,-104.809794338457337 30.334925849121163,-104.810755485390246 30.338091979227556,-104.81211787963197 30.342579864771171,-104.813478341684558 30.347061385458392,-104.814379749150064 30.356375955470707,-104.814778573671205 30.360497153782266,-104.817595751374526 30.365914799658352,-104.824313633436745 30.370465624210016,-104.837492999999995 30.373909,-104.849824017938076 30.383147747051474,-104.859521 30.390413000000002,-104.857439999999997 30.408957,-104.852419999999995 30.418792,-104.861074000000002 30.428896999999996,-104.86474141169117 30.441297336779865,-104.865463293164552 30.443738179024677,-104.868454614768496 30.453852504447951,-104.869872 30.458644999999997,-104.86871099999999 30.463229999999996,-104.866118999999983 30.46479,-104.866094000000004 30.467379999999999,-104.870137228360662 30.483875070981508,-104.873288503237063 30.496731258693877,-104.873335488188886 30.496922942181985,-104.876786999999979 30.511004000000003,-104.878566789651714 30.514416830422793,-104.880108146577356 30.517372454871531,-104.88208573587417 30.521164575423189,-104.889375999999999 30.535143999999995,-104.890392881954469 30.540947215529823,-104.892228000000003 30.551419999999997,-104.895440150997459 30.560421421221292,-104.899000999999998 30.570399999999996,-104.909330873116318 30.584188648619556,-104.909747767935556 30.584745133303247,-104.918689620637082 30.596681007395873,-104.924796 30.604831999999998,-104.927016167130404 30.604700501077968,-104.934922481779466 30.604232215677584,-104.939873000000006 30.603939,-104.953391370086464 30.606003357240429,-104.967167000000003 30.608106999999997,-104.971627504383378 30.61006529240159,-104.972071 30.61026,-104.972794851616513 30.611297344530712,-104.980135850742045 30.621817657146149,-104.980290999999994 30.622039999999995,-104.982191641583043 30.62882153037463,-104.983981 30.635206,-104.985513855292751 30.652294791670293,-104.9863 30.661059000000002,-105.001239999999996 30.672583000000003,-105.002056999999994 30.680971999999997,-105.006614566555172 30.685839873047019,-105.006800999999996 30.686039,-105.007528432885024 30.6859080282745,-105.007959930235828 30.685830338698263,-105.020141999999993 30.683637,-105.035888798004834 30.686138071331488,-105.042930223005172 30.687256464175281,-105.044973600167665 30.685364445024991,-105.049769587265445 30.680923708581364,-105.049884734287517 30.6808170907847,-105.050688284649809 30.681171184306308,-105.054688384336032 30.682933873306403,-105.062333999999993 30.686302999999995,-105.062477471553692 30.692159292631892,-105.062625999999995 30.698222,-105.084504902225902 30.710918832086001,-105.098281999999998 30.718914000000002,-105.108075999999997 30.730049999999995,-105.110705999999993 30.737749999999995,-105.110681999999983 30.743366000000002,-105.113815999999986 30.746001,-105.119547104826722 30.748125675649064,-105.123265000000004 30.749504000000005,-105.140207000000004 30.752502,-105.152361999999982 30.751451999999997,-105.157640215066564 30.754007791997694,-105.16015278062757 30.757058756266805,-105.160271207191187 30.758203550015399,-105.161229588477383 30.767467931854636,-105.164076390339474 30.771453450048199,-105.164818961888187 30.77249304906519,-105.164868027003308 30.772491740665838,-105.170370203038615 30.772345016388588,-105.178279098267282 30.772134113115257,-105.183436 30.776644999999995,-105.185930999999997 30.784391999999997,-105.195143999999999 30.792138,-105.195988495740664 30.791702299374609,-105.203522176185984 30.787815448176353,-105.206160999999994 30.786453999999996,-105.212916518294108 30.785414778041517,-105.215967484302155 30.786491589369188,-105.216685356202021 30.789542555377231,-105.215888956387687 30.792967070566242,-105.214890669496626 30.797259699168034,-105.218659510882389 30.801566944478708,-105.222008841883465 30.801829013843189,-105.231580057313238 30.802577916338681,-105.238364256021057 30.803108747911697,-105.249792715464977 30.799033957074698,-105.255416052233826 30.797028969328842,-105.261224946310648 30.798054073736733,-105.261360733612406 30.798078036329223,-105.27276013440985 30.808707209360072,-105.27887297001547 30.814407016614517,-105.283004544196217 30.818259431108679,-105.287237620233441 30.822206489243744,-105.289317685342255 30.822206489243744,-105.295630129130572 30.822206489243744,-105.300778681061615 30.818848737795758,-105.303672944509898 30.816961174571279,-105.314862960890409 30.816961174571279,-105.316949659843416 30.82296045428,-105.31766045482081 30.825003996727105,-105.320108268786385 30.827451797139727,-105.322675464925993 30.828439452154051,-105.330102631610075 30.831296841312803,-105.347695000000002 30.838065,-105.353219571709047 30.842032277683753,-105.358103536812379 30.84553952616983,-105.359771122039604 30.846737044096301,-105.360672052753856 30.84738401593513,-105.36720323988537 30.847875849249167,-105.377416999999994 30.848644999999998,-105.387780492422849 30.851314552204784,-105.394242074789418 30.852979003795937,-105.396689881978517 30.855426817761515,-105.396237319899697 30.858492407966825,-105.394628539050657 30.86939005724841,-105.394248999999988 30.871960999999999,-105.395681745186749 30.87649980844607,-105.399608999999998 30.888940999999996,-105.399828021807267 30.889112280223049,-105.402824820246408 30.891455847338634,-105.413505 30.899808,-105.430088999999995 30.905791999999998,-105.44547819369545 30.915748838601054,-105.448693870984556 30.917829388134351,-105.452149246331331 30.920065022782566,-105.4597280766598 30.924968540917344,-105.469954295993247 30.931584924947412,-105.472488639470896 30.933224650164071,-105.476269681741059 30.935670991952524,-105.488027000000002 30.943277999999999,-105.495516502166126 30.9493992090351,-105.4968561000139 30.950494069316512,-105.497422439936116 30.953962910943051,-105.497963910074574 30.957279424722472,-105.502256687477072 30.962680017552614,-105.507558525965123 30.966493977230062,-105.533087999999992 30.984859,-105.541468808393844 30.984769556162778,-105.543675999999991 30.984745999999998,-105.557430349577899 30.990228688381027,-105.570063935625512 31.008532833135739,-105.575218046011173 31.016000355201566,-105.578084306850855 31.020153131231776,-105.578407858220658 31.020621907958049,-105.57911399999999 31.021644999999999,-105.580554486932016 31.024917232759986,-105.581339666024604 31.026700857930102,-105.581404000000006 31.026847000000004,-105.581361569643192 31.027041810483581,-105.581235244876609 31.027621805343596,-105.579823718925667 31.034102543987302,-105.579541999999989 31.035395999999995,-105.579765234089464 31.036249085539566,-105.579847333127134 31.036562825712579,-105.585323000000002 31.057487999999996,-105.592709163135751 31.0626132919136,-105.595921000000004 31.064841999999999,-105.598772999999994 31.074925999999998,-105.60333 31.082624999999997,-105.627348999999995 31.098545,-105.641890000000004 31.098321999999996,-105.646730999999988 31.113907999999999,-105.647031366805422 31.114192798578223,-105.648833999999994 31.115902000000002,-105.662869191777489 31.12063916934996,-105.673930643060629 31.124372639388369,-105.709491 31.136374999999997,-105.717005999999998 31.141438,-105.717653520299876 31.143411480377267,-105.719539999999995 31.149160999999996,-105.742677999999998 31.164897,-105.763531 31.164121000000005,-105.773256999999987 31.166896999999999,-105.774148788612138 31.168976038235485,-105.780021000000005 31.182666,-105.779878030009812 31.18682806893737,-105.779724999999999 31.191282999999995,-105.782894999999996 31.197562999999999,-105.790659746923424 31.200723362140888,-105.794386000000003 31.20224,-105.818835000000007 31.230680999999997,-105.825806058218902 31.23733997673531,-105.835722000000004 31.246811999999995,-105.851073632158958 31.265902599748792,-105.86604427072389 31.284519412988434,-105.869353000000004 31.288633999999998,-105.869862116496506 31.288859823963843,-105.876014999999981 31.291588999999995,-105.890871999999987 31.290013999999996,-105.895034999999993 31.290977999999999,-105.903460999999993 31.306768999999999,-105.908770999999987 31.312773999999997,-105.914613899052299 31.312859252963214,-105.93196564998388 31.313112430054005,-105.932552999999999 31.313120999999995,-105.933375187723101 31.313903465142818,-105.938451999999984 31.318735,-105.948091000000005 31.340069,-105.945903 31.352809999999998,-105.953942999999995 31.364749,-105.970101 31.365936999999995,-105.997579969562565 31.386863626037869,-106.00418474278807 31.391893495117941,-106.004925999999998 31.392457999999998,-106.006143777923754 31.392558937255828,-106.022866323827969 31.393945009265412,-106.080091217088636 31.398688175961098,-106.080258 31.398702,-106.080335505244278 31.398768097394733,-106.096409750603954 31.412476405141465,-106.100621535494 31.416068265421309,-106.102641400977276 31.417790830744398,-106.10264993125142 31.41779810546371,-106.106876999999997 31.421403000000005,-106.112168999999994 31.423577999999996,-106.132782000000006 31.425367000000005,-106.143572676566535 31.431101721097118,-106.158218000000005 31.438885000000003,-106.175305198785026 31.455910533348611,-106.175674999999998 31.456278999999995,-106.17677981450808 31.456634312625521,-106.182946895641223 31.45861766980741,-106.20560859826729 31.465905761156737,-106.205826999999999 31.465975999999998,-106.205998876707866 31.466165148890862,-106.212686244283063 31.473524541419071,-106.218538531147885 31.479964934554566,-106.218843000000007 31.480299999999996,-106.218893022078106 31.480498686193428,-106.223908999999992 31.500422,-106.236804000000006 31.513376,-106.242649095206133 31.530650094003715,-106.245874455325477 31.540182047193959,-106.246202999999994 31.541153,-106.246406806009631 31.541315626597875,-106.254779999999997 31.547997000000002,-106.280345588488331 31.561810530102129,-106.280548572587122 31.561920205925162,-106.280811 31.562061999999997,-106.287785 31.584444999999999,-106.292254713772053 31.594651759250389,-106.295141086978958 31.601242900860864,-106.303535999999994 31.620412999999996,-106.308594276522342 31.627497440426588,-106.330970256390501 31.658836434185069,-106.33473699999999 31.664111999999999,-106.338265602146336 31.671883697950737,-106.346992532059133 31.691104641686092,-106.349537999999995 31.696711,-106.357472918704602 31.702103016258707,-106.368303742040567 31.709462886938788,-106.370138999999995 31.710709999999999,-106.373839000000004 31.714809999999996,-106.378039 31.72831,-106.381039 31.732109999999999,-106.38595139194058 31.734759025425479,-106.394642915450532 31.739445961452269,-106.404086535473255 31.744538468290354,-106.417940000000002 31.752009,-106.421739999999616 31.752623660686648,-106.431540999999996 31.754208999999996,-106.434644983693715 31.755853956158482,-106.444263765046571 31.76095142933643,-106.451540999999992 31.764807999999999,-106.467641999999998 31.759607999999997,-106.470742 31.753508,-106.472156160715315 31.752506597443457,-106.47367184987327 31.751433300058491,-106.475016438009845 31.750481163584279,-106.475542000000004 31.750108999999998,-106.48261401078824 31.748321568701869,-106.484641999999994 31.747809000000004,-106.486162292248409 31.747994847970777,-106.488078402545341 31.748229082678503,-106.489542 31.748407999999998,-106.507341999999994 31.761208,-106.509102011460428 31.762827435120251,-106.511609062807707 31.765134242258316,-106.523643000000007 31.776206999999996,-106.528643000000002 31.781807,-106.528542999999999 31.783906999999996,-106.528542999999999 31.784407000000002,-106.527996999999999 31.786944999999999,-106.527623000000006 31.789119000000003,-106.527737999999985 31.789760999999995,-106.527942999999993 31.790507000000002,-106.530514999999994 31.792103,-106.532480000000007 31.791913999999998,-106.533 31.791829,-106.533043000000006 31.791906999999995,-106.534743000000006 31.796106999999999,-106.535154000000006 31.797088999999996,-106.535342999999997 31.797507,-106.535842999999986 31.798607,-106.542096999999998 31.802145999999997,-106.542143999999993 31.802106999999996,-106.544713999999999 31.804286999999999,-106.545344 31.805007,-106.546561898485905 31.806561850400339,-106.546615562760394 31.806630361790774,-106.547143999999989 31.807304999999996,-106.551861034152338 31.808599471053657,-106.558443999999994 31.810406,-106.560680020141419 31.810752754512048,-106.560847305685968 31.810778696593822,-106.562944999999999 31.811104,-106.56344399999999 31.812605999999995,-106.566844000000003 31.813305999999997,-106.569123704016391 31.811582321353455,-106.570943999999997 31.810205999999997,-106.577243999999993 31.810406,-106.581344 31.813905999999996,-106.582144 31.815505999999999,-106.588044999999994 31.822105999999998,-106.589044999999984 31.822705999999997,-106.593826000000007 31.824901,-106.602727000000002 31.825023999999996,-106.605266999999998 31.827911999999998,-106.603310537982878 31.834798487166189,-106.601945 31.839604999999999,-106.60204499999999 31.844404999999998,-106.605244999999982 31.845904999999998,-106.605845000000002 31.846304999999997,-106.614637000000002 31.846489999999996,-106.621857000000006 31.852854,-106.625763000000006 31.856276,-106.627808000000002 31.860592999999998,-106.629708357956787 31.861913746439043,-106.635925999999998 31.866235,-106.635879999999986 31.871514,-106.634872999999999 31.874477999999996,-106.630798999999996 31.879696999999997,-106.629271361585637 31.8835303997664,-106.629197000000005 31.883717000000004,-106.629948941610351 31.885072003811555,-106.630443527558498 31.88596325099838,-106.630530381920593 31.886119763139838,-106.630691999999982 31.886410999999999,-106.633926999999986 31.889183999999997,-106.635073463799642 31.889856364267651,-106.636317332120683 31.890585853164694,-106.638154 31.891662999999998,-106.638364165758659 31.89171923904625,-106.642899999999983 31.892932999999999,-106.645296000000002 31.894859,-106.645645999999999 31.895648999999995,-106.645478999999995 31.898669999999999,-106.640839999999997 31.904598,-106.63512839833713 31.908732779117901,-106.633668 31.90979,-106.633408736085542 31.909871832166754,-106.625946999999996 31.912227,-106.62344499999999 31.914034,-106.618336531290581 31.916262323146238,-106.614677480394235 31.917858407661853,-106.614345999999998 31.918002999999995,-106.611846 31.920003,-106.616063629645311 31.921863544491501,-106.623932999999994 31.925334999999997,-106.624022586877501 31.92530240401349,-106.628663000000003 31.923614,-106.629746999999995 31.926570000000002,-106.625321999999983 31.930053000000004,-106.622529 31.934863000000004,-106.622117000000003 31.936620999999999,-106.622377 31.940863,-106.623659000000004 31.945509999999995,-106.616135999999983 31.948439,-106.614701999999994 31.956,-106.617707999999993 31.956008,-106.622819000000007 31.952891,-106.625123000000002 31.954530999999999,-106.625534999999985 31.957475999999996,-106.624298999999993 31.961054,-106.620453999999981 31.963402999999996,-106.619370999999987 31.964777000000005,-106.618745000000004 31.966954999999995,-106.619568999999998 31.971578,-106.621872999999994 31.972933,-106.623215999999999 31.972909999999999,-106.626465999999994 31.97069,-106.630114000000006 31.971257999999999,-106.638186000000005 31.976819999999996,-106.639528999999996 31.980347999999996,-106.63649199999999 31.985719,-106.631181999999995 31.989809,-106.629494617643616 31.990072722748106,-106.628337072326531 31.990253636712819,-106.62822051159516 31.990271854111079,-106.626910882874782 31.990476537349483,-106.623567999999992 31.990998999999999,-106.619448000000006 31.994733,-106.618486000000004 32.000494999999994,-106.599096000000003 32.000731000000002,-106.598639000000006 32.000753999999993,-106.595332999999997 32.000777999999997,-106.587971999999979 32.000748999999999,-106.582805114232855 32.000751357586125,-106.566056000000003 32.000759000000002,-106.565141999999994 32.000736000000003,-106.564298514026802 32.00073927393025,-106.562131862706067 32.000747683631808,-106.55942760630407 32.000758180008894,-106.517043115844388 32.000922692365819,-106.411074999999983 32.001334,-106.409326934223301 32.001349629127162,-106.409108574114072 32.001351581443814,-106.394297999999992 32.001483999999998,-106.376861000000005 32.001171999999997,-106.32356972407176 32.001457096670784,-106.313306999999995 32.001511999999998,-106.205915000000005 32.001761999999999,-106.200699 32.001784999999998,-106.18183999999998 32.002049999999997,-106.125534000000002 32.002532999999993,-106.05045734599986 32.002412317859424,-105.998002999999997 32.002327999999999,-105.900599999999997 32.002099999999992,-105.886159000000006 32.001969999999993,-105.854061000000002 32.00235,-105.750527000000005 32.002206,-105.731362000000004 32.001564000000002,-105.563520259526442 32.001015604709174,-105.429281000000003 32.000577,-105.428582000000006 32.000599999999999,-105.427048999999997 32.000638000000002,-105.390395999999981 32.000607000000002,-105.340142768272344 32.000583616714373,-105.200871148394683 32.000518812363367,-105.153993999999997 32.000497000000003,-105.150310000000005 32.000497000000003,-105.14824 32.000484999999998,-105.132915999999994 32.000518,-105.131377 32.000523999999999,-105.118039999999993 32.000484999999998,-105.078604999999996 32.000532999999997,-105.077045999999996 32.000578999999995,-104.918272000000002 32.000495999999991,-104.643525999999994 32.000442999999997,-104.640917999999999 32.000396000000002,-104.531936999999999 32.000311000000004,-104.531756 32.000117000000003,-104.024520999999993 32.000010000000003,-103.980179000000007 32.000124999999997,-103.875476000000006 32.000554,-103.748317 32.000197999999997,-103.72373965094468 32.000208021677786,-103.713395184678689 32.000212239744897,-103.713395184670219 32.000212239744904,-103.713395184654971 32.000212239744911,-103.713395184639609 32.000212239744918,-103.60161412595366 32.000257819670985,-103.326500999999993 32.00036999999999,-103.278520999999998 32.000419,-103.270382999999995 32.000326,-103.267707999999999 32.000323999999992,-103.267633000000004 32.000475000000002,-103.215641000000005 32.000512999999998,-103.133028835827503 32.000473953106116,-103.088697999999994 32.000452999999993,-103.085875999999985 32.000464999999998,-103.064422999999991 32.000518,-103.064344000000006 32.087051000000002,-103.064347999999995 32.123041,-103.064421999999993 32.145006000000002,-103.064695999999998 32.522193,-103.064761000000004 32.587983,-103.064787999999993 32.600397,-103.064761000000004 32.601863000000002,-103.064814999999996 32.624536999999997,-103.064633 32.646419999999992,-103.064864 32.682647000000003,-103.064797999999996 32.690761000000002,-103.064798999999994 32.708694,-103.064826999999994 32.726627999999998,-103.064807000000002 32.777302999999996,-103.064698000000007 32.783602000000002,-103.064711000000003 32.784593,-103.064699000000005 32.827531,-103.064672000000002 32.828470000000003,-103.064888999999994 32.849359,-103.064915999999982 32.857259999999997,-103.064807000000002 32.857695999999997,-103.064862000000005 32.868346000000003,-103.064700999999985 32.879354999999997,-103.064569000000006 32.900013999999999,-103.064656999999997 32.959097,-103.064678999999998 32.964373000000002,-103.064625000000007 32.999898999999999,-103.064452000000003 33.010289999999998,-103.06398 33.038693000000002,-103.063904999999991 33.042054999999998,-103.063382198608849 33.066417104805645,-103.0628188509327 33.092668632365545,-103.062136190569035 33.12448003074244,-103.060102999999984 33.219225000000002,-103.059719999999999 33.256262,-103.059241999999998 33.260370999999992,-103.057856 33.315233999999997,-103.057486999999995 33.32947699999999,-103.056655000000006 33.388437999999994,-103.052609999999987 33.570599,-103.051664000000002 33.629489,-103.051362999999995 33.64195,-103.051535 33.650486999999998,-103.051086999999981 33.658186,-103.050532000000004 33.672407999999997,-103.050147999999993 33.701971,-103.049608000000006 33.737766,-103.049096000000006 33.746270000000003,-103.047346000000005 33.824674999999999,-103.046907000000004 33.850299999999997,-103.045643999999996 33.901536999999998,-103.045698000000002 33.90629899999999,-103.044893000000002 33.945616999999999,-103.043949999999981 33.974629,-103.043616999999998 34.003633,-103.043531000000002 34.018014,-103.043554999999984 34.032713999999991,-103.043745999999999 34.037294000000003,-103.043771000000007 34.041538000000003,-103.043720999999991 34.042319999999997,-103.043767000000003 34.043544999999995,-103.043744000000004 34.049985999999997,-103.04368599999998 34.063077999999997,-103.043515999999983 34.079382000000003,-103.043569000000005 34.087947,-103.043571175003294 34.092846731402311,-103.043572866326429 34.096656853966635,-103.04358003846437 34.112813863799865,-103.043644 34.256903,-103.043718999999982 34.289440999999997,-103.043935999999988 34.302584999999993,-103.043978999999979 34.312763999999994,-103.043947553639484 34.376410480771497,-103.043947499824213 34.37651940122479,-103.043946000000005 34.379555000000003,-103.043943999999982 34.37966,-103.043919000000002 34.380915999999992,-103.043693000000005 34.383578,-103.043629999999993 34.384689999999999,-103.043614000000005 34.384968999999998,-103.043612999999993 34.388679000000003,-103.043612999999993 34.390442,-103.043606047260084 34.391254973944719,-103.043584999999993 34.393715999999998,-103.043610999999999 34.397105000000003,-103.043582999999998 34.400677999999999,-103.043537999999998 34.405462999999997,-103.043582 34.455657000000002,-103.043587999999986 34.459662000000002,-103.043588999999997 34.459774000000003,-103.043593999999985 34.46266,-103.043434927764125 34.510540742996007,-103.043071999999981 34.619782,-103.043277851519235 34.65183038816317,-103.0432796163159 34.65210514391012,-103.043285999999995 34.653098999999997,-103.042827000000003 34.671187999999994,-103.042768999999993 34.747360999999998,-103.042770000000004 34.792223999999997,-103.042781000000005 34.850242999999999,-103.042520999999979 34.899546,-103.0425974544018 35.032467348285799,-103.042641999999987 35.109912999999999,-103.043261 35.125058000000003,-103.042519999999996 35.135596,-103.042599999999993 35.142766000000002,-103.042710999999997 35.144734999999997,-103.042568000000003 35.159317999999999,-103.042394999999999 35.178573,-103.042338999999984 35.181922,-103.042366 35.182786,-103.042377000000002 35.183149,-103.042496999999997 35.211862000000004,-103.042775000000006 35.241236999999998,-103.042366 35.250056,-103.041554000000005 35.622487,-103.041484634909168 35.651235429903174,-103.041145999999998 35.791583000000003,-103.041916999999998 35.796441000000002,-103.041715999999994 35.814072000000003,-103.042186 35.825216999999995,-103.04130499999998 35.837693999999999,-103.040823999999986 36.055230999999992,-103.041387523024824 36.229129564686382,-103.041674 36.317534000000002,-103.041745000000006 36.318266999999999,-103.041923999999995 36.500439,-103.00243399999998 36.500397)),((-96.818513748151517 28.172441936006489,-96.816443421354066 28.174808025412563,-96.791958210781445 28.188687337716829,-96.733036581469989 28.190913261798631,-96.70383764358462 28.198245729538105,-96.697421731775194 28.2029594609741,-96.702659211994316 28.211208487181011,-96.703313894801497 28.216445964862743,-96.686815839850283 28.218410020896432,-96.662461568376486 28.227313732447904,-96.66062845144161 28.228884976259902,-96.663116248646261 28.233205895474203,-96.651855673914184 28.251275190431315,-96.607991796426646 28.277069769155677,-96.608122730450688 28.280081317680857,-96.611527096272326 28.281390688369981,-96.610479598706064 28.283092866206033,-96.592934048725994 28.296972182316367,-96.581018783574592 28.302209665072866,-96.553260151988255 28.302340591484768,-96.546975176740276 28.305614018207578,-96.542130508742858 28.315958034472228,-96.528905880514458 28.322504882843088,-96.476269225261575 28.330753906512612,-96.45099839278295 28.337038879223222,-96.434107525610045 28.344764159184386,-96.418918843885365 28.35484630740093,-96.415252604940861 28.362833452872817,-96.417216660974546 28.367154372087118,-96.412895739222876 28.36951123780511,-96.403206408302779 28.371475291301415,-96.401242352269094 28.366892498964241,-96.400558825492723 28.362187299887704,-96.398667286465624 28.349166496619617,-96.397846 28.343512999999998,-96.413700000000006 28.327342999999999,-96.439098999999999 28.319051999999999,-96.495600517783487 28.293964130304811,-96.547774000000004 28.270797999999999,-96.587113635820756 28.248878526668094,-96.611036668198281 28.235548960715661,-96.621533999999983 28.229699999999998,-96.694665999999998 28.18212,-96.758140999999995 28.136872999999998,-96.830820125734775 28.079724674840076,-96.849624000000006 28.064938999999999,-96.854049189790473 28.060788472935577,-96.855594496383262 28.059339080448503,-96.859762278796424 28.055429983997605,-96.896530613737951 28.020943786452513,-96.898080497387397 28.019490100997579,-96.929052999999996 27.990439999999996,-96.96699599999998 27.950531000000002,-97.001440999999986 27.911442,-97.031660000000002 27.869974999999997,-97.041798999999997 27.852925999999997,-97.045408776308051 27.837452569961062,-97.045409609838757 27.837448997003069,-97.04598 27.835004,-97.050599498412936 27.830109781194331,-97.058265753683145 27.821987615677948,-97.076304165860961 27.802876463727326,-97.079565315161531 27.799421374709375,-97.083535350812468 27.795215242050556,-97.085211615730273 27.793439290085495,-97.085394999999991 27.793244999999999,-97.11422230692618 27.755303327915222,-97.116276999999997 27.752599,-97.117304906633777 27.751048809529347,-97.118830196202964 27.748748513687826,-97.139140047561696 27.718119138409879,-97.139351757288111 27.717799858049549,-97.143807202733072 27.711080581371732,-97.165547551982726 27.678293865995041,-97.166583141799606 27.676732088482499,-97.166681999999994 27.676583,-97.184850261879149 27.644709535797791,-97.192144670654784 27.631912600211269,-97.198729900630283 27.620359811436909,-97.201865999999995 27.614857999999998,-97.211651066704889 27.596044174137351,-97.213608899397855 27.592279833590187,-97.221943360361436 27.576255098965802,-97.265194083077162 27.493096589152017,-97.265746568141566 27.492034321708481,-97.276090999999994 27.472145,-97.304469999999995 27.407734,-97.326522999999995 27.347611999999998,-97.347445832595042 27.277936119324231,-97.350397999999998 27.268104999999998,-97.363400999999996 27.210366,-97.370941000000002 27.161165999999998,-97.377001000000007 27.101020999999999,-97.379130000000004 27.047996,-97.378361999999996 26.992877,-97.370730999999992 26.909706,-97.365301177044699 26.875333999999995,-97.365282052674758 26.875212938438843,-97.364726000000005 26.871692999999997,-97.363633430415348 26.866515420001111,-97.352028350385282 26.811520085064032,-97.35141299999998 26.808603999999999,-97.350529648372714 26.805138580575584,-97.333027999999999 26.736478999999996,-97.304204860681779 26.646364129642233,-97.300690000000003 26.635375,-97.297812715808362 26.627503004299889,-97.297022484076606 26.625340999999999,-97.287871455917369 26.600304594305239,-97.275119000000004 26.565415000000002,-97.269391999999982 26.554046,-97.269132970349304 26.553256905349773,-97.257954534248029 26.519203490608863,-97.229844 26.433568999999999,-97.223724090442104 26.411478908273114,-97.206682644704898 26.34996703527348,-97.194643999999997 26.306512999999999,-97.185844000000003 26.267102999999995,-97.177979856301576 26.220346386353309,-97.177168840972797 26.215524458900923,-97.173264999999986 26.192314,-97.170387765328073 26.167037808112223,-97.169872392484734 26.162510314053797,-97.167099005951158 26.138146416702778,-97.161470999999992 26.088705,-97.158662630175101 26.080176913346069,-97.154270970414501 26.066840900880429,-97.161462285840642 26.067639941946975,-97.169842256221145 26.077853024187579,-97.171781452365479 26.102521767945923,-97.179531587141199 26.146202099560895,-97.178745972847352 26.177103221942961,-97.183983445454302 26.214289306886101,-97.194458400817808 26.271639686993655,-97.214884565299002 26.353606215503973,-97.226930759399721 26.385554824668418,-97.240286324189555 26.405980989149626,-97.240845398636537 26.411470089808617,-97.243166933615896 26.434263367616055,-97.247618791929028 26.456260775909261,-97.254165635225121 26.471187589585856,-97.262545605605609 26.482971915638458,-97.27642492679071 26.521729238684483,-97.292399243108349 26.528014213932472,-97.310730412457033 26.556558470596535,-97.308111681228326 26.5712234060755,-97.308635417324538 26.576722756880109,-97.317015387705027 26.597672667607057,-97.318434072834165 26.60022630157264,-97.324871601690262 26.611813856840271,-97.338489044677715 26.647428701777493,-97.33639404954522 26.666021744249065,-97.345821512417203 26.700589103038251,-97.363105189274393 26.710540307081217,-97.370437657013895 26.723895871871047,-97.370961403259614 26.736203954318924,-97.367557047587525 26.740393934434408,-97.364152671616353 26.758986971196869,-97.364646278833362 26.767121661774897,-97.368866408127118 26.774699404876429,-97.370437646864346 26.781508126370166,-97.368342661881371 26.795649318140761,-97.373056398392137 26.808481136684847,-97.387459455673451 26.820789208983193,-97.383531343606066 26.875520854055946,-97.385626348888096 26.88887641440536,-97.391649435788921 26.901970109878395,-97.389554460955466 26.945964918852653,-97.390340075249313 27.05228571820243,-97.389816329003565 27.067212531879022,-97.386411973331462 27.083186832972341,-97.387459455673422 27.090519300711819,-97.390601943297412 27.094185534581555,-97.390078197051665 27.156511519247964,-97.377508246555678 27.199458835730731,-97.379865109736301 27.202863196477598,-97.386673841379576 27.204696313412462,-97.382221972916923 27.229050589961044,-97.37488951532697 27.25026236588155,-97.373318276589728 27.276449754290233,-97.372896734486858 27.277942715507475,-97.367033301341749 27.298709035706306,-97.36467643816114 27.302637142698917,-97.359962701650375 27.304732132756659,-97.357605838469766 27.307874620380655,-97.362319574980518 27.32672953597509,-97.366771423144115 27.333276389420721,-97.36179581858525 27.359987519000377,-97.346607126710992 27.390364889744752,-97.336132171347501 27.402411088920228,-97.331156576938184 27.412362295500575,-97.329585328051422 27.418123524502818,-97.330894688591016 27.425455992242295,-97.329847196099536 27.434359703793774,-97.317277255753083 27.463689574751687,-97.293708603647858 27.497209429631152,-97.282971770086746 27.521563701104967,-97.267627232015485 27.541048841138782,-97.26651977444007 27.542455137362143,-97.266473727822444 27.542513609294531,-97.257831889393842 27.556392930479635,-97.261144559602045 27.562355746269706,-97.261759991311692 27.563463525096239,-97.260450620622564 27.56739163716362,-97.260303240478223 27.567589679048492,-97.252732825146552 27.577762415194865,-97.252070650242061 27.578652211895708,-97.247885553160842 27.581360217573209,-97.247618802078478 27.581532821322067,-97.236881968517352 27.598292751933528,-97.24107194863285 27.602482732049012,-97.241084821027414 27.602523494839662,-97.242643187370078 27.607458346757408,-97.231683715414945 27.631671123728168,-97.231553918442799 27.631957884363242,-97.231382612637987 27.632336350521356,-97.221955159915538 27.632860099304484,-97.221711030183002 27.632638163711842,-97.219074540339648 27.630241360463614,-97.217418907944051 27.630677052710489,-97.214098935780783 27.631550728615359,-97.200743370990949 27.650143776161688,-97.197339005169326 27.664546838517776,-97.19760088336696 27.678426154628117,-97.203474366386629 27.684532651921231,-97.20308902068453 27.688000774441392,-97.200450811776179 27.688974477466285,-97.190006537429824 27.692829222058965,-97.188284576858237 27.695272543577584,-97.170627865440125 27.720325976082009,-97.166176017276527 27.732372180332245,-97.161200407642937 27.734074342943998,-97.153606061705801 27.733288721037997,-97.147321086457822 27.735383711095739,-97.130823034043985 27.751619892924076,-97.127942424617643 27.75580987303956,-97.127680546420009 27.759999858229808,-97.125046985317312 27.763143140340585,-97.103326269871417 27.789067861139614,-97.102999946318647 27.791923200131116,-97.10255066693685 27.795854405604921,-97.102495980878558 27.796332909939515,-97.102278777379922 27.798233445813956,-97.100865886772965 27.802472121847156,-97.098874421707819 27.808446522979796,-97.095168997779496 27.812151946908138,-97.092851314507953 27.81446963017968,-97.092589446459854 27.819183356540908,-97.098874421707819 27.822849590410645,-97.104263831428213 27.822227735056668,-97.126109297533233 27.819707102786651,-97.130299287798252 27.820492727230029,-97.134489267913736 27.825206463740791,-97.132394272781227 27.827301438574235,-97.10670775348396 27.832389859144307,-97.087681973298601 27.836158807756469,-97.056712719518927 27.842293721800239,-97.055822986229373 27.843403727743151,-97.04322620548075 27.859119113080268,-97.013634476624247 27.906780143237341,-97.017955395838555 27.911493874673329,-97.016384146951765 27.917255079570445,-96.985744902767337 27.954048356415132,-96.977888688782102 27.976438572489602,-96.978805242174786 27.978271691961854,-96.980900237307296 27.978271691961854,-96.986006780964971 27.976176699366729,-96.986661461234775 27.980759491703903,-96.978281501003806 28.001709402430844,-96.967806540565562 28.020040576854303,-96.966759042999328 28.020367911280101,-96.965187799187319 28.013297317932185,-96.962569062883844 28.012380759464751,-96.952617853766114 28.01643980428749,-96.946987563862692 28.02652194996665,-96.932453562407773 28.035425661518129,-96.926430465357427 28.043412814602167,-96.929572952981431 28.051399967686208,-96.927085150701998 28.057292130712504,-96.906004298338829 28.076147047258459,-96.890946545563423 28.076801730065643,-96.886232814127425 28.084396073465374,-96.88832780925992 28.086622002621937,-96.889113433703315 28.099453823703399,-96.886887499471996 28.117130312782294,-96.879424092633712 28.131402425890027,-96.874972236857971 28.133235547899659,-96.87078225420511 28.13127149186597,-96.86462821551855 28.126295887307109,-96.857164811217643 28.115559058820768,-96.845380482627661 28.108881273888468,-96.830128556765757 28.111822717849165,-96.827049318353744 28.112416571196771,-96.816574357915513 28.119618104912195,-96.810420321766344 28.126034014184238,-96.810944073086844 28.136378030448888,-96.816836228500989 28.158048094801106,-96.820248352517055 28.163388807027481,-96.822859330626116 28.167475552598326,-96.818513748151517 28.172441936006489)))'));
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/country.postgresql_psycopg2.sql	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
--- New Zealand bondary courtesy of 'world_borders.shp', which was assembled from public domain sources by Schuyler Erle. See: http://mappinghacks.com/data/
--- Texas boundary data is a data product from the U.S. Census Bureau.  See 'state.sql' for more information.
-INSERT INTO geoapp_country ("name", "mpoly") VALUES ('New Zealand', 'SRID=4326;MULTIPOLYGON (((174.616364000000004 -36.100861000000002,174.634978999999987 -36.124718,174.708862000000011 -36.205559,174.781096999999988 -36.266945,174.812744000000009 -36.339165,174.768311000000011 -36.34639,174.710784999999987 -36.525832999999999,174.708587999999992 -36.533332999999999,174.70773299999999 -36.541671999999998,174.714690999999988 -36.595832999999999,174.717194000000006 -36.603057999999997,174.774414000000007 -36.730277999999998,174.808319000000012 -36.805275000000002,174.854400999999996 -36.847777999999998,174.896636999999998 -36.878334000000002,175.011658000000011 -36.871941,175.020813000000004 -36.873610999999997,175.055542000000003 -36.880279999999999,175.076629999999994 -36.890839,175.082458000000003 -36.895279000000002,175.087463000000014 -36.900832999999999,175.091644000000002 -36.925559999999997,175.161652000000004 -36.955559,175.221069 -36.937775000000002,175.230255 -36.939438000000003,175.278320000000008 -36.965279000000002,175.310516000000007 -36.995002999999997,175.319976999999994 -37.005836000000002,175.323853000000014 -37.012222,175.328856999999999 -37.026947,175.330261000000007 -37.035277999999998,175.330535999999995 -37.044449,175.321899000000002 -37.06472,175.31942699999999 -37.095275999999998,175.317748999999992 -37.144165,175.319121999999993 -37.152495999999999,175.328856999999999 -37.168892,175.373290999999995 -37.216659999999997,175.385254000000003 -37.225830000000002,175.404967999999997 -37.228050000000003,175.579131999999987 -37.244446000000003,175.58914200000001 -37.169449,175.551636000000002 -37.024718999999997,175.547484999999995 -37.009171000000002,175.542480000000012 -36.994446000000003,175.536102 -36.980826999999998,175.524993999999992 -36.961669999999998,175.498566000000011 -36.927222999999998,175.484406000000007 -36.920279999999998,175.476348999999999 -36.917777999999998,175.464416999999997 -36.90889,175.435241999999988 -36.866942999999999,175.46691899999999 -36.809998,175.509430000000009 -36.776108,175.486358999999993 -36.679726000000002,175.463593000000003 -36.621383999999999,175.378296000000006 -36.570557,175.366364000000004 -36.561667999999997,175.361633000000012 -36.556389000000003,175.356628 -36.541671999999998,175.353850999999992 -36.525002,175.35244800000001 -36.489998,175.353577 -36.481940999999999,175.360229000000004 -36.478050000000003,175.538025000000005 -36.514724999999999,175.542755 -36.519996999999996,175.604950000000002 -36.622771999999998,175.631072999999986 -36.710555999999997,175.763610999999997 -36.713614999999997,175.840789999999998 -36.754173000000002,175.733582000000013 -36.805832000000002,175.701629999999994 -36.844161999999997,175.707458000000003 -36.869995000000003,175.709960999999993 -36.875275000000002,175.714690999999988 -36.880828999999999,175.720519999999993 -36.885277000000002,175.735779000000008 -36.891387999999999,175.74383499999999 -36.893889999999999,175.758330999999998 -36.876106,175.761382999999995 -36.869446000000003,175.757751000000013 -36.863059999999997,175.753051999999997 -36.857779999999998,175.749114999999989 -36.851394999999997,175.75 -36.843055999999997,175.752196999999995 -36.835555999999997,175.756378000000012 -36.830002,175.765533000000005 -36.828055999999997,175.808013999999986 -36.824173000000002,175.817200000000014 -36.825836000000002,175.833587999999992 -36.830832999999998,175.845519999999993 -36.839722000000002,175.849120999999997 -36.846107000000003,175.878570999999994 -36.914444000000003,175.881072999999986 -36.921669,175.918304000000006 -37.067504999999997,175.917480000000012 -37.075836000000002,175.915253000000007 -37.083061,175.898314999999997 -37.115004999999996,175.884154999999993 -37.168892,175.883330999999998 -37.176949,175.887206999999989 -37.244163999999998,175.892212 -37.249724999999998,175.921082000000013 -37.251671000000002,175.927185000000009 -37.256110999999997,175.93081699999999 -37.262504999999997,175.936371000000008 -37.278885000000002,175.940093999999988 -37.299717,175.974396000000013 -37.418059999999997,175.976074000000011 -37.453055999999997,176.026931999999988 -37.483108999999999,176.035583000000003 -37.487282,176.059417999999994 -37.502502,176.088287000000008 -37.525557999999997,176.093291999999991 -37.531112999999998,176.165526999999997 -37.613892,176.169433999999995 -37.620277000000002,176.167205999999993 -37.625832000000003,176.160247999999996 -37.624167999999997,176.082458000000003 -37.602500999999997,176.066924999999998 -37.59639,176.061095999999992 -37.591942000000003,176.057189999999991 -37.585555999999997,176.062744000000009 -37.580832999999998,176.070800999999989 -37.577781999999999,176.088287000000008 -37.580002,176.095245000000006 -37.576110999999997,176.090239999999994 -37.570838999999999,176.062468999999993 -37.546669,176.023087000000004 -37.528221000000002,176.018767999999994 -37.526057999999999,176.013931000000014 -37.524554999999999,176.007598999999999 -37.524222999999999,175.955535999999995 -37.521110999999998,175.946349999999995 -37.523055999999997,175.940796000000006 -37.527779000000002,175.953583000000009 -37.558891000000003,175.994415000000004 -37.638893000000003,176.071899000000002 -37.655273,176.14498900000001 -37.675277999999999,176.242187999999999 -37.709442000000003,176.267486999999988 -37.676392,176.488281 -37.756667999999998,176.521636999999998 -37.769447,176.527771 -37.773887999999999,176.537475999999998 -37.784447,176.549712999999997 -37.793334999999999,176.656646999999992 -37.855559999999997,176.671082000000013 -37.862502999999997,176.686645999999996 -37.868332000000002,176.759154999999993 -37.892775999999998,176.784149000000014 -37.900275999999998,176.80304000000001 -37.903328000000002,176.819702000000007 -37.904442000000003,176.838287000000008 -37.907501000000003,176.917755 -37.926108999999997,176.943848000000003 -37.932502999999997,177.08273299999999 -37.967216,177.107468000000011 -37.987220999999998,177.159424 -38.013336000000002,177.415253000000007 -37.982498,177.47357199999999 -37.962502,177.545806999999996 -37.919167000000002,177.552459999999996 -37.915000999999997,177.571625000000012 -37.902222000000002,177.599120999999997 -37.878051999999997,177.603577 -37.872498,177.646941999999996 -37.805,177.732178000000005 -37.682502999999997,177.738861000000014 -37.678336999999999,177.746917999999994 -37.675277999999999,177.791931000000005 -37.666946000000003,177.849396000000013 -37.657218999999998,177.858856000000003 -37.656661999999997,177.868010999999996 -37.654442000000003,177.875792999999987 -37.651389999999999,178.0 -37.592224000000002,178.006653 -37.588332999999999,178.012206999999989 -37.583328000000002,178.018004999999988 -37.550831000000002,178.05581699999999 -37.542777999999998,178.064972000000012 -37.542228999999999,178.187744000000009 -37.546951,178.281921000000011 -37.560828999999998,178.306915000000004 -37.568061999999998,178.311919999999986 -37.573334000000003,178.312468999999993 -37.578887999999999,178.306915000000004 -37.583610999999998,178.321075000000008 -37.602500999999997,178.336365 -37.618332000000002,178.34970100000001 -37.626944999999999,178.367737000000005 -37.630828999999999,178.448028999999991 -37.645279000000002,178.457458000000003 -37.646667,178.468018 -37.646949999999997,178.488861000000014 -37.644165,178.497192000000013 -37.646667,178.504424999999998 -37.649994,178.550536999999991 -37.6875,178.555542000000003 -37.692497000000003,178.559692000000013 -37.698883000000002,178.56552099999999 -37.713332999999999,178.562468999999993 -37.719994,178.483306999999996 -37.826393000000003,178.455230999999998 -37.860000999999997,178.449982000000006 -37.865004999999996,178.429687999999999 -37.876944999999999,178.419983000000002 -37.887779000000002,178.350525000000005 -38.004722999999998,178.347473000000008 -38.011116,178.347197999999992 -38.019722000000002,178.348846000000009 -38.027779000000002,178.354950000000002 -38.032218999999998,178.360229000000004 -38.037506,178.364136000000002 -38.043616999999998,178.375792999999987 -38.072777000000002,178.378296000000006 -38.089995999999999,178.377746999999999 -38.09861,178.353850999999992 -38.185555,178.319976999999994 -38.248055,178.318024000000008 -38.255561999999998,178.317474000000004 -38.263893000000003,178.320800999999989 -38.398612999999997,178.302459999999996 -38.528885000000002,178.300536999999991 -38.536391999999999,178.296356000000003 -38.541946000000003,178.158874999999995 -38.649169999999998,178.074982000000006 -38.713889999999999,178.068297999999999 -38.717773,178.060241999999988 -38.721107000000003,178.050812000000008 -38.721381999999998,178.044433999999995 -38.717216,177.928864000000004 -38.722220999999998,177.941070999999994 -38.793616999999998,177.923858999999993 -38.918334999999999,177.917786000000007 -38.942802,177.909697999999992 -38.969718999999998,177.897705000000002 -39.047942999999997,177.893859999999989 -39.064776999999999,177.906708000000009 -39.064278000000002,177.923034999999999 -39.089165,177.942200000000014 -39.091942000000003,177.967743000000013 -39.098334999999999,177.991332999999997 -39.115004999999996,177.996612999999996 -39.120277000000002,177.999390000000005 -39.127495000000003,177.909973000000008 -39.256950000000003,177.898865 -39.267502,177.874968999999993 -39.286118000000002,177.868010999999996 -39.290283000000002,177.861908 -39.285834999999999,177.844970999999987 -39.251396,177.839416999999997 -39.236946000000003,177.824127000000004 -39.193053999999997,177.823577999999998 -39.183883999999999,177.826629999999994 -39.177222999999998,177.841644000000002 -39.152779000000002,177.822021000000007 -39.114445000000003,177.823195999999996 -39.110115,177.82351700000001 -39.105110000000003,177.82119800000001 -39.101275999999999,177.816696000000007 -39.099274,177.680266999999986 -39.075279000000002,177.628845000000013 -39.071114,177.426085999999998 -39.064163,177.387755999999996 -39.077781999999999,177.246917999999994 -39.128334000000002,177.206085000000002 -39.143616000000002,177.149138999999991 -39.165000999999997,177.054961999999989 -39.204445,176.935790999999995 -39.349997999999999,176.931365999999997 -39.355559999999997,176.903870000000012 -39.398055999999997,176.898865 -39.412216,176.89776599999999 -39.438048999999999,176.899414000000007 -39.446387999999999,176.946625000000012 -39.664444000000003,177.01080300000001 -39.654998999999997,177.107178000000005 -39.660828000000002,177.116913000000011 -39.662216,177.120789000000002 -39.66861,177.119110000000006 -39.676108999999997,177.115783999999991 -39.682502999999997,177.08273299999999 -39.729996,177.073577999999998 -39.741385999999999,177.068024000000008 -39.746108999999997,177.059692000000013 -39.749167999999997,177.050262000000004 -39.751396,177.033874999999995 -39.757506999999997,177.028045999999989 -39.762504999999997,177.023590000000013 -39.768059,177.020263999999997 -39.774718999999997,176.894713999999993 -40.034728999999999,176.890533000000005 -40.049728000000002,176.889983999999998 -40.058052000000004,176.89498900000001 -40.082779000000002,176.893035999999995 -40.090279000000002,176.874114999999989 -40.121383999999999,176.834136999999998 -40.181671,176.808319000000012 -40.216659999999997,176.796935999999988 -40.226387000000003,176.687195000000003 -40.321387999999999,176.644135000000006 -40.379997000000003,176.628296000000006 -40.421944000000003,176.539977999999991 -40.495002999999997,176.521362000000011 -40.513893000000003,176.500823999999994 -40.535004,176.441924999999998 -40.600281000000003,176.405243000000013 -40.643889999999999,176.386108000000007 -40.675002999999997,176.35522499999999 -40.688606,176.349396000000013 -40.693610999999997,176.288574000000011 -40.793892,176.239136000000002 -40.90889,176.22079500000001 -40.931671,176.195526 -40.941665999999998,176.172760000000011 -40.952224999999999,176.158600000000007 -40.959999000000003,176.152771 -40.964722000000002,176.142212 -40.975273,176.134154999999993 -40.987502999999997,176.120789000000002 -41.013618,176.11300700000001 -41.035277999999998,176.098297000000002 -41.087218999999997,176.087463000000014 -41.116112,176.080811000000011 -41.129165999999998,176.062195000000003 -41.151938999999999,175.984679999999997 -41.231383999999998,175.955230999999998 -41.255279999999999,175.819121999999993 -41.347220999999998,175.743561 -41.392226999999998,175.736358999999993 -41.396110999999998,175.557738999999998 -41.485000999999997,175.471069 -41.541389000000002,175.427459999999996 -41.564444999999999,175.323028999999991 -41.614449,175.313292999999987 -41.616394,175.230804000000006 -41.620834000000002,175.222197999999992 -41.618332000000002,175.21691899999999 -41.612777999999999,175.184692000000013 -41.535834999999999,175.181915000000004 -41.519447,175.181091000000009 -41.500838999999999,175.188568000000004 -41.461112999999997,175.193024000000008 -41.446106,175.193848000000003 -41.437775000000002,175.191070999999994 -41.430557,175.186095999999992 -41.425002999999997,175.080261000000007 -41.385559,175.063018999999997 -41.380279999999999,175.05304000000001 -41.378608999999997,175.045532000000009 -41.378608999999997,175.027190999999988 -41.381667999999998,174.993286000000012 -41.393332999999998,174.985779000000008 -41.397224,174.972747999999996 -41.405830000000002,174.960509999999999 -41.415275999999999,174.949982000000006 -41.425559999999997,174.944976999999994 -41.431114,174.94165000000001 -41.437775000000002,174.936919999999986 -41.443328999999999,174.918578999999994 -41.448051,174.908600000000007 -41.448334000000003,174.872467 -41.429442999999999,174.86605800000001 -41.425002999999997,174.861084000000005 -41.419724000000002,174.861633000000012 -41.347496,174.863861000000014 -41.340279000000002,174.870789000000002 -41.327224999999999,174.87912 -41.315002,174.883881000000002 -41.309441,174.894440000000003 -41.290000999999997,174.89776599999999 -41.282501000000003,174.899993999999992 -41.275002,174.901916999999997 -41.258338999999999,174.901916999999997 -41.251114,174.898865 -41.234444000000003,174.89498900000001 -41.228050000000003,174.887482000000006 -41.224442000000003,174.827179 -41.218887000000002,174.818848000000003 -41.221938999999999,174.787475999999998 -41.244446000000003,174.778045999999989 -41.255836000000002,174.774414000000007 -41.262222,174.771087999999992 -41.278053,174.778594999999996 -41.281387000000002,174.796082000000013 -41.286949,174.818024000000008 -41.284728999999999,174.824127000000004 -41.289169,174.829407000000003 -41.294724000000002,174.833313000000004 -41.301108999999997,174.832184000000012 -41.309441,174.82995600000001 -41.316665999999998,174.826355000000007 -41.323334000000003,174.821625000000012 -41.328887999999999,174.815796000000006 -41.333610999999998,174.807189999999991 -41.336387999999999,174.744689999999991 -41.347496,174.700531000000012 -41.344444000000003,174.671906000000007 -41.338332999999999,174.654694000000006 -41.333061,174.648314999999997 -41.328612999999997,174.629669000000007 -41.315002,174.59191899999999 -41.27861,174.591644000000002 -41.271385000000002,174.594116000000014 -41.263893000000003,174.601074000000011 -41.250838999999999,174.608306999999996 -41.237777999999999,174.61300700000001 -41.232216,174.619110000000006 -41.23111,174.627746999999999 -41.233887000000003,174.637482000000006 -41.235557999999997,174.648590000000013 -41.234444000000003,174.666931000000005 -41.229720999999998,174.681365999999997 -41.221938999999999,174.694702000000007 -41.213614999999997,174.712738000000002 -41.199440000000003,174.718567000000007 -41.194716999999997,174.800812000000008 -41.100281000000003,174.844421000000011 -41.041671999999998,174.874390000000005 -41.018059,174.882721000000004 -41.015006999999997,174.892486999999988 -41.013061999999998,174.901093000000003 -41.010283999999999,174.908324999999991 -41.006393000000003,174.932189999999991 -40.987502999999997,174.94165000000001 -40.976387000000003,174.945251000000013 -40.969718999999998,174.947478999999987 -40.962218999999997,175.014983999999998 -40.84861,175.09857199999999 -40.755836000000002,175.112731999999994 -40.738892,175.120789000000002 -40.726944000000003,175.127746999999999 -40.713614999999997,175.164153999999996 -40.631943,175.169708000000014 -40.616942999999999,175.171906000000007 -40.609726000000002,175.187468999999993 -40.530830000000002,175.23800700000001 -40.329726999999998,175.23135400000001 -40.280830000000002,175.201629999999994 -40.181671,175.196349999999995 -40.166946000000003,175.178314 -40.134171000000002,175.15554800000001 -40.095832999999999,175.071625000000012 -40.003059,175.055542000000003 -39.987777999999999,175.022217000000012 -39.958053999999997,174.986358999999993 -39.93,174.974120999999997 -39.920836999999999,174.960784999999987 -39.912773,174.938873 -39.902222000000002,174.923034999999999 -39.895836000000003,174.836638999999991 -39.865004999999996,174.828307999999993 -39.862502999999997,174.790802000000014 -39.854720999999998,174.781096999999988 -39.853057999999997,174.751373 -39.865555,174.740509000000003 -39.866661,174.729674999999986 -39.865836999999999,174.57607999999999 -39.829169999999998,174.558013999999986 -39.824722,174.549408 -39.822226999999998,174.542205999999993 -39.818610999999997,174.523865 -39.805,174.421356000000003 -39.726944000000003,174.410521999999986 -39.716942000000003,174.376068000000004 -39.678612,174.353577 -39.639999000000003,174.348846000000009 -39.634444999999999,174.336638999999991 -39.625557,174.316070999999994 -39.613892,174.30886799999999 -39.610283000000003,174.217194000000006 -39.579726999999998,174.208862000000011 -39.577224999999999,174.040802000000014 -39.552779999999998,173.997741999999988 -39.551392,173.986908 -39.550552000000003,173.970245000000006 -39.545279999999998,173.963012999999989 -39.541671999999998,173.871062999999992 -39.483330000000002,173.851898000000006 -39.470551,173.839966000000004 -39.461387999999999,173.810790999999995 -39.4375,173.79525799999999 -39.421944000000003,173.786652000000004 -39.409996,173.775817999999987 -39.390839,173.769713999999993 -39.376944999999999,173.762206999999989 -39.354720999999998,173.754424999999998 -39.305,173.751923000000005 -39.288612,173.751647999999989 -39.269996999999996,173.781921000000011 -39.191383000000002,173.785247999999996 -39.184998,173.800536999999991 -39.169167000000002,173.82995600000001 -39.145836000000003,173.844421000000011 -39.138336000000002,173.868010999999996 -39.128883000000002,173.892761000000007 -39.120552000000004,174.011108000000007 -39.073334000000003,174.114685000000009 -39.024445,174.187744000000009 -38.988608999999997,174.209136999999998 -38.977218999999998,174.226623999999987 -38.972496,174.248016000000007 -38.970551,174.259978999999987 -38.970275999999998,174.281372000000005 -38.969994,174.293029999999987 -38.969994,174.313292999999987 -38.972496,174.351348999999999 -38.979438999999999,174.375244000000009 -38.979163999999997,174.384704999999997 -38.977218999999998,174.392761000000007 -38.974442000000003,174.456359999999989 -38.940277000000002,174.546082000000013 -38.871941,174.557738999999998 -38.860557999999997,174.568024000000008 -38.850281000000003,174.587738000000002 -38.828887999999999,174.594421000000011 -38.815834000000002,174.603302000000014 -38.786118000000002,174.608582000000013 -38.763061999999998,174.625518999999997 -38.677779999999998,174.642486999999988 -38.590836000000003,174.681091000000009 -38.379165999999998,174.724396000000013 -38.185828999999998,174.838561999999996 -38.157218999999998,174.848021999999986 -38.156944000000003,174.85635400000001 -38.154167,174.926636000000002 -38.116112,174.932465000000008 -38.111389000000003,174.940246999999999 -38.101112,174.898590000000013 -38.075004999999997,174.877166999999986 -38.064163,174.892486999999988 -37.976387000000003,174.893585000000002 -37.969994,174.868286000000012 -37.943610999999997,174.861084000000005 -37.939995000000003,174.85522499999999 -37.944716999999997,174.834686000000005 -37.963614999999997,174.830261000000007 -37.969161999999997,174.828033000000005 -37.976661999999997,174.828583000000009 -37.995002999999997,174.822754000000003 -37.999724999999998,174.814696999999995 -38.002502,174.804137999999995 -38.001944999999999,174.797211000000004 -37.998336999999999,174.791077 -37.993614,174.786376999999987 -37.988334999999999,174.783874999999995 -37.980826999999998,174.783600000000007 -37.971663999999997,174.788025000000005 -37.868332000000002,174.788879000000009 -37.860000999999997,174.791077 -37.852783000000002,174.795532000000009 -37.846947,174.819702000000007 -37.829169999999998,174.826629999999994 -37.825279000000002,174.841339000000005 -37.818610999999997,174.872741999999988 -37.806106999999997,174.883330999999998 -37.805,174.903045999999989 -37.807502999999997,174.945251000000013 -37.810555,174.967467999999997 -37.809165999999998,174.975525000000005 -37.806389000000003,174.974975999999998 -37.75,174.974670000000003 -37.740836999999999,174.966644000000002 -37.739998,174.951355000000007 -37.743057,174.94442699999999 -37.745002999999997,174.93081699999999 -37.752502,174.906921000000011 -37.774169999999998,174.870789000000002 -37.783057999999997,174.861633000000012 -37.785004,174.848297000000002 -37.769722000000002,174.828307999999993 -37.710830999999999,174.764160000000004 -37.527779000000002,174.744415000000004 -37.487502999999997,174.724975999999998 -37.447220000000002,174.717467999999997 -37.425002999999997,174.714690999999988 -37.408607000000003,174.714690999999988 -37.399445,174.719116000000014 -37.393616000000002,174.725799999999992 -37.389999000000003,174.744415000000004 -37.385834000000003,174.760528999999991 -37.380279999999999,174.767486999999988 -37.376389000000003,174.773041000000006 -37.371665999999998,174.831635000000006 -37.308052000000004,174.840789999999998 -37.296951,174.840515000000011 -37.291389000000002,174.82995600000001 -37.290557999999997,174.821899000000002 -37.291671999999998,174.812744000000009 -37.293616999999998,174.804687999999999 -37.296393999999999,174.797760000000011 -37.300277999999999,174.766083000000009 -37.321114,174.754700000000014 -37.330559,174.751373 -37.336945,174.744965000000008 -37.359169,174.740509000000003 -37.364722999999998,174.733582000000013 -37.368606999999997,174.724120999999997 -37.368889000000003,174.717194000000006 -37.365279999999998,174.711365 -37.360557999999997,174.701629999999994 -37.349724000000002,174.69442699999999 -37.336945,174.660187000000008 -37.273311999999997,174.645813000000004 -37.236389000000003,174.639709000000011 -37.224442000000003,174.599975999999998 -37.153885000000002,174.578307999999993 -37.115555,174.569976999999994 -37.103614999999998,174.555542000000003 -37.087502,174.551909999999992 -37.080832999999998,174.549712999999997 -37.073616,174.55304000000001 -37.067222999999998,174.558593999999999 -37.0625,174.568848000000003 -37.061385999999999,174.644135000000006 -37.061110999999997,174.661376999999987 -37.065551999999997,174.664977999999991 -37.071944999999999,174.666381999999999 -37.080283999999999,174.661925999999994 -37.085830999999999,174.650542999999999 -37.095275999999998,174.646087999999992 -37.100838000000003,174.648590000000013 -37.108055,174.703856999999999 -37.197777000000002,174.733856000000003 -37.196106,174.716644000000002 -37.154167,174.72357199999999 -37.150275999999998,174.87912 -37.088889999999999,174.887482000000006 -37.059165999999998,174.795532000000009 -37.023055999999997,174.804413000000011 -36.972220999999998,174.824982000000006 -36.960830999999999,174.829407000000003 -36.955002,174.83273299999999 -36.948608,174.828033000000005 -36.943053999999997,174.818848000000003 -36.941383000000002,174.770263999999997 -36.936661,174.696625000000012 -36.93972,174.686095999999992 -36.940834000000002,174.659697999999992 -36.947495000000004,174.653045999999989 -36.951393000000003,174.641662999999994 -36.960830999999999,174.622467 -36.982216,174.619110000000006 -36.988892,174.617187999999999 -36.996108999999997,174.600525000000005 -37.022224,174.524688999999995 -37.045555,174.515533000000005 -37.045555,174.508605999999986 -37.041946000000003,174.502472000000012 -37.037506,174.498016000000007 -37.031944000000003,174.490783999999991 -37.019165,174.484679999999997 -37.005561999999998,174.459228999999993 -36.944031000000003,174.451904000000013 -36.923889000000003,174.446930000000009 -36.909163999999997,174.443024000000008 -36.893616000000002,174.439147999999989 -36.868606999999997,174.436645999999996 -36.852226000000002,174.43386799999999 -36.835555999999997,174.427764999999994 -36.812775000000002,174.422760000000011 -36.798057999999997,174.416655999999989 -36.784171999999998,174.409697999999992 -36.771385000000002,174.406096999999988 -36.765006999999997,174.390533000000005 -36.740279999999998,174.344299000000007 -36.679336999999997,174.301085999999998 -36.62722,174.284973000000008 -36.612777999999999,174.267486999999988 -36.599167,174.236908 -36.568061999999998,174.208862000000011 -36.535277999999998,174.187744000000009 -36.496948000000003,174.17804000000001 -36.467498999999997,174.177764999999994 -36.458336000000003,174.178864000000004 -36.449997000000003,174.181091000000009 -36.442497000000003,174.184417999999994 -36.436110999999997,174.189972000000012 -36.431389000000003,174.196930000000009 -36.427779999999998,174.20495600000001 -36.428612,174.24383499999999 -36.440834000000002,174.251923000000005 -36.443610999999997,174.257751000000013 -36.448051,174.300262000000004 -36.515839,174.348846000000009 -36.601944000000003,174.367919999999998 -36.629165999999998,174.370728000000014 -36.6325,174.422484999999995 -36.667220999999998,174.430542000000003 -36.668059999999997,174.453033000000005 -36.651108,174.456359999999989 -36.644722000000002,174.465515000000011 -36.582779000000002,174.465515000000011 -36.532218999999998,174.442474000000004 -36.414718999999998,174.422211000000004 -36.366112,174.41885400000001 -36.370834000000002,174.391937000000013 -36.395004,174.384978999999987 -36.398887999999999,174.377166999999986 -36.401665,174.303864000000004 -36.395279000000002,174.296935999999988 -36.391669999999998,174.285247999999996 -36.3825,174.276916999999997 -36.370552000000004,174.26998900000001 -36.357779999999998,174.268585000000002 -36.349442000000003,174.268585000000002 -36.342224000000002,174.292205999999993 -36.316947999999996,174.299988000000013 -36.314163,174.308013999999986 -36.316947999999996,174.325531000000012 -36.330283999999999,174.334686000000005 -36.332222000000002,174.36883499999999 -36.331673000000002,174.376891999999998 -36.330832999999998,174.421248999999989 -36.310611999999999,174.50692699999999 -36.267220000000002,174.518311000000011 -36.258057,174.521636999999998 -36.251396,174.519135000000006 -36.245834000000002,174.505248999999992 -36.231383999999998,174.413299999999992 -36.263061999999998,174.378296000000006 -36.286667,174.364685000000009 -36.294167000000002,174.346619000000004 -36.298057999999997,174.336365 -36.298889000000003,174.305237000000005 -36.287506,174.365233999999987 -36.260002,174.442200000000014 -36.169724000000002,174.396087999999992 -36.144447,174.396362000000011 -36.151938999999999,174.394135000000006 -36.159163999999997,174.373290999999995 -36.206389999999999,174.369965000000008 -36.213057999999997,174.358856000000003 -36.222220999999998,174.345245000000006 -36.229720999999998,174.337463000000014 -36.232773000000002,174.33273299999999 -36.229163999999997,174.307738999999998 -36.176949,174.282745000000006 -36.121108999999997,174.274993999999992 -36.118332000000002,174.239409999999992 -36.111389000000003,174.229126000000008 -36.112502999999997,174.195251000000013 -36.131110999999997,174.188568000000004 -36.144165,174.185790999999995 -36.171944000000003,174.191345000000013 -36.176392,174.19830300000001 -36.18,174.217743000000013 -36.182502999999997,174.226898000000006 -36.182502999999997,174.236084000000005 -36.180557,174.244110000000006 -36.183059999999998,174.287749999999988 -36.210281000000002,174.312468999999993 -36.236663999999998,174.314696999999995 -36.243889000000003,174.267212 -36.270279000000002,174.259430000000009 -36.273055999999997,174.251373 -36.272499000000003,174.065796000000006 -36.168334999999999,173.999114999999989 -36.121108999999997,173.994415000000004 -36.115836999999999,173.99105800000001 -36.109444000000003,173.931091000000009 -35.981940999999999,173.938568000000004 -35.934998,173.947478999999987 -35.923889000000003,173.948577999999998 -35.915550000000003,173.946075000000008 -35.908051,173.913879000000009 -35.86972,173.908324999999991 -35.874442999999999,173.903870000000012 -35.879997000000003,173.904967999999997 -35.888336000000002,173.921356000000003 -36.003059,173.980804000000006 -36.121383999999999,173.987731999999994 -36.134171000000002,173.992461999999989 -36.139724999999999,174.124390000000005 -36.263618,174.176085999999998 -36.276947,174.180542000000003 -36.282501000000003,174.198853000000014 -36.343887000000002,174.199982000000006 -36.352226000000002,174.198028999999991 -36.368606999999997,174.194702000000007 -36.375275000000002,174.189147999999989 -36.379722999999998,174.115233999999987 -36.40361,174.089966000000004 -36.411385000000003,174.080811000000011 -36.409438999999999,174.06942699999999 -36.400275999999998,174.065796000000006 -36.393889999999999,174.057465000000008 -36.374718,174.049133000000012 -36.353614999999998,174.044433999999995 -36.338889999999999,174.039703000000003 -36.323334000000003,174.031096999999988 -36.293059999999997,174.020537999999988 -36.273887999999999,173.82607999999999 -36.032501000000003,173.737457000000006 -35.933608999999997,173.727172999999993 -35.923614999999998,173.590515000000011 -35.778053,173.398865 -35.573891000000003,173.395537999999988 -35.567504999999997,173.398865 -35.553612,173.446625000000012 -35.440277000000002,173.465789999999998 -35.429169000000002,173.501923000000005 -35.419724000000002,173.506378000000012 -35.425277999999999,173.540253000000007 -35.430832000000002,173.629943999999995 -35.356667000000002,173.65554800000001 -35.322502,173.65554800000001 -35.313332000000003,173.564147999999989 -35.278053,173.556091000000009 -35.280830000000002,173.551636000000002 -35.286391999999999,173.549712999999997 -35.302779999999998,173.549712999999997 -35.321114,173.551909999999992 -35.328612999999997,173.566924999999998 -35.344161999999997,173.568024000000008 -35.361671,173.566924999999998 -35.36972,173.559143000000006 -35.372771999999998,173.439696999999995 -35.376106,173.416077 -35.384444999999999,173.410247999999996 -35.388893000000003,173.391356999999999 -35.423057999999997,173.39498900000001 -35.449722,173.396087999999992 -35.458053999999997,173.392761000000007 -35.482773000000002,173.386382999999995 -35.523330999999999,173.380524000000008 -35.528053,173.37384 -35.524169999999998,173.306915000000004 -35.449165,173.237731999999994 -35.370277000000002,173.154144000000002 -35.276665,173.103302000000014 -35.226104999999997,173.09191899999999 -35.216942000000003,173.087463000000014 -35.211387999999999,173.09191899999999 -35.1875,173.098846000000009 -35.183608999999997,173.119110000000006 -35.185555,173.12802099999999 -35.1875,173.134704999999997 -35.191108999999997,173.14498900000001 -35.191940000000002,173.152771 -35.189163,173.163879000000009 -35.179169000000002,173.168578999999994 -35.173614999999998,173.18081699999999 -35.156104999999997,173.187468999999993 -35.143332999999998,173.191924999999998 -35.128334000000002,173.196349999999995 -35.104446000000003,173.197478999999987 -35.09639,173.198577999999998 -35.078887999999999,173.198577999999998 -35.051108999999997,173.193848000000003 -35.027222000000002,173.189423000000005 -35.012779000000002,173.179413000000011 -34.993332000000002,173.175812000000008 -34.986946000000003,173.159149000000014 -34.958336000000003,173.151093000000003 -34.946663,173.137755999999996 -34.93,172.947204999999997 -34.716942000000003,172.828033000000005 -34.584442000000003,172.812468999999993 -34.568893000000003,172.722473000000008 -34.495277000000002,172.739136000000002 -34.435555,172.900817999999987 -34.414718999999998,172.911925999999994 -34.414718999999998,173.020813000000004 -34.422226000000002,173.038879000000009 -34.436942999999999,173.043304000000006 -34.517775999999998,173.039977999999991 -34.522224,173.033324999999991 -34.525832999999999,173.024414000000007 -34.527779000000002,173.016662999999994 -34.52861,173.007476999999994 -34.526947,172.997467 -34.498336999999999,172.984130999999991 -34.472771000000002,172.961914000000007 -34.465279000000002,172.955230999999998 -34.468887000000002,172.908324999999991 -34.544167000000002,172.912749999999988 -34.549728000000002,172.923858999999993 -34.558891000000003,172.936095999999992 -34.567222999999998,172.973021999999986 -34.581116000000002,173.053314 -34.665550000000003,173.057738999999998 -34.680283000000003,173.110503999999992 -34.791389000000002,173.120789000000002 -34.810555,173.128570999999994 -34.822502,173.133026 -34.828055999999997,173.13857999999999 -34.832504,173.151916999999997 -34.839995999999999,173.213593000000003 -34.871941,173.242737000000005 -34.884726999999998,173.273314999999997 -34.940834000000002,173.268859999999989 -34.946387999999999,173.262206999999989 -34.959167,173.259978999999987 -34.966659999999997,173.258881000000002 -34.974716,173.259978999999987 -34.983055,173.264709000000011 -35.014449999999997,173.269135000000006 -35.019722000000002,173.317474000000004 -35.018889999999999,173.328583000000009 -35.009444999999999,173.358856000000003 -34.98111,173.36300700000001 -34.975555,173.366364000000004 -34.968887000000002,173.373259999999988 -34.936774999999997,173.371246000000014 -34.927444,173.400817999999987 -34.863334999999999,173.426085999999998 -34.82,173.450806 -34.807777000000002,173.500274999999988 -34.864722999999998,173.499114999999989 -34.871108999999997,173.492461999999989 -34.874718,173.452453999999989 -34.887779000000002,173.443297999999999 -34.889724999999999,173.433319000000012 -34.890555999999997,173.413025000000005 -34.888893000000003,173.405243000000013 -34.892502,173.399719000000005 -34.897224,173.399719000000005 -34.906387000000002,173.402190999999988 -34.913887000000003,173.411590999999987 -34.931778,173.419128 -34.945830999999998,173.426909999999992 -34.957779000000002,173.431641000000013 -34.963332999999999,173.44165000000001 -34.973328000000002,173.454131999999987 -34.981667000000002,173.467467999999997 -34.988892,173.475525000000005 -34.991669000000002,173.493286000000012 -34.995277000000002,173.541655999999989 -34.988608999999997,173.561645999999996 -34.958893000000003,173.562468999999993 -34.950836000000002,173.566924999999998 -34.936110999999997,173.572478999999987 -34.931389000000003,173.579131999999987 -34.927779999999998,173.589416999999997 -34.928612,173.83914200000001 -35.004173000000002,174.101074000000011 -35.121108999999997,174.098297000000002 -35.161667,174.091644000000002 -35.158051,174.056641000000013 -35.155555999999997,174.021911999999986 -35.164161999999997,174.008026 -35.207504,174.008026 -35.215004,174.011382999999995 -35.221381999999998,174.018311000000011 -35.224997999999999,174.093841999999995 -35.225273,174.100525000000005 -35.228881999999999,174.143585000000002 -35.328612999999997,174.208008000000007 -35.323334000000003,174.218018 -35.322226999999998,174.247741999999988 -35.27861,174.319976999999994 -35.232773000000002,174.383881000000002 -35.337775999999998,174.461638999999991 -35.445273999999998,174.491913000000011 -35.485275,174.575806 -35.601944000000003,174.577179 -35.610000999999997,174.577147999999994 -35.618088,174.569976999999994 -35.648055999999997,174.563292999999987 -35.651665,174.530272999999994 -35.649445,174.520263999999997 -35.648612999999997,174.513306 -35.645004,174.505248999999992 -35.642502,174.479126000000008 -35.641945,174.47357199999999 -35.646393000000003,174.474975999999998 -35.654716,174.518311000000011 -35.724167,174.523041000000006 -35.729438999999999,174.554137999999995 -35.750281999999999,174.561919999999986 -35.753059,174.583862000000011 -35.764724999999999,174.60244800000001 -35.844444000000003,174.596924 -35.849167,174.58914200000001 -35.851944000000003,174.577758999999986 -35.852226000000002,174.560790999999995 -35.847777999999998,174.554961999999989 -35.843330000000002,174.538574000000011 -35.819450000000003,174.523314999999997 -35.796669,174.519713999999993 -35.790283000000002,174.49105800000001 -35.769447,174.361908 -35.723328000000002,174.357451999999995 -35.72361,174.34857199999999 -35.734726000000002,174.346924 -35.833061,174.350525000000005 -35.839438999999999,174.35522499999999 -35.845001000000003,174.360779000000008 -35.849442000000003,174.381348000000003 -35.851112,174.384704999999997 -35.844718999999998,174.385528999999991 -35.828887999999999,174.391083000000009 -35.824173000000002,174.398865 -35.821387999999999,174.437468999999993 -35.822777000000002,174.476074000000011 -35.824173000000002,174.486358999999993 -35.824722,174.519713999999993 -35.844718999999998,174.525542999999999 -35.849167,174.524414000000007 -35.855559999999997,174.521362000000011 -35.862220999999998,174.501373 -35.889999000000003,174.496917999999994 -35.895553999999997,174.487182999999987 -35.915000999999997,174.495513999999986 -35.988608999999997,174.498016000000007 -35.994163999999998,174.514160000000004 -36.008614,174.56942699999999 -36.037224000000002,174.578583000000009 -36.038894999999997,174.587738000000002 -36.038894999999997,174.596619000000004 -36.036667,174.606902999999988 -36.037506,174.612731999999994 -36.042228999999999,174.622192000000013 -36.053055,174.62912 -36.065834000000002,174.629394999999988 -36.075004999999997,174.616364000000004 -36.100861000000002)),((171.185241999999988 -44.938332000000003,171.182129000000003 -44.94173,171.175017999999994 -44.949902000000002,171.167923000000002 -44.959850000000003,171.165436 -44.966599000000002,171.164703000000003 -44.970275999999998,171.163299999999992 -44.978332999999999,171.149719000000005 -44.996665999999998,171.07995600000001 -45.067222999999998,171.02664200000001 -45.103332999999999,170.975525000000005 -45.151108,170.966063999999989 -45.163055,170.961914000000007 -45.169167000000002,170.921630999999991 -45.243057,170.873566000000011 -45.358055,170.873290999999995 -45.367218,170.876891999999998 -45.373885999999999,170.871338000000009 -45.424171,170.859955000000014 -45.487502999999997,170.855804000000006 -45.493889000000003,170.750274999999988 -45.61972,170.674682999999987 -45.745002999999997,170.616913000000011 -45.839438999999999,170.55886799999999 -45.881667999999998,170.554413000000011 -45.888053999999997,170.555542000000003 -45.896110999999998,170.591063999999989 -45.894165,170.600525000000005 -45.891669999999998,170.608582000000013 -45.888053999999997,170.658600000000007 -45.858612,170.718018 -45.817504999999997,170.724670000000003 -45.813057,170.773314999999997 -45.782775999999998,170.781096999999988 -45.786391999999999,170.790802000000014 -45.806946000000003,170.790802000000014 -45.84639,170.788879000000009 -45.863892,170.783051 -45.878334000000002,170.776366999999993 -45.882773999999998,170.699982000000006 -45.911667,170.664429000000013 -45.908332999999999,170.57330300000001 -45.916663999999997,170.550536999999991 -45.919167000000002,170.484406000000007 -45.926949,170.452453999999989 -45.931946000000003,170.424408 -45.939438000000003,170.382721000000004 -45.956108,170.342467999999997 -45.97361,170.315246999999999 -45.991385999999999,170.309692000000013 -45.996948000000003,170.294433999999995 -46.013893000000003,170.281646999999992 -46.029442000000003,170.263610999999997 -46.051940999999999,170.256378000000012 -46.065551999999997,170.253051999999997 -46.081947,170.252472000000012 -46.09111,170.254424999999998 -46.107779999999998,170.252777000000009 -46.115836999999999,170.240783999999991 -46.146949999999997,170.237731999999994 -46.154167,170.226623999999987 -46.165000999999997,170.214416999999997 -46.174720999999998,170.193848000000003 -46.188048999999999,170.169433999999995 -46.198608,170.067748999999992 -46.246665999999998,169.911925999999994 -46.340279000000002,169.863585999999998 -46.371383999999999,169.858001999999999 -46.376663,169.849396000000013 -46.389442000000003,169.848021999999986 -46.416946000000003,169.849975999999998 -46.433326999999998,169.852172999999993 -46.440834000000002,169.853850999999992 -46.457504,169.850799999999992 -46.464722000000002,169.845245000000006 -46.469994,169.701904000000013 -46.558052000000004,169.631348000000003 -46.581947,169.458008000000007 -46.623328999999998,169.266388000000006 -46.656387000000002,169.133026 -46.670836999999999,169.107727000000011 -46.669167000000002,169.097197999999992 -46.666946000000003,169.084411999999986 -46.657501000000003,169.067200000000014 -46.635002,169.061919999999986 -46.675002999999997,169.053864000000004 -46.678612,169.008026 -46.680832000000002,168.883330999999998 -46.667777999999998,168.878296000000006 -46.661942000000003,168.861908 -46.628334000000002,168.862457000000006 -46.619446000000003,168.864409999999992 -46.611114999999998,168.864959999999996 -46.603889000000002,168.844970999999987 -46.563614,168.835784999999987 -46.560555,168.823853000000014 -46.561110999999997,168.733306999999996 -46.577499000000003,168.640533000000005 -46.603889000000002,168.633605999999986 -46.606392,168.614685000000009 -46.611114999999998,168.593018 -46.614165999999997,168.568848000000003 -46.615004999999996,168.516937000000013 -46.614165999999997,168.492737000000005 -46.613334999999999,168.442138999999997 -46.601500999999999,168.436630000000008 -46.599666999999997,168.446625000000012 -46.584003000000003,168.442200000000014 -46.575004999999997,168.454407000000003 -46.574447999999997,168.490509000000003 -46.573059,168.502472000000012 -46.574173000000002,168.506103999999993 -46.578887999999999,168.499114999999989 -46.583328000000002,168.505553999999989 -46.588051,168.551636000000002 -46.594444000000003,168.561371000000008 -46.591942000000003,168.566924999999998 -46.586661999999997,168.563599000000011 -46.580002,168.550812000000008 -46.570557,168.541655999999989 -46.567504999999997,168.391356999999999 -46.540000999999997,168.361908 -46.544449,168.353577 -46.547783000000003,168.351623999999987 -46.556106999999997,168.352172999999993 -46.564444999999999,168.362731999999994 -46.583885000000002,168.348236000000014 -46.582165000000003,168.352904999999993 -46.584499,168.359267999999986 -46.585830999999999,168.365082 -46.592666999999999,168.367248999999987 -46.596668,168.367599000000013 -46.601497999999999,168.364928999999989 -46.605331,168.35775799999999 -46.604500000000002,168.351409999999987 -46.603164999999997,168.275269000000009 -46.557777000000002,168.269135000000006 -46.535561,168.268311000000011 -46.529167,168.27664200000001 -46.525832999999999,168.286102 -46.523330999999999,168.307738999999998 -46.520553999999997,168.318297999999999 -46.520836000000003,168.318848000000003 -46.529167,168.321075000000008 -46.536667,168.328856999999999 -46.540557999999997,168.339416999999997 -46.539169,168.386658000000011 -46.497779999999999,168.392486999999988 -46.492226000000002,168.395537999999988 -46.485000999999997,168.396087999999992 -46.477775999999999,168.394135000000006 -46.470275999999998,168.37384 -46.421944000000003,168.36883499999999 -46.416106999999997,168.359679999999997 -46.415000999999997,168.350249999999988 -46.417503000000004,168.250274999999988 -46.400832999999999,168.211090000000013 -46.355277999999998,168.206085000000002 -46.351394999999997,168.194702000000007 -46.345551,168.185516000000007 -46.342498999999997,168.174988000000013 -46.340279000000002,168.116364000000004 -46.343612999999998,168.063873 -46.351669,167.955535999999995 -46.371383999999999,167.893035999999995 -46.387222,167.850799999999992 -46.399445,167.832184000000012 -46.398612999999997,167.824401999999992 -46.394447,167.753875999999991 -46.333885000000002,167.776916999999997 -46.312775000000002,167.781372000000005 -46.306389000000003,167.783600000000007 -46.298340000000003,167.781372000000005 -46.290840000000003,167.778045999999989 -46.284171999999998,167.701904000000013 -46.209442000000003,167.596924 -46.166389000000002,167.556641000000013 -46.156387000000002,167.546356000000003 -46.154167,167.534424 -46.152779000000002,167.483032000000009 -46.149726999999999,167.471069 -46.149994,167.460236000000009 -46.151389999999999,167.451904000000013 -46.154716,167.446075000000008 -46.159996,167.415526999999997 -46.204720000000002,167.356628 -46.254447999999996,167.280272999999994 -46.273055999999997,167.261108000000007 -46.267775999999998,167.238555999999988 -46.263893000000003,167.086638999999991 -46.240555,167.001373 -46.229163999999997,166.966063999999989 -46.224716,166.949982000000006 -46.223885000000003,166.915253000000007 -46.226104999999997,166.883026 -46.229996,166.836365 -46.232498,166.823028999999991 -46.231667000000002,166.768035999999995 -46.22361,166.726348999999999 -46.214165,166.717467999999997 -46.210830999999999,166.705230999999998 -46.201110999999997,166.670806999999996 -46.161667,166.67025799999999 -46.15361,166.684417999999994 -46.145004,166.693848000000003 -46.142775999999998,166.709411999999986 -46.135277000000002,166.738861000000014 -46.119163999999998,166.761230000000012 -46.093612999999998,166.784911999999991 -46.064945000000002,166.804748999999987 -46.033279,166.82995600000001 -46.003891000000003,166.854674999999986 -45.994163999999998,166.886932000000002 -45.990279999999998,166.943297999999999 -45.956108,166.949127000000004 -45.950836000000002,166.946930000000009 -45.945273999999998,166.939147999999989 -45.944716999999997,166.929687999999999 -45.947220000000002,166.836365 -45.981383999999998,166.828033000000005 -45.984444000000003,166.791350999999992 -46.005004999999997,166.785797000000002 -46.010283999999999,166.781096999999988 -46.016396,166.759308000000004 -46.035553,166.762969999999996 -46.038387,166.764969000000008 -46.042392999999997,166.763656999999995 -46.047221999999998,166.760162000000008 -46.050392000000002,166.740982000000002 -46.066059000000003,166.737793000000011 -46.066558999999998,166.670532000000009 -46.087218999999997,166.615783999999991 -46.090836000000003,166.613585999999998 -46.086387999999999,166.617461999999989 -46.059722999999998,166.621062999999992 -46.052498,166.640807999999993 -46.015006999999997,166.661652000000004 -45.991942999999999,166.625792999999987 -45.967216,166.492461999999989 -46.013061999999998,166.484406000000007 -46.014449999999997,166.474975999999998 -46.002785000000003,166.467194000000006 -45.990555,166.465239999999994 -45.983055,166.464690999999988 -45.839438999999999,166.468841999999995 -45.823059,166.472473000000008 -45.815834000000002,166.476898000000006 -45.809722999999998,166.537475999999998 -45.798889000000003,166.613861000000014 -45.801108999999997,166.652190999999988 -45.800277999999999,166.699982000000006 -45.798889000000003,166.881348000000003 -45.779998999999997,166.890807999999993 -45.777779000000002,166.974120999999997 -45.735000999999997,166.987182999999987 -45.709724,166.923034999999999 -45.705832999999998,166.912475999999998 -45.705275999999998,166.887482000000006 -45.705002,166.854126000000008 -45.707779000000002,166.825806 -45.714722000000002,166.809417999999994 -45.721381999999998,166.787475999999998 -45.689995000000003,166.775817999999987 -45.662773,166.81153900000001 -45.617942999999997,166.811217999999997 -45.613109999999999,166.812531000000007 -45.608111999999998,166.816710999999998 -45.605606000000002,166.869689999999991 -45.588779000000002,166.881026999999989 -45.586112999999997,166.88736 -45.585278000000002,166.895203000000009 -45.585608999999998,166.901366999999993 -45.587108999999998,166.912871999999993 -45.590946000000002,166.980255 -45.578612999999997,166.991913000000011 -45.580002,167.0 -45.576949999999997,167.005829000000006 -45.571671000000002,167.032470999999987 -45.527779000000002,167.041350999999992 -45.501396,166.989685000000009 -45.519165,166.891693000000004 -45.544724000000002,166.796875 -45.569389,166.791199000000006 -45.570720999999999,166.784836000000013 -45.571556,166.777023000000014 -45.571219999999997,166.710509999999999 -45.579445,166.704407000000003 -45.574447999999997,166.697204999999997 -45.554718,166.699127000000004 -45.546669,166.757476999999994 -45.425277999999999,166.801361000000014 -45.353614999999998,166.821625000000012 -45.320557,166.86883499999999 -45.279724000000002,166.880797999999999 -45.279167,167.008330999999998 -45.341667,167.038299999999992 -45.357779999999998,167.146941999999996 -45.427222999999998,167.16885400000001 -45.472496,167.205230999999998 -45.477775999999999,167.211914000000007 -45.475273,167.21414200000001 -45.467216,167.209411999999986 -45.461387999999999,167.173584000000005 -45.422775,167.158019999999993 -45.406661999999997,167.134978999999987 -45.386116,167.12912 -45.381385999999999,167.115509000000003 -45.372222999999998,167.097747999999996 -45.366112,167.087463000000014 -45.363616999999998,167.061645999999996 -45.345001000000003,167.051085999999998 -45.333328000000002,167.081421000000006 -45.325333,167.08407600000001 -45.321666999999998,167.092407000000009 -45.316498000000003,167.097243999999989 -45.314498999999998,167.114227 -45.310333,167.163574000000011 -45.302833999999997,167.169922000000014 -45.302998000000002,167.173584000000005 -45.305999999999997,167.176422000000002 -45.309330000000003,167.17756700000001 -45.313834999999997,167.212738000000002 -45.313332000000003,167.218841999999995 -45.318336000000002,167.232178000000005 -45.327224999999999,167.239685000000009 -45.331116000000002,167.248566000000011 -45.334167,167.260254000000003 -45.335830999999999,167.270813000000004 -45.334442000000003,167.301636000000002 -45.329445,167.309692000000013 -45.326110999999997,167.307738999999998 -45.318610999999997,167.300262000000004 -45.314444999999999,167.19464099999999 -45.271445999999997,167.138290000000012 -45.268943999999998,167.099471999999992 -45.272114000000002,167.094146999999992 -45.271278000000002,167.08964499999999 -45.268776000000003,167.002196999999995 -45.201110999999997,166.996917999999994 -45.145836000000003,167.146362000000011 -45.001671000000002,167.198577999999998 -44.956108,167.204407000000003 -44.951110999999997,167.228302000000014 -44.930832000000002,167.24105800000001 -44.921387000000003,167.260528999999991 -44.907501000000003,167.267486999999988 -44.903053,167.312744000000009 -44.875,167.320800999999989 -44.871383999999999,167.393462999999997 -44.862999000000002,167.398987000000005 -44.861496000000002,167.404312000000004 -44.863498999999997,167.421798999999993 -44.894168999999998,167.422974000000011 -44.898665999999999,167.420638999999994 -44.908496999999997,167.417968999999999 -44.912166999999997,167.440796000000006 -44.928612,167.439972000000012 -44.9375,167.441924999999998 -44.945,167.459686000000005 -44.99472,167.497741999999988 -45.003891000000003,167.507202000000007 -45.001396,167.508224000000013 -45.0,167.511658000000011 -44.995277000000002,167.511108000000007 -44.986946000000003,167.47908000000001 -44.903446000000002,167.465912000000003 -44.876441999999997,167.462752999999992 -44.867947,167.461578000000003 -44.863444999999999,167.460097999999988 -44.853946999999998,167.459411999999986 -44.843944999999998,167.459914999999995 -44.838444000000003,167.448577999999998 -44.795279999999998,167.453033000000005 -44.788894999999997,167.458587999999992 -44.783614999999998,167.59970100000001 -44.683883999999999,167.743010999999996 -44.611671,167.838866999999993 -44.498610999999997,167.850249999999988 -44.488052000000003,167.949982000000006 -44.40361,167.963593000000003 -44.395004,168.034973000000008 -44.353614999999998,168.12802099999999 -44.316947999999996,168.141662999999994 -44.308052000000004,168.144713999999993 -44.300834999999999,168.144135000000006 -44.292503000000004,168.124099999999999 -44.251404,168.143311000000011 -44.253059,168.153594999999996 -44.251396,168.169708000000014 -44.24472,168.288299999999992 -44.172775,168.29385400000001 -44.167503000000004,168.336638999999991 -44.123885999999999,168.339966000000004 -44.116661,168.337738000000002 -44.109169,168.334411999999986 -44.102783000000002,168.336365 -44.094444000000003,168.369689999999991 -44.043334999999999,168.374968999999993 -44.037781000000003,168.383026 -44.034447,168.402771 -44.029724000000002,168.672211000000004 -43.987777999999999,168.676909999999992 -43.993614,168.683043999999995 -43.998336999999999,168.690246999999999 -44.002228000000002,168.715239999999994 -44.012222,168.723021999999986 -44.012504999999997,168.753875999999991 -44.010002,168.764160000000004 -44.008614,168.824401999999992 -43.988334999999999,168.858582000000013 -43.976661999999997,168.866364000000004 -43.973328000000002,168.879669000000007 -43.964447,168.885254000000003 -43.959167,168.961914000000007 -43.90361,169.080765000000014 -43.848472999999998,169.142212 -43.794167000000002,169.224396000000013 -43.743332000000002,169.271636999999998 -43.722496,169.387482000000006 -43.679169000000002,169.491318000000007 -43.643467,169.539153999999996 -43.633614,169.62661700000001 -43.613892,169.64498900000001 -43.608893999999999,169.652771 -43.605559999999997,169.660521999999986 -43.601944000000003,169.721619000000004 -43.573334000000003,169.728302000000014 -43.568893000000003,169.739136000000002 -43.558052000000004,169.767486999999988 -43.522773999999998,169.790526999999997 -43.496665999999998,169.871062999999992 -43.406661999999997,169.884154999999993 -43.397781000000002,169.961638999999991 -43.371941,170.021911999999986 -43.352500999999997,170.028594999999996 -43.347777999999998,170.033874999999995 -43.342498999999997,170.038025000000005 -43.336112999999997,170.049408 -43.306946000000003,170.111358999999993 -43.254173000000002,170.288299999999992 -43.107779999999998,170.418029999999987 -43.052498,170.523041000000006 -43.010559,170.531921000000011 -43.008057,170.583037999999988 -42.990555,170.674347000000012 -42.958739999999999,170.704407000000003 -42.945830999999998,170.750549000000007 -42.924720999999998,170.781096999999988 -42.910553,170.794128 -42.901389999999999,171.065796000000006 -42.648055999999997,171.108306999999996 -42.608055,171.149719000000005 -42.563614,171.153594999999996 -42.55722,171.196075000000008 -42.476661999999997,171.225799999999992 -42.433608999999997,171.230255 -42.40889,171.235779000000008 -42.394165,171.247467 -42.375,171.260254000000003 -42.366112,171.270537999999988 -42.355003000000004,171.297760000000011 -42.310279999999999,171.304413000000011 -42.296669,171.309692000000013 -42.281944000000003,171.31665000000001 -42.249724999999998,171.321075000000008 -42.224716,171.322754000000003 -42.207222000000002,171.324401999999992 -42.18972,171.326355000000007 -42.172226000000002,171.329131999999987 -42.155830000000002,171.343841999999995 -42.110832000000002,171.361084000000005 -42.067779999999999,171.461638999999991 -41.859726000000002,171.51080300000001 -41.764449999999997,171.533051 -41.766396,171.557738999999998 -41.766663,171.569121999999993 -41.766112999999997,171.650817999999987 -41.761391000000003,171.663025000000005 -41.757781999999999,171.685790999999995 -41.746948000000003,171.790526999999997 -41.696387999999999,171.85522499999999 -41.652779000000002,171.886658000000011 -41.629997000000003,171.942200000000014 -41.550277999999999,172.02276599999999 -41.443053999999997,172.053864000000004 -41.417503000000004,172.064972000000012 -41.40361,172.122192000000013 -41.277779000000002,172.111633000000012 -41.236114999999998,172.10522499999999 -41.153053,172.106078999999994 -40.911385000000003,172.10635400000001 -40.893059,172.108856000000003 -40.885559,172.113861000000014 -40.879997000000003,172.186645999999996 -40.813332000000003,172.218567000000007 -40.785834999999999,172.22470100000001 -40.781109,172.255248999999992 -40.776947,172.263884999999988 -40.774169999999998,172.271362000000011 -40.770553999999997,172.299408 -40.755004999999997,172.348297000000002 -40.727493000000003,172.382721000000004 -40.698334000000003,172.426909999999992 -40.657775999999998,172.478302000000014 -40.613892,172.513320999999991 -40.598441999999999,172.517639000000003 -40.596783000000002,172.523482999999999 -40.597946,172.522644000000014 -40.602943000000003,172.521132999999992 -40.607277000000003,172.520813000000004 -40.625,172.519440000000003 -40.631385999999999,172.525542999999999 -40.6325,172.534149000000014 -40.631667999999998,172.571899000000002 -40.617775000000002,172.596343999999988 -40.601394999999997,172.62802099999999 -40.573891000000003,172.631621999999993 -40.567222999999998,172.631621999999993 -40.559998,172.608582000000013 -40.556946000000003,172.601348999999999 -40.558891000000003,172.597014999999999 -40.553333000000002,172.589690999999988 -40.558838000000002,172.583862000000011 -40.560004999999997,172.581024000000014 -40.556671,172.581848000000008 -40.551665999999997,172.589843999999999 -40.541172000000003,172.627166999999986 -40.511947999999997,172.633330999999998 -40.509171000000002,172.661376999999987 -40.502785000000003,172.712188999999995 -40.495552000000004,172.817748999999992 -40.504173000000002,172.861358999999993 -40.507781999999999,172.981628 -40.527222000000002,172.991332999999997 -40.529167,172.989959999999996 -40.53389,172.978026999999997 -40.53389,172.945251000000013 -40.530830000000002,172.895263999999997 -40.524445,172.797211000000004 -40.516112999999997,172.739959999999996 -40.516945,172.731628 -40.519722000000002,172.656921000000011 -40.653328000000002,172.701355000000007 -40.748336999999999,172.855804000000006 -40.853057999999997,172.865509000000003 -40.853057999999997,172.875244000000009 -40.851112,172.907195999999999 -40.828887999999999,172.930266999999986 -40.802222999999998,172.935241999999988 -40.796669,172.976623999999987 -40.781944000000003,172.985229000000004 -40.781112999999998,173.002196999999995 -40.786667,173.008330999999998 -40.791114999999998,173.013306 -40.796669,173.020537999999988 -40.809722999999998,173.051085999999998 -40.869446000000003,173.059692000000013 -40.962775999999998,173.059692000000013 -40.971938999999999,173.056091000000009 -40.978606999999997,173.031646999999992 -41.027495999999999,173.075806 -41.291114999999998,173.079680999999994 -41.297500999999997,173.085784999999987 -41.302222999999998,173.105529999999987 -41.313332000000003,173.168029999999987 -41.316108999999997,173.188873 -41.313332000000003,173.198853000000014 -41.311385999999999,173.207184000000012 -41.308608999999997,173.272217000000012 -41.274445,173.278320000000008 -41.269722000000002,173.32607999999999 -41.222496,173.340515000000011 -41.205832999999998,173.351623999999987 -41.195549,173.377166999999986 -41.178055,173.426085999999998 -41.150275999999998,173.598021999999986 -41.053612,173.606628 -41.052498,173.639709000000011 -41.073616,173.672760000000011 -41.070557,173.720519999999993 -41.060279999999999,173.727753000000007 -41.056389000000003,173.739959999999996 -41.047226000000002,173.744689999999991 -41.032501000000003,173.743286000000012 -41.024169999999998,173.738281 -41.018608,173.72744800000001 -41.019447,173.718841999999995 -41.022499000000003,173.696930000000009 -41.033614999999998,173.690796000000006 -41.038338000000003,173.682189999999991 -41.041114999999998,173.676085999999998 -41.036391999999999,173.673584000000005 -41.029167,173.674682999999987 -41.020836000000003,173.678314 -41.014449999999997,173.696625000000012 -41.000281999999999,173.751373 -40.976944000000003,173.800262000000004 -40.969161999999997,173.913299999999992 -40.931671,173.984679999999997 -40.896949999999997,173.994415000000004 -40.896667,174.02276599999999 -40.913055,174.027771 -40.91861,174.030272999999994 -40.925834999999999,174.03054800000001 -40.935271999999998,174.02941899999999 -40.943610999999997,174.022217000000012 -40.947220000000002,173.929961999999989 -40.992226000000002,173.832184000000012 -40.995002999999997,173.821075000000008 -40.994163999999998,173.782195999999999 -41.009171000000002,173.778594999999996 -41.015555999999997,173.769713999999993 -41.09861,173.778594999999996 -41.114449,173.794433999999995 -41.109444000000003,173.822204999999997 -41.080832999999998,173.821899000000002 -41.062218,173.836638999999991 -41.055,173.846343999999988 -41.053055,173.93081699999999 -41.049446000000003,173.946625000000012 -41.055832000000002,173.953033000000005 -41.060555,173.917755 -41.087502,173.887482000000006 -41.103332999999999,173.848846000000009 -41.144165,173.820526 -41.245834000000002,173.763306 -41.267502,173.76080300000001 -41.273055999999997,173.775817999999987 -41.289726000000002,173.788025000000005 -41.290557999999997,173.806365999999997 -41.289444000000003,174.03720100000001 -41.218330000000002,174.09970100000001 -41.198334000000003,174.128845000000013 -41.187218,174.133605999999986 -41.181671,174.133605999999986 -41.176108999999997,174.126068000000004 -41.174171,174.008605999999986 -41.175277999999999,174.001099000000011 -41.178885999999999,174.001373 -41.186385999999999,174.000274999999988 -41.194716999999997,173.993010999999996 -41.198334000000003,173.981902999999988 -41.199440000000003,173.932738999999998 -41.199997000000003,173.908324999999991 -41.199997000000003,173.899719000000005 -41.197495000000004,173.893585000000002 -41.192771999999998,173.887206999999989 -41.169724000000002,173.88580300000001 -41.161667,173.888031000000012 -41.154167,173.89776599999999 -41.133614,173.902466000000004 -41.128334000000002,174.032745000000006 -40.999724999999998,174.084411999999986 -41.021385000000002,174.094116000000014 -41.023330999999999,174.246338000000009 -41.044724000000002,174.258330999999998 -41.035277999999998,174.299408 -41.003616,174.315246999999999 -41.000557,174.323853000000014 -41.003334000000002,174.323853000000014 -41.010834000000003,174.321625000000012 -41.018059,174.209960999999993 -41.197495000000004,174.161376999999987 -41.225555,174.152771 -41.226661999999997,174.114685000000009 -41.231383999999998,174.052185000000009 -41.235000999999997,174.02664200000001 -41.236114999999998,174.053864000000004 -41.254173000000002,174.206359999999989 -41.269447,174.214966000000004 -41.266663,174.291655999999989 -41.238892,174.303588999999988 -41.229720999999998,174.320800999999989 -41.220275999999998,174.326904000000013 -41.222771000000002,174.288574000000011 -41.276947,174.249114999999989 -41.322502,174.241637999999995 -41.326110999999997,174.231902999999988 -41.328055999999997,174.208587999999992 -41.329445,174.193572999999986 -41.320281999999999,174.155243000000013 -41.305,174.148041000000006 -41.308608999999997,174.111633000000012 -41.336661999999997,174.052764999999994 -41.421112,174.049133000000012 -41.427779999999998,174.044433999999995 -41.442497000000003,174.045806999999996 -41.450836000000002,174.049988000000013 -41.466392999999997,174.063873 -41.493057,174.084136999999998 -41.526108,174.097473000000008 -41.519447,174.096069 -41.511116,174.100799999999992 -41.505561999999998,174.108306999999996 -41.509171000000002,174.114685000000009 -41.513893000000003,174.125792999999987 -41.523887999999999,174.151093000000003 -41.551392,174.176085999999998 -41.578612999999997,174.178864000000004 -41.586112999999997,174.179961999999989 -41.594444000000003,174.179137999999995 -41.602783000000002,174.174133000000012 -41.608336999999999,174.163299999999992 -41.618606999999997,174.157195999999999 -41.623328999999998,174.193024000000008 -41.685555,174.287749999999988 -41.734444000000003,174.291655999999989 -41.740836999999999,174.289153999999996 -41.748336999999999,174.283324999999991 -41.762222,174.236358999999993 -41.837218999999997,174.212188999999995 -41.865279999999998,174.201355000000007 -41.875557,174.184143000000006 -41.890555999999997,174.17804000000001 -41.895004,174.164703000000003 -41.90361,174.157195999999999 -41.907218999999998,174.143585000000002 -41.915832999999999,174.088561999999996 -41.957779000000002,174.009154999999993 -42.027495999999999,173.979674999999986 -42.061110999999997,173.965239999999994 -42.086945,173.959136999999998 -42.100838000000003,173.954407000000003 -42.115555,173.953307999999993 -42.123885999999999,173.953583000000009 -42.133330999999998,173.956359999999989 -42.166389000000002,173.933319000000012 -42.196944999999999,173.928314 -42.202499000000003,173.884154999999993 -42.243614,173.87802099999999 -42.248055,173.870513999999986 -42.251944999999999,173.86300700000001 -42.255561999999998,173.834686000000005 -42.271385000000002,173.801361000000014 -42.293059999999997,173.794983000000002 -42.297500999999997,173.568572999999986 -42.476944000000003,173.558593999999999 -42.487777999999999,173.541350999999992 -42.511947999999997,173.533874999999995 -42.525002,173.531372000000005 -42.532218999999998,173.500823999999994 -42.599724000000002,173.480804000000006 -42.621941,173.466063999999989 -42.656944000000003,173.459960999999993 -42.670836999999999,173.448853000000014 -42.690277000000002,173.387755999999996 -42.793616999999998,173.351623999999987 -42.840836000000003,173.328033000000005 -42.898887999999999,173.328033000000005 -42.906387000000002,173.325806 -42.913612,173.285521999999986 -42.958053999999997,173.106902999999988 -43.057777000000002,173.099396000000013 -43.061385999999999,173.090515000000011 -43.064444999999999,173.026366999999993 -43.081947,172.975799999999992 -43.09111,172.953033000000005 -43.092773,172.935516000000007 -43.098334999999999,172.92025799999999 -43.105834999999999,172.838012999999989 -43.148055999999997,172.818024000000008 -43.160828000000002,172.797760000000011 -43.183059999999998,172.772217000000012 -43.219718999999998,172.76080300000001 -43.239165999999997,172.758026 -43.246665999999998,172.726944000000003 -43.415539000000003,172.726593000000008 -43.423355,172.775817999999987 -43.612220999999998,172.894135000000006 -43.61972,172.90554800000001 -43.620834000000002,173.059692000000013 -43.653053,173.100525000000005 -43.697220000000002,173.105529999999987 -43.703612999999997,173.114409999999992 -43.741385999999999,173.116913000000011 -43.762504999999997,173.116913000000011 -43.769996999999996,173.112182999999987 -43.825004999999997,173.110779000000008 -43.833328000000002,173.091644000000002 -43.856392,173.058593999999999 -43.871108999999997,173.006088000000005 -43.869498999999998,173.002242999999993 -43.868999000000002,172.999236999999994 -43.865668999999997,172.990905999999995 -43.849670000000003,172.965239999999994 -43.802222999999998,172.961365 -43.764449999999997,172.958862000000011 -43.756950000000003,172.951355000000007 -43.755279999999999,172.939972000000012 -43.756110999999997,172.927185000000009 -43.766112999999997,172.921906000000007 -43.771667,172.920532000000009 -43.824173000000002,172.920532000000009 -43.833328000000002,172.917572000000007 -43.869221000000003,172.923584000000005 -43.875884999999997,172.931243999999992 -43.881390000000003,172.937408000000005 -43.887886000000002,172.938904000000008 -43.892384,172.938247999999987 -43.896220999999997,172.870789000000002 -43.904442000000003,172.861633000000012 -43.901389999999999,172.811919999999986 -43.882216999999997,172.804413000000011 -43.878334000000002,172.745789000000002 -43.837775999999998,172.740783999999991 -43.832222000000002,172.736908 -43.825836000000002,172.715239999999994 -43.808334000000002,172.642761000000007 -43.772224,172.513031000000012 -43.729438999999999,172.495238999999998 -43.723885000000003,172.483582000000013 -43.722771000000002,172.472197999999992 -43.72361,172.424988000000013 -43.733612,172.413299999999992 -43.743614,172.390258999999986 -43.763893000000003,172.384978999999987 -43.77861,172.382445999999987 -43.795006,172.383330999999998 -43.8125,172.384704999999997 -43.820838999999999,172.394713999999993 -43.850281000000003,172.393311000000011 -43.858612,172.386932000000002 -43.863334999999999,172.367461999999989 -43.867775000000002,172.297211000000004 -43.881110999999997,172.286925999999994 -43.883057,172.275542999999999 -43.883887999999999,172.189696999999995 -43.909163999999997,172.050812000000008 -43.965279000000002,171.978577 -43.995834000000002,171.955230999999998 -44.006667999999998,171.941070999999994 -44.015006999999997,171.782470999999987 -44.076949999999997,171.654694000000006 -44.122498,171.583587999999992 -44.153885000000002,171.547211000000004 -44.173889000000003,171.538483000000014 -44.178775999999999,171.355559999999997 -44.285491999999998,171.346465999999992 -44.292186999999998,171.342467999999997 -44.295555,171.319976999999994 -44.316391000000003,171.293578999999994 -44.343612999999998,171.285521999999986 -44.356392,171.278594999999996 -44.369995000000003,171.271911999999986 -44.383887999999999,171.269135000000006 -44.391112999999997,171.275542999999999 -44.395836000000003,171.279144000000002 -44.402495999999999,171.278594999999996 -44.420836999999999,171.277190999999988 -44.428885999999999,171.275542999999999 -44.437218,171.26998900000001 -44.451942000000003,171.263306 -44.465553,171.254974000000004 -44.478332999999999,171.214966000000004 -44.533057999999997,171.208313000000004 -44.537506,171.200531000000012 -44.541114999999998,171.196075000000008 -44.560279999999999,171.192200000000014 -44.645836000000003,171.193024000000008 -44.663330000000002,171.20495600000001 -44.700279000000002,171.21414200000001 -44.739165999999997,171.215239999999994 -44.747498,171.207184000000012 -44.851112,171.198577999999998 -44.919998,171.195800999999989 -44.927498,171.185241999999988 -44.938332000000003)))');
-INSERT INTO geoapp_country ("name", "mpoly") VALUES ('Texas', 'SRID=4326;MULTIPOLYGON (((-103.00243399999998 36.500397,-102.90421904194784 36.500393342967676,-102.8402359524855 36.500390960558398,-102.840235952479716 36.500390960558398,-102.840235952474345 36.500390960558398,-102.840235952468362 36.500390960558398,-102.840235952461725 36.500390960558398,-102.840235952455885 36.500390960558398,-102.792077446284736 36.500389167377229,-102.643207699865854 36.500383624214699,-102.366462330167067 36.500373319605465,-102.250452999999979 36.500368999999999,-102.24499 36.500703999999999,-102.162463000000002 36.500326,-102.12545 36.500323999999999,-102.124752896301885 36.500398159967887,-102.122066000000004 36.500684,-101.930244999999999 36.500526,-101.925344139375468 36.500484781341967,-101.914929315957153 36.500397187533892,-101.826564999999988 36.499653999999992,-101.826498 36.499535000000002,-101.81449312121488 36.499579719643286,-101.788110000000003 36.499678000000003,-101.783359000000004 36.499709000000003,-101.781987 36.499718,-101.780609999999982 36.499727,-101.779435000000007 36.499733999999997,-101.773235954788092 36.499732939140301,-101.709314000000006 36.499721999999998,-101.698684999999998 36.499507999999999,-101.653707999999995 36.499572999999998,-101.649966000000006 36.499572999999998,-101.623914999999997 36.499527999999998,-101.414793008557069 36.499417763984319,-101.392608849457574 36.499406069885133,-101.340061173170298 36.499378370041477,-101.085155999999984 36.499243999999997,-101.052418000000003 36.499562999999995,-101.04533099999999 36.499540000000003,-100.977087999999995 36.499594999999999,-100.936058000000003 36.499602000000003,-100.918513000000004 36.499620999999998,-100.884174000000002 36.499682,-100.884079999999997 36.499682,-100.859656999999984 36.499687000000002,-100.850840000000005 36.49969999999999,-100.824235999999999 36.499617999999998,-100.824218000000002 36.499617999999998,-100.80619 36.499673999999999,-100.806172000000004 36.499634,-100.802909 36.499620999999998,-100.802886 36.499620999999998,-100.761810999999994 36.499617999999998,-100.761810999999994 36.499580000000002,-100.724361999999999 36.499580000000002,-100.724361000000002 36.499558,-100.708625999999995 36.499552999999999,-100.708628000000004 36.499520999999994,-100.657762999999989 36.499482999999991,-100.657762999999989 36.499499999999998,-100.648342999999997 36.499495000000003,-100.648343999999994 36.499462999999999,-100.592613999999998 36.499468999999998,-100.592555999999988 36.499468999999998,-100.592551 36.499428999999999,-100.583539000000002 36.499482999999991,-100.583378999999994 36.499442999999999,-100.578113999999999 36.499462999999999,-100.578113999999999 36.499439000000002,-100.546144999999996 36.499343000000003,-100.531215000000003 36.499341,-100.531215000000003 36.499290000000002,-100.530478000000002 36.49924,-100.530314000000004 36.499357000000003,-100.522227 36.499290999999999,-100.441064999999995 36.499490000000002,-100.441063999999997 36.499462,-100.433959000000002 36.499456000000002,-100.421327999999988 36.499447000000004,-100.421300999999985 36.499487999999999,-100.413634000000002 36.499443999999997,-100.41355 36.499468999999998,-100.378634000000005 36.499516999999997,-100.378591999999998 36.499445,-100.35185199999998 36.499487000000002,-100.351841999999991 36.499473000000002,-100.334463999999997 36.49942,-100.334440999999998 36.49944,-100.324150000000003 36.499679,-100.311244999999985 36.499631,-100.311018000000004 36.499687999999999,-100.310642999999985 36.499642,-100.253572851827684 36.499638031344489,-100.181220999999994 36.499633000000003,-100.090020999999993 36.499634,-100.000405999999984 36.499701999999999,-100.0004059967807 36.499497793115623,-100.00040222345956 36.260147946939995,-100.000399000000002 36.055677000000003,-100.000396170268971 35.879197994164429,-100.000394020347557 35.745115995014778,-100.000391999999991 35.619115,-100.000390396259149 35.519130234823749,-100.000386875554753 35.299632926398459,-100.000386874882437 35.299591010324292,-100.000386852473085 35.298193905884737,-100.000384999999994 35.182701999999999,-100.000381972929958 34.852568985943549,-100.000381605014198 34.812443999872983,-100.000381000000004 34.746460999999996,-100.000381000000004 34.570853999999997,-100.000381000000004 34.570647,-100.000381000000004 34.560509000000003,-99.998254592787575 34.560446149085699,-99.997501461048799 34.560423888524269,-99.985833 34.560079000000002,-99.974761999999998 34.561317999999993,-99.971554999999995 34.562179,-99.965608000000003 34.565843999999998,-99.958898000000005 34.571271000000003,-99.957540999999992 34.572708999999996,-99.95755299999999 34.574168999999998,-99.956716999999998 34.576523999999992,-99.954566999999997 34.578195,-99.94571999999998 34.579273,-99.930492488760507 34.576894921075187,-99.930189904388058 34.576847666503667,-99.929333999999997 34.576714000000003,-99.923210999999995 34.574551999999997,-99.921801000000002 34.570253,-99.915771000000007 34.565975000000002,-99.914151070156151 34.564995899308187,-99.898943000000003 34.555804000000002,-99.896006999999997 34.555529999999997,-99.89376 34.554219000000003,-99.887146999999999 34.549047000000002,-99.885392392967745 34.547401436342639,-99.884583851343237 34.546643143067669,-99.87806651563541 34.540530839522475,-99.87650823800611 34.539069404005723,-99.874403 34.537095,-99.873254000000003 34.535350999999999,-99.872356999999994 34.532096000000003,-99.868953000000005 34.52761499999999,-99.867217250163094 34.525864500605081,-99.853065999999998 34.511592999999998,-99.832903999999985 34.500067999999999,-99.825324999999992 34.497596,-99.818185999999997 34.487839999999991,-99.818738999999979 34.484975999999996,-99.814544624457952 34.476663062301249,-99.814312999999984 34.476204000000003,-99.793683999999999 34.453893999999998,-99.783787954821193 34.445078397966533,-99.782985999999994 34.444364,-99.775743000000006 34.444225000000003,-99.774224411180043 34.443216449834381,-99.765598999999995 34.437488000000002,-99.764825999999999 34.436433999999998,-99.764881999999986 34.435265999999999,-99.767647999999994 34.431854,-99.767234000000002 34.430501999999997,-99.754248000000004 34.421288999999994,-99.740907000000007 34.414763,-99.735679661059166 34.413018903486261,-99.730348000000006 34.411239999999992,-99.720258999999999 34.406295,-99.719721039768913 34.405807854123296,-99.716415999999995 34.402814999999997,-99.715089000000006 34.400753999999999,-99.714231999999996 34.397821999999998,-99.714838 34.394523999999997,-99.712682 34.390928000000002,-99.707900999999993 34.387538999999997,-99.696461999999997 34.381036000000002,-99.678282999999979 34.379798999999998,-99.672337448339604 34.378003970284972,-99.671377000000007 34.377713999999997,-99.666676988468737 34.374633899592595,-99.665992000000003 34.374184999999997,-99.665404581506792 34.374094751646162,-99.662705000000003 34.373679999999993,-99.659863615570984 34.374283464835351,-99.659362000000002 34.374389999999998,-99.654194000000004 34.376519000000002,-99.649662000000006 34.379885000000002,-99.630904999999998 34.376007,-99.628541546335526 34.375150829397036,-99.624196999999995 34.373576999999997,-99.600026 34.374687999999999,-99.596322999999998 34.377136999999998,-99.587595999999991 34.385866999999998,-99.587235087741874 34.386377538370702,-99.585718954359294 34.388522226586467,-99.585441999999986 34.388914,-99.584530999999984 34.391204999999999,-99.585306000000003 34.398122,-99.584479999999985 34.407673000000003,-99.580059999999989 34.416652999999997,-99.574366999999995 34.418281,-99.569695999999993 34.418418000000003,-99.563067665646059 34.417445690943012,-99.562203999999994 34.417318999999999,-99.561530791054494 34.417028950664999,-99.555986000000004 34.414639999999999,-99.549242000000007 34.412714999999992,-99.529786 34.411451999999997,-99.528744576810823 34.411579971493573,-99.523649999999989 34.412205999999998,-99.517623999999998 34.414493999999991,-99.514279999999999 34.414034999999998,-99.499874999999989 34.409607999999999,-99.497090999999983 34.407730999999991,-99.494103999999993 34.404755000000002,-99.490425999999999 34.399693999999997,-99.487218999999982 34.397955000000003,-99.477547 34.396355,-99.477019613816751 34.396364300212412,-99.474810232095294 34.396403261641368,-99.472297823530695 34.396447566809115,-99.470968999999997 34.396470999999991,-99.463286816319666 34.393024688790533,-99.452647999999996 34.388252,-99.445020999999983 34.379891999999998,-99.440759999999997 34.374122999999997,-99.430994999999982 34.373413999999997,-99.43081720973791 34.373532661492725,-99.420432000000005 34.380464000000003,-99.408847999999992 34.372776000000002,-99.407167999999999 34.372605,-99.406018176721332 34.372844364351735,-99.404336527339453 34.373194441551952,-99.402959999999979 34.373480999999998,-99.399602999999999 34.375078999999999,-99.397253000000006 34.377870999999999,-99.396160718377317 34.383134276834824,-99.391492 34.405631,-99.393918999999997 34.415273999999989,-99.396488000000005 34.417290999999999,-99.396901999999997 34.418688000000003,-99.397009999999995 34.424002999999999,-99.395768462359129 34.43494110377263,-99.394955999999993 34.442098999999999,-99.381011 34.456935999999999,-99.376037841709419 34.458617501802458,-99.375365000000002 34.458844999999997,-99.369609999999994 34.458699000000003,-99.358795 34.455862999999994,-99.354671999999994 34.451856999999997,-99.35478257092818 34.450383391084422,-99.354837000000003 34.449657999999999,-99.356770999999995 34.446542,-99.357101999999998 34.444915000000002,-99.356712999999999 34.442143999999999,-99.350407000000004 34.437083,-99.342020261837703 34.431514649700844,-99.341336999999996 34.431061,-99.341016600261696 34.430906286427735,-99.334036999999995 34.427536000000003,-99.331050066208874 34.424666026137302,-99.328674000000007 34.422383000000004,-99.325094009617374 34.416010263301388,-99.324222000000006 34.414458000000003,-99.321411663781888 34.411055277053073,-99.319798627189357 34.409102230797522,-99.319605999999979 34.408869000000003,-99.318363000000005 34.408295999999993,-99.316372999999999 34.408204999999995,-99.308273999999997 34.410013999999997,-99.299098 34.414227999999994,-99.294647999999981 34.415373000000002,-99.289922000000004 34.414731000000003,-99.287844819286008 34.413958196831629,-99.264167 34.405149000000002,-99.261320999999981 34.403498999999996,-99.261255940568432 34.403158389836314,-99.260996786434447 34.401801622187399,-99.259199386422964 34.392391568987605,-99.258998120407611 34.391337867029385,-99.258979999999994 34.391243000000003,-99.259239630132384 34.391043961974496,-99.260703756811225 34.389921531074158,-99.261190999999997 34.389547999999998,-99.262646013804954 34.388906249865343,-99.264243556741917 34.388201635660714,-99.264508000000006 34.388084999999997,-99.271031915197597 34.387722560266795,-99.271781628057255 34.38768090955238,-99.273607516746409 34.387579471291865,-99.273957999999993 34.38756,-99.27534 34.386598999999997,-99.274925999999994 34.384903999999999,-99.271845396288441 34.382114976063626,-99.271280999999988 34.381603999999996,-99.258696 34.372633999999998,-99.254722 34.372405,-99.251407999999984 34.375079999999997,-99.248969000000002 34.375984000000003,-99.242944999999992 34.372667999999997,-99.239138083830497 34.366035888164781,-99.237232999999989 34.362716999999996,-99.237183660287812 34.362563767173611,-99.235448627455725 34.357175329079247,-99.234251999999984 34.353459,-99.233273999999994 34.344101000000002,-99.23260599999999 34.342379999999999,-99.229993999999991 34.340538000000002,-99.226152999999982 34.339725999999999,-99.221975 34.340020000000003,-99.219768999999999 34.341377,-99.217335000000006 34.341520000000003,-99.213134999999994 34.340369000000003,-99.210957832415772 34.336710386428308,-99.210716000000005 34.336303999999998,-99.20972399999998 34.324934999999996,-99.211600000000004 34.313969999999998,-99.213476 34.310671999999997,-99.213233598142949 34.308226764636807,-99.211647999999997 34.292231999999991,-99.211468055040228 34.291676209875057,-99.209990337717599 34.287112032604114,-99.209742000000006 34.286344999999997,-99.209514950796304 34.286049346749877,-99.207560999999998 34.283504999999998,-99.203681000000003 34.281925999999999,-99.200221999999997 34.281151999999999,-99.196259999999995 34.281463000000002,-99.196052113016066 34.281264951942028,-99.19571031750732 34.280939333014615,-99.195605 34.280839,-99.194569999999985 34.272424,-99.196926000000005 34.260928999999997,-99.197153 34.244298,-99.19555299999999 34.24006,-99.191138999999993 34.23234,-99.190145999999984 34.229660000000003,-99.190036000000006 34.227186000000003,-99.192076 34.222192,-99.192683000000002 34.218825000000002,-99.192104 34.216693999999997,-99.189758414718312 34.214539281858485,-99.189510999999996 34.214312,-99.188483307800709 34.214128939694163,-99.159015999999994 34.20888,-99.143985 34.214762999999998,-99.138220000000004 34.219158999999998,-99.130609000000007 34.219408,-99.128513999999996 34.218766000000002,-99.127549000000002 34.217986000000003,-99.126614000000004 34.21532899999999,-99.127525000000006 34.213771,-99.130089999999996 34.212192000000002,-99.131552999999997 34.209352000000003,-99.131884999999997 34.207382000000003,-99.129791999999995 34.204402999999999,-99.126566999999994 34.203004,-99.119203999999996 34.201746999999997,-99.108757999999995 34.203400999999999,-99.102001344898341 34.205813362825268,-99.092190999999985 34.209316,-99.08119261238302 34.211229594305671,-99.079534999999993 34.211517999999991,-99.075978000000006 34.211221000000002,-99.06646499999998 34.208404000000002,-99.060343999999986 34.204760999999991,-99.059158999999994 34.202928999999997,-99.058800000000005 34.201256,-99.058083999999994 34.200569000000002,-99.048792000000006 34.198208999999999,-99.043470999999997 34.198208,-99.040961999999993 34.200842000000002,-99.039004000000006 34.204667,-99.037458999999998 34.206454,-99.036272999999994 34.206912000000003,-99.013074999999986 34.203221999999997,-99.005790000000005 34.206646999999997,-99.002916243275195 34.208781598893673,-99.002945441244265 34.209102775846141,-99.003147197273819 34.211322087284138,-99.003432988816769 34.214465787333673,-99.000760999999997 34.217643000000002,-98.99085199999999 34.221632999999997,-98.987293999999991 34.221223000000002,-98.981363999999999 34.217582999999991,-98.978684999999984 34.210231,-98.976586999999995 34.206291,-98.974131999999983 34.203566000000002,-98.969003 34.201298999999999,-98.966301999999999 34.201323000000002,-98.962469999999996 34.204667999999998,-98.962085000000002 34.206386000000002,-98.962306999999981 34.211312,-98.960791 34.213029999999996,-98.958474999999993 34.213854999999995,-98.952512999999982 34.212649999999996,-98.950395999999984 34.21168,-98.940219999999997 34.203685999999998,-98.928145 34.192689,-98.927456000000006 34.191155000000002,-98.923128999999989 34.185977999999999,-98.920704 34.183435000000003,-98.918333000000004 34.181831000000003,-98.909348999999992 34.177498999999997,-98.892677318093561 34.17250349095427,-98.87651287834953 34.167659972141138,-98.872921999999988 34.166584,-98.871543000000003 34.165026999999995,-98.871211000000002 34.163012000000002,-98.872229000000004 34.160446,-98.874954999999986 34.157031000000003,-98.874871999999996 34.155656999999998,-98.873271000000003 34.153596,-98.868116 34.149635000000004,-98.862549999999999 34.149110999999998,-98.860124999999996 34.149912999999998,-98.858418999999998 34.152732,-98.8579 34.159627,-98.857321999999982 34.161093999999999,-98.855585000000005 34.161620999999997,-98.854264541670545 34.16164976192438,-98.831114999999983 34.162154,-98.812953999999991 34.158444000000003,-98.806809999999984 34.155901,-98.804411553093104 34.153928907629435,-98.792015000000006 34.143735999999997,-98.779288744496085 34.140194111533035,-98.773070373738221 34.138463455122455,-98.767587610783494 34.136937528280072,-98.765569999999983 34.136375999999998,-98.764702233233265 34.135780085954792,-98.763778343962841 34.135145631382905,-98.761796999999987 34.133785000000003,-98.760558000000003 34.132387999999999,-98.759485999999995 34.128881999999997,-98.759653 34.126911999999997,-98.757118934362524 34.12470437936247,-98.757036999999983 34.124633000000003,-98.753813984496389 34.124468645349353,-98.749290999999999 34.124237999999998,-98.741966000000005 34.125529999999998,-98.740191287161664 34.126850584722824,-98.739461000000006 34.127394000000002,-98.737231999999992 34.130991999999999,-98.736819999999994 34.133374000000003,-98.735471000000004 34.135207999999999,-98.734286999999995 34.135758000000003,-98.730242646678789 34.1359250861193,-98.717536999999993 34.136450000000004,-98.716104 34.135947000000002,-98.70640034274598 34.134745066348501,-98.696517999999998 34.133521000000002,-98.690291400890658 34.133167457450512,-98.690072 34.133155000000002,-98.688275858887323 34.134465065675442,-98.685589983550884 34.136424083851644,-98.676900633591032 34.14276190388366,-98.676457484208683 34.143085127260051,-98.670573548505118 34.147376740066704,-98.655654999999982 34.158257999999996,-98.650582999999997 34.163113000000003,-98.648072999999997 34.164440999999997,-98.643223000000006 34.164530999999997,-98.635729999999995 34.161617999999997,-98.634085211037615 34.161100728840964,-98.630950281399748 34.160114822001631,-98.621666000000005 34.157195000000002,-98.620507214282355 34.157012478916968,-98.617663812339856 34.156564612849806,-98.616732999999996 34.156418000000002,-98.615748434938936 34.156446107485429,-98.612133570686254 34.156549305078279,-98.611829 34.156557999999997,-98.610173632571488 34.157093658210222,-98.610154152422197 34.157099961766605,-98.608852999999996 34.157521000000003,-98.603977999999998 34.160249,-98.599789 34.160570999999997,-98.577135999999996 34.148961999999997,-98.572451 34.145091,-98.560191000000003 34.133201999999997,-98.558593000000002 34.128253999999998,-98.550916999999998 34.119334000000002,-98.536257000000006 34.107343,-98.530610999999993 34.099843,-98.528199999999998 34.094960999999998,-98.504182 34.072370999999997,-98.487068052145446 34.063003092954936,-98.486783271268621 34.06284720836274,-98.486328 34.062598,-98.483944186894661 34.06241565608709,-98.482821069121968 34.062329745958955,-98.482039999999998 34.062269999999998,-98.475065999999998 34.064269000000003,-98.449033999999983 34.073461999999999,-98.446378999999993 34.075429999999997,-98.445784000000003 34.076827000000002,-98.445590305319797 34.079232123390703,-98.445584999999994 34.079298,-98.445259148452962 34.079797720749731,-98.443724000000003 34.082152,-98.442807999999999 34.083143999999997,-98.442148160210323 34.083427517317581,-98.441104460406791 34.083875970068213,-98.440092000000007 34.084311,-98.439068026005657 34.084479541105658,-98.434822808733685 34.08517828308225,-98.432126999999994 34.085622,-98.43151641213494 34.085605425226575,-98.43092946822253 34.085589492282431,-98.428479999999993 34.085523000000002,-98.425229999999999 34.084798999999997,-98.422252999999998 34.083036999999997,-98.419995 34.082487999999998,-98.419161945519861 34.082694545588339,-98.41804644206556 34.082971120917755,-98.417812999999995 34.083029000000003,-98.414426000000006 34.085073999999999,-98.400747497198822 34.098985940284976,-98.399776999999986 34.099972999999999,-98.398505572550647 34.104180252359392,-98.39838899999998 34.104565999999998,-98.398160000000004 34.121395999999997,-98.400493999999995 34.121777999999999,-98.400966999999994 34.122236,-98.398441000000005 34.128456,-98.384381000000005 34.146317000000003,-98.381237999999996 34.149453999999999,-98.367493999999994 34.156190999999993,-98.366862955318183 34.156357896864854,-98.364023000000003 34.157108999999998,-98.34173552164826 34.153594120579292,-98.339428832109121 34.153230340726623,-98.331172907733077 34.151928328079421,-98.326986688030772 34.151268134169193,-98.325445000000002 34.151024999999997,-98.324621914768684 34.150650086831803,-98.323612587945547 34.150190341106089,-98.322580000000002 34.149720000000002,-98.320651676675396 34.148059023851737,-98.318749999999994 34.146420999999997,-98.315432139066189 34.144301906683673,-98.312023538956254 34.142124858924547,-98.300208999999995 34.134579000000002,-98.299345719035045 34.134365643147696,-98.29862570169189 34.134187693395319,-98.293901000000005 34.133020000000002,-98.280321 34.130749999999999,-98.258217018239392 34.129574098564007,-98.256467 34.129480999999998,-98.254901718278489 34.129708262798985,-98.247953999999993 34.13071699999999,-98.241012999999995 34.133102999999998,-98.225282000000007 34.127245000000002,-98.223600000000005 34.125093,-98.216463000000005 34.121820999999997,-98.203710999999998 34.117676000000003,-98.200074999999998 34.116782999999998,-98.191455000000005 34.115752999999998,-98.169120000000007 34.114170999999999,-98.157411999999994 34.120466999999998,-98.154353999999998 34.122734,-98.142753999999996 34.136358999999999,-98.136769999999999 34.144992000000002,-98.130815999999996 34.150531999999998,-98.123377000000005 34.154539999999997,-98.114506000000006 34.154727,-98.109461999999979 34.154110999999993,-98.107064999999992 34.152531000000003,-98.101937000000007 34.146829999999994,-98.092021474678845 34.132735952269094,-98.090223999999992 34.130181,-98.089754999999982 34.128211,-98.090659999999986 34.12198,-98.092421000000002 34.116917,-98.095117999999999 34.11119,-98.096177285423778 34.109455137055363,-98.096466125075011 34.108982084942461,-98.099327999999986 34.104295,-98.101378023037029 34.101786489578267,-98.103538246996251 34.099143131812454,-98.104308999999986 34.098199999999999,-98.119416999999999 34.084474,-98.121038999999996 34.081265999999999,-98.120207999999991 34.072127000000002,-98.11802999999999 34.067064999999999,-98.114587 34.06228,-98.100919767943822 34.050244792175462,-98.099096110217346 34.048638900093685,-98.096177018664264 34.044625138601674,-98.096541898037387 34.040976263553816,-98.09727167092565 34.038969381040054,-98.097731364247636 34.038509687718062,-98.098001443813914 34.038239608151798,-98.102015208841422 34.03732738850595,-98.104022094890695 34.036232725638037,-98.104083244997014 34.036133356900422,-98.105481647738245 34.033860956680144,-98.105481647738245 34.032444902147553,-98.105481647738245 34.031306746267951,-98.103616999999986 34.029206999999992,-98.088202999999993 34.005481000000003,-98.085260000000005 34.003259,-98.082839000000007 34.002412,-98.055197000000007 33.995840999999999,-98.050169864666017 33.994989457544634,-98.041117 33.993456000000002,-98.027671999999981 33.993357000000003,-98.019485000000003 33.993803999999997,-98.018481521828946 33.993960861546498,-98.005667000000003 33.995964,-97.987387999999996 33.999822999999999,-97.982805999999997 34.001949000000003,-97.978243000000006 34.005386999999999,-97.974597608872358 34.00657735007583,-97.974172999999993 34.006715999999997,-97.973934144800623 34.006593661859519,-97.971670000000003 34.005434,-97.968339999999998 34.000529999999998,-97.965354903485249 33.996992503283089,-97.963375425210828 33.994646717187933,-97.96302799999998 33.994235000000003,-97.962715090700769 33.994009516348072,-97.958325000000002 33.990845999999998,-97.955849999999998 33.990136,-97.952687999999995 33.990113999999998,-97.947571999999994 33.991053,-97.946472999999997 33.990731999999994,-97.945729999999998 33.989839000000003,-97.945949999999982 33.988395999999995,-97.952184120103468 33.971402949359636,-97.95307606469359 33.968971674482539,-97.95691699999999 33.958502000000003,-97.960351000000003 33.951928000000002,-97.965737000000004 33.947392,-97.972662 33.944527,-97.974172999999993 33.942832000000003,-97.974062000000004 33.940289,-97.972493999999998 33.937907000000003,-97.971175000000002 33.937128999999999,-97.965952999999999 33.936191,-97.963425 33.936236999999998,-97.955511 33.938186000000002,-97.954466999999994 33.937773999999997,-97.953395 33.936444999999999,-97.952679000000003 33.929482,-97.953694999999996 33.924373000000003,-97.957155 33.914453999999999,-97.960615000000004 33.910353999999998,-97.961188664141474 33.909913087050903,-97.963139679674441 33.908413554571595,-97.964461 33.907398,-97.964803587866868 33.907309441163022,-97.9693952279504 33.906122503898267,-97.969873000000007 33.905999,-97.970298415583201 33.906261144464871,-97.973142999999993 33.908014,-97.976962999999998 33.912548999999999,-97.978803999999997 33.912548,-97.979984999999999 33.911402000000002,-97.983551999999989 33.904001999999991,-97.984539999999996 33.900703,-97.984566 33.899076999999998,-97.984416725907181 33.89872544733722,-97.984025057628415 33.897803036597892,-97.98383498894799 33.897355409354304,-97.983768999999995 33.897199999999991,-97.977858999999995 33.889929000000002,-97.974177999999995 33.886642999999999,-97.967776999999998 33.882429999999999,-97.958438 33.879179,-97.951215000000005 33.878424000000003,-97.946463999999992 33.878883000000002,-97.942729999999997 33.879845000000003,-97.938801999999995 33.879891,-97.936743000000007 33.879204,-97.933120450042608 33.877388671138185,-97.918328311832767 33.869976048610916,-97.905467000000002 33.863530999999995,-97.896737999999985 33.857984999999999,-97.877386999999999 33.850236000000002,-97.871447000000003 33.849001,-97.865764999999982 33.849392999999999,-97.835425213046037 33.857383352392631,-97.834333 33.857671000000003,-97.833886750888084 33.857971936447115,-97.833218553718808 33.858422547723912,-97.806802470257153 33.876236728393856,-97.805423000000005 33.877167,-97.803472999999997 33.880189999999999,-97.801578000000006 33.885137999999998,-97.784656999999982 33.890631999999997,-97.78061799999999 33.895533,-97.779683000000006 33.899242999999998,-97.780339999999995 33.904833000000004,-97.783716999999996 33.910559999999997,-97.772672 33.914382000000003,-97.765445999999997 33.913531999999989,-97.763769999999994 33.914240999999997,-97.762914903547767 33.914953098088951,-97.761142192227695 33.916429357685161,-97.760223999999994 33.917194000000002,-97.759399000000002 33.91881999999999,-97.759833999999984 33.92521,-97.762660999999994 33.930846000000003,-97.762767999999994 33.934396,-97.752956999999995 33.937049000000002,-97.738478 33.937421,-97.736553999999998 33.936574999999998,-97.735919542935619 33.936533987763056,-97.734773489745407 33.936459905200778,-97.733722999999998 33.936391999999998,-97.732266999999993 33.936691000000003,-97.725289000000004 33.941045000000003,-97.720699142354164 33.94461309292862,-97.716772000000006 33.947665999999998,-97.714693355370301 33.94981590741822,-97.712051708440285 33.952548118711093,-97.709683999999996 33.954996999999999,-97.708350195107343 33.95701014009046,-97.70415899999999 33.963335999999998,-97.69792099999998 33.977331,-97.69310999999999 33.983699,-97.688023 33.986606999999999,-97.671772000000004 33.991370000000003,-97.661489000000003 33.990817999999997,-97.656210000000002 33.989488,-97.633778000000007 33.981256999999999,-97.609091000000006 33.968093000000003,-97.589597999999995 33.953553999999997,-97.588828000000007 33.951881999999998,-97.591270649549756 33.930345579062646,-97.591514000000004 33.928199999999997,-97.595084 33.922953999999997,-97.596154999999996 33.922105999999999,-97.59697899999999 33.920228000000002,-97.597115000000002 33.917867999999999,-97.596955673755872 33.917077348335745,-97.596288999999985 33.913769000000002,-97.593782375104212 33.910260437761373,-97.589253999999997 33.903922,-97.587440999999984 33.902479,-97.582744000000005 33.900784999999999,-97.578907598302408 33.900207204108142,-97.558269999999993 33.897098999999997,-97.555002000000002 33.897281999999997,-97.551541 33.897947000000002,-97.543245999999996 33.901288999999998,-97.533617322522971 33.906127586572126,-97.532723000000004 33.906576999999999,-97.525277000000003 33.911750999999995,-97.519170999999986 33.913637999999999,-97.504870374844515 33.918353570482601,-97.500960000000006 33.919643,-97.495648860558163 33.919307898609453,-97.494857999999979 33.919257999999999,-97.492061582842766 33.918500058129531,-97.487115891787269 33.917159576320657,-97.48650499999998 33.916993999999995,-97.484158940985964 33.915822631562747,-97.460375999999982 33.903948,-97.458068999999995 33.901634999999999,-97.451065249608234 33.891558064966901,-97.450953999999996 33.891398000000002,-97.451469000000003 33.87093,-97.452287410342421 33.86882620086994,-97.455665873415143 33.860141550511862,-97.457616999999999 33.855125999999998,-97.459565999999995 33.853316,-97.461485999999994 33.849559999999997,-97.462857 33.841771999999999,-97.459067999999988 33.834581,-97.453056999999987 33.828536,-97.444192999999999 33.823773000000003,-97.426492999999994 33.819398,-97.410387 33.818845000000003,-97.403235695189224 33.818961304668854,-97.384901622687948 33.819259479377855,-97.372940999999997 33.819454,-97.368744000000007 33.821471000000003,-97.365506999999994 33.823762999999992,-97.358512999999988 33.830018000000003,-97.348337999999984 33.843876000000002,-97.340900078515631 33.860236176367188,-97.339391593410966 33.867629740388111,-97.337846311291798 33.870430566802547,-97.336524008254173 33.872827243260353,-97.33293952159849 33.874440259476913,-97.329175814777756 33.874440259476913,-97.327562805507441 33.873902588562437,-97.326564370247013 33.872737756024428,-97.326487449786001 33.872648016149064,-97.324157539016809 33.866016724171544,-97.322365295688968 33.864941382342593,-97.318243141591921 33.865120602507631,-97.31654836796514 33.865642075591225,-97.315913230822716 33.865837504006514,-97.314412999999988 33.866988999999997,-97.310479256695203 33.873361218982971,-97.307489695517361 33.878203969770759,-97.302471419756401 33.880175433263638,-97.299245387323282 33.880175433263638,-97.295170524880618 33.877119286431629,-97.294227111562321 33.876411726442917,-97.286921603026471 33.869423850720118,-97.28598279642199 33.868525862052032,-97.284253187903744 33.867526845294535,-97.279107999999979 33.864555000000003,-97.275347999999994 33.863225,-97.271531999999993 33.862560000000002,-97.257971626565464 33.863220416657512,-97.256624999999985 33.863286000000002,-97.255635999999996 33.863697999999999,-97.254234999999994 33.865322999999997,-97.249208999999993 33.875100999999994,-97.246418496348156 33.898356425448434,-97.246179999999981 33.900343999999997,-97.245398270620598 33.902084836575838,-97.245057441245748 33.90284383100218,-97.244945999999999 33.903092,-97.242092 33.906277000000003,-97.241794392023195 33.906436890220043,-97.238755934556053 33.908069304909361,-97.226522000000003 33.914642,-97.210920999999999 33.916063999999999,-97.210512235443105 33.915911440173737,-97.206141000000002 33.914279999999998,-97.185457999999997 33.9007,-97.180845000000005 33.895203999999993,-97.179608999999999 33.892249999999997,-97.170773789281327 33.861660975771436,-97.166629 33.847310999999998,-97.166824000000005 33.840395,-97.171627 33.835335,-97.180939422624874 33.831550006302521,-97.181369999999987 33.831375,-97.186254000000005 33.830894,-97.193690000000004 33.831307000000002,-97.195830999999998 33.830803000000003,-97.197477000000006 33.829794999999997,-97.199700000000007 33.827322000000002,-97.203513999999998 33.821824999999997,-97.204994999999997 33.81886999999999,-97.205652 33.809823999999999,-97.205556910941183 33.806237292333442,-97.205445103342427 33.802019970418343,-97.205431000000004 33.801487999999999,-97.205114487332324 33.800890302957832,-97.203236000000004 33.797342999999998,-97.194785999999993 33.785344000000002,-97.190397000000004 33.781153000000003,-97.187792000000002 33.769702000000002,-97.181842999999986 33.755869999999994,-97.173532726140948 33.740090726508434,-97.172577000695028 33.738276026602087,-97.172191999999995 33.737544999999997,-97.168438536634085 33.734131892706188,-97.163454368039083 33.729599677915004,-97.163149000000004 33.729322000000003,-97.162807288850388 33.729115696596551,-97.155066000000005 33.724442000000003,-97.152609597300682 33.723370138808036,-97.150103410774264 33.72227655424301,-97.149393999999987 33.721966999999999,-97.137529999999998 33.718663999999997,-97.126102000000003 33.716940999999998,-97.121101999999993 33.717174,-97.119522126797463 33.717502594273334,-97.114921749218269 33.718459416457094,-97.113264999999998 33.718803999999999,-97.112398501853761 33.719102240295193,-97.110065570752283 33.719905212653977,-97.108936 33.720294000000003,-97.108097026518521 33.720734123472262,-97.106518853348803 33.721562029324609,-97.104524999999995 33.722608,-97.097154000000003 33.727809,-97.094085000000007 33.730992,-97.092697209381924 33.732891057656268,-97.092130098039192 33.733667094850453,-97.091071999999983 33.735115,-97.089936943375889 33.737167271747261,-97.087911027802278 33.740830286618703,-97.086195000000004 33.743932999999998,-97.084820762198987 33.752363244406453,-97.084693 33.753146999999998,-97.08461299999999 33.759993,-97.085217999999998 33.765512,-97.087362453285593 33.77250304797397,-97.087851999999998 33.774099,-97.093101265647221 33.787040841586602,-97.093917000000005 33.789051999999998,-97.094675961767678 33.791977368936216,-97.095047178759813 33.793408200769441,-97.095235999999986 33.794136000000002,-97.095080023591905 33.79561056406444,-97.094877682854474 33.797523445530629,-97.094770999999994 33.798532000000002,-97.093897185962049 33.800360798466031,-97.09266432242093 33.802941048788071,-97.092111999999986 33.804096999999999,-97.087998999999982 33.808746999999997,-97.078589999999991 33.812755999999993,-97.067977124183287 33.814475679891196,-97.064604445188394 33.815487484896828,-97.062631847535258 33.816079264957295,-97.058622892638837 33.818751903281317,-97.055415722506638 33.823829921794093,-97.055412197115942 33.8238546000754,-97.055148464371385 33.82570077017467,-97.055682980641905 33.830778788687446,-97.057821087157734 33.834520485448607,-97.058282726048489 33.836367011192308,-97.058622892638837 33.837727655580807,-97.057553829022481 33.840133030590344,-97.055415722506638 33.841202089027483,-97.052208542016004 33.841736615656437,-97.048734113748537 33.840934820533782,-97.045339940802535 33.839496399893775,-97.041245000000004 33.837761,-97.038858000000005 33.838264000000002,-97.023899 33.844213000000003,-97.017857000000006 33.850141999999998,-97.010381749407998 33.858564100233409,-96.999664164722446 33.87063922351804,-96.985567000000003 33.886521999999999,-96.983970999999997 33.892082999999992,-96.984938999999997 33.904865999999991,-96.985275905099471 33.906070041818985,-96.988744999999994 33.918467999999997,-96.993996999999979 33.928978999999998,-96.995022999999989 33.932034999999999,-96.995140238436761 33.933014648420269,-96.996024643022366 33.940404763634284,-96.996183000000002 33.941727999999998,-96.996167702736543 33.941832622020257,-96.995421139189489 33.946938567064805,-96.995367999999999 33.947302,-96.994947208134789 33.948043840473474,-96.994456760007211 33.948908482357652,-96.994287999999983 33.949205999999997,-96.990835000000004 33.952700999999998,-96.988126301178397 33.954514162310069,-96.987892000000002 33.954670999999998,-96.982723774786024 33.956016867344054,-96.981537499896135 33.956325787441237,-96.981336999999982 33.956377999999994,-96.979415000000003 33.956178,-96.979347000000004 33.955129999999997,-96.980675999999988 33.951813999999999,-96.981031000000002 33.949159999999999,-96.97981799999998 33.941588000000003,-96.976955000000004 33.937452999999998,-96.973806999999979 33.935696999999998,-96.97254199999999 33.935794999999999,-96.952313000000004 33.944581999999997,-96.944610999999995 33.949216999999997,-96.933309804512817 33.955134148312766,-96.932252000000005 33.955688000000002,-96.924267999999998 33.959159,-96.922113999999979 33.959578999999998,-96.921429967464036 33.959451233053208,-96.919039990098355 33.959004821377064,-96.918617999999995 33.958925999999998,-96.91833921313939 33.958790334953079,-96.917063225391544 33.958169405626251,-96.916299999999993 33.957797999999997,-96.91417790611122 33.956157267456653,-96.911732563120111 33.95426660943896,-96.911336000000006 33.953960000000002,-96.910857206749995 33.953482904168467,-96.908421363636307 33.951055696608989,-96.907387 33.950024999999997,-96.905252999999988 33.947218999999997,-96.902433999999985 33.942017999999997,-96.901946611333699 33.940667581536225,-96.899441999999993 33.933728000000002,-96.896468999999996 33.91331799999999,-96.897193999999999 33.902954,-96.895728000000005 33.896414,-96.887761838797758 33.878628251663962,-96.883009999999999 33.868018999999997,-96.875280999999987 33.860505000000003,-96.87198767019855 33.857765462058182,-96.866438000000002 33.853149000000002,-96.85608999999998 33.84749,-96.850593000000003 33.847211,-96.845895999999996 33.848974999999996,-96.841592000000006 33.852893999999999,-96.840818999999996 33.863644999999998,-96.839777999999995 33.868395999999997,-96.837412999999984 33.871349000000002,-96.833926235310372 33.873661568818115,-96.832156999999995 33.874834999999997,-96.812777999999994 33.872646000000003,-96.794275999999996 33.868886000000003,-96.786859371055769 33.865207582975678,-96.783484999999999 33.863533999999994,-96.780568999999986 33.860098,-96.779588000000004 33.857939000000002,-96.777202000000003 33.848162000000002,-96.776765999999995 33.841976000000003,-96.770675999999995 33.829621000000003,-96.769378000000003 33.827477000000002,-96.766316855179326 33.825510582121247,-96.766234999999995 33.825457999999998,-96.761588000000003 33.824406000000003,-96.754041 33.824657999999999,-96.746233969152598 33.825673509073113,-96.746037999999984 33.825699,-96.741799282455162 33.826447231494264,-96.71318112067361 33.831498997677379,-96.712421999999989 33.831632999999997,-96.708134 33.833060000000003,-96.704457000000005 33.835020999999998,-96.700318655907978 33.838434731313264,-96.699573999999998 33.839049000000003,-96.695480719177567 33.844085960723298,-96.693127324791789 33.84698191524042,-96.690708 33.849958999999998,-96.688190999999989 33.854613,-96.687524326814838 33.85620885855986,-96.684726999999995 33.862904999999998,-96.682762564556768 33.871464102957781,-96.682209 33.873876000000003,-96.682102999999998 33.876645000000003,-96.683464 33.884217,-96.681051007513375 33.895708672998403,-96.680947000000003 33.89620399999999,-96.675306000000006 33.909114000000002,-96.673449000000005 33.912278,-96.670618000000005 33.914913999999996,-96.667186999999998 33.916939999999997,-96.665308436653305 33.917161206414967,-96.66440999999999 33.917267000000002,-96.659896000000003 33.916665999999999,-96.65150600931733 33.910998546998165,-96.644049999999979 33.905962000000002,-96.630116999999998 33.895422000000003,-96.628293999999997 33.894477000000002,-96.616355751891987 33.894625565889051,-96.614680358047494 33.89464641537834,-96.611821556077771 33.89468199182577,-96.607562 33.894734999999997,-96.592948000000007 33.895615999999997,-96.588319642127203 33.894847991673281,-96.587934000000004 33.894784,-96.58760387584924 33.894318075382706,-96.585452000000004 33.891280999999999,-96.585359999999994 33.888947999999999,-96.587494000000007 33.884250999999999,-96.590112000000005 33.880665,-96.597347999999982 33.875100999999994,-96.601685999999987 33.872822999999997,-96.611969999999999 33.869016000000002,-96.625399000000002 33.856541999999997,-96.628968999999998 33.852406999999999,-96.629746999999995 33.850866000000003,-96.630021999999983 33.847541,-96.629842405402627 33.847037300944812,-96.629577623992816 33.846294683138318,-96.629289999999997 33.845488000000003,-96.627812273090953 33.844523322531259,-96.626623854929747 33.84374750920842,-96.623154999999997 33.84148299999999,-96.622548607895212 33.841284829387497,-96.620258613641042 33.840536452948584,-96.605267599881515 33.835637348301233,-96.601258 33.834327000000002,-96.599141379811712 33.83346048638235,-96.597030984690946 33.832596521217091,-96.595164098773168 33.831832245189069,-96.592925999999991 33.830916000000002,-96.587067000000005 33.828009000000002,-96.573054340771023 33.81917200025552,-96.572936999999996 33.819097999999997,-96.568822993124115 33.818734252140963,-96.566549213959448 33.818533211567136,-96.566298000000003 33.818511,-96.551222999999993 33.81912899999999,-96.541502252916899 33.82118138128849,-96.537683599711926 33.821987629236112,-96.532865 33.823005000000002,-96.532141353898353 33.822830017549641,-96.529233999999988 33.822127000000002,-96.526655000000005 33.820891000000003,-96.526331240434345 33.820568979830284,-96.523863000000006 33.818114,-96.519910999999993 33.811346999999998,-96.517492044660074 33.805400310572544,-96.516583999999995 33.803167999999999,-96.515958999999995 33.798933999999996,-96.515952403498957 33.797370629253059,-96.5159410675722 33.794684014612457,-96.515912 33.787795000000003,-96.51191399999999 33.781477999999993,-96.502285999999998 33.773459999999993,-96.500268000000005 33.772582999999997,-96.486059999999995 33.773009999999999,-96.459153999999998 33.775232000000003,-96.456254 33.776035,-96.450509999999994 33.780588000000002,-96.448044999999993 33.781030999999999,-96.436454999999995 33.780050000000003,-96.430214000000007 33.778654000000003,-96.423664429058576 33.776393528613141,-96.422642999999994 33.776040999999999,-96.422322840041474 33.775682043625913,-96.420980388055867 33.774176915691271,-96.419961 33.773034000000003,-96.419583102042878 33.772404537625398,-96.417562000000004 33.769038000000002,-96.416145999999998 33.76609899999999,-96.413408000000004 33.757714,-96.411885201063754 33.755703128434462,-96.408468999999997 33.751191999999996,-96.403507000000005 33.746288999999997,-96.384116000000006 33.730141000000003,-96.383299027856694 33.729391180874664,-96.380090129695702 33.726446045924753,-96.379450023740389 33.7258585550397,-96.370956555983966 33.718063228581727,-96.370761536889887 33.717884239557762,-96.369590000000002 33.716808999999998,-96.369084597701828 33.715741445126696,-96.366945 33.711221999999999,-96.363253 33.701050000000002,-96.363143372320295 33.69469995601051,-96.363135 33.694215,-96.362964209763192 33.693778090504111,-96.362198000000006 33.691817999999998,-96.356236230636398 33.68737146600408,-96.355945999999989 33.687154999999997,-96.355455421824701 33.68710517164083,-96.352724507664888 33.686827790830883,-96.348305999999994 33.686378999999995,-96.346643697131185 33.686554630652331,-96.344174978865311 33.686815463144171,-96.342664999999997 33.686974999999997,-96.337175125435976 33.689043696356201,-96.321102999999994 33.695099999999996,-96.318759999999997 33.696753,-96.318590686098233 33.696960051986665,-96.318010443675675 33.697669623646739,-96.316924999999998 33.698996999999999,-96.314798583555884 33.702507526903553,-96.309963999999994 33.710489000000003,-96.308342766341951 33.715746247280322,-96.307034999999985 33.719987000000003,-96.307001890234133 33.720499786556005,-96.306595999999999 33.726785999999997,-96.307389 33.735005,-96.3061 33.741002000000002,-96.30525491425243 33.743702118680943,-96.304087485467235 33.747432149959735,-96.303009000000003 33.750878,-96.301705999999982 33.753756000000003,-96.294866999999996 33.764771000000003,-96.292482000000007 33.766418999999999,-96.277269000000004 33.769734999999997,-96.269895999999989 33.768405,-96.251497151236435 33.760405611313516,-96.248231999999987 33.758986,-96.23960043273749 33.754058875473291,-96.229595766085112 33.748347949873668,-96.229022999999998 33.748021,-96.220521000000005 33.747390000000003,-96.1999 33.752116999999998,-96.196336040977513 33.753254070097242,-96.186553999999987 33.756374999999998,-96.178059000000005 33.760517999999998,-96.174632999999986 33.763699000000003,-96.169932696734321 33.769534234627457,-96.169452000000007 33.770130999999999,-96.167888847884015 33.774482610028038,-96.162756999999985 33.788769000000002,-96.162122572851359 33.796140263149638,-96.162213638666273 33.796174412747511,-96.166837334419654 33.79790829445497,-96.170373408451042 33.799381659586444,-96.173025461119408 33.800560352833699,-96.175150000000002 33.801951000000003,-96.17734 33.805117000000003,-96.17895107878303 33.810509748931381,-96.178963999999993 33.810552999999999,-96.176910000000007 33.813934000000003,-96.175889999999981 33.814627000000002,-96.164217431250009 33.817001137011715,-96.150765000000007 33.816986999999997,-96.148792 33.819197000000003,-96.151629999999983 33.831945999999995,-96.150147000000004 33.835856,-96.148457006953691 33.837436961236868,-96.14806999999999 33.83779899999999,-96.147446683377808 33.837891494337825,-96.138904999999994 33.839159000000002,-96.128108733462625 33.839703753325978,-96.122951 33.839963999999995,-96.118168999999995 33.837883999999995,-96.109992999999989 33.832396000000003,-96.104074999999995 33.830730000000003,-96.099360000000004 33.830469999999998,-96.097448 33.832724999999996,-96.097637999999989 33.837935000000002,-96.099152999999987 33.842409000000004,-96.100785000000002 33.844230000000003,-96.101348999999999 33.845720999999998,-96.101472999999999 33.846708999999997,-96.100094999999996 33.847971,-96.084626 33.846656000000003,-96.063924 33.841522999999995,-96.055357999999984 33.838262,-96.049381559404907 33.836618570443349,-96.048833999999999 33.836468000000004,-96.044074587870469 33.838420736557822,-96.037191000000007 33.841245,-96.031783693249977 33.849934429642978,-96.031271075997878 33.850758194920559,-96.029462717056688 33.852402158173604,-96.025188419607474 33.852073366797306,-96.022229284477689 33.850922593794486,-96.021900493101384 33.849114234853282,-96.022507000000004 33.846130000000002,-96.022064891975305 33.843195970965255,-96.021407302851145 33.841880802274289,-96.019950829321616 33.840821548098475,-96.019598947095744 33.84056563358331,-96.005296 33.845505000000003,-96.000534603789163 33.849305889934179,-95.998351 33.851049000000003,-95.997709 33.852181999999992,-95.997673906338932 33.852568581878202,-95.997405462294296 33.855525685805766,-95.9977342536706 33.860950759443568,-95.997376655326022 33.862202357114477,-95.996747879541701 33.864403078452035,-95.993624351909531 33.866211440579008,-95.991487204777812 33.866869023331596,-95.988856861024331 33.866869023331596,-95.984753921632091 33.864671017651808,-95.984253769013037 33.864403078452035,-95.980965842506947 33.859306796190523,-95.9735403792467 33.856832331211713,-95.972155999999998 33.856371000000003,-95.971744371228908 33.856383941655046,-95.951609000000005 33.857016999999999,-95.945502988542614 33.859346036998218,-95.944283999999982 33.859811,-95.943359355023844 33.860365112733476,-95.941777921153459 33.861312819872232,-95.941266999999996 33.861618999999997,-95.936631000000006 33.870615,-95.93550004724635 33.874497995518659,-95.935325000000006 33.875098999999999,-95.935308000000006 33.878723999999998,-95.935637 33.880370999999997,-95.936817000000005 33.882385999999997,-95.937201999999999 33.884652000000003,-95.936131999999986 33.886825999999999,-95.935198 33.887100999999994,-95.922712000000004 33.883758,-95.915960999999996 33.881148000000003,-95.905343000000002 33.875629000000004,-95.893305999999995 33.868161,-95.887490999999997 33.863855999999998,-95.881292000000002 33.860627,-95.859469000000004 33.852455999999997,-95.849863999999997 33.844951999999999,-95.843772999999999 33.838949,-95.841300369514457 33.837329726167006,-95.840012000000002 33.836486,-95.839442445999168 33.836292954052603,-95.838335071878717 33.835917618112738,-95.837515999999994 33.835639999999998,-95.831947999999997 33.835160999999999,-95.828244999999995 33.836053999999997,-95.827967044704152 33.836191602640042,-95.826538854622555 33.836898632614485,-95.822787000000005 33.838755999999989,-95.821905415666805 33.839551758599306,-95.821112514659319 33.840267467546653,-95.820784000000003 33.840564,-95.819357999999994 33.842784999999999,-95.818975999999992 33.844456,-95.819524999999999 33.848438999999999,-95.820676999999989 33.850750999999995,-95.821665999999979 33.855443,-95.821665999999979 33.856633000000002,-95.82138191533943 33.857119395418813,-95.820824189768416 33.858074304994595,-95.820595999999995 33.858464999999995,-95.820256321913618 33.858527429344676,-95.805149 33.861303999999997,-95.800842000000003 33.861212000000002,-95.790314669347865 33.857829825250164,-95.789867 33.857685999999994,-95.789358977006231 33.85733891951336,-95.788304168820886 33.85661827626933,-95.787891000000002 33.856335999999999,-95.776255000000006 33.845145000000002,-95.773281999999995 33.843834,-95.772067000000007 33.843817,-95.763621999999984 33.847954,-95.758311274366889 33.849968021173019,-95.758015999999998 33.850079999999998,-95.757640875431136 33.850475976069447,-95.754310000000004 33.853991999999998,-95.753512999999984 33.856464000000003,-95.753688987366843 33.856976705401074,-95.75729390188404 33.867478931648478,-95.757457999999986 33.86795699999999,-95.758009454152003 33.868443703186436,-95.760805000000005 33.870911,-95.762558999999996 33.874366999999992,-95.76194240701966 33.883030946465368,-95.761915999999999 33.883401999999997,-95.758343999999994 33.890610999999993,-95.756366999999997 33.892625000000002,-95.747335000000007 33.895755999999999,-95.737508000000005 33.895966999999999,-95.729445045960333 33.893952819075864,-95.728448999999998 33.893704,-95.723226300470785 33.890698381785455,-95.717160861060378 33.887207774089354,-95.713910181462765 33.885337036216413,-95.713539999999981 33.885123999999998,-95.710877999999994 33.884551999999999,-95.696961999999999 33.885218000000002,-95.684831000000003 33.890231999999997,-95.676924999999983 33.897236999999997,-95.669978 33.905844000000002,-95.665338000000006 33.908132000000002,-95.659818 33.909092,-95.647272999999998 33.905976000000003,-95.636977999999999 33.906613,-95.609439392746168 33.923623282239362,-95.603656999999998 33.927194999999998,-95.599677999999983 33.934246999999999,-95.585944999999981 33.93448,-95.570311428427317 33.932892416047835,-95.564667905744443 33.932319318211334,-95.563423999999998 33.932192999999998,-95.562724847986416 33.932007581530534,-95.561592737930383 33.931707340510293,-95.561007000000004 33.931551999999996,-95.560415995740641 33.931042615914556,-95.559931936825777 33.930625407571753,-95.559414000000004 33.930179000000003,-95.558286100391328 33.928753215740784,-95.557777967458279 33.928110882033096,-95.556914999999989 33.927019999999999,-95.551147999999984 33.914566,-95.549144999999996 33.90795,-95.549475 33.901310999999993,-95.552330999999981 33.894419999999997,-95.55209457427955 33.888655441173519,-95.552085000000005 33.888421999999998,-95.551943532854764 33.888208369560985,-95.548485831718622 33.882986873004867,-95.548324999999991 33.882744000000002,-95.547838962671932 33.882363312195096,-95.545708294665019 33.880694470565629,-95.545197000000002 33.880293999999999,-95.54352178779898 33.880173169084813,-95.541265054919734 33.880010393826282,-95.539789999999996 33.879904000000003,-95.537358049249164 33.88037416967029,-95.534038375697051 33.881015963020303,-95.533282999999997 33.881161999999996,-95.531798241123994 33.881968630089013,-95.525321999999989 33.885486999999998,-95.521418133191162 33.888379988113826,-95.520137966641357 33.88932866459119,-95.515301759339067 33.891142240377064,-95.510062536063273 33.890134704348199,-95.506233872599807 33.886306036979761,-95.506495 33.878588999999998,-95.506084999999999 33.87639,-95.502407477038815 33.874787101867227,-95.502303999999995 33.874741999999998,-95.492028000000005 33.874822000000002,-95.480004545492946 33.87882505156746,-95.478574999999992 33.879300999999998,-95.477829321179073 33.879890044047791,-95.469962325642697 33.886104525088022,-95.467351237093553 33.886417854985297,-95.464924614258621 33.886709049048328,-95.462909526581015 33.885903021006229,-95.461498966768687 33.883686425341857,-95.46277824472287 33.878821065729895,-95.464211000000006 33.873372000000003,-95.463346 33.872312999999998,-95.461127233926518 33.871832054399569,-95.447370000000006 33.868850000000002,-95.418546279096461 33.866998581211959,-95.411345060268999 33.866536029139695,-95.407794999999979 33.866307999999989,-95.406882133018115 33.866362247208706,-95.404325916920058 33.866514150597617,-95.375232999999994 33.868243,-95.352338000000003 33.867789000000002,-95.339561303488324 33.868836967540759,-95.339121999999989 33.868873,-95.339014688391742 33.869073090388603,-95.33835013321854 33.870312202400832,-95.334854000000007 33.876830999999996,-95.334836460323601 33.877305631062114,-95.334523000000004 33.885787999999998,-95.333451999999994 33.886285999999998,-95.325571999999994 33.885703999999997,-95.310579050797429 33.880679668661742,-95.294789354523203 33.875388337067108,-95.287864786488143 33.87494634339312,-95.28344485260331 33.877745636185885,-95.281676877907344 33.882902226669891,-95.281529544303439 33.887616824907447,-95.281317419351268 33.889260797911334,-95.280350898312903 33.896751357029835,-95.279761569607459 33.899108654721076,-95.277846267017765 33.900876629417048,-95.275341635722626 33.901760616765031,-95.272542342929853 33.902055281117747,-95.267212735027385 33.900338966530455,-95.263849803053915 33.899255988324974,-95.261050510261143 33.899992642069066,-95.255746586173245 33.902939265610648,-95.253094626984378 33.90544389690578,-95.250884657186859 33.913105118684925,-95.250737329293145 33.917083057468233,-95.251326652288412 33.924154956252103,-95.253020000000006 33.927236999999998,-95.253623000000005 33.92971,-95.252905999999982 33.933647999999998,-95.250453815364224 33.936614470603772,-95.23166760862577 33.959340626388752,-95.231194814374604 33.959912577712174,-95.230491 33.960763999999998,-95.226393000000002 33.961953999999999,-95.219358 33.961567000000002,-95.184075000000007 33.950353,-95.174181557651636 33.944707625858101,-95.173657196254922 33.944408415920272,-95.168745999999999 33.941605999999993,-95.166685999999984 33.939728000000002,-95.161108999999982 33.937598,-95.149462 33.936335999999997,-95.131725657216535 33.936903570678005,-95.131056 33.936924999999995,-95.130760550144942 33.936820411866918,-95.124700000000004 33.934674999999991,-95.121184 33.931306999999997,-95.121974867397924 33.925542192115131,-95.122499622273722 33.921717137430115,-95.122365486317321 33.918632002634986,-95.119951031304154 33.915815139752631,-95.110963896232136 33.912998276870283,-95.103318123323447 33.913668959251616,-95.10214780889666 33.912991409673538,-95.100769532353866 33.912193461131935,-95.098489218495843 33.909913139475762,-95.095001673232161 33.904815960136006,-95.095247706914634 33.899772255341666,-95.095269945144935 33.899316370327696,-95.09392858558104 33.895962961020395,-95.090441035118587 33.893280234094433,-95.084002493615529 33.893280234094433,-95.079139333602001 33.898143394107954,-95.078905311676394 33.898377416033576,-95.074957661870556 33.900039583313315,-95.073630040977179 33.900598581227868,-95.071259538767663 33.901596686785098,-95.065491679645973 33.899584642240477,-95.06106518008815 33.895292278639054,-95.058834000000004 33.886812999999997,-95.049025 33.864089999999997,-95.046567999999994 33.862564999999996,-95.038661112238941 33.860609605793528,-95.037206999999995 33.86025,-95.033518790033554 33.860141698175291,-95.03143098776043 33.86008039125462,-95.030255193062573 33.860045864827867,-95.022324999999995 33.859813000000003,-95.016999191469623 33.861237606415294,-95.016422000000006 33.861392000000002,-95.008375999999984 33.866088999999995,-95.000223000000005 33.862504999999999,-94.995524000000003 33.857438000000002,-94.992810330111539 33.852698351540766,-94.992671 33.852454999999999,-94.992523097811741 33.852403566519136,-94.990494037024106 33.851697953840834,-94.988486999999992 33.850999999999999,-94.98739725328582 33.851074415574232,-94.983303000000006 33.851354,-94.981650000000002 33.852283999999997,-94.976208 33.859846999999995,-94.973410999999999 33.861730999999999,-94.971435 33.862122999999997,-94.968895000000003 33.860916000000003,-94.965888000000007 33.848421999999999,-94.964400999999995 33.837020999999993,-94.957676000000006 33.835003999999998,-94.949533421399437 33.825707838785306,-94.949112883549958 33.821754768331147,-94.948729542346143 33.818151347643564,-94.948715939727023 33.818023482549535,-94.944301522854289 33.81213759866646,-94.939560116480934 33.810502632153295,-94.935799688114457 33.810339132650462,-94.932366255585293 33.810993121156741,-94.928442330884351 33.812628087669893,-94.92451840618341 33.812791587172725,-94.924196338046286 33.812670811231236,-94.921902464831703 33.811810605997493,-94.919450010309433 33.810175636315982,-94.917815040627914 33.808704169305649,-94.917091634856007 33.805689966907131,-94.916834062621035 33.804616745101868,-94.916997555787162 33.801510305241678,-94.91961350347556 33.794152948011565,-94.920034399525505 33.790224602097751,-94.920103995647338 33.789575041141042,-94.920095560257593 33.789518805381888,-94.91961350347556 33.786305103362189,-94.913003475392784 33.779908559849432,-94.912450337640749 33.77937328682863,-94.911427000000003 33.778382999999998,-94.906244999999998 33.778191999999997,-94.902276 33.776288999999998,-94.89497736748055 33.771540270803243,-94.89019868072495 33.768431100796676,-94.888367999999986 33.76724,-94.887910246679809 33.766674529711281,-94.886225692565191 33.764593571999796,-94.885411379435553 33.764756432942491,-94.881447983999394 33.765549103837166,-94.879218389137634 33.764912090842074,-94.876033253179955 33.760771407616105,-94.875653319149677 33.757021753168047,-94.875534806260347 33.755852122792213,-94.875497398046861 33.755482932714841,-94.877080000000007 33.75222,-94.874668 33.749164,-94.870299604394191 33.746484207390097,-94.869443369718425 33.745958950164457,-94.869299999999996 33.745871,-94.8570941233355 33.742035460072337,-94.849295999999981 33.739584999999991,-94.841633779899112 33.739430990835892,-94.830804318260235 33.740068022348083,-94.828875382311935 33.74092532536806,-94.827937698058648 33.741342073027738,-94.826026615866809 33.743890180559411,-94.824752565187154 33.749304914465036,-94.82447272313469 33.749460382205008,-94.821885938813196 33.750897483986968,-94.817426749089677 33.752171534666616,-94.815635414888177 33.752066164468857,-94.813744972719192 33.751954964523563,-94.81275807295215 33.751896912919612,-94.812012015184067 33.751853028169073,-94.80914539498248 33.749304914465036,-94.798634446013509 33.744527205899239,-94.789716054221742 33.746119775421171,-94.777638928565466 33.753471071068567,-94.775064434371529 33.755038154868203,-94.770923763490302 33.754401129528375,-94.768057130944001 33.753445597691005,-94.766464573766783 33.750897483986968,-94.766146067269247 33.748030863785381,-94.766818924318841 33.746124416643802,-94.768057130944001 33.742616129879757,-94.767738636791165 33.737519908644046,-94.767244154304578 33.736926531576607,-94.76296091588064 33.731786662068515,-94.759138751496963 33.729557067206756,-94.758159820145337 33.729557067206756,-94.753087004596253 33.729557067206756,-94.750011775433265 33.728811557489699,-94.742576055627282 33.727008959675082,-94.742176780415733 33.726449974997927,-94.739390916583417 33.72254976995157,-94.737479828219207 33.716179498036198,-94.737788227808608 33.71500758055268,-94.73907239774114 33.71012773879076,-94.73746132453816 33.705563045258067,-94.73716130937693 33.704713004885136,-94.732383613155861 33.700253815161624,-94.728242929929891 33.699616789821789,-94.725694828570582 33.702483410023376,-94.724525908047042 33.704821269192259,-94.724102271393392 33.705668549067234,-94.721872664186904 33.707261118589173,-94.719006043985303 33.708216656598914,-94.714865360759347 33.707261118589173,-94.711043208720398 33.705668549067234,-94.709450639198465 33.699616789821789,-94.710289486124168 33.697309952648205,-94.710724689878106 33.696113138108018,-94.710724689878106 33.691653948384499,-94.710106194192988 33.688252279047049,-94.71008765219355 33.688150299756906,-94.707858069676533 33.686876245991066,-94.691547961569825 33.685092048879412,-94.684792000000002 33.684353000000002,-94.659166999999997 33.692138,-94.652265035786613 33.690979104454883,-94.649628372726468 33.688049476940073,-94.649099284135872 33.686462209886628,-94.648456523423718 33.684533926193204,-94.64818493525776 33.682632803768527,-94.647928021538007 33.680834402751707,-94.647870600191638 33.680432452214262,-94.648456523423718 33.673401362074948,-94.647827859209684 33.672301196274027,-94.646112824818204 33.669299876741562,-94.642890235687361 33.668420997570671,-94.635273213800133 33.669885811328072,-94.631328876730365 33.67284406472757,-94.630585813750528 33.673401362074948,-94.627656194751552 33.677795791992715,-94.62121101648988 33.681018386800773,-94.616816575217669 33.679553573043371,-94.614284398758912 33.677302743466427,-94.611543254774574 33.674866164477912,-94.611424034353576 33.674789522931938,-94.607441775118403 33.672229504256364,-94.60304734520065 33.671350625085473,-94.596895128555005 33.671350625085473,-94.593672545101384 33.673987285307021,-94.590449961647764 33.677502836053897,-94.590316660066918 33.67755410593854,-94.586641449284855 33.678967649811298,-94.579620000000006 33.677622999999997,-94.576973687569549 33.673401362074948,-94.5728722135906 33.669885811328072,-94.571305222138406 33.668005422800071,-94.569942586075811 33.666370260581196,-94.569356662843745 33.663440621711956,-94.571445361022185 33.660423619728157,-94.571993323065286 33.659632120703485,-94.572286279004103 33.656995454804722,-94.570821465246695 33.654944723492456,-94.568770728257221 33.65465176187643,-94.564669254278257 33.655823608340576,-94.563858010166513 33.65591721375597,-94.557052229552454 33.656702498865904,-94.552071876402621 33.653479904057846,-94.551192985877293 33.650257320604226,-94.551311999999982 33.644569999999995,-94.553536678805585 33.642054372646328,-94.552657799634687 33.638245860283412,-94.549142248887819 33.635902161677912,-94.543868917090279 33.635902161677912,-94.538888563940446 33.637952898667386,-94.538195599937964 33.637916426989378,-94.537583502619341 33.637884211439605,-94.533322276204103 33.637659937051346,-94.529220802225154 33.63443734792051,-94.528408204203203 33.630103504051213,-94.528341911699826 33.629749945032266,-94.52980672545722 33.627406252103981,-94.528927834931892 33.621839964367631,-94.526291174710352 33.619203298468861,-94.521363727720257 33.61686924674752,-94.520724886974008 33.61656663824732,-94.504615 33.620682000000002,-94.493418698303032 33.624467326832118,-94.492501061148843 33.624777568252533,-94.491502999999994 33.625115,-94.491295462081894 33.62531395337146,-94.487514000000004 33.628939000000003,-94.485874999999993 33.637867,-94.481313 33.638818999999998,-94.476415000000003 33.638947000000002,-94.466075000000004 33.636262000000002,-94.464185999999998 33.637655000000002,-94.461453000000006 33.643615999999994,-94.459197999999986 33.645145999999997,-94.454819999999998 33.644902999999999,-94.448637000000005 33.642766000000002,-94.446871000000002 33.640177999999999,-94.447513999999998 33.636254999999991,-94.448451000000006 33.634497000000003,-94.458816999999982 33.632444,-94.462736000000007 33.63091,-94.461129 33.625414999999997,-94.460285999999996 33.624420999999998,-94.45525499999998 33.622917,-94.452710999999994 33.622621000000002,-94.452325000000002 33.618817,-94.452961000000002 33.616985999999997,-94.454768999999999 33.615155999999992,-94.462335999999993 33.610567000000003,-94.469451000000007 33.60731599999999,-94.472166 33.604199,-94.471974000000003 33.602665000000002,-94.471151999999989 33.601588,-94.468086 33.599435999999997,-94.461794602929331 33.598691554192769,-94.458900358388505 33.598349085232492,-94.458231999999995 33.598269999999999,-94.454858239556387 33.593453869357283,-94.453995999999989 33.592222999999997,-94.453435550445548 33.592019500625121,-94.452150252013013 33.591552808439438,-94.451622 33.591360999999999,-94.449112 33.590893999999992,-94.442363999999998 33.591242999999999,-94.441536999999997 33.591501999999991,-94.439518000000007 33.594154000000003,-94.430358101189597 33.59122600196271,-94.430038999999994 33.591124,-94.429672337173542 33.590855074196774,-94.427920122643982 33.589569927010331,-94.427577999999983 33.589319000000003,-94.425982000000005 33.586424999999998,-94.413155000000003 33.569367999999997,-94.412481642075306 33.56890283335202,-94.412480771235352 33.568902231761562,-94.412480202418593 33.568901838813659,-94.412175000000005 33.568691,-94.408900999999986 33.568196999999998,-94.403341999999995 33.568424,-94.397341999999981 33.571607999999998,-94.385926999999995 33.581887999999999,-94.382886999999997 33.58326799999999,-94.379649 33.580607,-94.378075999999993 33.577019,-94.377759999999981 33.574609000000002,-94.378561000000005 33.571328999999999,-94.380090999999993 33.568942999999997,-94.382534000000007 33.567056999999998,-94.388052000000002 33.565511,-94.392357000000004 33.565286999999998,-94.394655618773015 33.564059042448399,-94.397398454287298 33.562313601959417,-94.399227012370631 33.559903231990447,-94.399393244337958 33.557077279687135,-94.399143896386974 33.555498071165481,-94.397957000000005 33.554389999999998,-94.392572999999999 33.551141999999999,-94.389515000000003 33.546778000000003,-94.386086000000006 33.544922999999997,-94.381666999999993 33.544035,-94.373392999999993 33.544471,-94.371597999999992 33.545000999999999,-94.363297000000003 33.544956999999997,-94.361350999999999 33.544612999999998,-94.358969999999999 33.54323,-94.355945000000006 33.54318,-94.348944999999986 33.548358999999998,-94.347382999999979 33.55107799999999,-94.34729 33.552197,-94.352653000000004 33.560611000000002,-94.352433000000005 33.56217199999999,-94.345512999999997 33.567312999999999,-94.344023000000007 33.567824000000002,-94.340576999999996 33.567878,-94.340047258358467 33.56768232744934,-94.338972839399958 33.567285465504582,-94.33842199999998 33.567081999999999,-94.337996277272822 33.566655299162022,-94.334939999999989 33.563592,-94.334379999999996 33.562536,-94.333929800646288 33.557825151092565,-94.333894999999998 33.557461000000004,-94.333202999999997 33.555365999999992,-94.331833000000003 33.553348,-94.33059 33.552692,-94.323660000000004 33.549835000000002,-94.319491999999997 33.548864000000002,-94.309582000000006 33.551673,-94.30641 33.555616,-94.306214999999995 33.557676,-94.307180999999986 33.559797000000003,-94.303577000000004 33.56828,-94.301022999999986 33.573022000000002,-94.298392000000007 33.576217999999997,-94.293257999999994 33.580418999999999,-94.289129000000003 33.582143999999992,-94.287025 33.582410000000003,-94.283581999999996 33.581890999999999,-94.282647999999995 33.580978000000002,-94.280849000000003 33.577187000000002,-94.280604999999994 33.574907999999994,-94.282171999999989 33.572989,-94.290372000000005 33.567905000000003,-94.291686999999996 33.563481000000003,-94.290901000000005 33.558872,-94.289439999999999 33.557634999999998,-94.287571999999997 33.557178,-94.279089999999997 33.557026,-94.275600999999995 33.557963999999998,-94.274473 33.558652000000002,-94.271997999999996 33.561517999999992,-94.270978999999997 33.563220999999999,-94.270853000000002 33.564782999999998,-94.265668999999988 33.573588999999998,-94.262754999999999 33.577354,-94.257801 33.582507999999997,-94.257524288354617 33.582703553652586,-94.252656000000002 33.586143999999997,-94.245931999999996 33.589113999999995,-94.242777000000004 33.589708999999999,-94.240178999999998 33.589536000000003,-94.236971999999994 33.587411000000003,-94.236362999999997 33.585991999999997,-94.236835999999997 33.580914,-94.237975000000006 33.577756999999998,-94.238867999999997 33.576721999999997,-94.244365999999999 33.573549,-94.251108000000002 33.56528,-94.252330999999984 33.561855,-94.252283000000006 33.560445,-94.251569000000003 33.558188,-94.250197 33.556764999999999,-94.237903999999986 33.552675,-94.233128263729824 33.552212399803537,-94.233017493976078 33.552201670126067,-94.231843999999981 33.552087999999998,-94.226392000000004 33.552911999999999,-94.222920999999999 33.554088,-94.21922099999999 33.556095999999997,-94.213604000000004 33.563133999999998,-94.21268334130005 33.563763266722709,-94.208078 33.566910999999998,-94.205634000000003 33.567228999999998,-94.203593999999981 33.566546000000002,-94.202594978382763 33.562850001484037,-94.201237000000006 33.557825999999999,-94.199485999999993 33.556085000000003,-94.197816999999986 33.555238000000003,-94.196394999999995 33.555123000000002,-94.193247999999997 33.556153999999999,-94.191332999999986 33.55766599999999,-94.189883999999992 33.562454000000002,-94.192482999999996 33.570425,-94.194399000000004 33.573678,-94.196366991504703 33.574779501237479,-94.201105911663163 33.575851400157113,-94.204265191768783 33.575005164570705,-94.207404999999994 33.574353000000002,-94.209665 33.573509999999999,-94.211329000000006 33.573774,-94.216140999999993 33.576391999999998,-94.217408000000006 33.579259999999998,-94.217197999999982 33.580736999999999,-94.214431000000005 33.583187000000002,-94.212997 33.583486999999991,-94.210966999999997 33.583143,-94.205788416261612 33.581380140341984,-94.203588205048902 33.580815984742067,-94.199751933850294 33.581098061448763,-94.196536237091394 33.581718635888464,-94.194464999999994 33.582886000000002,-94.190890999999979 33.587474,-94.183913000000004 33.594681999999999,-94.180879999999988 33.592612000000003,-94.176327 33.591076999999999,-94.162266000000002 33.588906,-94.161081999999993 33.587972,-94.162009999999995 33.580877,-94.161276999999998 33.579270999999999,-94.156782000000007 33.575749000000002,-94.152625999999998 33.575923000000003,-94.148731999999995 33.580196999999998,-94.146047999999993 33.581975,-94.144383000000005 33.582097999999995,-94.142160000000004 33.581389999999999,-94.141852 33.579590000000003,-94.143023999999983 33.577725,-94.145668999999984 33.575599999999994,-94.149506000000002 33.573602,-94.151257 33.571793,-94.151754999999994 33.569476000000002,-94.151455999999996 33.568387,-94.148520000000005 33.565677999999991,-94.145239000000004 33.564987000000002,-94.143401999999995 33.565504999999995,-94.136863999999989 33.570999999999998,-94.136045999999993 33.571387999999999,-94.135142000000002 33.571033,-94.134308000000004 33.569209,-94.133047999999988 33.557952999999998,-94.131382000000002 33.552934,-94.128658 33.550952000000002,-94.126897999999983 33.550646999999991,-94.123897999999997 33.552100000000003,-94.122878999999983 33.553111999999999,-94.12071899999998 33.560555,-94.120354999999989 33.5655,-94.119902152897509 33.566998927274319,-94.112842999999998 33.566991000000002,-94.103176000000005 33.570349999999998,-94.100106999999994 33.57256799999999,-94.097439999999992 33.573718999999997,-94.088943 33.575322,-94.082640999999995 33.575491999999997,-94.072670000000002 33.572234000000002,-94.072231491265512 33.572605318678747,-94.072031926011121 33.573523317998088,-94.072031926011121 33.573846369634623,-94.072031926011121 33.574161925883949,-94.071815412538413 33.574459631515609,-94.071712621294751 33.574600969288895,-94.071353404455635 33.574840447439463,-94.070395493400298 33.574561056392717,-94.069534727631535 33.574169799087244,-94.069517406590393 33.574161925883949,-94.068559493988133 33.573563230894273,-94.068280102941401 33.571966710019424,-94.06782332144887 33.570215714974232,-94.067801146640278 33.570130711574109,-94.066845999999998 33.568908999999998,-94.061283000000003 33.568804999999998,-94.056597999999994 33.567824999999999,-94.056095999999997 33.567252000000003,-94.055662999999996 33.561886999999999,-94.056442000000004 33.560997999999991,-94.059849999999997 33.559249,-94.061179999999993 33.559159,-94.066685000000007 33.560953999999995,-94.067984999999993 33.560960999999999,-94.071719999999999 33.559682000000002,-94.073744000000005 33.558284999999998,-94.073825999999997 33.555833999999997,-94.072156000000007 33.553863999999997,-94.069091999999998 33.553406000000003,-94.06547999999998 33.550908999999997,-94.061896000000004 33.549764000000003,-94.056095999999997 33.550725999999997,-94.051882000000006 33.552585,-94.050211999999988 33.551082999999998,-94.046040000000005 33.551321000000002,-94.043449999999993 33.552253,-94.043428000000006 33.551424999999995,-94.043374999999997 33.542315000000002,-94.043020107474533 33.494534442391668,-94.043008999999998 33.493039000000003,-94.043278999999998 33.491029999999995,-94.043271947583932 33.489425304099555,-94.043188 33.470323999999991,-94.043130608695648 33.460424000000003,-94.043089437732434 33.453322008844353,-94.043061045958495 33.448424427841935,-94.043010021810147 33.439622762252007,-94.042987999999994 33.435823999999997,-94.042987999999994 33.434442436873745,-94.042987999999994 33.431023999999994,-94.042886999999993 33.420225000000002,-94.042890126641851 33.419424334827802,-94.042891364631132 33.419107312620362,-94.042967439944888 33.399626074590046,-94.043053 33.377715999999999,-94.042868999999996 33.371169999999999,-94.043127999999996 33.358756999999997,-94.043066999999979 33.352097,-94.043066999999979 33.347351000000003,-94.043066999999979 33.339614667914582,-94.043066999999979 33.330497999999999,-94.042990000000003 33.271227000000003,-94.043049999999994 33.260903999999996,-94.043003999999996 33.250127999999997,-94.042730000000006 33.241822999999997,-94.042876000000007 33.215218999999998,-94.042891999999995 33.202666,-94.042874999999995 33.199784999999999,-94.042718999999991 33.160290999999994,-94.043184999999994 33.143476,-94.043076999999982 33.138162,-94.043007000000003 33.13389,-94.042951563372725 33.117233519058104,-94.042869999999994 33.092726999999996,-94.043036 33.079484999999998,-94.042963999999998 33.019219,-94.042986850316112 33.007494023677346,-94.043068075862834 32.965815492539427,-94.043087999999997 32.955592000000003,-94.043066999999979 32.937902999999999,-94.043092 32.910021,-94.042884999999998 32.898910999999998,-94.042859000000007 32.892771000000003,-94.042885999999996 32.880965000000003,-94.043025 32.880445999999999,-94.042784999999995 32.871485999999997,-94.042921087938623 32.829694015190334,-94.043025999999983 32.797476000000003,-94.042747000000006 32.786973000000003,-94.042828999999998 32.785277,-94.042937999999992 32.780557999999999,-94.043026999999995 32.776862999999999,-94.042946999999998 32.767991000000002,-94.042974715046569 32.757603400545236,-94.04314699999999 32.693030999999998,-94.042912999999999 32.655126999999993,-94.042779999999993 32.643465999999997,-94.042823999999996 32.640304999999998,-94.042925999999994 32.622014999999998,-94.042929 32.618259999999992,-94.042918999999998 32.610142000000003,-94.042939007208048 32.604544739553475,-94.043082999999996 32.564261000000002,-94.043142000000003 32.559502000000002,-94.043081 32.513612999999999,-94.042884999999998 32.505144999999999,-94.042911000000004 32.492851999999999,-94.043088999999995 32.486561000000002,-94.043071999999995 32.48429999999999,-94.042955000000006 32.480260999999999,-94.042995000000005 32.478003999999999,-94.042901999999998 32.472905999999995,-94.042874999999995 32.471347999999992,-94.042902999999981 32.470385999999998,-94.042907999999997 32.439890999999996,-94.042985999999999 32.435507,-94.042898999999991 32.400658999999997,-94.042923000000002 32.399918,-94.042900999999986 32.392282999999999,-94.042762999999994 32.373331999999998,-94.042738999999997 32.363559000000002,-94.042733519218956 32.277818574933548,-94.042732999999998 32.269696000000003,-94.042732 32.269620000000003,-94.042671451745775 32.225096273752321,-94.042662000000007 32.218145999999997,-94.042600205901905 32.185155675879351,-94.042565999999994 32.166893999999999,-94.042538999999991 32.166826,-94.042591000000002 32.158096999999998,-94.042681000000002 32.137956000000003,-94.042751999999993 32.125163,-94.042337000000003 32.119914,-94.042699999999996 32.056012000000003,-94.042717288248511 32.00695918811028,-94.042720000000003 31.999265,-94.042490448495869 31.997488887291052,-94.042251674184627 31.995641414801661,-94.041832999999997 31.992401999999998,-94.038411999999994 31.992436999999999,-94.029282999999992 31.995864999999998,-94.027080554152732 31.994823406342874,-94.018664 31.990842999999998,-94.011671046736083 31.979908989829021,-94.008352361284565 31.974719974671689,-94.002944198469422 31.966263903968002,-93.995504541226836 31.954631438414648,-93.994147015257326 31.952508844111783,-93.977461000000005 31.926418999999996,-93.971711999999982 31.920383999999995,-93.953546000000003 31.910562999999996,-93.943541310721315 31.908563758569336,-93.938002035663573 31.906916949339585,-93.935007833635339 31.903773037645127,-93.932462763507019 31.895538979891644,-93.931327794714704 31.894581351390723,-93.92767203678045 31.891496810199779,-93.923929283519882 31.889849995167665,-93.919587694495533 31.890748256066246,-93.915948999999998 31.892861000000003,-93.909557114944889 31.893143619429534,-93.905252294448232 31.890856686636408,-93.90476638821832 31.890598549301192,-93.901173350426333 31.885957535142037,-93.901888 31.880063,-93.898135577976262 31.874953416991548,-93.896981462364707 31.873381885463036,-93.889196542313442 31.867692899288475,-93.888241004857136 31.85786451213389,-93.888148571748644 31.856913771406646,-93.887306164689562 31.854968889155742,-93.884117000000003 31.847605999999995,-93.880377455095243 31.844791786271248,-93.879654915472827 31.84424803536659,-93.874821999999995 31.840611000000003,-93.874804231839249 31.835091218914506,-93.874787826198073 31.829994712349503,-93.874761000000007 31.821660999999999,-93.870917000000006 31.816836999999996,-93.868473098390325 31.815251608244314,-93.853390000000005 31.805467,-93.846187999999998 31.802021,-93.839950728453459 31.798597132180646,-93.836868453653821 31.794158659336233,-93.836868453653821 31.791454071635616,-93.836868453653821 31.788733862378688,-93.834649214842401 31.783309060642711,-93.831197070889573 31.780226788232302,-93.827450999999996 31.777740999999999,-93.823442999999997 31.775098,-93.822597999999985 31.773558999999995,-93.826519525540022 31.761832440276638,-93.827342999999999 31.759369999999997,-93.830112066651125 31.754555168030393,-93.830647423185951 31.745811043570992,-93.824579 31.734396999999998,-93.819048075401312 31.72885814427071,-93.818932598107111 31.728523867973351,-93.815657495541259 31.719043310199801,-93.815835943108667 31.711905251886723,-93.815525624652665 31.710796971318612,-93.814600367558683 31.707492480599399,-93.814586782471608 31.707443962415162,-93.811060073548262 31.705827553684028,-93.810303944025605 31.705480994217723,-93.807270273132957 31.704231833580664,-93.806045429297654 31.703104120446881,-93.803419352361757 31.700686292667093,-93.802693549340276 31.697783082925291,-93.802451615781152 31.693186330065117,-93.804479 31.685663999999999,-93.812820813246589 31.676953615984285,-93.81562111199878 31.674029590143711,-93.817425 31.672146,-93.821829497696953 31.673879806810671,-93.822051000000002 31.673966999999998,-93.822341750589956 31.673502431839047,-93.826462000000006 31.666919,-93.8257324849111 31.66154827530681,-93.825660999999997 31.661021999999996,-93.825228912080746 31.660277861177896,-93.81803699999999 31.647891999999999,-93.817707248836442 31.6409111211136,-93.816838000000004 31.622509,-93.818717000000007 31.614555999999997,-93.823976999999999 31.614227999999997,-93.825414416100287 31.615089707767993,-93.827851999999993 31.616550999999998,-93.838056999999992 31.606795000000002,-93.839382999999998 31.599074999999999,-93.837534908858984 31.593743346167731,-93.834924 31.586210999999999,-93.822958 31.568129999999996,-93.822219025006859 31.564792487143556,-93.820763999999997 31.558221000000003,-93.818582000000006 31.554825999999998,-93.798086999999995 31.534044000000002,-93.787687000000005 31.527343999999996,-93.781574079702807 31.525595412174177,-93.780834999999996 31.525383999999999,-93.777170583402579 31.525128039451072,-93.760062000000005 31.523933,-93.753860000000003 31.525331,-93.751899169046524 31.525601857922521,-93.749869902733366 31.526210635456998,-93.746826003263621 31.526007705679731,-93.743376259969125 31.525196002300419,-93.742401241878753 31.523787647735123,-93.74154991556837 31.522557958452786,-93.741111000000004 31.520101,-93.740752889151466 31.518711098615515,-93.740332360499409 31.517078940980245,-93.739317727342822 31.515049678599539,-93.734411826534469 31.513527159467717,-93.733432858180635 31.513223342063657,-93.726736285639134 31.511599931372594,-93.725924582259807 31.504091651519342,-93.728765551952293 31.496786301443361,-93.730997740177827 31.492118989316349,-93.733996137544537 31.48847587643743,-93.737167999999997 31.484621999999998,-93.741884999999982 31.483535,-93.745608448194673 31.481972669547908,-93.746355058504165 31.481633300507966,-93.747840636420193 31.480958036391328,-93.749869902733366 31.478928770078173,-93.749869902733366 31.475276095040186,-93.749626709600278 31.47120988033301,-93.749476 31.468689999999999,-93.709416000000004 31.442995,-93.706857276389258 31.44142369846492,-93.700929751125955 31.437783629836048,-93.697919763270235 31.429300939077926,-93.697603150134782 31.428408665937056,-93.704678 31.418899999999997,-93.704697874245824 31.418107106580852,-93.704878999999991 31.410881,-93.701611 31.409333999999998,-93.695865999999995 31.409391999999997,-93.689953513429003 31.406208353384852,-93.678362516190631 31.399967047179565,-93.675064666986117 31.398191282223291,-93.674659331220113 31.397973024503138,-93.674116999999981 31.397680999999995,-93.671643999999986 31.393352,-93.670181999999983 31.387184,-93.668532759396427 31.379357124595749,-93.668145986696857 31.37510269235548,-93.669064113561134 31.373151679996884,-93.669693055010129 31.371815184369147,-93.669512094168894 31.370548454097019,-93.668919524600994 31.366400452767671,-93.667402247962755 31.365414223393856,-93.665051865060306 31.363886475190469,-93.663891561951601 31.361952641672623,-93.663698175601809 31.360018811902275,-93.664665092360735 31.357698213179859,-93.665825387974422 31.355184231855155,-93.668439000000006 31.353011999999996,-93.669515978941746 31.350266666374935,-93.673736148309771 31.339509006758242,-93.677277000000004 31.330482999999997,-93.687850999999995 31.309835,-93.686922292404276 31.305369360695714,-93.686880000000002 31.305166,-93.686723586265984 31.304979085312567,-93.684737187533131 31.30260533533086,-93.684038999999999 31.301770999999995,-93.683824154244718 31.301752735987076,-93.675439999999995 31.30104,-93.668927999999994 31.297974999999997,-93.657003999999986 31.281735999999999,-93.647719584117951 31.27389987096868,-93.642516 31.269508000000002,-93.632650200244299 31.270182983909681,-93.620343000000005 31.271025000000002,-93.615257056394739 31.261768439618621,-93.61394199999998 31.259374999999995,-93.614287999999988 31.251631,-93.616308000000004 31.244595000000004,-93.616007481020262 31.233959925788763,-93.613835693061347 31.232449117569455,-93.609977782626956 31.229765355202261,-93.609827614285464 31.229660890324059,-93.608033931702224 31.227867209671889,-93.60740940488401 31.227242683526022,-93.605259887151632 31.224152751460338,-93.604319472818304 31.220794125122111,-93.604319472818304 31.215285983654958,-93.607287999999997 31.205403,-93.602442999999994 31.182541,-93.600307999999998 31.176157999999997,-93.598827999999997 31.174679,-93.595531708436056 31.171774432382691,-93.588772842417583 31.16581877494577,-93.588502999999989 31.165581,-93.588046655571759 31.165671453282986,-93.583339301771971 31.166604510813709,-93.579215000000005 31.167421999999995,-93.578993496784307 31.167654977688123,-93.574136071231791 31.172764031170193,-93.569563000000002 31.177574,-93.560942999999995 31.182481999999997,-93.552649000000002 31.185575,-93.548930999999996 31.186601,-93.535096999999993 31.185614,-93.533756450961803 31.184752004501149,-93.533306999999994 31.184463,-93.5330935917342 31.183965183917415,-93.531744000000003 31.180816999999998,-93.533193520062923 31.174490811082034,-93.53417786817559 31.170194787673282,-93.536829999999981 31.158620000000003,-93.540253000000007 31.156578999999997,-93.544009577425854 31.153014849431809,-93.544887639546317 31.148844041597808,-93.544887639546317 31.143136612291205,-93.544701999999987 31.135888999999999,-93.540277800652078 31.128868068802213,-93.539619249807799 31.121843550568837,-93.541375382556595 31.113501939154769,-93.541635919885238 31.113241401693255,-93.548470239502265 31.106407078590973,-93.549716998224596 31.105160319232844,-93.55112206776522 31.099540038044921,-93.551692642249563 31.097257738879012,-93.551034091405285 31.091111287020031,-93.546643772295099 31.082989189009115,-93.540128999999993 31.078002999999995,-93.53104031045666 31.074698717981779,-93.527873992025093 31.072210897922254,-93.526043656150705 31.070772777782928,-93.524020490083288 31.067083472240864,-93.523009982318626 31.065240780256033,-93.523659621286654 31.063941504256789,-93.525329858273139 31.060601035263321,-93.529255791555698 31.057567354514948,-93.532069000000007 31.055264,-93.531218761655126 31.051678447674814,-93.523247999999995 31.037841999999998,-93.516942620821894 31.032584114108545,-93.516407263768343 31.029550433360171,-93.516883288197775 31.024314186160638,-93.516942620821894 31.023661529978199,-93.539525999999995 31.008497999999999,-93.540062152267268 31.008345085566372,-93.540618575989114 31.008186389569964,-93.555580999999989 31.003918999999996,-93.562626264226125 31.00599480945781,-93.566016847371429 31.004567194682853,-93.567979815741779 31.001533515663564,-93.569764334642755 30.996715319472376,-93.571101253513504 30.991033414001794,-93.571905755076102 30.987614282198351,-93.567971999999997 30.977981,-93.560533000000007 30.971285999999999,-93.55046299120518 30.967360467203815,-93.549841 30.967117999999996,-93.539153617393822 30.956968324013513,-93.532549000000003 30.950695999999997,-93.526524876707626 30.939912016599852,-93.526293050708773 30.939497017171423,-93.526245000000003 30.939411,-93.526242458076936 30.939167805401102,-93.526231146824912 30.938085618677029,-93.526146999999995 30.930035,-93.526269219450654 30.929894609689271,-93.530935999999983 30.924533999999998,-93.542488999999989 30.920064,-93.54502991280485 30.920837107400992,-93.546884259495414 30.92151141825828,-93.549244331161987 30.921005686748707,-93.550358562122057 30.920030731622223,-93.551941554990407 30.918645608548566,-93.555650241837967 30.911228247920597,-93.555751501305451 30.910053639118178,-93.555774257662236 30.909789665608852,-93.556493125509377 30.9014508058257,-93.562447641167196 30.896531852982324,-93.563812214002311 30.895404595987301,-93.564247644832776 30.895044891882932,-93.567787752332634 30.888301832311882,-93.567450600170787 30.878524390216981,-93.566008182600839 30.875519355165832,-93.565853452041281 30.875197,-93.565427680666076 30.874309976760035,-93.563763247930751 30.87311591407202,-93.559394659034922 30.869981891957959,-93.55904186947815 30.86972880101742,-93.558616999999984 30.869423999999999,-93.558608112367665 30.868835818489011,-93.558593354020289 30.867859114376206,-93.558393833586933 30.854654896933653,-93.558352334289978 30.851908482785802,-93.558231866260058 30.843935935637496,-93.558171999999999 30.839973999999998,-93.553625999999994 30.835139999999999,-93.55374115920948 30.832414921630001,-93.554057 30.824940999999995,-93.561666000000002 30.807738999999998,-93.563243 30.806218000000005,-93.564501487304341 30.805543276361082,-93.569303000000005 30.802969,-93.578395 30.802046999999998,-93.584264999999988 30.796662999999995,-93.588934854633479 30.787551489258888,-93.589380999999989 30.786681000000002,-93.589895999999996 30.77776,-93.591925627378814 30.768225181611253,-93.592827999999997 30.763985999999996,-93.607757000000007 30.757656999999995,-93.611581311334461 30.752392350515215,-93.615058988962588 30.747604886281291,-93.619129 30.742001999999996,-93.617688 30.738479000000005,-93.609908791486006 30.729403419430973,-93.609718999999998 30.729181999999998,-93.609544 30.723138999999996,-93.61030547238029 30.720788970554505,-93.611192000000003 30.718053,-93.61618399999999 30.713980000000003,-93.616977218405893 30.712276394979256,-93.620773999999997 30.704122000000005,-93.621061387132315 30.696047232392139,-93.621092999999988 30.695159,-93.62235785978659 30.692974242186811,-93.629903999999996 30.679939999999995,-93.632922525899005 30.677439880221801,-93.638212999999993 30.673057999999997,-93.646373493696458 30.671658473870171,-93.653439445062318 30.670446661945991,-93.654970999999989 30.670183999999999,-93.666219386787546 30.661299653678171,-93.670353999999989 30.658033999999997,-93.670860468306827 30.657347728689221,-93.683099999999996 30.640763000000003,-93.685120999999981 30.625201,-93.684323003112922 30.617258061147268,-93.683396999999985 30.608040999999997,-93.680812614601606 30.602993111696524,-93.680648411741274 30.602453589051585,-93.679828117977763 30.599758343304948,-93.681234543283509 30.596101640780542,-93.683902548646543 30.593069810094963,-93.684328672415049 30.59258557751615,-93.684347894395486 30.592579170189346,-93.687282162286593 30.59160108089231,-93.689533999999995 30.592759,-93.692869000000002 30.594382000000003,-93.712453999999994 30.588479,-93.72107859525056 30.580404159651369,-93.727657631584904 30.574244488790981,-93.727844000000005 30.574069999999995,-93.727840097341868 30.573768021870688,-93.72780696123904 30.571204031383882,-93.727747245613443 30.566583382517752,-93.727745999999996 30.566486999999999,-93.725846999999987 30.556978,-93.728764326223569 30.546403128121515,-93.729195000000004 30.544841999999999,-93.736587760607577 30.541316766984647,-93.740252999999996 30.539569,-93.738909526480768 30.537838512460276,-93.732793 30.529960000000003,-93.727721000000003 30.525671000000003,-93.718711305261792 30.520890798500346,-93.714321999999996 30.518561999999996,-93.710116999999997 30.506399999999996,-93.713193644304937 30.50058809182816,-93.716678000000002 30.494005999999995,-93.71365216083376 30.483878530555742,-93.711446941284677 30.476497671106777,-93.710595424186792 30.473647647388944,-93.709703157003446 30.47066123332699,-93.708899372668625 30.467970970942378,-93.705844999999997 30.457747999999999,-93.697828 30.443837999999996,-93.6978 30.440583,-93.698862234241474 30.438260713588438,-93.702220303997905 30.430919206922557,-93.702664999999996 30.429947000000002,-93.722313999999997 30.420729,-93.729486046484141 30.413342592858086,-93.738025291703323 30.404548123662593,-93.738321805525445 30.404242747530638,-93.745333000000002 30.397022,-93.751243378615428 30.396311282781173,-93.751436999999996 30.396287999999998,-93.754787283332149 30.393127406185759,-93.75746720581121 30.390599218098316,-93.757654000000002 30.390422999999995,-93.757872622462301 30.389610210267922,-93.758470934573069 30.387385818798332,-93.75855399999999 30.387077,-93.758091991038413 30.3842338214119,-93.758032188807945 30.383865801664729,-93.757931393201204 30.383245510859378,-93.75589426835937 30.370709152880856,-93.756044740613035 30.365928314513319,-93.75610723110799 30.3639428524199,-93.756352000000007 30.356166000000002,-93.758519945992674 30.350935458285047,-93.760658351649255 30.34577618769989,-93.763244572034736 30.339536487238696,-93.765822 30.333317999999995,-93.764264999999995 30.330222999999997,-93.760690955159149 30.32995156504764,-93.760328 30.329923999999998,-93.747921244232074 30.314935395431327,-93.743830002049762 30.309992764786195,-93.741160171732417 30.306767342150266,-93.738698999999997 30.303793999999996,-93.734966161369201 30.301561360829975,-93.729390287632427 30.298226388348422,-93.724220000000003 30.295133999999997,-93.718684474451791 30.295009979388311,-93.714319430116035 30.294282471059141,-93.71311219174963 30.293184979315004,-93.711118400234781 30.291372437742464,-93.709949692759622 30.289928741213533,-93.708644873043468 30.288316906143507,-93.708448001046747 30.287627854154977,-93.707590519980414 30.284626670422831,-93.706607851977495 30.281187332412603,-93.706635817233519 30.280914670488997,-93.707189856385114 30.275512775340033,-93.709131999999997 30.271826999999995,-93.707538803456245 30.253087036355307,-93.707271000000006 30.249936999999996,-93.705637767078656 30.244573755694763,-93.705083000000002 30.242751999999996,-93.707646217538425 30.23733474070027,-93.713358999999997 30.225261,-93.71802168481895 30.219915738218987,-93.719219999999993 30.218541999999999,-93.720945999999998 30.209852,-93.717397000000005 30.193439,-93.710467999999992 30.180670999999997,-93.706634735424259 30.17682001000631,-93.705927274531248 30.176109277739844,-93.705791510460429 30.175972885881706,-93.703764000000007 30.173936,-93.703646997347349 30.173527735424756,-93.702964616901454 30.171146663230584,-93.701744610591902 30.166889619937699,-93.701686103512344 30.166685467574972,-93.697748000000004 30.152943999999998,-93.696083741705934 30.150925109485563,-93.688211999999979 30.141376,-93.69286799999999 30.135216999999997,-93.69498 30.135185,-93.698276000000007 30.138608000000005,-93.700984936503929 30.137486558544058,-93.701251999999997 30.137376,-93.7012922571502 30.136537706048752,-93.701585086407604 30.130439981942867,-93.701656556414648 30.128951727699913,-93.701742498922442 30.127162105630983,-93.701985639262489 30.122099077688652,-93.702366286953335 30.114172668214064,-93.702403861450691 30.11339023643033,-93.702436000000006 30.112720999999997,-93.70268530105453 30.112503701678254,-93.704703872918159 30.110744253531749,-93.710410303455276 30.105770356484715,-93.714491639657382 30.10221294069715,-93.723764999999986 30.094129999999996,-93.727140999999989 30.092110594495406,-93.7293848599641 30.090768395691203,-93.72996305770063 30.09042253796256,-93.732484999999997 30.088913999999995,-93.734084999999979 30.086129999999997,-93.731705540540531 30.081478540540548,-93.731605000000002 30.081282000000002,-93.729179922109864 30.079341937687897,-93.727017487667368 30.077611990133899,-93.71640499999998 30.069121999999997,-93.716151269697463 30.069056930886212,-93.707507094464489 30.066840132907302,-93.702179999999998 30.065473999999995,-93.700580000000002 30.063666,-93.699479012508235 30.0595596142199,-93.699395999999993 30.059249999999995,-93.699786698153744 30.05843348475733,-93.700658293446523 30.056611948527472,-93.700819999999993 30.056273999999998,-93.702099264262131 30.055460929156467,-93.703267223154896 30.054718601437116,-93.703940000000003 30.054290999999999,-93.704473210548429 30.054251542735575,-93.709782747672762 30.053858640136632,-93.710785394684464 30.05378444485228,-93.720804999999999 30.053042999999995,-93.729054152595779 30.045230570163486,-93.729990027439044 30.044344241966268,-93.737446000000006 30.037282999999999,-93.739158000000003 30.032626999999998,-93.739733999999999 30.023987000000002,-93.741078000000002 30.021571000000002,-93.744068611359822 30.019549890100706,-93.74834924745744 30.01665695787004,-93.753252045558341 30.013343557169065,-93.766227014667976 30.004574835541469,-93.782835629207284 29.993350429819579,-93.786934999999986 29.990579999999998,-93.789430999999993 29.987812000000002,-93.803328792953494 29.962666096659486,-93.807814999999991 29.954549,-93.813734999999994 29.935126,-93.816550000000007 29.920725999999995,-93.818997999999993 29.914822,-93.830374000000006 29.894358999999998,-93.838374000000002 29.882854999999999,-93.853129483564672 29.866348149842587,-93.854474509531912 29.864843479256791,-93.855140000000006 29.864098999999996,-93.857517787207271 29.862146563102172,-93.862474802662518 29.858076283033213,-93.863569999999996 29.857177,-93.864820388168837 29.856398395289631,-93.872445999999997 29.851650000000003,-93.890679000000006 29.843159000000004,-93.900728 29.836967,-93.911111176241661 29.828996955749506,-93.916359999999997 29.824967999999998,-93.922743999999994 29.818808,-93.927992000000003 29.809640000000002,-93.929208000000003 29.802952,-93.928808000000004 29.79708,-93.926503999999994 29.789559999999998,-93.922407000000007 29.785048,-93.898470000000003 29.771576999999997,-93.893861999999999 29.767289000000002,-93.890820999999988 29.761672999999995,-93.891780610698319 29.758916671398389,-93.892526767476923 29.756773455119472,-93.893828999999997 29.753032999999999,-93.891732576672823 29.744984915009951,-93.891637000000003 29.744618000000003,-93.891484462723341 29.744488863328282,-93.888820999999993 29.742234000000003,-93.873941000000002 29.737770000000005,-93.870019999999997 29.735482,-93.863203999999996 29.724059,-93.837970999999982 29.690618999999998,-93.852868 29.675885,-93.866980999999996 29.673085,-93.889989999999997 29.674012999999999,-93.930999999999997 29.679611999999999,-93.955443390383635 29.680262610936268,-93.955453232202885 29.68026287289646,-93.991585827226885 29.681224615973395,-94.000169999999997 29.681453101326589,-94.000222586816207 29.681454501032487,-94.001406000000003 29.681486,-94.010062765207763 29.679864152681674,-94.056505999999999 29.671163,-94.132576999999984 29.646217,-94.354166823921716 29.561457673765378,-94.370794193562546 29.555097613439198,-94.391123278008692 29.54732162684321,-94.45341877657637 29.523493256060661,-94.456196753642018 29.522430664556182,-94.45805240375158 29.521720868184531,-94.499046371673685 29.506040450016997,-94.499089575343746 29.506023924375612,-94.500455432020999 29.505501476685335,-94.500806999999995 29.505367,-94.552043946167103 29.48495633977835,-94.552044379602123 29.484956167115939,-94.568074121423052 29.478570587212708,-94.593696728539513 29.46836361027578,-94.594852999999986 29.467903,-94.599458690353401 29.465813271763974,-94.62931993394271 29.452264405230761,-94.631084 29.451464,-94.634656044789836 29.449584234717392,-94.661528069434993 29.435443006940758,-94.670389 29.430779999999999,-94.674924987623086 29.427889211977174,-94.680871144138621 29.42409972235215,-94.694158000000002 29.415631999999999,-94.708472999999998 29.403049000000003,-94.723958999999979 29.383268000000005,-94.730956033155138 29.369322304827527,-94.731047000000004 29.369140999999996,-94.731324722869132 29.369141342444962,-94.731537324603394 29.369141604592603,-94.742750849251038 29.369155431380086,-94.744595216508316 29.369157705569055,-94.744833999999997 29.369157999999999,-94.761491000000007 29.361882999999999,-94.772184717669788 29.3616343088914,-94.778690999999995 29.361483,-94.780073439975141 29.362532749099824,-94.782355999999993 29.364266,-94.782645420567292 29.368514320481975,-94.783130999999997 29.375641999999996,-94.766847999999996 29.393488999999999,-94.754099999999994 29.400999999999996,-94.743385419572206 29.410035318862811,-94.73704402931665 29.415382843516582,-94.727822669267709 29.423158969605012,-94.723817999999994 29.426535999999995,-94.716270519001597 29.430976788539081,-94.706539419927282 29.436702374764607,-94.706364999999991 29.436804999999996,-94.686385999999999 29.466508999999995,-94.681540999999996 29.471388999999999,-94.672399999999996 29.476842999999999,-94.665852999999998 29.478401000000002,-94.656737000000007 29.478032999999996,-94.645948000000004 29.473769,-94.628217000000006 29.475986000000002,-94.608557000000005 29.483344999999996,-94.594211 29.492127,-94.595122262498009 29.503650874486677,-94.595439999999996 29.507669,-94.591407000000004 29.513857999999999,-94.580274000000003 29.525295,-94.566674000000006 29.531987999999995,-94.553989999999985 29.529558999999999,-94.546993999999998 29.524379,-94.532347999999999 29.5178,-94.511044999999996 29.519649999999995,-94.495024999999984 29.525030999999998,-94.503428999999997 29.543249999999997,-94.509486999999993 29.542589999999997,-94.523742999999996 29.545987,-94.523871183237745 29.546315590042923,-94.5261306113389 29.55210749848424,-94.526336 29.552633999999998,-94.542531999999994 29.568999999999999,-94.546193009360195 29.571896121601313,-94.546385 29.572047999999995,-94.546803832691651 29.57214903106096,-94.55398799999999 29.573882,-94.570006000000006 29.572232,-94.578210999999982 29.567281,-94.593518000000003 29.561319,-94.625889999999998 29.552807999999999,-94.634988842169335 29.550728838088908,-94.643914431984982 29.54868926579681,-94.666855093063802 29.543447131924982,-94.691625000000002 29.537787000000002,-94.693243673136905 29.537529479678042,-94.718275999999989 29.533546999999995,-94.740699000000006 29.525857999999999,-94.757688999999999 29.524616999999999,-94.768675999999999 29.525659,-94.780938000000006 29.531093000000002,-94.785987568065153 29.540133852805589,-94.789123822994313 29.545749069554745,-94.789562096440733 29.546533763545689,-94.78971899677407 29.546814681200559,-94.790604999999999 29.548400999999998,-94.779438999999996 29.549472000000002,-94.772471009935998 29.548613672580952,-94.771052999999995 29.548438999999995,-94.762972090755014 29.555767305595641,-94.75523699999998 29.562781999999999,-94.750081379755628 29.56810096117977,-94.734626000000006 29.584046,-94.731874420576986 29.588423440241069,-94.724443803393115 29.600244680945409,-94.708741000000003 29.625226,-94.705273448792255 29.640626536822896,-94.703938528752261 29.6465553563269,-94.702680930363101 29.65214076491651,-94.702542126991759 29.652757236398369,-94.699660909360375 29.665553672721437,-94.69780371146922 29.673802100155214,-94.694887994254785 29.686751760487848,-94.693153999999993 29.694452999999999,-94.692434000000006 29.70361,-94.692611750388934 29.704808689927841,-94.695098387970873 29.721577752663908,-94.695317000000003 29.723051999999999,-94.695611486157915 29.72357178078331,-94.697558868014866 29.727008993840069,-94.705700105090941 29.741378628781629,-94.713878412983604 29.755813695314995,-94.714586470042065 29.757063446593907,-94.722078339612551 29.770286919851305,-94.724615999999983 29.774766,-94.735270999999997 29.785433,-94.738125273271791 29.786265833277604,-94.740919000000005 29.787080999999997,-94.749144589762409 29.783534045463153,-94.75591801041729 29.780613280409739,-94.771512 29.773888999999997,-94.792237999999998 29.767432999999997,-94.798897371247961 29.764438558858895,-94.816085 29.756710000000002,-94.81943931055217 29.753325616252695,-94.823987131664666 29.748737021482022,-94.851107999999996 29.721373000000003,-94.856932183541645 29.710462974624775,-94.860426638443812 29.703917062844585,-94.864167858487249 29.696908903620852,-94.865007000000006 29.695336999999999,-94.865123196353878 29.694545038919138,-94.867438000000007 29.678768000000002,-94.872550999999987 29.67125,-94.893107 29.661335999999999,-94.915413 29.656613999999998,-94.921317999999999 29.658177999999999,-94.928410408640929 29.669495826038883,-94.930071799099807 29.672147016790593,-94.930110565443542 29.672208878811933,-94.930656833967475 29.673080595662611,-94.931474856161643 29.67438596783704,-94.934166999999988 29.678681999999998,-94.935264231405057 29.686686879688732,-94.935319060033862 29.687086883348073,-94.935997030967087 29.692033037575822,-94.936088999999996 29.692703999999999,-94.936280063994801 29.692851065945039,-94.941277009519624 29.696697319220664,-94.942680999999993 29.697778,-94.942922907078852 29.697804516058127,-94.95311095436017 29.698921254167477,-94.965343618259496 29.700262107971746,-94.965962999999988 29.70033,-94.972666000000004 29.684869999999997,-94.980123280315652 29.679059463608382,-94.986438191421769 29.674139034277729,-94.988580124776774 29.672470090483102,-95.001800051879343 29.662169436052462,-95.002396227716986 29.661704909944582,-95.005398 29.659365999999995,-95.011683000000005 29.649802000000005,-95.013860566469219 29.644103309100927,-95.014229369455222 29.643138151779844,-95.015636 29.639457,-95.015582911847446 29.639202042718885,-95.014543866006605 29.634211997110764,-95.013498999999996 29.629193999999998,-95.006633444897872 29.623869765921089,-95.00056235200779 29.61916163683599,-95.000370188745762 29.619012614335521,-94.997782627529062 29.617005962082896,-94.997731096758997 29.616965999999998,-94.995478872439179 29.615219401320278,-94.993499353954022 29.613684285860323,-94.988871000000003 29.610095,-94.988045541621688 29.608923290953985,-94.982835617337045 29.60152798723708,-94.982705999999993 29.601344000000005,-94.982886347998431 29.601051719777942,-94.983895794498991 29.599415764569699,-94.98693593300419 29.594488776939745,-94.988992999999994 29.591155,-94.991605757589539 29.588791109774153,-94.991811610459919 29.588604864563266,-94.992208959522046 29.588245363334387,-95.006677600766466 29.575154872369662,-95.007235451984087 29.574650156950938,-95.007670000000005 29.574256999999996,-95.00815781845921 29.573398130166158,-95.016627 29.558487,-95.018253 29.554884999999999,-95.016926355758628 29.548485488141377,-95.015164999999996 29.539988999999998,-95.012091452887788 29.536262245236642,-95.011587670186657 29.535651395780732,-95.011086587278399 29.535043819893005,-95.001666768519442 29.523622047865974,-94.999580999999992 29.521093,-94.989064037839412 29.515168017977793,-94.982063906682782 29.511224326765198,-94.981915999999998 29.511140999999995,-94.981645984265953 29.511070508097891,-94.961088181447877 29.505703566689924,-94.958443000000003 29.505013000000002,-94.958183821928699 29.504969740154092,-94.957844913785792 29.504913172428417,-94.95747910332102 29.504852114391142,-94.955724072517796 29.504559179260749,-94.952845264169682 29.504078672538427,-94.930551536860648 29.500357589179547,-94.927405495678158 29.499832478177321,-94.909464999999997 29.496837999999997,-94.913072085311995 29.488019044482122,-94.913385000000005 29.487254,-94.917178632618899 29.481741136316387,-94.925104227340569 29.470223752399235,-94.925293406029382 29.469948840084836,-94.925914000000006 29.469047,-94.930860999999993 29.450503999999999,-94.923011455799639 29.448810114938265,-94.920334997737442 29.448232551169699,-94.919400999999993 29.448030999999997,-94.916063708203708 29.446327523795176,-94.890799999999984 29.433432,-94.888257132054065 29.420136433311271,-94.887299999999996 29.415132,-94.887087039327696 29.40154064293051,-94.886938304445962 29.392048238229908,-94.886925408340758 29.391225196262944,-94.886904215833582 29.389872669858736,-94.886764190565785 29.380936121184895,-94.886591910643261 29.369941049100753,-94.886536208040312 29.366386054846032,-94.886982892003275 29.364738908620176,-94.888420210858001 29.359438798199445,-94.888544709543254 29.358979709544975,-94.888781730376067 29.358105695694917,-94.894234145274325 29.337999926591962,-94.894147383920654 29.327241695272729,-94.894002695197727 29.309300588032027,-94.893993580875261 29.308170430590454,-94.891329624021282 29.304475264201969,-94.888683946869179 29.30080545353194,-94.886599269217157 29.297913803549264,-94.886536208040312 29.297826331584119,-94.885816422022174 29.297499155955627,-94.884216982863776 29.296772137788121,-94.876917125093229 29.293454018939102,-94.875951551627523 29.293015121686942,-94.86617837453683 29.293883848703121,-94.865126326153927 29.293977364132552,-94.861112574100105 29.294855372432302,-94.849730461009372 29.297345209778594,-94.825607939204673 29.30577638202961,-94.824952733476934 29.30600538596191,-94.823862547308252 29.313200608971236,-94.822547126780194 29.321882377573708,-94.82230657170463 29.344254498409398,-94.810695999999993 29.353434999999998,-94.797913847039041 29.344567105809805,-94.79693012269928 29.343884625840758,-94.784895000000006 29.335535,-94.779995 29.334935000000002,-94.777063999999996 29.336811,-94.773074869484503 29.336485139838025,-94.745528999999991 29.334235,-94.744945 29.33641,-94.731319999999997 29.338066,-94.722529999999992 29.331445999999996,-94.731082 29.331833,-94.769694999999999 29.304936,-94.780304129101268 29.295750693651897,-94.786095000000003 29.290737,-94.793321795438203 29.286014946162535,-94.795651468635626 29.284492716516493,-94.803695000000005 29.279236999999998,-94.809348860129617 29.275904173901317,-94.81020919937113 29.275397022855465,-94.819018398045671 29.270204194137058,-94.82210781776098 29.268383049216432,-94.825036245866656 29.266656805306088,-94.825782574142963 29.266216861214712,-94.826962003659688 29.265521613475173,-94.833188167130103 29.261851427154124,-94.844390135018429 29.255248113651685,-94.870677905110114 29.23975205180561,-94.881596387366812 29.233315846843187,-94.896165027201874 29.224727954332334,-94.925556066041452 29.207402583865772,-94.927613957028456 29.206189502425392,-94.940693735267132 29.198479261054111,-94.968741214129224 29.181945889621023,-94.978383546115566 29.176261947153485,-94.981700088962569 29.174306918145966,-95.026218999999998 29.148064000000002,-95.076832914261459 29.114498139229923,-95.081772999999998 29.111222,-95.084611040272236 29.108948681405003,-95.100241410561338 29.096428488590096,-95.110484 29.088224,-95.116308293211759 29.081343778536318,-95.119264367911811 29.077851775668329,-95.119484217932538 29.077592067446851,-95.122403192505772 29.074143890856067,-95.122524999999996 29.074000000000002,-95.122638295373392 29.073709965581063,-95.125134000000003 29.067321,-95.183550616106302 29.028323983126334,-95.191390999999996 29.023089999999996,-95.192301227546167 29.02243038040822,-95.237672480263356 28.989550945676651,-95.238923999999997 28.988644,-95.240558404572027 28.987315672512366,-95.251568580535192 28.978367386619187,-95.251619678822578 28.978325857575001,-95.272266000000002 28.961545999999995,-95.29656403895315 28.934716691525271,-95.297146999999981 28.934073,-95.309703999999996 28.928262,-95.334686660244515 28.911063042846731,-95.353450999999993 28.898145,-95.376979000000006 28.876159999999999,-95.377903963555724 28.874482723635413,-95.38239 28.866347999999999,-95.416173999999998 28.859482,-95.436326577581042 28.85908617652915,-95.439594 28.859022000000003,-95.449516932572138 28.854239851149391,-95.480746000949352 28.839189657836059,-95.485144835951402 28.837069731735976,-95.486768999999995 28.836286999999995,-95.506945757563287 28.824808612805594,-95.536465934189138 28.808014833314715,-95.564052739104355 28.79232093268277,-95.564094788066555 28.792297011382839,-95.564132228771385 28.792275711681647,-95.568135999999981 28.789997999999997,-95.576201168007842 28.785870627961152,-95.606319447682353 28.770457515020929,-95.613122366343802 28.766976102576891,-95.695711236705606 28.724711019702028,-95.715243498124195 28.714715330888584,-95.812504000000004 28.664942,-95.854124934570734 28.646410960033691,-95.884026000000006 28.633098,-95.920915435374582 28.618912188118028,-95.97832748198536 28.596834417485056,-96.000681999999983 28.588238,-96.000998496292368 28.588108377001081,-96.024040703743012 28.578671299526803,-96.035336417502748 28.574045070633311,-96.05294532761279 28.566833233429691,-96.077867999999995 28.556625999999998,-96.194412 28.502223999999998,-96.220123346321373 28.492065891861738,-96.220376184174313 28.491966,-96.226882700448613 28.487451845000788,-96.241923733725443 28.477016528665938,-96.244750999999994 28.475055,-96.270391000000004 28.461929999999999,-96.303212000000002 28.441870999999999,-96.321560000000005 28.425148,-96.328817 28.423658999999997,-96.341616999999999 28.417333999999997,-96.371116999999998 28.397660999999999,-96.372100999999986 28.393874999999998,-96.370716999999985 28.387667,-96.378616389014681 28.383909329746462,-96.379349732835649 28.386024690464755,-96.381702691108558 28.392811896356477,-96.381863685354148 28.393276290946375,-96.375880899310658 28.401794149460329,-96.37413840285555 28.404274990018202,-96.340801887331921 28.432913073072363,-96.338559687910475 28.434839257985413,-96.335119195902806 28.437794848703732,-96.312964581561445 28.451131053409146,-96.280819757359396 28.470480970729877,-96.274497619264608 28.474286648703266,-96.268341347214189 28.477992481854848,-96.252027698910211 28.484249764669329,-96.250247000000002 28.484932771712327,-96.223824788704931 28.495067307260509,-96.218978121459415 28.500382701101032,-96.21505000939203 28.509679222336811,-96.145447855080619 28.544740658174199,-96.10473518795402 28.559498996555909,-96.046210731424992 28.586980036018211,-96.032979113622659 28.589015683181284,-96.007533711461477 28.59970275682273,-95.986159544454679 28.60631857558586,-95.982088289576367 28.614461085342473,-95.98565064745685 28.621076904105603,-95.983106103295938 28.641942154390655,-95.97852589224803 28.650593590730978,-95.986065974637228 28.655467849280154,-95.996337701374344 28.658736120211515,-96.002953500413568 28.656191585912577,-96.006515878017979 28.648049056432036,-96.010005951759737 28.648641710656278,-96.010506546843942 28.648726717396318,-96.011440067305529 28.648885239790378,-96.014343010193883 28.649378192516537,-96.026200716522851 28.65139176594381,-96.03348799089656 28.652629228032097,-96.039323368019012 28.651170385770797,-96.047737442142406 28.649066870151618,-96.049244844336243 28.648218956037223,-96.052682972641108 28.646285007998213,-96.05836686193534 28.643087818836001,-96.072165030584017 28.635326345489485,-96.092812363862251 28.627145317384699,-96.098878916233431 28.624741586366319,-96.099137163186526 28.624639261986079,-96.099760206508392 28.62447226081035,-96.102639895829256 28.623700385909448,-96.141413249033207 28.613307536255487,-96.148501276515404 28.611407654045699,-96.187178316202875 28.593595864643298,-96.198374286842139 28.586980055742131,-96.221784081288092 28.580364246840958,-96.228908787187095 28.580873158631725,-96.233997875508891 28.596649310733014,-96.233997875508891 28.601738394123839,-96.222292978285921 28.607336389305434,-96.214150448805384 28.613443281484855,-96.212623728226021 28.62260364440889,-96.2309444244882 28.64143324753087,-96.208552463485731 28.662298487953962,-96.214659365527126 28.665351929112688,-96.192267404524671 28.68774389011514,-96.1912495908051 28.694359708878277,-96.195829762405154 28.698939880478335,-96.202445561444364 28.700975507917487,-96.208747675276499 28.700187749031503,-96.21684000834783 28.699176214258408,-96.221467818495611 28.69859774191346,-96.222801895007663 28.698430983480506,-96.223384071149837 28.698294,-96.224163927167865 28.698110503315906,-96.227000018566372 28.697443183508955,-96.229623268039219 28.696825944469072,-96.231453341209956 28.69639533631743,-96.233964222112746 28.695240331316239,-96.23422531976 28.695120226420762,-96.234426397558138 28.695027730650764,-96.243315632596989 28.690938683290845,-96.256898753233088 28.684690448956413,-96.263514562134276 28.683672635236839,-96.268603640594122 28.688761723558645,-96.287942160437836 28.68316371851509,-96.304227224329892 28.671458831154069,-96.305245042980445 28.660262850652849,-96.303866760710434 28.646480081370939,-96.303718312539132 28.644995605411349,-96.322902111893882 28.641863561491792,-96.322903115546453 28.641863397630402,-96.328654788116609 28.640924350533034,-96.373438710121519 28.626674919011112,-96.376492171004159 28.620059100247982,-96.384634680760783 28.615987845369677,-96.473693647496702 28.573239550803915,-96.48794308888057 28.569677192923439,-96.482854000558774 28.580364266564878,-96.480309456397848 28.596649335387912,-96.485907441717487 28.60784531588914,-96.490487633041468 28.610898766909834,-96.510843966604781 28.614970031650095,-96.510335069606953 28.617514575811001,-96.497612348802434 28.625148188569788,-96.496594535082863 28.630746183751381,-96.49964797624159 28.635835272073191,-96.506263795004728 28.638379806372129,-96.513590449607946 28.639711925390898,-96.518002756430107 28.640514162994929,-96.524548246905439 28.641704252172264,-96.541744210187403 28.644830790950802,-96.545449731689985 28.645504522133091,-96.555118991611849 28.64601343885484,-96.5632615210924 28.64448670841351,-96.564664053901609 28.647882315216158,-96.572092291837293 28.665866475800886,-96.572930781014264 28.667896502859467,-96.570386236853366 28.674003385176928,-96.559190266214102 28.687235002979271,-96.559699163211917 28.6913062775815,-96.561225893653244 28.696395346179383,-96.566823878972883 28.697922096344637,-96.575158129308363 28.702846874961025,-96.578019859474111 28.704537895383844,-96.57828826199534 28.705826226653553,-96.579938546079447 28.713747585140421,-96.580564403635009 28.716751699466613,-96.584126761515478 28.722858581784067,-96.584439828543964 28.722940967911413,-96.591359183115401 28.724761852179114,-96.593796021437342 28.725403125944972,-96.611342043876562 28.720366765465901,-96.616906294097589 28.718769618875786,-96.625254999999996 28.716373230030175,-96.632357663078409 28.714334501780041,-96.638120426114043 28.71268037463507,-96.643733366943522 28.711069252030907,-96.64589364157122 28.710449172933409,-96.648758110223909 28.709626963981723,-96.65548660082564 28.704200766225345,-96.664534272187169 28.696904262901135,-96.657918463285995 28.687743919701024,-96.642136214348383 28.67476740345478,-96.635017595423747 28.668914316579048,-96.634564255386636 28.662567599984854,-96.634358790297441 28.659691108644115,-96.634304719917793 28.658934128568227,-96.633999771842213 28.654664885057134,-96.627892869800831 28.650084693733149,-96.626425176648581 28.649921620227584,-96.623312698200763 28.64957579673532,-96.621378075676532 28.648286046719594,-96.615940371111847 28.64466090565978,-96.615679075580019 28.64448670841351,-96.614055987266909 28.642701311583636,-96.613585709918453 28.642184006591457,-96.613038272810982 28.641581825879328,-96.612716570908134 28.641227953848528,-96.611999586497333 28.640439271135588,-96.610589997120172 28.638888723093881,-96.610589997120172 28.638695619081329,-96.610589997120172 28.63634418879494,-96.61975034032028 28.62769274259265,-96.620390401117646 28.626519297452973,-96.620672695530928 28.626001757543317,-96.621575870071126 28.624345937066781,-96.622336527533278 28.62295139797671,-96.622803791340985 28.622094747411062,-96.621924089240224 28.619379144726071,-96.621515564809087 28.618118047314677,-96.621338841511317 28.617572510068054,-96.620571817957583 28.61520474122884,-96.620437729127232 28.614790814755992,-96.617253050911174 28.604959849584038,-96.615239196090883 28.598743166058551,-96.614649885719274 28.596923990196654,-96.613008078443599 28.591855801497097,-96.611528402529856 28.587288105363601,-96.611113505533794 28.586007336117376,-96.611098903979951 28.585962261746474,-96.608298572876635 28.583628658523324,-96.608045443097311 28.583417717585569,-96.607377235577218 28.583437664220053,-96.600365219155734 28.58364697962633,-96.593251058093557 28.583859344147964,-96.573948594733835 28.584435541167107,-96.565297148531556 28.582399903865994,-96.564279334811971 28.57629300182461,-96.563658896232639 28.575155527088082,-96.562968608029692 28.573889994257026,-96.561225893653244 28.570695006643017,-96.557566061723506 28.569051817003789,-96.543745727976315 28.562846769979732,-96.536289388489891 28.559499026141786,-96.535271536438941 28.559346348925885,-96.526111211846271 28.557972305562419,-96.524846286909124 28.55686549700842,-96.523547686998668 28.555729222873186,-96.522039937244045 28.554409942750958,-96.516783301381025 28.541093122164042,-96.514406314623301 28.535071417976255,-96.512075206364955 28.532603188828926,-96.505754868421008 28.525911074776143,-96.496773944100411 28.520225902118948,-96.493684489370622 28.518270192113103,-96.482894459981281 28.511439806078794,-96.464303363514816 28.49967112954555,-96.450283853050735 28.49079639296917,-96.41974938229167 28.46738661824714,-96.410828816467941 28.459457253614527,-96.410588999643707 28.459244083835621,-96.409758652296418 28.458206146634446,-96.408886828651134 28.457116363910039,-96.40506625078595 28.452340627696451,-96.402446489887097 28.449065917053971,-96.402758256176753 28.447714917044181,-96.403973200604497 28.442450108152798,-96.407195206365273 28.441281062045864,-96.417343901660857 28.437598792799108,-96.461479843413926 28.421584870195201,-96.476120924474287 28.411702150055138,-96.481836236149007 28.407844318412668,-96.504737094149291 28.397666161492985,-96.511137484289378 28.396220910815867,-96.520513236388609 28.394103803612502,-96.534249520963641 28.388796609353736,-96.542905217114992 28.385452367272176,-96.559699173073881 28.377818734789468,-96.57038624671533 28.368658381727396,-96.577905378446388 28.364719789411506,-96.5917603939982 28.357462401226169,-96.600411840200493 28.354408960067438,-96.650793747525029 28.34677533744669,-96.672676831253582 28.335579347083499,-96.688452973492915 28.347284234444516,-96.694559875534281 28.347284234444516,-96.698122233414779 28.342704062844462,-96.705246949175717 28.348810964885843,-96.700157860853906 28.369676195446971,-96.705755865897487 28.400210705653887,-96.710336037497541 28.406826524417021,-96.710425531143088 28.406841439843959,-96.711757514930511 28.407063434453107,-96.711949596522956 28.407095447664108,-96.71209813364915 28.407120203551969,-96.7125191933293 28.40719037931537,-96.712878460543081 28.407250256459115,-96.722549831718325 28.408862132132249,-96.749013067323034 28.408862132132249,-96.762244685125353 28.411915593014903,-96.76554491144303 28.411090543097366,-96.768351577304784 28.410388882297497,-96.775985199925543 28.405808690973519,-96.777118787058129 28.404067826336821,-96.778115367638478 28.402537364460464,-96.780337941159374 28.399124129135416,-96.780820705165937 28.398382742114745,-96.790234641309425 28.383925636830853,-96.794392274787313 28.366371177405831,-96.794814812909479 28.364587126849088,-96.794810066932399 28.364444747076842,-96.79477772408616 28.363474458555832,-96.794305906049686 28.349319871745632,-96.794064195689629 28.347593374049037,-96.792754716842737 28.338239980125699,-96.790743538307225 28.323874459722486,-96.791161640090152 28.319066463411133,-96.791737095961722 28.312448960638157,-96.791761391474679 28.312169572361466,-96.791798306096766 28.312130020933203,-96.806010803272656 28.29690232711997,-96.809573161153153 28.290286508356836,-96.806010803272656 28.282143978876302,-96.799480493673911 28.2729662335258,-96.799349781293685 28.272782529381054,-96.787181219874626 28.255680743271615,-96.787181219874626 28.250082757951983,-96.800412817953031 28.224128419345121,-96.810027933605966 28.21709297064087,-96.81015126416365 28.217002728792142,-96.823379937963566 28.207323213817581,-96.836184503007971 28.197954022244446,-96.84100213695676 28.194428925121734,-96.842143298799229 28.193593928862132,-96.847274602334139 28.190686192954498,-96.857267971405633 28.185023289193378,-96.872677809006134 28.176291056181483,-96.877474270970822 28.171878306563691,-96.886067200578026 28.1639728030657,-96.898123211167331 28.152881261735526,-96.906497631141988 28.149042991548708,-96.910337015250093 28.147283276415891,-96.926704620510804 28.131597659113019,-96.934764623415617 28.123873491831901,-96.962356663895278 28.123371819605953,-96.962754569737697 28.123364584972112,-96.979717515560068 28.129783000626698,-96.995398793779131 28.135716460690723,-97.000413785843605 28.137614026355994,-97.007520616950742 28.136091128354632,-97.007538501604586 28.136087295914667,-97.009222611239821 28.135094102666635,-97.00939982996681 28.134989589017771,-97.027385928308092 28.12438239869169,-97.028912648887456 28.117257682930727,-97.025203084589847 28.111384210119862,-97.023365428929196 28.108474590635566,-97.022805746846075 28.107588427939849,-97.02290356380766 28.107197159145706,-97.023379876854563 28.105291902342927,-97.02382356056566 28.10351716319958,-97.025496807419856 28.101530180660298,-97.031966099908146 28.09384788848477,-97.033883146887263 28.088918342142531,-97.035528457788629 28.084687545284659,-97.035528457788629 28.083043098067591,-97.035528457788629 28.081818766572983,-97.035528457788629 28.074000471643224,-97.033022532693735 28.061470870449408,-97.032801767679686 28.060367047518316,-97.031459273912688 28.053654591691117,-97.031457183186404 28.053644138079921,-97.025859197866765 28.041939250718904,-97.030948266464648 28.033287814378582,-97.03239348781301 28.032603236465789,-97.040617526386512 28.028707642778524,-97.041168915404441 28.028259640036232,-97.046718327422383 28.023750751173218,-97.048760075590963 28.022091833877354,-97.050263648357429 28.019142519014494,-97.059727497080047 28.000578821719444,-97.061991693393324 27.99613751499442,-97.06790259446116 27.99219690579767,-97.073772658186698 27.988283521554418,-97.075732208193486 27.986977152070377,-97.083740513918784 27.975854507337193,-97.090858162154831 27.965968886660271,-97.094600599978094 27.960771057335059,-97.101378519421061 27.951357282114685,-97.101544336287489 27.951126980954953,-97.101629253046639 27.951009041034034,-97.112670327945679 27.935674217691009,-97.118292397880069 27.927865788706086,-97.121533983365822 27.923363587495643,-97.122089895488358 27.923104160785101,-97.123659587861624 27.92237163470331,-97.129167576400675 27.91980122961516,-97.134800331352182 27.902469771509406,-97.13578341488774 27.899444915775788,-97.139044920333077 27.897526377912126,-97.141761509630356 27.895928379836029,-97.144434841366106 27.894355827453982,-97.155121915007527 27.880615312653809,-97.156735458496229 27.877916799393841,-97.171211094589736 27.85370753808861,-97.17159000749372 27.853073838716419,-97.18273536107327 27.834434189625789,-97.184638591770963 27.831251199324921,-97.187183135931861 27.824126483563962,-97.18941247112663 27.823657146727278,-97.196852395853725 27.822090836400886,-97.201135366472329 27.822090836400886,-97.208766105658313 27.822090836400886,-97.209575096934316 27.822090836400886,-97.21103842611052 27.822356897891609,-97.21191517248603 27.822516307306422,-97.214117494684729 27.822916731993345,-97.215541825234411 27.823175702780983,-97.217387510601711 27.823511284007832,-97.220771087297493 27.824126483563962,-97.222189700736266 27.82464074101355,-97.223091414240102 27.824967618564596,-97.225175600069406 27.825723150734085,-97.225442194074731 27.826156365185522,-97.225555528799433 27.826340533769983,-97.225696025109201 27.826568839847944,-97.22598639723725 27.82704069367685,-97.227317456819009 27.829203661466853,-97.227317456819009 27.832884543697009,-97.227317456819009 27.832951908184537,-97.22711696094737 27.834288541284948,-97.22651425924083 27.838306534493725,-97.227537582741903 27.841230302974814,-97.228388390382094 27.843661171179477,-97.233100025453197 27.847817700825228,-97.234045759551762 27.848652012430087,-97.234511621821596 27.849062988727319,-97.238500481248579 27.854279199579018,-97.239439164419366 27.855506710708827,-97.241127420860792 27.857714434929608,-97.24139627838295 27.858969111470945,-97.242350826195675 27.863423696705052,-97.242654131578206 27.86483913096664,-97.243132066142749 27.865496290124597,-97.244364366034702 27.867190700237273,-97.250796680782656 27.876035121329831,-97.263010484865433 27.88010639593206,-97.267085449659064 27.88068852838779,-97.272090543185925 27.881403535150675,-97.273697558506882 27.881633106649463,-97.276628649874411 27.881144591421538,-97.283916343274228 27.879929975854907,-97.291452123510041 27.878674012482271,-97.291709327200167 27.878631145200583,-97.295071705789752 27.87807074876898,-97.29826066531912 27.876989746639367,-97.302276298241679 27.875628516526195,-97.30641171632756 27.874226681314273,-97.315889353880934 27.871013926092836,-97.325097299274915 27.867892591849294,-97.326845878314657 27.866807265961079,-97.334190606350404 27.862248465187459,-97.346213303335873 27.854786094892546,-97.354613966176373 27.849571885725148,-97.359768343966266 27.850509060182219,-97.360211961357962 27.850589719168646,-97.360654441244435 27.850290746360063,-97.363614400263117 27.848290774636723,-97.376904444631478 27.839311017562139,-97.379041564479934 27.837867018088055,-97.379057154646048 27.837837708581311,-97.379081675001302 27.837791610322164,-97.37968928125764 27.836649310776913,-97.391764280353456 27.813948316782309,-97.391812130016405 27.812975373996721,-97.391812459346511 27.812968677620422,-97.39203202611381 27.808504155006624,-97.392068018906713 27.807772301822137,-97.392095751995882 27.807208395884746,-97.393123788240075 27.786304999999999,-97.393168763213623 27.785390509210199,-97.393291005863816 27.782904909577571,-97.393142269808052 27.782564941361908,-97.39298939956177 27.782215523565412,-97.390949955785928 27.777553936582201,-97.390465068726371 27.776445623015572,-97.390185233729682 27.775805999999999,-97.389524844304646 27.774296538065283,-97.38835420640342 27.771620793596586,-97.388306220610531 27.771511111755789,-97.388011229692253 27.770836846624743,-97.38704242749894 27.768622441036733,-97.386166290102864 27.766619840754537,-97.385225495384532 27.765302728148875,-97.378862356737287 27.756394334042721,-97.375764970087644 27.752057992733249,-97.373069654276961 27.748284550598278,-97.368354500700462 27.741683335591173,-97.365855345900911 27.739779218033028,-97.354970329043653 27.731485873530172,-97.352272255056832 27.729430198526604,-97.34997871774064 27.727682741876539,-97.347507961666906 27.725800261438444,-97.346980343555629 27.725398266768138,-97.343485766084669 27.723942192633796,-97.323096068004702 27.715446484002907,-97.316445853072636 27.712675560756566,-97.312489136070184 27.711663774861414,-97.307771479065892 27.710457406346261,-97.30518751069485 27.709796650788128,-97.285725857752936 27.704820043684109,-97.259850586867117 27.698203387982087,-97.253955150197811 27.696695845323848,-97.254014647303208 27.696526337654994,-97.255455364792269 27.692421723465429,-97.259957004258851 27.67959652118169,-97.261636792970123 27.679316557300702,-97.26241778482418 27.679186392412099,-97.266063906300232 27.678578707462119,-97.266172011465457 27.678349884642419,-97.272736281666539 27.664455499360063,-97.273042341106247 27.663807672923248,-97.273584380560237 27.662660354976065,-97.276535709391737 27.656413369610792,-97.277059923980644 27.655303780997631,-97.278846463786479 27.651522268106756,-97.280071982275985 27.648928251476995,-97.280889132874719 27.647198614380269,-97.282300269490932 27.644211705671331,-97.282869528026779 27.64300677394548,-97.287959956150573 27.632232024058997,-97.288756326795195 27.630546371240786,-97.290370933329072 27.627128784125372,-97.290610159422798 27.626622421740255,-97.291264204229464 27.625238025568656,-97.291996439564016 27.623688125953898,-97.292910903535031 27.621752508687905,-97.293983233844585 27.619482740684056,-97.29528946695001 27.616717877953022,-97.296598377059297 27.613947348891728,-97.297587499071795 27.609496333379006,-97.298634024222366 27.60478700569162,-97.29761621050281 27.598680093788271,-97.294053852622326 27.594099922188217,-97.294182769084571 27.593971005725969,-97.300049926927869 27.588103847882682,-97.302196382102863 27.585957392707677,-97.311120578488044 27.579146819865922,-97.321534901946578 27.571199044464009,-97.325080504595888 27.561034984604785,-97.336802147188081 27.527432946040641,-97.343417965951204 27.517763686118776,-97.347489240553443 27.503005347737066,-97.350542661988243 27.478577729709574,-97.359194108190536 27.458221396146271,-97.365809926953673 27.450587783387487,-97.371916828995055 27.425142361502377,-97.369881181831957 27.412419660421783,-97.372934622990698 27.401223670058592,-97.379550422029908 27.390027689557368,-97.399397858595393 27.344734850830708,-97.401942402756291 27.335574497768633,-97.404995863638931 27.329976512448997,-97.413138393119482 27.321325066246711,-97.42026310888042 27.317253791644482,-97.430441285524054 27.313691423902039,-97.450797599363412 27.313691423902039,-97.482858840011673 27.297915271800758,-97.508304242172855 27.275014394076553,-97.532222933616623 27.278576761818989,-97.544436737699399 27.284174747138625,-97.546981281860297 27.290790556039799,-97.536803105216677 27.289263825598471,-97.526624948296998 27.291808369759369,-97.524589320857856 27.297915271800758,-97.51746460509689 27.305039987561717,-97.504741884292372 27.305039987561717,-97.498126085253162 27.308602345442196,-97.502706237129289 27.322342870104325,-97.499143898972747 27.327940855423961,-97.483876634007316 27.33862793892736,-97.483876634007316 27.351350640007954,-97.486930094889971 27.358984272490666,-97.501688443133645 27.366617904973374,-97.514411144214236 27.361528796927644,-97.520518046255617 27.352877370449281,-97.538329835658018 27.335574478044709,-97.570899973304094 27.315727061203152,-97.584131581244463 27.309620159161771,-97.609068086407831 27.285192570720163,-97.621790807212349 27.287228188297352,-97.63146005727225 27.286210384439741,-97.63654914066305 27.282139109837512,-97.636657939024673 27.281797172172649,-97.640111498543547 27.270943129336285,-97.639093679892994 27.253131339933887,-97.635022415152719 27.247024437892502,-97.628915513111338 27.242953173152234,-97.597363199046811 27.242444266292445,-97.5826048606651 27.240408628991332,-97.573953414462821 27.238881903480983,-97.56123071338223 27.232775006370584,-97.542910007258072 27.229212648490105,-97.520009129533875 27.231248285791217,-97.509830972614182 27.235319550531486,-97.503215153851045 27.23989972213154,-97.500161712692318 27.244479898662579,-97.485148876501881 27.25084127385778,-97.467082638600573 27.253640266517596,-97.45843119239828 27.259492710198106,-97.450288657986775 27.262546171080761,-97.424079880742951 27.264072891660124,-97.422298701802717 27.257711541119829,-97.434766954384401 27.202240525749552,-97.444945121166043 27.144733882940127,-97.443672849085587 27.116235010034327,-97.452324285425917 27.115217201245734,-97.455886653168363 27.110382571284802,-97.456650008527049 27.09969549764336,-97.46173908698691 27.095624227972113,-97.475479621510999 27.098423220631929,-97.480568699970846 27.102494490303176,-97.491510231973166 27.101222218222723,-97.495835955074313 27.09409750739275,-97.4932914109134 27.078066891999608,-97.477515248950155 27.066107546277717,-97.479041969529504 27.06279964182713,-97.482256963728076 27.061942305056665,-97.48693005051112 27.057710553505324,-97.487693415731783 27.053639288765055,-97.486675602012198 27.034809685643079,-97.477515248950141 27.032519589981089,-97.473952881207694 27.029211690461484,-97.473443984209865 27.022850330059228,-97.478300083716704 27.000269498406993,-97.478533072531675 26.999186101907302,-97.480568690108868 26.997659376396957,-97.483967678435022 27.000330000000002,-97.484131057851314 27.000458369056773,-97.492988547644813 27.000330000000002,-97.49889841702128 27.000244349959733,-97.533497176854453 26.999742920066073,-97.536803065768822 26.999695008767091,-97.549271318350492 26.995878197456715,-97.555378215460905 26.990280207206101,-97.551052502221722 26.980865400714134,-97.549525776711377 26.965343697111763,-97.552324769371197 26.95211208177491,-97.555378205598956 26.947277449348487,-97.555378205598956 26.938880461507075,-97.540874325578116 26.906310323861007,-97.540110950495503 26.900966796902246,-97.547999041339082 26.895114353221743,-97.552324764440229 26.888498544320569,-97.552324764440229 26.875332999999998,-97.552324764440229 26.873831771434514,-97.552324764440229 26.871753101924,-97.552324764440229 26.867633303897481,-97.555396527456509 26.865969429990074,-97.558431656619632 26.864325399446898,-97.558453748966258 26.864224239771101,-97.559853702000524 26.857813929560987,-97.562641307980527 26.845049630589628,-97.563266286580571 26.842187886943357,-97.552579212939136 26.827938454188693,-97.547744582978211 26.824630549738107,-97.537566416196555 26.824885004400745,-97.509830908511418 26.8035108521869,-97.48438549155729 26.763561555211936,-97.478024141017002 26.757200199740662,-97.471662790476714 26.758726925251008,-97.468609339456009 26.740915130917632,-97.467337057513589 26.710126182073765,-97.444945096511148 26.633535472850511,-97.445708451869848 26.609362327976836,-97.441206258760758 26.5999011976768,-97.435205432977895 26.587290766879221,-97.432741093635642 26.582112082834445,-97.429217375703914 26.574707168454967,-97.428151110966368 26.572466467229631,-97.418145193925739 26.555638334425574,-97.416955130465126 26.553636864107652,-97.41864075483771 26.543121778291471,-97.42039414733226 26.532183948458435,-97.422284917775215 26.520389141863415,-97.422298667285844 26.520303371102887,-97.425861015304378 26.516741008291426,-97.430695645265303 26.506562841509776,-97.430695645265303 26.494603495787885,-97.42802638225659 26.488322868889494,-97.42636993202612 26.484425333937217,-97.429168909893022 26.478063961207511,-97.43553026043331 26.470175880225888,-97.441382709044788 26.466613522345408,-97.441382709044788 26.455417541844177,-97.43756589773443 26.449819546662585,-97.425861005442428 26.446002740283195,-97.421026375481503 26.446766095641895,-97.417209564171131 26.449819546662585,-97.411611568989528 26.447275002501684,-97.412883841069984 26.433025580841726,-97.421789740702152 26.417249413947498,-97.419499649971158 26.413178149207234,-97.406013578738921 26.409106884466965,-97.398125502688274 26.410888063407203,-97.394308686446919 26.414450416356704,-97.395072051667569 26.417249413947498,-97.382484933201752 26.411326066613285,-97.377769169124974 26.409106884466965,-97.369626639644437 26.394602999515151,-97.374461259743413 26.38086247238753,-97.388965149626202 26.365849678110436,-97.392018610508856 26.339386444971247,-97.391000786927322 26.332261729210284,-97.38794734576858 26.330480545339064,-97.376242448545611 26.336332993950553,-97.372171183805335 26.339895346900054,-97.36937219114553 26.348546788171358,-97.358176200782339 26.356434874083959,-97.343417852538664 26.35923386920927,-97.342332537534404 26.358759043566288,-97.335275323058127 26.355671510096041,-97.335020017473738 26.355402767481841,-97.331108052904881 26.351284911668415,-97.330440693097202 26.350582427937965,-97.333762617526986 26.340749518544904,-97.336802038706509 26.331752819885011,-97.343786761143846 26.325987658774913,-97.344677525679145 26.325252425399061,-97.352414066956698 26.31886671611711,-97.352832659030639 26.318521211944631,-97.354359379610003 26.313941040344577,-97.348998828460125 26.312092573442666,-97.347821984790102 26.311686765063648,-97.346980205488165 26.311396496183672,-97.34736083223585 26.297503848546928,-97.347437236753805 26.2947151295396,-97.347489122209922 26.292821341560611,-97.347051378510429 26.289694600417153,-97.344137846000223 26.268883651035111,-97.343926764329439 26.267375924606483,-97.342629246748771 26.266550231912309,-97.341127771669619 26.265594748131736,-97.335282658907644 26.265594748131736,-97.331967408745584 26.265594748131736,-97.330307576264516 26.266747410222209,-97.323817586106017 26.271254350355399,-97.322807065545476 26.271956101137519,-97.313207351206557 26.273518846137112,-97.312102101648151 26.273698770576502,-97.311865543405119 26.273737280077761,-97.307030913444194 26.253126493084562,-97.308048727163751 26.249055213551365,-97.321280340035131 26.236078054109896,-97.321280340035131 26.228698889850026,-97.304486359421333 26.202490107675235,-97.296598288301666 26.200708923804015,-97.294817109361432 26.192311940893585,-97.296089381441874 26.182388227541828,-97.303096384204423 26.167373221160254,-97.305986772892751 26.161179530923267,-97.306776455083323 26.159487354748606,-97.300965235160419 26.149753561518516,-97.296881711355638 26.142913659244432,-97.296598288301666 26.14243892563589,-97.285549237329036 26.12861437636975,-97.28536038956149 26.128378090441405,-97.284582435540926 26.126454238998875,-97.282094393487881 26.120301403270393,-97.282839179410786 26.118439442973433,-97.28311220967295 26.117756868971455,-97.285501587752023 26.116923364107649,-97.294053737977038 26.113940052730097,-97.295071554162092 26.108342057548505,-97.292023254217796 26.105090538920617,-97.291924538345086 26.104985242032239,-97.291541272704407 26.104576425513905,-97.287190793518263 26.099935916255493,-97.286650074642992 26.099359149688052,-97.286603231473521 26.09930918366079,-97.283195451762182 26.095674220102872,-97.282639002190891 26.095080674133143,-97.282108002623801 26.094514274823585,-97.280435495761154 26.092730268223651,-97.279905974795895 26.09216544608875,-97.27980430522237 26.092056998587434,-97.27089841052117 26.086459003405839,-97.267086875013263 26.085485845069449,-97.24859983335169 26.080765747704277,-97.246979719077387 26.080352101364454,-97.229515030031649 26.08000965739204,-97.220290685310772 26.079828788368793,-97.208048240752987 26.079588741074772,-97.205005053278043 26.078666562185607,-97.199651252911579 26.077044196913871,-97.199152512570265 26.073220535461079,-97.199134106850465 26.073079425477676,-97.198725011196004 26.069943037351702,-97.198302051934135 26.066700361972018,-97.196018989165054 26.049196947106083,-97.195939794821285 26.0485897927724,-97.195071061587612 26.04192952989985,-97.204994779870347 26.030224637607851,-97.214918488291119 26.030733549398622,-97.224842206573854 26.027425644948035,-97.226114478654296 26.024372193927345,-97.219244211392265 25.99612778184791,-97.216954125592238 25.993837693582392,-97.208557137750816 25.991802058746771,-97.195834416946283 25.993074335758202,-97.174460269663413 26.000071824804216,-97.167208324722026 26.007069313850227,-97.162755377371425 26.014575709756024,-97.16262814819099 26.023481604457221,-97.172042954682937 26.044728528107019,-97.178658763584124 26.045491893327686,-97.182730028324386 26.053125515948434,-97.164981847348457 26.063876207878327,-97.152009000000007 26.062107999999998,-97.152012551274964 26.062039393270581,-97.15321 26.038906,-97.151921999999999 26.017652999999999,-97.14747181118706 25.985075937251509,-97.145567 25.971132,-97.146880999999993 25.969781,-97.146293999999997 25.955606,-97.147784999999985 25.953132,-97.156608000000006 25.949021999999999,-97.160293999999993 25.950243,-97.168198638692317 25.959262149012673,-97.178362000000007 25.962114,-97.187583000000004 25.958174,-97.206945000000005 25.960899,-97.214339285966162 25.960186817526893,-97.227626420907342 25.958907063854085,-97.229225999999997 25.958753000000002,-97.239867000000004 25.954974,-97.244841570811701 25.950784663302475,-97.248032999999992 25.948097,-97.255343503388133 25.949129556975723,-97.276707000000002 25.952147,-97.28138899999999 25.948036999999996,-97.277163000000002 25.935438,-97.284201820237172 25.935775045516863,-97.290083634347766 25.936056689174489,-97.293963761326751 25.936242484429805,-97.303601999999998 25.936703999999999,-97.316138101068788 25.931602038234757,-97.320560999999984 25.929801999999999,-97.324914000000007 25.924040999999999,-97.332235861490744 25.923541683060932,-97.33463605770983 25.923378000829199,-97.338346 25.923124999999999,-97.339310160867683 25.923294280152341,-97.350397999999998 25.925241,-97.367642000000004 25.915679999999998,-97.369283543255307 25.913688286645449,-97.373641276386991 25.908400972256459,-97.374430000000004 25.907443999999998,-97.372365000000002 25.905015999999996,-97.365976000000003 25.902446999999999,-97.365883578347024 25.900015396466173,-97.365521 25.890476,-97.364300486696564 25.885628504434479,-97.362421560218849 25.878165998501085,-97.360082000000006 25.868874000000002,-97.364783621478566 25.852096838905283,-97.36542 25.849826,-97.372864000000007 25.840116999999996,-97.394513000000003 25.837377,-97.422635999999997 25.840377999999998,-97.42853949246836 25.842912007889609,-97.434188204901034 25.845336654308195,-97.441181027463472 25.848338244915578,-97.445113000000006 25.850026,-97.445601387363794 25.851485440010176,-97.447179184935308 25.856200346812667,-97.448271000000005 25.859463000000002,-97.449172000000004 25.871677999999996,-97.452166849899044 25.875807172885114,-97.453724626189043 25.87795496921364,-97.454727000000005 25.879337,-97.45488774919265 25.879394304385261,-97.462586893331732 25.882138919861518,-97.468261999999982 25.884162,-97.468599721544905 25.884059457735212,-97.481532785459223 25.880132596436578,-97.486059999999995 25.878758,-97.490359999998347 25.879275544671589,-97.494739403174762 25.879802646248233,-97.496860999999996 25.880057999999998,-97.519591990380178 25.88590026892226,-97.521761999999995 25.886458,-97.52344767329889 25.891064017588189,-97.524375103029939 25.893598172727145,-97.528116959024402 25.903822606212749,-97.528119935206945 25.903830738482007,-97.52812430798204 25.903842686870224,-97.528627999999998 25.905218999999999,-97.528849446448064 25.906732522417784,-97.530321999999998 25.916796999999999,-97.530415259581318 25.916820899843632,-97.539878370214808 25.919246032588486,-97.542957 25.920034999999999,-97.545169999999999 25.923974999999999,-97.545468770003851 25.926387609575503,-97.545470694802859 25.92640315259677,-97.546397824784293 25.933889856891241,-97.546420999999995 25.934076999999998,-97.546611329705271 25.934141994258589,-97.555160182125618 25.937061277530951,-97.555378999999988 25.937135999999999,-97.555477252221124 25.937015705749829,-97.559364000000002 25.932257,-97.582565000000002 25.937856999999997,-97.580418999999992 25.945115999999995,-97.583044 25.955442999999999,-97.598043000000004 25.957556,-97.5981230356591 25.957681442330628,-97.607733999999994 25.972745,-97.60783562843973 25.973457509771446,-97.607844088251909 25.973516820913719,-97.608283 25.976593999999999,-97.609461531117333 25.977846566488182,-97.613191727531174 25.981811093986448,-97.613466053312663 25.982102652924251,-97.616041456343709 25.984839842874308,-97.624938181905222 25.994295461083137,-97.627225999999993 25.996727,-97.634804000000003 25.999508999999996,-97.635072411453706 25.99971613545971,-97.639164724998494 26.00287420951236,-97.642117661027001 26.005153015998879,-97.644011365977178 26.006614404624422,-97.643848619841975 26.01214811069886,-97.643707610985203 26.016942704231127,-97.649175518723894 26.021499311673544,-97.65096419129361 26.02118629315062,-97.659123404318109 26.019758427116106,-97.661326460130226 26.019372891335045,-97.66298585459532 26.019511685247039,-97.668297999999993 26.019955999999997,-97.669519566971061 26.021667429940447,-97.671350987084779 26.024233271429612,-97.671567999996611 26.024226704244594,-97.691453959129774 26.023624920821636,-97.697068999999999 26.023454999999998,-97.703247203861338 26.030308742132775,-97.706066818770353 26.031284762516545,-97.709294717923569 26.032402112038366,-97.711145328137576 26.033042707775564,-97.719920000000002 26.030837999999999,-97.723585926686539 26.030959832537771,-97.729354247932832 26.031151535557555,-97.735180242251758 26.031345155270547,-97.758837769919694 26.032131383932391,-97.76309059882324 26.033650253079866,-97.763351431657455 26.034258862745556,-97.76491324062286 26.037903081983409,-97.769788888528993 26.041344719068825,-97.770077387482857 26.041548365582649,-97.776788595669075 26.042443189872706,-97.779190602367677 26.042763456191249,-97.784050976575529 26.040637041739476,-97.789822674626535 26.0424596835391,-97.792252861730461 26.04428232533872,-97.793102878401371 26.047342389307317,-97.793537334820812 26.048906434437896,-97.794638769549053 26.052871604582215,-97.795290594138677 26.055218176136449,-97.801344 26.060016999999998,-97.803973303988229 26.059548218630308,-97.8082126910423 26.058792373859696,-97.819424117916668 26.056793476786609,-97.820997703829306 26.056512920501468,-97.825546000000003 26.055702,-97.826721102251625 26.055271667399982,-97.830409376527257 26.053920989485444,-97.836607999999984 26.051650999999996,-97.848759348822554 26.052295281844582,-97.85186756815483 26.052460084066457,-97.859824237628374 26.052881958029587,-97.860225497621784 26.05290323340671,-97.860503999999992 26.052917999999998,-97.861874999990562 26.053580848914272,-97.869705222636284 26.057366592615971,-97.871187000000006 26.058082999999996,-97.876982999999996 26.064482999999999,-97.886529999999993 26.066338999999999,-97.901546631929207 26.060958662441269,-97.905109129229899 26.05968224852101,-97.913882 26.056539,-97.935419999999993 26.052687999999996,-97.944344999999984 26.059620999999996,-97.950095000000005 26.061827999999998,-97.96210735288345 26.054793018383155,-97.96735799999999 26.051718,-97.971403108419892 26.054550391225565,-97.978769 26.059707999999997,-97.979877702655912 26.062937323324391,-97.981335 26.067181999999995,-98.010970999999998 26.063862999999998,-98.015122209308288 26.064471399070538,-98.026123959861238 26.06608380989196,-98.028288992822496 26.066401115993269,-98.028758999999994 26.066469999999999,-98.029241090705753 26.065867136858621,-98.033102 26.061039,-98.034402999999998 26.051375,-98.034479464439173 26.051215303797409,-98.034525269179767 26.051119640464091,-98.039238999999981 26.041274999999995,-98.054365285842039 26.044575736209502,-98.070020999999997 26.047992,-98.070022345126233 26.049160242153427,-98.070025 26.051466,-98.071425788568789 26.055027814897404,-98.076094939927231 26.066900165398668,-98.076139697069991 26.067013970337847,-98.076205751241318 26.067181927684643,-98.076543999999998 26.068041999999998,-98.076994427275579 26.068371469710563,-98.080289992888041 26.070782045417982,-98.080494999999999 26.070931999999999,-98.080906883185932 26.070920010911959,-98.084755 26.070808,-98.085506402845155 26.069709056167966,-98.085848999999982 26.069208,-98.085628527723046 26.069048386721494,-98.081567000000007 26.066108,-98.081855064865067 26.063941606819231,-98.081884000000002 26.063724,-98.082307152201508 26.063513440869801,-98.091037999999998 26.059169,-98.093593108176947 26.058759459973995,-98.094431999999998 26.058624999999996,-98.095078111969258 26.058956205325877,-98.096949561841043 26.059915534659098,-98.097643000000005 26.060270999999997,-98.105504999999994 26.067537000000002,-98.122952624574893 26.063250384797335,-98.12786358062813 26.062043837809401,-98.128331000000003 26.061928999999999,-98.142925292417388 26.051941751725515,-98.14645163947533 26.049528582072455,-98.146621999999994 26.049412,-98.146852932570667 26.049588146033326,-98.149462999999997 26.051579,-98.149462999999997 26.055813,-98.151730999999998 26.058187,-98.158277994458601 26.062311711597108,-98.16142849281799 26.064296576133319,-98.161911645017582 26.064600969774318,-98.167608590156348 26.068190136655492,-98.172071527808072 26.071001859012309,-98.177897000000002 26.074672,-98.179863281323136 26.072661506851002,-98.189059999999998 26.063257999999998,-98.191534000000004 26.057117999999999,-98.197046 26.056152999999998,-98.200871000000006 26.059161,-98.203328791159265 26.063523594334541,-98.204415309491765 26.065452171017675,-98.20496 26.066419,-98.205720285634712 26.066905180236589,-98.2057544964389 26.066927057036718,-98.220672999999991 26.076467,-98.228363119990576 26.077028417928002,-98.230097 26.077155,-98.231072909449267 26.07694353295701,-98.240214327563166 26.074962705064888,-98.248806000000002 26.073101,-98.250234708208026 26.074229377516481,-98.260964088277859 26.082703320039151,-98.264514000000005 26.085506999999996,-98.272091468517374 26.0934369782697,-98.272527821536428 26.09389363077193,-98.277218000000005 26.098801999999999,-98.277020629370639 26.099144109090908,-98.272932087266241 26.106230915405163,-98.272897999999998 26.10629,-98.272099931737145 26.106512924095771,-98.270258188934392 26.107027377392626,-98.270033999999995 26.107089999999999,-98.269661374787887 26.108231250649609,-98.268046405073434 26.113177467856264,-98.266755660647689 26.117130670341034,-98.265753950746401 26.120198637935399,-98.265698 26.12037,-98.266046753689267 26.120369439652073,-98.268388964369507 26.120365676386069,-98.271048543344023 26.120361403199535,-98.2713587738927 26.120360904747326,-98.279433560913844 26.12034793086255,-98.289509742149562 26.120331741306838,-98.296194999999997 26.120321,-98.299522999999979 26.11749,-98.299575546893735 26.117376878214852,-98.299577897643644 26.117371817572689,-98.299619756950364 26.117281703787395,-98.301477861619162 26.113281617347607,-98.302978999999993 26.110049999999998,-98.307788398559808 26.112633359128559,-98.31093219000293 26.114322040617914,-98.314784784069062 26.116391454064445,-98.31781148535309 26.118017240801439,-98.323055746360907 26.120834185452331,-98.323827999999992 26.121248999999995,-98.324165904650499 26.121735183484471,-98.335204000000004 26.137616999999999,-98.337914801547555 26.149187638321976,-98.338210450252006 26.150449569219312,-98.338419999999999 26.151344000000002,-98.338123748811455 26.151776768193923,-98.337139471603692 26.153214615149455,-98.336278203634194 26.154472768358826,-98.335109254490916 26.156180386856505,-98.334230366689056 26.157464279382136,-98.333315999999996 26.158799999999999,-98.333279392301918 26.159609030127591,-98.333194378655719 26.161487831708563,-98.333156000000002 26.162336,-98.33332593363771 26.162525092143447,-98.336569396995017 26.166134227137082,-98.336837000000003 26.166432,-98.337709251548077 26.166391430160555,-98.345513373134324 26.166028447761192,-98.345781000000002 26.166015999999999,-98.345955918391979 26.165759937155421,-98.34781294946896 26.163041431373035,-98.354645000000005 26.15304,-98.380009845764519 26.156864235849298,-98.386243919298991 26.157804141722139,-98.386694000000006 26.157872,-98.386714843024777 26.157901012682096,-98.387178289965661 26.158546112849205,-98.389418830831929 26.161664858836595,-98.394322667090904 26.168490808715738,-98.402249554153599 26.179524728065878,-98.404432999999997 26.182563999999999,-98.41082579547016 26.183537375155975,-98.418120000000002 26.184647999999999,-98.44253599999999 26.199151,-98.444302622216625 26.201317032456906,-98.444376000000005 26.201407,-98.444366742625562 26.201566115583965,-98.444174812576264 26.204865005795593,-98.443681770155465 26.213339409994948,-98.45054565332704 26.219516919037407,-98.450975699346984 26.219903961344286,-98.465077324681431 26.222335272645303,-98.467962758220992 26.221802674698019,-98.47639547470331 26.220246150374404,-98.481645999999998 26.219277000000002,-98.483269000000007 26.216439,-98.496684404575589 26.212853148677059,-98.500574513964963 26.213825676024403,-98.503492081872309 26.214798198660183,-98.504399410834864 26.216045775617395,-98.509275818143593 26.222750833698164,-98.509327236533252 26.222821533963195,-98.516621175147847 26.223550930651591,-98.520846190978133 26.222726536052498,-98.524733007990875 26.221968131567948,-98.526589565145571 26.221605875956907,-98.528323413163747 26.222421776495104,-98.535240999999999 26.225677,-98.538016739096946 26.231331135295655,-98.538505426714039 26.231595841236214,-98.543851889046309 26.23449184328507,-98.556093449912439 26.231976454911809,-98.561600478976516 26.23084487397777,-98.564343479612191 26.231667774301364,-98.575891642961039 26.235132223865481,-98.57618836327309 26.235221239973473,-98.581780384919284 26.243001439905978,-98.583095590242166 26.247416774401941,-98.585184223567666 26.254428618568909,-98.588002268837087 26.255070784392117,-98.599153999999999 26.257611999999998,-98.610401443364651 26.253223367217647,-98.613465000000005 26.252027999999999,-98.617434734670965 26.252082931217494,-98.618976176235122 26.252104260920568,-98.625299999997523 26.252191766854153,-98.626653663614832 26.252210498179227,-98.633391522135483 26.243617562727948,-98.63418 26.242612,-98.636673745354344 26.241784277127035,-98.654221000000007 26.235959999999999,-98.669397000000004 26.236319999999996,-98.675206000000003 26.239989,-98.678410535728389 26.244637915883345,-98.679041999999995 26.245553999999998,-98.678977427258005 26.246060764449961,-98.677766000000005 26.255568,-98.679196310064967 26.258571609080832,-98.681167000000002 26.262709999999998,-98.687156000000002 26.26512,-98.698855915315121 26.265619481498664,-98.707451416076225 26.272152066874316,-98.710601999999994 26.279018,-98.709170532219119 26.284185773270103,-98.710647239525585 26.288123668959596,-98.711233447604599 26.289686894290245,-98.722550749196131 26.295571625529284,-98.729196000000002 26.299026999999999,-98.73263614407044 26.29899082409209,-98.734613221934339 26.298970033513189,-98.745271658069271 26.303095890935232,-98.745297595683382 26.304159357241051,-98.745599830797417 26.316551278053844,-98.745615470637418 26.317192526042046,-98.748245116157776 26.32061106368975,-98.74905366960931 26.321662182706675,-98.754840366886953 26.324877004144408,-98.755242435754027 26.32510037501579,-98.766685638772316 26.325769085950686,-98.779858354339893 26.326538865087553,-98.779911999999996 26.326541999999996,-98.779946859358333 26.326559704051515,-98.789821999999987 26.331575,-98.796251999999996 26.349104,-98.797592059971961 26.356670995104565,-98.798210999999995 26.360166,-98.807348000000005 26.369420999999999,-98.808280016253249 26.369491024329768,-98.813413043374013 26.369876679389535,-98.81818280466733 26.370235041528161,-98.81932575812273 26.370320914010964,-98.824571000000006 26.370715,-98.828353477559162 26.367368473620303,-98.832909 26.363337999999999,-98.838554497099707 26.360957856802237,-98.842229804437778 26.359408346173527,-98.844057000000006 26.358637999999999,-98.847707 26.359594999999999,-98.853132332741467 26.364754198689674,-98.853414999999998 26.365023,-98.853852117327648 26.365076242531281,-98.854321671505204 26.365133435992636,-98.861354000000006 26.365989999999996,-98.861661690067152 26.365902494757481,-98.869113443480302 26.363783259984523,-98.874117355796216 26.362360176799562,-98.876164212939671 26.361778062685843,-98.882912762903771 26.359858814831277,-98.890964919192157 26.357568829017531,-98.895015448091129 26.359360408468842,-98.900432100164338 26.361756234493352,-98.900829697862818 26.361932094951143,-98.905559653818443 26.364024190108832,-98.91296803413384 26.372226331500926,-98.915344992389564 26.37485796579432,-98.921277034399395 26.381425588572444,-98.922831447878195 26.38166472803821,-98.923508557916591 26.381768898347495,-98.924925720775448 26.381986922427696,-98.926689551972586 26.38116380140492,-98.934437533628781 26.377548077521784,-98.937555770591459 26.376092900630621,-98.942046463189357 26.375531566775365,-98.950185820407469 26.380302920861933,-98.952073083609605 26.383491745197549,-98.952938578460817 26.384954133189183,-98.953327659277917 26.385611545667039,-98.958325183064531 26.394055638388448,-98.960041959595969 26.394835991082342,-98.96758721887106 26.398265653180793,-98.981979903868819 26.396488780147621,-98.98323657723455 26.396333635432413,-98.985344372930967 26.396073413984297,-98.99032130527651 26.395458978465552,-99.008003378826189 26.395458978465552,-99.014739404125635 26.398826987036053,-99.018845438188137 26.404005475794783,-99.021934999999999 26.407902,-99.025336792347318 26.409271761295809,-99.030462148109507 26.411335530401477,-99.031104888479149 26.411594335405351,-99.032315999999994 26.412082000000002,-99.033086386506682 26.412180127570064,-99.037216923343138 26.412706252494743,-99.039107 26.412946999999999,-99.039645291109963 26.412681959983438,-99.045466000000005 26.409815999999999,-99.053184999999999 26.402006,-99.062093000000004 26.397371,-99.082001999999989 26.396509999999996,-99.085125999999988 26.398782,-99.089412999999979 26.408099999999997,-99.092044248326658 26.410330707587079,-99.0977332288968 26.415153685331873,-99.099649490160544 26.416778244479925,-99.110855 26.426278,-99.113807999999992 26.434002,-99.110485406379198 26.436329519428725,-99.103082999999998 26.441514999999999,-99.097481906444941 26.458865277747179,-99.094712087984234 26.467445230774196,-99.091634999999997 26.476977000000002,-99.105030999999997 26.500335,-99.114051328117867 26.510193091438737,-99.123438026388797 26.520451579672599,-99.126618350727256 26.523927276756307,-99.127319211298612 26.524693229780183,-99.127781999999996 26.525199,-99.128040494672888 26.525242991472329,-99.131554903978838 26.52584108518932,-99.136510932879688 26.526684518463242,-99.143658999999985 26.527901,-99.157083944984777 26.532657279516766,-99.166741999999985 26.536078999999997,-99.170704 26.540316,-99.171403999999995 26.549848,-99.167459686682065 26.559874693319248,-99.167410000000004 26.560001,-99.168618869529794 26.566870928153797,-99.16946034016965 26.571652951934592,-99.178064000000006 26.620546999999998,-99.200522000000007 26.656442999999999,-99.209947999999997 26.693937999999999,-99.208906999999982 26.724761,-99.240022999999979 26.745850999999998,-99.242444000000006 26.788262,-99.243132825912184 26.78921716914337,-99.262208 26.815667999999999,-99.268613000000002 26.843212999999999,-99.274832961326339 26.850997131057774,-99.280470999999991 26.858053000000002,-99.295146000000003 26.86544,-99.316753000000006 26.865831,-99.328801222539823 26.879647723469141,-99.328900000000004 26.879760999999998,-99.328852280051947 26.879943529980665,-99.328653604395157 26.88070346927794,-99.326247644284351 26.88990632616278,-99.321819000000005 26.906846000000002,-99.324684000000005 26.915973,-99.337297000000007 26.922758999999999,-99.361143999999996 26.928920999999999,-99.367053999999996 26.929033999999998,-99.379148999999998 26.934489999999997,-99.388253000000006 26.944216999999998,-99.393748000000002 26.960730000000002,-99.390189000000007 26.966348,-99.377312000000003 26.973818999999999,-99.376593 26.977716999999998,-99.378434999999996 26.980034,-99.385448615007036 26.981891053234623,-99.387366999999998 26.982399,-99.403694000000002 26.997355999999996,-99.407320999999996 27.005808999999999,-99.415475999999998 27.017239999999997,-99.420446999999996 27.016567999999999,-99.429379999999981 27.010833000000002,-99.432154999999995 27.010698999999995,-99.438721 27.01463,-99.445682828533535 27.022104842939122,-99.446523999999997 27.023008,-99.446589518313687 27.0234513503828,-99.446929167151652 27.025749691622671,-99.446969999999979 27.026026000000002,-99.446787747918748 27.026353589968604,-99.444062000000002 27.031253,-99.443973 27.036457999999996,-99.447729715193731 27.048260380671568,-99.452315999999996 27.062668999999996,-99.450282 27.067705,-99.439210578806851 27.075275465844946,-99.434470000000005 27.078517000000002,-99.429209 27.090981999999997,-99.430274999999995 27.094871999999999,-99.437646 27.100442,-99.442122999999995 27.106839,-99.441108999999997 27.110041999999996,-99.433369999999982 27.119218,-99.430581000000004 27.126611999999998,-99.431354999999996 27.13758,-99.438264999999987 27.144791999999995,-99.439971 27.151071999999996,-99.437950999999998 27.154121,-99.42998399999999 27.159148999999999,-99.426616441133064 27.174998569551711,-99.42634799999999 27.176261999999998,-99.426389092127664 27.176475083747437,-99.428025433058153 27.184960350328335,-99.432794999999999 27.209693,-99.441928000000004 27.217984999999995,-99.442101400955139 27.218265584747954,-99.445237999999989 27.223341,-99.443121431464945 27.230753685991843,-99.441406999999998 27.236757999999998,-99.441548999999995 27.249919999999999,-99.452207395848959 27.263806782859465,-99.452390999999992 27.264046,-99.452635348600225 27.264144272092288,-99.454218033886534 27.264780796280988,-99.462735864984637 27.268206496624611,-99.463308999999981 27.268436999999995,-99.463731957038988 27.268231398925973,-99.480688 27.259988999999997,-99.487909999999999 27.260721,-99.492407 27.264118,-99.496069429210138 27.270723950024919,-99.496615000000006 27.271707999999997,-99.496412995851571 27.272119287725655,-99.490870463706145 27.283404082904614,-99.487572835142558 27.290118173493504,-99.487513000000007 27.29024,-99.487552182270463 27.290674424182523,-99.487937000000002 27.294941,-99.493651777311726 27.30231355132117,-99.494603999999995 27.303542,-99.494999311050705 27.30367917804087,-99.501697839297435 27.306003653868146,-99.502036000000004 27.306121,-99.50260564894451 27.305998370990778,-99.511531000000005 27.304076999999999,-99.522353224815092 27.304131436852781,-99.523657999999983 27.304137999999995,-99.527521386758664 27.305370598210363,-99.529216737576675 27.305911493159478,-99.529653999999994 27.306051,-99.533911450776046 27.310119063512179,-99.536090758332008 27.312201427353024,-99.536443000000006 27.312538,-99.537771000000006 27.316072999999996,-99.53137599999998 27.323809,-99.52136037329538 27.324774325824137,-99.521259999999998 27.324784,-99.520793197388144 27.325167862222077,-99.515101491997058 27.329848278790703,-99.509737777509301 27.334258981108004,-99.504836999999995 27.338289,-99.507830999999996 27.348637,-99.507785758525344 27.353517859091919,-99.507778999999999 27.354247,-99.505884699626023 27.358359262089539,-99.503847413823948 27.362781925614613,-99.502763417847504 27.36513512979511,-99.502013099315448 27.366763966750881,-99.499076000000002 27.373139999999999,-99.492143999999996 27.380516999999998,-99.488110785984318 27.408328989964531,-99.487887470616073 27.409868914391197,-99.487633320470721 27.411621467383494,-99.487521 27.412396,-99.487591555014376 27.412624523015491,-99.489856740583164 27.419961308946796,-99.495313182879073 27.437634363915539,-99.495699000000002 27.438884000000002,-99.495681276107845 27.439260342274874,-99.495103999999998 27.451518,-99.489866073767956 27.458841813736395,-99.48498035355378 27.465673163249864,-99.484933241276849 27.465739036942171,-99.483818999999997 27.467296999999995,-99.483170086267094 27.470026063960816,-99.480813109028745 27.479938539705284,-99.480418999999998 27.481595999999996,-99.480219000000005 27.485795999999997,-99.483519 27.491095999999999,-99.494943552274876 27.498766770813134,-99.497518999999997 27.500495999999998,-99.501722168778215 27.500229993495459,-99.502529258718056 27.500178915086504,-99.513319999999993 27.499496,-99.516119999999361 27.498282666666942,-99.519319999999979 27.496896,-99.525819999999982 27.496696,-99.528319999999994 27.498895999999998,-99.525855930815595 27.516294999999385,-99.525849791073696 27.516338353233991,-99.525316190784537 27.520106149807926,-99.523876376642917 27.530272798702207,-99.522431296340699 27.540476632400054,-99.521918999999997 27.544094,-99.518818999999993 27.553194,-99.514319 27.556994,-99.511118999999994 27.564493999999996,-99.512219000000002 27.568093999999995,-99.515978000000004 27.572130999999999,-99.51621006287597 27.572263354504685,-99.516956092136581 27.572688844074506,-99.522907946893667 27.576083418863931,-99.530137999999994 27.580207,-99.536560517954015 27.595669560441458,-99.539721999999998 27.603280999999999,-99.549741780062789 27.610632655019803,-99.554405160028892 27.614054243170667,-99.554950000000005 27.614453999999999,-99.555217670042637 27.614437037021997,-99.556811999999994 27.614335999999998,-99.559466999999998 27.609075999999998,-99.562869000000006 27.607264,-99.580005999999997 27.602250999999995,-99.584175941853502 27.603675176957196,-99.584843000000006 27.603902999999999,-99.584876722760043 27.604178863233781,-99.585148000000004 27.606397999999999,-99.578360965974085 27.610254799100861,-99.578159999999983 27.610368999999999,-99.578158133228257 27.610639131051315,-99.578098999999995 27.619195999999999,-99.584782000000004 27.622006999999996,-99.591372000000007 27.627464,-99.592626330929548 27.632690692534315,-99.594037999999998 27.638573,-99.596231000000003 27.639857999999997,-99.603532999999999 27.641991999999998,-99.612907806834755 27.638651258855042,-99.615318942915422 27.637792043123689,-99.624515000000002 27.634515,-99.625321999999997 27.631136999999999,-99.638929000000005 27.626757999999999,-99.654323999999988 27.629615999999999,-99.665948 27.635967999999998,-99.665422000000007 27.640274999999999,-99.660175716081199 27.644678795569117,-99.659499999999994 27.645246,-99.659300532255756 27.646059100049566,-99.658294999999995 27.650158,-99.661845 27.655753,-99.668942 27.659973999999998,-99.672015651285406 27.660163655087903,-99.685812999999982 27.661014999999999,-99.699355999999995 27.655417,-99.704600999999997 27.654953999999996,-99.711511000000002 27.658365,-99.721518999999986 27.666154999999996,-99.723715999999996 27.673328,-99.727277746539684 27.678262316066267,-99.732288643517421 27.685204233237535,-99.732448000000005 27.685424999999999,-99.732610774853441 27.685596448480599,-99.757538999999994 27.711853,-99.758533999999997 27.717071,-99.770740000000004 27.732133999999999,-99.774900999999986 27.73354,-99.785365999999996 27.730354999999999,-99.788844999999981 27.730718,-99.796341999999981 27.735586,-99.801651000000007 27.741771,-99.805670000000006 27.758687999999999,-99.813085999999998 27.773952,-99.817390803736785 27.775433523363962,-99.819091999999998 27.776019000000002,-99.822192999999999 27.766855,-99.825793000000004 27.764373999999997,-99.835127 27.762881,-99.841707999999997 27.766463999999999,-99.843346625073153 27.773142384459568,-99.844736999999981 27.778808999999999,-99.849281022020321 27.790032142335203,-99.850876999999997 27.793973999999999,-99.857944055165163 27.794214491272228,-99.870065999999994 27.794626999999998,-99.877441689362087 27.799278597548025,-99.877677000000006 27.799427,-99.877679299916537 27.799779028327777,-99.877693551047656 27.801960325692491,-99.877840000000006 27.824375999999997,-99.876677795668783 27.832975173255242,-99.876002999999997 27.837968,-99.877201999999997 27.842179000000002,-99.882014999999996 27.850391999999996,-99.89364999999998 27.856193,-99.901486000000006 27.864162,-99.904385000000005 27.875283999999997,-99.901231999999993 27.884405999999995,-99.894091000000003 27.892949999999999,-99.893456 27.899208000000002,-99.895827999999995 27.904177999999998,-99.900080000000003 27.912141999999999,-99.905861237749605 27.914081496997749,-99.917461000000003 27.917973,-99.925935042520848 27.927688375003317,-99.93714199999998 27.940536999999999,-99.938541 27.954059,-99.932160999999979 27.96771,-99.931811999999994 27.980967,-99.962768999999994 27.983536,-99.984922999999995 27.990729000000002,-99.991446999999994 27.99456,-99.998749958954292 28.00705628754028,-100.000278657311796 28.009672084008166,-100.008630999999994 28.023963999999999,-100.012838999999985 28.037203000000002,-100.014975394500183 28.048814882934586,-100.016570970484992 28.057487270710915,-100.017914000000005 28.064786999999999,-100.028724999999994 28.073118,-100.046108000000004 28.079067999999999,-100.053122999999985 28.08473,-100.056983000000002 28.094207,-100.05559599999998 28.101140999999998,-100.056492999999989 28.104185999999995,-100.064147158981442 28.110644603904401,-100.067651999999995 28.113602,-100.075474 28.124881999999999,-100.083393 28.144034999999999,-100.090288999999984 28.148312999999998,-100.119627999999992 28.155588000000002,-100.12658652988236 28.159659080291213,-100.141098 28.168149,-100.159890345070792 28.168159605160877,-100.160589999999999 28.16816,-100.1644540887186 28.169825181963088,-100.168437999999995 28.171541999999999,-100.173949604741296 28.178834844700365,-100.174413 28.179448,-100.17569869464343 28.180169771489844,-100.185693999999998 28.185780999999999,-100.195825662217615 28.189941498404405,-100.196499000000003 28.190218000000002,-100.19841872968675 28.190245400986015,-100.202449991411854 28.190302940621361,-100.208059000000006 28.190382999999997,-100.21208061434919 28.196473071951928,-100.212104999999994 28.196509999999996,-100.212111438897693 28.196576571978802,-100.212136678181992 28.196837521783539,-100.213449999999995 28.210415999999999,-100.217564999999993 28.226934,-100.220284000000007 28.232209999999995,-100.22363 28.235223999999995,-100.227575000000002 28.235856999999999,-100.246200000000002 28.234092,-100.251633999999996 28.236177,-100.261135590980771 28.244561246718906,-100.267604000000006 28.250268999999999,-100.280518 28.267969,-100.289383999999998 28.273491,-100.293468000000004 28.278475,-100.294296000000003 28.284381,-100.287553999999986 28.301093000000002,-100.286470999999992 28.312295999999996,-100.288638999999989 28.316977999999995,-100.314198000000005 28.345859,-100.317245999999997 28.357382,-100.320392999999996 28.362116999999998,-100.341869000000003 28.384952999999996,-100.344399999999979 28.389662,-100.34934096344108 28.4019924953441,-100.349585999999988 28.402603999999997,-100.349394820211828 28.402858691740477,-100.345766407828719 28.407692501181913,-100.343945000000005 28.410119000000002,-100.337058999999996 28.427150999999995,-100.336185999999998 28.430180999999997,-100.337474638078888 28.440402915586755,-100.337648113426326 28.441778981052359,-100.337796999999995 28.442959999999999,-100.338752462381066 28.444650728533539,-100.341532999999998 28.449570999999995,-100.350785999999999 28.459246,-100.353875644654778 28.461269551534915,-100.357498000000007 28.463642,-100.35795880406117 28.464220845064407,-100.358193534884933 28.464515705266944,-100.367961112704847 28.47678537623738,-100.368288000000007 28.477195999999999,-100.368051363629903 28.477598261305609,-100.365982000000002 28.481116,-100.356642877924983 28.482149981508559,-100.352234999999979 28.482638,-100.344180999999992 28.486249,-100.337140000000005 28.491728999999999,-100.33381399999999 28.499251999999998,-100.338517999999993 28.501833,-100.362147999999991 28.508399,-100.379079000000004 28.511638999999999,-100.388859999999994 28.515747999999995,-100.405057999999983 28.535779999999999,-100.411413999999994 28.551898999999999,-100.40430324537553 28.563833042228197,-100.397270000000006 28.575637,-100.396799999999999 28.580400999999998,-100.398385000000005 28.584883999999999,-100.403243426032972 28.586668145075244,-100.425819035320046 28.594958517689108,-100.429856 28.596440999999995,-100.431892715674053 28.597943579291371,-100.447320000000005 28.609324999999998,-100.448648000000006 28.616773999999999,-100.447280739633683 28.625703494601449,-100.445528999999993 28.637143999999996,-100.44560646842767 28.637394606891831,-100.447014715516048 28.641950223113035,-100.447091 28.642196999999999,-100.447325484276334 28.642184618041064,-100.447599559425257 28.642170145483281,-100.456522261830528 28.641698981546444,-100.462866000000005 28.641363999999999,-100.474494000000007 28.647071,-100.479445543783555 28.654922981332383,-100.479495071011698 28.655001519842354,-100.479635999999999 28.655225000000002,-100.481416494659797 28.655591917738484,-100.492493911747701 28.657874710783531,-100.493322226012125 28.658045406716248,-100.495863 28.658568999999996,-100.496129521434568 28.658770241190073,-100.500353999999987 28.661960000000004,-100.502122125123847 28.667202406240314,-100.505211969634487 28.676363647108229,-100.509438609439442 28.688895431533517,-100.510054999999994 28.690722999999995,-100.510127443340068 28.69126843161186,-100.510538898440004 28.694366309458967,-100.51077198772829 28.696121257064849,-100.511998000000006 28.705352,-100.511351260759739 28.706743032691019,-100.510646631791559 28.708258576930099,-100.509872363628347 28.709923903942272,-100.509406561254394 28.710925770365975,-100.508636802312012 28.712581398765199,-100.507069450532313 28.715952521820881,-100.506701000000007 28.716745000000003,-100.506745928327234 28.717920131927187,-100.506786973330165 28.718993692782757,-100.507152057645129 28.728542729239727,-100.507513721430456 28.738002299344281,-100.507590113222051 28.740000380261673,-100.507613000000006 28.740599,-100.507694735304739 28.740708529390524,-100.51442566685138 28.749728313832868,-100.519226000000003 28.756160999999999,-100.533017 28.763279999999998,-100.537772000000004 28.780775999999996,-100.534846642084489 28.786410367511117,-100.532431000000003 28.791062999999998,-100.535830000000004 28.805887999999999,-100.546431879116881 28.824270186264151,-100.546968759195195 28.825201061771438,-100.547323999999989 28.825817,-100.548186025546428 28.826178082695296,-100.553129999999982 28.828249,-100.561442999999997 28.829174000000002,-100.570509999999999 28.826317,-100.574698999999995 28.828786999999998,-100.576846000000003 28.836168000000004,-100.572991999999999 28.848463999999996,-100.580501999999996 28.856007999999999,-100.591040000000007 28.863054000000002,-100.598061272695219 28.874286065303028,-100.598877000000002 28.875590999999996,-100.602654 28.887660000000004,-100.602394435759351 28.893839359355621,-100.602053999999995 28.901944,-100.615584686670886 28.902906942475386,-100.627205999999987 28.903734,-100.631611000000007 28.902838999999997,-100.633502414453218 28.905240591668694,-100.640568000000002 28.914211999999999,-100.639169999999979 28.916288999999999,-100.638857000000002 28.927621999999996,-100.651511999999997 28.943431999999998,-100.64789859018552 28.954344193790252,-100.646992999999995 28.957078999999997,-100.646600907687997 28.967547400926616,-100.64647463428885 28.970918751315974,-100.645893999999998 28.986421,-100.647406325643686 28.99295674936236,-100.647835962928511 28.994813493392339,-100.648681241069511 28.998466493719445,-100.65094599999999 29.008254000000004,-100.653757999999996 29.015356,-100.656109999999998 29.017223999999999,-100.660207999999997 29.031497000000002,-100.663212 29.048041999999995,-100.662508000000003 29.058106999999996,-100.664064999999994 29.073205999999999,-100.666359117032755 29.07896154562156,-100.668483863047285 29.084292168447689,-100.674655999999999 29.099777000000003,-100.684472 29.110657,-100.692326999999992 29.115227999999995,-100.70996599999998 29.119684000000003,-100.727461999999989 29.129122999999996,-100.737795000000006 29.139078999999999,-100.739115999999996 29.141658,-100.737590999999995 29.147406999999998,-100.739681000000004 29.150486000000004,-100.746139999999997 29.154149000000004,-100.752330696165359 29.155516457617566,-100.759726 29.157149999999998,-100.76337082361762 29.160348915845475,-100.772648999999987 29.168492,-100.775904999999995 29.173344,-100.772154104961558 29.17809434863841,-100.766030999999998 29.185848999999997,-100.767059000000003 29.195287,-100.768348510582513 29.197581465531123,-100.775064591152173 29.209531592641572,-100.785521000000003 29.228136999999997,-100.791371999999996 29.225944999999999,-100.795681000000002 29.227729999999998,-100.79704599999998 29.235585999999998,-100.795234211471239 29.241421249558652,-100.795010188783237 29.242142762180318,-100.794911999999997 29.242459,-100.795310930062826 29.24310735172228,-100.797670999999994 29.246943000000002,-100.805332448258866 29.251327106905226,-100.815767091023289 29.257298117587734,-100.823532999999998 29.261742000000002,-100.834039999999987 29.261399999999998,-100.839016 29.263259,-100.841581161127962 29.265429071012271,-100.848663999999999 29.271420999999997,-100.856469000000004 29.275663999999999,-100.864659000000003 29.276076,-100.874739696506666 29.279181633366278,-100.876048999999995 29.279585,-100.876625364221198 29.280115401513385,-100.878513170701353 29.281852663087207,-100.878882999999988 29.282193000000003,-100.879105716359817 29.283377353454046,-100.880504361011205 29.290815018226784,-100.882051999999987 29.299044999999996,-100.886842 29.307848,-100.895590728097048 29.309871687341737,-100.904835000000006 29.31201,-100.906461302333199 29.313095095005444,-100.914770068080642 29.318638836799305,-100.916744062319239 29.319955917421627,-100.92203960930695 29.323489191321695,-100.922232587658954 29.323617949573855,-100.924041970395777 29.324825198761538,-100.926468967605715 29.326444530233299,-100.926628772437255 29.326551154580446,-100.926677999999981 29.326584,-100.92692137104487 29.32669794102517,-100.927819078352698 29.327118228044156,-100.92782883100196 29.32712279402223,-100.930446231588661 29.328348203997709,-100.940614999999994 29.333109,-100.941560773525751 29.336361493535293,-100.943196 29.341985,-100.945807189162338 29.344363370184055,-100.948971999999998 29.347245999999998,-100.95603875001359 29.347290187325033,-100.964324999999988 29.347342,-100.971743000000004 29.351370999999997,-100.972915999999998 29.354545000000005,-100.995606999999993 29.363403000000005,-101.004206999999994 29.364771999999999,-101.010614000000004 29.368669,-101.010768998319776 29.36895846820963,-101.014103165002794 29.375185214807839,-101.024016000000003 29.393697999999997,-101.036603999999997 29.406107999999996,-101.038600000000002 29.410713999999999,-101.037642000000005 29.414681000000002,-101.043363999999997 29.42988,-101.056956999999983 29.440773,-101.06011415724447 29.458454662113137,-101.060150999999991 29.458660999999999,-101.063843258270609 29.460131584976065,-101.087148999999997 29.469414,-101.103699000000006 29.470549999999999,-101.115253999999993 29.468458999999996,-101.130037999999985 29.47842,-101.137502999999995 29.473541999999998,-101.144336999999993 29.473246,-101.151876999999999 29.477004999999998,-101.163854997623304 29.493316894569897,-101.168923969306405 29.50021992913986,-101.171662999999995 29.503950000000003,-101.173821000000004 29.514566000000002,-101.192719999999994 29.520285,-101.227418999999998 29.522349999999996,-101.235274999999987 29.524854,-101.254895000000005 29.520341999999996,-101.260836999999981 29.529933,-101.261174999999994 29.536777,-101.252755240314642 29.553001111955531,-101.244355179006547 29.569187266927752,-101.24384013276574 29.574337712700849,-101.242022713082847 29.59251185083151,-101.251352546644355 29.604174135250076,-101.252152766968493 29.604494220898598,-101.259127443101093 29.607284069726152,-101.265347312053251 29.607284069726152,-101.274677145614746 29.602619152945408,-101.277624046978673 29.599940160672645,-101.283229510623855 29.594844301688571,-101.297224215766221 29.587069435365102,-101.30733154801338 29.587846934050759,-101.312894947857018 29.594028488101586,-101.314328915651188 29.595621785307589,-101.313192213312618 29.602947206633093,-101.31110792457288 29.616379301091623,-101.30733154801338 29.640715970810437,-101.311218981175116 29.64849082206727,-101.316661381574889 29.655488204771718,-101.325213716450733 29.657820655628775,-101.350093282659174 29.654710721152696,-101.353062961800887 29.655502634567405,-101.361755552011104 29.657820655628775,-101.364595571422868 29.66106639883844,-101.367197952410862 29.664040554714198,-101.371300910394638 29.676075888592084,-101.372874548462477 29.680691889931673,-101.378860251896057 29.698249939417508,-101.396947999999995 29.713947,-101.398362000000006 29.717000000000002,-101.396293999999997 29.727055,-101.397008999999997 29.733962999999999,-101.400635999999992 29.738078999999999,-101.410024000000007 29.741498,-101.415583999999996 29.746534,-101.415509877418046 29.750619769974676,-101.415402087456428 29.756561346443686,-101.424731921017937 29.758116313681725,-101.430388403484372 29.756500180308258,-101.441059122217254 29.75345141196761,-101.446501522617027 29.755006409338922,-101.451652003139955 29.758440048234313,-101.453498905321467 29.759671311053037,-101.455223999999987 29.771874,-101.467493655663716 29.779885945414083,-101.475268506920557 29.780663444099741,-101.503223000000006 29.764581999999997,-101.522695143280473 29.759671311053037,-101.526552276219391 29.761451532447605,-101.532802460460985 29.764336242900427,-101.53746737724174 29.782995910023434,-101.53804719015173 29.783865628452077,-101.546797210803248 29.796990645299058,-101.56156944476453 29.794658179375361,-101.572592853930203 29.778735448896484,-101.575564187573463 29.774443514881042,-101.582561562744587 29.771333610538232,-101.598573641854728 29.773657690388074,-101.603680999999995 29.774398999999999,-101.607256216824311 29.773863608191139,-101.625957999999997 29.771063000000002,-101.630319 29.768729,-101.632632680380155 29.763891873249722,-101.63512799999998 29.758675,-101.646417999999997 29.754303999999998,-101.652400999999983 29.758794999999996,-101.65328091488901 29.761368862201802,-101.654578 29.765162999999998,-101.662452999999985 29.77128,-101.689992000000004 29.771212999999996,-101.706636000000003 29.762736999999998,-101.714223999999987 29.767659999999999,-101.735201999999987 29.771591999999998,-101.754322999999999 29.777661999999999,-101.760919284561496 29.782457957985276,-101.763273999999981 29.784169999999996,-101.776796131253491 29.789191504347542,-101.777161000000007 29.789327,-101.777360180704861 29.789301830227139,-101.785668 29.788251999999996,-101.791002820423358 29.783037559970925,-101.796869557069002 29.782618516634159,-101.806507764952315 29.786389987871868,-101.809441149516488 29.790161459109573,-101.813855730843954 29.79253854440006,-101.814888826583982 29.793094827432377,-101.818909248247508 29.792167038125061,-101.830044431332681 29.789597381341238,-101.831231874027822 29.789323356194672,-101.852603555202364 29.801894932400803,-101.862241763085706 29.800218726571018,-101.866487373818487 29.79821962567333,-101.875399999999985 29.794022999999999,-101.878152615094365 29.794637055896249,-101.892739000000006 29.797891,-101.912406000000004 29.797849999999997,-101.917556726002999 29.792675767854249,-101.917942403066036 29.792482929945557,-101.922585359733716 29.790161459109573,-101.929709258872364 29.789323356194672,-101.932572380438657 29.791613852338052,-101.938090312383324 29.796028195755184,-101.946471365894325 29.797704401584976,-101.952535620779244 29.796990962273608,-101.953595265032959 29.796866298670082,-101.959462001678588 29.799380623656123,-101.965427194081556 29.806464275410743,-101.966166845299441 29.8073426094683,-101.970357372054934 29.81027599403247,-101.974547898810414 29.81027599403247,-101.982165144097308 29.804870201524977,-101.987538526473998 29.801056829485908,-101.993568005272067 29.802652866652032,-102.001318622543394 29.804704498914084,-102.001786318660763 29.804828300723614,-102.021918999999997 29.802490999999996,-102.032489182844799 29.803756293694118,-102.034758999999994 29.804027999999999,-102.039012999999997 29.802655,-102.041088000000002 29.799609999999998,-102.038411999999994 29.792831999999997,-102.039226999999997 29.790977000000002,-102.041308736499772 29.78984019520162,-102.048982832584102 29.785649487466547,-102.050044 29.785069999999997,-102.053123037129694 29.785312127485501,-102.073645999999982 29.786926,-102.076299925656656 29.790865308882584,-102.077348 29.792421,-102.084438999999989 29.794962000000002,-102.091420021879856 29.792967151942147,-102.091815999999994 29.792853999999995,-102.098789196918744 29.792718427915432,-102.115682000000007 29.792389999999997,-102.142325999999997 29.802854,-102.159600999999995 29.814355999999997,-102.161673999999991 29.819486999999999,-102.181894 29.846033999999996,-102.182859740836193 29.846584944255238,-102.18326563789924 29.846816503951921,-102.184058205433814 29.847268654791659,-102.186149999999998 29.848461999999998,-102.187393471220204 29.848699156882201,-102.188384798592551 29.848888224473839,-102.188671999999997 29.848942999999998,-102.189026115519184 29.848805138880103,-102.189342793483831 29.848681852617602,-102.205381000000003 29.842438,-102.216284162639099 29.842976962035557,-102.227553 29.843533999999995,-102.261388999999994 29.853283,-102.264041000000006 29.855964,-102.261776999999995 29.864001999999999,-102.264954000000003 29.867805999999998,-102.268816999999984 29.867990999999996,-102.276754999999994 29.862977999999998,-102.281249000000003 29.863116999999999,-102.297330999999986 29.875194,-102.301381000000006 29.877673999999995,-102.315388999999996 29.879919999999998,-102.320618999999994 29.878979999999995,-102.320667125014978 29.878900015386019,-102.320698585434869 29.878847727619664,-102.324634000000003 29.872306999999996,-102.333383999999995 29.868046,-102.341032999999996 29.869305000000004,-102.349861000000004 29.862316999999997,-102.361383773688715 29.849029038788231,-102.364542 29.845386999999995,-102.363642671554629 29.839963091609825,-102.362514000000004 29.833155999999995,-102.369522000000003 29.820395,-102.377253999999994 29.800163,-102.377312999999987 29.789971,-102.385270832882995 29.770348713937391,-102.386677616883858 29.766879890389689,-102.391739211722737 29.765814289574276,-102.392906191083 29.765568609270456,-102.402175111261812 29.766775086101941,-102.412062000000006 29.768061999999997,-102.433301 29.776608,-102.460890018677347 29.77909171043791,-102.468946430597143 29.779816991558327,-102.469957868267898 29.780012383523857,-102.481595292961757 29.782260529257879,-102.490330613701886 29.783948039559665,-102.492674483475767 29.783853017496881,-102.508312776666344 29.783219030534834,-102.508509848222559 29.783087649355906,-102.512686811979108 29.780303003853621,-102.512942156326147 29.774953626291172,-102.513380999999995 29.76576,-102.526400256170959 29.758693706517125,-102.535832205630967 29.753574449155192,-102.539417050278132 29.751628749336795,-102.545492105079163 29.750899740311965,-102.551081152293932 29.752357753652575,-102.556670813570321 29.757783010503054,-102.559343229460382 29.760376824671383,-102.565661280990938 29.761591836573395,-102.572255912443325 29.757095496286663,-102.57574472309652 29.754716761401177,-102.57635337725236 29.754301769870359,-102.585948674897452 29.751239442391949,-102.587774480184081 29.750656738873374,-102.597160000000002 29.751608,-102.612879000000007 29.748181999999996,-102.622534000000002 29.736632,-102.630150999999984 29.734314999999999,-102.64566499999998 29.733910000000002,-102.661251958261417 29.736122779697027,-102.66726872436665 29.739732837494621,-102.670971460158171 29.741954477821469,-102.677191937153026 29.738261067251376,-102.678467215476147 29.736427653943998,-102.6852530581628 29.72667193704833,-102.688163999999986 29.722486999999997,-102.690237999999979 29.707481999999999,-102.695507594622001 29.699754690880447,-102.698346999999984 29.695590999999997,-102.699316999999994 29.685029,-102.693466 29.676507,-102.697798916570122 29.672550546488289,-102.711337549653422 29.6601882100483,-102.724231000000003 29.648415000000004,-102.736947999999984 29.641537999999997,-102.742030999999997 29.632142000000002,-102.74048425929719 29.62775763619268,-102.738427999999999 29.621928999999998,-102.739991000000003 29.599041,-102.746201999999997 29.592875000000003,-102.757065999999995 29.597798999999998,-102.761810999999994 29.598396999999999,-102.768340999999992 29.594733999999999,-102.766929734823805 29.591197739636346,-102.762241000000003 29.579448999999997,-102.766124000000005 29.572347999999998,-102.768792219428661 29.572598581791439,-102.773961 29.573084,-102.776343296957975 29.562015327831393,-102.777530999999996 29.556497,-102.77572499999998 29.552188999999995,-102.771428999999998 29.548545999999998,-102.79216136048494 29.533953841063816,-102.807296321997939 29.523301326891541,-102.808565712504773 29.522407885546979,-102.808691999999979 29.522319000000003,-102.808681334358837 29.522097795383676,-102.808577631171161 29.519946998869006,-102.807327 29.494009000000002,-102.813953999999995 29.482805999999997,-102.814096473430837 29.482483316434472,-102.814383778328263 29.481832608662831,-102.822314986984821 29.463869465126457,-102.82537225240516 29.456945161410285,-102.827007089548758 29.453242470491304,-102.830969999999979 29.444267,-102.832538999999997 29.433109000000002,-102.830570753051859 29.427471931628293,-102.827354999999983 29.418261999999995,-102.825211066354328 29.40389180477127,-102.824564449740322 29.399557712155943,-102.831802092379931 29.389471209449322,-102.832669213065941 29.388262775214326,-102.84047188579207 29.377388836904565,-102.840778422425643 29.376961642203423,-102.841560439245441 29.370344567434586,-102.842457529677418 29.362753791491347,-102.843015380341285 29.358033509958585,-102.843020777220957 29.357987843989019,-102.861629999999991 29.351638999999995,-102.871857000000006 29.352092999999996,-102.876866000000007 29.354058999999996,-102.879534000000007 29.353326999999997,-102.883721999999992 29.348058999999999,-102.881857488401977 29.34363024944906,-102.879805000000005 29.338754999999999,-102.890489000000002 29.309498999999995,-102.88922161316745 29.299205074185686,-102.888328 29.291947,-102.891022000000007 29.287113000000002,-102.902604999999994 29.279440999999998,-102.90311226801488 29.27677066200776,-102.906295999999998 29.260010999999995,-102.903188999999983 29.254028999999999,-102.887901999999997 29.245611999999998,-102.881135 29.246022,-102.871347 29.241624999999999,-102.870795537867835 29.239589944231255,-102.86823682221636 29.230147538772215,-102.866845999999995 29.225014999999999,-102.878020000000006 29.214697999999999,-102.890063999999995 29.208813999999997,-102.899231 29.208863,-102.908656596973657 29.219194069767902,-102.908787000000004 29.219336999999996,-102.909098471667448 29.219296482603067,-102.910575587951939 29.219104333804097,-102.912131000000002 29.218902,-102.912650757516516 29.218481184275788,-102.915803535402844 29.215928573746115,-102.915865999999994 29.215877999999996,-102.915845750043147 29.215583596781208,-102.915608148145267 29.212129230727648,-102.915554 29.211341999999998,-102.915202931298523 29.21076702044931,-102.914525807203304 29.209658028088604,-102.912447999999998 29.206254999999999,-102.91453363655873 29.20019781620671,-102.917367531146525 29.191967513425833,-102.917805 29.190697,-102.922897000000006 29.192704085059273,-102.925481999999988 29.193722999999995,-102.932612000000006 29.194113000000005,-102.944911000000005 29.188819999999996,-102.947155999999993 29.180776999999999,-102.95089 29.176834999999997,-102.953474999999997 29.176307999999995,-102.977266 29.186226,-102.981742305424802 29.185103060319207,-102.989431999999994 29.183174,-102.98978258837333 29.182935350109393,-102.991725524817895 29.181612768970929,-102.994653 29.17962,-102.994906329461855 29.17910907354543,-102.99809599999999 29.172675999999996,-102.995688 29.161218999999999,-103.00243399999998 29.150260999999997,-103.0050672680876 29.149386797638936,-103.008362000000005 29.148292999999995,-103.010324999999995 29.137821999999996,-103.015028 29.125769999999996,-103.016945338084582 29.124525732477775,-103.024896087692937 29.119366048020158,-103.032982999999987 29.114118,-103.033302941039096 29.107355634443419,-103.034095953658579 29.105913798143234,-103.035682683422891 29.103028844591982,-103.04044215980575 29.099351067768175,-103.049126083320303 29.097714968852063,-103.055369601981923 29.096538655622457,-103.061557539334615 29.093936906572154,-103.06671291432167 29.091769303506382,-103.074407490743866 29.088534080562461,-103.076354546596249 29.085721668416742,-103.076667707631657 29.079576983004682,-103.076847 29.076059,-103.091926967746744 29.064237268591206,-103.100265999999991 29.057699999999997,-103.101359249603803 29.049403674773888,-103.102531654124817 29.040506667933872,-103.100975335951205 29.030701853789079,-103.100368259199087 29.026877266486249,-103.101607999999999 29.018122999999999,-103.107810999999998 29.013812,-103.117237999999986 29.000208999999998,-103.113922000000002 28.988546999999997,-103.115062910480361 28.985887850893185,-103.115327999999991 28.98527,-103.115773294260094 28.985147329619764,-103.126748000000006 28.982123999999995,-103.134930999999995 28.983525,-103.143274000000005 28.978073999999999,-103.156645999999995 28.972830999999999,-103.163865 28.972099,-103.165923000000006 28.974001999999999,-103.166234999999986 28.978836000000005,-103.174329720990258 28.980505274886987,-103.182663652045193 28.982223879127538,-103.194928465619142 28.984753100989199,-103.195705106971403 28.984913258196226,-103.207825367468075 28.987412670652219,-103.227338454203803 28.991436614861634,-103.227579101883322 28.991486240676846,-103.227800999999999 28.991532000000003,-103.228011662384262 28.991347921912006,-103.228737472224623 28.990713704806197,-103.239108999999985 28.981650999999996,-103.245121150470112 28.980239630911282,-103.2474464632202 28.980649978816817,-103.249155161185584 28.980951512720708,-103.25190330878641 28.984768118238364,-103.253285000000005 28.986686999999996,-103.26030800838916 28.989731411362609,-103.266003072061508 28.990206003834011,-103.270357000000004 28.988113999999996,-103.270725571428585 28.987466542857135,-103.27232562100086 28.984655789108508,-103.273357000000004 28.982844,-103.273647076585334 28.982817854078331,-103.281189929980513 28.982137982403092,-103.282424051550748 28.983865752282551,-103.284749352823042 28.987121173462914,-103.285935817906974 28.994002716014545,-103.289257951411443 28.999697788883793,-103.296614077237592 29.004443676810233,-103.302399476821606 29.006455988366771,-103.312987409437454 29.010138745081029,-103.315449022736544 29.011725838031147,-103.323993942362023 29.017235063099889,-103.331021803791103 29.021766184756,-103.332920159881368 29.026986669752301,-103.332783823258595 29.028827200289001,-103.332445567409962 29.033393619832523,-103.334818511373186 29.039800579109659,-103.341462759988346 29.041224342728523,-103.347869719265475 29.037427630547988,-103.350815999999995 29.028566999999999,-103.355428000000003 29.021529,-103.355590463621823 29.021464336016578,-103.361777791205157 29.019001647792766,-103.361998 29.018913999999999,-103.382125000000002 29.024248999999998,-103.386095607142025 29.025822707722725,-103.399799910010643 29.031254261761571,-103.402689272115182 29.032399429564627,-103.427474921518822 29.04222295692054,-103.427754276336316 29.042333676218103,-103.430481680804888 29.047455485683194,-103.434668000000002 29.055316999999995,-103.439550459717495 29.058547821156772,-103.449722032594721 29.065278554178825,-103.453029264571228 29.067467015663059,-103.457386392383299 29.068596640465525,-103.460381908910477 29.067681344107211,-103.463195887793432 29.066821517562918,-103.469166763983068 29.069242141692889,-103.471264639062966 29.073115142802621,-103.471299587628792 29.074897490538035,-103.471426016715213 29.08134526859719,-103.474814887995407 29.086670637304994,-103.484429000000006 29.094524,-103.49531945696836 29.1087608679228,-103.500928937954981 29.116094025764934,-103.503236 29.119109999999996,-103.506163032831353 29.119368513261239,-103.513192088151087 29.119989313955617,-103.524613000000002 29.120998,-103.524225442342612 29.124905426308125,-103.523383999999993 29.133389,-103.525026999999994 29.137353999999998,-103.539240927934515 29.144791265038371,-103.551909954693073 29.151420179312847,-103.558678999999984 29.154961999999998,-103.579462000000007 29.149964999999998,-103.592359999999999 29.150259999999999,-103.598960126757959 29.155019048637598,-103.606437999999997 29.160411,-103.607894091053709 29.162314354517299,-103.610539999999986 29.165772999999998,-103.624537921955991 29.163185608071569,-103.629433693714475 29.1622806680118,-103.638195234739996 29.160661174732635,-103.645634999999999 29.159286000000002,-103.653180000000006 29.162863999999995,-103.656807999999984 29.169098999999999,-103.660202999999996 29.170933999999999,-103.667724667668963 29.172878689431396,-103.669696386484915 29.173388467437,-103.688670000000002 29.178293999999998,-103.688830238367032 29.178273608722382,-103.690116124218548 29.178109972160996,-103.697314000000006 29.177194,-103.699305464408098 29.178139630948273,-103.713769999999997 29.185008,-103.724743000000004 29.191469999999999,-103.73193762439729 29.198544108660482,-103.742175000000003 29.20861,-103.750912464183997 29.219357091602017,-103.755265634411842 29.22471149629115,-103.75594348727293 29.225545256136954,-103.768569999999997 29.227360999999995,-103.777623396259372 29.232265264832392,-103.780085146052983 29.242351446713872,-103.780352362214714 29.243446273985068,-103.781659908552058 29.248803500057083,-103.789034484601103 29.257501704713096,-103.792700821322356 29.259284649416337,-103.795120675584712 29.260461427946989,-103.80876361213285 29.267096007175422,-103.816641821688407 29.27092719156084,-103.818617217853202 29.271599921312173,-103.838302999999982 29.278303999999999,-103.854966933859771 29.281484400071786,-103.856892999999999 29.281852,-103.880606 29.284961999999997,-103.896615144488038 29.284634799403065,-103.910231251371073 29.284356508561018,-103.916269383748329 29.284233099060927,-103.91710599999999 29.284215999999997,-103.91776286712728 29.284516760669142,-103.918698764585329 29.284945281345607,-103.918909999999997 29.285042,-103.918905327188597 29.285488562070029,-103.918900778480648 29.285923264066316,-103.918857000000003 29.290106999999995,-103.924975999999987 29.293913000000003,-103.943697999999983 29.294945999999996,-103.965795999999983 29.298586999999998,-103.975234999999998 29.296016999999999,-103.983459597310627 29.299165977024781,-103.998789342279238 29.305035323921498,-104.012357062242771 29.310230038851625,-104.018558084893087 29.312604243583909,-104.038281999999995 29.320155999999997,-104.047006656168747 29.325575022319434,-104.055595999999994 29.330909999999996,-104.056467149578211 29.334496091467582,-104.057243999999997 29.337694000000003,-104.068917843404819 29.342306667996301,-104.075923999999986 29.345075,-104.082149999999999 29.345922999999996,-104.091021999999995 29.353691999999995,-104.093326000000005 29.359926000000002,-104.098377999999983 29.366755999999999,-104.106466999999981 29.373127,-104.122882935723638 29.379859019095424,-104.125474999999994 29.380922000000002,-104.132831527553293 29.381873417846823,-104.136236243923818 29.382313748953422,-104.143691999999987 29.383277999999997,-104.1467332019064 29.385415391432094,-104.148888696362661 29.386930297552944,-104.151718842950046 29.388919356896473,-104.157422367906094 29.392927859373117,-104.166562999999996 29.399352,-104.180069999999986 29.412763999999999,-104.181273000000004 29.426265,-104.182051945448123 29.427144615030393,-104.195989999999995 29.442884000000003,-104.208194000000006 29.448201,-104.212529153241931 29.452438774515159,-104.213947876032222 29.456222068892099,-104.21370324326665 29.462011765001886,-104.213238514637069 29.473010445135856,-104.218538498245692 29.476600759818915,-104.220568643482977 29.477976020723915,-104.227547514371139 29.480496161448666,-104.229081071868791 29.481049944541308,-104.233824999999996 29.486544999999996,-104.233486999999997 29.492733999999995,-104.235847000000007 29.496744,-104.238313284768751 29.498023301020304,-104.246870092866089 29.50246185307569,-104.254473621536903 29.506405923975272,-104.260293266516271 29.50942466611497,-104.26168489846043 29.511073814728768,-104.264155000000002 29.514001,-104.271046277211582 29.51559593462645,-104.274575430964404 29.516412730896519,-104.293481117436073 29.520788310787555,-104.306646311930564 29.523835296697214,-104.308812834933008 29.524336722260216,-104.311570786550874 29.52540915148019,-104.318073989469781 29.527937921306467,-104.320711000000003 29.526326414398167,-104.326090351466348 29.523039031981277,-104.327483437129615 29.522187701603762,-104.334811000000002 29.519462999999998,-104.338113000000007 29.519967,-104.353150868059984 29.530471948300562,-104.369085650105362 29.541603450512167,-104.37074044290263 29.542759433043344,-104.371174999999994 29.543062999999997,-104.371454921502831 29.543072731712495,-104.371996954766473 29.543091575966443,-104.375901661123379 29.543227326450971,-104.381040999999996 29.543405999999997,-104.394588999999982 29.556087000000002,-104.394583075653415 29.556197720561212,-104.394577025204526 29.556310797858156,-104.394552364240909 29.55677168847231,-104.394503136758885 29.55769170460702,-104.394351 29.560534999999998,-104.39571704642303 29.563607040276512,-104.39636925661604 29.56507376640522,-104.397848504811165 29.56840038104859,-104.399550133070164 29.572227096202102,-104.399591 29.572319,-104.399981791506633 29.572551361916329,-104.452301000000006 29.60366,-104.466520000000003 29.609296,-104.483502 29.627740999999997,-104.486693164979016 29.629712817604439,-104.493658999999994 29.634016999999997,-104.503232654335022 29.63787621670291,-104.507568060311556 29.63962385355849,-104.51068846437596 29.64315687341222,-104.513969549435132 29.646871821353749,-104.51818442992635 29.651644041921735,-104.53325150001281 29.668703453669117,-104.535568725458901 29.671327089370656,-104.539761023554547 29.676073741438437,-104.540155514025756 29.678572204873163,-104.540559188867974 29.681128836544634,-104.537934834631798 29.684482179324355,-104.535770155740693 29.687248158943191,-104.536302269386866 29.690440851131939,-104.537991394981006 29.693268523024599,-104.544269904764263 29.703779029587054,-104.545505621253113 29.70584767433138,-104.552240999999995 29.717122999999997,-104.555600999999996 29.731220999999998,-104.554914970831931 29.738152096413199,-104.554660236582549 29.740725729903364,-104.557361904757329 29.745049367744027,-104.565950999999998 29.758794999999996,-104.565687999999994 29.770461999999998,-104.571279565966023 29.778773775962186,-104.586447318468245 29.801320404476364,-104.592472 29.810276000000002,-104.594023000000007 29.809220999999997,-104.599148999999997 29.811007,-104.610166000000007 29.819117999999996,-104.610205623651026 29.819231101342197,-104.610356932717465 29.819662996386217,-104.613081011852316 29.827438579869643,-104.615248982559379 29.833626813172685,-104.619039 29.844444999999997,-104.624350000000007 29.845221999999996,-104.629290740007292 29.852171499068138,-104.629713747950376 29.852766489555783,-104.630103000000005 29.853313999999997,-104.630111961493199 29.853664893019587,-104.630290851730521 29.860669455113747,-104.630338938536084 29.862552324858758,-104.630359999999996 29.863376999999996,-104.630588419131911 29.86393398222631,-104.633274999999998 29.870484999999999,-104.63616345635748 29.872800876528242,-104.645854762904364 29.880571071602066,-104.65678299999999 29.889332999999997,-104.658422170930251 29.891285606400047,-104.65864999999998 29.891556999999999,-104.658665881124946 29.891956296855856,-104.659041999999999 29.901413000000002,-104.661965712024596 29.903547518850328,-104.666224133352003 29.906656470935726,-104.672326999999996 29.911111999999996,-104.679772 29.924658999999998,-104.680850906343153 29.932111041680564,-104.684321999999995 29.956085999999999,-104.679660999999982 29.975271999999997,-104.680379178583593 29.977083,-104.685479 29.989943,-104.689640999999995 30.014949999999999,-104.693591999999995 30.019077000000003,-104.701242868742796 30.021046973658397,-104.702310999999995 30.021321999999998,-104.702447580064685 30.021555813412469,-104.7030116881661 30.022521518330599,-104.703997999999999 30.02421,-104.703882705803636 30.024660825787098,-104.703121214098445 30.027638426639932,-104.701101999999992 30.035533999999998,-104.706873999999999 30.050685,-104.706630611705322 30.051708605996314,-104.703831250551389 30.063481739403372,-104.703581999999997 30.06453,-104.699792220462342 30.065066336345112,-104.698848962238912 30.065199827927678,-104.698233000000002 30.065286999999998,-104.697787990647399 30.065651654776563,-104.69277799999999 30.069756999999996,-104.687313590037505 30.080921966773531,-104.685080632167896 30.08548438075637,-104.685002999999995 30.085643,-104.685554782105299 30.093963293324606,-104.685687 30.095957000000002,-104.686861171517634 30.098036494960315,-104.692093999999983 30.107303999999996,-104.693655813605488 30.119154117533654,-104.695366000000007 30.13213,-104.692122999999995 30.138662999999998,-104.690080458880587 30.149079251722458,-104.687506999999997 30.162202999999998,-104.687296000000003 30.179464000000003,-104.702787999999998 30.211735999999995,-104.707897632633845 30.218501061672534,-104.711235999999985 30.222920999999999,-104.713166 30.237956999999998,-104.722357186598074 30.248308653999679,-104.724410584274111 30.250621311025988,-104.72532436157617 30.251650460675243,-104.73347160041142 30.260826359409911,-104.733822000000004 30.261220999999999,-104.734059376092361 30.261231667834558,-104.737359999999995 30.261379999999996,-104.740448 30.259454000000002,-104.749663999999996 30.26126,-104.751566999999994 30.263643999999999,-104.754655151309422 30.272796681105522,-104.757893999999993 30.282395999999999,-104.761634 30.301147999999998,-104.779356000000007 30.313188,-104.790279572675416 30.323632238875831,-104.797291 30.330335999999999,-104.809794338457337 30.334925849121163,-104.810755485390246 30.338091979227556,-104.81211787963197 30.342579864771171,-104.813478341684558 30.347061385458392,-104.814379749150064 30.356375955470707,-104.814778573671205 30.360497153782266,-104.817595751374526 30.365914799658352,-104.824313633436745 30.370465624210016,-104.837492999999995 30.373909,-104.849824017938076 30.383147747051474,-104.859521 30.390413000000002,-104.857439999999997 30.408957,-104.852419999999995 30.418792,-104.861074000000002 30.428896999999996,-104.86474141169117 30.441297336779865,-104.865463293164552 30.443738179024677,-104.868454614768496 30.453852504447951,-104.869872 30.458644999999997,-104.86871099999999 30.463229999999996,-104.866118999999983 30.46479,-104.866094000000004 30.467379999999999,-104.870137228360662 30.483875070981508,-104.873288503237063 30.496731258693877,-104.873335488188886 30.496922942181985,-104.876786999999979 30.511004000000003,-104.878566789651714 30.514416830422793,-104.880108146577356 30.517372454871531,-104.88208573587417 30.521164575423189,-104.889375999999999 30.535143999999995,-104.890392881954469 30.540947215529823,-104.892228000000003 30.551419999999997,-104.895440150997459 30.560421421221292,-104.899000999999998 30.570399999999996,-104.909330873116318 30.584188648619556,-104.909747767935556 30.584745133303247,-104.918689620637082 30.596681007395873,-104.924796 30.604831999999998,-104.927016167130404 30.604700501077968,-104.934922481779466 30.604232215677584,-104.939873000000006 30.603939,-104.953391370086464 30.606003357240429,-104.967167000000003 30.608106999999997,-104.971627504383378 30.61006529240159,-104.972071 30.61026,-104.972794851616513 30.611297344530712,-104.980135850742045 30.621817657146149,-104.980290999999994 30.622039999999995,-104.982191641583043 30.62882153037463,-104.983981 30.635206,-104.985513855292751 30.652294791670293,-104.9863 30.661059000000002,-105.001239999999996 30.672583000000003,-105.002056999999994 30.680971999999997,-105.006614566555172 30.685839873047019,-105.006800999999996 30.686039,-105.007528432885024 30.6859080282745,-105.007959930235828 30.685830338698263,-105.020141999999993 30.683637,-105.035888798004834 30.686138071331488,-105.042930223005172 30.687256464175281,-105.044973600167665 30.685364445024991,-105.049769587265445 30.680923708581364,-105.049884734287517 30.6808170907847,-105.050688284649809 30.681171184306308,-105.054688384336032 30.682933873306403,-105.062333999999993 30.686302999999995,-105.062477471553692 30.692159292631892,-105.062625999999995 30.698222,-105.084504902225902 30.710918832086001,-105.098281999999998 30.718914000000002,-105.108075999999997 30.730049999999995,-105.110705999999993 30.737749999999995,-105.110681999999983 30.743366000000002,-105.113815999999986 30.746001,-105.119547104826722 30.748125675649064,-105.123265000000004 30.749504000000005,-105.140207000000004 30.752502,-105.152361999999982 30.751451999999997,-105.157640215066564 30.754007791997694,-105.16015278062757 30.757058756266805,-105.160271207191187 30.758203550015399,-105.161229588477383 30.767467931854636,-105.164076390339474 30.771453450048199,-105.164818961888187 30.77249304906519,-105.164868027003308 30.772491740665838,-105.170370203038615 30.772345016388588,-105.178279098267282 30.772134113115257,-105.183436 30.776644999999995,-105.185930999999997 30.784391999999997,-105.195143999999999 30.792138,-105.195988495740664 30.791702299374609,-105.203522176185984 30.787815448176353,-105.206160999999994 30.786453999999996,-105.212916518294108 30.785414778041517,-105.215967484302155 30.786491589369188,-105.216685356202021 30.789542555377231,-105.215888956387687 30.792967070566242,-105.214890669496626 30.797259699168034,-105.218659510882389 30.801566944478708,-105.222008841883465 30.801829013843189,-105.231580057313238 30.802577916338681,-105.238364256021057 30.803108747911697,-105.249792715464977 30.799033957074698,-105.255416052233826 30.797028969328842,-105.261224946310648 30.798054073736733,-105.261360733612406 30.798078036329223,-105.27276013440985 30.808707209360072,-105.27887297001547 30.814407016614517,-105.283004544196217 30.818259431108679,-105.287237620233441 30.822206489243744,-105.289317685342255 30.822206489243744,-105.295630129130572 30.822206489243744,-105.300778681061615 30.818848737795758,-105.303672944509898 30.816961174571279,-105.314862960890409 30.816961174571279,-105.316949659843416 30.82296045428,-105.31766045482081 30.825003996727105,-105.320108268786385 30.827451797139727,-105.322675464925993 30.828439452154051,-105.330102631610075 30.831296841312803,-105.347695000000002 30.838065,-105.353219571709047 30.842032277683753,-105.358103536812379 30.84553952616983,-105.359771122039604 30.846737044096301,-105.360672052753856 30.84738401593513,-105.36720323988537 30.847875849249167,-105.377416999999994 30.848644999999998,-105.387780492422849 30.851314552204784,-105.394242074789418 30.852979003795937,-105.396689881978517 30.855426817761515,-105.396237319899697 30.858492407966825,-105.394628539050657 30.86939005724841,-105.394248999999988 30.871960999999999,-105.395681745186749 30.87649980844607,-105.399608999999998 30.888940999999996,-105.399828021807267 30.889112280223049,-105.402824820246408 30.891455847338634,-105.413505 30.899808,-105.430088999999995 30.905791999999998,-105.44547819369545 30.915748838601054,-105.448693870984556 30.917829388134351,-105.452149246331331 30.920065022782566,-105.4597280766598 30.924968540917344,-105.469954295993247 30.931584924947412,-105.472488639470896 30.933224650164071,-105.476269681741059 30.935670991952524,-105.488027000000002 30.943277999999999,-105.495516502166126 30.9493992090351,-105.4968561000139 30.950494069316512,-105.497422439936116 30.953962910943051,-105.497963910074574 30.957279424722472,-105.502256687477072 30.962680017552614,-105.507558525965123 30.966493977230062,-105.533087999999992 30.984859,-105.541468808393844 30.984769556162778,-105.543675999999991 30.984745999999998,-105.557430349577899 30.990228688381027,-105.570063935625512 31.008532833135739,-105.575218046011173 31.016000355201566,-105.578084306850855 31.020153131231776,-105.578407858220658 31.020621907958049,-105.57911399999999 31.021644999999999,-105.580554486932016 31.024917232759986,-105.581339666024604 31.026700857930102,-105.581404000000006 31.026847000000004,-105.581361569643192 31.027041810483581,-105.581235244876609 31.027621805343596,-105.579823718925667 31.034102543987302,-105.579541999999989 31.035395999999995,-105.579765234089464 31.036249085539566,-105.579847333127134 31.036562825712579,-105.585323000000002 31.057487999999996,-105.592709163135751 31.0626132919136,-105.595921000000004 31.064841999999999,-105.598772999999994 31.074925999999998,-105.60333 31.082624999999997,-105.627348999999995 31.098545,-105.641890000000004 31.098321999999996,-105.646730999999988 31.113907999999999,-105.647031366805422 31.114192798578223,-105.648833999999994 31.115902000000002,-105.662869191777489 31.12063916934996,-105.673930643060629 31.124372639388369,-105.709491 31.136374999999997,-105.717005999999998 31.141438,-105.717653520299876 31.143411480377267,-105.719539999999995 31.149160999999996,-105.742677999999998 31.164897,-105.763531 31.164121000000005,-105.773256999999987 31.166896999999999,-105.774148788612138 31.168976038235485,-105.780021000000005 31.182666,-105.779878030009812 31.18682806893737,-105.779724999999999 31.191282999999995,-105.782894999999996 31.197562999999999,-105.790659746923424 31.200723362140888,-105.794386000000003 31.20224,-105.818835000000007 31.230680999999997,-105.825806058218902 31.23733997673531,-105.835722000000004 31.246811999999995,-105.851073632158958 31.265902599748792,-105.86604427072389 31.284519412988434,-105.869353000000004 31.288633999999998,-105.869862116496506 31.288859823963843,-105.876014999999981 31.291588999999995,-105.890871999999987 31.290013999999996,-105.895034999999993 31.290977999999999,-105.903460999999993 31.306768999999999,-105.908770999999987 31.312773999999997,-105.914613899052299 31.312859252963214,-105.93196564998388 31.313112430054005,-105.932552999999999 31.313120999999995,-105.933375187723101 31.313903465142818,-105.938451999999984 31.318735,-105.948091000000005 31.340069,-105.945903 31.352809999999998,-105.953942999999995 31.364749,-105.970101 31.365936999999995,-105.997579969562565 31.386863626037869,-106.00418474278807 31.391893495117941,-106.004925999999998 31.392457999999998,-106.006143777923754 31.392558937255828,-106.022866323827969 31.393945009265412,-106.080091217088636 31.398688175961098,-106.080258 31.398702,-106.080335505244278 31.398768097394733,-106.096409750603954 31.412476405141465,-106.100621535494 31.416068265421309,-106.102641400977276 31.417790830744398,-106.10264993125142 31.41779810546371,-106.106876999999997 31.421403000000005,-106.112168999999994 31.423577999999996,-106.132782000000006 31.425367000000005,-106.143572676566535 31.431101721097118,-106.158218000000005 31.438885000000003,-106.175305198785026 31.455910533348611,-106.175674999999998 31.456278999999995,-106.17677981450808 31.456634312625521,-106.182946895641223 31.45861766980741,-106.20560859826729 31.465905761156737,-106.205826999999999 31.465975999999998,-106.205998876707866 31.466165148890862,-106.212686244283063 31.473524541419071,-106.218538531147885 31.479964934554566,-106.218843000000007 31.480299999999996,-106.218893022078106 31.480498686193428,-106.223908999999992 31.500422,-106.236804000000006 31.513376,-106.242649095206133 31.530650094003715,-106.245874455325477 31.540182047193959,-106.246202999999994 31.541153,-106.246406806009631 31.541315626597875,-106.254779999999997 31.547997000000002,-106.280345588488331 31.561810530102129,-106.280548572587122 31.561920205925162,-106.280811 31.562061999999997,-106.287785 31.584444999999999,-106.292254713772053 31.594651759250389,-106.295141086978958 31.601242900860864,-106.303535999999994 31.620412999999996,-106.308594276522342 31.627497440426588,-106.330970256390501 31.658836434185069,-106.33473699999999 31.664111999999999,-106.338265602146336 31.671883697950737,-106.346992532059133 31.691104641686092,-106.349537999999995 31.696711,-106.357472918704602 31.702103016258707,-106.368303742040567 31.709462886938788,-106.370138999999995 31.710709999999999,-106.373839000000004 31.714809999999996,-106.378039 31.72831,-106.381039 31.732109999999999,-106.38595139194058 31.734759025425479,-106.394642915450532 31.739445961452269,-106.404086535473255 31.744538468290354,-106.417940000000002 31.752009,-106.421739999999616 31.752623660686648,-106.431540999999996 31.754208999999996,-106.434644983693715 31.755853956158482,-106.444263765046571 31.76095142933643,-106.451540999999992 31.764807999999999,-106.467641999999998 31.759607999999997,-106.470742 31.753508,-106.472156160715315 31.752506597443457,-106.47367184987327 31.751433300058491,-106.475016438009845 31.750481163584279,-106.475542000000004 31.750108999999998,-106.48261401078824 31.748321568701869,-106.484641999999994 31.747809000000004,-106.486162292248409 31.747994847970777,-106.488078402545341 31.748229082678503,-106.489542 31.748407999999998,-106.507341999999994 31.761208,-106.509102011460428 31.762827435120251,-106.511609062807707 31.765134242258316,-106.523643000000007 31.776206999999996,-106.528643000000002 31.781807,-106.528542999999999 31.783906999999996,-106.528542999999999 31.784407000000002,-106.527996999999999 31.786944999999999,-106.527623000000006 31.789119000000003,-106.527737999999985 31.789760999999995,-106.527942999999993 31.790507000000002,-106.530514999999994 31.792103,-106.532480000000007 31.791913999999998,-106.533 31.791829,-106.533043000000006 31.791906999999995,-106.534743000000006 31.796106999999999,-106.535154000000006 31.797088999999996,-106.535342999999997 31.797507,-106.535842999999986 31.798607,-106.542096999999998 31.802145999999997,-106.542143999999993 31.802106999999996,-106.544713999999999 31.804286999999999,-106.545344 31.805007,-106.546561898485905 31.806561850400339,-106.546615562760394 31.806630361790774,-106.547143999999989 31.807304999999996,-106.551861034152338 31.808599471053657,-106.558443999999994 31.810406,-106.560680020141419 31.810752754512048,-106.560847305685968 31.810778696593822,-106.562944999999999 31.811104,-106.56344399999999 31.812605999999995,-106.566844000000003 31.813305999999997,-106.569123704016391 31.811582321353455,-106.570943999999997 31.810205999999997,-106.577243999999993 31.810406,-106.581344 31.813905999999996,-106.582144 31.815505999999999,-106.588044999999994 31.822105999999998,-106.589044999999984 31.822705999999997,-106.593826000000007 31.824901,-106.602727000000002 31.825023999999996,-106.605266999999998 31.827911999999998,-106.603310537982878 31.834798487166189,-106.601945 31.839604999999999,-106.60204499999999 31.844404999999998,-106.605244999999982 31.845904999999998,-106.605845000000002 31.846304999999997,-106.614637000000002 31.846489999999996,-106.621857000000006 31.852854,-106.625763000000006 31.856276,-106.627808000000002 31.860592999999998,-106.629708357956787 31.861913746439043,-106.635925999999998 31.866235,-106.635879999999986 31.871514,-106.634872999999999 31.874477999999996,-106.630798999999996 31.879696999999997,-106.629271361585637 31.8835303997664,-106.629197000000005 31.883717000000004,-106.629948941610351 31.885072003811555,-106.630443527558498 31.88596325099838,-106.630530381920593 31.886119763139838,-106.630691999999982 31.886410999999999,-106.633926999999986 31.889183999999997,-106.635073463799642 31.889856364267651,-106.636317332120683 31.890585853164694,-106.638154 31.891662999999998,-106.638364165758659 31.89171923904625,-106.642899999999983 31.892932999999999,-106.645296000000002 31.894859,-106.645645999999999 31.895648999999995,-106.645478999999995 31.898669999999999,-106.640839999999997 31.904598,-106.63512839833713 31.908732779117901,-106.633668 31.90979,-106.633408736085542 31.909871832166754,-106.625946999999996 31.912227,-106.62344499999999 31.914034,-106.618336531290581 31.916262323146238,-106.614677480394235 31.917858407661853,-106.614345999999998 31.918002999999995,-106.611846 31.920003,-106.616063629645311 31.921863544491501,-106.623932999999994 31.925334999999997,-106.624022586877501 31.92530240401349,-106.628663000000003 31.923614,-106.629746999999995 31.926570000000002,-106.625321999999983 31.930053000000004,-106.622529 31.934863000000004,-106.622117000000003 31.936620999999999,-106.622377 31.940863,-106.623659000000004 31.945509999999995,-106.616135999999983 31.948439,-106.614701999999994 31.956,-106.617707999999993 31.956008,-106.622819000000007 31.952891,-106.625123000000002 31.954530999999999,-106.625534999999985 31.957475999999996,-106.624298999999993 31.961054,-106.620453999999981 31.963402999999996,-106.619370999999987 31.964777000000005,-106.618745000000004 31.966954999999995,-106.619568999999998 31.971578,-106.621872999999994 31.972933,-106.623215999999999 31.972909999999999,-106.626465999999994 31.97069,-106.630114000000006 31.971257999999999,-106.638186000000005 31.976819999999996,-106.639528999999996 31.980347999999996,-106.63649199999999 31.985719,-106.631181999999995 31.989809,-106.629494617643616 31.990072722748106,-106.628337072326531 31.990253636712819,-106.62822051159516 31.990271854111079,-106.626910882874782 31.990476537349483,-106.623567999999992 31.990998999999999,-106.619448000000006 31.994733,-106.618486000000004 32.000494999999994,-106.599096000000003 32.000731000000002,-106.598639000000006 32.000753999999993,-106.595332999999997 32.000777999999997,-106.587971999999979 32.000748999999999,-106.582805114232855 32.000751357586125,-106.566056000000003 32.000759000000002,-106.565141999999994 32.000736000000003,-106.564298514026802 32.00073927393025,-106.562131862706067 32.000747683631808,-106.55942760630407 32.000758180008894,-106.517043115844388 32.000922692365819,-106.411074999999983 32.001334,-106.409326934223301 32.001349629127162,-106.409108574114072 32.001351581443814,-106.394297999999992 32.001483999999998,-106.376861000000005 32.001171999999997,-106.32356972407176 32.001457096670784,-106.313306999999995 32.001511999999998,-106.205915000000005 32.001761999999999,-106.200699 32.001784999999998,-106.18183999999998 32.002049999999997,-106.125534000000002 32.002532999999993,-106.05045734599986 32.002412317859424,-105.998002999999997 32.002327999999999,-105.900599999999997 32.002099999999992,-105.886159000000006 32.001969999999993,-105.854061000000002 32.00235,-105.750527000000005 32.002206,-105.731362000000004 32.001564000000002,-105.563520259526442 32.001015604709174,-105.429281000000003 32.000577,-105.428582000000006 32.000599999999999,-105.427048999999997 32.000638000000002,-105.390395999999981 32.000607000000002,-105.340142768272344 32.000583616714373,-105.200871148394683 32.000518812363367,-105.153993999999997 32.000497000000003,-105.150310000000005 32.000497000000003,-105.14824 32.000484999999998,-105.132915999999994 32.000518,-105.131377 32.000523999999999,-105.118039999999993 32.000484999999998,-105.078604999999996 32.000532999999997,-105.077045999999996 32.000578999999995,-104.918272000000002 32.000495999999991,-104.643525999999994 32.000442999999997,-104.640917999999999 32.000396000000002,-104.531936999999999 32.000311000000004,-104.531756 32.000117000000003,-104.024520999999993 32.000010000000003,-103.980179000000007 32.000124999999997,-103.875476000000006 32.000554,-103.748317 32.000197999999997,-103.72373965094468 32.000208021677786,-103.713395184678689 32.000212239744897,-103.713395184670219 32.000212239744904,-103.713395184654971 32.000212239744911,-103.713395184639609 32.000212239744918,-103.60161412595366 32.000257819670985,-103.326500999999993 32.00036999999999,-103.278520999999998 32.000419,-103.270382999999995 32.000326,-103.267707999999999 32.000323999999992,-103.267633000000004 32.000475000000002,-103.215641000000005 32.000512999999998,-103.133028835827503 32.000473953106116,-103.088697999999994 32.000452999999993,-103.085875999999985 32.000464999999998,-103.064422999999991 32.000518,-103.064344000000006 32.087051000000002,-103.064347999999995 32.123041,-103.064421999999993 32.145006000000002,-103.064695999999998 32.522193,-103.064761000000004 32.587983,-103.064787999999993 32.600397,-103.064761000000004 32.601863000000002,-103.064814999999996 32.624536999999997,-103.064633 32.646419999999992,-103.064864 32.682647000000003,-103.064797999999996 32.690761000000002,-103.064798999999994 32.708694,-103.064826999999994 32.726627999999998,-103.064807000000002 32.777302999999996,-103.064698000000007 32.783602000000002,-103.064711000000003 32.784593,-103.064699000000005 32.827531,-103.064672000000002 32.828470000000003,-103.064888999999994 32.849359,-103.064915999999982 32.857259999999997,-103.064807000000002 32.857695999999997,-103.064862000000005 32.868346000000003,-103.064700999999985 32.879354999999997,-103.064569000000006 32.900013999999999,-103.064656999999997 32.959097,-103.064678999999998 32.964373000000002,-103.064625000000007 32.999898999999999,-103.064452000000003 33.010289999999998,-103.06398 33.038693000000002,-103.063904999999991 33.042054999999998,-103.063382198608849 33.066417104805645,-103.0628188509327 33.092668632365545,-103.062136190569035 33.12448003074244,-103.060102999999984 33.219225000000002,-103.059719999999999 33.256262,-103.059241999999998 33.260370999999992,-103.057856 33.315233999999997,-103.057486999999995 33.32947699999999,-103.056655000000006 33.388437999999994,-103.052609999999987 33.570599,-103.051664000000002 33.629489,-103.051362999999995 33.64195,-103.051535 33.650486999999998,-103.051086999999981 33.658186,-103.050532000000004 33.672407999999997,-103.050147999999993 33.701971,-103.049608000000006 33.737766,-103.049096000000006 33.746270000000003,-103.047346000000005 33.824674999999999,-103.046907000000004 33.850299999999997,-103.045643999999996 33.901536999999998,-103.045698000000002 33.90629899999999,-103.044893000000002 33.945616999999999,-103.043949999999981 33.974629,-103.043616999999998 34.003633,-103.043531000000002 34.018014,-103.043554999999984 34.032713999999991,-103.043745999999999 34.037294000000003,-103.043771000000007 34.041538000000003,-103.043720999999991 34.042319999999997,-103.043767000000003 34.043544999999995,-103.043744000000004 34.049985999999997,-103.04368599999998 34.063077999999997,-103.043515999999983 34.079382000000003,-103.043569000000005 34.087947,-103.043571175003294 34.092846731402311,-103.043572866326429 34.096656853966635,-103.04358003846437 34.112813863799865,-103.043644 34.256903,-103.043718999999982 34.289440999999997,-103.043935999999988 34.302584999999993,-103.043978999999979 34.312763999999994,-103.043947553639484 34.376410480771497,-103.043947499824213 34.37651940122479,-103.043946000000005 34.379555000000003,-103.043943999999982 34.37966,-103.043919000000002 34.380915999999992,-103.043693000000005 34.383578,-103.043629999999993 34.384689999999999,-103.043614000000005 34.384968999999998,-103.043612999999993 34.388679000000003,-103.043612999999993 34.390442,-103.043606047260084 34.391254973944719,-103.043584999999993 34.393715999999998,-103.043610999999999 34.397105000000003,-103.043582999999998 34.400677999999999,-103.043537999999998 34.405462999999997,-103.043582 34.455657000000002,-103.043587999999986 34.459662000000002,-103.043588999999997 34.459774000000003,-103.043593999999985 34.46266,-103.043434927764125 34.510540742996007,-103.043071999999981 34.619782,-103.043277851519235 34.65183038816317,-103.0432796163159 34.65210514391012,-103.043285999999995 34.653098999999997,-103.042827000000003 34.671187999999994,-103.042768999999993 34.747360999999998,-103.042770000000004 34.792223999999997,-103.042781000000005 34.850242999999999,-103.042520999999979 34.899546,-103.0425974544018 35.032467348285799,-103.042641999999987 35.109912999999999,-103.043261 35.125058000000003,-103.042519999999996 35.135596,-103.042599999999993 35.142766000000002,-103.042710999999997 35.144734999999997,-103.042568000000003 35.159317999999999,-103.042394999999999 35.178573,-103.042338999999984 35.181922,-103.042366 35.182786,-103.042377000000002 35.183149,-103.042496999999997 35.211862000000004,-103.042775000000006 35.241236999999998,-103.042366 35.250056,-103.041554000000005 35.622487,-103.041484634909168 35.651235429903174,-103.041145999999998 35.791583000000003,-103.041916999999998 35.796441000000002,-103.041715999999994 35.814072000000003,-103.042186 35.825216999999995,-103.04130499999998 35.837693999999999,-103.040823999999986 36.055230999999992,-103.041387523024824 36.229129564686382,-103.041674 36.317534000000002,-103.041745000000006 36.318266999999999,-103.041923999999995 36.500439,-103.00243399999998 36.500397)),((-96.818513748151517 28.172441936006489,-96.816443421354066 28.174808025412563,-96.791958210781445 28.188687337716829,-96.733036581469989 28.190913261798631,-96.70383764358462 28.198245729538105,-96.697421731775194 28.2029594609741,-96.702659211994316 28.211208487181011,-96.703313894801497 28.216445964862743,-96.686815839850283 28.218410020896432,-96.662461568376486 28.227313732447904,-96.66062845144161 28.228884976259902,-96.663116248646261 28.233205895474203,-96.651855673914184 28.251275190431315,-96.607991796426646 28.277069769155677,-96.608122730450688 28.280081317680857,-96.611527096272326 28.281390688369981,-96.610479598706064 28.283092866206033,-96.592934048725994 28.296972182316367,-96.581018783574592 28.302209665072866,-96.553260151988255 28.302340591484768,-96.546975176740276 28.305614018207578,-96.542130508742858 28.315958034472228,-96.528905880514458 28.322504882843088,-96.476269225261575 28.330753906512612,-96.45099839278295 28.337038879223222,-96.434107525610045 28.344764159184386,-96.418918843885365 28.35484630740093,-96.415252604940861 28.362833452872817,-96.417216660974546 28.367154372087118,-96.412895739222876 28.36951123780511,-96.403206408302779 28.371475291301415,-96.401242352269094 28.366892498964241,-96.400558825492723 28.362187299887704,-96.398667286465624 28.349166496619617,-96.397846 28.343512999999998,-96.413700000000006 28.327342999999999,-96.439098999999999 28.319051999999999,-96.495600517783487 28.293964130304811,-96.547774000000004 28.270797999999999,-96.587113635820756 28.248878526668094,-96.611036668198281 28.235548960715661,-96.621533999999983 28.229699999999998,-96.694665999999998 28.18212,-96.758140999999995 28.136872999999998,-96.830820125734775 28.079724674840076,-96.849624000000006 28.064938999999999,-96.854049189790473 28.060788472935577,-96.855594496383262 28.059339080448503,-96.859762278796424 28.055429983997605,-96.896530613737951 28.020943786452513,-96.898080497387397 28.019490100997579,-96.929052999999996 27.990439999999996,-96.96699599999998 27.950531000000002,-97.001440999999986 27.911442,-97.031660000000002 27.869974999999997,-97.041798999999997 27.852925999999997,-97.045408776308051 27.837452569961062,-97.045409609838757 27.837448997003069,-97.04598 27.835004,-97.050599498412936 27.830109781194331,-97.058265753683145 27.821987615677948,-97.076304165860961 27.802876463727326,-97.079565315161531 27.799421374709375,-97.083535350812468 27.795215242050556,-97.085211615730273 27.793439290085495,-97.085394999999991 27.793244999999999,-97.11422230692618 27.755303327915222,-97.116276999999997 27.752599,-97.117304906633777 27.751048809529347,-97.118830196202964 27.748748513687826,-97.139140047561696 27.718119138409879,-97.139351757288111 27.717799858049549,-97.143807202733072 27.711080581371732,-97.165547551982726 27.678293865995041,-97.166583141799606 27.676732088482499,-97.166681999999994 27.676583,-97.184850261879149 27.644709535797791,-97.192144670654784 27.631912600211269,-97.198729900630283 27.620359811436909,-97.201865999999995 27.614857999999998,-97.211651066704889 27.596044174137351,-97.213608899397855 27.592279833590187,-97.221943360361436 27.576255098965802,-97.265194083077162 27.493096589152017,-97.265746568141566 27.492034321708481,-97.276090999999994 27.472145,-97.304469999999995 27.407734,-97.326522999999995 27.347611999999998,-97.347445832595042 27.277936119324231,-97.350397999999998 27.268104999999998,-97.363400999999996 27.210366,-97.370941000000002 27.161165999999998,-97.377001000000007 27.101020999999999,-97.379130000000004 27.047996,-97.378361999999996 26.992877,-97.370730999999992 26.909706,-97.365301177044699 26.875333999999995,-97.365282052674758 26.875212938438843,-97.364726000000005 26.871692999999997,-97.363633430415348 26.866515420001111,-97.352028350385282 26.811520085064032,-97.35141299999998 26.808603999999999,-97.350529648372714 26.805138580575584,-97.333027999999999 26.736478999999996,-97.304204860681779 26.646364129642233,-97.300690000000003 26.635375,-97.297812715808362 26.627503004299889,-97.297022484076606 26.625340999999999,-97.287871455917369 26.600304594305239,-97.275119000000004 26.565415000000002,-97.269391999999982 26.554046,-97.269132970349304 26.553256905349773,-97.257954534248029 26.519203490608863,-97.229844 26.433568999999999,-97.223724090442104 26.411478908273114,-97.206682644704898 26.34996703527348,-97.194643999999997 26.306512999999999,-97.185844000000003 26.267102999999995,-97.177979856301576 26.220346386353309,-97.177168840972797 26.215524458900923,-97.173264999999986 26.192314,-97.170387765328073 26.167037808112223,-97.169872392484734 26.162510314053797,-97.167099005951158 26.138146416702778,-97.161470999999992 26.088705,-97.158662630175101 26.080176913346069,-97.154270970414501 26.066840900880429,-97.161462285840642 26.067639941946975,-97.169842256221145 26.077853024187579,-97.171781452365479 26.102521767945923,-97.179531587141199 26.146202099560895,-97.178745972847352 26.177103221942961,-97.183983445454302 26.214289306886101,-97.194458400817808 26.271639686993655,-97.214884565299002 26.353606215503973,-97.226930759399721 26.385554824668418,-97.240286324189555 26.405980989149626,-97.240845398636537 26.411470089808617,-97.243166933615896 26.434263367616055,-97.247618791929028 26.456260775909261,-97.254165635225121 26.471187589585856,-97.262545605605609 26.482971915638458,-97.27642492679071 26.521729238684483,-97.292399243108349 26.528014213932472,-97.310730412457033 26.556558470596535,-97.308111681228326 26.5712234060755,-97.308635417324538 26.576722756880109,-97.317015387705027 26.597672667607057,-97.318434072834165 26.60022630157264,-97.324871601690262 26.611813856840271,-97.338489044677715 26.647428701777493,-97.33639404954522 26.666021744249065,-97.345821512417203 26.700589103038251,-97.363105189274393 26.710540307081217,-97.370437657013895 26.723895871871047,-97.370961403259614 26.736203954318924,-97.367557047587525 26.740393934434408,-97.364152671616353 26.758986971196869,-97.364646278833362 26.767121661774897,-97.368866408127118 26.774699404876429,-97.370437646864346 26.781508126370166,-97.368342661881371 26.795649318140761,-97.373056398392137 26.808481136684847,-97.387459455673451 26.820789208983193,-97.383531343606066 26.875520854055946,-97.385626348888096 26.88887641440536,-97.391649435788921 26.901970109878395,-97.389554460955466 26.945964918852653,-97.390340075249313 27.05228571820243,-97.389816329003565 27.067212531879022,-97.386411973331462 27.083186832972341,-97.387459455673422 27.090519300711819,-97.390601943297412 27.094185534581555,-97.390078197051665 27.156511519247964,-97.377508246555678 27.199458835730731,-97.379865109736301 27.202863196477598,-97.386673841379576 27.204696313412462,-97.382221972916923 27.229050589961044,-97.37488951532697 27.25026236588155,-97.373318276589728 27.276449754290233,-97.372896734486858 27.277942715507475,-97.367033301341749 27.298709035706306,-97.36467643816114 27.302637142698917,-97.359962701650375 27.304732132756659,-97.357605838469766 27.307874620380655,-97.362319574980518 27.32672953597509,-97.366771423144115 27.333276389420721,-97.36179581858525 27.359987519000377,-97.346607126710992 27.390364889744752,-97.336132171347501 27.402411088920228,-97.331156576938184 27.412362295500575,-97.329585328051422 27.418123524502818,-97.330894688591016 27.425455992242295,-97.329847196099536 27.434359703793774,-97.317277255753083 27.463689574751687,-97.293708603647858 27.497209429631152,-97.282971770086746 27.521563701104967,-97.267627232015485 27.541048841138782,-97.26651977444007 27.542455137362143,-97.266473727822444 27.542513609294531,-97.257831889393842 27.556392930479635,-97.261144559602045 27.562355746269706,-97.261759991311692 27.563463525096239,-97.260450620622564 27.56739163716362,-97.260303240478223 27.567589679048492,-97.252732825146552 27.577762415194865,-97.252070650242061 27.578652211895708,-97.247885553160842 27.581360217573209,-97.247618802078478 27.581532821322067,-97.236881968517352 27.598292751933528,-97.24107194863285 27.602482732049012,-97.241084821027414 27.602523494839662,-97.242643187370078 27.607458346757408,-97.231683715414945 27.631671123728168,-97.231553918442799 27.631957884363242,-97.231382612637987 27.632336350521356,-97.221955159915538 27.632860099304484,-97.221711030183002 27.632638163711842,-97.219074540339648 27.630241360463614,-97.217418907944051 27.630677052710489,-97.214098935780783 27.631550728615359,-97.200743370990949 27.650143776161688,-97.197339005169326 27.664546838517776,-97.19760088336696 27.678426154628117,-97.203474366386629 27.684532651921231,-97.20308902068453 27.688000774441392,-97.200450811776179 27.688974477466285,-97.190006537429824 27.692829222058965,-97.188284576858237 27.695272543577584,-97.170627865440125 27.720325976082009,-97.166176017276527 27.732372180332245,-97.161200407642937 27.734074342943998,-97.153606061705801 27.733288721037997,-97.147321086457822 27.735383711095739,-97.130823034043985 27.751619892924076,-97.127942424617643 27.75580987303956,-97.127680546420009 27.759999858229808,-97.125046985317312 27.763143140340585,-97.103326269871417 27.789067861139614,-97.102999946318647 27.791923200131116,-97.10255066693685 27.795854405604921,-97.102495980878558 27.796332909939515,-97.102278777379922 27.798233445813956,-97.100865886772965 27.802472121847156,-97.098874421707819 27.808446522979796,-97.095168997779496 27.812151946908138,-97.092851314507953 27.81446963017968,-97.092589446459854 27.819183356540908,-97.098874421707819 27.822849590410645,-97.104263831428213 27.822227735056668,-97.126109297533233 27.819707102786651,-97.130299287798252 27.820492727230029,-97.134489267913736 27.825206463740791,-97.132394272781227 27.827301438574235,-97.10670775348396 27.832389859144307,-97.087681973298601 27.836158807756469,-97.056712719518927 27.842293721800239,-97.055822986229373 27.843403727743151,-97.04322620548075 27.859119113080268,-97.013634476624247 27.906780143237341,-97.017955395838555 27.911493874673329,-97.016384146951765 27.917255079570445,-96.985744902767337 27.954048356415132,-96.977888688782102 27.976438572489602,-96.978805242174786 27.978271691961854,-96.980900237307296 27.978271691961854,-96.986006780964971 27.976176699366729,-96.986661461234775 27.980759491703903,-96.978281501003806 28.001709402430844,-96.967806540565562 28.020040576854303,-96.966759042999328 28.020367911280101,-96.965187799187319 28.013297317932185,-96.962569062883844 28.012380759464751,-96.952617853766114 28.01643980428749,-96.946987563862692 28.02652194996665,-96.932453562407773 28.035425661518129,-96.926430465357427 28.043412814602167,-96.929572952981431 28.051399967686208,-96.927085150701998 28.057292130712504,-96.906004298338829 28.076147047258459,-96.890946545563423 28.076801730065643,-96.886232814127425 28.084396073465374,-96.88832780925992 28.086622002621937,-96.889113433703315 28.099453823703399,-96.886887499471996 28.117130312782294,-96.879424092633712 28.131402425890027,-96.874972236857971 28.133235547899659,-96.87078225420511 28.13127149186597,-96.86462821551855 28.126295887307109,-96.857164811217643 28.115559058820768,-96.845380482627661 28.108881273888468,-96.830128556765757 28.111822717849165,-96.827049318353744 28.112416571196771,-96.816574357915513 28.119618104912195,-96.810420321766344 28.126034014184238,-96.810944073086844 28.136378030448888,-96.816836228500989 28.158048094801106,-96.820248352517055 28.163388807027481,-96.822859330626116 28.167475552598326,-96.818513748151517 28.172441936006489)))');
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/country.sqlite3.sql	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
--- New Zealand bondary courtesy of 'world_borders.shp', which was assembled from public domain sources by Schuyler Erle. See: http://mappinghacks.com/data/
--- Texas boundary data is a data product from the U.S. Census Bureau.  See 'state.sql' for more information.
-INSERT INTO geoapp_country ("name", "mpoly") VALUES ('New Zealand', GeomFromText('MULTIPOLYGON (((174.616364000000004 -36.100861000000002,174.634978999999987 -36.124718,174.708862000000011 -36.205559,174.781096999999988 -36.266945,174.812744000000009 -36.339165,174.768311000000011 -36.34639,174.710784999999987 -36.525832999999999,174.708587999999992 -36.533332999999999,174.70773299999999 -36.541671999999998,174.714690999999988 -36.595832999999999,174.717194000000006 -36.603057999999997,174.774414000000007 -36.730277999999998,174.808319000000012 -36.805275000000002,174.854400999999996 -36.847777999999998,174.896636999999998 -36.878334000000002,175.011658000000011 -36.871941,175.020813000000004 -36.873610999999997,175.055542000000003 -36.880279999999999,175.076629999999994 -36.890839,175.082458000000003 -36.895279000000002,175.087463000000014 -36.900832999999999,175.091644000000002 -36.925559999999997,175.161652000000004 -36.955559,175.221069 -36.937775000000002,175.230255 -36.939438000000003,175.278320000000008 -36.965279000000002,175.310516000000007 -36.995002999999997,175.319976999999994 -37.005836000000002,175.323853000000014 -37.012222,175.328856999999999 -37.026947,175.330261000000007 -37.035277999999998,175.330535999999995 -37.044449,175.321899000000002 -37.06472,175.31942699999999 -37.095275999999998,175.317748999999992 -37.144165,175.319121999999993 -37.152495999999999,175.328856999999999 -37.168892,175.373290999999995 -37.216659999999997,175.385254000000003 -37.225830000000002,175.404967999999997 -37.228050000000003,175.579131999999987 -37.244446000000003,175.58914200000001 -37.169449,175.551636000000002 -37.024718999999997,175.547484999999995 -37.009171000000002,175.542480000000012 -36.994446000000003,175.536102 -36.980826999999998,175.524993999999992 -36.961669999999998,175.498566000000011 -36.927222999999998,175.484406000000007 -36.920279999999998,175.476348999999999 -36.917777999999998,175.464416999999997 -36.90889,175.435241999999988 -36.866942999999999,175.46691899999999 -36.809998,175.509430000000009 -36.776108,175.486358999999993 -36.679726000000002,175.463593000000003 -36.621383999999999,175.378296000000006 -36.570557,175.366364000000004 -36.561667999999997,175.361633000000012 -36.556389000000003,175.356628 -36.541671999999998,175.353850999999992 -36.525002,175.35244800000001 -36.489998,175.353577 -36.481940999999999,175.360229000000004 -36.478050000000003,175.538025000000005 -36.514724999999999,175.542755 -36.519996999999996,175.604950000000002 -36.622771999999998,175.631072999999986 -36.710555999999997,175.763610999999997 -36.713614999999997,175.840789999999998 -36.754173000000002,175.733582000000013 -36.805832000000002,175.701629999999994 -36.844161999999997,175.707458000000003 -36.869995000000003,175.709960999999993 -36.875275000000002,175.714690999999988 -36.880828999999999,175.720519999999993 -36.885277000000002,175.735779000000008 -36.891387999999999,175.74383499999999 -36.893889999999999,175.758330999999998 -36.876106,175.761382999999995 -36.869446000000003,175.757751000000013 -36.863059999999997,175.753051999999997 -36.857779999999998,175.749114999999989 -36.851394999999997,175.75 -36.843055999999997,175.752196999999995 -36.835555999999997,175.756378000000012 -36.830002,175.765533000000005 -36.828055999999997,175.808013999999986 -36.824173000000002,175.817200000000014 -36.825836000000002,175.833587999999992 -36.830832999999998,175.845519999999993 -36.839722000000002,175.849120999999997 -36.846107000000003,175.878570999999994 -36.914444000000003,175.881072999999986 -36.921669,175.918304000000006 -37.067504999999997,175.917480000000012 -37.075836000000002,175.915253000000007 -37.083061,175.898314999999997 -37.115004999999996,175.884154999999993 -37.168892,175.883330999999998 -37.176949,175.887206999999989 -37.244163999999998,175.892212 -37.249724999999998,175.921082000000013 -37.251671000000002,175.927185000000009 -37.256110999999997,175.93081699999999 -37.262504999999997,175.936371000000008 -37.278885000000002,175.940093999999988 -37.299717,175.974396000000013 -37.418059999999997,175.976074000000011 -37.453055999999997,176.026931999999988 -37.483108999999999,176.035583000000003 -37.487282,176.059417999999994 -37.502502,176.088287000000008 -37.525557999999997,176.093291999999991 -37.531112999999998,176.165526999999997 -37.613892,176.169433999999995 -37.620277000000002,176.167205999999993 -37.625832000000003,176.160247999999996 -37.624167999999997,176.082458000000003 -37.602500999999997,176.066924999999998 -37.59639,176.061095999999992 -37.591942000000003,176.057189999999991 -37.585555999999997,176.062744000000009 -37.580832999999998,176.070800999999989 -37.577781999999999,176.088287000000008 -37.580002,176.095245000000006 -37.576110999999997,176.090239999999994 -37.570838999999999,176.062468999999993 -37.546669,176.023087000000004 -37.528221000000002,176.018767999999994 -37.526057999999999,176.013931000000014 -37.524554999999999,176.007598999999999 -37.524222999999999,175.955535999999995 -37.521110999999998,175.946349999999995 -37.523055999999997,175.940796000000006 -37.527779000000002,175.953583000000009 -37.558891000000003,175.994415000000004 -37.638893000000003,176.071899000000002 -37.655273,176.14498900000001 -37.675277999999999,176.242187999999999 -37.709442000000003,176.267486999999988 -37.676392,176.488281 -37.756667999999998,176.521636999999998 -37.769447,176.527771 -37.773887999999999,176.537475999999998 -37.784447,176.549712999999997 -37.793334999999999,176.656646999999992 -37.855559999999997,176.671082000000013 -37.862502999999997,176.686645999999996 -37.868332000000002,176.759154999999993 -37.892775999999998,176.784149000000014 -37.900275999999998,176.80304000000001 -37.903328000000002,176.819702000000007 -37.904442000000003,176.838287000000008 -37.907501000000003,176.917755 -37.926108999999997,176.943848000000003 -37.932502999999997,177.08273299999999 -37.967216,177.107468000000011 -37.987220999999998,177.159424 -38.013336000000002,177.415253000000007 -37.982498,177.47357199999999 -37.962502,177.545806999999996 -37.919167000000002,177.552459999999996 -37.915000999999997,177.571625000000012 -37.902222000000002,177.599120999999997 -37.878051999999997,177.603577 -37.872498,177.646941999999996 -37.805,177.732178000000005 -37.682502999999997,177.738861000000014 -37.678336999999999,177.746917999999994 -37.675277999999999,177.791931000000005 -37.666946000000003,177.849396000000013 -37.657218999999998,177.858856000000003 -37.656661999999997,177.868010999999996 -37.654442000000003,177.875792999999987 -37.651389999999999,178.0 -37.592224000000002,178.006653 -37.588332999999999,178.012206999999989 -37.583328000000002,178.018004999999988 -37.550831000000002,178.05581699999999 -37.542777999999998,178.064972000000012 -37.542228999999999,178.187744000000009 -37.546951,178.281921000000011 -37.560828999999998,178.306915000000004 -37.568061999999998,178.311919999999986 -37.573334000000003,178.312468999999993 -37.578887999999999,178.306915000000004 -37.583610999999998,178.321075000000008 -37.602500999999997,178.336365 -37.618332000000002,178.34970100000001 -37.626944999999999,178.367737000000005 -37.630828999999999,178.448028999999991 -37.645279000000002,178.457458000000003 -37.646667,178.468018 -37.646949999999997,178.488861000000014 -37.644165,178.497192000000013 -37.646667,178.504424999999998 -37.649994,178.550536999999991 -37.6875,178.555542000000003 -37.692497000000003,178.559692000000013 -37.698883000000002,178.56552099999999 -37.713332999999999,178.562468999999993 -37.719994,178.483306999999996 -37.826393000000003,178.455230999999998 -37.860000999999997,178.449982000000006 -37.865004999999996,178.429687999999999 -37.876944999999999,178.419983000000002 -37.887779000000002,178.350525000000005 -38.004722999999998,178.347473000000008 -38.011116,178.347197999999992 -38.019722000000002,178.348846000000009 -38.027779000000002,178.354950000000002 -38.032218999999998,178.360229000000004 -38.037506,178.364136000000002 -38.043616999999998,178.375792999999987 -38.072777000000002,178.378296000000006 -38.089995999999999,178.377746999999999 -38.09861,178.353850999999992 -38.185555,178.319976999999994 -38.248055,178.318024000000008 -38.255561999999998,178.317474000000004 -38.263893000000003,178.320800999999989 -38.398612999999997,178.302459999999996 -38.528885000000002,178.300536999999991 -38.536391999999999,178.296356000000003 -38.541946000000003,178.158874999999995 -38.649169999999998,178.074982000000006 -38.713889999999999,178.068297999999999 -38.717773,178.060241999999988 -38.721107000000003,178.050812000000008 -38.721381999999998,178.044433999999995 -38.717216,177.928864000000004 -38.722220999999998,177.941070999999994 -38.793616999999998,177.923858999999993 -38.918334999999999,177.917786000000007 -38.942802,177.909697999999992 -38.969718999999998,177.897705000000002 -39.047942999999997,177.893859999999989 -39.064776999999999,177.906708000000009 -39.064278000000002,177.923034999999999 -39.089165,177.942200000000014 -39.091942000000003,177.967743000000013 -39.098334999999999,177.991332999999997 -39.115004999999996,177.996612999999996 -39.120277000000002,177.999390000000005 -39.127495000000003,177.909973000000008 -39.256950000000003,177.898865 -39.267502,177.874968999999993 -39.286118000000002,177.868010999999996 -39.290283000000002,177.861908 -39.285834999999999,177.844970999999987 -39.251396,177.839416999999997 -39.236946000000003,177.824127000000004 -39.193053999999997,177.823577999999998 -39.183883999999999,177.826629999999994 -39.177222999999998,177.841644000000002 -39.152779000000002,177.822021000000007 -39.114445000000003,177.823195999999996 -39.110115,177.82351700000001 -39.105110000000003,177.82119800000001 -39.101275999999999,177.816696000000007 -39.099274,177.680266999999986 -39.075279000000002,177.628845000000013 -39.071114,177.426085999999998 -39.064163,177.387755999999996 -39.077781999999999,177.246917999999994 -39.128334000000002,177.206085000000002 -39.143616000000002,177.149138999999991 -39.165000999999997,177.054961999999989 -39.204445,176.935790999999995 -39.349997999999999,176.931365999999997 -39.355559999999997,176.903870000000012 -39.398055999999997,176.898865 -39.412216,176.89776599999999 -39.438048999999999,176.899414000000007 -39.446387999999999,176.946625000000012 -39.664444000000003,177.01080300000001 -39.654998999999997,177.107178000000005 -39.660828000000002,177.116913000000011 -39.662216,177.120789000000002 -39.66861,177.119110000000006 -39.676108999999997,177.115783999999991 -39.682502999999997,177.08273299999999 -39.729996,177.073577999999998 -39.741385999999999,177.068024000000008 -39.746108999999997,177.059692000000013 -39.749167999999997,177.050262000000004 -39.751396,177.033874999999995 -39.757506999999997,177.028045999999989 -39.762504999999997,177.023590000000013 -39.768059,177.020263999999997 -39.774718999999997,176.894713999999993 -40.034728999999999,176.890533000000005 -40.049728000000002,176.889983999999998 -40.058052000000004,176.89498900000001 -40.082779000000002,176.893035999999995 -40.090279000000002,176.874114999999989 -40.121383999999999,176.834136999999998 -40.181671,176.808319000000012 -40.216659999999997,176.796935999999988 -40.226387000000003,176.687195000000003 -40.321387999999999,176.644135000000006 -40.379997000000003,176.628296000000006 -40.421944000000003,176.539977999999991 -40.495002999999997,176.521362000000011 -40.513893000000003,176.500823999999994 -40.535004,176.441924999999998 -40.600281000000003,176.405243000000013 -40.643889999999999,176.386108000000007 -40.675002999999997,176.35522499999999 -40.688606,176.349396000000013 -40.693610999999997,176.288574000000011 -40.793892,176.239136000000002 -40.90889,176.22079500000001 -40.931671,176.195526 -40.941665999999998,176.172760000000011 -40.952224999999999,176.158600000000007 -40.959999000000003,176.152771 -40.964722000000002,176.142212 -40.975273,176.134154999999993 -40.987502999999997,176.120789000000002 -41.013618,176.11300700000001 -41.035277999999998,176.098297000000002 -41.087218999999997,176.087463000000014 -41.116112,176.080811000000011 -41.129165999999998,176.062195000000003 -41.151938999999999,175.984679999999997 -41.231383999999998,175.955230999999998 -41.255279999999999,175.819121999999993 -41.347220999999998,175.743561 -41.392226999999998,175.736358999999993 -41.396110999999998,175.557738999999998 -41.485000999999997,175.471069 -41.541389000000002,175.427459999999996 -41.564444999999999,175.323028999999991 -41.614449,175.313292999999987 -41.616394,175.230804000000006 -41.620834000000002,175.222197999999992 -41.618332000000002,175.21691899999999 -41.612777999999999,175.184692000000013 -41.535834999999999,175.181915000000004 -41.519447,175.181091000000009 -41.500838999999999,175.188568000000004 -41.461112999999997,175.193024000000008 -41.446106,175.193848000000003 -41.437775000000002,175.191070999999994 -41.430557,175.186095999999992 -41.425002999999997,175.080261000000007 -41.385559,175.063018999999997 -41.380279999999999,175.05304000000001 -41.378608999999997,175.045532000000009 -41.378608999999997,175.027190999999988 -41.381667999999998,174.993286000000012 -41.393332999999998,174.985779000000008 -41.397224,174.972747999999996 -41.405830000000002,174.960509999999999 -41.415275999999999,174.949982000000006 -41.425559999999997,174.944976999999994 -41.431114,174.94165000000001 -41.437775000000002,174.936919999999986 -41.443328999999999,174.918578999999994 -41.448051,174.908600000000007 -41.448334000000003,174.872467 -41.429442999999999,174.86605800000001 -41.425002999999997,174.861084000000005 -41.419724000000002,174.861633000000012 -41.347496,174.863861000000014 -41.340279000000002,174.870789000000002 -41.327224999999999,174.87912 -41.315002,174.883881000000002 -41.309441,174.894440000000003 -41.290000999999997,174.89776599999999 -41.282501000000003,174.899993999999992 -41.275002,174.901916999999997 -41.258338999999999,174.901916999999997 -41.251114,174.898865 -41.234444000000003,174.89498900000001 -41.228050000000003,174.887482000000006 -41.224442000000003,174.827179 -41.218887000000002,174.818848000000003 -41.221938999999999,174.787475999999998 -41.244446000000003,174.778045999999989 -41.255836000000002,174.774414000000007 -41.262222,174.771087999999992 -41.278053,174.778594999999996 -41.281387000000002,174.796082000000013 -41.286949,174.818024000000008 -41.284728999999999,174.824127000000004 -41.289169,174.829407000000003 -41.294724000000002,174.833313000000004 -41.301108999999997,174.832184000000012 -41.309441,174.82995600000001 -41.316665999999998,174.826355000000007 -41.323334000000003,174.821625000000012 -41.328887999999999,174.815796000000006 -41.333610999999998,174.807189999999991 -41.336387999999999,174.744689999999991 -41.347496,174.700531000000012 -41.344444000000003,174.671906000000007 -41.338332999999999,174.654694000000006 -41.333061,174.648314999999997 -41.328612999999997,174.629669000000007 -41.315002,174.59191899999999 -41.27861,174.591644000000002 -41.271385000000002,174.594116000000014 -41.263893000000003,174.601074000000011 -41.250838999999999,174.608306999999996 -41.237777999999999,174.61300700000001 -41.232216,174.619110000000006 -41.23111,174.627746999999999 -41.233887000000003,174.637482000000006 -41.235557999999997,174.648590000000013 -41.234444000000003,174.666931000000005 -41.229720999999998,174.681365999999997 -41.221938999999999,174.694702000000007 -41.213614999999997,174.712738000000002 -41.199440000000003,174.718567000000007 -41.194716999999997,174.800812000000008 -41.100281000000003,174.844421000000011 -41.041671999999998,174.874390000000005 -41.018059,174.882721000000004 -41.015006999999997,174.892486999999988 -41.013061999999998,174.901093000000003 -41.010283999999999,174.908324999999991 -41.006393000000003,174.932189999999991 -40.987502999999997,174.94165000000001 -40.976387000000003,174.945251000000013 -40.969718999999998,174.947478999999987 -40.962218999999997,175.014983999999998 -40.84861,175.09857199999999 -40.755836000000002,175.112731999999994 -40.738892,175.120789000000002 -40.726944000000003,175.127746999999999 -40.713614999999997,175.164153999999996 -40.631943,175.169708000000014 -40.616942999999999,175.171906000000007 -40.609726000000002,175.187468999999993 -40.530830000000002,175.23800700000001 -40.329726999999998,175.23135400000001 -40.280830000000002,175.201629999999994 -40.181671,175.196349999999995 -40.166946000000003,175.178314 -40.134171000000002,175.15554800000001 -40.095832999999999,175.071625000000012 -40.003059,175.055542000000003 -39.987777999999999,175.022217000000012 -39.958053999999997,174.986358999999993 -39.93,174.974120999999997 -39.920836999999999,174.960784999999987 -39.912773,174.938873 -39.902222000000002,174.923034999999999 -39.895836000000003,174.836638999999991 -39.865004999999996,174.828307999999993 -39.862502999999997,174.790802000000014 -39.854720999999998,174.781096999999988 -39.853057999999997,174.751373 -39.865555,174.740509000000003 -39.866661,174.729674999999986 -39.865836999999999,174.57607999999999 -39.829169999999998,174.558013999999986 -39.824722,174.549408 -39.822226999999998,174.542205999999993 -39.818610999999997,174.523865 -39.805,174.421356000000003 -39.726944000000003,174.410521999999986 -39.716942000000003,174.376068000000004 -39.678612,174.353577 -39.639999000000003,174.348846000000009 -39.634444999999999,174.336638999999991 -39.625557,174.316070999999994 -39.613892,174.30886799999999 -39.610283000000003,174.217194000000006 -39.579726999999998,174.208862000000011 -39.577224999999999,174.040802000000014 -39.552779999999998,173.997741999999988 -39.551392,173.986908 -39.550552000000003,173.970245000000006 -39.545279999999998,173.963012999999989 -39.541671999999998,173.871062999999992 -39.483330000000002,173.851898000000006 -39.470551,173.839966000000004 -39.461387999999999,173.810790999999995 -39.4375,173.79525799999999 -39.421944000000003,173.786652000000004 -39.409996,173.775817999999987 -39.390839,173.769713999999993 -39.376944999999999,173.762206999999989 -39.354720999999998,173.754424999999998 -39.305,173.751923000000005 -39.288612,173.751647999999989 -39.269996999999996,173.781921000000011 -39.191383000000002,173.785247999999996 -39.184998,173.800536999999991 -39.169167000000002,173.82995600000001 -39.145836000000003,173.844421000000011 -39.138336000000002,173.868010999999996 -39.128883000000002,173.892761000000007 -39.120552000000004,174.011108000000007 -39.073334000000003,174.114685000000009 -39.024445,174.187744000000009 -38.988608999999997,174.209136999999998 -38.977218999999998,174.226623999999987 -38.972496,174.248016000000007 -38.970551,174.259978999999987 -38.970275999999998,174.281372000000005 -38.969994,174.293029999999987 -38.969994,174.313292999999987 -38.972496,174.351348999999999 -38.979438999999999,174.375244000000009 -38.979163999999997,174.384704999999997 -38.977218999999998,174.392761000000007 -38.974442000000003,174.456359999999989 -38.940277000000002,174.546082000000013 -38.871941,174.557738999999998 -38.860557999999997,174.568024000000008 -38.850281000000003,174.587738000000002 -38.828887999999999,174.594421000000011 -38.815834000000002,174.603302000000014 -38.786118000000002,174.608582000000013 -38.763061999999998,174.625518999999997 -38.677779999999998,174.642486999999988 -38.590836000000003,174.681091000000009 -38.379165999999998,174.724396000000013 -38.185828999999998,174.838561999999996 -38.157218999999998,174.848021999999986 -38.156944000000003,174.85635400000001 -38.154167,174.926636000000002 -38.116112,174.932465000000008 -38.111389000000003,174.940246999999999 -38.101112,174.898590000000013 -38.075004999999997,174.877166999999986 -38.064163,174.892486999999988 -37.976387000000003,174.893585000000002 -37.969994,174.868286000000012 -37.943610999999997,174.861084000000005 -37.939995000000003,174.85522499999999 -37.944716999999997,174.834686000000005 -37.963614999999997,174.830261000000007 -37.969161999999997,174.828033000000005 -37.976661999999997,174.828583000000009 -37.995002999999997,174.822754000000003 -37.999724999999998,174.814696999999995 -38.002502,174.804137999999995 -38.001944999999999,174.797211000000004 -37.998336999999999,174.791077 -37.993614,174.786376999999987 -37.988334999999999,174.783874999999995 -37.980826999999998,174.783600000000007 -37.971663999999997,174.788025000000005 -37.868332000000002,174.788879000000009 -37.860000999999997,174.791077 -37.852783000000002,174.795532000000009 -37.846947,174.819702000000007 -37.829169999999998,174.826629999999994 -37.825279000000002,174.841339000000005 -37.818610999999997,174.872741999999988 -37.806106999999997,174.883330999999998 -37.805,174.903045999999989 -37.807502999999997,174.945251000000013 -37.810555,174.967467999999997 -37.809165999999998,174.975525000000005 -37.806389000000003,174.974975999999998 -37.75,174.974670000000003 -37.740836999999999,174.966644000000002 -37.739998,174.951355000000007 -37.743057,174.94442699999999 -37.745002999999997,174.93081699999999 -37.752502,174.906921000000011 -37.774169999999998,174.870789000000002 -37.783057999999997,174.861633000000012 -37.785004,174.848297000000002 -37.769722000000002,174.828307999999993 -37.710830999999999,174.764160000000004 -37.527779000000002,174.744415000000004 -37.487502999999997,174.724975999999998 -37.447220000000002,174.717467999999997 -37.425002999999997,174.714690999999988 -37.408607000000003,174.714690999999988 -37.399445,174.719116000000014 -37.393616000000002,174.725799999999992 -37.389999000000003,174.744415000000004 -37.385834000000003,174.760528999999991 -37.380279999999999,174.767486999999988 -37.376389000000003,174.773041000000006 -37.371665999999998,174.831635000000006 -37.308052000000004,174.840789999999998 -37.296951,174.840515000000011 -37.291389000000002,174.82995600000001 -37.290557999999997,174.821899000000002 -37.291671999999998,174.812744000000009 -37.293616999999998,174.804687999999999 -37.296393999999999,174.797760000000011 -37.300277999999999,174.766083000000009 -37.321114,174.754700000000014 -37.330559,174.751373 -37.336945,174.744965000000008 -37.359169,174.740509000000003 -37.364722999999998,174.733582000000013 -37.368606999999997,174.724120999999997 -37.368889000000003,174.717194000000006 -37.365279999999998,174.711365 -37.360557999999997,174.701629999999994 -37.349724000000002,174.69442699999999 -37.336945,174.660187000000008 -37.273311999999997,174.645813000000004 -37.236389000000003,174.639709000000011 -37.224442000000003,174.599975999999998 -37.153885000000002,174.578307999999993 -37.115555,174.569976999999994 -37.103614999999998,174.555542000000003 -37.087502,174.551909999999992 -37.080832999999998,174.549712999999997 -37.073616,174.55304000000001 -37.067222999999998,174.558593999999999 -37.0625,174.568848000000003 -37.061385999999999,174.644135000000006 -37.061110999999997,174.661376999999987 -37.065551999999997,174.664977999999991 -37.071944999999999,174.666381999999999 -37.080283999999999,174.661925999999994 -37.085830999999999,174.650542999999999 -37.095275999999998,174.646087999999992 -37.100838000000003,174.648590000000013 -37.108055,174.703856999999999 -37.197777000000002,174.733856000000003 -37.196106,174.716644000000002 -37.154167,174.72357199999999 -37.150275999999998,174.87912 -37.088889999999999,174.887482000000006 -37.059165999999998,174.795532000000009 -37.023055999999997,174.804413000000011 -36.972220999999998,174.824982000000006 -36.960830999999999,174.829407000000003 -36.955002,174.83273299999999 -36.948608,174.828033000000005 -36.943053999999997,174.818848000000003 -36.941383000000002,174.770263999999997 -36.936661,174.696625000000012 -36.93972,174.686095999999992 -36.940834000000002,174.659697999999992 -36.947495000000004,174.653045999999989 -36.951393000000003,174.641662999999994 -36.960830999999999,174.622467 -36.982216,174.619110000000006 -36.988892,174.617187999999999 -36.996108999999997,174.600525000000005 -37.022224,174.524688999999995 -37.045555,174.515533000000005 -37.045555,174.508605999999986 -37.041946000000003,174.502472000000012 -37.037506,174.498016000000007 -37.031944000000003,174.490783999999991 -37.019165,174.484679999999997 -37.005561999999998,174.459228999999993 -36.944031000000003,174.451904000000013 -36.923889000000003,174.446930000000009 -36.909163999999997,174.443024000000008 -36.893616000000002,174.439147999999989 -36.868606999999997,174.436645999999996 -36.852226000000002,174.43386799999999 -36.835555999999997,174.427764999999994 -36.812775000000002,174.422760000000011 -36.798057999999997,174.416655999999989 -36.784171999999998,174.409697999999992 -36.771385000000002,174.406096999999988 -36.765006999999997,174.390533000000005 -36.740279999999998,174.344299000000007 -36.679336999999997,174.301085999999998 -36.62722,174.284973000000008 -36.612777999999999,174.267486999999988 -36.599167,174.236908 -36.568061999999998,174.208862000000011 -36.535277999999998,174.187744000000009 -36.496948000000003,174.17804000000001 -36.467498999999997,174.177764999999994 -36.458336000000003,174.178864000000004 -36.449997000000003,174.181091000000009 -36.442497000000003,174.184417999999994 -36.436110999999997,174.189972000000012 -36.431389000000003,174.196930000000009 -36.427779999999998,174.20495600000001 -36.428612,174.24383499999999 -36.440834000000002,174.251923000000005 -36.443610999999997,174.257751000000013 -36.448051,174.300262000000004 -36.515839,174.348846000000009 -36.601944000000003,174.367919999999998 -36.629165999999998,174.370728000000014 -36.6325,174.422484999999995 -36.667220999999998,174.430542000000003 -36.668059999999997,174.453033000000005 -36.651108,174.456359999999989 -36.644722000000002,174.465515000000011 -36.582779000000002,174.465515000000011 -36.532218999999998,174.442474000000004 -36.414718999999998,174.422211000000004 -36.366112,174.41885400000001 -36.370834000000002,174.391937000000013 -36.395004,174.384978999999987 -36.398887999999999,174.377166999999986 -36.401665,174.303864000000004 -36.395279000000002,174.296935999999988 -36.391669999999998,174.285247999999996 -36.3825,174.276916999999997 -36.370552000000004,174.26998900000001 -36.357779999999998,174.268585000000002 -36.349442000000003,174.268585000000002 -36.342224000000002,174.292205999999993 -36.316947999999996,174.299988000000013 -36.314163,174.308013999999986 -36.316947999999996,174.325531000000012 -36.330283999999999,174.334686000000005 -36.332222000000002,174.36883499999999 -36.331673000000002,174.376891999999998 -36.330832999999998,174.421248999999989 -36.310611999999999,174.50692699999999 -36.267220000000002,174.518311000000011 -36.258057,174.521636999999998 -36.251396,174.519135000000006 -36.245834000000002,174.505248999999992 -36.231383999999998,174.413299999999992 -36.263061999999998,174.378296000000006 -36.286667,174.364685000000009 -36.294167000000002,174.346619000000004 -36.298057999999997,174.336365 -36.298889000000003,174.305237000000005 -36.287506,174.365233999999987 -36.260002,174.442200000000014 -36.169724000000002,174.396087999999992 -36.144447,174.396362000000011 -36.151938999999999,174.394135000000006 -36.159163999999997,174.373290999999995 -36.206389999999999,174.369965000000008 -36.213057999999997,174.358856000000003 -36.222220999999998,174.345245000000006 -36.229720999999998,174.337463000000014 -36.232773000000002,174.33273299999999 -36.229163999999997,174.307738999999998 -36.176949,174.282745000000006 -36.121108999999997,174.274993999999992 -36.118332000000002,174.239409999999992 -36.111389000000003,174.229126000000008 -36.112502999999997,174.195251000000013 -36.131110999999997,174.188568000000004 -36.144165,174.185790999999995 -36.171944000000003,174.191345000000013 -36.176392,174.19830300000001 -36.18,174.217743000000013 -36.182502999999997,174.226898000000006 -36.182502999999997,174.236084000000005 -36.180557,174.244110000000006 -36.183059999999998,174.287749999999988 -36.210281000000002,174.312468999999993 -36.236663999999998,174.314696999999995 -36.243889000000003,174.267212 -36.270279000000002,174.259430000000009 -36.273055999999997,174.251373 -36.272499000000003,174.065796000000006 -36.168334999999999,173.999114999999989 -36.121108999999997,173.994415000000004 -36.115836999999999,173.99105800000001 -36.109444000000003,173.931091000000009 -35.981940999999999,173.938568000000004 -35.934998,173.947478999999987 -35.923889000000003,173.948577999999998 -35.915550000000003,173.946075000000008 -35.908051,173.913879000000009 -35.86972,173.908324999999991 -35.874442999999999,173.903870000000012 -35.879997000000003,173.904967999999997 -35.888336000000002,173.921356000000003 -36.003059,173.980804000000006 -36.121383999999999,173.987731999999994 -36.134171000000002,173.992461999999989 -36.139724999999999,174.124390000000005 -36.263618,174.176085999999998 -36.276947,174.180542000000003 -36.282501000000003,174.198853000000014 -36.343887000000002,174.199982000000006 -36.352226000000002,174.198028999999991 -36.368606999999997,174.194702000000007 -36.375275000000002,174.189147999999989 -36.379722999999998,174.115233999999987 -36.40361,174.089966000000004 -36.411385000000003,174.080811000000011 -36.409438999999999,174.06942699999999 -36.400275999999998,174.065796000000006 -36.393889999999999,174.057465000000008 -36.374718,174.049133000000012 -36.353614999999998,174.044433999999995 -36.338889999999999,174.039703000000003 -36.323334000000003,174.031096999999988 -36.293059999999997,174.020537999999988 -36.273887999999999,173.82607999999999 -36.032501000000003,173.737457000000006 -35.933608999999997,173.727172999999993 -35.923614999999998,173.590515000000011 -35.778053,173.398865 -35.573891000000003,173.395537999999988 -35.567504999999997,173.398865 -35.553612,173.446625000000012 -35.440277000000002,173.465789999999998 -35.429169000000002,173.501923000000005 -35.419724000000002,173.506378000000012 -35.425277999999999,173.540253000000007 -35.430832000000002,173.629943999999995 -35.356667000000002,173.65554800000001 -35.322502,173.65554800000001 -35.313332000000003,173.564147999999989 -35.278053,173.556091000000009 -35.280830000000002,173.551636000000002 -35.286391999999999,173.549712999999997 -35.302779999999998,173.549712999999997 -35.321114,173.551909999999992 -35.328612999999997,173.566924999999998 -35.344161999999997,173.568024000000008 -35.361671,173.566924999999998 -35.36972,173.559143000000006 -35.372771999999998,173.439696999999995 -35.376106,173.416077 -35.384444999999999,173.410247999999996 -35.388893000000003,173.391356999999999 -35.423057999999997,173.39498900000001 -35.449722,173.396087999999992 -35.458053999999997,173.392761000000007 -35.482773000000002,173.386382999999995 -35.523330999999999,173.380524000000008 -35.528053,173.37384 -35.524169999999998,173.306915000000004 -35.449165,173.237731999999994 -35.370277000000002,173.154144000000002 -35.276665,173.103302000000014 -35.226104999999997,173.09191899999999 -35.216942000000003,173.087463000000014 -35.211387999999999,173.09191899999999 -35.1875,173.098846000000009 -35.183608999999997,173.119110000000006 -35.185555,173.12802099999999 -35.1875,173.134704999999997 -35.191108999999997,173.14498900000001 -35.191940000000002,173.152771 -35.189163,173.163879000000009 -35.179169000000002,173.168578999999994 -35.173614999999998,173.18081699999999 -35.156104999999997,173.187468999999993 -35.143332999999998,173.191924999999998 -35.128334000000002,173.196349999999995 -35.104446000000003,173.197478999999987 -35.09639,173.198577999999998 -35.078887999999999,173.198577999999998 -35.051108999999997,173.193848000000003 -35.027222000000002,173.189423000000005 -35.012779000000002,173.179413000000011 -34.993332000000002,173.175812000000008 -34.986946000000003,173.159149000000014 -34.958336000000003,173.151093000000003 -34.946663,173.137755999999996 -34.93,172.947204999999997 -34.716942000000003,172.828033000000005 -34.584442000000003,172.812468999999993 -34.568893000000003,172.722473000000008 -34.495277000000002,172.739136000000002 -34.435555,172.900817999999987 -34.414718999999998,172.911925999999994 -34.414718999999998,173.020813000000004 -34.422226000000002,173.038879000000009 -34.436942999999999,173.043304000000006 -34.517775999999998,173.039977999999991 -34.522224,173.033324999999991 -34.525832999999999,173.024414000000007 -34.527779000000002,173.016662999999994 -34.52861,173.007476999999994 -34.526947,172.997467 -34.498336999999999,172.984130999999991 -34.472771000000002,172.961914000000007 -34.465279000000002,172.955230999999998 -34.468887000000002,172.908324999999991 -34.544167000000002,172.912749999999988 -34.549728000000002,172.923858999999993 -34.558891000000003,172.936095999999992 -34.567222999999998,172.973021999999986 -34.581116000000002,173.053314 -34.665550000000003,173.057738999999998 -34.680283000000003,173.110503999999992 -34.791389000000002,173.120789000000002 -34.810555,173.128570999999994 -34.822502,173.133026 -34.828055999999997,173.13857999999999 -34.832504,173.151916999999997 -34.839995999999999,173.213593000000003 -34.871941,173.242737000000005 -34.884726999999998,173.273314999999997 -34.940834000000002,173.268859999999989 -34.946387999999999,173.262206999999989 -34.959167,173.259978999999987 -34.966659999999997,173.258881000000002 -34.974716,173.259978999999987 -34.983055,173.264709000000011 -35.014449999999997,173.269135000000006 -35.019722000000002,173.317474000000004 -35.018889999999999,173.328583000000009 -35.009444999999999,173.358856000000003 -34.98111,173.36300700000001 -34.975555,173.366364000000004 -34.968887000000002,173.373259999999988 -34.936774999999997,173.371246000000014 -34.927444,173.400817999999987 -34.863334999999999,173.426085999999998 -34.82,173.450806 -34.807777000000002,173.500274999999988 -34.864722999999998,173.499114999999989 -34.871108999999997,173.492461999999989 -34.874718,173.452453999999989 -34.887779000000002,173.443297999999999 -34.889724999999999,173.433319000000012 -34.890555999999997,173.413025000000005 -34.888893000000003,173.405243000000013 -34.892502,173.399719000000005 -34.897224,173.399719000000005 -34.906387000000002,173.402190999999988 -34.913887000000003,173.411590999999987 -34.931778,173.419128 -34.945830999999998,173.426909999999992 -34.957779000000002,173.431641000000013 -34.963332999999999,173.44165000000001 -34.973328000000002,173.454131999999987 -34.981667000000002,173.467467999999997 -34.988892,173.475525000000005 -34.991669000000002,173.493286000000012 -34.995277000000002,173.541655999999989 -34.988608999999997,173.561645999999996 -34.958893000000003,173.562468999999993 -34.950836000000002,173.566924999999998 -34.936110999999997,173.572478999999987 -34.931389000000003,173.579131999999987 -34.927779999999998,173.589416999999997 -34.928612,173.83914200000001 -35.004173000000002,174.101074000000011 -35.121108999999997,174.098297000000002 -35.161667,174.091644000000002 -35.158051,174.056641000000013 -35.155555999999997,174.021911999999986 -35.164161999999997,174.008026 -35.207504,174.008026 -35.215004,174.011382999999995 -35.221381999999998,174.018311000000011 -35.224997999999999,174.093841999999995 -35.225273,174.100525000000005 -35.228881999999999,174.143585000000002 -35.328612999999997,174.208008000000007 -35.323334000000003,174.218018 -35.322226999999998,174.247741999999988 -35.27861,174.319976999999994 -35.232773000000002,174.383881000000002 -35.337775999999998,174.461638999999991 -35.445273999999998,174.491913000000011 -35.485275,174.575806 -35.601944000000003,174.577179 -35.610000999999997,174.577147999999994 -35.618088,174.569976999999994 -35.648055999999997,174.563292999999987 -35.651665,174.530272999999994 -35.649445,174.520263999999997 -35.648612999999997,174.513306 -35.645004,174.505248999999992 -35.642502,174.479126000000008 -35.641945,174.47357199999999 -35.646393000000003,174.474975999999998 -35.654716,174.518311000000011 -35.724167,174.523041000000006 -35.729438999999999,174.554137999999995 -35.750281999999999,174.561919999999986 -35.753059,174.583862000000011 -35.764724999999999,174.60244800000001 -35.844444000000003,174.596924 -35.849167,174.58914200000001 -35.851944000000003,174.577758999999986 -35.852226000000002,174.560790999999995 -35.847777999999998,174.554961999999989 -35.843330000000002,174.538574000000011 -35.819450000000003,174.523314999999997 -35.796669,174.519713999999993 -35.790283000000002,174.49105800000001 -35.769447,174.361908 -35.723328000000002,174.357451999999995 -35.72361,174.34857199999999 -35.734726000000002,174.346924 -35.833061,174.350525000000005 -35.839438999999999,174.35522499999999 -35.845001000000003,174.360779000000008 -35.849442000000003,174.381348000000003 -35.851112,174.384704999999997 -35.844718999999998,174.385528999999991 -35.828887999999999,174.391083000000009 -35.824173000000002,174.398865 -35.821387999999999,174.437468999999993 -35.822777000000002,174.476074000000011 -35.824173000000002,174.486358999999993 -35.824722,174.519713999999993 -35.844718999999998,174.525542999999999 -35.849167,174.524414000000007 -35.855559999999997,174.521362000000011 -35.862220999999998,174.501373 -35.889999000000003,174.496917999999994 -35.895553999999997,174.487182999999987 -35.915000999999997,174.495513999999986 -35.988608999999997,174.498016000000007 -35.994163999999998,174.514160000000004 -36.008614,174.56942699999999 -36.037224000000002,174.578583000000009 -36.038894999999997,174.587738000000002 -36.038894999999997,174.596619000000004 -36.036667,174.606902999999988 -36.037506,174.612731999999994 -36.042228999999999,174.622192000000013 -36.053055,174.62912 -36.065834000000002,174.629394999999988 -36.075004999999997,174.616364000000004 -36.100861000000002)),((171.185241999999988 -44.938332000000003,171.182129000000003 -44.94173,171.175017999999994 -44.949902000000002,171.167923000000002 -44.959850000000003,171.165436 -44.966599000000002,171.164703000000003 -44.970275999999998,171.163299999999992 -44.978332999999999,171.149719000000005 -44.996665999999998,171.07995600000001 -45.067222999999998,171.02664200000001 -45.103332999999999,170.975525000000005 -45.151108,170.966063999999989 -45.163055,170.961914000000007 -45.169167000000002,170.921630999999991 -45.243057,170.873566000000011 -45.358055,170.873290999999995 -45.367218,170.876891999999998 -45.373885999999999,170.871338000000009 -45.424171,170.859955000000014 -45.487502999999997,170.855804000000006 -45.493889000000003,170.750274999999988 -45.61972,170.674682999999987 -45.745002999999997,170.616913000000011 -45.839438999999999,170.55886799999999 -45.881667999999998,170.554413000000011 -45.888053999999997,170.555542000000003 -45.896110999999998,170.591063999999989 -45.894165,170.600525000000005 -45.891669999999998,170.608582000000013 -45.888053999999997,170.658600000000007 -45.858612,170.718018 -45.817504999999997,170.724670000000003 -45.813057,170.773314999999997 -45.782775999999998,170.781096999999988 -45.786391999999999,170.790802000000014 -45.806946000000003,170.790802000000014 -45.84639,170.788879000000009 -45.863892,170.783051 -45.878334000000002,170.776366999999993 -45.882773999999998,170.699982000000006 -45.911667,170.664429000000013 -45.908332999999999,170.57330300000001 -45.916663999999997,170.550536999999991 -45.919167000000002,170.484406000000007 -45.926949,170.452453999999989 -45.931946000000003,170.424408 -45.939438000000003,170.382721000000004 -45.956108,170.342467999999997 -45.97361,170.315246999999999 -45.991385999999999,170.309692000000013 -45.996948000000003,170.294433999999995 -46.013893000000003,170.281646999999992 -46.029442000000003,170.263610999999997 -46.051940999999999,170.256378000000012 -46.065551999999997,170.253051999999997 -46.081947,170.252472000000012 -46.09111,170.254424999999998 -46.107779999999998,170.252777000000009 -46.115836999999999,170.240783999999991 -46.146949999999997,170.237731999999994 -46.154167,170.226623999999987 -46.165000999999997,170.214416999999997 -46.174720999999998,170.193848000000003 -46.188048999999999,170.169433999999995 -46.198608,170.067748999999992 -46.246665999999998,169.911925999999994 -46.340279000000002,169.863585999999998 -46.371383999999999,169.858001999999999 -46.376663,169.849396000000013 -46.389442000000003,169.848021999999986 -46.416946000000003,169.849975999999998 -46.433326999999998,169.852172999999993 -46.440834000000002,169.853850999999992 -46.457504,169.850799999999992 -46.464722000000002,169.845245000000006 -46.469994,169.701904000000013 -46.558052000000004,169.631348000000003 -46.581947,169.458008000000007 -46.623328999999998,169.266388000000006 -46.656387000000002,169.133026 -46.670836999999999,169.107727000000011 -46.669167000000002,169.097197999999992 -46.666946000000003,169.084411999999986 -46.657501000000003,169.067200000000014 -46.635002,169.061919999999986 -46.675002999999997,169.053864000000004 -46.678612,169.008026 -46.680832000000002,168.883330999999998 -46.667777999999998,168.878296000000006 -46.661942000000003,168.861908 -46.628334000000002,168.862457000000006 -46.619446000000003,168.864409999999992 -46.611114999999998,168.864959999999996 -46.603889000000002,168.844970999999987 -46.563614,168.835784999999987 -46.560555,168.823853000000014 -46.561110999999997,168.733306999999996 -46.577499000000003,168.640533000000005 -46.603889000000002,168.633605999999986 -46.606392,168.614685000000009 -46.611114999999998,168.593018 -46.614165999999997,168.568848000000003 -46.615004999999996,168.516937000000013 -46.614165999999997,168.492737000000005 -46.613334999999999,168.442138999999997 -46.601500999999999,168.436630000000008 -46.599666999999997,168.446625000000012 -46.584003000000003,168.442200000000014 -46.575004999999997,168.454407000000003 -46.574447999999997,168.490509000000003 -46.573059,168.502472000000012 -46.574173000000002,168.506103999999993 -46.578887999999999,168.499114999999989 -46.583328000000002,168.505553999999989 -46.588051,168.551636000000002 -46.594444000000003,168.561371000000008 -46.591942000000003,168.566924999999998 -46.586661999999997,168.563599000000011 -46.580002,168.550812000000008 -46.570557,168.541655999999989 -46.567504999999997,168.391356999999999 -46.540000999999997,168.361908 -46.544449,168.353577 -46.547783000000003,168.351623999999987 -46.556106999999997,168.352172999999993 -46.564444999999999,168.362731999999994 -46.583885000000002,168.348236000000014 -46.582165000000003,168.352904999999993 -46.584499,168.359267999999986 -46.585830999999999,168.365082 -46.592666999999999,168.367248999999987 -46.596668,168.367599000000013 -46.601497999999999,168.364928999999989 -46.605331,168.35775799999999 -46.604500000000002,168.351409999999987 -46.603164999999997,168.275269000000009 -46.557777000000002,168.269135000000006 -46.535561,168.268311000000011 -46.529167,168.27664200000001 -46.525832999999999,168.286102 -46.523330999999999,168.307738999999998 -46.520553999999997,168.318297999999999 -46.520836000000003,168.318848000000003 -46.529167,168.321075000000008 -46.536667,168.328856999999999 -46.540557999999997,168.339416999999997 -46.539169,168.386658000000011 -46.497779999999999,168.392486999999988 -46.492226000000002,168.395537999999988 -46.485000999999997,168.396087999999992 -46.477775999999999,168.394135000000006 -46.470275999999998,168.37384 -46.421944000000003,168.36883499999999 -46.416106999999997,168.359679999999997 -46.415000999999997,168.350249999999988 -46.417503000000004,168.250274999999988 -46.400832999999999,168.211090000000013 -46.355277999999998,168.206085000000002 -46.351394999999997,168.194702000000007 -46.345551,168.185516000000007 -46.342498999999997,168.174988000000013 -46.340279000000002,168.116364000000004 -46.343612999999998,168.063873 -46.351669,167.955535999999995 -46.371383999999999,167.893035999999995 -46.387222,167.850799999999992 -46.399445,167.832184000000012 -46.398612999999997,167.824401999999992 -46.394447,167.753875999999991 -46.333885000000002,167.776916999999997 -46.312775000000002,167.781372000000005 -46.306389000000003,167.783600000000007 -46.298340000000003,167.781372000000005 -46.290840000000003,167.778045999999989 -46.284171999999998,167.701904000000013 -46.209442000000003,167.596924 -46.166389000000002,167.556641000000013 -46.156387000000002,167.546356000000003 -46.154167,167.534424 -46.152779000000002,167.483032000000009 -46.149726999999999,167.471069 -46.149994,167.460236000000009 -46.151389999999999,167.451904000000013 -46.154716,167.446075000000008 -46.159996,167.415526999999997 -46.204720000000002,167.356628 -46.254447999999996,167.280272999999994 -46.273055999999997,167.261108000000007 -46.267775999999998,167.238555999999988 -46.263893000000003,167.086638999999991 -46.240555,167.001373 -46.229163999999997,166.966063999999989 -46.224716,166.949982000000006 -46.223885000000003,166.915253000000007 -46.226104999999997,166.883026 -46.229996,166.836365 -46.232498,166.823028999999991 -46.231667000000002,166.768035999999995 -46.22361,166.726348999999999 -46.214165,166.717467999999997 -46.210830999999999,166.705230999999998 -46.201110999999997,166.670806999999996 -46.161667,166.67025799999999 -46.15361,166.684417999999994 -46.145004,166.693848000000003 -46.142775999999998,166.709411999999986 -46.135277000000002,166.738861000000014 -46.119163999999998,166.761230000000012 -46.093612999999998,166.784911999999991 -46.064945000000002,166.804748999999987 -46.033279,166.82995600000001 -46.003891000000003,166.854674999999986 -45.994163999999998,166.886932000000002 -45.990279999999998,166.943297999999999 -45.956108,166.949127000000004 -45.950836000000002,166.946930000000009 -45.945273999999998,166.939147999999989 -45.944716999999997,166.929687999999999 -45.947220000000002,166.836365 -45.981383999999998,166.828033000000005 -45.984444000000003,166.791350999999992 -46.005004999999997,166.785797000000002 -46.010283999999999,166.781096999999988 -46.016396,166.759308000000004 -46.035553,166.762969999999996 -46.038387,166.764969000000008 -46.042392999999997,166.763656999999995 -46.047221999999998,166.760162000000008 -46.050392000000002,166.740982000000002 -46.066059000000003,166.737793000000011 -46.066558999999998,166.670532000000009 -46.087218999999997,166.615783999999991 -46.090836000000003,166.613585999999998 -46.086387999999999,166.617461999999989 -46.059722999999998,166.621062999999992 -46.052498,166.640807999999993 -46.015006999999997,166.661652000000004 -45.991942999999999,166.625792999999987 -45.967216,166.492461999999989 -46.013061999999998,166.484406000000007 -46.014449999999997,166.474975999999998 -46.002785000000003,166.467194000000006 -45.990555,166.465239999999994 -45.983055,166.464690999999988 -45.839438999999999,166.468841999999995 -45.823059,166.472473000000008 -45.815834000000002,166.476898000000006 -45.809722999999998,166.537475999999998 -45.798889000000003,166.613861000000014 -45.801108999999997,166.652190999999988 -45.800277999999999,166.699982000000006 -45.798889000000003,166.881348000000003 -45.779998999999997,166.890807999999993 -45.777779000000002,166.974120999999997 -45.735000999999997,166.987182999999987 -45.709724,166.923034999999999 -45.705832999999998,166.912475999999998 -45.705275999999998,166.887482000000006 -45.705002,166.854126000000008 -45.707779000000002,166.825806 -45.714722000000002,166.809417999999994 -45.721381999999998,166.787475999999998 -45.689995000000003,166.775817999999987 -45.662773,166.81153900000001 -45.617942999999997,166.811217999999997 -45.613109999999999,166.812531000000007 -45.608111999999998,166.816710999999998 -45.605606000000002,166.869689999999991 -45.588779000000002,166.881026999999989 -45.586112999999997,166.88736 -45.585278000000002,166.895203000000009 -45.585608999999998,166.901366999999993 -45.587108999999998,166.912871999999993 -45.590946000000002,166.980255 -45.578612999999997,166.991913000000011 -45.580002,167.0 -45.576949999999997,167.005829000000006 -45.571671000000002,167.032470999999987 -45.527779000000002,167.041350999999992 -45.501396,166.989685000000009 -45.519165,166.891693000000004 -45.544724000000002,166.796875 -45.569389,166.791199000000006 -45.570720999999999,166.784836000000013 -45.571556,166.777023000000014 -45.571219999999997,166.710509999999999 -45.579445,166.704407000000003 -45.574447999999997,166.697204999999997 -45.554718,166.699127000000004 -45.546669,166.757476999999994 -45.425277999999999,166.801361000000014 -45.353614999999998,166.821625000000012 -45.320557,166.86883499999999 -45.279724000000002,166.880797999999999 -45.279167,167.008330999999998 -45.341667,167.038299999999992 -45.357779999999998,167.146941999999996 -45.427222999999998,167.16885400000001 -45.472496,167.205230999999998 -45.477775999999999,167.211914000000007 -45.475273,167.21414200000001 -45.467216,167.209411999999986 -45.461387999999999,167.173584000000005 -45.422775,167.158019999999993 -45.406661999999997,167.134978999999987 -45.386116,167.12912 -45.381385999999999,167.115509000000003 -45.372222999999998,167.097747999999996 -45.366112,167.087463000000014 -45.363616999999998,167.061645999999996 -45.345001000000003,167.051085999999998 -45.333328000000002,167.081421000000006 -45.325333,167.08407600000001 -45.321666999999998,167.092407000000009 -45.316498000000003,167.097243999999989 -45.314498999999998,167.114227 -45.310333,167.163574000000011 -45.302833999999997,167.169922000000014 -45.302998000000002,167.173584000000005 -45.305999999999997,167.176422000000002 -45.309330000000003,167.17756700000001 -45.313834999999997,167.212738000000002 -45.313332000000003,167.218841999999995 -45.318336000000002,167.232178000000005 -45.327224999999999,167.239685000000009 -45.331116000000002,167.248566000000011 -45.334167,167.260254000000003 -45.335830999999999,167.270813000000004 -45.334442000000003,167.301636000000002 -45.329445,167.309692000000013 -45.326110999999997,167.307738999999998 -45.318610999999997,167.300262000000004 -45.314444999999999,167.19464099999999 -45.271445999999997,167.138290000000012 -45.268943999999998,167.099471999999992 -45.272114000000002,167.094146999999992 -45.271278000000002,167.08964499999999 -45.268776000000003,167.002196999999995 -45.201110999999997,166.996917999999994 -45.145836000000003,167.146362000000011 -45.001671000000002,167.198577999999998 -44.956108,167.204407000000003 -44.951110999999997,167.228302000000014 -44.930832000000002,167.24105800000001 -44.921387000000003,167.260528999999991 -44.907501000000003,167.267486999999988 -44.903053,167.312744000000009 -44.875,167.320800999999989 -44.871383999999999,167.393462999999997 -44.862999000000002,167.398987000000005 -44.861496000000002,167.404312000000004 -44.863498999999997,167.421798999999993 -44.894168999999998,167.422974000000011 -44.898665999999999,167.420638999999994 -44.908496999999997,167.417968999999999 -44.912166999999997,167.440796000000006 -44.928612,167.439972000000012 -44.9375,167.441924999999998 -44.945,167.459686000000005 -44.99472,167.497741999999988 -45.003891000000003,167.507202000000007 -45.001396,167.508224000000013 -45.0,167.511658000000011 -44.995277000000002,167.511108000000007 -44.986946000000003,167.47908000000001 -44.903446000000002,167.465912000000003 -44.876441999999997,167.462752999999992 -44.867947,167.461578000000003 -44.863444999999999,167.460097999999988 -44.853946999999998,167.459411999999986 -44.843944999999998,167.459914999999995 -44.838444000000003,167.448577999999998 -44.795279999999998,167.453033000000005 -44.788894999999997,167.458587999999992 -44.783614999999998,167.59970100000001 -44.683883999999999,167.743010999999996 -44.611671,167.838866999999993 -44.498610999999997,167.850249999999988 -44.488052000000003,167.949982000000006 -44.40361,167.963593000000003 -44.395004,168.034973000000008 -44.353614999999998,168.12802099999999 -44.316947999999996,168.141662999999994 -44.308052000000004,168.144713999999993 -44.300834999999999,168.144135000000006 -44.292503000000004,168.124099999999999 -44.251404,168.143311000000011 -44.253059,168.153594999999996 -44.251396,168.169708000000014 -44.24472,168.288299999999992 -44.172775,168.29385400000001 -44.167503000000004,168.336638999999991 -44.123885999999999,168.339966000000004 -44.116661,168.337738000000002 -44.109169,168.334411999999986 -44.102783000000002,168.336365 -44.094444000000003,168.369689999999991 -44.043334999999999,168.374968999999993 -44.037781000000003,168.383026 -44.034447,168.402771 -44.029724000000002,168.672211000000004 -43.987777999999999,168.676909999999992 -43.993614,168.683043999999995 -43.998336999999999,168.690246999999999 -44.002228000000002,168.715239999999994 -44.012222,168.723021999999986 -44.012504999999997,168.753875999999991 -44.010002,168.764160000000004 -44.008614,168.824401999999992 -43.988334999999999,168.858582000000013 -43.976661999999997,168.866364000000004 -43.973328000000002,168.879669000000007 -43.964447,168.885254000000003 -43.959167,168.961914000000007 -43.90361,169.080765000000014 -43.848472999999998,169.142212 -43.794167000000002,169.224396000000013 -43.743332000000002,169.271636999999998 -43.722496,169.387482000000006 -43.679169000000002,169.491318000000007 -43.643467,169.539153999999996 -43.633614,169.62661700000001 -43.613892,169.64498900000001 -43.608893999999999,169.652771 -43.605559999999997,169.660521999999986 -43.601944000000003,169.721619000000004 -43.573334000000003,169.728302000000014 -43.568893000000003,169.739136000000002 -43.558052000000004,169.767486999999988 -43.522773999999998,169.790526999999997 -43.496665999999998,169.871062999999992 -43.406661999999997,169.884154999999993 -43.397781000000002,169.961638999999991 -43.371941,170.021911999999986 -43.352500999999997,170.028594999999996 -43.347777999999998,170.033874999999995 -43.342498999999997,170.038025000000005 -43.336112999999997,170.049408 -43.306946000000003,170.111358999999993 -43.254173000000002,170.288299999999992 -43.107779999999998,170.418029999999987 -43.052498,170.523041000000006 -43.010559,170.531921000000011 -43.008057,170.583037999999988 -42.990555,170.674347000000012 -42.958739999999999,170.704407000000003 -42.945830999999998,170.750549000000007 -42.924720999999998,170.781096999999988 -42.910553,170.794128 -42.901389999999999,171.065796000000006 -42.648055999999997,171.108306999999996 -42.608055,171.149719000000005 -42.563614,171.153594999999996 -42.55722,171.196075000000008 -42.476661999999997,171.225799999999992 -42.433608999999997,171.230255 -42.40889,171.235779000000008 -42.394165,171.247467 -42.375,171.260254000000003 -42.366112,171.270537999999988 -42.355003000000004,171.297760000000011 -42.310279999999999,171.304413000000011 -42.296669,171.309692000000013 -42.281944000000003,171.31665000000001 -42.249724999999998,171.321075000000008 -42.224716,171.322754000000003 -42.207222000000002,171.324401999999992 -42.18972,171.326355000000007 -42.172226000000002,171.329131999999987 -42.155830000000002,171.343841999999995 -42.110832000000002,171.361084000000005 -42.067779999999999,171.461638999999991 -41.859726000000002,171.51080300000001 -41.764449999999997,171.533051 -41.766396,171.557738999999998 -41.766663,171.569121999999993 -41.766112999999997,171.650817999999987 -41.761391000000003,171.663025000000005 -41.757781999999999,171.685790999999995 -41.746948000000003,171.790526999999997 -41.696387999999999,171.85522499999999 -41.652779000000002,171.886658000000011 -41.629997000000003,171.942200000000014 -41.550277999999999,172.02276599999999 -41.443053999999997,172.053864000000004 -41.417503000000004,172.064972000000012 -41.40361,172.122192000000013 -41.277779000000002,172.111633000000012 -41.236114999999998,172.10522499999999 -41.153053,172.106078999999994 -40.911385000000003,172.10635400000001 -40.893059,172.108856000000003 -40.885559,172.113861000000014 -40.879997000000003,172.186645999999996 -40.813332000000003,172.218567000000007 -40.785834999999999,172.22470100000001 -40.781109,172.255248999999992 -40.776947,172.263884999999988 -40.774169999999998,172.271362000000011 -40.770553999999997,172.299408 -40.755004999999997,172.348297000000002 -40.727493000000003,172.382721000000004 -40.698334000000003,172.426909999999992 -40.657775999999998,172.478302000000014 -40.613892,172.513320999999991 -40.598441999999999,172.517639000000003 -40.596783000000002,172.523482999999999 -40.597946,172.522644000000014 -40.602943000000003,172.521132999999992 -40.607277000000003,172.520813000000004 -40.625,172.519440000000003 -40.631385999999999,172.525542999999999 -40.6325,172.534149000000014 -40.631667999999998,172.571899000000002 -40.617775000000002,172.596343999999988 -40.601394999999997,172.62802099999999 -40.573891000000003,172.631621999999993 -40.567222999999998,172.631621999999993 -40.559998,172.608582000000013 -40.556946000000003,172.601348999999999 -40.558891000000003,172.597014999999999 -40.553333000000002,172.589690999999988 -40.558838000000002,172.583862000000011 -40.560004999999997,172.581024000000014 -40.556671,172.581848000000008 -40.551665999999997,172.589843999999999 -40.541172000000003,172.627166999999986 -40.511947999999997,172.633330999999998 -40.509171000000002,172.661376999999987 -40.502785000000003,172.712188999999995 -40.495552000000004,172.817748999999992 -40.504173000000002,172.861358999999993 -40.507781999999999,172.981628 -40.527222000000002,172.991332999999997 -40.529167,172.989959999999996 -40.53389,172.978026999999997 -40.53389,172.945251000000013 -40.530830000000002,172.895263999999997 -40.524445,172.797211000000004 -40.516112999999997,172.739959999999996 -40.516945,172.731628 -40.519722000000002,172.656921000000011 -40.653328000000002,172.701355000000007 -40.748336999999999,172.855804000000006 -40.853057999999997,172.865509000000003 -40.853057999999997,172.875244000000009 -40.851112,172.907195999999999 -40.828887999999999,172.930266999999986 -40.802222999999998,172.935241999999988 -40.796669,172.976623999999987 -40.781944000000003,172.985229000000004 -40.781112999999998,173.002196999999995 -40.786667,173.008330999999998 -40.791114999999998,173.013306 -40.796669,173.020537999999988 -40.809722999999998,173.051085999999998 -40.869446000000003,173.059692000000013 -40.962775999999998,173.059692000000013 -40.971938999999999,173.056091000000009 -40.978606999999997,173.031646999999992 -41.027495999999999,173.075806 -41.291114999999998,173.079680999999994 -41.297500999999997,173.085784999999987 -41.302222999999998,173.105529999999987 -41.313332000000003,173.168029999999987 -41.316108999999997,173.188873 -41.313332000000003,173.198853000000014 -41.311385999999999,173.207184000000012 -41.308608999999997,173.272217000000012 -41.274445,173.278320000000008 -41.269722000000002,173.32607999999999 -41.222496,173.340515000000011 -41.205832999999998,173.351623999999987 -41.195549,173.377166999999986 -41.178055,173.426085999999998 -41.150275999999998,173.598021999999986 -41.053612,173.606628 -41.052498,173.639709000000011 -41.073616,173.672760000000011 -41.070557,173.720519999999993 -41.060279999999999,173.727753000000007 -41.056389000000003,173.739959999999996 -41.047226000000002,173.744689999999991 -41.032501000000003,173.743286000000012 -41.024169999999998,173.738281 -41.018608,173.72744800000001 -41.019447,173.718841999999995 -41.022499000000003,173.696930000000009 -41.033614999999998,173.690796000000006 -41.038338000000003,173.682189999999991 -41.041114999999998,173.676085999999998 -41.036391999999999,173.673584000000005 -41.029167,173.674682999999987 -41.020836000000003,173.678314 -41.014449999999997,173.696625000000012 -41.000281999999999,173.751373 -40.976944000000003,173.800262000000004 -40.969161999999997,173.913299999999992 -40.931671,173.984679999999997 -40.896949999999997,173.994415000000004 -40.896667,174.02276599999999 -40.913055,174.027771 -40.91861,174.030272999999994 -40.925834999999999,174.03054800000001 -40.935271999999998,174.02941899999999 -40.943610999999997,174.022217000000012 -40.947220000000002,173.929961999999989 -40.992226000000002,173.832184000000012 -40.995002999999997,173.821075000000008 -40.994163999999998,173.782195999999999 -41.009171000000002,173.778594999999996 -41.015555999999997,173.769713999999993 -41.09861,173.778594999999996 -41.114449,173.794433999999995 -41.109444000000003,173.822204999999997 -41.080832999999998,173.821899000000002 -41.062218,173.836638999999991 -41.055,173.846343999999988 -41.053055,173.93081699999999 -41.049446000000003,173.946625000000012 -41.055832000000002,173.953033000000005 -41.060555,173.917755 -41.087502,173.887482000000006 -41.103332999999999,173.848846000000009 -41.144165,173.820526 -41.245834000000002,173.763306 -41.267502,173.76080300000001 -41.273055999999997,173.775817999999987 -41.289726000000002,173.788025000000005 -41.290557999999997,173.806365999999997 -41.289444000000003,174.03720100000001 -41.218330000000002,174.09970100000001 -41.198334000000003,174.128845000000013 -41.187218,174.133605999999986 -41.181671,174.133605999999986 -41.176108999999997,174.126068000000004 -41.174171,174.008605999999986 -41.175277999999999,174.001099000000011 -41.178885999999999,174.001373 -41.186385999999999,174.000274999999988 -41.194716999999997,173.993010999999996 -41.198334000000003,173.981902999999988 -41.199440000000003,173.932738999999998 -41.199997000000003,173.908324999999991 -41.199997000000003,173.899719000000005 -41.197495000000004,173.893585000000002 -41.192771999999998,173.887206999999989 -41.169724000000002,173.88580300000001 -41.161667,173.888031000000012 -41.154167,173.89776599999999 -41.133614,173.902466000000004 -41.128334000000002,174.032745000000006 -40.999724999999998,174.084411999999986 -41.021385000000002,174.094116000000014 -41.023330999999999,174.246338000000009 -41.044724000000002,174.258330999999998 -41.035277999999998,174.299408 -41.003616,174.315246999999999 -41.000557,174.323853000000014 -41.003334000000002,174.323853000000014 -41.010834000000003,174.321625000000012 -41.018059,174.209960999999993 -41.197495000000004,174.161376999999987 -41.225555,174.152771 -41.226661999999997,174.114685000000009 -41.231383999999998,174.052185000000009 -41.235000999999997,174.02664200000001 -41.236114999999998,174.053864000000004 -41.254173000000002,174.206359999999989 -41.269447,174.214966000000004 -41.266663,174.291655999999989 -41.238892,174.303588999999988 -41.229720999999998,174.320800999999989 -41.220275999999998,174.326904000000013 -41.222771000000002,174.288574000000011 -41.276947,174.249114999999989 -41.322502,174.241637999999995 -41.326110999999997,174.231902999999988 -41.328055999999997,174.208587999999992 -41.329445,174.193572999999986 -41.320281999999999,174.155243000000013 -41.305,174.148041000000006 -41.308608999999997,174.111633000000012 -41.336661999999997,174.052764999999994 -41.421112,174.049133000000012 -41.427779999999998,174.044433999999995 -41.442497000000003,174.045806999999996 -41.450836000000002,174.049988000000013 -41.466392999999997,174.063873 -41.493057,174.084136999999998 -41.526108,174.097473000000008 -41.519447,174.096069 -41.511116,174.100799999999992 -41.505561999999998,174.108306999999996 -41.509171000000002,174.114685000000009 -41.513893000000003,174.125792999999987 -41.523887999999999,174.151093000000003 -41.551392,174.176085999999998 -41.578612999999997,174.178864000000004 -41.586112999999997,174.179961999999989 -41.594444000000003,174.179137999999995 -41.602783000000002,174.174133000000012 -41.608336999999999,174.163299999999992 -41.618606999999997,174.157195999999999 -41.623328999999998,174.193024000000008 -41.685555,174.287749999999988 -41.734444000000003,174.291655999999989 -41.740836999999999,174.289153999999996 -41.748336999999999,174.283324999999991 -41.762222,174.236358999999993 -41.837218999999997,174.212188999999995 -41.865279999999998,174.201355000000007 -41.875557,174.184143000000006 -41.890555999999997,174.17804000000001 -41.895004,174.164703000000003 -41.90361,174.157195999999999 -41.907218999999998,174.143585000000002 -41.915832999999999,174.088561999999996 -41.957779000000002,174.009154999999993 -42.027495999999999,173.979674999999986 -42.061110999999997,173.965239999999994 -42.086945,173.959136999999998 -42.100838000000003,173.954407000000003 -42.115555,173.953307999999993 -42.123885999999999,173.953583000000009 -42.133330999999998,173.956359999999989 -42.166389000000002,173.933319000000012 -42.196944999999999,173.928314 -42.202499000000003,173.884154999999993 -42.243614,173.87802099999999 -42.248055,173.870513999999986 -42.251944999999999,173.86300700000001 -42.255561999999998,173.834686000000005 -42.271385000000002,173.801361000000014 -42.293059999999997,173.794983000000002 -42.297500999999997,173.568572999999986 -42.476944000000003,173.558593999999999 -42.487777999999999,173.541350999999992 -42.511947999999997,173.533874999999995 -42.525002,173.531372000000005 -42.532218999999998,173.500823999999994 -42.599724000000002,173.480804000000006 -42.621941,173.466063999999989 -42.656944000000003,173.459960999999993 -42.670836999999999,173.448853000000014 -42.690277000000002,173.387755999999996 -42.793616999999998,173.351623999999987 -42.840836000000003,173.328033000000005 -42.898887999999999,173.328033000000005 -42.906387000000002,173.325806 -42.913612,173.285521999999986 -42.958053999999997,173.106902999999988 -43.057777000000002,173.099396000000013 -43.061385999999999,173.090515000000011 -43.064444999999999,173.026366999999993 -43.081947,172.975799999999992 -43.09111,172.953033000000005 -43.092773,172.935516000000007 -43.098334999999999,172.92025799999999 -43.105834999999999,172.838012999999989 -43.148055999999997,172.818024000000008 -43.160828000000002,172.797760000000011 -43.183059999999998,172.772217000000012 -43.219718999999998,172.76080300000001 -43.239165999999997,172.758026 -43.246665999999998,172.726944000000003 -43.415539000000003,172.726593000000008 -43.423355,172.775817999999987 -43.612220999999998,172.894135000000006 -43.61972,172.90554800000001 -43.620834000000002,173.059692000000013 -43.653053,173.100525000000005 -43.697220000000002,173.105529999999987 -43.703612999999997,173.114409999999992 -43.741385999999999,173.116913000000011 -43.762504999999997,173.116913000000011 -43.769996999999996,173.112182999999987 -43.825004999999997,173.110779000000008 -43.833328000000002,173.091644000000002 -43.856392,173.058593999999999 -43.871108999999997,173.006088000000005 -43.869498999999998,173.002242999999993 -43.868999000000002,172.999236999999994 -43.865668999999997,172.990905999999995 -43.849670000000003,172.965239999999994 -43.802222999999998,172.961365 -43.764449999999997,172.958862000000011 -43.756950000000003,172.951355000000007 -43.755279999999999,172.939972000000012 -43.756110999999997,172.927185000000009 -43.766112999999997,172.921906000000007 -43.771667,172.920532000000009 -43.824173000000002,172.920532000000009 -43.833328000000002,172.917572000000007 -43.869221000000003,172.923584000000005 -43.875884999999997,172.931243999999992 -43.881390000000003,172.937408000000005 -43.887886000000002,172.938904000000008 -43.892384,172.938247999999987 -43.896220999999997,172.870789000000002 -43.904442000000003,172.861633000000012 -43.901389999999999,172.811919999999986 -43.882216999999997,172.804413000000011 -43.878334000000002,172.745789000000002 -43.837775999999998,172.740783999999991 -43.832222000000002,172.736908 -43.825836000000002,172.715239999999994 -43.808334000000002,172.642761000000007 -43.772224,172.513031000000012 -43.729438999999999,172.495238999999998 -43.723885000000003,172.483582000000013 -43.722771000000002,172.472197999999992 -43.72361,172.424988000000013 -43.733612,172.413299999999992 -43.743614,172.390258999999986 -43.763893000000003,172.384978999999987 -43.77861,172.382445999999987 -43.795006,172.383330999999998 -43.8125,172.384704999999997 -43.820838999999999,172.394713999999993 -43.850281000000003,172.393311000000011 -43.858612,172.386932000000002 -43.863334999999999,172.367461999999989 -43.867775000000002,172.297211000000004 -43.881110999999997,172.286925999999994 -43.883057,172.275542999999999 -43.883887999999999,172.189696999999995 -43.909163999999997,172.050812000000008 -43.965279000000002,171.978577 -43.995834000000002,171.955230999999998 -44.006667999999998,171.941070999999994 -44.015006999999997,171.782470999999987 -44.076949999999997,171.654694000000006 -44.122498,171.583587999999992 -44.153885000000002,171.547211000000004 -44.173889000000003,171.538483000000014 -44.178775999999999,171.355559999999997 -44.285491999999998,171.346465999999992 -44.292186999999998,171.342467999999997 -44.295555,171.319976999999994 -44.316391000000003,171.293578999999994 -44.343612999999998,171.285521999999986 -44.356392,171.278594999999996 -44.369995000000003,171.271911999999986 -44.383887999999999,171.269135000000006 -44.391112999999997,171.275542999999999 -44.395836000000003,171.279144000000002 -44.402495999999999,171.278594999999996 -44.420836999999999,171.277190999999988 -44.428885999999999,171.275542999999999 -44.437218,171.26998900000001 -44.451942000000003,171.263306 -44.465553,171.254974000000004 -44.478332999999999,171.214966000000004 -44.533057999999997,171.208313000000004 -44.537506,171.200531000000012 -44.541114999999998,171.196075000000008 -44.560279999999999,171.192200000000014 -44.645836000000003,171.193024000000008 -44.663330000000002,171.20495600000001 -44.700279000000002,171.21414200000001 -44.739165999999997,171.215239999999994 -44.747498,171.207184000000012 -44.851112,171.198577999999998 -44.919998,171.195800999999989 -44.927498,171.185241999999988 -44.938332000000003)))', 4326));
-INSERT INTO geoapp_country ("name", "mpoly") VALUES ('Texas', GeomFromText('MULTIPOLYGON (((-103.00243399999998 36.500397,-102.90421904194784 36.500393342967676,-102.8402359524855 36.500390960558398,-102.840235952479716 36.500390960558398,-102.840235952474345 36.500390960558398,-102.840235952468362 36.500390960558398,-102.840235952461725 36.500390960558398,-102.840235952455885 36.500390960558398,-102.792077446284736 36.500389167377229,-102.643207699865854 36.500383624214699,-102.366462330167067 36.500373319605465,-102.250452999999979 36.500368999999999,-102.24499 36.500703999999999,-102.162463000000002 36.500326,-102.12545 36.500323999999999,-102.124752896301885 36.500398159967887,-102.122066000000004 36.500684,-101.930244999999999 36.500526,-101.925344139375468 36.500484781341967,-101.914929315957153 36.500397187533892,-101.826564999999988 36.499653999999992,-101.826498 36.499535000000002,-101.81449312121488 36.499579719643286,-101.788110000000003 36.499678000000003,-101.783359000000004 36.499709000000003,-101.781987 36.499718,-101.780609999999982 36.499727,-101.779435000000007 36.499733999999997,-101.773235954788092 36.499732939140301,-101.709314000000006 36.499721999999998,-101.698684999999998 36.499507999999999,-101.653707999999995 36.499572999999998,-101.649966000000006 36.499572999999998,-101.623914999999997 36.499527999999998,-101.414793008557069 36.499417763984319,-101.392608849457574 36.499406069885133,-101.340061173170298 36.499378370041477,-101.085155999999984 36.499243999999997,-101.052418000000003 36.499562999999995,-101.04533099999999 36.499540000000003,-100.977087999999995 36.499594999999999,-100.936058000000003 36.499602000000003,-100.918513000000004 36.499620999999998,-100.884174000000002 36.499682,-100.884079999999997 36.499682,-100.859656999999984 36.499687000000002,-100.850840000000005 36.49969999999999,-100.824235999999999 36.499617999999998,-100.824218000000002 36.499617999999998,-100.80619 36.499673999999999,-100.806172000000004 36.499634,-100.802909 36.499620999999998,-100.802886 36.499620999999998,-100.761810999999994 36.499617999999998,-100.761810999999994 36.499580000000002,-100.724361999999999 36.499580000000002,-100.724361000000002 36.499558,-100.708625999999995 36.499552999999999,-100.708628000000004 36.499520999999994,-100.657762999999989 36.499482999999991,-100.657762999999989 36.499499999999998,-100.648342999999997 36.499495000000003,-100.648343999999994 36.499462999999999,-100.592613999999998 36.499468999999998,-100.592555999999988 36.499468999999998,-100.592551 36.499428999999999,-100.583539000000002 36.499482999999991,-100.583378999999994 36.499442999999999,-100.578113999999999 36.499462999999999,-100.578113999999999 36.499439000000002,-100.546144999999996 36.499343000000003,-100.531215000000003 36.499341,-100.531215000000003 36.499290000000002,-100.530478000000002 36.49924,-100.530314000000004 36.499357000000003,-100.522227 36.499290999999999,-100.441064999999995 36.499490000000002,-100.441063999999997 36.499462,-100.433959000000002 36.499456000000002,-100.421327999999988 36.499447000000004,-100.421300999999985 36.499487999999999,-100.413634000000002 36.499443999999997,-100.41355 36.499468999999998,-100.378634000000005 36.499516999999997,-100.378591999999998 36.499445,-100.35185199999998 36.499487000000002,-100.351841999999991 36.499473000000002,-100.334463999999997 36.49942,-100.334440999999998 36.49944,-100.324150000000003 36.499679,-100.311244999999985 36.499631,-100.311018000000004 36.499687999999999,-100.310642999999985 36.499642,-100.253572851827684 36.499638031344489,-100.181220999999994 36.499633000000003,-100.090020999999993 36.499634,-100.000405999999984 36.499701999999999,-100.0004059967807 36.499497793115623,-100.00040222345956 36.260147946939995,-100.000399000000002 36.055677000000003,-100.000396170268971 35.879197994164429,-100.000394020347557 35.745115995014778,-100.000391999999991 35.619115,-100.000390396259149 35.519130234823749,-100.000386875554753 35.299632926398459,-100.000386874882437 35.299591010324292,-100.000386852473085 35.298193905884737,-100.000384999999994 35.182701999999999,-100.000381972929958 34.852568985943549,-100.000381605014198 34.812443999872983,-100.000381000000004 34.746460999999996,-100.000381000000004 34.570853999999997,-100.000381000000004 34.570647,-100.000381000000004 34.560509000000003,-99.998254592787575 34.560446149085699,-99.997501461048799 34.560423888524269,-99.985833 34.560079000000002,-99.974761999999998 34.561317999999993,-99.971554999999995 34.562179,-99.965608000000003 34.565843999999998,-99.958898000000005 34.571271000000003,-99.957540999999992 34.572708999999996,-99.95755299999999 34.574168999999998,-99.956716999999998 34.576523999999992,-99.954566999999997 34.578195,-99.94571999999998 34.579273,-99.930492488760507 34.576894921075187,-99.930189904388058 34.576847666503667,-99.929333999999997 34.576714000000003,-99.923210999999995 34.574551999999997,-99.921801000000002 34.570253,-99.915771000000007 34.565975000000002,-99.914151070156151 34.564995899308187,-99.898943000000003 34.555804000000002,-99.896006999999997 34.555529999999997,-99.89376 34.554219000000003,-99.887146999999999 34.549047000000002,-99.885392392967745 34.547401436342639,-99.884583851343237 34.546643143067669,-99.87806651563541 34.540530839522475,-99.87650823800611 34.539069404005723,-99.874403 34.537095,-99.873254000000003 34.535350999999999,-99.872356999999994 34.532096000000003,-99.868953000000005 34.52761499999999,-99.867217250163094 34.525864500605081,-99.853065999999998 34.511592999999998,-99.832903999999985 34.500067999999999,-99.825324999999992 34.497596,-99.818185999999997 34.487839999999991,-99.818738999999979 34.484975999999996,-99.814544624457952 34.476663062301249,-99.814312999999984 34.476204000000003,-99.793683999999999 34.453893999999998,-99.783787954821193 34.445078397966533,-99.782985999999994 34.444364,-99.775743000000006 34.444225000000003,-99.774224411180043 34.443216449834381,-99.765598999999995 34.437488000000002,-99.764825999999999 34.436433999999998,-99.764881999999986 34.435265999999999,-99.767647999999994 34.431854,-99.767234000000002 34.430501999999997,-99.754248000000004 34.421288999999994,-99.740907000000007 34.414763,-99.735679661059166 34.413018903486261,-99.730348000000006 34.411239999999992,-99.720258999999999 34.406295,-99.719721039768913 34.405807854123296,-99.716415999999995 34.402814999999997,-99.715089000000006 34.400753999999999,-99.714231999999996 34.397821999999998,-99.714838 34.394523999999997,-99.712682 34.390928000000002,-99.707900999999993 34.387538999999997,-99.696461999999997 34.381036000000002,-99.678282999999979 34.379798999999998,-99.672337448339604 34.378003970284972,-99.671377000000007 34.377713999999997,-99.666676988468737 34.374633899592595,-99.665992000000003 34.374184999999997,-99.665404581506792 34.374094751646162,-99.662705000000003 34.373679999999993,-99.659863615570984 34.374283464835351,-99.659362000000002 34.374389999999998,-99.654194000000004 34.376519000000002,-99.649662000000006 34.379885000000002,-99.630904999999998 34.376007,-99.628541546335526 34.375150829397036,-99.624196999999995 34.373576999999997,-99.600026 34.374687999999999,-99.596322999999998 34.377136999999998,-99.587595999999991 34.385866999999998,-99.587235087741874 34.386377538370702,-99.585718954359294 34.388522226586467,-99.585441999999986 34.388914,-99.584530999999984 34.391204999999999,-99.585306000000003 34.398122,-99.584479999999985 34.407673000000003,-99.580059999999989 34.416652999999997,-99.574366999999995 34.418281,-99.569695999999993 34.418418000000003,-99.563067665646059 34.417445690943012,-99.562203999999994 34.417318999999999,-99.561530791054494 34.417028950664999,-99.555986000000004 34.414639999999999,-99.549242000000007 34.412714999999992,-99.529786 34.411451999999997,-99.528744576810823 34.411579971493573,-99.523649999999989 34.412205999999998,-99.517623999999998 34.414493999999991,-99.514279999999999 34.414034999999998,-99.499874999999989 34.409607999999999,-99.497090999999983 34.407730999999991,-99.494103999999993 34.404755000000002,-99.490425999999999 34.399693999999997,-99.487218999999982 34.397955000000003,-99.477547 34.396355,-99.477019613816751 34.396364300212412,-99.474810232095294 34.396403261641368,-99.472297823530695 34.396447566809115,-99.470968999999997 34.396470999999991,-99.463286816319666 34.393024688790533,-99.452647999999996 34.388252,-99.445020999999983 34.379891999999998,-99.440759999999997 34.374122999999997,-99.430994999999982 34.373413999999997,-99.43081720973791 34.373532661492725,-99.420432000000005 34.380464000000003,-99.408847999999992 34.372776000000002,-99.407167999999999 34.372605,-99.406018176721332 34.372844364351735,-99.404336527339453 34.373194441551952,-99.402959999999979 34.373480999999998,-99.399602999999999 34.375078999999999,-99.397253000000006 34.377870999999999,-99.396160718377317 34.383134276834824,-99.391492 34.405631,-99.393918999999997 34.415273999999989,-99.396488000000005 34.417290999999999,-99.396901999999997 34.418688000000003,-99.397009999999995 34.424002999999999,-99.395768462359129 34.43494110377263,-99.394955999999993 34.442098999999999,-99.381011 34.456935999999999,-99.376037841709419 34.458617501802458,-99.375365000000002 34.458844999999997,-99.369609999999994 34.458699000000003,-99.358795 34.455862999999994,-99.354671999999994 34.451856999999997,-99.35478257092818 34.450383391084422,-99.354837000000003 34.449657999999999,-99.356770999999995 34.446542,-99.357101999999998 34.444915000000002,-99.356712999999999 34.442143999999999,-99.350407000000004 34.437083,-99.342020261837703 34.431514649700844,-99.341336999999996 34.431061,-99.341016600261696 34.430906286427735,-99.334036999999995 34.427536000000003,-99.331050066208874 34.424666026137302,-99.328674000000007 34.422383000000004,-99.325094009617374 34.416010263301388,-99.324222000000006 34.414458000000003,-99.321411663781888 34.411055277053073,-99.319798627189357 34.409102230797522,-99.319605999999979 34.408869000000003,-99.318363000000005 34.408295999999993,-99.316372999999999 34.408204999999995,-99.308273999999997 34.410013999999997,-99.299098 34.414227999999994,-99.294647999999981 34.415373000000002,-99.289922000000004 34.414731000000003,-99.287844819286008 34.413958196831629,-99.264167 34.405149000000002,-99.261320999999981 34.403498999999996,-99.261255940568432 34.403158389836314,-99.260996786434447 34.401801622187399,-99.259199386422964 34.392391568987605,-99.258998120407611 34.391337867029385,-99.258979999999994 34.391243000000003,-99.259239630132384 34.391043961974496,-99.260703756811225 34.389921531074158,-99.261190999999997 34.389547999999998,-99.262646013804954 34.388906249865343,-99.264243556741917 34.388201635660714,-99.264508000000006 34.388084999999997,-99.271031915197597 34.387722560266795,-99.271781628057255 34.38768090955238,-99.273607516746409 34.387579471291865,-99.273957999999993 34.38756,-99.27534 34.386598999999997,-99.274925999999994 34.384903999999999,-99.271845396288441 34.382114976063626,-99.271280999999988 34.381603999999996,-99.258696 34.372633999999998,-99.254722 34.372405,-99.251407999999984 34.375079999999997,-99.248969000000002 34.375984000000003,-99.242944999999992 34.372667999999997,-99.239138083830497 34.366035888164781,-99.237232999999989 34.362716999999996,-99.237183660287812 34.362563767173611,-99.235448627455725 34.357175329079247,-99.234251999999984 34.353459,-99.233273999999994 34.344101000000002,-99.23260599999999 34.342379999999999,-99.229993999999991 34.340538000000002,-99.226152999999982 34.339725999999999,-99.221975 34.340020000000003,-99.219768999999999 34.341377,-99.217335000000006 34.341520000000003,-99.213134999999994 34.340369000000003,-99.210957832415772 34.336710386428308,-99.210716000000005 34.336303999999998,-99.20972399999998 34.324934999999996,-99.211600000000004 34.313969999999998,-99.213476 34.310671999999997,-99.213233598142949 34.308226764636807,-99.211647999999997 34.292231999999991,-99.211468055040228 34.291676209875057,-99.209990337717599 34.287112032604114,-99.209742000000006 34.286344999999997,-99.209514950796304 34.286049346749877,-99.207560999999998 34.283504999999998,-99.203681000000003 34.281925999999999,-99.200221999999997 34.281151999999999,-99.196259999999995 34.281463000000002,-99.196052113016066 34.281264951942028,-99.19571031750732 34.280939333014615,-99.195605 34.280839,-99.194569999999985 34.272424,-99.196926000000005 34.260928999999997,-99.197153 34.244298,-99.19555299999999 34.24006,-99.191138999999993 34.23234,-99.190145999999984 34.229660000000003,-99.190036000000006 34.227186000000003,-99.192076 34.222192,-99.192683000000002 34.218825000000002,-99.192104 34.216693999999997,-99.189758414718312 34.214539281858485,-99.189510999999996 34.214312,-99.188483307800709 34.214128939694163,-99.159015999999994 34.20888,-99.143985 34.214762999999998,-99.138220000000004 34.219158999999998,-99.130609000000007 34.219408,-99.128513999999996 34.218766000000002,-99.127549000000002 34.217986000000003,-99.126614000000004 34.21532899999999,-99.127525000000006 34.213771,-99.130089999999996 34.212192000000002,-99.131552999999997 34.209352000000003,-99.131884999999997 34.207382000000003,-99.129791999999995 34.204402999999999,-99.126566999999994 34.203004,-99.119203999999996 34.201746999999997,-99.108757999999995 34.203400999999999,-99.102001344898341 34.205813362825268,-99.092190999999985 34.209316,-99.08119261238302 34.211229594305671,-99.079534999999993 34.211517999999991,-99.075978000000006 34.211221000000002,-99.06646499999998 34.208404000000002,-99.060343999999986 34.204760999999991,-99.059158999999994 34.202928999999997,-99.058800000000005 34.201256,-99.058083999999994 34.200569000000002,-99.048792000000006 34.198208999999999,-99.043470999999997 34.198208,-99.040961999999993 34.200842000000002,-99.039004000000006 34.204667,-99.037458999999998 34.206454,-99.036272999999994 34.206912000000003,-99.013074999999986 34.203221999999997,-99.005790000000005 34.206646999999997,-99.002916243275195 34.208781598893673,-99.002945441244265 34.209102775846141,-99.003147197273819 34.211322087284138,-99.003432988816769 34.214465787333673,-99.000760999999997 34.217643000000002,-98.99085199999999 34.221632999999997,-98.987293999999991 34.221223000000002,-98.981363999999999 34.217582999999991,-98.978684999999984 34.210231,-98.976586999999995 34.206291,-98.974131999999983 34.203566000000002,-98.969003 34.201298999999999,-98.966301999999999 34.201323000000002,-98.962469999999996 34.204667999999998,-98.962085000000002 34.206386000000002,-98.962306999999981 34.211312,-98.960791 34.213029999999996,-98.958474999999993 34.213854999999995,-98.952512999999982 34.212649999999996,-98.950395999999984 34.21168,-98.940219999999997 34.203685999999998,-98.928145 34.192689,-98.927456000000006 34.191155000000002,-98.923128999999989 34.185977999999999,-98.920704 34.183435000000003,-98.918333000000004 34.181831000000003,-98.909348999999992 34.177498999999997,-98.892677318093561 34.17250349095427,-98.87651287834953 34.167659972141138,-98.872921999999988 34.166584,-98.871543000000003 34.165026999999995,-98.871211000000002 34.163012000000002,-98.872229000000004 34.160446,-98.874954999999986 34.157031000000003,-98.874871999999996 34.155656999999998,-98.873271000000003 34.153596,-98.868116 34.149635000000004,-98.862549999999999 34.149110999999998,-98.860124999999996 34.149912999999998,-98.858418999999998 34.152732,-98.8579 34.159627,-98.857321999999982 34.161093999999999,-98.855585000000005 34.161620999999997,-98.854264541670545 34.16164976192438,-98.831114999999983 34.162154,-98.812953999999991 34.158444000000003,-98.806809999999984 34.155901,-98.804411553093104 34.153928907629435,-98.792015000000006 34.143735999999997,-98.779288744496085 34.140194111533035,-98.773070373738221 34.138463455122455,-98.767587610783494 34.136937528280072,-98.765569999999983 34.136375999999998,-98.764702233233265 34.135780085954792,-98.763778343962841 34.135145631382905,-98.761796999999987 34.133785000000003,-98.760558000000003 34.132387999999999,-98.759485999999995 34.128881999999997,-98.759653 34.126911999999997,-98.757118934362524 34.12470437936247,-98.757036999999983 34.124633000000003,-98.753813984496389 34.124468645349353,-98.749290999999999 34.124237999999998,-98.741966000000005 34.125529999999998,-98.740191287161664 34.126850584722824,-98.739461000000006 34.127394000000002,-98.737231999999992 34.130991999999999,-98.736819999999994 34.133374000000003,-98.735471000000004 34.135207999999999,-98.734286999999995 34.135758000000003,-98.730242646678789 34.1359250861193,-98.717536999999993 34.136450000000004,-98.716104 34.135947000000002,-98.70640034274598 34.134745066348501,-98.696517999999998 34.133521000000002,-98.690291400890658 34.133167457450512,-98.690072 34.133155000000002,-98.688275858887323 34.134465065675442,-98.685589983550884 34.136424083851644,-98.676900633591032 34.14276190388366,-98.676457484208683 34.143085127260051,-98.670573548505118 34.147376740066704,-98.655654999999982 34.158257999999996,-98.650582999999997 34.163113000000003,-98.648072999999997 34.164440999999997,-98.643223000000006 34.164530999999997,-98.635729999999995 34.161617999999997,-98.634085211037615 34.161100728840964,-98.630950281399748 34.160114822001631,-98.621666000000005 34.157195000000002,-98.620507214282355 34.157012478916968,-98.617663812339856 34.156564612849806,-98.616732999999996 34.156418000000002,-98.615748434938936 34.156446107485429,-98.612133570686254 34.156549305078279,-98.611829 34.156557999999997,-98.610173632571488 34.157093658210222,-98.610154152422197 34.157099961766605,-98.608852999999996 34.157521000000003,-98.603977999999998 34.160249,-98.599789 34.160570999999997,-98.577135999999996 34.148961999999997,-98.572451 34.145091,-98.560191000000003 34.133201999999997,-98.558593000000002 34.128253999999998,-98.550916999999998 34.119334000000002,-98.536257000000006 34.107343,-98.530610999999993 34.099843,-98.528199999999998 34.094960999999998,-98.504182 34.072370999999997,-98.487068052145446 34.063003092954936,-98.486783271268621 34.06284720836274,-98.486328 34.062598,-98.483944186894661 34.06241565608709,-98.482821069121968 34.062329745958955,-98.482039999999998 34.062269999999998,-98.475065999999998 34.064269000000003,-98.449033999999983 34.073461999999999,-98.446378999999993 34.075429999999997,-98.445784000000003 34.076827000000002,-98.445590305319797 34.079232123390703,-98.445584999999994 34.079298,-98.445259148452962 34.079797720749731,-98.443724000000003 34.082152,-98.442807999999999 34.083143999999997,-98.442148160210323 34.083427517317581,-98.441104460406791 34.083875970068213,-98.440092000000007 34.084311,-98.439068026005657 34.084479541105658,-98.434822808733685 34.08517828308225,-98.432126999999994 34.085622,-98.43151641213494 34.085605425226575,-98.43092946822253 34.085589492282431,-98.428479999999993 34.085523000000002,-98.425229999999999 34.084798999999997,-98.422252999999998 34.083036999999997,-98.419995 34.082487999999998,-98.419161945519861 34.082694545588339,-98.41804644206556 34.082971120917755,-98.417812999999995 34.083029000000003,-98.414426000000006 34.085073999999999,-98.400747497198822 34.098985940284976,-98.399776999999986 34.099972999999999,-98.398505572550647 34.104180252359392,-98.39838899999998 34.104565999999998,-98.398160000000004 34.121395999999997,-98.400493999999995 34.121777999999999,-98.400966999999994 34.122236,-98.398441000000005 34.128456,-98.384381000000005 34.146317000000003,-98.381237999999996 34.149453999999999,-98.367493999999994 34.156190999999993,-98.366862955318183 34.156357896864854,-98.364023000000003 34.157108999999998,-98.34173552164826 34.153594120579292,-98.339428832109121 34.153230340726623,-98.331172907733077 34.151928328079421,-98.326986688030772 34.151268134169193,-98.325445000000002 34.151024999999997,-98.324621914768684 34.150650086831803,-98.323612587945547 34.150190341106089,-98.322580000000002 34.149720000000002,-98.320651676675396 34.148059023851737,-98.318749999999994 34.146420999999997,-98.315432139066189 34.144301906683673,-98.312023538956254 34.142124858924547,-98.300208999999995 34.134579000000002,-98.299345719035045 34.134365643147696,-98.29862570169189 34.134187693395319,-98.293901000000005 34.133020000000002,-98.280321 34.130749999999999,-98.258217018239392 34.129574098564007,-98.256467 34.129480999999998,-98.254901718278489 34.129708262798985,-98.247953999999993 34.13071699999999,-98.241012999999995 34.133102999999998,-98.225282000000007 34.127245000000002,-98.223600000000005 34.125093,-98.216463000000005 34.121820999999997,-98.203710999999998 34.117676000000003,-98.200074999999998 34.116782999999998,-98.191455000000005 34.115752999999998,-98.169120000000007 34.114170999999999,-98.157411999999994 34.120466999999998,-98.154353999999998 34.122734,-98.142753999999996 34.136358999999999,-98.136769999999999 34.144992000000002,-98.130815999999996 34.150531999999998,-98.123377000000005 34.154539999999997,-98.114506000000006 34.154727,-98.109461999999979 34.154110999999993,-98.107064999999992 34.152531000000003,-98.101937000000007 34.146829999999994,-98.092021474678845 34.132735952269094,-98.090223999999992 34.130181,-98.089754999999982 34.128211,-98.090659999999986 34.12198,-98.092421000000002 34.116917,-98.095117999999999 34.11119,-98.096177285423778 34.109455137055363,-98.096466125075011 34.108982084942461,-98.099327999999986 34.104295,-98.101378023037029 34.101786489578267,-98.103538246996251 34.099143131812454,-98.104308999999986 34.098199999999999,-98.119416999999999 34.084474,-98.121038999999996 34.081265999999999,-98.120207999999991 34.072127000000002,-98.11802999999999 34.067064999999999,-98.114587 34.06228,-98.100919767943822 34.050244792175462,-98.099096110217346 34.048638900093685,-98.096177018664264 34.044625138601674,-98.096541898037387 34.040976263553816,-98.09727167092565 34.038969381040054,-98.097731364247636 34.038509687718062,-98.098001443813914 34.038239608151798,-98.102015208841422 34.03732738850595,-98.104022094890695 34.036232725638037,-98.104083244997014 34.036133356900422,-98.105481647738245 34.033860956680144,-98.105481647738245 34.032444902147553,-98.105481647738245 34.031306746267951,-98.103616999999986 34.029206999999992,-98.088202999999993 34.005481000000003,-98.085260000000005 34.003259,-98.082839000000007 34.002412,-98.055197000000007 33.995840999999999,-98.050169864666017 33.994989457544634,-98.041117 33.993456000000002,-98.027671999999981 33.993357000000003,-98.019485000000003 33.993803999999997,-98.018481521828946 33.993960861546498,-98.005667000000003 33.995964,-97.987387999999996 33.999822999999999,-97.982805999999997 34.001949000000003,-97.978243000000006 34.005386999999999,-97.974597608872358 34.00657735007583,-97.974172999999993 34.006715999999997,-97.973934144800623 34.006593661859519,-97.971670000000003 34.005434,-97.968339999999998 34.000529999999998,-97.965354903485249 33.996992503283089,-97.963375425210828 33.994646717187933,-97.96302799999998 33.994235000000003,-97.962715090700769 33.994009516348072,-97.958325000000002 33.990845999999998,-97.955849999999998 33.990136,-97.952687999999995 33.990113999999998,-97.947571999999994 33.991053,-97.946472999999997 33.990731999999994,-97.945729999999998 33.989839000000003,-97.945949999999982 33.988395999999995,-97.952184120103468 33.971402949359636,-97.95307606469359 33.968971674482539,-97.95691699999999 33.958502000000003,-97.960351000000003 33.951928000000002,-97.965737000000004 33.947392,-97.972662 33.944527,-97.974172999999993 33.942832000000003,-97.974062000000004 33.940289,-97.972493999999998 33.937907000000003,-97.971175000000002 33.937128999999999,-97.965952999999999 33.936191,-97.963425 33.936236999999998,-97.955511 33.938186000000002,-97.954466999999994 33.937773999999997,-97.953395 33.936444999999999,-97.952679000000003 33.929482,-97.953694999999996 33.924373000000003,-97.957155 33.914453999999999,-97.960615000000004 33.910353999999998,-97.961188664141474 33.909913087050903,-97.963139679674441 33.908413554571595,-97.964461 33.907398,-97.964803587866868 33.907309441163022,-97.9693952279504 33.906122503898267,-97.969873000000007 33.905999,-97.970298415583201 33.906261144464871,-97.973142999999993 33.908014,-97.976962999999998 33.912548999999999,-97.978803999999997 33.912548,-97.979984999999999 33.911402000000002,-97.983551999999989 33.904001999999991,-97.984539999999996 33.900703,-97.984566 33.899076999999998,-97.984416725907181 33.89872544733722,-97.984025057628415 33.897803036597892,-97.98383498894799 33.897355409354304,-97.983768999999995 33.897199999999991,-97.977858999999995 33.889929000000002,-97.974177999999995 33.886642999999999,-97.967776999999998 33.882429999999999,-97.958438 33.879179,-97.951215000000005 33.878424000000003,-97.946463999999992 33.878883000000002,-97.942729999999997 33.879845000000003,-97.938801999999995 33.879891,-97.936743000000007 33.879204,-97.933120450042608 33.877388671138185,-97.918328311832767 33.869976048610916,-97.905467000000002 33.863530999999995,-97.896737999999985 33.857984999999999,-97.877386999999999 33.850236000000002,-97.871447000000003 33.849001,-97.865764999999982 33.849392999999999,-97.835425213046037 33.857383352392631,-97.834333 33.857671000000003,-97.833886750888084 33.857971936447115,-97.833218553718808 33.858422547723912,-97.806802470257153 33.876236728393856,-97.805423000000005 33.877167,-97.803472999999997 33.880189999999999,-97.801578000000006 33.885137999999998,-97.784656999999982 33.890631999999997,-97.78061799999999 33.895533,-97.779683000000006 33.899242999999998,-97.780339999999995 33.904833000000004,-97.783716999999996 33.910559999999997,-97.772672 33.914382000000003,-97.765445999999997 33.913531999999989,-97.763769999999994 33.914240999999997,-97.762914903547767 33.914953098088951,-97.761142192227695 33.916429357685161,-97.760223999999994 33.917194000000002,-97.759399000000002 33.91881999999999,-97.759833999999984 33.92521,-97.762660999999994 33.930846000000003,-97.762767999999994 33.934396,-97.752956999999995 33.937049000000002,-97.738478 33.937421,-97.736553999999998 33.936574999999998,-97.735919542935619 33.936533987763056,-97.734773489745407 33.936459905200778,-97.733722999999998 33.936391999999998,-97.732266999999993 33.936691000000003,-97.725289000000004 33.941045000000003,-97.720699142354164 33.94461309292862,-97.716772000000006 33.947665999999998,-97.714693355370301 33.94981590741822,-97.712051708440285 33.952548118711093,-97.709683999999996 33.954996999999999,-97.708350195107343 33.95701014009046,-97.70415899999999 33.963335999999998,-97.69792099999998 33.977331,-97.69310999999999 33.983699,-97.688023 33.986606999999999,-97.671772000000004 33.991370000000003,-97.661489000000003 33.990817999999997,-97.656210000000002 33.989488,-97.633778000000007 33.981256999999999,-97.609091000000006 33.968093000000003,-97.589597999999995 33.953553999999997,-97.588828000000007 33.951881999999998,-97.591270649549756 33.930345579062646,-97.591514000000004 33.928199999999997,-97.595084 33.922953999999997,-97.596154999999996 33.922105999999999,-97.59697899999999 33.920228000000002,-97.597115000000002 33.917867999999999,-97.596955673755872 33.917077348335745,-97.596288999999985 33.913769000000002,-97.593782375104212 33.910260437761373,-97.589253999999997 33.903922,-97.587440999999984 33.902479,-97.582744000000005 33.900784999999999,-97.578907598302408 33.900207204108142,-97.558269999999993 33.897098999999997,-97.555002000000002 33.897281999999997,-97.551541 33.897947000000002,-97.543245999999996 33.901288999999998,-97.533617322522971 33.906127586572126,-97.532723000000004 33.906576999999999,-97.525277000000003 33.911750999999995,-97.519170999999986 33.913637999999999,-97.504870374844515 33.918353570482601,-97.500960000000006 33.919643,-97.495648860558163 33.919307898609453,-97.494857999999979 33.919257999999999,-97.492061582842766 33.918500058129531,-97.487115891787269 33.917159576320657,-97.48650499999998 33.916993999999995,-97.484158940985964 33.915822631562747,-97.460375999999982 33.903948,-97.458068999999995 33.901634999999999,-97.451065249608234 33.891558064966901,-97.450953999999996 33.891398000000002,-97.451469000000003 33.87093,-97.452287410342421 33.86882620086994,-97.455665873415143 33.860141550511862,-97.457616999999999 33.855125999999998,-97.459565999999995 33.853316,-97.461485999999994 33.849559999999997,-97.462857 33.841771999999999,-97.459067999999988 33.834581,-97.453056999999987 33.828536,-97.444192999999999 33.823773000000003,-97.426492999999994 33.819398,-97.410387 33.818845000000003,-97.403235695189224 33.818961304668854,-97.384901622687948 33.819259479377855,-97.372940999999997 33.819454,-97.368744000000007 33.821471000000003,-97.365506999999994 33.823762999999992,-97.358512999999988 33.830018000000003,-97.348337999999984 33.843876000000002,-97.340900078515631 33.860236176367188,-97.339391593410966 33.867629740388111,-97.337846311291798 33.870430566802547,-97.336524008254173 33.872827243260353,-97.33293952159849 33.874440259476913,-97.329175814777756 33.874440259476913,-97.327562805507441 33.873902588562437,-97.326564370247013 33.872737756024428,-97.326487449786001 33.872648016149064,-97.324157539016809 33.866016724171544,-97.322365295688968 33.864941382342593,-97.318243141591921 33.865120602507631,-97.31654836796514 33.865642075591225,-97.315913230822716 33.865837504006514,-97.314412999999988 33.866988999999997,-97.310479256695203 33.873361218982971,-97.307489695517361 33.878203969770759,-97.302471419756401 33.880175433263638,-97.299245387323282 33.880175433263638,-97.295170524880618 33.877119286431629,-97.294227111562321 33.876411726442917,-97.286921603026471 33.869423850720118,-97.28598279642199 33.868525862052032,-97.284253187903744 33.867526845294535,-97.279107999999979 33.864555000000003,-97.275347999999994 33.863225,-97.271531999999993 33.862560000000002,-97.257971626565464 33.863220416657512,-97.256624999999985 33.863286000000002,-97.255635999999996 33.863697999999999,-97.254234999999994 33.865322999999997,-97.249208999999993 33.875100999999994,-97.246418496348156 33.898356425448434,-97.246179999999981 33.900343999999997,-97.245398270620598 33.902084836575838,-97.245057441245748 33.90284383100218,-97.244945999999999 33.903092,-97.242092 33.906277000000003,-97.241794392023195 33.906436890220043,-97.238755934556053 33.908069304909361,-97.226522000000003 33.914642,-97.210920999999999 33.916063999999999,-97.210512235443105 33.915911440173737,-97.206141000000002 33.914279999999998,-97.185457999999997 33.9007,-97.180845000000005 33.895203999999993,-97.179608999999999 33.892249999999997,-97.170773789281327 33.861660975771436,-97.166629 33.847310999999998,-97.166824000000005 33.840395,-97.171627 33.835335,-97.180939422624874 33.831550006302521,-97.181369999999987 33.831375,-97.186254000000005 33.830894,-97.193690000000004 33.831307000000002,-97.195830999999998 33.830803000000003,-97.197477000000006 33.829794999999997,-97.199700000000007 33.827322000000002,-97.203513999999998 33.821824999999997,-97.204994999999997 33.81886999999999,-97.205652 33.809823999999999,-97.205556910941183 33.806237292333442,-97.205445103342427 33.802019970418343,-97.205431000000004 33.801487999999999,-97.205114487332324 33.800890302957832,-97.203236000000004 33.797342999999998,-97.194785999999993 33.785344000000002,-97.190397000000004 33.781153000000003,-97.187792000000002 33.769702000000002,-97.181842999999986 33.755869999999994,-97.173532726140948 33.740090726508434,-97.172577000695028 33.738276026602087,-97.172191999999995 33.737544999999997,-97.168438536634085 33.734131892706188,-97.163454368039083 33.729599677915004,-97.163149000000004 33.729322000000003,-97.162807288850388 33.729115696596551,-97.155066000000005 33.724442000000003,-97.152609597300682 33.723370138808036,-97.150103410774264 33.72227655424301,-97.149393999999987 33.721966999999999,-97.137529999999998 33.718663999999997,-97.126102000000003 33.716940999999998,-97.121101999999993 33.717174,-97.119522126797463 33.717502594273334,-97.114921749218269 33.718459416457094,-97.113264999999998 33.718803999999999,-97.112398501853761 33.719102240295193,-97.110065570752283 33.719905212653977,-97.108936 33.720294000000003,-97.108097026518521 33.720734123472262,-97.106518853348803 33.721562029324609,-97.104524999999995 33.722608,-97.097154000000003 33.727809,-97.094085000000007 33.730992,-97.092697209381924 33.732891057656268,-97.092130098039192 33.733667094850453,-97.091071999999983 33.735115,-97.089936943375889 33.737167271747261,-97.087911027802278 33.740830286618703,-97.086195000000004 33.743932999999998,-97.084820762198987 33.752363244406453,-97.084693 33.753146999999998,-97.08461299999999 33.759993,-97.085217999999998 33.765512,-97.087362453285593 33.77250304797397,-97.087851999999998 33.774099,-97.093101265647221 33.787040841586602,-97.093917000000005 33.789051999999998,-97.094675961767678 33.791977368936216,-97.095047178759813 33.793408200769441,-97.095235999999986 33.794136000000002,-97.095080023591905 33.79561056406444,-97.094877682854474 33.797523445530629,-97.094770999999994 33.798532000000002,-97.093897185962049 33.800360798466031,-97.09266432242093 33.802941048788071,-97.092111999999986 33.804096999999999,-97.087998999999982 33.808746999999997,-97.078589999999991 33.812755999999993,-97.067977124183287 33.814475679891196,-97.064604445188394 33.815487484896828,-97.062631847535258 33.816079264957295,-97.058622892638837 33.818751903281317,-97.055415722506638 33.823829921794093,-97.055412197115942 33.8238546000754,-97.055148464371385 33.82570077017467,-97.055682980641905 33.830778788687446,-97.057821087157734 33.834520485448607,-97.058282726048489 33.836367011192308,-97.058622892638837 33.837727655580807,-97.057553829022481 33.840133030590344,-97.055415722506638 33.841202089027483,-97.052208542016004 33.841736615656437,-97.048734113748537 33.840934820533782,-97.045339940802535 33.839496399893775,-97.041245000000004 33.837761,-97.038858000000005 33.838264000000002,-97.023899 33.844213000000003,-97.017857000000006 33.850141999999998,-97.010381749407998 33.858564100233409,-96.999664164722446 33.87063922351804,-96.985567000000003 33.886521999999999,-96.983970999999997 33.892082999999992,-96.984938999999997 33.904865999999991,-96.985275905099471 33.906070041818985,-96.988744999999994 33.918467999999997,-96.993996999999979 33.928978999999998,-96.995022999999989 33.932034999999999,-96.995140238436761 33.933014648420269,-96.996024643022366 33.940404763634284,-96.996183000000002 33.941727999999998,-96.996167702736543 33.941832622020257,-96.995421139189489 33.946938567064805,-96.995367999999999 33.947302,-96.994947208134789 33.948043840473474,-96.994456760007211 33.948908482357652,-96.994287999999983 33.949205999999997,-96.990835000000004 33.952700999999998,-96.988126301178397 33.954514162310069,-96.987892000000002 33.954670999999998,-96.982723774786024 33.956016867344054,-96.981537499896135 33.956325787441237,-96.981336999999982 33.956377999999994,-96.979415000000003 33.956178,-96.979347000000004 33.955129999999997,-96.980675999999988 33.951813999999999,-96.981031000000002 33.949159999999999,-96.97981799999998 33.941588000000003,-96.976955000000004 33.937452999999998,-96.973806999999979 33.935696999999998,-96.97254199999999 33.935794999999999,-96.952313000000004 33.944581999999997,-96.944610999999995 33.949216999999997,-96.933309804512817 33.955134148312766,-96.932252000000005 33.955688000000002,-96.924267999999998 33.959159,-96.922113999999979 33.959578999999998,-96.921429967464036 33.959451233053208,-96.919039990098355 33.959004821377064,-96.918617999999995 33.958925999999998,-96.91833921313939 33.958790334953079,-96.917063225391544 33.958169405626251,-96.916299999999993 33.957797999999997,-96.91417790611122 33.956157267456653,-96.911732563120111 33.95426660943896,-96.911336000000006 33.953960000000002,-96.910857206749995 33.953482904168467,-96.908421363636307 33.951055696608989,-96.907387 33.950024999999997,-96.905252999999988 33.947218999999997,-96.902433999999985 33.942017999999997,-96.901946611333699 33.940667581536225,-96.899441999999993 33.933728000000002,-96.896468999999996 33.91331799999999,-96.897193999999999 33.902954,-96.895728000000005 33.896414,-96.887761838797758 33.878628251663962,-96.883009999999999 33.868018999999997,-96.875280999999987 33.860505000000003,-96.87198767019855 33.857765462058182,-96.866438000000002 33.853149000000002,-96.85608999999998 33.84749,-96.850593000000003 33.847211,-96.845895999999996 33.848974999999996,-96.841592000000006 33.852893999999999,-96.840818999999996 33.863644999999998,-96.839777999999995 33.868395999999997,-96.837412999999984 33.871349000000002,-96.833926235310372 33.873661568818115,-96.832156999999995 33.874834999999997,-96.812777999999994 33.872646000000003,-96.794275999999996 33.868886000000003,-96.786859371055769 33.865207582975678,-96.783484999999999 33.863533999999994,-96.780568999999986 33.860098,-96.779588000000004 33.857939000000002,-96.777202000000003 33.848162000000002,-96.776765999999995 33.841976000000003,-96.770675999999995 33.829621000000003,-96.769378000000003 33.827477000000002,-96.766316855179326 33.825510582121247,-96.766234999999995 33.825457999999998,-96.761588000000003 33.824406000000003,-96.754041 33.824657999999999,-96.746233969152598 33.825673509073113,-96.746037999999984 33.825699,-96.741799282455162 33.826447231494264,-96.71318112067361 33.831498997677379,-96.712421999999989 33.831632999999997,-96.708134 33.833060000000003,-96.704457000000005 33.835020999999998,-96.700318655907978 33.838434731313264,-96.699573999999998 33.839049000000003,-96.695480719177567 33.844085960723298,-96.693127324791789 33.84698191524042,-96.690708 33.849958999999998,-96.688190999999989 33.854613,-96.687524326814838 33.85620885855986,-96.684726999999995 33.862904999999998,-96.682762564556768 33.871464102957781,-96.682209 33.873876000000003,-96.682102999999998 33.876645000000003,-96.683464 33.884217,-96.681051007513375 33.895708672998403,-96.680947000000003 33.89620399999999,-96.675306000000006 33.909114000000002,-96.673449000000005 33.912278,-96.670618000000005 33.914913999999996,-96.667186999999998 33.916939999999997,-96.665308436653305 33.917161206414967,-96.66440999999999 33.917267000000002,-96.659896000000003 33.916665999999999,-96.65150600931733 33.910998546998165,-96.644049999999979 33.905962000000002,-96.630116999999998 33.895422000000003,-96.628293999999997 33.894477000000002,-96.616355751891987 33.894625565889051,-96.614680358047494 33.89464641537834,-96.611821556077771 33.89468199182577,-96.607562 33.894734999999997,-96.592948000000007 33.895615999999997,-96.588319642127203 33.894847991673281,-96.587934000000004 33.894784,-96.58760387584924 33.894318075382706,-96.585452000000004 33.891280999999999,-96.585359999999994 33.888947999999999,-96.587494000000007 33.884250999999999,-96.590112000000005 33.880665,-96.597347999999982 33.875100999999994,-96.601685999999987 33.872822999999997,-96.611969999999999 33.869016000000002,-96.625399000000002 33.856541999999997,-96.628968999999998 33.852406999999999,-96.629746999999995 33.850866000000003,-96.630021999999983 33.847541,-96.629842405402627 33.847037300944812,-96.629577623992816 33.846294683138318,-96.629289999999997 33.845488000000003,-96.627812273090953 33.844523322531259,-96.626623854929747 33.84374750920842,-96.623154999999997 33.84148299999999,-96.622548607895212 33.841284829387497,-96.620258613641042 33.840536452948584,-96.605267599881515 33.835637348301233,-96.601258 33.834327000000002,-96.599141379811712 33.83346048638235,-96.597030984690946 33.832596521217091,-96.595164098773168 33.831832245189069,-96.592925999999991 33.830916000000002,-96.587067000000005 33.828009000000002,-96.573054340771023 33.81917200025552,-96.572936999999996 33.819097999999997,-96.568822993124115 33.818734252140963,-96.566549213959448 33.818533211567136,-96.566298000000003 33.818511,-96.551222999999993 33.81912899999999,-96.541502252916899 33.82118138128849,-96.537683599711926 33.821987629236112,-96.532865 33.823005000000002,-96.532141353898353 33.822830017549641,-96.529233999999988 33.822127000000002,-96.526655000000005 33.820891000000003,-96.526331240434345 33.820568979830284,-96.523863000000006 33.818114,-96.519910999999993 33.811346999999998,-96.517492044660074 33.805400310572544,-96.516583999999995 33.803167999999999,-96.515958999999995 33.798933999999996,-96.515952403498957 33.797370629253059,-96.5159410675722 33.794684014612457,-96.515912 33.787795000000003,-96.51191399999999 33.781477999999993,-96.502285999999998 33.773459999999993,-96.500268000000005 33.772582999999997,-96.486059999999995 33.773009999999999,-96.459153999999998 33.775232000000003,-96.456254 33.776035,-96.450509999999994 33.780588000000002,-96.448044999999993 33.781030999999999,-96.436454999999995 33.780050000000003,-96.430214000000007 33.778654000000003,-96.423664429058576 33.776393528613141,-96.422642999999994 33.776040999999999,-96.422322840041474 33.775682043625913,-96.420980388055867 33.774176915691271,-96.419961 33.773034000000003,-96.419583102042878 33.772404537625398,-96.417562000000004 33.769038000000002,-96.416145999999998 33.76609899999999,-96.413408000000004 33.757714,-96.411885201063754 33.755703128434462,-96.408468999999997 33.751191999999996,-96.403507000000005 33.746288999999997,-96.384116000000006 33.730141000000003,-96.383299027856694 33.729391180874664,-96.380090129695702 33.726446045924753,-96.379450023740389 33.7258585550397,-96.370956555983966 33.718063228581727,-96.370761536889887 33.717884239557762,-96.369590000000002 33.716808999999998,-96.369084597701828 33.715741445126696,-96.366945 33.711221999999999,-96.363253 33.701050000000002,-96.363143372320295 33.69469995601051,-96.363135 33.694215,-96.362964209763192 33.693778090504111,-96.362198000000006 33.691817999999998,-96.356236230636398 33.68737146600408,-96.355945999999989 33.687154999999997,-96.355455421824701 33.68710517164083,-96.352724507664888 33.686827790830883,-96.348305999999994 33.686378999999995,-96.346643697131185 33.686554630652331,-96.344174978865311 33.686815463144171,-96.342664999999997 33.686974999999997,-96.337175125435976 33.689043696356201,-96.321102999999994 33.695099999999996,-96.318759999999997 33.696753,-96.318590686098233 33.696960051986665,-96.318010443675675 33.697669623646739,-96.316924999999998 33.698996999999999,-96.314798583555884 33.702507526903553,-96.309963999999994 33.710489000000003,-96.308342766341951 33.715746247280322,-96.307034999999985 33.719987000000003,-96.307001890234133 33.720499786556005,-96.306595999999999 33.726785999999997,-96.307389 33.735005,-96.3061 33.741002000000002,-96.30525491425243 33.743702118680943,-96.304087485467235 33.747432149959735,-96.303009000000003 33.750878,-96.301705999999982 33.753756000000003,-96.294866999999996 33.764771000000003,-96.292482000000007 33.766418999999999,-96.277269000000004 33.769734999999997,-96.269895999999989 33.768405,-96.251497151236435 33.760405611313516,-96.248231999999987 33.758986,-96.23960043273749 33.754058875473291,-96.229595766085112 33.748347949873668,-96.229022999999998 33.748021,-96.220521000000005 33.747390000000003,-96.1999 33.752116999999998,-96.196336040977513 33.753254070097242,-96.186553999999987 33.756374999999998,-96.178059000000005 33.760517999999998,-96.174632999999986 33.763699000000003,-96.169932696734321 33.769534234627457,-96.169452000000007 33.770130999999999,-96.167888847884015 33.774482610028038,-96.162756999999985 33.788769000000002,-96.162122572851359 33.796140263149638,-96.162213638666273 33.796174412747511,-96.166837334419654 33.79790829445497,-96.170373408451042 33.799381659586444,-96.173025461119408 33.800560352833699,-96.175150000000002 33.801951000000003,-96.17734 33.805117000000003,-96.17895107878303 33.810509748931381,-96.178963999999993 33.810552999999999,-96.176910000000007 33.813934000000003,-96.175889999999981 33.814627000000002,-96.164217431250009 33.817001137011715,-96.150765000000007 33.816986999999997,-96.148792 33.819197000000003,-96.151629999999983 33.831945999999995,-96.150147000000004 33.835856,-96.148457006953691 33.837436961236868,-96.14806999999999 33.83779899999999,-96.147446683377808 33.837891494337825,-96.138904999999994 33.839159000000002,-96.128108733462625 33.839703753325978,-96.122951 33.839963999999995,-96.118168999999995 33.837883999999995,-96.109992999999989 33.832396000000003,-96.104074999999995 33.830730000000003,-96.099360000000004 33.830469999999998,-96.097448 33.832724999999996,-96.097637999999989 33.837935000000002,-96.099152999999987 33.842409000000004,-96.100785000000002 33.844230000000003,-96.101348999999999 33.845720999999998,-96.101472999999999 33.846708999999997,-96.100094999999996 33.847971,-96.084626 33.846656000000003,-96.063924 33.841522999999995,-96.055357999999984 33.838262,-96.049381559404907 33.836618570443349,-96.048833999999999 33.836468000000004,-96.044074587870469 33.838420736557822,-96.037191000000007 33.841245,-96.031783693249977 33.849934429642978,-96.031271075997878 33.850758194920559,-96.029462717056688 33.852402158173604,-96.025188419607474 33.852073366797306,-96.022229284477689 33.850922593794486,-96.021900493101384 33.849114234853282,-96.022507000000004 33.846130000000002,-96.022064891975305 33.843195970965255,-96.021407302851145 33.841880802274289,-96.019950829321616 33.840821548098475,-96.019598947095744 33.84056563358331,-96.005296 33.845505000000003,-96.000534603789163 33.849305889934179,-95.998351 33.851049000000003,-95.997709 33.852181999999992,-95.997673906338932 33.852568581878202,-95.997405462294296 33.855525685805766,-95.9977342536706 33.860950759443568,-95.997376655326022 33.862202357114477,-95.996747879541701 33.864403078452035,-95.993624351909531 33.866211440579008,-95.991487204777812 33.866869023331596,-95.988856861024331 33.866869023331596,-95.984753921632091 33.864671017651808,-95.984253769013037 33.864403078452035,-95.980965842506947 33.859306796190523,-95.9735403792467 33.856832331211713,-95.972155999999998 33.856371000000003,-95.971744371228908 33.856383941655046,-95.951609000000005 33.857016999999999,-95.945502988542614 33.859346036998218,-95.944283999999982 33.859811,-95.943359355023844 33.860365112733476,-95.941777921153459 33.861312819872232,-95.941266999999996 33.861618999999997,-95.936631000000006 33.870615,-95.93550004724635 33.874497995518659,-95.935325000000006 33.875098999999999,-95.935308000000006 33.878723999999998,-95.935637 33.880370999999997,-95.936817000000005 33.882385999999997,-95.937201999999999 33.884652000000003,-95.936131999999986 33.886825999999999,-95.935198 33.887100999999994,-95.922712000000004 33.883758,-95.915960999999996 33.881148000000003,-95.905343000000002 33.875629000000004,-95.893305999999995 33.868161,-95.887490999999997 33.863855999999998,-95.881292000000002 33.860627,-95.859469000000004 33.852455999999997,-95.849863999999997 33.844951999999999,-95.843772999999999 33.838949,-95.841300369514457 33.837329726167006,-95.840012000000002 33.836486,-95.839442445999168 33.836292954052603,-95.838335071878717 33.835917618112738,-95.837515999999994 33.835639999999998,-95.831947999999997 33.835160999999999,-95.828244999999995 33.836053999999997,-95.827967044704152 33.836191602640042,-95.826538854622555 33.836898632614485,-95.822787000000005 33.838755999999989,-95.821905415666805 33.839551758599306,-95.821112514659319 33.840267467546653,-95.820784000000003 33.840564,-95.819357999999994 33.842784999999999,-95.818975999999992 33.844456,-95.819524999999999 33.848438999999999,-95.820676999999989 33.850750999999995,-95.821665999999979 33.855443,-95.821665999999979 33.856633000000002,-95.82138191533943 33.857119395418813,-95.820824189768416 33.858074304994595,-95.820595999999995 33.858464999999995,-95.820256321913618 33.858527429344676,-95.805149 33.861303999999997,-95.800842000000003 33.861212000000002,-95.790314669347865 33.857829825250164,-95.789867 33.857685999999994,-95.789358977006231 33.85733891951336,-95.788304168820886 33.85661827626933,-95.787891000000002 33.856335999999999,-95.776255000000006 33.845145000000002,-95.773281999999995 33.843834,-95.772067000000007 33.843817,-95.763621999999984 33.847954,-95.758311274366889 33.849968021173019,-95.758015999999998 33.850079999999998,-95.757640875431136 33.850475976069447,-95.754310000000004 33.853991999999998,-95.753512999999984 33.856464000000003,-95.753688987366843 33.856976705401074,-95.75729390188404 33.867478931648478,-95.757457999999986 33.86795699999999,-95.758009454152003 33.868443703186436,-95.760805000000005 33.870911,-95.762558999999996 33.874366999999992,-95.76194240701966 33.883030946465368,-95.761915999999999 33.883401999999997,-95.758343999999994 33.890610999999993,-95.756366999999997 33.892625000000002,-95.747335000000007 33.895755999999999,-95.737508000000005 33.895966999999999,-95.729445045960333 33.893952819075864,-95.728448999999998 33.893704,-95.723226300470785 33.890698381785455,-95.717160861060378 33.887207774089354,-95.713910181462765 33.885337036216413,-95.713539999999981 33.885123999999998,-95.710877999999994 33.884551999999999,-95.696961999999999 33.885218000000002,-95.684831000000003 33.890231999999997,-95.676924999999983 33.897236999999997,-95.669978 33.905844000000002,-95.665338000000006 33.908132000000002,-95.659818 33.909092,-95.647272999999998 33.905976000000003,-95.636977999999999 33.906613,-95.609439392746168 33.923623282239362,-95.603656999999998 33.927194999999998,-95.599677999999983 33.934246999999999,-95.585944999999981 33.93448,-95.570311428427317 33.932892416047835,-95.564667905744443 33.932319318211334,-95.563423999999998 33.932192999999998,-95.562724847986416 33.932007581530534,-95.561592737930383 33.931707340510293,-95.561007000000004 33.931551999999996,-95.560415995740641 33.931042615914556,-95.559931936825777 33.930625407571753,-95.559414000000004 33.930179000000003,-95.558286100391328 33.928753215740784,-95.557777967458279 33.928110882033096,-95.556914999999989 33.927019999999999,-95.551147999999984 33.914566,-95.549144999999996 33.90795,-95.549475 33.901310999999993,-95.552330999999981 33.894419999999997,-95.55209457427955 33.888655441173519,-95.552085000000005 33.888421999999998,-95.551943532854764 33.888208369560985,-95.548485831718622 33.882986873004867,-95.548324999999991 33.882744000000002,-95.547838962671932 33.882363312195096,-95.545708294665019 33.880694470565629,-95.545197000000002 33.880293999999999,-95.54352178779898 33.880173169084813,-95.541265054919734 33.880010393826282,-95.539789999999996 33.879904000000003,-95.537358049249164 33.88037416967029,-95.534038375697051 33.881015963020303,-95.533282999999997 33.881161999999996,-95.531798241123994 33.881968630089013,-95.525321999999989 33.885486999999998,-95.521418133191162 33.888379988113826,-95.520137966641357 33.88932866459119,-95.515301759339067 33.891142240377064,-95.510062536063273 33.890134704348199,-95.506233872599807 33.886306036979761,-95.506495 33.878588999999998,-95.506084999999999 33.87639,-95.502407477038815 33.874787101867227,-95.502303999999995 33.874741999999998,-95.492028000000005 33.874822000000002,-95.480004545492946 33.87882505156746,-95.478574999999992 33.879300999999998,-95.477829321179073 33.879890044047791,-95.469962325642697 33.886104525088022,-95.467351237093553 33.886417854985297,-95.464924614258621 33.886709049048328,-95.462909526581015 33.885903021006229,-95.461498966768687 33.883686425341857,-95.46277824472287 33.878821065729895,-95.464211000000006 33.873372000000003,-95.463346 33.872312999999998,-95.461127233926518 33.871832054399569,-95.447370000000006 33.868850000000002,-95.418546279096461 33.866998581211959,-95.411345060268999 33.866536029139695,-95.407794999999979 33.866307999999989,-95.406882133018115 33.866362247208706,-95.404325916920058 33.866514150597617,-95.375232999999994 33.868243,-95.352338000000003 33.867789000000002,-95.339561303488324 33.868836967540759,-95.339121999999989 33.868873,-95.339014688391742 33.869073090388603,-95.33835013321854 33.870312202400832,-95.334854000000007 33.876830999999996,-95.334836460323601 33.877305631062114,-95.334523000000004 33.885787999999998,-95.333451999999994 33.886285999999998,-95.325571999999994 33.885703999999997,-95.310579050797429 33.880679668661742,-95.294789354523203 33.875388337067108,-95.287864786488143 33.87494634339312,-95.28344485260331 33.877745636185885,-95.281676877907344 33.882902226669891,-95.281529544303439 33.887616824907447,-95.281317419351268 33.889260797911334,-95.280350898312903 33.896751357029835,-95.279761569607459 33.899108654721076,-95.277846267017765 33.900876629417048,-95.275341635722626 33.901760616765031,-95.272542342929853 33.902055281117747,-95.267212735027385 33.900338966530455,-95.263849803053915 33.899255988324974,-95.261050510261143 33.899992642069066,-95.255746586173245 33.902939265610648,-95.253094626984378 33.90544389690578,-95.250884657186859 33.913105118684925,-95.250737329293145 33.917083057468233,-95.251326652288412 33.924154956252103,-95.253020000000006 33.927236999999998,-95.253623000000005 33.92971,-95.252905999999982 33.933647999999998,-95.250453815364224 33.936614470603772,-95.23166760862577 33.959340626388752,-95.231194814374604 33.959912577712174,-95.230491 33.960763999999998,-95.226393000000002 33.961953999999999,-95.219358 33.961567000000002,-95.184075000000007 33.950353,-95.174181557651636 33.944707625858101,-95.173657196254922 33.944408415920272,-95.168745999999999 33.941605999999993,-95.166685999999984 33.939728000000002,-95.161108999999982 33.937598,-95.149462 33.936335999999997,-95.131725657216535 33.936903570678005,-95.131056 33.936924999999995,-95.130760550144942 33.936820411866918,-95.124700000000004 33.934674999999991,-95.121184 33.931306999999997,-95.121974867397924 33.925542192115131,-95.122499622273722 33.921717137430115,-95.122365486317321 33.918632002634986,-95.119951031304154 33.915815139752631,-95.110963896232136 33.912998276870283,-95.103318123323447 33.913668959251616,-95.10214780889666 33.912991409673538,-95.100769532353866 33.912193461131935,-95.098489218495843 33.909913139475762,-95.095001673232161 33.904815960136006,-95.095247706914634 33.899772255341666,-95.095269945144935 33.899316370327696,-95.09392858558104 33.895962961020395,-95.090441035118587 33.893280234094433,-95.084002493615529 33.893280234094433,-95.079139333602001 33.898143394107954,-95.078905311676394 33.898377416033576,-95.074957661870556 33.900039583313315,-95.073630040977179 33.900598581227868,-95.071259538767663 33.901596686785098,-95.065491679645973 33.899584642240477,-95.06106518008815 33.895292278639054,-95.058834000000004 33.886812999999997,-95.049025 33.864089999999997,-95.046567999999994 33.862564999999996,-95.038661112238941 33.860609605793528,-95.037206999999995 33.86025,-95.033518790033554 33.860141698175291,-95.03143098776043 33.86008039125462,-95.030255193062573 33.860045864827867,-95.022324999999995 33.859813000000003,-95.016999191469623 33.861237606415294,-95.016422000000006 33.861392000000002,-95.008375999999984 33.866088999999995,-95.000223000000005 33.862504999999999,-94.995524000000003 33.857438000000002,-94.992810330111539 33.852698351540766,-94.992671 33.852454999999999,-94.992523097811741 33.852403566519136,-94.990494037024106 33.851697953840834,-94.988486999999992 33.850999999999999,-94.98739725328582 33.851074415574232,-94.983303000000006 33.851354,-94.981650000000002 33.852283999999997,-94.976208 33.859846999999995,-94.973410999999999 33.861730999999999,-94.971435 33.862122999999997,-94.968895000000003 33.860916000000003,-94.965888000000007 33.848421999999999,-94.964400999999995 33.837020999999993,-94.957676000000006 33.835003999999998,-94.949533421399437 33.825707838785306,-94.949112883549958 33.821754768331147,-94.948729542346143 33.818151347643564,-94.948715939727023 33.818023482549535,-94.944301522854289 33.81213759866646,-94.939560116480934 33.810502632153295,-94.935799688114457 33.810339132650462,-94.932366255585293 33.810993121156741,-94.928442330884351 33.812628087669893,-94.92451840618341 33.812791587172725,-94.924196338046286 33.812670811231236,-94.921902464831703 33.811810605997493,-94.919450010309433 33.810175636315982,-94.917815040627914 33.808704169305649,-94.917091634856007 33.805689966907131,-94.916834062621035 33.804616745101868,-94.916997555787162 33.801510305241678,-94.91961350347556 33.794152948011565,-94.920034399525505 33.790224602097751,-94.920103995647338 33.789575041141042,-94.920095560257593 33.789518805381888,-94.91961350347556 33.786305103362189,-94.913003475392784 33.779908559849432,-94.912450337640749 33.77937328682863,-94.911427000000003 33.778382999999998,-94.906244999999998 33.778191999999997,-94.902276 33.776288999999998,-94.89497736748055 33.771540270803243,-94.89019868072495 33.768431100796676,-94.888367999999986 33.76724,-94.887910246679809 33.766674529711281,-94.886225692565191 33.764593571999796,-94.885411379435553 33.764756432942491,-94.881447983999394 33.765549103837166,-94.879218389137634 33.764912090842074,-94.876033253179955 33.760771407616105,-94.875653319149677 33.757021753168047,-94.875534806260347 33.755852122792213,-94.875497398046861 33.755482932714841,-94.877080000000007 33.75222,-94.874668 33.749164,-94.870299604394191 33.746484207390097,-94.869443369718425 33.745958950164457,-94.869299999999996 33.745871,-94.8570941233355 33.742035460072337,-94.849295999999981 33.739584999999991,-94.841633779899112 33.739430990835892,-94.830804318260235 33.740068022348083,-94.828875382311935 33.74092532536806,-94.827937698058648 33.741342073027738,-94.826026615866809 33.743890180559411,-94.824752565187154 33.749304914465036,-94.82447272313469 33.749460382205008,-94.821885938813196 33.750897483986968,-94.817426749089677 33.752171534666616,-94.815635414888177 33.752066164468857,-94.813744972719192 33.751954964523563,-94.81275807295215 33.751896912919612,-94.812012015184067 33.751853028169073,-94.80914539498248 33.749304914465036,-94.798634446013509 33.744527205899239,-94.789716054221742 33.746119775421171,-94.777638928565466 33.753471071068567,-94.775064434371529 33.755038154868203,-94.770923763490302 33.754401129528375,-94.768057130944001 33.753445597691005,-94.766464573766783 33.750897483986968,-94.766146067269247 33.748030863785381,-94.766818924318841 33.746124416643802,-94.768057130944001 33.742616129879757,-94.767738636791165 33.737519908644046,-94.767244154304578 33.736926531576607,-94.76296091588064 33.731786662068515,-94.759138751496963 33.729557067206756,-94.758159820145337 33.729557067206756,-94.753087004596253 33.729557067206756,-94.750011775433265 33.728811557489699,-94.742576055627282 33.727008959675082,-94.742176780415733 33.726449974997927,-94.739390916583417 33.72254976995157,-94.737479828219207 33.716179498036198,-94.737788227808608 33.71500758055268,-94.73907239774114 33.71012773879076,-94.73746132453816 33.705563045258067,-94.73716130937693 33.704713004885136,-94.732383613155861 33.700253815161624,-94.728242929929891 33.699616789821789,-94.725694828570582 33.702483410023376,-94.724525908047042 33.704821269192259,-94.724102271393392 33.705668549067234,-94.721872664186904 33.707261118589173,-94.719006043985303 33.708216656598914,-94.714865360759347 33.707261118589173,-94.711043208720398 33.705668549067234,-94.709450639198465 33.699616789821789,-94.710289486124168 33.697309952648205,-94.710724689878106 33.696113138108018,-94.710724689878106 33.691653948384499,-94.710106194192988 33.688252279047049,-94.71008765219355 33.688150299756906,-94.707858069676533 33.686876245991066,-94.691547961569825 33.685092048879412,-94.684792000000002 33.684353000000002,-94.659166999999997 33.692138,-94.652265035786613 33.690979104454883,-94.649628372726468 33.688049476940073,-94.649099284135872 33.686462209886628,-94.648456523423718 33.684533926193204,-94.64818493525776 33.682632803768527,-94.647928021538007 33.680834402751707,-94.647870600191638 33.680432452214262,-94.648456523423718 33.673401362074948,-94.647827859209684 33.672301196274027,-94.646112824818204 33.669299876741562,-94.642890235687361 33.668420997570671,-94.635273213800133 33.669885811328072,-94.631328876730365 33.67284406472757,-94.630585813750528 33.673401362074948,-94.627656194751552 33.677795791992715,-94.62121101648988 33.681018386800773,-94.616816575217669 33.679553573043371,-94.614284398758912 33.677302743466427,-94.611543254774574 33.674866164477912,-94.611424034353576 33.674789522931938,-94.607441775118403 33.672229504256364,-94.60304734520065 33.671350625085473,-94.596895128555005 33.671350625085473,-94.593672545101384 33.673987285307021,-94.590449961647764 33.677502836053897,-94.590316660066918 33.67755410593854,-94.586641449284855 33.678967649811298,-94.579620000000006 33.677622999999997,-94.576973687569549 33.673401362074948,-94.5728722135906 33.669885811328072,-94.571305222138406 33.668005422800071,-94.569942586075811 33.666370260581196,-94.569356662843745 33.663440621711956,-94.571445361022185 33.660423619728157,-94.571993323065286 33.659632120703485,-94.572286279004103 33.656995454804722,-94.570821465246695 33.654944723492456,-94.568770728257221 33.65465176187643,-94.564669254278257 33.655823608340576,-94.563858010166513 33.65591721375597,-94.557052229552454 33.656702498865904,-94.552071876402621 33.653479904057846,-94.551192985877293 33.650257320604226,-94.551311999999982 33.644569999999995,-94.553536678805585 33.642054372646328,-94.552657799634687 33.638245860283412,-94.549142248887819 33.635902161677912,-94.543868917090279 33.635902161677912,-94.538888563940446 33.637952898667386,-94.538195599937964 33.637916426989378,-94.537583502619341 33.637884211439605,-94.533322276204103 33.637659937051346,-94.529220802225154 33.63443734792051,-94.528408204203203 33.630103504051213,-94.528341911699826 33.629749945032266,-94.52980672545722 33.627406252103981,-94.528927834931892 33.621839964367631,-94.526291174710352 33.619203298468861,-94.521363727720257 33.61686924674752,-94.520724886974008 33.61656663824732,-94.504615 33.620682000000002,-94.493418698303032 33.624467326832118,-94.492501061148843 33.624777568252533,-94.491502999999994 33.625115,-94.491295462081894 33.62531395337146,-94.487514000000004 33.628939000000003,-94.485874999999993 33.637867,-94.481313 33.638818999999998,-94.476415000000003 33.638947000000002,-94.466075000000004 33.636262000000002,-94.464185999999998 33.637655000000002,-94.461453000000006 33.643615999999994,-94.459197999999986 33.645145999999997,-94.454819999999998 33.644902999999999,-94.448637000000005 33.642766000000002,-94.446871000000002 33.640177999999999,-94.447513999999998 33.636254999999991,-94.448451000000006 33.634497000000003,-94.458816999999982 33.632444,-94.462736000000007 33.63091,-94.461129 33.625414999999997,-94.460285999999996 33.624420999999998,-94.45525499999998 33.622917,-94.452710999999994 33.622621000000002,-94.452325000000002 33.618817,-94.452961000000002 33.616985999999997,-94.454768999999999 33.615155999999992,-94.462335999999993 33.610567000000003,-94.469451000000007 33.60731599999999,-94.472166 33.604199,-94.471974000000003 33.602665000000002,-94.471151999999989 33.601588,-94.468086 33.599435999999997,-94.461794602929331 33.598691554192769,-94.458900358388505 33.598349085232492,-94.458231999999995 33.598269999999999,-94.454858239556387 33.593453869357283,-94.453995999999989 33.592222999999997,-94.453435550445548 33.592019500625121,-94.452150252013013 33.591552808439438,-94.451622 33.591360999999999,-94.449112 33.590893999999992,-94.442363999999998 33.591242999999999,-94.441536999999997 33.591501999999991,-94.439518000000007 33.594154000000003,-94.430358101189597 33.59122600196271,-94.430038999999994 33.591124,-94.429672337173542 33.590855074196774,-94.427920122643982 33.589569927010331,-94.427577999999983 33.589319000000003,-94.425982000000005 33.586424999999998,-94.413155000000003 33.569367999999997,-94.412481642075306 33.56890283335202,-94.412480771235352 33.568902231761562,-94.412480202418593 33.568901838813659,-94.412175000000005 33.568691,-94.408900999999986 33.568196999999998,-94.403341999999995 33.568424,-94.397341999999981 33.571607999999998,-94.385926999999995 33.581887999999999,-94.382886999999997 33.58326799999999,-94.379649 33.580607,-94.378075999999993 33.577019,-94.377759999999981 33.574609000000002,-94.378561000000005 33.571328999999999,-94.380090999999993 33.568942999999997,-94.382534000000007 33.567056999999998,-94.388052000000002 33.565511,-94.392357000000004 33.565286999999998,-94.394655618773015 33.564059042448399,-94.397398454287298 33.562313601959417,-94.399227012370631 33.559903231990447,-94.399393244337958 33.557077279687135,-94.399143896386974 33.555498071165481,-94.397957000000005 33.554389999999998,-94.392572999999999 33.551141999999999,-94.389515000000003 33.546778000000003,-94.386086000000006 33.544922999999997,-94.381666999999993 33.544035,-94.373392999999993 33.544471,-94.371597999999992 33.545000999999999,-94.363297000000003 33.544956999999997,-94.361350999999999 33.544612999999998,-94.358969999999999 33.54323,-94.355945000000006 33.54318,-94.348944999999986 33.548358999999998,-94.347382999999979 33.55107799999999,-94.34729 33.552197,-94.352653000000004 33.560611000000002,-94.352433000000005 33.56217199999999,-94.345512999999997 33.567312999999999,-94.344023000000007 33.567824000000002,-94.340576999999996 33.567878,-94.340047258358467 33.56768232744934,-94.338972839399958 33.567285465504582,-94.33842199999998 33.567081999999999,-94.337996277272822 33.566655299162022,-94.334939999999989 33.563592,-94.334379999999996 33.562536,-94.333929800646288 33.557825151092565,-94.333894999999998 33.557461000000004,-94.333202999999997 33.555365999999992,-94.331833000000003 33.553348,-94.33059 33.552692,-94.323660000000004 33.549835000000002,-94.319491999999997 33.548864000000002,-94.309582000000006 33.551673,-94.30641 33.555616,-94.306214999999995 33.557676,-94.307180999999986 33.559797000000003,-94.303577000000004 33.56828,-94.301022999999986 33.573022000000002,-94.298392000000007 33.576217999999997,-94.293257999999994 33.580418999999999,-94.289129000000003 33.582143999999992,-94.287025 33.582410000000003,-94.283581999999996 33.581890999999999,-94.282647999999995 33.580978000000002,-94.280849000000003 33.577187000000002,-94.280604999999994 33.574907999999994,-94.282171999999989 33.572989,-94.290372000000005 33.567905000000003,-94.291686999999996 33.563481000000003,-94.290901000000005 33.558872,-94.289439999999999 33.557634999999998,-94.287571999999997 33.557178,-94.279089999999997 33.557026,-94.275600999999995 33.557963999999998,-94.274473 33.558652000000002,-94.271997999999996 33.561517999999992,-94.270978999999997 33.563220999999999,-94.270853000000002 33.564782999999998,-94.265668999999988 33.573588999999998,-94.262754999999999 33.577354,-94.257801 33.582507999999997,-94.257524288354617 33.582703553652586,-94.252656000000002 33.586143999999997,-94.245931999999996 33.589113999999995,-94.242777000000004 33.589708999999999,-94.240178999999998 33.589536000000003,-94.236971999999994 33.587411000000003,-94.236362999999997 33.585991999999997,-94.236835999999997 33.580914,-94.237975000000006 33.577756999999998,-94.238867999999997 33.576721999999997,-94.244365999999999 33.573549,-94.251108000000002 33.56528,-94.252330999999984 33.561855,-94.252283000000006 33.560445,-94.251569000000003 33.558188,-94.250197 33.556764999999999,-94.237903999999986 33.552675,-94.233128263729824 33.552212399803537,-94.233017493976078 33.552201670126067,-94.231843999999981 33.552087999999998,-94.226392000000004 33.552911999999999,-94.222920999999999 33.554088,-94.21922099999999 33.556095999999997,-94.213604000000004 33.563133999999998,-94.21268334130005 33.563763266722709,-94.208078 33.566910999999998,-94.205634000000003 33.567228999999998,-94.203593999999981 33.566546000000002,-94.202594978382763 33.562850001484037,-94.201237000000006 33.557825999999999,-94.199485999999993 33.556085000000003,-94.197816999999986 33.555238000000003,-94.196394999999995 33.555123000000002,-94.193247999999997 33.556153999999999,-94.191332999999986 33.55766599999999,-94.189883999999992 33.562454000000002,-94.192482999999996 33.570425,-94.194399000000004 33.573678,-94.196366991504703 33.574779501237479,-94.201105911663163 33.575851400157113,-94.204265191768783 33.575005164570705,-94.207404999999994 33.574353000000002,-94.209665 33.573509999999999,-94.211329000000006 33.573774,-94.216140999999993 33.576391999999998,-94.217408000000006 33.579259999999998,-94.217197999999982 33.580736999999999,-94.214431000000005 33.583187000000002,-94.212997 33.583486999999991,-94.210966999999997 33.583143,-94.205788416261612 33.581380140341984,-94.203588205048902 33.580815984742067,-94.199751933850294 33.581098061448763,-94.196536237091394 33.581718635888464,-94.194464999999994 33.582886000000002,-94.190890999999979 33.587474,-94.183913000000004 33.594681999999999,-94.180879999999988 33.592612000000003,-94.176327 33.591076999999999,-94.162266000000002 33.588906,-94.161081999999993 33.587972,-94.162009999999995 33.580877,-94.161276999999998 33.579270999999999,-94.156782000000007 33.575749000000002,-94.152625999999998 33.575923000000003,-94.148731999999995 33.580196999999998,-94.146047999999993 33.581975,-94.144383000000005 33.582097999999995,-94.142160000000004 33.581389999999999,-94.141852 33.579590000000003,-94.143023999999983 33.577725,-94.145668999999984 33.575599999999994,-94.149506000000002 33.573602,-94.151257 33.571793,-94.151754999999994 33.569476000000002,-94.151455999999996 33.568387,-94.148520000000005 33.565677999999991,-94.145239000000004 33.564987000000002,-94.143401999999995 33.565504999999995,-94.136863999999989 33.570999999999998,-94.136045999999993 33.571387999999999,-94.135142000000002 33.571033,-94.134308000000004 33.569209,-94.133047999999988 33.557952999999998,-94.131382000000002 33.552934,-94.128658 33.550952000000002,-94.126897999999983 33.550646999999991,-94.123897999999997 33.552100000000003,-94.122878999999983 33.553111999999999,-94.12071899999998 33.560555,-94.120354999999989 33.5655,-94.119902152897509 33.566998927274319,-94.112842999999998 33.566991000000002,-94.103176000000005 33.570349999999998,-94.100106999999994 33.57256799999999,-94.097439999999992 33.573718999999997,-94.088943 33.575322,-94.082640999999995 33.575491999999997,-94.072670000000002 33.572234000000002,-94.072231491265512 33.572605318678747,-94.072031926011121 33.573523317998088,-94.072031926011121 33.573846369634623,-94.072031926011121 33.574161925883949,-94.071815412538413 33.574459631515609,-94.071712621294751 33.574600969288895,-94.071353404455635 33.574840447439463,-94.070395493400298 33.574561056392717,-94.069534727631535 33.574169799087244,-94.069517406590393 33.574161925883949,-94.068559493988133 33.573563230894273,-94.068280102941401 33.571966710019424,-94.06782332144887 33.570215714974232,-94.067801146640278 33.570130711574109,-94.066845999999998 33.568908999999998,-94.061283000000003 33.568804999999998,-94.056597999999994 33.567824999999999,-94.056095999999997 33.567252000000003,-94.055662999999996 33.561886999999999,-94.056442000000004 33.560997999999991,-94.059849999999997 33.559249,-94.061179999999993 33.559159,-94.066685000000007 33.560953999999995,-94.067984999999993 33.560960999999999,-94.071719999999999 33.559682000000002,-94.073744000000005 33.558284999999998,-94.073825999999997 33.555833999999997,-94.072156000000007 33.553863999999997,-94.069091999999998 33.553406000000003,-94.06547999999998 33.550908999999997,-94.061896000000004 33.549764000000003,-94.056095999999997 33.550725999999997,-94.051882000000006 33.552585,-94.050211999999988 33.551082999999998,-94.046040000000005 33.551321000000002,-94.043449999999993 33.552253,-94.043428000000006 33.551424999999995,-94.043374999999997 33.542315000000002,-94.043020107474533 33.494534442391668,-94.043008999999998 33.493039000000003,-94.043278999999998 33.491029999999995,-94.043271947583932 33.489425304099555,-94.043188 33.470323999999991,-94.043130608695648 33.460424000000003,-94.043089437732434 33.453322008844353,-94.043061045958495 33.448424427841935,-94.043010021810147 33.439622762252007,-94.042987999999994 33.435823999999997,-94.042987999999994 33.434442436873745,-94.042987999999994 33.431023999999994,-94.042886999999993 33.420225000000002,-94.042890126641851 33.419424334827802,-94.042891364631132 33.419107312620362,-94.042967439944888 33.399626074590046,-94.043053 33.377715999999999,-94.042868999999996 33.371169999999999,-94.043127999999996 33.358756999999997,-94.043066999999979 33.352097,-94.043066999999979 33.347351000000003,-94.043066999999979 33.339614667914582,-94.043066999999979 33.330497999999999,-94.042990000000003 33.271227000000003,-94.043049999999994 33.260903999999996,-94.043003999999996 33.250127999999997,-94.042730000000006 33.241822999999997,-94.042876000000007 33.215218999999998,-94.042891999999995 33.202666,-94.042874999999995 33.199784999999999,-94.042718999999991 33.160290999999994,-94.043184999999994 33.143476,-94.043076999999982 33.138162,-94.043007000000003 33.13389,-94.042951563372725 33.117233519058104,-94.042869999999994 33.092726999999996,-94.043036 33.079484999999998,-94.042963999999998 33.019219,-94.042986850316112 33.007494023677346,-94.043068075862834 32.965815492539427,-94.043087999999997 32.955592000000003,-94.043066999999979 32.937902999999999,-94.043092 32.910021,-94.042884999999998 32.898910999999998,-94.042859000000007 32.892771000000003,-94.042885999999996 32.880965000000003,-94.043025 32.880445999999999,-94.042784999999995 32.871485999999997,-94.042921087938623 32.829694015190334,-94.043025999999983 32.797476000000003,-94.042747000000006 32.786973000000003,-94.042828999999998 32.785277,-94.042937999999992 32.780557999999999,-94.043026999999995 32.776862999999999,-94.042946999999998 32.767991000000002,-94.042974715046569 32.757603400545236,-94.04314699999999 32.693030999999998,-94.042912999999999 32.655126999999993,-94.042779999999993 32.643465999999997,-94.042823999999996 32.640304999999998,-94.042925999999994 32.622014999999998,-94.042929 32.618259999999992,-94.042918999999998 32.610142000000003,-94.042939007208048 32.604544739553475,-94.043082999999996 32.564261000000002,-94.043142000000003 32.559502000000002,-94.043081 32.513612999999999,-94.042884999999998 32.505144999999999,-94.042911000000004 32.492851999999999,-94.043088999999995 32.486561000000002,-94.043071999999995 32.48429999999999,-94.042955000000006 32.480260999999999,-94.042995000000005 32.478003999999999,-94.042901999999998 32.472905999999995,-94.042874999999995 32.471347999999992,-94.042902999999981 32.470385999999998,-94.042907999999997 32.439890999999996,-94.042985999999999 32.435507,-94.042898999999991 32.400658999999997,-94.042923000000002 32.399918,-94.042900999999986 32.392282999999999,-94.042762999999994 32.373331999999998,-94.042738999999997 32.363559000000002,-94.042733519218956 32.277818574933548,-94.042732999999998 32.269696000000003,-94.042732 32.269620000000003,-94.042671451745775 32.225096273752321,-94.042662000000007 32.218145999999997,-94.042600205901905 32.185155675879351,-94.042565999999994 32.166893999999999,-94.042538999999991 32.166826,-94.042591000000002 32.158096999999998,-94.042681000000002 32.137956000000003,-94.042751999999993 32.125163,-94.042337000000003 32.119914,-94.042699999999996 32.056012000000003,-94.042717288248511 32.00695918811028,-94.042720000000003 31.999265,-94.042490448495869 31.997488887291052,-94.042251674184627 31.995641414801661,-94.041832999999997 31.992401999999998,-94.038411999999994 31.992436999999999,-94.029282999999992 31.995864999999998,-94.027080554152732 31.994823406342874,-94.018664 31.990842999999998,-94.011671046736083 31.979908989829021,-94.008352361284565 31.974719974671689,-94.002944198469422 31.966263903968002,-93.995504541226836 31.954631438414648,-93.994147015257326 31.952508844111783,-93.977461000000005 31.926418999999996,-93.971711999999982 31.920383999999995,-93.953546000000003 31.910562999999996,-93.943541310721315 31.908563758569336,-93.938002035663573 31.906916949339585,-93.935007833635339 31.903773037645127,-93.932462763507019 31.895538979891644,-93.931327794714704 31.894581351390723,-93.92767203678045 31.891496810199779,-93.923929283519882 31.889849995167665,-93.919587694495533 31.890748256066246,-93.915948999999998 31.892861000000003,-93.909557114944889 31.893143619429534,-93.905252294448232 31.890856686636408,-93.90476638821832 31.890598549301192,-93.901173350426333 31.885957535142037,-93.901888 31.880063,-93.898135577976262 31.874953416991548,-93.896981462364707 31.873381885463036,-93.889196542313442 31.867692899288475,-93.888241004857136 31.85786451213389,-93.888148571748644 31.856913771406646,-93.887306164689562 31.854968889155742,-93.884117000000003 31.847605999999995,-93.880377455095243 31.844791786271248,-93.879654915472827 31.84424803536659,-93.874821999999995 31.840611000000003,-93.874804231839249 31.835091218914506,-93.874787826198073 31.829994712349503,-93.874761000000007 31.821660999999999,-93.870917000000006 31.816836999999996,-93.868473098390325 31.815251608244314,-93.853390000000005 31.805467,-93.846187999999998 31.802021,-93.839950728453459 31.798597132180646,-93.836868453653821 31.794158659336233,-93.836868453653821 31.791454071635616,-93.836868453653821 31.788733862378688,-93.834649214842401 31.783309060642711,-93.831197070889573 31.780226788232302,-93.827450999999996 31.777740999999999,-93.823442999999997 31.775098,-93.822597999999985 31.773558999999995,-93.826519525540022 31.761832440276638,-93.827342999999999 31.759369999999997,-93.830112066651125 31.754555168030393,-93.830647423185951 31.745811043570992,-93.824579 31.734396999999998,-93.819048075401312 31.72885814427071,-93.818932598107111 31.728523867973351,-93.815657495541259 31.719043310199801,-93.815835943108667 31.711905251886723,-93.815525624652665 31.710796971318612,-93.814600367558683 31.707492480599399,-93.814586782471608 31.707443962415162,-93.811060073548262 31.705827553684028,-93.810303944025605 31.705480994217723,-93.807270273132957 31.704231833580664,-93.806045429297654 31.703104120446881,-93.803419352361757 31.700686292667093,-93.802693549340276 31.697783082925291,-93.802451615781152 31.693186330065117,-93.804479 31.685663999999999,-93.812820813246589 31.676953615984285,-93.81562111199878 31.674029590143711,-93.817425 31.672146,-93.821829497696953 31.673879806810671,-93.822051000000002 31.673966999999998,-93.822341750589956 31.673502431839047,-93.826462000000006 31.666919,-93.8257324849111 31.66154827530681,-93.825660999999997 31.661021999999996,-93.825228912080746 31.660277861177896,-93.81803699999999 31.647891999999999,-93.817707248836442 31.6409111211136,-93.816838000000004 31.622509,-93.818717000000007 31.614555999999997,-93.823976999999999 31.614227999999997,-93.825414416100287 31.615089707767993,-93.827851999999993 31.616550999999998,-93.838056999999992 31.606795000000002,-93.839382999999998 31.599074999999999,-93.837534908858984 31.593743346167731,-93.834924 31.586210999999999,-93.822958 31.568129999999996,-93.822219025006859 31.564792487143556,-93.820763999999997 31.558221000000003,-93.818582000000006 31.554825999999998,-93.798086999999995 31.534044000000002,-93.787687000000005 31.527343999999996,-93.781574079702807 31.525595412174177,-93.780834999999996 31.525383999999999,-93.777170583402579 31.525128039451072,-93.760062000000005 31.523933,-93.753860000000003 31.525331,-93.751899169046524 31.525601857922521,-93.749869902733366 31.526210635456998,-93.746826003263621 31.526007705679731,-93.743376259969125 31.525196002300419,-93.742401241878753 31.523787647735123,-93.74154991556837 31.522557958452786,-93.741111000000004 31.520101,-93.740752889151466 31.518711098615515,-93.740332360499409 31.517078940980245,-93.739317727342822 31.515049678599539,-93.734411826534469 31.513527159467717,-93.733432858180635 31.513223342063657,-93.726736285639134 31.511599931372594,-93.725924582259807 31.504091651519342,-93.728765551952293 31.496786301443361,-93.730997740177827 31.492118989316349,-93.733996137544537 31.48847587643743,-93.737167999999997 31.484621999999998,-93.741884999999982 31.483535,-93.745608448194673 31.481972669547908,-93.746355058504165 31.481633300507966,-93.747840636420193 31.480958036391328,-93.749869902733366 31.478928770078173,-93.749869902733366 31.475276095040186,-93.749626709600278 31.47120988033301,-93.749476 31.468689999999999,-93.709416000000004 31.442995,-93.706857276389258 31.44142369846492,-93.700929751125955 31.437783629836048,-93.697919763270235 31.429300939077926,-93.697603150134782 31.428408665937056,-93.704678 31.418899999999997,-93.704697874245824 31.418107106580852,-93.704878999999991 31.410881,-93.701611 31.409333999999998,-93.695865999999995 31.409391999999997,-93.689953513429003 31.406208353384852,-93.678362516190631 31.399967047179565,-93.675064666986117 31.398191282223291,-93.674659331220113 31.397973024503138,-93.674116999999981 31.397680999999995,-93.671643999999986 31.393352,-93.670181999999983 31.387184,-93.668532759396427 31.379357124595749,-93.668145986696857 31.37510269235548,-93.669064113561134 31.373151679996884,-93.669693055010129 31.371815184369147,-93.669512094168894 31.370548454097019,-93.668919524600994 31.366400452767671,-93.667402247962755 31.365414223393856,-93.665051865060306 31.363886475190469,-93.663891561951601 31.361952641672623,-93.663698175601809 31.360018811902275,-93.664665092360735 31.357698213179859,-93.665825387974422 31.355184231855155,-93.668439000000006 31.353011999999996,-93.669515978941746 31.350266666374935,-93.673736148309771 31.339509006758242,-93.677277000000004 31.330482999999997,-93.687850999999995 31.309835,-93.686922292404276 31.305369360695714,-93.686880000000002 31.305166,-93.686723586265984 31.304979085312567,-93.684737187533131 31.30260533533086,-93.684038999999999 31.301770999999995,-93.683824154244718 31.301752735987076,-93.675439999999995 31.30104,-93.668927999999994 31.297974999999997,-93.657003999999986 31.281735999999999,-93.647719584117951 31.27389987096868,-93.642516 31.269508000000002,-93.632650200244299 31.270182983909681,-93.620343000000005 31.271025000000002,-93.615257056394739 31.261768439618621,-93.61394199999998 31.259374999999995,-93.614287999999988 31.251631,-93.616308000000004 31.244595000000004,-93.616007481020262 31.233959925788763,-93.613835693061347 31.232449117569455,-93.609977782626956 31.229765355202261,-93.609827614285464 31.229660890324059,-93.608033931702224 31.227867209671889,-93.60740940488401 31.227242683526022,-93.605259887151632 31.224152751460338,-93.604319472818304 31.220794125122111,-93.604319472818304 31.215285983654958,-93.607287999999997 31.205403,-93.602442999999994 31.182541,-93.600307999999998 31.176157999999997,-93.598827999999997 31.174679,-93.595531708436056 31.171774432382691,-93.588772842417583 31.16581877494577,-93.588502999999989 31.165581,-93.588046655571759 31.165671453282986,-93.583339301771971 31.166604510813709,-93.579215000000005 31.167421999999995,-93.578993496784307 31.167654977688123,-93.574136071231791 31.172764031170193,-93.569563000000002 31.177574,-93.560942999999995 31.182481999999997,-93.552649000000002 31.185575,-93.548930999999996 31.186601,-93.535096999999993 31.185614,-93.533756450961803 31.184752004501149,-93.533306999999994 31.184463,-93.5330935917342 31.183965183917415,-93.531744000000003 31.180816999999998,-93.533193520062923 31.174490811082034,-93.53417786817559 31.170194787673282,-93.536829999999981 31.158620000000003,-93.540253000000007 31.156578999999997,-93.544009577425854 31.153014849431809,-93.544887639546317 31.148844041597808,-93.544887639546317 31.143136612291205,-93.544701999999987 31.135888999999999,-93.540277800652078 31.128868068802213,-93.539619249807799 31.121843550568837,-93.541375382556595 31.113501939154769,-93.541635919885238 31.113241401693255,-93.548470239502265 31.106407078590973,-93.549716998224596 31.105160319232844,-93.55112206776522 31.099540038044921,-93.551692642249563 31.097257738879012,-93.551034091405285 31.091111287020031,-93.546643772295099 31.082989189009115,-93.540128999999993 31.078002999999995,-93.53104031045666 31.074698717981779,-93.527873992025093 31.072210897922254,-93.526043656150705 31.070772777782928,-93.524020490083288 31.067083472240864,-93.523009982318626 31.065240780256033,-93.523659621286654 31.063941504256789,-93.525329858273139 31.060601035263321,-93.529255791555698 31.057567354514948,-93.532069000000007 31.055264,-93.531218761655126 31.051678447674814,-93.523247999999995 31.037841999999998,-93.516942620821894 31.032584114108545,-93.516407263768343 31.029550433360171,-93.516883288197775 31.024314186160638,-93.516942620821894 31.023661529978199,-93.539525999999995 31.008497999999999,-93.540062152267268 31.008345085566372,-93.540618575989114 31.008186389569964,-93.555580999999989 31.003918999999996,-93.562626264226125 31.00599480945781,-93.566016847371429 31.004567194682853,-93.567979815741779 31.001533515663564,-93.569764334642755 30.996715319472376,-93.571101253513504 30.991033414001794,-93.571905755076102 30.987614282198351,-93.567971999999997 30.977981,-93.560533000000007 30.971285999999999,-93.55046299120518 30.967360467203815,-93.549841 30.967117999999996,-93.539153617393822 30.956968324013513,-93.532549000000003 30.950695999999997,-93.526524876707626 30.939912016599852,-93.526293050708773 30.939497017171423,-93.526245000000003 30.939411,-93.526242458076936 30.939167805401102,-93.526231146824912 30.938085618677029,-93.526146999999995 30.930035,-93.526269219450654 30.929894609689271,-93.530935999999983 30.924533999999998,-93.542488999999989 30.920064,-93.54502991280485 30.920837107400992,-93.546884259495414 30.92151141825828,-93.549244331161987 30.921005686748707,-93.550358562122057 30.920030731622223,-93.551941554990407 30.918645608548566,-93.555650241837967 30.911228247920597,-93.555751501305451 30.910053639118178,-93.555774257662236 30.909789665608852,-93.556493125509377 30.9014508058257,-93.562447641167196 30.896531852982324,-93.563812214002311 30.895404595987301,-93.564247644832776 30.895044891882932,-93.567787752332634 30.888301832311882,-93.567450600170787 30.878524390216981,-93.566008182600839 30.875519355165832,-93.565853452041281 30.875197,-93.565427680666076 30.874309976760035,-93.563763247930751 30.87311591407202,-93.559394659034922 30.869981891957959,-93.55904186947815 30.86972880101742,-93.558616999999984 30.869423999999999,-93.558608112367665 30.868835818489011,-93.558593354020289 30.867859114376206,-93.558393833586933 30.854654896933653,-93.558352334289978 30.851908482785802,-93.558231866260058 30.843935935637496,-93.558171999999999 30.839973999999998,-93.553625999999994 30.835139999999999,-93.55374115920948 30.832414921630001,-93.554057 30.824940999999995,-93.561666000000002 30.807738999999998,-93.563243 30.806218000000005,-93.564501487304341 30.805543276361082,-93.569303000000005 30.802969,-93.578395 30.802046999999998,-93.584264999999988 30.796662999999995,-93.588934854633479 30.787551489258888,-93.589380999999989 30.786681000000002,-93.589895999999996 30.77776,-93.591925627378814 30.768225181611253,-93.592827999999997 30.763985999999996,-93.607757000000007 30.757656999999995,-93.611581311334461 30.752392350515215,-93.615058988962588 30.747604886281291,-93.619129 30.742001999999996,-93.617688 30.738479000000005,-93.609908791486006 30.729403419430973,-93.609718999999998 30.729181999999998,-93.609544 30.723138999999996,-93.61030547238029 30.720788970554505,-93.611192000000003 30.718053,-93.61618399999999 30.713980000000003,-93.616977218405893 30.712276394979256,-93.620773999999997 30.704122000000005,-93.621061387132315 30.696047232392139,-93.621092999999988 30.695159,-93.62235785978659 30.692974242186811,-93.629903999999996 30.679939999999995,-93.632922525899005 30.677439880221801,-93.638212999999993 30.673057999999997,-93.646373493696458 30.671658473870171,-93.653439445062318 30.670446661945991,-93.654970999999989 30.670183999999999,-93.666219386787546 30.661299653678171,-93.670353999999989 30.658033999999997,-93.670860468306827 30.657347728689221,-93.683099999999996 30.640763000000003,-93.685120999999981 30.625201,-93.684323003112922 30.617258061147268,-93.683396999999985 30.608040999999997,-93.680812614601606 30.602993111696524,-93.680648411741274 30.602453589051585,-93.679828117977763 30.599758343304948,-93.681234543283509 30.596101640780542,-93.683902548646543 30.593069810094963,-93.684328672415049 30.59258557751615,-93.684347894395486 30.592579170189346,-93.687282162286593 30.59160108089231,-93.689533999999995 30.592759,-93.692869000000002 30.594382000000003,-93.712453999999994 30.588479,-93.72107859525056 30.580404159651369,-93.727657631584904 30.574244488790981,-93.727844000000005 30.574069999999995,-93.727840097341868 30.573768021870688,-93.72780696123904 30.571204031383882,-93.727747245613443 30.566583382517752,-93.727745999999996 30.566486999999999,-93.725846999999987 30.556978,-93.728764326223569 30.546403128121515,-93.729195000000004 30.544841999999999,-93.736587760607577 30.541316766984647,-93.740252999999996 30.539569,-93.738909526480768 30.537838512460276,-93.732793 30.529960000000003,-93.727721000000003 30.525671000000003,-93.718711305261792 30.520890798500346,-93.714321999999996 30.518561999999996,-93.710116999999997 30.506399999999996,-93.713193644304937 30.50058809182816,-93.716678000000002 30.494005999999995,-93.71365216083376 30.483878530555742,-93.711446941284677 30.476497671106777,-93.710595424186792 30.473647647388944,-93.709703157003446 30.47066123332699,-93.708899372668625 30.467970970942378,-93.705844999999997 30.457747999999999,-93.697828 30.443837999999996,-93.6978 30.440583,-93.698862234241474 30.438260713588438,-93.702220303997905 30.430919206922557,-93.702664999999996 30.429947000000002,-93.722313999999997 30.420729,-93.729486046484141 30.413342592858086,-93.738025291703323 30.404548123662593,-93.738321805525445 30.404242747530638,-93.745333000000002 30.397022,-93.751243378615428 30.396311282781173,-93.751436999999996 30.396287999999998,-93.754787283332149 30.393127406185759,-93.75746720581121 30.390599218098316,-93.757654000000002 30.390422999999995,-93.757872622462301 30.389610210267922,-93.758470934573069 30.387385818798332,-93.75855399999999 30.387077,-93.758091991038413 30.3842338214119,-93.758032188807945 30.383865801664729,-93.757931393201204 30.383245510859378,-93.75589426835937 30.370709152880856,-93.756044740613035 30.365928314513319,-93.75610723110799 30.3639428524199,-93.756352000000007 30.356166000000002,-93.758519945992674 30.350935458285047,-93.760658351649255 30.34577618769989,-93.763244572034736 30.339536487238696,-93.765822 30.333317999999995,-93.764264999999995 30.330222999999997,-93.760690955159149 30.32995156504764,-93.760328 30.329923999999998,-93.747921244232074 30.314935395431327,-93.743830002049762 30.309992764786195,-93.741160171732417 30.306767342150266,-93.738698999999997 30.303793999999996,-93.734966161369201 30.301561360829975,-93.729390287632427 30.298226388348422,-93.724220000000003 30.295133999999997,-93.718684474451791 30.295009979388311,-93.714319430116035 30.294282471059141,-93.71311219174963 30.293184979315004,-93.711118400234781 30.291372437742464,-93.709949692759622 30.289928741213533,-93.708644873043468 30.288316906143507,-93.708448001046747 30.287627854154977,-93.707590519980414 30.284626670422831,-93.706607851977495 30.281187332412603,-93.706635817233519 30.280914670488997,-93.707189856385114 30.275512775340033,-93.709131999999997 30.271826999999995,-93.707538803456245 30.253087036355307,-93.707271000000006 30.249936999999996,-93.705637767078656 30.244573755694763,-93.705083000000002 30.242751999999996,-93.707646217538425 30.23733474070027,-93.713358999999997 30.225261,-93.71802168481895 30.219915738218987,-93.719219999999993 30.218541999999999,-93.720945999999998 30.209852,-93.717397000000005 30.193439,-93.710467999999992 30.180670999999997,-93.706634735424259 30.17682001000631,-93.705927274531248 30.176109277739844,-93.705791510460429 30.175972885881706,-93.703764000000007 30.173936,-93.703646997347349 30.173527735424756,-93.702964616901454 30.171146663230584,-93.701744610591902 30.166889619937699,-93.701686103512344 30.166685467574972,-93.697748000000004 30.152943999999998,-93.696083741705934 30.150925109485563,-93.688211999999979 30.141376,-93.69286799999999 30.135216999999997,-93.69498 30.135185,-93.698276000000007 30.138608000000005,-93.700984936503929 30.137486558544058,-93.701251999999997 30.137376,-93.7012922571502 30.136537706048752,-93.701585086407604 30.130439981942867,-93.701656556414648 30.128951727699913,-93.701742498922442 30.127162105630983,-93.701985639262489 30.122099077688652,-93.702366286953335 30.114172668214064,-93.702403861450691 30.11339023643033,-93.702436000000006 30.112720999999997,-93.70268530105453 30.112503701678254,-93.704703872918159 30.110744253531749,-93.710410303455276 30.105770356484715,-93.714491639657382 30.10221294069715,-93.723764999999986 30.094129999999996,-93.727140999999989 30.092110594495406,-93.7293848599641 30.090768395691203,-93.72996305770063 30.09042253796256,-93.732484999999997 30.088913999999995,-93.734084999999979 30.086129999999997,-93.731705540540531 30.081478540540548,-93.731605000000002 30.081282000000002,-93.729179922109864 30.079341937687897,-93.727017487667368 30.077611990133899,-93.71640499999998 30.069121999999997,-93.716151269697463 30.069056930886212,-93.707507094464489 30.066840132907302,-93.702179999999998 30.065473999999995,-93.700580000000002 30.063666,-93.699479012508235 30.0595596142199,-93.699395999999993 30.059249999999995,-93.699786698153744 30.05843348475733,-93.700658293446523 30.056611948527472,-93.700819999999993 30.056273999999998,-93.702099264262131 30.055460929156467,-93.703267223154896 30.054718601437116,-93.703940000000003 30.054290999999999,-93.704473210548429 30.054251542735575,-93.709782747672762 30.053858640136632,-93.710785394684464 30.05378444485228,-93.720804999999999 30.053042999999995,-93.729054152595779 30.045230570163486,-93.729990027439044 30.044344241966268,-93.737446000000006 30.037282999999999,-93.739158000000003 30.032626999999998,-93.739733999999999 30.023987000000002,-93.741078000000002 30.021571000000002,-93.744068611359822 30.019549890100706,-93.74834924745744 30.01665695787004,-93.753252045558341 30.013343557169065,-93.766227014667976 30.004574835541469,-93.782835629207284 29.993350429819579,-93.786934999999986 29.990579999999998,-93.789430999999993 29.987812000000002,-93.803328792953494 29.962666096659486,-93.807814999999991 29.954549,-93.813734999999994 29.935126,-93.816550000000007 29.920725999999995,-93.818997999999993 29.914822,-93.830374000000006 29.894358999999998,-93.838374000000002 29.882854999999999,-93.853129483564672 29.866348149842587,-93.854474509531912 29.864843479256791,-93.855140000000006 29.864098999999996,-93.857517787207271 29.862146563102172,-93.862474802662518 29.858076283033213,-93.863569999999996 29.857177,-93.864820388168837 29.856398395289631,-93.872445999999997 29.851650000000003,-93.890679000000006 29.843159000000004,-93.900728 29.836967,-93.911111176241661 29.828996955749506,-93.916359999999997 29.824967999999998,-93.922743999999994 29.818808,-93.927992000000003 29.809640000000002,-93.929208000000003 29.802952,-93.928808000000004 29.79708,-93.926503999999994 29.789559999999998,-93.922407000000007 29.785048,-93.898470000000003 29.771576999999997,-93.893861999999999 29.767289000000002,-93.890820999999988 29.761672999999995,-93.891780610698319 29.758916671398389,-93.892526767476923 29.756773455119472,-93.893828999999997 29.753032999999999,-93.891732576672823 29.744984915009951,-93.891637000000003 29.744618000000003,-93.891484462723341 29.744488863328282,-93.888820999999993 29.742234000000003,-93.873941000000002 29.737770000000005,-93.870019999999997 29.735482,-93.863203999999996 29.724059,-93.837970999999982 29.690618999999998,-93.852868 29.675885,-93.866980999999996 29.673085,-93.889989999999997 29.674012999999999,-93.930999999999997 29.679611999999999,-93.955443390383635 29.680262610936268,-93.955453232202885 29.68026287289646,-93.991585827226885 29.681224615973395,-94.000169999999997 29.681453101326589,-94.000222586816207 29.681454501032487,-94.001406000000003 29.681486,-94.010062765207763 29.679864152681674,-94.056505999999999 29.671163,-94.132576999999984 29.646217,-94.354166823921716 29.561457673765378,-94.370794193562546 29.555097613439198,-94.391123278008692 29.54732162684321,-94.45341877657637 29.523493256060661,-94.456196753642018 29.522430664556182,-94.45805240375158 29.521720868184531,-94.499046371673685 29.506040450016997,-94.499089575343746 29.506023924375612,-94.500455432020999 29.505501476685335,-94.500806999999995 29.505367,-94.552043946167103 29.48495633977835,-94.552044379602123 29.484956167115939,-94.568074121423052 29.478570587212708,-94.593696728539513 29.46836361027578,-94.594852999999986 29.467903,-94.599458690353401 29.465813271763974,-94.62931993394271 29.452264405230761,-94.631084 29.451464,-94.634656044789836 29.449584234717392,-94.661528069434993 29.435443006940758,-94.670389 29.430779999999999,-94.674924987623086 29.427889211977174,-94.680871144138621 29.42409972235215,-94.694158000000002 29.415631999999999,-94.708472999999998 29.403049000000003,-94.723958999999979 29.383268000000005,-94.730956033155138 29.369322304827527,-94.731047000000004 29.369140999999996,-94.731324722869132 29.369141342444962,-94.731537324603394 29.369141604592603,-94.742750849251038 29.369155431380086,-94.744595216508316 29.369157705569055,-94.744833999999997 29.369157999999999,-94.761491000000007 29.361882999999999,-94.772184717669788 29.3616343088914,-94.778690999999995 29.361483,-94.780073439975141 29.362532749099824,-94.782355999999993 29.364266,-94.782645420567292 29.368514320481975,-94.783130999999997 29.375641999999996,-94.766847999999996 29.393488999999999,-94.754099999999994 29.400999999999996,-94.743385419572206 29.410035318862811,-94.73704402931665 29.415382843516582,-94.727822669267709 29.423158969605012,-94.723817999999994 29.426535999999995,-94.716270519001597 29.430976788539081,-94.706539419927282 29.436702374764607,-94.706364999999991 29.436804999999996,-94.686385999999999 29.466508999999995,-94.681540999999996 29.471388999999999,-94.672399999999996 29.476842999999999,-94.665852999999998 29.478401000000002,-94.656737000000007 29.478032999999996,-94.645948000000004 29.473769,-94.628217000000006 29.475986000000002,-94.608557000000005 29.483344999999996,-94.594211 29.492127,-94.595122262498009 29.503650874486677,-94.595439999999996 29.507669,-94.591407000000004 29.513857999999999,-94.580274000000003 29.525295,-94.566674000000006 29.531987999999995,-94.553989999999985 29.529558999999999,-94.546993999999998 29.524379,-94.532347999999999 29.5178,-94.511044999999996 29.519649999999995,-94.495024999999984 29.525030999999998,-94.503428999999997 29.543249999999997,-94.509486999999993 29.542589999999997,-94.523742999999996 29.545987,-94.523871183237745 29.546315590042923,-94.5261306113389 29.55210749848424,-94.526336 29.552633999999998,-94.542531999999994 29.568999999999999,-94.546193009360195 29.571896121601313,-94.546385 29.572047999999995,-94.546803832691651 29.57214903106096,-94.55398799999999 29.573882,-94.570006000000006 29.572232,-94.578210999999982 29.567281,-94.593518000000003 29.561319,-94.625889999999998 29.552807999999999,-94.634988842169335 29.550728838088908,-94.643914431984982 29.54868926579681,-94.666855093063802 29.543447131924982,-94.691625000000002 29.537787000000002,-94.693243673136905 29.537529479678042,-94.718275999999989 29.533546999999995,-94.740699000000006 29.525857999999999,-94.757688999999999 29.524616999999999,-94.768675999999999 29.525659,-94.780938000000006 29.531093000000002,-94.785987568065153 29.540133852805589,-94.789123822994313 29.545749069554745,-94.789562096440733 29.546533763545689,-94.78971899677407 29.546814681200559,-94.790604999999999 29.548400999999998,-94.779438999999996 29.549472000000002,-94.772471009935998 29.548613672580952,-94.771052999999995 29.548438999999995,-94.762972090755014 29.555767305595641,-94.75523699999998 29.562781999999999,-94.750081379755628 29.56810096117977,-94.734626000000006 29.584046,-94.731874420576986 29.588423440241069,-94.724443803393115 29.600244680945409,-94.708741000000003 29.625226,-94.705273448792255 29.640626536822896,-94.703938528752261 29.6465553563269,-94.702680930363101 29.65214076491651,-94.702542126991759 29.652757236398369,-94.699660909360375 29.665553672721437,-94.69780371146922 29.673802100155214,-94.694887994254785 29.686751760487848,-94.693153999999993 29.694452999999999,-94.692434000000006 29.70361,-94.692611750388934 29.704808689927841,-94.695098387970873 29.721577752663908,-94.695317000000003 29.723051999999999,-94.695611486157915 29.72357178078331,-94.697558868014866 29.727008993840069,-94.705700105090941 29.741378628781629,-94.713878412983604 29.755813695314995,-94.714586470042065 29.757063446593907,-94.722078339612551 29.770286919851305,-94.724615999999983 29.774766,-94.735270999999997 29.785433,-94.738125273271791 29.786265833277604,-94.740919000000005 29.787080999999997,-94.749144589762409 29.783534045463153,-94.75591801041729 29.780613280409739,-94.771512 29.773888999999997,-94.792237999999998 29.767432999999997,-94.798897371247961 29.764438558858895,-94.816085 29.756710000000002,-94.81943931055217 29.753325616252695,-94.823987131664666 29.748737021482022,-94.851107999999996 29.721373000000003,-94.856932183541645 29.710462974624775,-94.860426638443812 29.703917062844585,-94.864167858487249 29.696908903620852,-94.865007000000006 29.695336999999999,-94.865123196353878 29.694545038919138,-94.867438000000007 29.678768000000002,-94.872550999999987 29.67125,-94.893107 29.661335999999999,-94.915413 29.656613999999998,-94.921317999999999 29.658177999999999,-94.928410408640929 29.669495826038883,-94.930071799099807 29.672147016790593,-94.930110565443542 29.672208878811933,-94.930656833967475 29.673080595662611,-94.931474856161643 29.67438596783704,-94.934166999999988 29.678681999999998,-94.935264231405057 29.686686879688732,-94.935319060033862 29.687086883348073,-94.935997030967087 29.692033037575822,-94.936088999999996 29.692703999999999,-94.936280063994801 29.692851065945039,-94.941277009519624 29.696697319220664,-94.942680999999993 29.697778,-94.942922907078852 29.697804516058127,-94.95311095436017 29.698921254167477,-94.965343618259496 29.700262107971746,-94.965962999999988 29.70033,-94.972666000000004 29.684869999999997,-94.980123280315652 29.679059463608382,-94.986438191421769 29.674139034277729,-94.988580124776774 29.672470090483102,-95.001800051879343 29.662169436052462,-95.002396227716986 29.661704909944582,-95.005398 29.659365999999995,-95.011683000000005 29.649802000000005,-95.013860566469219 29.644103309100927,-95.014229369455222 29.643138151779844,-95.015636 29.639457,-95.015582911847446 29.639202042718885,-95.014543866006605 29.634211997110764,-95.013498999999996 29.629193999999998,-95.006633444897872 29.623869765921089,-95.00056235200779 29.61916163683599,-95.000370188745762 29.619012614335521,-94.997782627529062 29.617005962082896,-94.997731096758997 29.616965999999998,-94.995478872439179 29.615219401320278,-94.993499353954022 29.613684285860323,-94.988871000000003 29.610095,-94.988045541621688 29.608923290953985,-94.982835617337045 29.60152798723708,-94.982705999999993 29.601344000000005,-94.982886347998431 29.601051719777942,-94.983895794498991 29.599415764569699,-94.98693593300419 29.594488776939745,-94.988992999999994 29.591155,-94.991605757589539 29.588791109774153,-94.991811610459919 29.588604864563266,-94.992208959522046 29.588245363334387,-95.006677600766466 29.575154872369662,-95.007235451984087 29.574650156950938,-95.007670000000005 29.574256999999996,-95.00815781845921 29.573398130166158,-95.016627 29.558487,-95.018253 29.554884999999999,-95.016926355758628 29.548485488141377,-95.015164999999996 29.539988999999998,-95.012091452887788 29.536262245236642,-95.011587670186657 29.535651395780732,-95.011086587278399 29.535043819893005,-95.001666768519442 29.523622047865974,-94.999580999999992 29.521093,-94.989064037839412 29.515168017977793,-94.982063906682782 29.511224326765198,-94.981915999999998 29.511140999999995,-94.981645984265953 29.511070508097891,-94.961088181447877 29.505703566689924,-94.958443000000003 29.505013000000002,-94.958183821928699 29.504969740154092,-94.957844913785792 29.504913172428417,-94.95747910332102 29.504852114391142,-94.955724072517796 29.504559179260749,-94.952845264169682 29.504078672538427,-94.930551536860648 29.500357589179547,-94.927405495678158 29.499832478177321,-94.909464999999997 29.496837999999997,-94.913072085311995 29.488019044482122,-94.913385000000005 29.487254,-94.917178632618899 29.481741136316387,-94.925104227340569 29.470223752399235,-94.925293406029382 29.469948840084836,-94.925914000000006 29.469047,-94.930860999999993 29.450503999999999,-94.923011455799639 29.448810114938265,-94.920334997737442 29.448232551169699,-94.919400999999993 29.448030999999997,-94.916063708203708 29.446327523795176,-94.890799999999984 29.433432,-94.888257132054065 29.420136433311271,-94.887299999999996 29.415132,-94.887087039327696 29.40154064293051,-94.886938304445962 29.392048238229908,-94.886925408340758 29.391225196262944,-94.886904215833582 29.389872669858736,-94.886764190565785 29.380936121184895,-94.886591910643261 29.369941049100753,-94.886536208040312 29.366386054846032,-94.886982892003275 29.364738908620176,-94.888420210858001 29.359438798199445,-94.888544709543254 29.358979709544975,-94.888781730376067 29.358105695694917,-94.894234145274325 29.337999926591962,-94.894147383920654 29.327241695272729,-94.894002695197727 29.309300588032027,-94.893993580875261 29.308170430590454,-94.891329624021282 29.304475264201969,-94.888683946869179 29.30080545353194,-94.886599269217157 29.297913803549264,-94.886536208040312 29.297826331584119,-94.885816422022174 29.297499155955627,-94.884216982863776 29.296772137788121,-94.876917125093229 29.293454018939102,-94.875951551627523 29.293015121686942,-94.86617837453683 29.293883848703121,-94.865126326153927 29.293977364132552,-94.861112574100105 29.294855372432302,-94.849730461009372 29.297345209778594,-94.825607939204673 29.30577638202961,-94.824952733476934 29.30600538596191,-94.823862547308252 29.313200608971236,-94.822547126780194 29.321882377573708,-94.82230657170463 29.344254498409398,-94.810695999999993 29.353434999999998,-94.797913847039041 29.344567105809805,-94.79693012269928 29.343884625840758,-94.784895000000006 29.335535,-94.779995 29.334935000000002,-94.777063999999996 29.336811,-94.773074869484503 29.336485139838025,-94.745528999999991 29.334235,-94.744945 29.33641,-94.731319999999997 29.338066,-94.722529999999992 29.331445999999996,-94.731082 29.331833,-94.769694999999999 29.304936,-94.780304129101268 29.295750693651897,-94.786095000000003 29.290737,-94.793321795438203 29.286014946162535,-94.795651468635626 29.284492716516493,-94.803695000000005 29.279236999999998,-94.809348860129617 29.275904173901317,-94.81020919937113 29.275397022855465,-94.819018398045671 29.270204194137058,-94.82210781776098 29.268383049216432,-94.825036245866656 29.266656805306088,-94.825782574142963 29.266216861214712,-94.826962003659688 29.265521613475173,-94.833188167130103 29.261851427154124,-94.844390135018429 29.255248113651685,-94.870677905110114 29.23975205180561,-94.881596387366812 29.233315846843187,-94.896165027201874 29.224727954332334,-94.925556066041452 29.207402583865772,-94.927613957028456 29.206189502425392,-94.940693735267132 29.198479261054111,-94.968741214129224 29.181945889621023,-94.978383546115566 29.176261947153485,-94.981700088962569 29.174306918145966,-95.026218999999998 29.148064000000002,-95.076832914261459 29.114498139229923,-95.081772999999998 29.111222,-95.084611040272236 29.108948681405003,-95.100241410561338 29.096428488590096,-95.110484 29.088224,-95.116308293211759 29.081343778536318,-95.119264367911811 29.077851775668329,-95.119484217932538 29.077592067446851,-95.122403192505772 29.074143890856067,-95.122524999999996 29.074000000000002,-95.122638295373392 29.073709965581063,-95.125134000000003 29.067321,-95.183550616106302 29.028323983126334,-95.191390999999996 29.023089999999996,-95.192301227546167 29.02243038040822,-95.237672480263356 28.989550945676651,-95.238923999999997 28.988644,-95.240558404572027 28.987315672512366,-95.251568580535192 28.978367386619187,-95.251619678822578 28.978325857575001,-95.272266000000002 28.961545999999995,-95.29656403895315 28.934716691525271,-95.297146999999981 28.934073,-95.309703999999996 28.928262,-95.334686660244515 28.911063042846731,-95.353450999999993 28.898145,-95.376979000000006 28.876159999999999,-95.377903963555724 28.874482723635413,-95.38239 28.866347999999999,-95.416173999999998 28.859482,-95.436326577581042 28.85908617652915,-95.439594 28.859022000000003,-95.449516932572138 28.854239851149391,-95.480746000949352 28.839189657836059,-95.485144835951402 28.837069731735976,-95.486768999999995 28.836286999999995,-95.506945757563287 28.824808612805594,-95.536465934189138 28.808014833314715,-95.564052739104355 28.79232093268277,-95.564094788066555 28.792297011382839,-95.564132228771385 28.792275711681647,-95.568135999999981 28.789997999999997,-95.576201168007842 28.785870627961152,-95.606319447682353 28.770457515020929,-95.613122366343802 28.766976102576891,-95.695711236705606 28.724711019702028,-95.715243498124195 28.714715330888584,-95.812504000000004 28.664942,-95.854124934570734 28.646410960033691,-95.884026000000006 28.633098,-95.920915435374582 28.618912188118028,-95.97832748198536 28.596834417485056,-96.000681999999983 28.588238,-96.000998496292368 28.588108377001081,-96.024040703743012 28.578671299526803,-96.035336417502748 28.574045070633311,-96.05294532761279 28.566833233429691,-96.077867999999995 28.556625999999998,-96.194412 28.502223999999998,-96.220123346321373 28.492065891861738,-96.220376184174313 28.491966,-96.226882700448613 28.487451845000788,-96.241923733725443 28.477016528665938,-96.244750999999994 28.475055,-96.270391000000004 28.461929999999999,-96.303212000000002 28.441870999999999,-96.321560000000005 28.425148,-96.328817 28.423658999999997,-96.341616999999999 28.417333999999997,-96.371116999999998 28.397660999999999,-96.372100999999986 28.393874999999998,-96.370716999999985 28.387667,-96.378616389014681 28.383909329746462,-96.379349732835649 28.386024690464755,-96.381702691108558 28.392811896356477,-96.381863685354148 28.393276290946375,-96.375880899310658 28.401794149460329,-96.37413840285555 28.404274990018202,-96.340801887331921 28.432913073072363,-96.338559687910475 28.434839257985413,-96.335119195902806 28.437794848703732,-96.312964581561445 28.451131053409146,-96.280819757359396 28.470480970729877,-96.274497619264608 28.474286648703266,-96.268341347214189 28.477992481854848,-96.252027698910211 28.484249764669329,-96.250247000000002 28.484932771712327,-96.223824788704931 28.495067307260509,-96.218978121459415 28.500382701101032,-96.21505000939203 28.509679222336811,-96.145447855080619 28.544740658174199,-96.10473518795402 28.559498996555909,-96.046210731424992 28.586980036018211,-96.032979113622659 28.589015683181284,-96.007533711461477 28.59970275682273,-95.986159544454679 28.60631857558586,-95.982088289576367 28.614461085342473,-95.98565064745685 28.621076904105603,-95.983106103295938 28.641942154390655,-95.97852589224803 28.650593590730978,-95.986065974637228 28.655467849280154,-95.996337701374344 28.658736120211515,-96.002953500413568 28.656191585912577,-96.006515878017979 28.648049056432036,-96.010005951759737 28.648641710656278,-96.010506546843942 28.648726717396318,-96.011440067305529 28.648885239790378,-96.014343010193883 28.649378192516537,-96.026200716522851 28.65139176594381,-96.03348799089656 28.652629228032097,-96.039323368019012 28.651170385770797,-96.047737442142406 28.649066870151618,-96.049244844336243 28.648218956037223,-96.052682972641108 28.646285007998213,-96.05836686193534 28.643087818836001,-96.072165030584017 28.635326345489485,-96.092812363862251 28.627145317384699,-96.098878916233431 28.624741586366319,-96.099137163186526 28.624639261986079,-96.099760206508392 28.62447226081035,-96.102639895829256 28.623700385909448,-96.141413249033207 28.613307536255487,-96.148501276515404 28.611407654045699,-96.187178316202875 28.593595864643298,-96.198374286842139 28.586980055742131,-96.221784081288092 28.580364246840958,-96.228908787187095 28.580873158631725,-96.233997875508891 28.596649310733014,-96.233997875508891 28.601738394123839,-96.222292978285921 28.607336389305434,-96.214150448805384 28.613443281484855,-96.212623728226021 28.62260364440889,-96.2309444244882 28.64143324753087,-96.208552463485731 28.662298487953962,-96.214659365527126 28.665351929112688,-96.192267404524671 28.68774389011514,-96.1912495908051 28.694359708878277,-96.195829762405154 28.698939880478335,-96.202445561444364 28.700975507917487,-96.208747675276499 28.700187749031503,-96.21684000834783 28.699176214258408,-96.221467818495611 28.69859774191346,-96.222801895007663 28.698430983480506,-96.223384071149837 28.698294,-96.224163927167865 28.698110503315906,-96.227000018566372 28.697443183508955,-96.229623268039219 28.696825944469072,-96.231453341209956 28.69639533631743,-96.233964222112746 28.695240331316239,-96.23422531976 28.695120226420762,-96.234426397558138 28.695027730650764,-96.243315632596989 28.690938683290845,-96.256898753233088 28.684690448956413,-96.263514562134276 28.683672635236839,-96.268603640594122 28.688761723558645,-96.287942160437836 28.68316371851509,-96.304227224329892 28.671458831154069,-96.305245042980445 28.660262850652849,-96.303866760710434 28.646480081370939,-96.303718312539132 28.644995605411349,-96.322902111893882 28.641863561491792,-96.322903115546453 28.641863397630402,-96.328654788116609 28.640924350533034,-96.373438710121519 28.626674919011112,-96.376492171004159 28.620059100247982,-96.384634680760783 28.615987845369677,-96.473693647496702 28.573239550803915,-96.48794308888057 28.569677192923439,-96.482854000558774 28.580364266564878,-96.480309456397848 28.596649335387912,-96.485907441717487 28.60784531588914,-96.490487633041468 28.610898766909834,-96.510843966604781 28.614970031650095,-96.510335069606953 28.617514575811001,-96.497612348802434 28.625148188569788,-96.496594535082863 28.630746183751381,-96.49964797624159 28.635835272073191,-96.506263795004728 28.638379806372129,-96.513590449607946 28.639711925390898,-96.518002756430107 28.640514162994929,-96.524548246905439 28.641704252172264,-96.541744210187403 28.644830790950802,-96.545449731689985 28.645504522133091,-96.555118991611849 28.64601343885484,-96.5632615210924 28.64448670841351,-96.564664053901609 28.647882315216158,-96.572092291837293 28.665866475800886,-96.572930781014264 28.667896502859467,-96.570386236853366 28.674003385176928,-96.559190266214102 28.687235002979271,-96.559699163211917 28.6913062775815,-96.561225893653244 28.696395346179383,-96.566823878972883 28.697922096344637,-96.575158129308363 28.702846874961025,-96.578019859474111 28.704537895383844,-96.57828826199534 28.705826226653553,-96.579938546079447 28.713747585140421,-96.580564403635009 28.716751699466613,-96.584126761515478 28.722858581784067,-96.584439828543964 28.722940967911413,-96.591359183115401 28.724761852179114,-96.593796021437342 28.725403125944972,-96.611342043876562 28.720366765465901,-96.616906294097589 28.718769618875786,-96.625254999999996 28.716373230030175,-96.632357663078409 28.714334501780041,-96.638120426114043 28.71268037463507,-96.643733366943522 28.711069252030907,-96.64589364157122 28.710449172933409,-96.648758110223909 28.709626963981723,-96.65548660082564 28.704200766225345,-96.664534272187169 28.696904262901135,-96.657918463285995 28.687743919701024,-96.642136214348383 28.67476740345478,-96.635017595423747 28.668914316579048,-96.634564255386636 28.662567599984854,-96.634358790297441 28.659691108644115,-96.634304719917793 28.658934128568227,-96.633999771842213 28.654664885057134,-96.627892869800831 28.650084693733149,-96.626425176648581 28.649921620227584,-96.623312698200763 28.64957579673532,-96.621378075676532 28.648286046719594,-96.615940371111847 28.64466090565978,-96.615679075580019 28.64448670841351,-96.614055987266909 28.642701311583636,-96.613585709918453 28.642184006591457,-96.613038272810982 28.641581825879328,-96.612716570908134 28.641227953848528,-96.611999586497333 28.640439271135588,-96.610589997120172 28.638888723093881,-96.610589997120172 28.638695619081329,-96.610589997120172 28.63634418879494,-96.61975034032028 28.62769274259265,-96.620390401117646 28.626519297452973,-96.620672695530928 28.626001757543317,-96.621575870071126 28.624345937066781,-96.622336527533278 28.62295139797671,-96.622803791340985 28.622094747411062,-96.621924089240224 28.619379144726071,-96.621515564809087 28.618118047314677,-96.621338841511317 28.617572510068054,-96.620571817957583 28.61520474122884,-96.620437729127232 28.614790814755992,-96.617253050911174 28.604959849584038,-96.615239196090883 28.598743166058551,-96.614649885719274 28.596923990196654,-96.613008078443599 28.591855801497097,-96.611528402529856 28.587288105363601,-96.611113505533794 28.586007336117376,-96.611098903979951 28.585962261746474,-96.608298572876635 28.583628658523324,-96.608045443097311 28.583417717585569,-96.607377235577218 28.583437664220053,-96.600365219155734 28.58364697962633,-96.593251058093557 28.583859344147964,-96.573948594733835 28.584435541167107,-96.565297148531556 28.582399903865994,-96.564279334811971 28.57629300182461,-96.563658896232639 28.575155527088082,-96.562968608029692 28.573889994257026,-96.561225893653244 28.570695006643017,-96.557566061723506 28.569051817003789,-96.543745727976315 28.562846769979732,-96.536289388489891 28.559499026141786,-96.535271536438941 28.559346348925885,-96.526111211846271 28.557972305562419,-96.524846286909124 28.55686549700842,-96.523547686998668 28.555729222873186,-96.522039937244045 28.554409942750958,-96.516783301381025 28.541093122164042,-96.514406314623301 28.535071417976255,-96.512075206364955 28.532603188828926,-96.505754868421008 28.525911074776143,-96.496773944100411 28.520225902118948,-96.493684489370622 28.518270192113103,-96.482894459981281 28.511439806078794,-96.464303363514816 28.49967112954555,-96.450283853050735 28.49079639296917,-96.41974938229167 28.46738661824714,-96.410828816467941 28.459457253614527,-96.410588999643707 28.459244083835621,-96.409758652296418 28.458206146634446,-96.408886828651134 28.457116363910039,-96.40506625078595 28.452340627696451,-96.402446489887097 28.449065917053971,-96.402758256176753 28.447714917044181,-96.403973200604497 28.442450108152798,-96.407195206365273 28.441281062045864,-96.417343901660857 28.437598792799108,-96.461479843413926 28.421584870195201,-96.476120924474287 28.411702150055138,-96.481836236149007 28.407844318412668,-96.504737094149291 28.397666161492985,-96.511137484289378 28.396220910815867,-96.520513236388609 28.394103803612502,-96.534249520963641 28.388796609353736,-96.542905217114992 28.385452367272176,-96.559699173073881 28.377818734789468,-96.57038624671533 28.368658381727396,-96.577905378446388 28.364719789411506,-96.5917603939982 28.357462401226169,-96.600411840200493 28.354408960067438,-96.650793747525029 28.34677533744669,-96.672676831253582 28.335579347083499,-96.688452973492915 28.347284234444516,-96.694559875534281 28.347284234444516,-96.698122233414779 28.342704062844462,-96.705246949175717 28.348810964885843,-96.700157860853906 28.369676195446971,-96.705755865897487 28.400210705653887,-96.710336037497541 28.406826524417021,-96.710425531143088 28.406841439843959,-96.711757514930511 28.407063434453107,-96.711949596522956 28.407095447664108,-96.71209813364915 28.407120203551969,-96.7125191933293 28.40719037931537,-96.712878460543081 28.407250256459115,-96.722549831718325 28.408862132132249,-96.749013067323034 28.408862132132249,-96.762244685125353 28.411915593014903,-96.76554491144303 28.411090543097366,-96.768351577304784 28.410388882297497,-96.775985199925543 28.405808690973519,-96.777118787058129 28.404067826336821,-96.778115367638478 28.402537364460464,-96.780337941159374 28.399124129135416,-96.780820705165937 28.398382742114745,-96.790234641309425 28.383925636830853,-96.794392274787313 28.366371177405831,-96.794814812909479 28.364587126849088,-96.794810066932399 28.364444747076842,-96.79477772408616 28.363474458555832,-96.794305906049686 28.349319871745632,-96.794064195689629 28.347593374049037,-96.792754716842737 28.338239980125699,-96.790743538307225 28.323874459722486,-96.791161640090152 28.319066463411133,-96.791737095961722 28.312448960638157,-96.791761391474679 28.312169572361466,-96.791798306096766 28.312130020933203,-96.806010803272656 28.29690232711997,-96.809573161153153 28.290286508356836,-96.806010803272656 28.282143978876302,-96.799480493673911 28.2729662335258,-96.799349781293685 28.272782529381054,-96.787181219874626 28.255680743271615,-96.787181219874626 28.250082757951983,-96.800412817953031 28.224128419345121,-96.810027933605966 28.21709297064087,-96.81015126416365 28.217002728792142,-96.823379937963566 28.207323213817581,-96.836184503007971 28.197954022244446,-96.84100213695676 28.194428925121734,-96.842143298799229 28.193593928862132,-96.847274602334139 28.190686192954498,-96.857267971405633 28.185023289193378,-96.872677809006134 28.176291056181483,-96.877474270970822 28.171878306563691,-96.886067200578026 28.1639728030657,-96.898123211167331 28.152881261735526,-96.906497631141988 28.149042991548708,-96.910337015250093 28.147283276415891,-96.926704620510804 28.131597659113019,-96.934764623415617 28.123873491831901,-96.962356663895278 28.123371819605953,-96.962754569737697 28.123364584972112,-96.979717515560068 28.129783000626698,-96.995398793779131 28.135716460690723,-97.000413785843605 28.137614026355994,-97.007520616950742 28.136091128354632,-97.007538501604586 28.136087295914667,-97.009222611239821 28.135094102666635,-97.00939982996681 28.134989589017771,-97.027385928308092 28.12438239869169,-97.028912648887456 28.117257682930727,-97.025203084589847 28.111384210119862,-97.023365428929196 28.108474590635566,-97.022805746846075 28.107588427939849,-97.02290356380766 28.107197159145706,-97.023379876854563 28.105291902342927,-97.02382356056566 28.10351716319958,-97.025496807419856 28.101530180660298,-97.031966099908146 28.09384788848477,-97.033883146887263 28.088918342142531,-97.035528457788629 28.084687545284659,-97.035528457788629 28.083043098067591,-97.035528457788629 28.081818766572983,-97.035528457788629 28.074000471643224,-97.033022532693735 28.061470870449408,-97.032801767679686 28.060367047518316,-97.031459273912688 28.053654591691117,-97.031457183186404 28.053644138079921,-97.025859197866765 28.041939250718904,-97.030948266464648 28.033287814378582,-97.03239348781301 28.032603236465789,-97.040617526386512 28.028707642778524,-97.041168915404441 28.028259640036232,-97.046718327422383 28.023750751173218,-97.048760075590963 28.022091833877354,-97.050263648357429 28.019142519014494,-97.059727497080047 28.000578821719444,-97.061991693393324 27.99613751499442,-97.06790259446116 27.99219690579767,-97.073772658186698 27.988283521554418,-97.075732208193486 27.986977152070377,-97.083740513918784 27.975854507337193,-97.090858162154831 27.965968886660271,-97.094600599978094 27.960771057335059,-97.101378519421061 27.951357282114685,-97.101544336287489 27.951126980954953,-97.101629253046639 27.951009041034034,-97.112670327945679 27.935674217691009,-97.118292397880069 27.927865788706086,-97.121533983365822 27.923363587495643,-97.122089895488358 27.923104160785101,-97.123659587861624 27.92237163470331,-97.129167576400675 27.91980122961516,-97.134800331352182 27.902469771509406,-97.13578341488774 27.899444915775788,-97.139044920333077 27.897526377912126,-97.141761509630356 27.895928379836029,-97.144434841366106 27.894355827453982,-97.155121915007527 27.880615312653809,-97.156735458496229 27.877916799393841,-97.171211094589736 27.85370753808861,-97.17159000749372 27.853073838716419,-97.18273536107327 27.834434189625789,-97.184638591770963 27.831251199324921,-97.187183135931861 27.824126483563962,-97.18941247112663 27.823657146727278,-97.196852395853725 27.822090836400886,-97.201135366472329 27.822090836400886,-97.208766105658313 27.822090836400886,-97.209575096934316 27.822090836400886,-97.21103842611052 27.822356897891609,-97.21191517248603 27.822516307306422,-97.214117494684729 27.822916731993345,-97.215541825234411 27.823175702780983,-97.217387510601711 27.823511284007832,-97.220771087297493 27.824126483563962,-97.222189700736266 27.82464074101355,-97.223091414240102 27.824967618564596,-97.225175600069406 27.825723150734085,-97.225442194074731 27.826156365185522,-97.225555528799433 27.826340533769983,-97.225696025109201 27.826568839847944,-97.22598639723725 27.82704069367685,-97.227317456819009 27.829203661466853,-97.227317456819009 27.832884543697009,-97.227317456819009 27.832951908184537,-97.22711696094737 27.834288541284948,-97.22651425924083 27.838306534493725,-97.227537582741903 27.841230302974814,-97.228388390382094 27.843661171179477,-97.233100025453197 27.847817700825228,-97.234045759551762 27.848652012430087,-97.234511621821596 27.849062988727319,-97.238500481248579 27.854279199579018,-97.239439164419366 27.855506710708827,-97.241127420860792 27.857714434929608,-97.24139627838295 27.858969111470945,-97.242350826195675 27.863423696705052,-97.242654131578206 27.86483913096664,-97.243132066142749 27.865496290124597,-97.244364366034702 27.867190700237273,-97.250796680782656 27.876035121329831,-97.263010484865433 27.88010639593206,-97.267085449659064 27.88068852838779,-97.272090543185925 27.881403535150675,-97.273697558506882 27.881633106649463,-97.276628649874411 27.881144591421538,-97.283916343274228 27.879929975854907,-97.291452123510041 27.878674012482271,-97.291709327200167 27.878631145200583,-97.295071705789752 27.87807074876898,-97.29826066531912 27.876989746639367,-97.302276298241679 27.875628516526195,-97.30641171632756 27.874226681314273,-97.315889353880934 27.871013926092836,-97.325097299274915 27.867892591849294,-97.326845878314657 27.866807265961079,-97.334190606350404 27.862248465187459,-97.346213303335873 27.854786094892546,-97.354613966176373 27.849571885725148,-97.359768343966266 27.850509060182219,-97.360211961357962 27.850589719168646,-97.360654441244435 27.850290746360063,-97.363614400263117 27.848290774636723,-97.376904444631478 27.839311017562139,-97.379041564479934 27.837867018088055,-97.379057154646048 27.837837708581311,-97.379081675001302 27.837791610322164,-97.37968928125764 27.836649310776913,-97.391764280353456 27.813948316782309,-97.391812130016405 27.812975373996721,-97.391812459346511 27.812968677620422,-97.39203202611381 27.808504155006624,-97.392068018906713 27.807772301822137,-97.392095751995882 27.807208395884746,-97.393123788240075 27.786304999999999,-97.393168763213623 27.785390509210199,-97.393291005863816 27.782904909577571,-97.393142269808052 27.782564941361908,-97.39298939956177 27.782215523565412,-97.390949955785928 27.777553936582201,-97.390465068726371 27.776445623015572,-97.390185233729682 27.775805999999999,-97.389524844304646 27.774296538065283,-97.38835420640342 27.771620793596586,-97.388306220610531 27.771511111755789,-97.388011229692253 27.770836846624743,-97.38704242749894 27.768622441036733,-97.386166290102864 27.766619840754537,-97.385225495384532 27.765302728148875,-97.378862356737287 27.756394334042721,-97.375764970087644 27.752057992733249,-97.373069654276961 27.748284550598278,-97.368354500700462 27.741683335591173,-97.365855345900911 27.739779218033028,-97.354970329043653 27.731485873530172,-97.352272255056832 27.729430198526604,-97.34997871774064 27.727682741876539,-97.347507961666906 27.725800261438444,-97.346980343555629 27.725398266768138,-97.343485766084669 27.723942192633796,-97.323096068004702 27.715446484002907,-97.316445853072636 27.712675560756566,-97.312489136070184 27.711663774861414,-97.307771479065892 27.710457406346261,-97.30518751069485 27.709796650788128,-97.285725857752936 27.704820043684109,-97.259850586867117 27.698203387982087,-97.253955150197811 27.696695845323848,-97.254014647303208 27.696526337654994,-97.255455364792269 27.692421723465429,-97.259957004258851 27.67959652118169,-97.261636792970123 27.679316557300702,-97.26241778482418 27.679186392412099,-97.266063906300232 27.678578707462119,-97.266172011465457 27.678349884642419,-97.272736281666539 27.664455499360063,-97.273042341106247 27.663807672923248,-97.273584380560237 27.662660354976065,-97.276535709391737 27.656413369610792,-97.277059923980644 27.655303780997631,-97.278846463786479 27.651522268106756,-97.280071982275985 27.648928251476995,-97.280889132874719 27.647198614380269,-97.282300269490932 27.644211705671331,-97.282869528026779 27.64300677394548,-97.287959956150573 27.632232024058997,-97.288756326795195 27.630546371240786,-97.290370933329072 27.627128784125372,-97.290610159422798 27.626622421740255,-97.291264204229464 27.625238025568656,-97.291996439564016 27.623688125953898,-97.292910903535031 27.621752508687905,-97.293983233844585 27.619482740684056,-97.29528946695001 27.616717877953022,-97.296598377059297 27.613947348891728,-97.297587499071795 27.609496333379006,-97.298634024222366 27.60478700569162,-97.29761621050281 27.598680093788271,-97.294053852622326 27.594099922188217,-97.294182769084571 27.593971005725969,-97.300049926927869 27.588103847882682,-97.302196382102863 27.585957392707677,-97.311120578488044 27.579146819865922,-97.321534901946578 27.571199044464009,-97.325080504595888 27.561034984604785,-97.336802147188081 27.527432946040641,-97.343417965951204 27.517763686118776,-97.347489240553443 27.503005347737066,-97.350542661988243 27.478577729709574,-97.359194108190536 27.458221396146271,-97.365809926953673 27.450587783387487,-97.371916828995055 27.425142361502377,-97.369881181831957 27.412419660421783,-97.372934622990698 27.401223670058592,-97.379550422029908 27.390027689557368,-97.399397858595393 27.344734850830708,-97.401942402756291 27.335574497768633,-97.404995863638931 27.329976512448997,-97.413138393119482 27.321325066246711,-97.42026310888042 27.317253791644482,-97.430441285524054 27.313691423902039,-97.450797599363412 27.313691423902039,-97.482858840011673 27.297915271800758,-97.508304242172855 27.275014394076553,-97.532222933616623 27.278576761818989,-97.544436737699399 27.284174747138625,-97.546981281860297 27.290790556039799,-97.536803105216677 27.289263825598471,-97.526624948296998 27.291808369759369,-97.524589320857856 27.297915271800758,-97.51746460509689 27.305039987561717,-97.504741884292372 27.305039987561717,-97.498126085253162 27.308602345442196,-97.502706237129289 27.322342870104325,-97.499143898972747 27.327940855423961,-97.483876634007316 27.33862793892736,-97.483876634007316 27.351350640007954,-97.486930094889971 27.358984272490666,-97.501688443133645 27.366617904973374,-97.514411144214236 27.361528796927644,-97.520518046255617 27.352877370449281,-97.538329835658018 27.335574478044709,-97.570899973304094 27.315727061203152,-97.584131581244463 27.309620159161771,-97.609068086407831 27.285192570720163,-97.621790807212349 27.287228188297352,-97.63146005727225 27.286210384439741,-97.63654914066305 27.282139109837512,-97.636657939024673 27.281797172172649,-97.640111498543547 27.270943129336285,-97.639093679892994 27.253131339933887,-97.635022415152719 27.247024437892502,-97.628915513111338 27.242953173152234,-97.597363199046811 27.242444266292445,-97.5826048606651 27.240408628991332,-97.573953414462821 27.238881903480983,-97.56123071338223 27.232775006370584,-97.542910007258072 27.229212648490105,-97.520009129533875 27.231248285791217,-97.509830972614182 27.235319550531486,-97.503215153851045 27.23989972213154,-97.500161712692318 27.244479898662579,-97.485148876501881 27.25084127385778,-97.467082638600573 27.253640266517596,-97.45843119239828 27.259492710198106,-97.450288657986775 27.262546171080761,-97.424079880742951 27.264072891660124,-97.422298701802717 27.257711541119829,-97.434766954384401 27.202240525749552,-97.444945121166043 27.144733882940127,-97.443672849085587 27.116235010034327,-97.452324285425917 27.115217201245734,-97.455886653168363 27.110382571284802,-97.456650008527049 27.09969549764336,-97.46173908698691 27.095624227972113,-97.475479621510999 27.098423220631929,-97.480568699970846 27.102494490303176,-97.491510231973166 27.101222218222723,-97.495835955074313 27.09409750739275,-97.4932914109134 27.078066891999608,-97.477515248950155 27.066107546277717,-97.479041969529504 27.06279964182713,-97.482256963728076 27.061942305056665,-97.48693005051112 27.057710553505324,-97.487693415731783 27.053639288765055,-97.486675602012198 27.034809685643079,-97.477515248950141 27.032519589981089,-97.473952881207694 27.029211690461484,-97.473443984209865 27.022850330059228,-97.478300083716704 27.000269498406993,-97.478533072531675 26.999186101907302,-97.480568690108868 26.997659376396957,-97.483967678435022 27.000330000000002,-97.484131057851314 27.000458369056773,-97.492988547644813 27.000330000000002,-97.49889841702128 27.000244349959733,-97.533497176854453 26.999742920066073,-97.536803065768822 26.999695008767091,-97.549271318350492 26.995878197456715,-97.555378215460905 26.990280207206101,-97.551052502221722 26.980865400714134,-97.549525776711377 26.965343697111763,-97.552324769371197 26.95211208177491,-97.555378205598956 26.947277449348487,-97.555378205598956 26.938880461507075,-97.540874325578116 26.906310323861007,-97.540110950495503 26.900966796902246,-97.547999041339082 26.895114353221743,-97.552324764440229 26.888498544320569,-97.552324764440229 26.875332999999998,-97.552324764440229 26.873831771434514,-97.552324764440229 26.871753101924,-97.552324764440229 26.867633303897481,-97.555396527456509 26.865969429990074,-97.558431656619632 26.864325399446898,-97.558453748966258 26.864224239771101,-97.559853702000524 26.857813929560987,-97.562641307980527 26.845049630589628,-97.563266286580571 26.842187886943357,-97.552579212939136 26.827938454188693,-97.547744582978211 26.824630549738107,-97.537566416196555 26.824885004400745,-97.509830908511418 26.8035108521869,-97.48438549155729 26.763561555211936,-97.478024141017002 26.757200199740662,-97.471662790476714 26.758726925251008,-97.468609339456009 26.740915130917632,-97.467337057513589 26.710126182073765,-97.444945096511148 26.633535472850511,-97.445708451869848 26.609362327976836,-97.441206258760758 26.5999011976768,-97.435205432977895 26.587290766879221,-97.432741093635642 26.582112082834445,-97.429217375703914 26.574707168454967,-97.428151110966368 26.572466467229631,-97.418145193925739 26.555638334425574,-97.416955130465126 26.553636864107652,-97.41864075483771 26.543121778291471,-97.42039414733226 26.532183948458435,-97.422284917775215 26.520389141863415,-97.422298667285844 26.520303371102887,-97.425861015304378 26.516741008291426,-97.430695645265303 26.506562841509776,-97.430695645265303 26.494603495787885,-97.42802638225659 26.488322868889494,-97.42636993202612 26.484425333937217,-97.429168909893022 26.478063961207511,-97.43553026043331 26.470175880225888,-97.441382709044788 26.466613522345408,-97.441382709044788 26.455417541844177,-97.43756589773443 26.449819546662585,-97.425861005442428 26.446002740283195,-97.421026375481503 26.446766095641895,-97.417209564171131 26.449819546662585,-97.411611568989528 26.447275002501684,-97.412883841069984 26.433025580841726,-97.421789740702152 26.417249413947498,-97.419499649971158 26.413178149207234,-97.406013578738921 26.409106884466965,-97.398125502688274 26.410888063407203,-97.394308686446919 26.414450416356704,-97.395072051667569 26.417249413947498,-97.382484933201752 26.411326066613285,-97.377769169124974 26.409106884466965,-97.369626639644437 26.394602999515151,-97.374461259743413 26.38086247238753,-97.388965149626202 26.365849678110436,-97.392018610508856 26.339386444971247,-97.391000786927322 26.332261729210284,-97.38794734576858 26.330480545339064,-97.376242448545611 26.336332993950553,-97.372171183805335 26.339895346900054,-97.36937219114553 26.348546788171358,-97.358176200782339 26.356434874083959,-97.343417852538664 26.35923386920927,-97.342332537534404 26.358759043566288,-97.335275323058127 26.355671510096041,-97.335020017473738 26.355402767481841,-97.331108052904881 26.351284911668415,-97.330440693097202 26.350582427937965,-97.333762617526986 26.340749518544904,-97.336802038706509 26.331752819885011,-97.343786761143846 26.325987658774913,-97.344677525679145 26.325252425399061,-97.352414066956698 26.31886671611711,-97.352832659030639 26.318521211944631,-97.354359379610003 26.313941040344577,-97.348998828460125 26.312092573442666,-97.347821984790102 26.311686765063648,-97.346980205488165 26.311396496183672,-97.34736083223585 26.297503848546928,-97.347437236753805 26.2947151295396,-97.347489122209922 26.292821341560611,-97.347051378510429 26.289694600417153,-97.344137846000223 26.268883651035111,-97.343926764329439 26.267375924606483,-97.342629246748771 26.266550231912309,-97.341127771669619 26.265594748131736,-97.335282658907644 26.265594748131736,-97.331967408745584 26.265594748131736,-97.330307576264516 26.266747410222209,-97.323817586106017 26.271254350355399,-97.322807065545476 26.271956101137519,-97.313207351206557 26.273518846137112,-97.312102101648151 26.273698770576502,-97.311865543405119 26.273737280077761,-97.307030913444194 26.253126493084562,-97.308048727163751 26.249055213551365,-97.321280340035131 26.236078054109896,-97.321280340035131 26.228698889850026,-97.304486359421333 26.202490107675235,-97.296598288301666 26.200708923804015,-97.294817109361432 26.192311940893585,-97.296089381441874 26.182388227541828,-97.303096384204423 26.167373221160254,-97.305986772892751 26.161179530923267,-97.306776455083323 26.159487354748606,-97.300965235160419 26.149753561518516,-97.296881711355638 26.142913659244432,-97.296598288301666 26.14243892563589,-97.285549237329036 26.12861437636975,-97.28536038956149 26.128378090441405,-97.284582435540926 26.126454238998875,-97.282094393487881 26.120301403270393,-97.282839179410786 26.118439442973433,-97.28311220967295 26.117756868971455,-97.285501587752023 26.116923364107649,-97.294053737977038 26.113940052730097,-97.295071554162092 26.108342057548505,-97.292023254217796 26.105090538920617,-97.291924538345086 26.104985242032239,-97.291541272704407 26.104576425513905,-97.287190793518263 26.099935916255493,-97.286650074642992 26.099359149688052,-97.286603231473521 26.09930918366079,-97.283195451762182 26.095674220102872,-97.282639002190891 26.095080674133143,-97.282108002623801 26.094514274823585,-97.280435495761154 26.092730268223651,-97.279905974795895 26.09216544608875,-97.27980430522237 26.092056998587434,-97.27089841052117 26.086459003405839,-97.267086875013263 26.085485845069449,-97.24859983335169 26.080765747704277,-97.246979719077387 26.080352101364454,-97.229515030031649 26.08000965739204,-97.220290685310772 26.079828788368793,-97.208048240752987 26.079588741074772,-97.205005053278043 26.078666562185607,-97.199651252911579 26.077044196913871,-97.199152512570265 26.073220535461079,-97.199134106850465 26.073079425477676,-97.198725011196004 26.069943037351702,-97.198302051934135 26.066700361972018,-97.196018989165054 26.049196947106083,-97.195939794821285 26.0485897927724,-97.195071061587612 26.04192952989985,-97.204994779870347 26.030224637607851,-97.214918488291119 26.030733549398622,-97.224842206573854 26.027425644948035,-97.226114478654296 26.024372193927345,-97.219244211392265 25.99612778184791,-97.216954125592238 25.993837693582392,-97.208557137750816 25.991802058746771,-97.195834416946283 25.993074335758202,-97.174460269663413 26.000071824804216,-97.167208324722026 26.007069313850227,-97.162755377371425 26.014575709756024,-97.16262814819099 26.023481604457221,-97.172042954682937 26.044728528107019,-97.178658763584124 26.045491893327686,-97.182730028324386 26.053125515948434,-97.164981847348457 26.063876207878327,-97.152009000000007 26.062107999999998,-97.152012551274964 26.062039393270581,-97.15321 26.038906,-97.151921999999999 26.017652999999999,-97.14747181118706 25.985075937251509,-97.145567 25.971132,-97.146880999999993 25.969781,-97.146293999999997 25.955606,-97.147784999999985 25.953132,-97.156608000000006 25.949021999999999,-97.160293999999993 25.950243,-97.168198638692317 25.959262149012673,-97.178362000000007 25.962114,-97.187583000000004 25.958174,-97.206945000000005 25.960899,-97.214339285966162 25.960186817526893,-97.227626420907342 25.958907063854085,-97.229225999999997 25.958753000000002,-97.239867000000004 25.954974,-97.244841570811701 25.950784663302475,-97.248032999999992 25.948097,-97.255343503388133 25.949129556975723,-97.276707000000002 25.952147,-97.28138899999999 25.948036999999996,-97.277163000000002 25.935438,-97.284201820237172 25.935775045516863,-97.290083634347766 25.936056689174489,-97.293963761326751 25.936242484429805,-97.303601999999998 25.936703999999999,-97.316138101068788 25.931602038234757,-97.320560999999984 25.929801999999999,-97.324914000000007 25.924040999999999,-97.332235861490744 25.923541683060932,-97.33463605770983 25.923378000829199,-97.338346 25.923124999999999,-97.339310160867683 25.923294280152341,-97.350397999999998 25.925241,-97.367642000000004 25.915679999999998,-97.369283543255307 25.913688286645449,-97.373641276386991 25.908400972256459,-97.374430000000004 25.907443999999998,-97.372365000000002 25.905015999999996,-97.365976000000003 25.902446999999999,-97.365883578347024 25.900015396466173,-97.365521 25.890476,-97.364300486696564 25.885628504434479,-97.362421560218849 25.878165998501085,-97.360082000000006 25.868874000000002,-97.364783621478566 25.852096838905283,-97.36542 25.849826,-97.372864000000007 25.840116999999996,-97.394513000000003 25.837377,-97.422635999999997 25.840377999999998,-97.42853949246836 25.842912007889609,-97.434188204901034 25.845336654308195,-97.441181027463472 25.848338244915578,-97.445113000000006 25.850026,-97.445601387363794 25.851485440010176,-97.447179184935308 25.856200346812667,-97.448271000000005 25.859463000000002,-97.449172000000004 25.871677999999996,-97.452166849899044 25.875807172885114,-97.453724626189043 25.87795496921364,-97.454727000000005 25.879337,-97.45488774919265 25.879394304385261,-97.462586893331732 25.882138919861518,-97.468261999999982 25.884162,-97.468599721544905 25.884059457735212,-97.481532785459223 25.880132596436578,-97.486059999999995 25.878758,-97.490359999998347 25.879275544671589,-97.494739403174762 25.879802646248233,-97.496860999999996 25.880057999999998,-97.519591990380178 25.88590026892226,-97.521761999999995 25.886458,-97.52344767329889 25.891064017588189,-97.524375103029939 25.893598172727145,-97.528116959024402 25.903822606212749,-97.528119935206945 25.903830738482007,-97.52812430798204 25.903842686870224,-97.528627999999998 25.905218999999999,-97.528849446448064 25.906732522417784,-97.530321999999998 25.916796999999999,-97.530415259581318 25.916820899843632,-97.539878370214808 25.919246032588486,-97.542957 25.920034999999999,-97.545169999999999 25.923974999999999,-97.545468770003851 25.926387609575503,-97.545470694802859 25.92640315259677,-97.546397824784293 25.933889856891241,-97.546420999999995 25.934076999999998,-97.546611329705271 25.934141994258589,-97.555160182125618 25.937061277530951,-97.555378999999988 25.937135999999999,-97.555477252221124 25.937015705749829,-97.559364000000002 25.932257,-97.582565000000002 25.937856999999997,-97.580418999999992 25.945115999999995,-97.583044 25.955442999999999,-97.598043000000004 25.957556,-97.5981230356591 25.957681442330628,-97.607733999999994 25.972745,-97.60783562843973 25.973457509771446,-97.607844088251909 25.973516820913719,-97.608283 25.976593999999999,-97.609461531117333 25.977846566488182,-97.613191727531174 25.981811093986448,-97.613466053312663 25.982102652924251,-97.616041456343709 25.984839842874308,-97.624938181905222 25.994295461083137,-97.627225999999993 25.996727,-97.634804000000003 25.999508999999996,-97.635072411453706 25.99971613545971,-97.639164724998494 26.00287420951236,-97.642117661027001 26.005153015998879,-97.644011365977178 26.006614404624422,-97.643848619841975 26.01214811069886,-97.643707610985203 26.016942704231127,-97.649175518723894 26.021499311673544,-97.65096419129361 26.02118629315062,-97.659123404318109 26.019758427116106,-97.661326460130226 26.019372891335045,-97.66298585459532 26.019511685247039,-97.668297999999993 26.019955999999997,-97.669519566971061 26.021667429940447,-97.671350987084779 26.024233271429612,-97.671567999996611 26.024226704244594,-97.691453959129774 26.023624920821636,-97.697068999999999 26.023454999999998,-97.703247203861338 26.030308742132775,-97.706066818770353 26.031284762516545,-97.709294717923569 26.032402112038366,-97.711145328137576 26.033042707775564,-97.719920000000002 26.030837999999999,-97.723585926686539 26.030959832537771,-97.729354247932832 26.031151535557555,-97.735180242251758 26.031345155270547,-97.758837769919694 26.032131383932391,-97.76309059882324 26.033650253079866,-97.763351431657455 26.034258862745556,-97.76491324062286 26.037903081983409,-97.769788888528993 26.041344719068825,-97.770077387482857 26.041548365582649,-97.776788595669075 26.042443189872706,-97.779190602367677 26.042763456191249,-97.784050976575529 26.040637041739476,-97.789822674626535 26.0424596835391,-97.792252861730461 26.04428232533872,-97.793102878401371 26.047342389307317,-97.793537334820812 26.048906434437896,-97.794638769549053 26.052871604582215,-97.795290594138677 26.055218176136449,-97.801344 26.060016999999998,-97.803973303988229 26.059548218630308,-97.8082126910423 26.058792373859696,-97.819424117916668 26.056793476786609,-97.820997703829306 26.056512920501468,-97.825546000000003 26.055702,-97.826721102251625 26.055271667399982,-97.830409376527257 26.053920989485444,-97.836607999999984 26.051650999999996,-97.848759348822554 26.052295281844582,-97.85186756815483 26.052460084066457,-97.859824237628374 26.052881958029587,-97.860225497621784 26.05290323340671,-97.860503999999992 26.052917999999998,-97.861874999990562 26.053580848914272,-97.869705222636284 26.057366592615971,-97.871187000000006 26.058082999999996,-97.876982999999996 26.064482999999999,-97.886529999999993 26.066338999999999,-97.901546631929207 26.060958662441269,-97.905109129229899 26.05968224852101,-97.913882 26.056539,-97.935419999999993 26.052687999999996,-97.944344999999984 26.059620999999996,-97.950095000000005 26.061827999999998,-97.96210735288345 26.054793018383155,-97.96735799999999 26.051718,-97.971403108419892 26.054550391225565,-97.978769 26.059707999999997,-97.979877702655912 26.062937323324391,-97.981335 26.067181999999995,-98.010970999999998 26.063862999999998,-98.015122209308288 26.064471399070538,-98.026123959861238 26.06608380989196,-98.028288992822496 26.066401115993269,-98.028758999999994 26.066469999999999,-98.029241090705753 26.065867136858621,-98.033102 26.061039,-98.034402999999998 26.051375,-98.034479464439173 26.051215303797409,-98.034525269179767 26.051119640464091,-98.039238999999981 26.041274999999995,-98.054365285842039 26.044575736209502,-98.070020999999997 26.047992,-98.070022345126233 26.049160242153427,-98.070025 26.051466,-98.071425788568789 26.055027814897404,-98.076094939927231 26.066900165398668,-98.076139697069991 26.067013970337847,-98.076205751241318 26.067181927684643,-98.076543999999998 26.068041999999998,-98.076994427275579 26.068371469710563,-98.080289992888041 26.070782045417982,-98.080494999999999 26.070931999999999,-98.080906883185932 26.070920010911959,-98.084755 26.070808,-98.085506402845155 26.069709056167966,-98.085848999999982 26.069208,-98.085628527723046 26.069048386721494,-98.081567000000007 26.066108,-98.081855064865067 26.063941606819231,-98.081884000000002 26.063724,-98.082307152201508 26.063513440869801,-98.091037999999998 26.059169,-98.093593108176947 26.058759459973995,-98.094431999999998 26.058624999999996,-98.095078111969258 26.058956205325877,-98.096949561841043 26.059915534659098,-98.097643000000005 26.060270999999997,-98.105504999999994 26.067537000000002,-98.122952624574893 26.063250384797335,-98.12786358062813 26.062043837809401,-98.128331000000003 26.061928999999999,-98.142925292417388 26.051941751725515,-98.14645163947533 26.049528582072455,-98.146621999999994 26.049412,-98.146852932570667 26.049588146033326,-98.149462999999997 26.051579,-98.149462999999997 26.055813,-98.151730999999998 26.058187,-98.158277994458601 26.062311711597108,-98.16142849281799 26.064296576133319,-98.161911645017582 26.064600969774318,-98.167608590156348 26.068190136655492,-98.172071527808072 26.071001859012309,-98.177897000000002 26.074672,-98.179863281323136 26.072661506851002,-98.189059999999998 26.063257999999998,-98.191534000000004 26.057117999999999,-98.197046 26.056152999999998,-98.200871000000006 26.059161,-98.203328791159265 26.063523594334541,-98.204415309491765 26.065452171017675,-98.20496 26.066419,-98.205720285634712 26.066905180236589,-98.2057544964389 26.066927057036718,-98.220672999999991 26.076467,-98.228363119990576 26.077028417928002,-98.230097 26.077155,-98.231072909449267 26.07694353295701,-98.240214327563166 26.074962705064888,-98.248806000000002 26.073101,-98.250234708208026 26.074229377516481,-98.260964088277859 26.082703320039151,-98.264514000000005 26.085506999999996,-98.272091468517374 26.0934369782697,-98.272527821536428 26.09389363077193,-98.277218000000005 26.098801999999999,-98.277020629370639 26.099144109090908,-98.272932087266241 26.106230915405163,-98.272897999999998 26.10629,-98.272099931737145 26.106512924095771,-98.270258188934392 26.107027377392626,-98.270033999999995 26.107089999999999,-98.269661374787887 26.108231250649609,-98.268046405073434 26.113177467856264,-98.266755660647689 26.117130670341034,-98.265753950746401 26.120198637935399,-98.265698 26.12037,-98.266046753689267 26.120369439652073,-98.268388964369507 26.120365676386069,-98.271048543344023 26.120361403199535,-98.2713587738927 26.120360904747326,-98.279433560913844 26.12034793086255,-98.289509742149562 26.120331741306838,-98.296194999999997 26.120321,-98.299522999999979 26.11749,-98.299575546893735 26.117376878214852,-98.299577897643644 26.117371817572689,-98.299619756950364 26.117281703787395,-98.301477861619162 26.113281617347607,-98.302978999999993 26.110049999999998,-98.307788398559808 26.112633359128559,-98.31093219000293 26.114322040617914,-98.314784784069062 26.116391454064445,-98.31781148535309 26.118017240801439,-98.323055746360907 26.120834185452331,-98.323827999999992 26.121248999999995,-98.324165904650499 26.121735183484471,-98.335204000000004 26.137616999999999,-98.337914801547555 26.149187638321976,-98.338210450252006 26.150449569219312,-98.338419999999999 26.151344000000002,-98.338123748811455 26.151776768193923,-98.337139471603692 26.153214615149455,-98.336278203634194 26.154472768358826,-98.335109254490916 26.156180386856505,-98.334230366689056 26.157464279382136,-98.333315999999996 26.158799999999999,-98.333279392301918 26.159609030127591,-98.333194378655719 26.161487831708563,-98.333156000000002 26.162336,-98.33332593363771 26.162525092143447,-98.336569396995017 26.166134227137082,-98.336837000000003 26.166432,-98.337709251548077 26.166391430160555,-98.345513373134324 26.166028447761192,-98.345781000000002 26.166015999999999,-98.345955918391979 26.165759937155421,-98.34781294946896 26.163041431373035,-98.354645000000005 26.15304,-98.380009845764519 26.156864235849298,-98.386243919298991 26.157804141722139,-98.386694000000006 26.157872,-98.386714843024777 26.157901012682096,-98.387178289965661 26.158546112849205,-98.389418830831929 26.161664858836595,-98.394322667090904 26.168490808715738,-98.402249554153599 26.179524728065878,-98.404432999999997 26.182563999999999,-98.41082579547016 26.183537375155975,-98.418120000000002 26.184647999999999,-98.44253599999999 26.199151,-98.444302622216625 26.201317032456906,-98.444376000000005 26.201407,-98.444366742625562 26.201566115583965,-98.444174812576264 26.204865005795593,-98.443681770155465 26.213339409994948,-98.45054565332704 26.219516919037407,-98.450975699346984 26.219903961344286,-98.465077324681431 26.222335272645303,-98.467962758220992 26.221802674698019,-98.47639547470331 26.220246150374404,-98.481645999999998 26.219277000000002,-98.483269000000007 26.216439,-98.496684404575589 26.212853148677059,-98.500574513964963 26.213825676024403,-98.503492081872309 26.214798198660183,-98.504399410834864 26.216045775617395,-98.509275818143593 26.222750833698164,-98.509327236533252 26.222821533963195,-98.516621175147847 26.223550930651591,-98.520846190978133 26.222726536052498,-98.524733007990875 26.221968131567948,-98.526589565145571 26.221605875956907,-98.528323413163747 26.222421776495104,-98.535240999999999 26.225677,-98.538016739096946 26.231331135295655,-98.538505426714039 26.231595841236214,-98.543851889046309 26.23449184328507,-98.556093449912439 26.231976454911809,-98.561600478976516 26.23084487397777,-98.564343479612191 26.231667774301364,-98.575891642961039 26.235132223865481,-98.57618836327309 26.235221239973473,-98.581780384919284 26.243001439905978,-98.583095590242166 26.247416774401941,-98.585184223567666 26.254428618568909,-98.588002268837087 26.255070784392117,-98.599153999999999 26.257611999999998,-98.610401443364651 26.253223367217647,-98.613465000000005 26.252027999999999,-98.617434734670965 26.252082931217494,-98.618976176235122 26.252104260920568,-98.625299999997523 26.252191766854153,-98.626653663614832 26.252210498179227,-98.633391522135483 26.243617562727948,-98.63418 26.242612,-98.636673745354344 26.241784277127035,-98.654221000000007 26.235959999999999,-98.669397000000004 26.236319999999996,-98.675206000000003 26.239989,-98.678410535728389 26.244637915883345,-98.679041999999995 26.245553999999998,-98.678977427258005 26.246060764449961,-98.677766000000005 26.255568,-98.679196310064967 26.258571609080832,-98.681167000000002 26.262709999999998,-98.687156000000002 26.26512,-98.698855915315121 26.265619481498664,-98.707451416076225 26.272152066874316,-98.710601999999994 26.279018,-98.709170532219119 26.284185773270103,-98.710647239525585 26.288123668959596,-98.711233447604599 26.289686894290245,-98.722550749196131 26.295571625529284,-98.729196000000002 26.299026999999999,-98.73263614407044 26.29899082409209,-98.734613221934339 26.298970033513189,-98.745271658069271 26.303095890935232,-98.745297595683382 26.304159357241051,-98.745599830797417 26.316551278053844,-98.745615470637418 26.317192526042046,-98.748245116157776 26.32061106368975,-98.74905366960931 26.321662182706675,-98.754840366886953 26.324877004144408,-98.755242435754027 26.32510037501579,-98.766685638772316 26.325769085950686,-98.779858354339893 26.326538865087553,-98.779911999999996 26.326541999999996,-98.779946859358333 26.326559704051515,-98.789821999999987 26.331575,-98.796251999999996 26.349104,-98.797592059971961 26.356670995104565,-98.798210999999995 26.360166,-98.807348000000005 26.369420999999999,-98.808280016253249 26.369491024329768,-98.813413043374013 26.369876679389535,-98.81818280466733 26.370235041528161,-98.81932575812273 26.370320914010964,-98.824571000000006 26.370715,-98.828353477559162 26.367368473620303,-98.832909 26.363337999999999,-98.838554497099707 26.360957856802237,-98.842229804437778 26.359408346173527,-98.844057000000006 26.358637999999999,-98.847707 26.359594999999999,-98.853132332741467 26.364754198689674,-98.853414999999998 26.365023,-98.853852117327648 26.365076242531281,-98.854321671505204 26.365133435992636,-98.861354000000006 26.365989999999996,-98.861661690067152 26.365902494757481,-98.869113443480302 26.363783259984523,-98.874117355796216 26.362360176799562,-98.876164212939671 26.361778062685843,-98.882912762903771 26.359858814831277,-98.890964919192157 26.357568829017531,-98.895015448091129 26.359360408468842,-98.900432100164338 26.361756234493352,-98.900829697862818 26.361932094951143,-98.905559653818443 26.364024190108832,-98.91296803413384 26.372226331500926,-98.915344992389564 26.37485796579432,-98.921277034399395 26.381425588572444,-98.922831447878195 26.38166472803821,-98.923508557916591 26.381768898347495,-98.924925720775448 26.381986922427696,-98.926689551972586 26.38116380140492,-98.934437533628781 26.377548077521784,-98.937555770591459 26.376092900630621,-98.942046463189357 26.375531566775365,-98.950185820407469 26.380302920861933,-98.952073083609605 26.383491745197549,-98.952938578460817 26.384954133189183,-98.953327659277917 26.385611545667039,-98.958325183064531 26.394055638388448,-98.960041959595969 26.394835991082342,-98.96758721887106 26.398265653180793,-98.981979903868819 26.396488780147621,-98.98323657723455 26.396333635432413,-98.985344372930967 26.396073413984297,-98.99032130527651 26.395458978465552,-99.008003378826189 26.395458978465552,-99.014739404125635 26.398826987036053,-99.018845438188137 26.404005475794783,-99.021934999999999 26.407902,-99.025336792347318 26.409271761295809,-99.030462148109507 26.411335530401477,-99.031104888479149 26.411594335405351,-99.032315999999994 26.412082000000002,-99.033086386506682 26.412180127570064,-99.037216923343138 26.412706252494743,-99.039107 26.412946999999999,-99.039645291109963 26.412681959983438,-99.045466000000005 26.409815999999999,-99.053184999999999 26.402006,-99.062093000000004 26.397371,-99.082001999999989 26.396509999999996,-99.085125999999988 26.398782,-99.089412999999979 26.408099999999997,-99.092044248326658 26.410330707587079,-99.0977332288968 26.415153685331873,-99.099649490160544 26.416778244479925,-99.110855 26.426278,-99.113807999999992 26.434002,-99.110485406379198 26.436329519428725,-99.103082999999998 26.441514999999999,-99.097481906444941 26.458865277747179,-99.094712087984234 26.467445230774196,-99.091634999999997 26.476977000000002,-99.105030999999997 26.500335,-99.114051328117867 26.510193091438737,-99.123438026388797 26.520451579672599,-99.126618350727256 26.523927276756307,-99.127319211298612 26.524693229780183,-99.127781999999996 26.525199,-99.128040494672888 26.525242991472329,-99.131554903978838 26.52584108518932,-99.136510932879688 26.526684518463242,-99.143658999999985 26.527901,-99.157083944984777 26.532657279516766,-99.166741999999985 26.536078999999997,-99.170704 26.540316,-99.171403999999995 26.549848,-99.167459686682065 26.559874693319248,-99.167410000000004 26.560001,-99.168618869529794 26.566870928153797,-99.16946034016965 26.571652951934592,-99.178064000000006 26.620546999999998,-99.200522000000007 26.656442999999999,-99.209947999999997 26.693937999999999,-99.208906999999982 26.724761,-99.240022999999979 26.745850999999998,-99.242444000000006 26.788262,-99.243132825912184 26.78921716914337,-99.262208 26.815667999999999,-99.268613000000002 26.843212999999999,-99.274832961326339 26.850997131057774,-99.280470999999991 26.858053000000002,-99.295146000000003 26.86544,-99.316753000000006 26.865831,-99.328801222539823 26.879647723469141,-99.328900000000004 26.879760999999998,-99.328852280051947 26.879943529980665,-99.328653604395157 26.88070346927794,-99.326247644284351 26.88990632616278,-99.321819000000005 26.906846000000002,-99.324684000000005 26.915973,-99.337297000000007 26.922758999999999,-99.361143999999996 26.928920999999999,-99.367053999999996 26.929033999999998,-99.379148999999998 26.934489999999997,-99.388253000000006 26.944216999999998,-99.393748000000002 26.960730000000002,-99.390189000000007 26.966348,-99.377312000000003 26.973818999999999,-99.376593 26.977716999999998,-99.378434999999996 26.980034,-99.385448615007036 26.981891053234623,-99.387366999999998 26.982399,-99.403694000000002 26.997355999999996,-99.407320999999996 27.005808999999999,-99.415475999999998 27.017239999999997,-99.420446999999996 27.016567999999999,-99.429379999999981 27.010833000000002,-99.432154999999995 27.010698999999995,-99.438721 27.01463,-99.445682828533535 27.022104842939122,-99.446523999999997 27.023008,-99.446589518313687 27.0234513503828,-99.446929167151652 27.025749691622671,-99.446969999999979 27.026026000000002,-99.446787747918748 27.026353589968604,-99.444062000000002 27.031253,-99.443973 27.036457999999996,-99.447729715193731 27.048260380671568,-99.452315999999996 27.062668999999996,-99.450282 27.067705,-99.439210578806851 27.075275465844946,-99.434470000000005 27.078517000000002,-99.429209 27.090981999999997,-99.430274999999995 27.094871999999999,-99.437646 27.100442,-99.442122999999995 27.106839,-99.441108999999997 27.110041999999996,-99.433369999999982 27.119218,-99.430581000000004 27.126611999999998,-99.431354999999996 27.13758,-99.438264999999987 27.144791999999995,-99.439971 27.151071999999996,-99.437950999999998 27.154121,-99.42998399999999 27.159148999999999,-99.426616441133064 27.174998569551711,-99.42634799999999 27.176261999999998,-99.426389092127664 27.176475083747437,-99.428025433058153 27.184960350328335,-99.432794999999999 27.209693,-99.441928000000004 27.217984999999995,-99.442101400955139 27.218265584747954,-99.445237999999989 27.223341,-99.443121431464945 27.230753685991843,-99.441406999999998 27.236757999999998,-99.441548999999995 27.249919999999999,-99.452207395848959 27.263806782859465,-99.452390999999992 27.264046,-99.452635348600225 27.264144272092288,-99.454218033886534 27.264780796280988,-99.462735864984637 27.268206496624611,-99.463308999999981 27.268436999999995,-99.463731957038988 27.268231398925973,-99.480688 27.259988999999997,-99.487909999999999 27.260721,-99.492407 27.264118,-99.496069429210138 27.270723950024919,-99.496615000000006 27.271707999999997,-99.496412995851571 27.272119287725655,-99.490870463706145 27.283404082904614,-99.487572835142558 27.290118173493504,-99.487513000000007 27.29024,-99.487552182270463 27.290674424182523,-99.487937000000002 27.294941,-99.493651777311726 27.30231355132117,-99.494603999999995 27.303542,-99.494999311050705 27.30367917804087,-99.501697839297435 27.306003653868146,-99.502036000000004 27.306121,-99.50260564894451 27.305998370990778,-99.511531000000005 27.304076999999999,-99.522353224815092 27.304131436852781,-99.523657999999983 27.304137999999995,-99.527521386758664 27.305370598210363,-99.529216737576675 27.305911493159478,-99.529653999999994 27.306051,-99.533911450776046 27.310119063512179,-99.536090758332008 27.312201427353024,-99.536443000000006 27.312538,-99.537771000000006 27.316072999999996,-99.53137599999998 27.323809,-99.52136037329538 27.324774325824137,-99.521259999999998 27.324784,-99.520793197388144 27.325167862222077,-99.515101491997058 27.329848278790703,-99.509737777509301 27.334258981108004,-99.504836999999995 27.338289,-99.507830999999996 27.348637,-99.507785758525344 27.353517859091919,-99.507778999999999 27.354247,-99.505884699626023 27.358359262089539,-99.503847413823948 27.362781925614613,-99.502763417847504 27.36513512979511,-99.502013099315448 27.366763966750881,-99.499076000000002 27.373139999999999,-99.492143999999996 27.380516999999998,-99.488110785984318 27.408328989964531,-99.487887470616073 27.409868914391197,-99.487633320470721 27.411621467383494,-99.487521 27.412396,-99.487591555014376 27.412624523015491,-99.489856740583164 27.419961308946796,-99.495313182879073 27.437634363915539,-99.495699000000002 27.438884000000002,-99.495681276107845 27.439260342274874,-99.495103999999998 27.451518,-99.489866073767956 27.458841813736395,-99.48498035355378 27.465673163249864,-99.484933241276849 27.465739036942171,-99.483818999999997 27.467296999999995,-99.483170086267094 27.470026063960816,-99.480813109028745 27.479938539705284,-99.480418999999998 27.481595999999996,-99.480219000000005 27.485795999999997,-99.483519 27.491095999999999,-99.494943552274876 27.498766770813134,-99.497518999999997 27.500495999999998,-99.501722168778215 27.500229993495459,-99.502529258718056 27.500178915086504,-99.513319999999993 27.499496,-99.516119999999361 27.498282666666942,-99.519319999999979 27.496896,-99.525819999999982 27.496696,-99.528319999999994 27.498895999999998,-99.525855930815595 27.516294999999385,-99.525849791073696 27.516338353233991,-99.525316190784537 27.520106149807926,-99.523876376642917 27.530272798702207,-99.522431296340699 27.540476632400054,-99.521918999999997 27.544094,-99.518818999999993 27.553194,-99.514319 27.556994,-99.511118999999994 27.564493999999996,-99.512219000000002 27.568093999999995,-99.515978000000004 27.572130999999999,-99.51621006287597 27.572263354504685,-99.516956092136581 27.572688844074506,-99.522907946893667 27.576083418863931,-99.530137999999994 27.580207,-99.536560517954015 27.595669560441458,-99.539721999999998 27.603280999999999,-99.549741780062789 27.610632655019803,-99.554405160028892 27.614054243170667,-99.554950000000005 27.614453999999999,-99.555217670042637 27.614437037021997,-99.556811999999994 27.614335999999998,-99.559466999999998 27.609075999999998,-99.562869000000006 27.607264,-99.580005999999997 27.602250999999995,-99.584175941853502 27.603675176957196,-99.584843000000006 27.603902999999999,-99.584876722760043 27.604178863233781,-99.585148000000004 27.606397999999999,-99.578360965974085 27.610254799100861,-99.578159999999983 27.610368999999999,-99.578158133228257 27.610639131051315,-99.578098999999995 27.619195999999999,-99.584782000000004 27.622006999999996,-99.591372000000007 27.627464,-99.592626330929548 27.632690692534315,-99.594037999999998 27.638573,-99.596231000000003 27.639857999999997,-99.603532999999999 27.641991999999998,-99.612907806834755 27.638651258855042,-99.615318942915422 27.637792043123689,-99.624515000000002 27.634515,-99.625321999999997 27.631136999999999,-99.638929000000005 27.626757999999999,-99.654323999999988 27.629615999999999,-99.665948 27.635967999999998,-99.665422000000007 27.640274999999999,-99.660175716081199 27.644678795569117,-99.659499999999994 27.645246,-99.659300532255756 27.646059100049566,-99.658294999999995 27.650158,-99.661845 27.655753,-99.668942 27.659973999999998,-99.672015651285406 27.660163655087903,-99.685812999999982 27.661014999999999,-99.699355999999995 27.655417,-99.704600999999997 27.654953999999996,-99.711511000000002 27.658365,-99.721518999999986 27.666154999999996,-99.723715999999996 27.673328,-99.727277746539684 27.678262316066267,-99.732288643517421 27.685204233237535,-99.732448000000005 27.685424999999999,-99.732610774853441 27.685596448480599,-99.757538999999994 27.711853,-99.758533999999997 27.717071,-99.770740000000004 27.732133999999999,-99.774900999999986 27.73354,-99.785365999999996 27.730354999999999,-99.788844999999981 27.730718,-99.796341999999981 27.735586,-99.801651000000007 27.741771,-99.805670000000006 27.758687999999999,-99.813085999999998 27.773952,-99.817390803736785 27.775433523363962,-99.819091999999998 27.776019000000002,-99.822192999999999 27.766855,-99.825793000000004 27.764373999999997,-99.835127 27.762881,-99.841707999999997 27.766463999999999,-99.843346625073153 27.773142384459568,-99.844736999999981 27.778808999999999,-99.849281022020321 27.790032142335203,-99.850876999999997 27.793973999999999,-99.857944055165163 27.794214491272228,-99.870065999999994 27.794626999999998,-99.877441689362087 27.799278597548025,-99.877677000000006 27.799427,-99.877679299916537 27.799779028327777,-99.877693551047656 27.801960325692491,-99.877840000000006 27.824375999999997,-99.876677795668783 27.832975173255242,-99.876002999999997 27.837968,-99.877201999999997 27.842179000000002,-99.882014999999996 27.850391999999996,-99.89364999999998 27.856193,-99.901486000000006 27.864162,-99.904385000000005 27.875283999999997,-99.901231999999993 27.884405999999995,-99.894091000000003 27.892949999999999,-99.893456 27.899208000000002,-99.895827999999995 27.904177999999998,-99.900080000000003 27.912141999999999,-99.905861237749605 27.914081496997749,-99.917461000000003 27.917973,-99.925935042520848 27.927688375003317,-99.93714199999998 27.940536999999999,-99.938541 27.954059,-99.932160999999979 27.96771,-99.931811999999994 27.980967,-99.962768999999994 27.983536,-99.984922999999995 27.990729000000002,-99.991446999999994 27.99456,-99.998749958954292 28.00705628754028,-100.000278657311796 28.009672084008166,-100.008630999999994 28.023963999999999,-100.012838999999985 28.037203000000002,-100.014975394500183 28.048814882934586,-100.016570970484992 28.057487270710915,-100.017914000000005 28.064786999999999,-100.028724999999994 28.073118,-100.046108000000004 28.079067999999999,-100.053122999999985 28.08473,-100.056983000000002 28.094207,-100.05559599999998 28.101140999999998,-100.056492999999989 28.104185999999995,-100.064147158981442 28.110644603904401,-100.067651999999995 28.113602,-100.075474 28.124881999999999,-100.083393 28.144034999999999,-100.090288999999984 28.148312999999998,-100.119627999999992 28.155588000000002,-100.12658652988236 28.159659080291213,-100.141098 28.168149,-100.159890345070792 28.168159605160877,-100.160589999999999 28.16816,-100.1644540887186 28.169825181963088,-100.168437999999995 28.171541999999999,-100.173949604741296 28.178834844700365,-100.174413 28.179448,-100.17569869464343 28.180169771489844,-100.185693999999998 28.185780999999999,-100.195825662217615 28.189941498404405,-100.196499000000003 28.190218000000002,-100.19841872968675 28.190245400986015,-100.202449991411854 28.190302940621361,-100.208059000000006 28.190382999999997,-100.21208061434919 28.196473071951928,-100.212104999999994 28.196509999999996,-100.212111438897693 28.196576571978802,-100.212136678181992 28.196837521783539,-100.213449999999995 28.210415999999999,-100.217564999999993 28.226934,-100.220284000000007 28.232209999999995,-100.22363 28.235223999999995,-100.227575000000002 28.235856999999999,-100.246200000000002 28.234092,-100.251633999999996 28.236177,-100.261135590980771 28.244561246718906,-100.267604000000006 28.250268999999999,-100.280518 28.267969,-100.289383999999998 28.273491,-100.293468000000004 28.278475,-100.294296000000003 28.284381,-100.287553999999986 28.301093000000002,-100.286470999999992 28.312295999999996,-100.288638999999989 28.316977999999995,-100.314198000000005 28.345859,-100.317245999999997 28.357382,-100.320392999999996 28.362116999999998,-100.341869000000003 28.384952999999996,-100.344399999999979 28.389662,-100.34934096344108 28.4019924953441,-100.349585999999988 28.402603999999997,-100.349394820211828 28.402858691740477,-100.345766407828719 28.407692501181913,-100.343945000000005 28.410119000000002,-100.337058999999996 28.427150999999995,-100.336185999999998 28.430180999999997,-100.337474638078888 28.440402915586755,-100.337648113426326 28.441778981052359,-100.337796999999995 28.442959999999999,-100.338752462381066 28.444650728533539,-100.341532999999998 28.449570999999995,-100.350785999999999 28.459246,-100.353875644654778 28.461269551534915,-100.357498000000007 28.463642,-100.35795880406117 28.464220845064407,-100.358193534884933 28.464515705266944,-100.367961112704847 28.47678537623738,-100.368288000000007 28.477195999999999,-100.368051363629903 28.477598261305609,-100.365982000000002 28.481116,-100.356642877924983 28.482149981508559,-100.352234999999979 28.482638,-100.344180999999992 28.486249,-100.337140000000005 28.491728999999999,-100.33381399999999 28.499251999999998,-100.338517999999993 28.501833,-100.362147999999991 28.508399,-100.379079000000004 28.511638999999999,-100.388859999999994 28.515747999999995,-100.405057999999983 28.535779999999999,-100.411413999999994 28.551898999999999,-100.40430324537553 28.563833042228197,-100.397270000000006 28.575637,-100.396799999999999 28.580400999999998,-100.398385000000005 28.584883999999999,-100.403243426032972 28.586668145075244,-100.425819035320046 28.594958517689108,-100.429856 28.596440999999995,-100.431892715674053 28.597943579291371,-100.447320000000005 28.609324999999998,-100.448648000000006 28.616773999999999,-100.447280739633683 28.625703494601449,-100.445528999999993 28.637143999999996,-100.44560646842767 28.637394606891831,-100.447014715516048 28.641950223113035,-100.447091 28.642196999999999,-100.447325484276334 28.642184618041064,-100.447599559425257 28.642170145483281,-100.456522261830528 28.641698981546444,-100.462866000000005 28.641363999999999,-100.474494000000007 28.647071,-100.479445543783555 28.654922981332383,-100.479495071011698 28.655001519842354,-100.479635999999999 28.655225000000002,-100.481416494659797 28.655591917738484,-100.492493911747701 28.657874710783531,-100.493322226012125 28.658045406716248,-100.495863 28.658568999999996,-100.496129521434568 28.658770241190073,-100.500353999999987 28.661960000000004,-100.502122125123847 28.667202406240314,-100.505211969634487 28.676363647108229,-100.509438609439442 28.688895431533517,-100.510054999999994 28.690722999999995,-100.510127443340068 28.69126843161186,-100.510538898440004 28.694366309458967,-100.51077198772829 28.696121257064849,-100.511998000000006 28.705352,-100.511351260759739 28.706743032691019,-100.510646631791559 28.708258576930099,-100.509872363628347 28.709923903942272,-100.509406561254394 28.710925770365975,-100.508636802312012 28.712581398765199,-100.507069450532313 28.715952521820881,-100.506701000000007 28.716745000000003,-100.506745928327234 28.717920131927187,-100.506786973330165 28.718993692782757,-100.507152057645129 28.728542729239727,-100.507513721430456 28.738002299344281,-100.507590113222051 28.740000380261673,-100.507613000000006 28.740599,-100.507694735304739 28.740708529390524,-100.51442566685138 28.749728313832868,-100.519226000000003 28.756160999999999,-100.533017 28.763279999999998,-100.537772000000004 28.780775999999996,-100.534846642084489 28.786410367511117,-100.532431000000003 28.791062999999998,-100.535830000000004 28.805887999999999,-100.546431879116881 28.824270186264151,-100.546968759195195 28.825201061771438,-100.547323999999989 28.825817,-100.548186025546428 28.826178082695296,-100.553129999999982 28.828249,-100.561442999999997 28.829174000000002,-100.570509999999999 28.826317,-100.574698999999995 28.828786999999998,-100.576846000000003 28.836168000000004,-100.572991999999999 28.848463999999996,-100.580501999999996 28.856007999999999,-100.591040000000007 28.863054000000002,-100.598061272695219 28.874286065303028,-100.598877000000002 28.875590999999996,-100.602654 28.887660000000004,-100.602394435759351 28.893839359355621,-100.602053999999995 28.901944,-100.615584686670886 28.902906942475386,-100.627205999999987 28.903734,-100.631611000000007 28.902838999999997,-100.633502414453218 28.905240591668694,-100.640568000000002 28.914211999999999,-100.639169999999979 28.916288999999999,-100.638857000000002 28.927621999999996,-100.651511999999997 28.943431999999998,-100.64789859018552 28.954344193790252,-100.646992999999995 28.957078999999997,-100.646600907687997 28.967547400926616,-100.64647463428885 28.970918751315974,-100.645893999999998 28.986421,-100.647406325643686 28.99295674936236,-100.647835962928511 28.994813493392339,-100.648681241069511 28.998466493719445,-100.65094599999999 29.008254000000004,-100.653757999999996 29.015356,-100.656109999999998 29.017223999999999,-100.660207999999997 29.031497000000002,-100.663212 29.048041999999995,-100.662508000000003 29.058106999999996,-100.664064999999994 29.073205999999999,-100.666359117032755 29.07896154562156,-100.668483863047285 29.084292168447689,-100.674655999999999 29.099777000000003,-100.684472 29.110657,-100.692326999999992 29.115227999999995,-100.70996599999998 29.119684000000003,-100.727461999999989 29.129122999999996,-100.737795000000006 29.139078999999999,-100.739115999999996 29.141658,-100.737590999999995 29.147406999999998,-100.739681000000004 29.150486000000004,-100.746139999999997 29.154149000000004,-100.752330696165359 29.155516457617566,-100.759726 29.157149999999998,-100.76337082361762 29.160348915845475,-100.772648999999987 29.168492,-100.775904999999995 29.173344,-100.772154104961558 29.17809434863841,-100.766030999999998 29.185848999999997,-100.767059000000003 29.195287,-100.768348510582513 29.197581465531123,-100.775064591152173 29.209531592641572,-100.785521000000003 29.228136999999997,-100.791371999999996 29.225944999999999,-100.795681000000002 29.227729999999998,-100.79704599999998 29.235585999999998,-100.795234211471239 29.241421249558652,-100.795010188783237 29.242142762180318,-100.794911999999997 29.242459,-100.795310930062826 29.24310735172228,-100.797670999999994 29.246943000000002,-100.805332448258866 29.251327106905226,-100.815767091023289 29.257298117587734,-100.823532999999998 29.261742000000002,-100.834039999999987 29.261399999999998,-100.839016 29.263259,-100.841581161127962 29.265429071012271,-100.848663999999999 29.271420999999997,-100.856469000000004 29.275663999999999,-100.864659000000003 29.276076,-100.874739696506666 29.279181633366278,-100.876048999999995 29.279585,-100.876625364221198 29.280115401513385,-100.878513170701353 29.281852663087207,-100.878882999999988 29.282193000000003,-100.879105716359817 29.283377353454046,-100.880504361011205 29.290815018226784,-100.882051999999987 29.299044999999996,-100.886842 29.307848,-100.895590728097048 29.309871687341737,-100.904835000000006 29.31201,-100.906461302333199 29.313095095005444,-100.914770068080642 29.318638836799305,-100.916744062319239 29.319955917421627,-100.92203960930695 29.323489191321695,-100.922232587658954 29.323617949573855,-100.924041970395777 29.324825198761538,-100.926468967605715 29.326444530233299,-100.926628772437255 29.326551154580446,-100.926677999999981 29.326584,-100.92692137104487 29.32669794102517,-100.927819078352698 29.327118228044156,-100.92782883100196 29.32712279402223,-100.930446231588661 29.328348203997709,-100.940614999999994 29.333109,-100.941560773525751 29.336361493535293,-100.943196 29.341985,-100.945807189162338 29.344363370184055,-100.948971999999998 29.347245999999998,-100.95603875001359 29.347290187325033,-100.964324999999988 29.347342,-100.971743000000004 29.351370999999997,-100.972915999999998 29.354545000000005,-100.995606999999993 29.363403000000005,-101.004206999999994 29.364771999999999,-101.010614000000004 29.368669,-101.010768998319776 29.36895846820963,-101.014103165002794 29.375185214807839,-101.024016000000003 29.393697999999997,-101.036603999999997 29.406107999999996,-101.038600000000002 29.410713999999999,-101.037642000000005 29.414681000000002,-101.043363999999997 29.42988,-101.056956999999983 29.440773,-101.06011415724447 29.458454662113137,-101.060150999999991 29.458660999999999,-101.063843258270609 29.460131584976065,-101.087148999999997 29.469414,-101.103699000000006 29.470549999999999,-101.115253999999993 29.468458999999996,-101.130037999999985 29.47842,-101.137502999999995 29.473541999999998,-101.144336999999993 29.473246,-101.151876999999999 29.477004999999998,-101.163854997623304 29.493316894569897,-101.168923969306405 29.50021992913986,-101.171662999999995 29.503950000000003,-101.173821000000004 29.514566000000002,-101.192719999999994 29.520285,-101.227418999999998 29.522349999999996,-101.235274999999987 29.524854,-101.254895000000005 29.520341999999996,-101.260836999999981 29.529933,-101.261174999999994 29.536777,-101.252755240314642 29.553001111955531,-101.244355179006547 29.569187266927752,-101.24384013276574 29.574337712700849,-101.242022713082847 29.59251185083151,-101.251352546644355 29.604174135250076,-101.252152766968493 29.604494220898598,-101.259127443101093 29.607284069726152,-101.265347312053251 29.607284069726152,-101.274677145614746 29.602619152945408,-101.277624046978673 29.599940160672645,-101.283229510623855 29.594844301688571,-101.297224215766221 29.587069435365102,-101.30733154801338 29.587846934050759,-101.312894947857018 29.594028488101586,-101.314328915651188 29.595621785307589,-101.313192213312618 29.602947206633093,-101.31110792457288 29.616379301091623,-101.30733154801338 29.640715970810437,-101.311218981175116 29.64849082206727,-101.316661381574889 29.655488204771718,-101.325213716450733 29.657820655628775,-101.350093282659174 29.654710721152696,-101.353062961800887 29.655502634567405,-101.361755552011104 29.657820655628775,-101.364595571422868 29.66106639883844,-101.367197952410862 29.664040554714198,-101.371300910394638 29.676075888592084,-101.372874548462477 29.680691889931673,-101.378860251896057 29.698249939417508,-101.396947999999995 29.713947,-101.398362000000006 29.717000000000002,-101.396293999999997 29.727055,-101.397008999999997 29.733962999999999,-101.400635999999992 29.738078999999999,-101.410024000000007 29.741498,-101.415583999999996 29.746534,-101.415509877418046 29.750619769974676,-101.415402087456428 29.756561346443686,-101.424731921017937 29.758116313681725,-101.430388403484372 29.756500180308258,-101.441059122217254 29.75345141196761,-101.446501522617027 29.755006409338922,-101.451652003139955 29.758440048234313,-101.453498905321467 29.759671311053037,-101.455223999999987 29.771874,-101.467493655663716 29.779885945414083,-101.475268506920557 29.780663444099741,-101.503223000000006 29.764581999999997,-101.522695143280473 29.759671311053037,-101.526552276219391 29.761451532447605,-101.532802460460985 29.764336242900427,-101.53746737724174 29.782995910023434,-101.53804719015173 29.783865628452077,-101.546797210803248 29.796990645299058,-101.56156944476453 29.794658179375361,-101.572592853930203 29.778735448896484,-101.575564187573463 29.774443514881042,-101.582561562744587 29.771333610538232,-101.598573641854728 29.773657690388074,-101.603680999999995 29.774398999999999,-101.607256216824311 29.773863608191139,-101.625957999999997 29.771063000000002,-101.630319 29.768729,-101.632632680380155 29.763891873249722,-101.63512799999998 29.758675,-101.646417999999997 29.754303999999998,-101.652400999999983 29.758794999999996,-101.65328091488901 29.761368862201802,-101.654578 29.765162999999998,-101.662452999999985 29.77128,-101.689992000000004 29.771212999999996,-101.706636000000003 29.762736999999998,-101.714223999999987 29.767659999999999,-101.735201999999987 29.771591999999998,-101.754322999999999 29.777661999999999,-101.760919284561496 29.782457957985276,-101.763273999999981 29.784169999999996,-101.776796131253491 29.789191504347542,-101.777161000000007 29.789327,-101.777360180704861 29.789301830227139,-101.785668 29.788251999999996,-101.791002820423358 29.783037559970925,-101.796869557069002 29.782618516634159,-101.806507764952315 29.786389987871868,-101.809441149516488 29.790161459109573,-101.813855730843954 29.79253854440006,-101.814888826583982 29.793094827432377,-101.818909248247508 29.792167038125061,-101.830044431332681 29.789597381341238,-101.831231874027822 29.789323356194672,-101.852603555202364 29.801894932400803,-101.862241763085706 29.800218726571018,-101.866487373818487 29.79821962567333,-101.875399999999985 29.794022999999999,-101.878152615094365 29.794637055896249,-101.892739000000006 29.797891,-101.912406000000004 29.797849999999997,-101.917556726002999 29.792675767854249,-101.917942403066036 29.792482929945557,-101.922585359733716 29.790161459109573,-101.929709258872364 29.789323356194672,-101.932572380438657 29.791613852338052,-101.938090312383324 29.796028195755184,-101.946471365894325 29.797704401584976,-101.952535620779244 29.796990962273608,-101.953595265032959 29.796866298670082,-101.959462001678588 29.799380623656123,-101.965427194081556 29.806464275410743,-101.966166845299441 29.8073426094683,-101.970357372054934 29.81027599403247,-101.974547898810414 29.81027599403247,-101.982165144097308 29.804870201524977,-101.987538526473998 29.801056829485908,-101.993568005272067 29.802652866652032,-102.001318622543394 29.804704498914084,-102.001786318660763 29.804828300723614,-102.021918999999997 29.802490999999996,-102.032489182844799 29.803756293694118,-102.034758999999994 29.804027999999999,-102.039012999999997 29.802655,-102.041088000000002 29.799609999999998,-102.038411999999994 29.792831999999997,-102.039226999999997 29.790977000000002,-102.041308736499772 29.78984019520162,-102.048982832584102 29.785649487466547,-102.050044 29.785069999999997,-102.053123037129694 29.785312127485501,-102.073645999999982 29.786926,-102.076299925656656 29.790865308882584,-102.077348 29.792421,-102.084438999999989 29.794962000000002,-102.091420021879856 29.792967151942147,-102.091815999999994 29.792853999999995,-102.098789196918744 29.792718427915432,-102.115682000000007 29.792389999999997,-102.142325999999997 29.802854,-102.159600999999995 29.814355999999997,-102.161673999999991 29.819486999999999,-102.181894 29.846033999999996,-102.182859740836193 29.846584944255238,-102.18326563789924 29.846816503951921,-102.184058205433814 29.847268654791659,-102.186149999999998 29.848461999999998,-102.187393471220204 29.848699156882201,-102.188384798592551 29.848888224473839,-102.188671999999997 29.848942999999998,-102.189026115519184 29.848805138880103,-102.189342793483831 29.848681852617602,-102.205381000000003 29.842438,-102.216284162639099 29.842976962035557,-102.227553 29.843533999999995,-102.261388999999994 29.853283,-102.264041000000006 29.855964,-102.261776999999995 29.864001999999999,-102.264954000000003 29.867805999999998,-102.268816999999984 29.867990999999996,-102.276754999999994 29.862977999999998,-102.281249000000003 29.863116999999999,-102.297330999999986 29.875194,-102.301381000000006 29.877673999999995,-102.315388999999996 29.879919999999998,-102.320618999999994 29.878979999999995,-102.320667125014978 29.878900015386019,-102.320698585434869 29.878847727619664,-102.324634000000003 29.872306999999996,-102.333383999999995 29.868046,-102.341032999999996 29.869305000000004,-102.349861000000004 29.862316999999997,-102.361383773688715 29.849029038788231,-102.364542 29.845386999999995,-102.363642671554629 29.839963091609825,-102.362514000000004 29.833155999999995,-102.369522000000003 29.820395,-102.377253999999994 29.800163,-102.377312999999987 29.789971,-102.385270832882995 29.770348713937391,-102.386677616883858 29.766879890389689,-102.391739211722737 29.765814289574276,-102.392906191083 29.765568609270456,-102.402175111261812 29.766775086101941,-102.412062000000006 29.768061999999997,-102.433301 29.776608,-102.460890018677347 29.77909171043791,-102.468946430597143 29.779816991558327,-102.469957868267898 29.780012383523857,-102.481595292961757 29.782260529257879,-102.490330613701886 29.783948039559665,-102.492674483475767 29.783853017496881,-102.508312776666344 29.783219030534834,-102.508509848222559 29.783087649355906,-102.512686811979108 29.780303003853621,-102.512942156326147 29.774953626291172,-102.513380999999995 29.76576,-102.526400256170959 29.758693706517125,-102.535832205630967 29.753574449155192,-102.539417050278132 29.751628749336795,-102.545492105079163 29.750899740311965,-102.551081152293932 29.752357753652575,-102.556670813570321 29.757783010503054,-102.559343229460382 29.760376824671383,-102.565661280990938 29.761591836573395,-102.572255912443325 29.757095496286663,-102.57574472309652 29.754716761401177,-102.57635337725236 29.754301769870359,-102.585948674897452 29.751239442391949,-102.587774480184081 29.750656738873374,-102.597160000000002 29.751608,-102.612879000000007 29.748181999999996,-102.622534000000002 29.736632,-102.630150999999984 29.734314999999999,-102.64566499999998 29.733910000000002,-102.661251958261417 29.736122779697027,-102.66726872436665 29.739732837494621,-102.670971460158171 29.741954477821469,-102.677191937153026 29.738261067251376,-102.678467215476147 29.736427653943998,-102.6852530581628 29.72667193704833,-102.688163999999986 29.722486999999997,-102.690237999999979 29.707481999999999,-102.695507594622001 29.699754690880447,-102.698346999999984 29.695590999999997,-102.699316999999994 29.685029,-102.693466 29.676507,-102.697798916570122 29.672550546488289,-102.711337549653422 29.6601882100483,-102.724231000000003 29.648415000000004,-102.736947999999984 29.641537999999997,-102.742030999999997 29.632142000000002,-102.74048425929719 29.62775763619268,-102.738427999999999 29.621928999999998,-102.739991000000003 29.599041,-102.746201999999997 29.592875000000003,-102.757065999999995 29.597798999999998,-102.761810999999994 29.598396999999999,-102.768340999999992 29.594733999999999,-102.766929734823805 29.591197739636346,-102.762241000000003 29.579448999999997,-102.766124000000005 29.572347999999998,-102.768792219428661 29.572598581791439,-102.773961 29.573084,-102.776343296957975 29.562015327831393,-102.777530999999996 29.556497,-102.77572499999998 29.552188999999995,-102.771428999999998 29.548545999999998,-102.79216136048494 29.533953841063816,-102.807296321997939 29.523301326891541,-102.808565712504773 29.522407885546979,-102.808691999999979 29.522319000000003,-102.808681334358837 29.522097795383676,-102.808577631171161 29.519946998869006,-102.807327 29.494009000000002,-102.813953999999995 29.482805999999997,-102.814096473430837 29.482483316434472,-102.814383778328263 29.481832608662831,-102.822314986984821 29.463869465126457,-102.82537225240516 29.456945161410285,-102.827007089548758 29.453242470491304,-102.830969999999979 29.444267,-102.832538999999997 29.433109000000002,-102.830570753051859 29.427471931628293,-102.827354999999983 29.418261999999995,-102.825211066354328 29.40389180477127,-102.824564449740322 29.399557712155943,-102.831802092379931 29.389471209449322,-102.832669213065941 29.388262775214326,-102.84047188579207 29.377388836904565,-102.840778422425643 29.376961642203423,-102.841560439245441 29.370344567434586,-102.842457529677418 29.362753791491347,-102.843015380341285 29.358033509958585,-102.843020777220957 29.357987843989019,-102.861629999999991 29.351638999999995,-102.871857000000006 29.352092999999996,-102.876866000000007 29.354058999999996,-102.879534000000007 29.353326999999997,-102.883721999999992 29.348058999999999,-102.881857488401977 29.34363024944906,-102.879805000000005 29.338754999999999,-102.890489000000002 29.309498999999995,-102.88922161316745 29.299205074185686,-102.888328 29.291947,-102.891022000000007 29.287113000000002,-102.902604999999994 29.279440999999998,-102.90311226801488 29.27677066200776,-102.906295999999998 29.260010999999995,-102.903188999999983 29.254028999999999,-102.887901999999997 29.245611999999998,-102.881135 29.246022,-102.871347 29.241624999999999,-102.870795537867835 29.239589944231255,-102.86823682221636 29.230147538772215,-102.866845999999995 29.225014999999999,-102.878020000000006 29.214697999999999,-102.890063999999995 29.208813999999997,-102.899231 29.208863,-102.908656596973657 29.219194069767902,-102.908787000000004 29.219336999999996,-102.909098471667448 29.219296482603067,-102.910575587951939 29.219104333804097,-102.912131000000002 29.218902,-102.912650757516516 29.218481184275788,-102.915803535402844 29.215928573746115,-102.915865999999994 29.215877999999996,-102.915845750043147 29.215583596781208,-102.915608148145267 29.212129230727648,-102.915554 29.211341999999998,-102.915202931298523 29.21076702044931,-102.914525807203304 29.209658028088604,-102.912447999999998 29.206254999999999,-102.91453363655873 29.20019781620671,-102.917367531146525 29.191967513425833,-102.917805 29.190697,-102.922897000000006 29.192704085059273,-102.925481999999988 29.193722999999995,-102.932612000000006 29.194113000000005,-102.944911000000005 29.188819999999996,-102.947155999999993 29.180776999999999,-102.95089 29.176834999999997,-102.953474999999997 29.176307999999995,-102.977266 29.186226,-102.981742305424802 29.185103060319207,-102.989431999999994 29.183174,-102.98978258837333 29.182935350109393,-102.991725524817895 29.181612768970929,-102.994653 29.17962,-102.994906329461855 29.17910907354543,-102.99809599999999 29.172675999999996,-102.995688 29.161218999999999,-103.00243399999998 29.150260999999997,-103.0050672680876 29.149386797638936,-103.008362000000005 29.148292999999995,-103.010324999999995 29.137821999999996,-103.015028 29.125769999999996,-103.016945338084582 29.124525732477775,-103.024896087692937 29.119366048020158,-103.032982999999987 29.114118,-103.033302941039096 29.107355634443419,-103.034095953658579 29.105913798143234,-103.035682683422891 29.103028844591982,-103.04044215980575 29.099351067768175,-103.049126083320303 29.097714968852063,-103.055369601981923 29.096538655622457,-103.061557539334615 29.093936906572154,-103.06671291432167 29.091769303506382,-103.074407490743866 29.088534080562461,-103.076354546596249 29.085721668416742,-103.076667707631657 29.079576983004682,-103.076847 29.076059,-103.091926967746744 29.064237268591206,-103.100265999999991 29.057699999999997,-103.101359249603803 29.049403674773888,-103.102531654124817 29.040506667933872,-103.100975335951205 29.030701853789079,-103.100368259199087 29.026877266486249,-103.101607999999999 29.018122999999999,-103.107810999999998 29.013812,-103.117237999999986 29.000208999999998,-103.113922000000002 28.988546999999997,-103.115062910480361 28.985887850893185,-103.115327999999991 28.98527,-103.115773294260094 28.985147329619764,-103.126748000000006 28.982123999999995,-103.134930999999995 28.983525,-103.143274000000005 28.978073999999999,-103.156645999999995 28.972830999999999,-103.163865 28.972099,-103.165923000000006 28.974001999999999,-103.166234999999986 28.978836000000005,-103.174329720990258 28.980505274886987,-103.182663652045193 28.982223879127538,-103.194928465619142 28.984753100989199,-103.195705106971403 28.984913258196226,-103.207825367468075 28.987412670652219,-103.227338454203803 28.991436614861634,-103.227579101883322 28.991486240676846,-103.227800999999999 28.991532000000003,-103.228011662384262 28.991347921912006,-103.228737472224623 28.990713704806197,-103.239108999999985 28.981650999999996,-103.245121150470112 28.980239630911282,-103.2474464632202 28.980649978816817,-103.249155161185584 28.980951512720708,-103.25190330878641 28.984768118238364,-103.253285000000005 28.986686999999996,-103.26030800838916 28.989731411362609,-103.266003072061508 28.990206003834011,-103.270357000000004 28.988113999999996,-103.270725571428585 28.987466542857135,-103.27232562100086 28.984655789108508,-103.273357000000004 28.982844,-103.273647076585334 28.982817854078331,-103.281189929980513 28.982137982403092,-103.282424051550748 28.983865752282551,-103.284749352823042 28.987121173462914,-103.285935817906974 28.994002716014545,-103.289257951411443 28.999697788883793,-103.296614077237592 29.004443676810233,-103.302399476821606 29.006455988366771,-103.312987409437454 29.010138745081029,-103.315449022736544 29.011725838031147,-103.323993942362023 29.017235063099889,-103.331021803791103 29.021766184756,-103.332920159881368 29.026986669752301,-103.332783823258595 29.028827200289001,-103.332445567409962 29.033393619832523,-103.334818511373186 29.039800579109659,-103.341462759988346 29.041224342728523,-103.347869719265475 29.037427630547988,-103.350815999999995 29.028566999999999,-103.355428000000003 29.021529,-103.355590463621823 29.021464336016578,-103.361777791205157 29.019001647792766,-103.361998 29.018913999999999,-103.382125000000002 29.024248999999998,-103.386095607142025 29.025822707722725,-103.399799910010643 29.031254261761571,-103.402689272115182 29.032399429564627,-103.427474921518822 29.04222295692054,-103.427754276336316 29.042333676218103,-103.430481680804888 29.047455485683194,-103.434668000000002 29.055316999999995,-103.439550459717495 29.058547821156772,-103.449722032594721 29.065278554178825,-103.453029264571228 29.067467015663059,-103.457386392383299 29.068596640465525,-103.460381908910477 29.067681344107211,-103.463195887793432 29.066821517562918,-103.469166763983068 29.069242141692889,-103.471264639062966 29.073115142802621,-103.471299587628792 29.074897490538035,-103.471426016715213 29.08134526859719,-103.474814887995407 29.086670637304994,-103.484429000000006 29.094524,-103.49531945696836 29.1087608679228,-103.500928937954981 29.116094025764934,-103.503236 29.119109999999996,-103.506163032831353 29.119368513261239,-103.513192088151087 29.119989313955617,-103.524613000000002 29.120998,-103.524225442342612 29.124905426308125,-103.523383999999993 29.133389,-103.525026999999994 29.137353999999998,-103.539240927934515 29.144791265038371,-103.551909954693073 29.151420179312847,-103.558678999999984 29.154961999999998,-103.579462000000007 29.149964999999998,-103.592359999999999 29.150259999999999,-103.598960126757959 29.155019048637598,-103.606437999999997 29.160411,-103.607894091053709 29.162314354517299,-103.610539999999986 29.165772999999998,-103.624537921955991 29.163185608071569,-103.629433693714475 29.1622806680118,-103.638195234739996 29.160661174732635,-103.645634999999999 29.159286000000002,-103.653180000000006 29.162863999999995,-103.656807999999984 29.169098999999999,-103.660202999999996 29.170933999999999,-103.667724667668963 29.172878689431396,-103.669696386484915 29.173388467437,-103.688670000000002 29.178293999999998,-103.688830238367032 29.178273608722382,-103.690116124218548 29.178109972160996,-103.697314000000006 29.177194,-103.699305464408098 29.178139630948273,-103.713769999999997 29.185008,-103.724743000000004 29.191469999999999,-103.73193762439729 29.198544108660482,-103.742175000000003 29.20861,-103.750912464183997 29.219357091602017,-103.755265634411842 29.22471149629115,-103.75594348727293 29.225545256136954,-103.768569999999997 29.227360999999995,-103.777623396259372 29.232265264832392,-103.780085146052983 29.242351446713872,-103.780352362214714 29.243446273985068,-103.781659908552058 29.248803500057083,-103.789034484601103 29.257501704713096,-103.792700821322356 29.259284649416337,-103.795120675584712 29.260461427946989,-103.80876361213285 29.267096007175422,-103.816641821688407 29.27092719156084,-103.818617217853202 29.271599921312173,-103.838302999999982 29.278303999999999,-103.854966933859771 29.281484400071786,-103.856892999999999 29.281852,-103.880606 29.284961999999997,-103.896615144488038 29.284634799403065,-103.910231251371073 29.284356508561018,-103.916269383748329 29.284233099060927,-103.91710599999999 29.284215999999997,-103.91776286712728 29.284516760669142,-103.918698764585329 29.284945281345607,-103.918909999999997 29.285042,-103.918905327188597 29.285488562070029,-103.918900778480648 29.285923264066316,-103.918857000000003 29.290106999999995,-103.924975999999987 29.293913000000003,-103.943697999999983 29.294945999999996,-103.965795999999983 29.298586999999998,-103.975234999999998 29.296016999999999,-103.983459597310627 29.299165977024781,-103.998789342279238 29.305035323921498,-104.012357062242771 29.310230038851625,-104.018558084893087 29.312604243583909,-104.038281999999995 29.320155999999997,-104.047006656168747 29.325575022319434,-104.055595999999994 29.330909999999996,-104.056467149578211 29.334496091467582,-104.057243999999997 29.337694000000003,-104.068917843404819 29.342306667996301,-104.075923999999986 29.345075,-104.082149999999999 29.345922999999996,-104.091021999999995 29.353691999999995,-104.093326000000005 29.359926000000002,-104.098377999999983 29.366755999999999,-104.106466999999981 29.373127,-104.122882935723638 29.379859019095424,-104.125474999999994 29.380922000000002,-104.132831527553293 29.381873417846823,-104.136236243923818 29.382313748953422,-104.143691999999987 29.383277999999997,-104.1467332019064 29.385415391432094,-104.148888696362661 29.386930297552944,-104.151718842950046 29.388919356896473,-104.157422367906094 29.392927859373117,-104.166562999999996 29.399352,-104.180069999999986 29.412763999999999,-104.181273000000004 29.426265,-104.182051945448123 29.427144615030393,-104.195989999999995 29.442884000000003,-104.208194000000006 29.448201,-104.212529153241931 29.452438774515159,-104.213947876032222 29.456222068892099,-104.21370324326665 29.462011765001886,-104.213238514637069 29.473010445135856,-104.218538498245692 29.476600759818915,-104.220568643482977 29.477976020723915,-104.227547514371139 29.480496161448666,-104.229081071868791 29.481049944541308,-104.233824999999996 29.486544999999996,-104.233486999999997 29.492733999999995,-104.235847000000007 29.496744,-104.238313284768751 29.498023301020304,-104.246870092866089 29.50246185307569,-104.254473621536903 29.506405923975272,-104.260293266516271 29.50942466611497,-104.26168489846043 29.511073814728768,-104.264155000000002 29.514001,-104.271046277211582 29.51559593462645,-104.274575430964404 29.516412730896519,-104.293481117436073 29.520788310787555,-104.306646311930564 29.523835296697214,-104.308812834933008 29.524336722260216,-104.311570786550874 29.52540915148019,-104.318073989469781 29.527937921306467,-104.320711000000003 29.526326414398167,-104.326090351466348 29.523039031981277,-104.327483437129615 29.522187701603762,-104.334811000000002 29.519462999999998,-104.338113000000007 29.519967,-104.353150868059984 29.530471948300562,-104.369085650105362 29.541603450512167,-104.37074044290263 29.542759433043344,-104.371174999999994 29.543062999999997,-104.371454921502831 29.543072731712495,-104.371996954766473 29.543091575966443,-104.375901661123379 29.543227326450971,-104.381040999999996 29.543405999999997,-104.394588999999982 29.556087000000002,-104.394583075653415 29.556197720561212,-104.394577025204526 29.556310797858156,-104.394552364240909 29.55677168847231,-104.394503136758885 29.55769170460702,-104.394351 29.560534999999998,-104.39571704642303 29.563607040276512,-104.39636925661604 29.56507376640522,-104.397848504811165 29.56840038104859,-104.399550133070164 29.572227096202102,-104.399591 29.572319,-104.399981791506633 29.572551361916329,-104.452301000000006 29.60366,-104.466520000000003 29.609296,-104.483502 29.627740999999997,-104.486693164979016 29.629712817604439,-104.493658999999994 29.634016999999997,-104.503232654335022 29.63787621670291,-104.507568060311556 29.63962385355849,-104.51068846437596 29.64315687341222,-104.513969549435132 29.646871821353749,-104.51818442992635 29.651644041921735,-104.53325150001281 29.668703453669117,-104.535568725458901 29.671327089370656,-104.539761023554547 29.676073741438437,-104.540155514025756 29.678572204873163,-104.540559188867974 29.681128836544634,-104.537934834631798 29.684482179324355,-104.535770155740693 29.687248158943191,-104.536302269386866 29.690440851131939,-104.537991394981006 29.693268523024599,-104.544269904764263 29.703779029587054,-104.545505621253113 29.70584767433138,-104.552240999999995 29.717122999999997,-104.555600999999996 29.731220999999998,-104.554914970831931 29.738152096413199,-104.554660236582549 29.740725729903364,-104.557361904757329 29.745049367744027,-104.565950999999998 29.758794999999996,-104.565687999999994 29.770461999999998,-104.571279565966023 29.778773775962186,-104.586447318468245 29.801320404476364,-104.592472 29.810276000000002,-104.594023000000007 29.809220999999997,-104.599148999999997 29.811007,-104.610166000000007 29.819117999999996,-104.610205623651026 29.819231101342197,-104.610356932717465 29.819662996386217,-104.613081011852316 29.827438579869643,-104.615248982559379 29.833626813172685,-104.619039 29.844444999999997,-104.624350000000007 29.845221999999996,-104.629290740007292 29.852171499068138,-104.629713747950376 29.852766489555783,-104.630103000000005 29.853313999999997,-104.630111961493199 29.853664893019587,-104.630290851730521 29.860669455113747,-104.630338938536084 29.862552324858758,-104.630359999999996 29.863376999999996,-104.630588419131911 29.86393398222631,-104.633274999999998 29.870484999999999,-104.63616345635748 29.872800876528242,-104.645854762904364 29.880571071602066,-104.65678299999999 29.889332999999997,-104.658422170930251 29.891285606400047,-104.65864999999998 29.891556999999999,-104.658665881124946 29.891956296855856,-104.659041999999999 29.901413000000002,-104.661965712024596 29.903547518850328,-104.666224133352003 29.906656470935726,-104.672326999999996 29.911111999999996,-104.679772 29.924658999999998,-104.680850906343153 29.932111041680564,-104.684321999999995 29.956085999999999,-104.679660999999982 29.975271999999997,-104.680379178583593 29.977083,-104.685479 29.989943,-104.689640999999995 30.014949999999999,-104.693591999999995 30.019077000000003,-104.701242868742796 30.021046973658397,-104.702310999999995 30.021321999999998,-104.702447580064685 30.021555813412469,-104.7030116881661 30.022521518330599,-104.703997999999999 30.02421,-104.703882705803636 30.024660825787098,-104.703121214098445 30.027638426639932,-104.701101999999992 30.035533999999998,-104.706873999999999 30.050685,-104.706630611705322 30.051708605996314,-104.703831250551389 30.063481739403372,-104.703581999999997 30.06453,-104.699792220462342 30.065066336345112,-104.698848962238912 30.065199827927678,-104.698233000000002 30.065286999999998,-104.697787990647399 30.065651654776563,-104.69277799999999 30.069756999999996,-104.687313590037505 30.080921966773531,-104.685080632167896 30.08548438075637,-104.685002999999995 30.085643,-104.685554782105299 30.093963293324606,-104.685687 30.095957000000002,-104.686861171517634 30.098036494960315,-104.692093999999983 30.107303999999996,-104.693655813605488 30.119154117533654,-104.695366000000007 30.13213,-104.692122999999995 30.138662999999998,-104.690080458880587 30.149079251722458,-104.687506999999997 30.162202999999998,-104.687296000000003 30.179464000000003,-104.702787999999998 30.211735999999995,-104.707897632633845 30.218501061672534,-104.711235999999985 30.222920999999999,-104.713166 30.237956999999998,-104.722357186598074 30.248308653999679,-104.724410584274111 30.250621311025988,-104.72532436157617 30.251650460675243,-104.73347160041142 30.260826359409911,-104.733822000000004 30.261220999999999,-104.734059376092361 30.261231667834558,-104.737359999999995 30.261379999999996,-104.740448 30.259454000000002,-104.749663999999996 30.26126,-104.751566999999994 30.263643999999999,-104.754655151309422 30.272796681105522,-104.757893999999993 30.282395999999999,-104.761634 30.301147999999998,-104.779356000000007 30.313188,-104.790279572675416 30.323632238875831,-104.797291 30.330335999999999,-104.809794338457337 30.334925849121163,-104.810755485390246 30.338091979227556,-104.81211787963197 30.342579864771171,-104.813478341684558 30.347061385458392,-104.814379749150064 30.356375955470707,-104.814778573671205 30.360497153782266,-104.817595751374526 30.365914799658352,-104.824313633436745 30.370465624210016,-104.837492999999995 30.373909,-104.849824017938076 30.383147747051474,-104.859521 30.390413000000002,-104.857439999999997 30.408957,-104.852419999999995 30.418792,-104.861074000000002 30.428896999999996,-104.86474141169117 30.441297336779865,-104.865463293164552 30.443738179024677,-104.868454614768496 30.453852504447951,-104.869872 30.458644999999997,-104.86871099999999 30.463229999999996,-104.866118999999983 30.46479,-104.866094000000004 30.467379999999999,-104.870137228360662 30.483875070981508,-104.873288503237063 30.496731258693877,-104.873335488188886 30.496922942181985,-104.876786999999979 30.511004000000003,-104.878566789651714 30.514416830422793,-104.880108146577356 30.517372454871531,-104.88208573587417 30.521164575423189,-104.889375999999999 30.535143999999995,-104.890392881954469 30.540947215529823,-104.892228000000003 30.551419999999997,-104.895440150997459 30.560421421221292,-104.899000999999998 30.570399999999996,-104.909330873116318 30.584188648619556,-104.909747767935556 30.584745133303247,-104.918689620637082 30.596681007395873,-104.924796 30.604831999999998,-104.927016167130404 30.604700501077968,-104.934922481779466 30.604232215677584,-104.939873000000006 30.603939,-104.953391370086464 30.606003357240429,-104.967167000000003 30.608106999999997,-104.971627504383378 30.61006529240159,-104.972071 30.61026,-104.972794851616513 30.611297344530712,-104.980135850742045 30.621817657146149,-104.980290999999994 30.622039999999995,-104.982191641583043 30.62882153037463,-104.983981 30.635206,-104.985513855292751 30.652294791670293,-104.9863 30.661059000000002,-105.001239999999996 30.672583000000003,-105.002056999999994 30.680971999999997,-105.006614566555172 30.685839873047019,-105.006800999999996 30.686039,-105.007528432885024 30.6859080282745,-105.007959930235828 30.685830338698263,-105.020141999999993 30.683637,-105.035888798004834 30.686138071331488,-105.042930223005172 30.687256464175281,-105.044973600167665 30.685364445024991,-105.049769587265445 30.680923708581364,-105.049884734287517 30.6808170907847,-105.050688284649809 30.681171184306308,-105.054688384336032 30.682933873306403,-105.062333999999993 30.686302999999995,-105.062477471553692 30.692159292631892,-105.062625999999995 30.698222,-105.084504902225902 30.710918832086001,-105.098281999999998 30.718914000000002,-105.108075999999997 30.730049999999995,-105.110705999999993 30.737749999999995,-105.110681999999983 30.743366000000002,-105.113815999999986 30.746001,-105.119547104826722 30.748125675649064,-105.123265000000004 30.749504000000005,-105.140207000000004 30.752502,-105.152361999999982 30.751451999999997,-105.157640215066564 30.754007791997694,-105.16015278062757 30.757058756266805,-105.160271207191187 30.758203550015399,-105.161229588477383 30.767467931854636,-105.164076390339474 30.771453450048199,-105.164818961888187 30.77249304906519,-105.164868027003308 30.772491740665838,-105.170370203038615 30.772345016388588,-105.178279098267282 30.772134113115257,-105.183436 30.776644999999995,-105.185930999999997 30.784391999999997,-105.195143999999999 30.792138,-105.195988495740664 30.791702299374609,-105.203522176185984 30.787815448176353,-105.206160999999994 30.786453999999996,-105.212916518294108 30.785414778041517,-105.215967484302155 30.786491589369188,-105.216685356202021 30.789542555377231,-105.215888956387687 30.792967070566242,-105.214890669496626 30.797259699168034,-105.218659510882389 30.801566944478708,-105.222008841883465 30.801829013843189,-105.231580057313238 30.802577916338681,-105.238364256021057 30.803108747911697,-105.249792715464977 30.799033957074698,-105.255416052233826 30.797028969328842,-105.261224946310648 30.798054073736733,-105.261360733612406 30.798078036329223,-105.27276013440985 30.808707209360072,-105.27887297001547 30.814407016614517,-105.283004544196217 30.818259431108679,-105.287237620233441 30.822206489243744,-105.289317685342255 30.822206489243744,-105.295630129130572 30.822206489243744,-105.300778681061615 30.818848737795758,-105.303672944509898 30.816961174571279,-105.314862960890409 30.816961174571279,-105.316949659843416 30.82296045428,-105.31766045482081 30.825003996727105,-105.320108268786385 30.827451797139727,-105.322675464925993 30.828439452154051,-105.330102631610075 30.831296841312803,-105.347695000000002 30.838065,-105.353219571709047 30.842032277683753,-105.358103536812379 30.84553952616983,-105.359771122039604 30.846737044096301,-105.360672052753856 30.84738401593513,-105.36720323988537 30.847875849249167,-105.377416999999994 30.848644999999998,-105.387780492422849 30.851314552204784,-105.394242074789418 30.852979003795937,-105.396689881978517 30.855426817761515,-105.396237319899697 30.858492407966825,-105.394628539050657 30.86939005724841,-105.394248999999988 30.871960999999999,-105.395681745186749 30.87649980844607,-105.399608999999998 30.888940999999996,-105.399828021807267 30.889112280223049,-105.402824820246408 30.891455847338634,-105.413505 30.899808,-105.430088999999995 30.905791999999998,-105.44547819369545 30.915748838601054,-105.448693870984556 30.917829388134351,-105.452149246331331 30.920065022782566,-105.4597280766598 30.924968540917344,-105.469954295993247 30.931584924947412,-105.472488639470896 30.933224650164071,-105.476269681741059 30.935670991952524,-105.488027000000002 30.943277999999999,-105.495516502166126 30.9493992090351,-105.4968561000139 30.950494069316512,-105.497422439936116 30.953962910943051,-105.497963910074574 30.957279424722472,-105.502256687477072 30.962680017552614,-105.507558525965123 30.966493977230062,-105.533087999999992 30.984859,-105.541468808393844 30.984769556162778,-105.543675999999991 30.984745999999998,-105.557430349577899 30.990228688381027,-105.570063935625512 31.008532833135739,-105.575218046011173 31.016000355201566,-105.578084306850855 31.020153131231776,-105.578407858220658 31.020621907958049,-105.57911399999999 31.021644999999999,-105.580554486932016 31.024917232759986,-105.581339666024604 31.026700857930102,-105.581404000000006 31.026847000000004,-105.581361569643192 31.027041810483581,-105.581235244876609 31.027621805343596,-105.579823718925667 31.034102543987302,-105.579541999999989 31.035395999999995,-105.579765234089464 31.036249085539566,-105.579847333127134 31.036562825712579,-105.585323000000002 31.057487999999996,-105.592709163135751 31.0626132919136,-105.595921000000004 31.064841999999999,-105.598772999999994 31.074925999999998,-105.60333 31.082624999999997,-105.627348999999995 31.098545,-105.641890000000004 31.098321999999996,-105.646730999999988 31.113907999999999,-105.647031366805422 31.114192798578223,-105.648833999999994 31.115902000000002,-105.662869191777489 31.12063916934996,-105.673930643060629 31.124372639388369,-105.709491 31.136374999999997,-105.717005999999998 31.141438,-105.717653520299876 31.143411480377267,-105.719539999999995 31.149160999999996,-105.742677999999998 31.164897,-105.763531 31.164121000000005,-105.773256999999987 31.166896999999999,-105.774148788612138 31.168976038235485,-105.780021000000005 31.182666,-105.779878030009812 31.18682806893737,-105.779724999999999 31.191282999999995,-105.782894999999996 31.197562999999999,-105.790659746923424 31.200723362140888,-105.794386000000003 31.20224,-105.818835000000007 31.230680999999997,-105.825806058218902 31.23733997673531,-105.835722000000004 31.246811999999995,-105.851073632158958 31.265902599748792,-105.86604427072389 31.284519412988434,-105.869353000000004 31.288633999999998,-105.869862116496506 31.288859823963843,-105.876014999999981 31.291588999999995,-105.890871999999987 31.290013999999996,-105.895034999999993 31.290977999999999,-105.903460999999993 31.306768999999999,-105.908770999999987 31.312773999999997,-105.914613899052299 31.312859252963214,-105.93196564998388 31.313112430054005,-105.932552999999999 31.313120999999995,-105.933375187723101 31.313903465142818,-105.938451999999984 31.318735,-105.948091000000005 31.340069,-105.945903 31.352809999999998,-105.953942999999995 31.364749,-105.970101 31.365936999999995,-105.997579969562565 31.386863626037869,-106.00418474278807 31.391893495117941,-106.004925999999998 31.392457999999998,-106.006143777923754 31.392558937255828,-106.022866323827969 31.393945009265412,-106.080091217088636 31.398688175961098,-106.080258 31.398702,-106.080335505244278 31.398768097394733,-106.096409750603954 31.412476405141465,-106.100621535494 31.416068265421309,-106.102641400977276 31.417790830744398,-106.10264993125142 31.41779810546371,-106.106876999999997 31.421403000000005,-106.112168999999994 31.423577999999996,-106.132782000000006 31.425367000000005,-106.143572676566535 31.431101721097118,-106.158218000000005 31.438885000000003,-106.175305198785026 31.455910533348611,-106.175674999999998 31.456278999999995,-106.17677981450808 31.456634312625521,-106.182946895641223 31.45861766980741,-106.20560859826729 31.465905761156737,-106.205826999999999 31.465975999999998,-106.205998876707866 31.466165148890862,-106.212686244283063 31.473524541419071,-106.218538531147885 31.479964934554566,-106.218843000000007 31.480299999999996,-106.218893022078106 31.480498686193428,-106.223908999999992 31.500422,-106.236804000000006 31.513376,-106.242649095206133 31.530650094003715,-106.245874455325477 31.540182047193959,-106.246202999999994 31.541153,-106.246406806009631 31.541315626597875,-106.254779999999997 31.547997000000002,-106.280345588488331 31.561810530102129,-106.280548572587122 31.561920205925162,-106.280811 31.562061999999997,-106.287785 31.584444999999999,-106.292254713772053 31.594651759250389,-106.295141086978958 31.601242900860864,-106.303535999999994 31.620412999999996,-106.308594276522342 31.627497440426588,-106.330970256390501 31.658836434185069,-106.33473699999999 31.664111999999999,-106.338265602146336 31.671883697950737,-106.346992532059133 31.691104641686092,-106.349537999999995 31.696711,-106.357472918704602 31.702103016258707,-106.368303742040567 31.709462886938788,-106.370138999999995 31.710709999999999,-106.373839000000004 31.714809999999996,-106.378039 31.72831,-106.381039 31.732109999999999,-106.38595139194058 31.734759025425479,-106.394642915450532 31.739445961452269,-106.404086535473255 31.744538468290354,-106.417940000000002 31.752009,-106.421739999999616 31.752623660686648,-106.431540999999996 31.754208999999996,-106.434644983693715 31.755853956158482,-106.444263765046571 31.76095142933643,-106.451540999999992 31.764807999999999,-106.467641999999998 31.759607999999997,-106.470742 31.753508,-106.472156160715315 31.752506597443457,-106.47367184987327 31.751433300058491,-106.475016438009845 31.750481163584279,-106.475542000000004 31.750108999999998,-106.48261401078824 31.748321568701869,-106.484641999999994 31.747809000000004,-106.486162292248409 31.747994847970777,-106.488078402545341 31.748229082678503,-106.489542 31.748407999999998,-106.507341999999994 31.761208,-106.509102011460428 31.762827435120251,-106.511609062807707 31.765134242258316,-106.523643000000007 31.776206999999996,-106.528643000000002 31.781807,-106.528542999999999 31.783906999999996,-106.528542999999999 31.784407000000002,-106.527996999999999 31.786944999999999,-106.527623000000006 31.789119000000003,-106.527737999999985 31.789760999999995,-106.527942999999993 31.790507000000002,-106.530514999999994 31.792103,-106.532480000000007 31.791913999999998,-106.533 31.791829,-106.533043000000006 31.791906999999995,-106.534743000000006 31.796106999999999,-106.535154000000006 31.797088999999996,-106.535342999999997 31.797507,-106.535842999999986 31.798607,-106.542096999999998 31.802145999999997,-106.542143999999993 31.802106999999996,-106.544713999999999 31.804286999999999,-106.545344 31.805007,-106.546561898485905 31.806561850400339,-106.546615562760394 31.806630361790774,-106.547143999999989 31.807304999999996,-106.551861034152338 31.808599471053657,-106.558443999999994 31.810406,-106.560680020141419 31.810752754512048,-106.560847305685968 31.810778696593822,-106.562944999999999 31.811104,-106.56344399999999 31.812605999999995,-106.566844000000003 31.813305999999997,-106.569123704016391 31.811582321353455,-106.570943999999997 31.810205999999997,-106.577243999999993 31.810406,-106.581344 31.813905999999996,-106.582144 31.815505999999999,-106.588044999999994 31.822105999999998,-106.589044999999984 31.822705999999997,-106.593826000000007 31.824901,-106.602727000000002 31.825023999999996,-106.605266999999998 31.827911999999998,-106.603310537982878 31.834798487166189,-106.601945 31.839604999999999,-106.60204499999999 31.844404999999998,-106.605244999999982 31.845904999999998,-106.605845000000002 31.846304999999997,-106.614637000000002 31.846489999999996,-106.621857000000006 31.852854,-106.625763000000006 31.856276,-106.627808000000002 31.860592999999998,-106.629708357956787 31.861913746439043,-106.635925999999998 31.866235,-106.635879999999986 31.871514,-106.634872999999999 31.874477999999996,-106.630798999999996 31.879696999999997,-106.629271361585637 31.8835303997664,-106.629197000000005 31.883717000000004,-106.629948941610351 31.885072003811555,-106.630443527558498 31.88596325099838,-106.630530381920593 31.886119763139838,-106.630691999999982 31.886410999999999,-106.633926999999986 31.889183999999997,-106.635073463799642 31.889856364267651,-106.636317332120683 31.890585853164694,-106.638154 31.891662999999998,-106.638364165758659 31.89171923904625,-106.642899999999983 31.892932999999999,-106.645296000000002 31.894859,-106.645645999999999 31.895648999999995,-106.645478999999995 31.898669999999999,-106.640839999999997 31.904598,-106.63512839833713 31.908732779117901,-106.633668 31.90979,-106.633408736085542 31.909871832166754,-106.625946999999996 31.912227,-106.62344499999999 31.914034,-106.618336531290581 31.916262323146238,-106.614677480394235 31.917858407661853,-106.614345999999998 31.918002999999995,-106.611846 31.920003,-106.616063629645311 31.921863544491501,-106.623932999999994 31.925334999999997,-106.624022586877501 31.92530240401349,-106.628663000000003 31.923614,-106.629746999999995 31.926570000000002,-106.625321999999983 31.930053000000004,-106.622529 31.934863000000004,-106.622117000000003 31.936620999999999,-106.622377 31.940863,-106.623659000000004 31.945509999999995,-106.616135999999983 31.948439,-106.614701999999994 31.956,-106.617707999999993 31.956008,-106.622819000000007 31.952891,-106.625123000000002 31.954530999999999,-106.625534999999985 31.957475999999996,-106.624298999999993 31.961054,-106.620453999999981 31.963402999999996,-106.619370999999987 31.964777000000005,-106.618745000000004 31.966954999999995,-106.619568999999998 31.971578,-106.621872999999994 31.972933,-106.623215999999999 31.972909999999999,-106.626465999999994 31.97069,-106.630114000000006 31.971257999999999,-106.638186000000005 31.976819999999996,-106.639528999999996 31.980347999999996,-106.63649199999999 31.985719,-106.631181999999995 31.989809,-106.629494617643616 31.990072722748106,-106.628337072326531 31.990253636712819,-106.62822051159516 31.990271854111079,-106.626910882874782 31.990476537349483,-106.623567999999992 31.990998999999999,-106.619448000000006 31.994733,-106.618486000000004 32.000494999999994,-106.599096000000003 32.000731000000002,-106.598639000000006 32.000753999999993,-106.595332999999997 32.000777999999997,-106.587971999999979 32.000748999999999,-106.582805114232855 32.000751357586125,-106.566056000000003 32.000759000000002,-106.565141999999994 32.000736000000003,-106.564298514026802 32.00073927393025,-106.562131862706067 32.000747683631808,-106.55942760630407 32.000758180008894,-106.517043115844388 32.000922692365819,-106.411074999999983 32.001334,-106.409326934223301 32.001349629127162,-106.409108574114072 32.001351581443814,-106.394297999999992 32.001483999999998,-106.376861000000005 32.001171999999997,-106.32356972407176 32.001457096670784,-106.313306999999995 32.001511999999998,-106.205915000000005 32.001761999999999,-106.200699 32.001784999999998,-106.18183999999998 32.002049999999997,-106.125534000000002 32.002532999999993,-106.05045734599986 32.002412317859424,-105.998002999999997 32.002327999999999,-105.900599999999997 32.002099999999992,-105.886159000000006 32.001969999999993,-105.854061000000002 32.00235,-105.750527000000005 32.002206,-105.731362000000004 32.001564000000002,-105.563520259526442 32.001015604709174,-105.429281000000003 32.000577,-105.428582000000006 32.000599999999999,-105.427048999999997 32.000638000000002,-105.390395999999981 32.000607000000002,-105.340142768272344 32.000583616714373,-105.200871148394683 32.000518812363367,-105.153993999999997 32.000497000000003,-105.150310000000005 32.000497000000003,-105.14824 32.000484999999998,-105.132915999999994 32.000518,-105.131377 32.000523999999999,-105.118039999999993 32.000484999999998,-105.078604999999996 32.000532999999997,-105.077045999999996 32.000578999999995,-104.918272000000002 32.000495999999991,-104.643525999999994 32.000442999999997,-104.640917999999999 32.000396000000002,-104.531936999999999 32.000311000000004,-104.531756 32.000117000000003,-104.024520999999993 32.000010000000003,-103.980179000000007 32.000124999999997,-103.875476000000006 32.000554,-103.748317 32.000197999999997,-103.72373965094468 32.000208021677786,-103.713395184678689 32.000212239744897,-103.713395184670219 32.000212239744904,-103.713395184654971 32.000212239744911,-103.713395184639609 32.000212239744918,-103.60161412595366 32.000257819670985,-103.326500999999993 32.00036999999999,-103.278520999999998 32.000419,-103.270382999999995 32.000326,-103.267707999999999 32.000323999999992,-103.267633000000004 32.000475000000002,-103.215641000000005 32.000512999999998,-103.133028835827503 32.000473953106116,-103.088697999999994 32.000452999999993,-103.085875999999985 32.000464999999998,-103.064422999999991 32.000518,-103.064344000000006 32.087051000000002,-103.064347999999995 32.123041,-103.064421999999993 32.145006000000002,-103.064695999999998 32.522193,-103.064761000000004 32.587983,-103.064787999999993 32.600397,-103.064761000000004 32.601863000000002,-103.064814999999996 32.624536999999997,-103.064633 32.646419999999992,-103.064864 32.682647000000003,-103.064797999999996 32.690761000000002,-103.064798999999994 32.708694,-103.064826999999994 32.726627999999998,-103.064807000000002 32.777302999999996,-103.064698000000007 32.783602000000002,-103.064711000000003 32.784593,-103.064699000000005 32.827531,-103.064672000000002 32.828470000000003,-103.064888999999994 32.849359,-103.064915999999982 32.857259999999997,-103.064807000000002 32.857695999999997,-103.064862000000005 32.868346000000003,-103.064700999999985 32.879354999999997,-103.064569000000006 32.900013999999999,-103.064656999999997 32.959097,-103.064678999999998 32.964373000000002,-103.064625000000007 32.999898999999999,-103.064452000000003 33.010289999999998,-103.06398 33.038693000000002,-103.063904999999991 33.042054999999998,-103.063382198608849 33.066417104805645,-103.0628188509327 33.092668632365545,-103.062136190569035 33.12448003074244,-103.060102999999984 33.219225000000002,-103.059719999999999 33.256262,-103.059241999999998 33.260370999999992,-103.057856 33.315233999999997,-103.057486999999995 33.32947699999999,-103.056655000000006 33.388437999999994,-103.052609999999987 33.570599,-103.051664000000002 33.629489,-103.051362999999995 33.64195,-103.051535 33.650486999999998,-103.051086999999981 33.658186,-103.050532000000004 33.672407999999997,-103.050147999999993 33.701971,-103.049608000000006 33.737766,-103.049096000000006 33.746270000000003,-103.047346000000005 33.824674999999999,-103.046907000000004 33.850299999999997,-103.045643999999996 33.901536999999998,-103.045698000000002 33.90629899999999,-103.044893000000002 33.945616999999999,-103.043949999999981 33.974629,-103.043616999999998 34.003633,-103.043531000000002 34.018014,-103.043554999999984 34.032713999999991,-103.043745999999999 34.037294000000003,-103.043771000000007 34.041538000000003,-103.043720999999991 34.042319999999997,-103.043767000000003 34.043544999999995,-103.043744000000004 34.049985999999997,-103.04368599999998 34.063077999999997,-103.043515999999983 34.079382000000003,-103.043569000000005 34.087947,-103.043571175003294 34.092846731402311,-103.043572866326429 34.096656853966635,-103.04358003846437 34.112813863799865,-103.043644 34.256903,-103.043718999999982 34.289440999999997,-103.043935999999988 34.302584999999993,-103.043978999999979 34.312763999999994,-103.043947553639484 34.376410480771497,-103.043947499824213 34.37651940122479,-103.043946000000005 34.379555000000003,-103.043943999999982 34.37966,-103.043919000000002 34.380915999999992,-103.043693000000005 34.383578,-103.043629999999993 34.384689999999999,-103.043614000000005 34.384968999999998,-103.043612999999993 34.388679000000003,-103.043612999999993 34.390442,-103.043606047260084 34.391254973944719,-103.043584999999993 34.393715999999998,-103.043610999999999 34.397105000000003,-103.043582999999998 34.400677999999999,-103.043537999999998 34.405462999999997,-103.043582 34.455657000000002,-103.043587999999986 34.459662000000002,-103.043588999999997 34.459774000000003,-103.043593999999985 34.46266,-103.043434927764125 34.510540742996007,-103.043071999999981 34.619782,-103.043277851519235 34.65183038816317,-103.0432796163159 34.65210514391012,-103.043285999999995 34.653098999999997,-103.042827000000003 34.671187999999994,-103.042768999999993 34.747360999999998,-103.042770000000004 34.792223999999997,-103.042781000000005 34.850242999999999,-103.042520999999979 34.899546,-103.0425974544018 35.032467348285799,-103.042641999999987 35.109912999999999,-103.043261 35.125058000000003,-103.042519999999996 35.135596,-103.042599999999993 35.142766000000002,-103.042710999999997 35.144734999999997,-103.042568000000003 35.159317999999999,-103.042394999999999 35.178573,-103.042338999999984 35.181922,-103.042366 35.182786,-103.042377000000002 35.183149,-103.042496999999997 35.211862000000004,-103.042775000000006 35.241236999999998,-103.042366 35.250056,-103.041554000000005 35.622487,-103.041484634909168 35.651235429903174,-103.041145999999998 35.791583000000003,-103.041916999999998 35.796441000000002,-103.041715999999994 35.814072000000003,-103.042186 35.825216999999995,-103.04130499999998 35.837693999999999,-103.040823999999986 36.055230999999992,-103.041387523024824 36.229129564686382,-103.041674 36.317534000000002,-103.041745000000006 36.318266999999999,-103.041923999999995 36.500439,-103.00243399999998 36.500397)),((-96.818513748151517 28.172441936006489,-96.816443421354066 28.174808025412563,-96.791958210781445 28.188687337716829,-96.733036581469989 28.190913261798631,-96.70383764358462 28.198245729538105,-96.697421731775194 28.2029594609741,-96.702659211994316 28.211208487181011,-96.703313894801497 28.216445964862743,-96.686815839850283 28.218410020896432,-96.662461568376486 28.227313732447904,-96.66062845144161 28.228884976259902,-96.663116248646261 28.233205895474203,-96.651855673914184 28.251275190431315,-96.607991796426646 28.277069769155677,-96.608122730450688 28.280081317680857,-96.611527096272326 28.281390688369981,-96.610479598706064 28.283092866206033,-96.592934048725994 28.296972182316367,-96.581018783574592 28.302209665072866,-96.553260151988255 28.302340591484768,-96.546975176740276 28.305614018207578,-96.542130508742858 28.315958034472228,-96.528905880514458 28.322504882843088,-96.476269225261575 28.330753906512612,-96.45099839278295 28.337038879223222,-96.434107525610045 28.344764159184386,-96.418918843885365 28.35484630740093,-96.415252604940861 28.362833452872817,-96.417216660974546 28.367154372087118,-96.412895739222876 28.36951123780511,-96.403206408302779 28.371475291301415,-96.401242352269094 28.366892498964241,-96.400558825492723 28.362187299887704,-96.398667286465624 28.349166496619617,-96.397846 28.343512999999998,-96.413700000000006 28.327342999999999,-96.439098999999999 28.319051999999999,-96.495600517783487 28.293964130304811,-96.547774000000004 28.270797999999999,-96.587113635820756 28.248878526668094,-96.611036668198281 28.235548960715661,-96.621533999999983 28.229699999999998,-96.694665999999998 28.18212,-96.758140999999995 28.136872999999998,-96.830820125734775 28.079724674840076,-96.849624000000006 28.064938999999999,-96.854049189790473 28.060788472935577,-96.855594496383262 28.059339080448503,-96.859762278796424 28.055429983997605,-96.896530613737951 28.020943786452513,-96.898080497387397 28.019490100997579,-96.929052999999996 27.990439999999996,-96.96699599999998 27.950531000000002,-97.001440999999986 27.911442,-97.031660000000002 27.869974999999997,-97.041798999999997 27.852925999999997,-97.045408776308051 27.837452569961062,-97.045409609838757 27.837448997003069,-97.04598 27.835004,-97.050599498412936 27.830109781194331,-97.058265753683145 27.821987615677948,-97.076304165860961 27.802876463727326,-97.079565315161531 27.799421374709375,-97.083535350812468 27.795215242050556,-97.085211615730273 27.793439290085495,-97.085394999999991 27.793244999999999,-97.11422230692618 27.755303327915222,-97.116276999999997 27.752599,-97.117304906633777 27.751048809529347,-97.118830196202964 27.748748513687826,-97.139140047561696 27.718119138409879,-97.139351757288111 27.717799858049549,-97.143807202733072 27.711080581371732,-97.165547551982726 27.678293865995041,-97.166583141799606 27.676732088482499,-97.166681999999994 27.676583,-97.184850261879149 27.644709535797791,-97.192144670654784 27.631912600211269,-97.198729900630283 27.620359811436909,-97.201865999999995 27.614857999999998,-97.211651066704889 27.596044174137351,-97.213608899397855 27.592279833590187,-97.221943360361436 27.576255098965802,-97.265194083077162 27.493096589152017,-97.265746568141566 27.492034321708481,-97.276090999999994 27.472145,-97.304469999999995 27.407734,-97.326522999999995 27.347611999999998,-97.347445832595042 27.277936119324231,-97.350397999999998 27.268104999999998,-97.363400999999996 27.210366,-97.370941000000002 27.161165999999998,-97.377001000000007 27.101020999999999,-97.379130000000004 27.047996,-97.378361999999996 26.992877,-97.370730999999992 26.909706,-97.365301177044699 26.875333999999995,-97.365282052674758 26.875212938438843,-97.364726000000005 26.871692999999997,-97.363633430415348 26.866515420001111,-97.352028350385282 26.811520085064032,-97.35141299999998 26.808603999999999,-97.350529648372714 26.805138580575584,-97.333027999999999 26.736478999999996,-97.304204860681779 26.646364129642233,-97.300690000000003 26.635375,-97.297812715808362 26.627503004299889,-97.297022484076606 26.625340999999999,-97.287871455917369 26.600304594305239,-97.275119000000004 26.565415000000002,-97.269391999999982 26.554046,-97.269132970349304 26.553256905349773,-97.257954534248029 26.519203490608863,-97.229844 26.433568999999999,-97.223724090442104 26.411478908273114,-97.206682644704898 26.34996703527348,-97.194643999999997 26.306512999999999,-97.185844000000003 26.267102999999995,-97.177979856301576 26.220346386353309,-97.177168840972797 26.215524458900923,-97.173264999999986 26.192314,-97.170387765328073 26.167037808112223,-97.169872392484734 26.162510314053797,-97.167099005951158 26.138146416702778,-97.161470999999992 26.088705,-97.158662630175101 26.080176913346069,-97.154270970414501 26.066840900880429,-97.161462285840642 26.067639941946975,-97.169842256221145 26.077853024187579,-97.171781452365479 26.102521767945923,-97.179531587141199 26.146202099560895,-97.178745972847352 26.177103221942961,-97.183983445454302 26.214289306886101,-97.194458400817808 26.271639686993655,-97.214884565299002 26.353606215503973,-97.226930759399721 26.385554824668418,-97.240286324189555 26.405980989149626,-97.240845398636537 26.411470089808617,-97.243166933615896 26.434263367616055,-97.247618791929028 26.456260775909261,-97.254165635225121 26.471187589585856,-97.262545605605609 26.482971915638458,-97.27642492679071 26.521729238684483,-97.292399243108349 26.528014213932472,-97.310730412457033 26.556558470596535,-97.308111681228326 26.5712234060755,-97.308635417324538 26.576722756880109,-97.317015387705027 26.597672667607057,-97.318434072834165 26.60022630157264,-97.324871601690262 26.611813856840271,-97.338489044677715 26.647428701777493,-97.33639404954522 26.666021744249065,-97.345821512417203 26.700589103038251,-97.363105189274393 26.710540307081217,-97.370437657013895 26.723895871871047,-97.370961403259614 26.736203954318924,-97.367557047587525 26.740393934434408,-97.364152671616353 26.758986971196869,-97.364646278833362 26.767121661774897,-97.368866408127118 26.774699404876429,-97.370437646864346 26.781508126370166,-97.368342661881371 26.795649318140761,-97.373056398392137 26.808481136684847,-97.387459455673451 26.820789208983193,-97.383531343606066 26.875520854055946,-97.385626348888096 26.88887641440536,-97.391649435788921 26.901970109878395,-97.389554460955466 26.945964918852653,-97.390340075249313 27.05228571820243,-97.389816329003565 27.067212531879022,-97.386411973331462 27.083186832972341,-97.387459455673422 27.090519300711819,-97.390601943297412 27.094185534581555,-97.390078197051665 27.156511519247964,-97.377508246555678 27.199458835730731,-97.379865109736301 27.202863196477598,-97.386673841379576 27.204696313412462,-97.382221972916923 27.229050589961044,-97.37488951532697 27.25026236588155,-97.373318276589728 27.276449754290233,-97.372896734486858 27.277942715507475,-97.367033301341749 27.298709035706306,-97.36467643816114 27.302637142698917,-97.359962701650375 27.304732132756659,-97.357605838469766 27.307874620380655,-97.362319574980518 27.32672953597509,-97.366771423144115 27.333276389420721,-97.36179581858525 27.359987519000377,-97.346607126710992 27.390364889744752,-97.336132171347501 27.402411088920228,-97.331156576938184 27.412362295500575,-97.329585328051422 27.418123524502818,-97.330894688591016 27.425455992242295,-97.329847196099536 27.434359703793774,-97.317277255753083 27.463689574751687,-97.293708603647858 27.497209429631152,-97.282971770086746 27.521563701104967,-97.267627232015485 27.541048841138782,-97.26651977444007 27.542455137362143,-97.266473727822444 27.542513609294531,-97.257831889393842 27.556392930479635,-97.261144559602045 27.562355746269706,-97.261759991311692 27.563463525096239,-97.260450620622564 27.56739163716362,-97.260303240478223 27.567589679048492,-97.252732825146552 27.577762415194865,-97.252070650242061 27.578652211895708,-97.247885553160842 27.581360217573209,-97.247618802078478 27.581532821322067,-97.236881968517352 27.598292751933528,-97.24107194863285 27.602482732049012,-97.241084821027414 27.602523494839662,-97.242643187370078 27.607458346757408,-97.231683715414945 27.631671123728168,-97.231553918442799 27.631957884363242,-97.231382612637987 27.632336350521356,-97.221955159915538 27.632860099304484,-97.221711030183002 27.632638163711842,-97.219074540339648 27.630241360463614,-97.217418907944051 27.630677052710489,-97.214098935780783 27.631550728615359,-97.200743370990949 27.650143776161688,-97.197339005169326 27.664546838517776,-97.19760088336696 27.678426154628117,-97.203474366386629 27.684532651921231,-97.20308902068453 27.688000774441392,-97.200450811776179 27.688974477466285,-97.190006537429824 27.692829222058965,-97.188284576858237 27.695272543577584,-97.170627865440125 27.720325976082009,-97.166176017276527 27.732372180332245,-97.161200407642937 27.734074342943998,-97.153606061705801 27.733288721037997,-97.147321086457822 27.735383711095739,-97.130823034043985 27.751619892924076,-97.127942424617643 27.75580987303956,-97.127680546420009 27.759999858229808,-97.125046985317312 27.763143140340585,-97.103326269871417 27.789067861139614,-97.102999946318647 27.791923200131116,-97.10255066693685 27.795854405604921,-97.102495980878558 27.796332909939515,-97.102278777379922 27.798233445813956,-97.100865886772965 27.802472121847156,-97.098874421707819 27.808446522979796,-97.095168997779496 27.812151946908138,-97.092851314507953 27.81446963017968,-97.092589446459854 27.819183356540908,-97.098874421707819 27.822849590410645,-97.104263831428213 27.822227735056668,-97.126109297533233 27.819707102786651,-97.130299287798252 27.820492727230029,-97.134489267913736 27.825206463740791,-97.132394272781227 27.827301438574235,-97.10670775348396 27.832389859144307,-97.087681973298601 27.836158807756469,-97.056712719518927 27.842293721800239,-97.055822986229373 27.843403727743151,-97.04322620548075 27.859119113080268,-97.013634476624247 27.906780143237341,-97.017955395838555 27.911493874673329,-97.016384146951765 27.917255079570445,-96.985744902767337 27.954048356415132,-96.977888688782102 27.976438572489602,-96.978805242174786 27.978271691961854,-96.980900237307296 27.978271691961854,-96.986006780964971 27.976176699366729,-96.986661461234775 27.980759491703903,-96.978281501003806 28.001709402430844,-96.967806540565562 28.020040576854303,-96.966759042999328 28.020367911280101,-96.965187799187319 28.013297317932185,-96.962569062883844 28.012380759464751,-96.952617853766114 28.01643980428749,-96.946987563862692 28.02652194996665,-96.932453562407773 28.035425661518129,-96.926430465357427 28.043412814602167,-96.929572952981431 28.051399967686208,-96.927085150701998 28.057292130712504,-96.906004298338829 28.076147047258459,-96.890946545563423 28.076801730065643,-96.886232814127425 28.084396073465374,-96.88832780925992 28.086622002621937,-96.889113433703315 28.099453823703399,-96.886887499471996 28.117130312782294,-96.879424092633712 28.131402425890027,-96.874972236857971 28.133235547899659,-96.87078225420511 28.13127149186597,-96.86462821551855 28.126295887307109,-96.857164811217643 28.115559058820768,-96.845380482627661 28.108881273888468,-96.830128556765757 28.111822717849165,-96.827049318353744 28.112416571196771,-96.816574357915513 28.119618104912195,-96.810420321766344 28.126034014184238,-96.810944073086844 28.136378030448888,-96.816836228500989 28.158048094801106,-96.820248352517055 28.163388807027481,-96.822859330626116 28.167475552598326,-96.818513748151517 28.172441936006489)))', 4326));
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/ks.wkt	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-POLYGON ((-102.051743999999999 40.003078000000002,-101.916696000000002 40.003141999999997,-101.904176000000007 40.003162000000003,-101.861740775252272 40.002907997451267,-101.841025000000002 40.002783999999991,-101.832160999999999 40.002932999999999,-101.807687 40.002797999999999,-101.804861999999986 40.002752,-101.783266423091504 40.002735966476642,-101.748492901329186 40.002710149056902,-101.627071 40.00262,-101.625809000000004 40.002710999999998,-101.579641080501318 40.002654627564297,-101.54227299999998 40.002608999999993,-101.417209 40.002423999999998,-101.411050023557621 40.002364583193085,-101.409952999999987 40.002353999999997,-101.387325211262052 40.00246006676732,-101.374325999999996 40.002520999999994,-101.342859000000004 40.002580000000002,-101.324035999999992 40.002695999999993,-101.293991000000005 40.002558999999998,-101.286555000000007 40.002558999999998,-101.248672999999997 40.002543000000003,-101.215033000000005 40.002555,-101.19221899999998 40.002490999999999,-101.186892990733696 40.002481867883319,-101.178804999999997 40.002468,-101.168704000000005 40.002547,-101.130906999999993 40.002426999999997,-101.104950380573442 40.002382874850099,-101.104950380567658 40.002382874850092,-101.060316999999998 40.002307000000002,-101.027686000000003 40.002255999999996,-100.962089380046322 40.00217532965339,-100.937427 40.002144999999999,-100.764559455237134 40.002296963384197,-100.758829999999989 40.002301999999993,-100.752183000000002 40.002127999999992,-100.7388309887763 40.002228385746484,-100.733295999999996 40.002270000000003,-100.729904000000005 40.002110999999999,-100.721127999999993 40.002068999999999,-100.683435000000003 40.002234,-100.660229999999984 40.002161999999998,-100.645444999999995 40.001882999999999,-100.626504856699498 40.001892789287538,-100.600944999999996 40.001905999999998,-100.594756999999987 40.001976999999997,-100.567238000000003 40.001888999999998,-100.551885999999996 40.001888999999998,-100.514429898999168 40.001844039098764,-100.511064999999988 40.00184,-100.487159000000005 40.001767,-100.477018 40.001752000000003,-100.475853999999998 40.001767999999998,-100.468772999999985 40.001724000000003,-100.447071999999991 40.001795,-100.439081000000002 40.001773999999997,-100.402449685831499 40.001800164690437,-100.390079999999998 40.001809000000002,-100.290126736823893 40.001691651381378,-100.231651999999997 40.001623000000002,-100.229478999999998 40.001692999999996,-100.215406000000002 40.001629,-100.196958999999993 40.001494,-100.19359 40.001573,-100.190323000000006 40.001586000000003,-100.188181 40.001541000000003,-100.177823000000004 40.001593,-99.990926000000002 40.001503,-99.986610999999996 40.001550000000002,-99.948166999999998 40.001812999999999,-99.944417 40.001584,-99.930432999999979 40.001516000000002,-99.906657999999993 40.001511999999998,-99.850154757615712 40.001444140609848,-99.813400999999999 40.001399999999997,-99.775639999999981 40.001646999999998,-99.772120999999984 40.001804,-99.764213999999996 40.001550999999999,-99.756834999999995 40.001342,-99.746628 40.001820000000002,-99.737774855821357 40.001824224692157,-99.731959000000003 40.001826999999992,-99.719639 40.001807999999997,-99.628345999999993 40.001866,-99.625979999999984 40.001865000000002,-99.515340365578794 40.002008435606839,-99.501791999999995 40.002026,-99.498998999999984 40.00195699999999,-99.497659999999982 40.001911999999997,-99.493464999999986 40.001936999999998,-99.480727999999999 40.001942,-99.423564999999996 40.002270000000003,-99.412644999999998 40.001867999999995,-99.403389000000004 40.001969000000003,-99.366747146128873 40.001962496644857,-99.290702999999979 40.001949000000003,-99.286655999999994 40.002017000000002,-99.282966999999999 40.001879000000002,-99.254012000000003 40.002074,-99.25036999999999 40.00195699999999,-99.216375999999997 40.002015999999998,-99.197591999999986 40.002032999999997,-99.188905000000005 40.002023,-99.186961999999994 40.001976999999997,-99.178965000000005 40.001976999999997,-99.169815999999997 40.001925,-99.123032999999992 40.002164999999998,-99.113510000000005 40.002192999999998,-99.085596999999993 40.002132999999994,-99.067047050731574 40.00217023690761,-99.020337999999995 40.00226399999999,-99.018700999999993 40.002333,-98.992135000000005 40.002192,-98.972286999999994 40.002245000000002,-98.971721000000002 40.002268,-98.961009000000004 40.002316999999998,-98.96091899999999 40.002271,-98.953888072580213 40.002253239016738,-98.934791999999987 40.002204999999996,-98.8435956659672 40.002348607685946,-98.842134005327992 40.002350909376077,-98.834455999999989 40.002363000000003,-98.820589999999982 40.002319,-98.777203 40.002358999999998,-98.774940999999998 40.002336,-98.729330606936671 40.002229113826232,-98.726294999999993 40.002222000000003,-98.710403999999997 40.002180000000003,-98.693095999999997 40.002372999999999,-98.691443000000007 40.002504999999999,-98.690286999999998 40.002547999999997,-98.672819000000004 40.002364,-98.669723999999988 40.002409999999998,-98.653832999999992 40.002268999999998,-98.652494000000004 40.002245000000002,-98.640709999999984 40.002493,-98.616372379820518 40.002409030470169,-98.613754999999998 40.002400000000002,-98.593342000000007 40.002475999999994,-98.575219000000004 40.002479999999991,-98.560578000000007 40.002274,-98.543186000000006 40.002285,-98.523053000000004 40.002336,-98.506634585466017 40.002329436673158,-98.504454999999979 40.002328565375151,-98.50084801790743 40.002327123469641,-98.490532999999999 40.002322999999997,-98.441997554675297 40.002366263566756,-98.391848301995964 40.002410965650498,-98.274015000000006 40.002516,-98.268218000000005 40.002490000000002,-98.25000799999998 40.002307000000002,-98.213290432425865 40.002506421375415,-98.193483 40.002614,-98.179315000000003 40.002482999999998,-98.172269 40.002437999999991,-98.156873151934732 40.002445128178877,-98.142031000000003 40.002451999999998,-98.099659000000003 40.002226999999998,-98.076034000000007 40.002300999999996,-98.068701000000004 40.002355,-98.050056999999981 40.002277999999997,-98.047469000000007 40.002186000000002,-98.042767978165202 40.002191261754177,-98.014411999999979 40.002223,-98.010157000000007 40.002153,-97.972185999999994 40.002113999999999,-97.931810999999996 40.002049999999997,-97.876261 40.002102,-97.85745 40.002065000000002,-97.838378999999989 40.001909999999995,-97.821597999999994 40.002003999999992,-97.819426000000007 40.001957999999995,-97.777154999999993 40.002167,-97.770775999999998 40.001976999999997,-97.769204000000002 40.001995,-97.767746000000002 40.001994000000003,-97.714825952022949 40.001974503868432,-97.706952472912022 40.001971603221314,-97.701160424072398 40.001969469388285,-97.61370959051284 40.001937251863488,-97.595964207410262 40.001930714334961,-97.593671575073259 40.001929869712491,-97.51530799999999 40.001900999999997,-97.511381 40.001899000000002,-97.510264000000006 40.001835,-97.48896951184885 40.0019310946697,-97.481234094494141 40.001966001936331,-97.463284999999999 40.00204699999999,-97.444661999999994 40.001957999999995,-97.425443 40.002048000000002,-97.417825999999991 40.002023999999999,-97.415833000000006 40.002000999999993,-97.369102999999996 40.00206,-97.350896000000006 40.001930000000002,-97.350272000000004 40.001975999999999,-97.256541388870858 40.001563097676062,-97.24516899999999 40.001513000000003,-97.245080000000002 40.001466999999998,-97.202309999999997 40.00144199999999,-97.200190000000006 40.001548999999997,-97.181775000000002 40.001550000000002,-97.165136038800085 40.001526729909067,-97.164288093539042 40.001525544031956,-97.157705785150654 40.001516338474417,-97.144150390621661 40.001497380844818,-97.142447999999987 40.001494999999998,-97.137865999999988 40.001814000000003,-97.049662999999995 40.001322999999999,-97.030802999999992 40.001342,-97.009164999999996 40.001463,-96.918187714380807 40.001505032225388,-96.916093000000004 40.001505999999999,-96.880459000000002 40.001448000000003,-96.878253 40.001466,-96.875056999999998 40.001448000000003,-96.873812 40.001449999999998,-96.868892342573133 40.001444286089438,-96.805301797100199 40.001370429180717,-96.693246065483095 40.001240282633297,-96.622400999999996 40.001157999999997,-96.610348999999999 40.000881,-96.604883999999984 40.000891000000003,-96.581788013355691 40.000963078853125,-96.580851999999993 40.000965999999998,-96.570853999999997 40.001090999999995,-96.557862999999998 40.000968,-96.538977000000003 40.000850999999997,-96.527110999999991 40.001030999999998,-96.469944999999996 40.000965999999998,-96.467535999999996 40.001035000000002,-96.463639999999998 40.000967000000003,-96.354812913341547 40.000735780492882,-96.350953725714731 40.00072758106856,-96.341811057717251 40.000708156095854,-96.304554999999993 40.000629000000004,-96.301066000000006 40.000632000000003,-96.239171999999996 40.000691000000003,-96.223838999999998 40.000729,-96.220170999999993 40.00072,-96.154364999999984 40.000495,-96.154246 40.00045,-96.147166999999982 40.000478999999999,-96.125936999999979 40.000432000000004,-96.125788 40.000467,-96.089781000000002 40.000518999999997,-96.081394999999986 40.000602999999998,-96.051691000000005 40.000726999999998,-96.02409 40.000718999999997,-96.014716997898134 40.000662392993569,-96.010677999999999 40.000638000000002,-95.995389500007406 40.000603953777215,-95.958139000000003 40.000520999999999,-95.901560435593936 40.000482839492363,-95.882524000000004 40.00047,-95.788023999999993 40.000452000000003,-95.784575000000004 40.000463000000003,-95.672891827756033 40.000336669594915,-95.658762261555324 40.000320686938032,-95.63965170807073 40.000299070038061,-95.565216789143676 40.000214872989645,-95.463103327781397 40.00009936736172,-95.455130658279359 40.000090349077695,-95.452048066669519 40.000086862204618,-95.438655850967621 40.000071713601649,-95.436011808705814 40.000068722793607,-95.426269559489981 40.00005770284973,-95.42148745056565 40.000052293567869,-95.41484447973599 40.000044779372317,-95.375257000000005 40.0,-95.339895999999982 39.999999000000003,-95.326448603970363 39.999998574530281,-95.30829 39.999997999999998,-95.308403999999996 39.993758,-95.307779999999994 39.990617999999998,-95.307111000000006 39.989114,-95.302506999999991 39.984357000000003,-95.289715 39.977705999999998,-95.274756999999994 39.972115000000002,-95.269885999999985 39.969396000000003,-95.261854 39.960617999999997,-95.257651999999993 39.954886000000002,-95.250253999999998 39.948644000000002,-95.241382999999999 39.944949,-95.236761 39.943930999999999,-95.231114000000005 39.943784,-95.220212000000004 39.944432999999997,-95.216440000000006 39.943953,-95.213736999999995 39.943205999999996,-95.204427999999993 39.938949,-95.201277000000005 39.934193999999998,-95.200689999999994 39.928154999999997,-95.20201 39.922438,-95.205744999999993 39.915168999999999,-95.206326000000004 39.912120999999999,-95.206195999999991 39.909557,-95.205732999999981 39.908275000000003,-95.202631127107011 39.904826841138963,-95.201935000000006 39.904052999999998,-95.19982446963148 39.902956959499498,-95.199773390195176 39.902930432929807,-95.199730682369619 39.902908253904485,-95.199347000000003 39.902709000000002,-95.193815999999984 39.900689999999997,-95.189565000000002 39.899959000000003,-95.179452999999995 39.900061999999991,-95.172296000000003 39.902025999999999,-95.159833999999989 39.906984,-95.156023999999988 39.907243,-95.153185481864639 39.906665666721331,-95.151701132402337 39.906363761184394,-95.149656999999991 39.905947999999995,-95.148243978290679 39.905255611516672,-95.146055000000004 39.904183000000003,-95.143801999999994 39.901917999999995,-95.142562999999981 39.897992000000002,-95.142444999999995 39.895419999999994,-95.143403000000006 39.889355999999992,-95.142718000000002 39.885888999999992,-95.140601000000004 39.88168799999999,-95.137091999999996 39.878350999999995,-95.134747000000004 39.876852,-95.128165999999993 39.874164999999998,-95.105912000000004 39.869163999999998,-95.090958483530287 39.863446088154532,-95.090158000000002 39.86314,-95.085003 39.861882999999999,-95.081534000000005 39.861718000000003,-95.079786043666886 39.861878094210859,-95.052535000000006 39.864373999999998,-95.042141999999998 39.864804999999997,-95.037767000000002 39.865541999999998,-95.034318031759739 39.867229060943565,-95.032053000000005 39.868336999999997,-95.031002514960235 39.869148692103728,-95.027930999999981 39.871521999999999,-95.025918959417425 39.87568321107333,-95.025422000000006 39.876711,-95.025119000000004 39.878833,-95.02586205726584 39.885935119809076,-95.025947000000002 39.886747,-95.025771840138887 39.887478608302466,-95.025475064075451 39.888718183571669,-95.025239999999997 39.889699999999998,-95.024388999999999 39.891202,-95.021897459019584 39.893924778577606,-95.019088516216428 39.896994416745422,-95.018742999999986 39.89737199999999,-95.018224596337973 39.897611313155366,-95.013151999999991 39.899952999999996,-95.010684182587667 39.900289758615472,-95.008439999999993 39.900596,-95.003818999999993 39.900400999999995,-94.990284000000003 39.897010000000002,-94.989784913598129 39.896958718834505,-94.987823822157509 39.896757216540813,-94.986975 39.89667,-94.985308455245701 39.896814869812808,-94.979390624873346 39.897329296428744,-94.977748999999989 39.897472,-94.963345000000004 39.901136,-94.959276000000003 39.901671,-94.958440298615102 39.901548064610132,-94.95153999999998 39.900532999999996,-94.943866999999983 39.898130000000002,-94.935306395585215 39.893779379194363,-94.934493000000003 39.893366,-94.929574000000002 39.888753999999992,-94.927897000000002 39.88611199999999,-94.927358999999996 39.883966,-94.927251999999996 39.880257999999991,-94.928466 39.876344000000003,-94.931084167287821 39.873075003673321,-94.931462999999994 39.872602,-94.938790999999995 39.866954,-94.940742999999998 39.864409999999999,-94.942407000000003 39.861065999999994,-94.942566999999983 39.856601999999995,-94.939767000000003 39.851930000000003,-94.937655000000007 39.849786000000002,-94.926149999999993 39.841321999999998,-94.916917999999995 39.836137999999998,-94.909941999999987 39.834426,-94.903156999999979 39.833849999999998,-94.892677000000006 39.834377999999994,-94.889493000000002 39.834026,-94.886932999999999 39.833098,-94.881012999999996 39.828921999999991,-94.878676999999996 39.826521999999997,-94.877043999999998 39.823754,-94.876543999999996 39.820594,-94.875944000000004 39.813293999999999,-94.87632679569893 39.807169268817198,-94.876344000000003 39.806894,-94.876705972386588 39.80614007495069,-94.880932 39.797338000000003,-94.884084 39.794234000000003,-94.890292000000002 39.791626,-94.892965000000004 39.791097999999991,-94.912908274541266 39.790276806342419,-94.92474489359239 39.789789416146199,-94.925605000000004 39.789753999999995,-94.925940683661906 39.789631963361245,-94.927258709273417 39.789152799691166,-94.929653999999999 39.788281999999995,-94.93035270914757 39.787827111232048,-94.930442023078356 39.787768964141691,-94.930979872832452 39.787418801541357,-94.932726000000002 39.786282,-94.932913349551853 39.786043884763131,-94.935059195246907 39.783316584105528,-94.935205999999994 39.78313,-94.935782000000003 39.778905999999999,-94.935301999999993 39.77561,-94.935036741896766 39.775108050050804,-94.934624304242575 39.774327591105198,-94.934262000000004 39.773642000000002,-94.929652999999988 39.769098,-94.929421387607832 39.768921584953624,-94.928626586797606 39.768316199289764,-94.926229000000006 39.76648999999999,-94.923991330811134 39.765173947104167,-94.916788999999994 39.760937999999996,-94.912293000000005 39.759337999999993,-94.906244 39.759417999999997,-94.905921454535701 39.759501730763866,-94.900921941190049 39.760799572828766,-94.899156000000005 39.761257999999998,-94.899025621234756 39.761323457651685,-94.895268000000002 39.76321,-94.895041000000006 39.763350000000003,-94.894070999999997 39.763945999999997,-94.893918999999997 39.76404,-94.893724000000006 39.764159999999997,-94.893646000000004 39.764208000000004,-94.883923999999993 39.770186000000002,-94.881460000000004 39.771258000000003,-94.881422 39.771258000000003,-94.874706321154179 39.772392308082928,-94.871144 39.772993999999997,-94.869643999999994 39.772894,-94.867142999999999 39.771693999999997,-94.865243000000007 39.770094,-94.863142999999994 39.767294,-94.860742999999999 39.763094000000002,-94.859442999999999 39.753694000000003,-94.860369889104035 39.749534984666809,-94.860371 39.74953,-94.862942999999987 39.742994000000003,-94.870142999999999 39.734594,-94.875642999999997 39.730494,-94.884142999999995 39.726793999999998,-94.891743999999989 39.724893999999999,-94.899315999999999 39.724041999999997,-94.900553640444031 39.724102079633198,-94.901582061073228 39.724152002964722,-94.902612000000005 39.724201999999998,-94.906055088082866 39.724933471502588,-94.907014260749904 39.725137244236571,-94.907785666538786 39.725301126582274,-94.910067999999995 39.725785999999999,-94.911087398893699 39.726157408899255,-94.918323999999998 39.728793999999994,-94.93000499999998 39.735370000000003,-94.939221000000003 39.74157799999999,-94.944740999999979 39.744377,-94.948658825773634 39.745572502168315,-94.948680784417533 39.745579202723142,-94.948725999999994 39.745593,-94.952629999999999 39.745961,-94.955286 39.745688999999999,-94.960086000000004 39.743065,-94.963779819772341 39.740240978767318,-94.964692434782606 39.73954326086956,-94.965317999999982 39.739064999999989,-94.965565209393333 39.738728671232884,-94.970224508542714 39.732389687437191,-94.970421999999985 39.732120999999999,-94.971205999999981 39.729304999999997,-94.971078000000006 39.723146,-94.968452999999997 39.707402000000002,-94.968980999999999 39.692954,-94.969909 39.689050000000002,-94.971316999999999 39.686410000000002,-94.976096392737759 39.68160006801152,-94.976325000000003 39.68137,-94.981556999999995 39.678634000000002,-94.984149000000002 39.677849999999992,-94.986445080691666 39.677537608069159,-94.990587390516794 39.676974028501114,-94.993556999999996 39.676569999999998,-94.998766892420107 39.676509388876212,-95.001379 39.676479,-95.004602740773237 39.676177881356345,-95.008105239221649 39.675850724907868,-95.009022999999999 39.675764999999998,-95.010225986948086 39.675477408241932,-95.013209713780839 39.674764104372102,-95.015309999999985 39.674261999999999,-95.018317999999994 39.672868999999999,-95.021521942351953 39.670631293568427,-95.024595000000005 39.668484999999997,-95.027643999999995 39.665453999999997,-95.037464 39.652904999999997,-95.039049000000006 39.649639,-95.044554000000005 39.644370000000002,-95.049518000000006 39.637875999999999,-95.053366999999994 39.630347,-95.054924999999997 39.624994999999991,-95.055024819926729 39.623527163368095,-95.055152000000007 39.621656999999992,-95.054958456554544 39.620961328886679,-95.053131423647116 39.614394255464305,-95.053011999999981 39.613965,-95.052555891387243 39.613278556984888,-95.047910999999999 39.606287999999999,-95.046445000000006 39.601605999999997,-95.046361000000005 39.599556999999997,-95.047165000000007 39.595117000000002,-95.049277000000004 39.589582999999998,-95.054804000000004 39.582487999999998,-95.056897000000006 39.580567000000002,-95.059518999999995 39.579132,-95.064519000000004 39.577114999999999,-95.066275551338904 39.576786470694117,-95.068266439890465 39.576414113098046,-95.069315000000003 39.576217999999997,-95.072159999999982 39.576121999999991,-95.075842551355763 39.576644128527029,-95.076688000000004 39.576763999999997,-95.088569515113861 39.580713698327401,-95.089515000000006 39.581028000000003,-95.09068217809525 39.58095107619048,-95.095736000000002 39.580618,-95.099095000000005 39.579690999999997,-95.100375015351446 39.579100080742663,-95.10182940536555 39.578428661399109,-95.103228 39.577782999999997,-95.106109962410699 39.575487768136732,-95.106244982404746 39.575380236480051,-95.106274453941239 39.575356764970024,-95.106406000000007 39.575251999999999,-95.107454000000004 39.573842999999997,-95.108931052511622 39.56997896968771,-95.109155613535791 39.569391508783276,-95.112830712234896 39.559777298955126,-95.112877844119652 39.559653999999995,-95.113077000000004 39.559132999999996,-95.113262990573148 39.557121201967142,-95.113516735173974 39.554376531201555,-95.113557 39.553940999999995,-95.113330390574859 39.553319942050457,-95.109694540741444 39.543355336910984,-95.109303999999995 39.542284999999993,-95.106595999999996 39.537657000000003,-95.106363136618171 39.537386330858773,-95.106309238275287 39.537323682029822,-95.102887999999993 39.533346999999999,-95.096713422649174 39.527826015970483,-95.095319522838992 39.526579663685382,-95.092703999999998 39.524241000000004,-95.082713999999996 39.516711999999998,-95.077440999999993 39.513551999999997,-95.059460999999985 39.506143000000002,-95.05637999999999 39.503971999999997,-95.052176999999986 39.499995999999996,-95.050551999999996 39.497514000000002,-95.049844999999991 39.494414999999989,-95.048370000000006 39.480420000000002,-95.047133000000002 39.474970999999996,-95.045715999999999 39.472459,-95.040779999999998 39.466386999999997,-95.03749999999998 39.463689000000002,-95.033407999999994 39.460875999999992,-95.028497999999999 39.458286999999999,-95.015825000000007 39.452809000000002,-94.995767999999998 39.448174000000002,-94.990172 39.446192000000003,-94.982144000000005 39.440551999999997,-94.978797999999998 39.436241000000003,-94.976606000000004 39.426701,-94.972952000000006 39.421705000000003,-94.968547467194298 39.418879728230785,-94.966981164652054 39.417875029083376,-94.966065999999998 39.417287999999999,-94.965430539155946 39.417093446959996,-94.954817000000006 39.413843999999997,-94.951209000000006 39.411706999999993,-94.947863999999996 39.408603999999997,-94.946292999999983 39.405645999999997,-94.946662000000003 39.399717000000003,-94.946226999999993 39.395648,-94.945577 39.393850999999998,-94.942038999999994 39.389499,-94.939696999999995 39.387949999999996,-94.938205659338905 39.38711651736979,-94.938199994953891 39.387113351650086,-94.938198708293527 39.387112632559479,-94.937157999999982 39.386530999999998,-94.933651999999995 39.385545999999998,-94.932170703908099 39.385397898493565,-94.923109999999994 39.384492000000002,-94.919224999999997 39.385173999999999,-94.915858999999998 39.386347999999998,-94.909581000000003 39.388865000000003,-94.901822999999993 39.392797999999999,-94.896448416922993 39.39340032396553,-94.894979000000006 39.393565000000002,-94.891845000000004 39.393312999999999,-94.888971999999995 39.392431999999999,-94.888058227506249 39.391822741147728,-94.885025999999996 39.389800999999999,-94.880978999999996 39.383899,-94.879281000000006 39.37977999999999,-94.879087999999996 39.375702999999994,-94.881359999999987 39.370382999999997,-94.885216 39.366911000000002,-94.890928000000002 39.364030999999997,-94.896832000000003 39.363135,-94.899023999999997 39.362431,-94.902496999999997 39.360382999999999,-94.90716104958679 39.35683832231404,-94.907297 39.356735,-94.907510470967722 39.356484333333356,-94.909408999999997 39.354254999999995,-94.910016999999996 39.352542999999997,-94.91007929967077 39.352122876579188,-94.910166635146069 39.351533921963672,-94.910234386079424 39.351077037464393,-94.910640999999998 39.348334999999999,-94.910055514481613 39.342727430625168,-94.908683540921714 39.329587162119807,-94.908064999999993 39.323663000000003,-94.906599414484603 39.317389801180319,-94.905982468129508 39.31474906332776,-94.905548856768945 39.312893060899633,-94.905328999999995 39.311951999999998,-94.904604536115073 39.31007473956825,-94.903592654247163 39.307452709910535,-94.903137 39.306272,-94.902341179156608 39.304705098857582,-94.900693838394318 39.301461629999167,-94.900362755471093 39.300809756886117,-94.900048999999996 39.300192000000003,-94.895217000000002 39.29420799999999,-94.889432625546704 39.288730528394183,-94.887056 39.286479999999997,-94.882576 39.283327999999997,-94.881425972827699 39.282735692772164,-94.879585687759075 39.281787876778168,-94.878319999999988 39.281135999999996,-94.869470269042495 39.278423959123423,-94.867567999999991 39.277841000000002,-94.866576416802303 39.277461598502107,-94.857072000000002 39.273825000000002,-94.850573678793964 39.270595179638669,-94.850470600187833 39.270543947117169,-94.846320000000006 39.268481,-94.844203868589133 39.266965084952687,-94.840994595225254 39.264666085108807,-94.837855000000005 39.262416999999999,-94.836102527271095 39.260730409704507,-94.834879550067882 39.259553409087879,-94.832501320107042 39.257264586268427,-94.832102355305352 39.256880620143498,-94.831470999999993 39.256273,-94.827487000000005 39.249888999999996,-94.826571473591798 39.245793223963304,-94.825663000000006 39.241728999999999,-94.826110999999983 39.238289000000002,-94.826405091238243 39.237538367125239,-94.827108391663188 39.2357432765168,-94.827791000000005 39.234000999999999,-94.828117769197533 39.233533772937683,-94.83244435695299 39.227347452739551,-94.834698551534771 39.224124319346686,-94.834896 39.223841999999998,-94.834917496024659 39.223414229109203,-94.835039139715306 39.220993519665384,-94.835046603087861 39.220844998551456,-94.835055999999994 39.220658,-94.833551999999997 39.217793999999998,-94.831678999999994 39.215938,-94.823791 39.209873999999999,-94.820687000000007 39.208626000000002,-94.811662999999996 39.206594000000003,-94.800359054554335 39.206051410618606,-94.799662999999995 39.206018,-94.798924306591658 39.206116812235138,-94.793913945984244 39.206787029303406,-94.788135068391796 39.207560047994349,-94.787343000000007 39.207666000000003,-94.783838000000003 39.207154000000003,-94.781518000000005 39.206145999999997,-94.780294078498926 39.205273290755756,-94.778971577769184 39.204330290235411,-94.777838000000003 39.203522,-94.775537999999997 39.200602000000003,-94.770897097034492 39.191141697801093,-94.770859400196969 39.191064854247678,-94.770337999999995 39.190002,-94.763137999999998 39.179903000000003,-94.75233799999998 39.173202999999994,-94.74193799999999 39.170203,-94.736536999999998 39.169203000000003,-94.723636999999997 39.169002999999989,-94.714136999999994 39.170403,-94.696331999999998 39.178562999999997,-94.687235999999999 39.183503000000002,-94.680335999999983 39.184303,-94.669134999999997 39.182003000000002,-94.663835000000006 39.179102999999998,-94.660314999999997 39.168050999999991,-94.662434999999988 39.157602999999995,-94.650734999999983 39.154102999999999,-94.640034999999997 39.153102999999994,-94.623934000000006 39.156602999999997,-94.615834000000007 39.160003000000003,-94.608834000000002 39.160502999999999,-94.601732999999996 39.15960299999999,-94.596033000000006 39.157702999999998,-94.591932999999997 39.155003,-94.589933000000002 39.140402999999999,-94.592533000000003 39.135902999999992,-94.600433999999993 39.128503000000002,-94.605733999999998 39.122204000000004,-94.607033999999999 39.119404000000003,-94.607354 39.113444,-94.607234000000005 39.089604,-94.607333999999994 39.081703999999995,-94.607275518421304 39.072346947409343,-94.607234000000005 39.065703999999997,-94.607342812841125 39.057404745686583,-94.60738379566331 39.05427894858029,-94.607437239929951 39.050202705779334,-94.607518499034526 39.044004999999999,-94.607559479691474 39.040879368039988,-94.607612854426819 39.036808428453341,-94.60764748233197 39.034167326647299,-94.607654028188094 39.033668068249817,-94.60769507925167 39.030537066312085,-94.607898722639391 39.015005000000002,-94.607914652765047 39.013789994834404,-94.607991843462372 39.007902590176151,-94.608087526605189 39.000604749887366,-94.608092759229436 39.000205652880325,-94.608190956218394 38.992716079262479,-94.608212339138063 38.991085184540211,-94.608264438806202 38.98711149548862,-94.608279957450691 38.985927874365181,-94.608301211867541 38.984306780669819,-94.608333999999999 38.981805999999999,-94.608294286905348 38.97390309416464,-94.608273484679671 38.969763451253407,-94.608249262127771 38.964943163424849,-94.608207879518076 38.956708024096379,-94.608134000000007 38.942005999999999,-94.608134000000007 38.940005999999997,-94.607866 38.937398000000002,-94.607977999999989 38.936869999999992,-94.608002838442587 38.912906322207348,-94.608006216770249 38.909646973100827,-94.608010407202343 38.90560412040071,-94.608022064178897 38.894357681354862,-94.60802273861259 38.893706999999999,-94.608033000000006 38.883806999999997,-94.608033000000006 38.869207000000003,-94.608033000000006 38.868107000000002,-94.607992999999993 38.867271000000002,-94.608033000000006 38.861207,-94.608033000000006 38.855007,-94.608033000000006 38.850107,-94.608033000000006 38.847206999999997,-94.607624999999999 38.827559999999991,-94.607668973053535 38.825816299300072,-94.608041 38.811064000000002,-94.608617609754887 38.781926100280451,-94.609398999999996 38.742440000000002,-94.60945599999998 38.74069999999999,-94.609507757106428 38.73815999467709,-94.609625656590424 38.7323740198146,-94.610322172686637 38.698192151600097,-94.61071084056907 38.679118085101081,-94.61073851283922 38.677760054904219,-94.611602000000005 38.635384000000002,-94.611464999999995 38.625011,-94.611857999999998 38.620485000000002,-94.611908 38.609271999999997,-94.611905562149673 38.605890005062435,-94.611886999999996 38.580139000000003,-94.611902 38.580109999999998,-94.612176000000005 38.576546,-94.612156999999996 38.549816999999997,-94.612272000000004 38.547916999999998,-94.612464742072774 38.518760616499996,-94.612644000000003 38.491644,-94.612725999999995 38.484366999999999,-94.612696 38.483153999999999,-94.612865999999997 38.477570999999998,-94.613365000000002 38.403421999999999,-94.613264999999998 38.392426,-94.613275404637193 38.388718047420433,-94.613328999999993 38.369617999999996,-94.613311999999993 38.364407,-94.613085455228386 38.3436360393057,-94.612999999999985 38.335800999999996,-94.612825 38.324387000000002,-94.612787999999995 38.320141999999997,-94.612673 38.314832000000003,-94.612673 38.302526999999998,-94.612689368276676 38.301464114946214,-94.612843999999996 38.291422999999995,-94.612848999999997 38.289914000000003,-94.612707829046002 38.272362044447966,-94.612691999999996 38.270394000000003,-94.612613999999994 38.237766,-94.612634999999997 38.226987,-94.612658999999994 38.219251,-94.61265866950464 38.21872154645218,-94.612657999999982 38.217649000000002,-94.612821999999994 38.203918000000002,-94.612848 38.200713999999998,-94.613073 38.190551999999997,-94.61341774677895 38.168183959706163,-94.613422 38.16790799999999,-94.613748 38.160632999999997,-94.613855999999998 38.149768999999999,-94.613889466360249 38.136312911169284,-94.613919497343275 38.124238112111762,-94.614061000000007 38.067343,-94.614088999999993 38.065900999999997,-94.614054999999993 38.060088,-94.613980999999995 38.036949,-94.614211999999981 37.992462000000003,-94.614464999999996 37.987798999999995,-94.614511123427164 37.979395512107736,-94.614514360688489 37.978805697169918,-94.614557000000005 37.971036999999995,-94.614561999999992 37.951517000000003,-94.614593999999997 37.949977999999994,-94.614611999999994 37.944361999999998,-94.614754000000005 37.940769000000003,-94.614834999999999 37.936700000000002,-94.614778 37.934199999999997,-94.615181000000007 37.915944000000003,-94.615392999999983 37.906391999999997,-94.61546899999999 37.901775,-94.615706000000003 37.886842999999999,-94.615921 37.878331000000003,-94.615834000000007 37.872509999999998,-94.616 37.863126,-94.616282760205394 37.851281931678621,-94.616426000000004 37.845281999999997,-94.616433230053673 37.842955730230052,-94.61645 37.837560000000003,-94.616861999999998 37.819456000000002,-94.6176681324215 37.775831003788085,-94.617720999999989 37.77297,-94.617737774720197 37.764628336555312,-94.617744979193901 37.761045725680312,-94.617807999999997 37.729706999999998,-94.617975 37.722175999999997,-94.61780499999999 37.690178000000003,-94.617650999999995 37.687671000000002,-94.617687000000004 37.686652999999993,-94.617885 37.682214000000002,-94.617733999999999 37.673127,-94.617576 37.653671000000003,-94.617517909436387 37.643988652624088,-94.61747699999998 37.637169999999998,-94.617472819127315 37.636539916507168,-94.6173 37.610495,-94.617428000000004 37.609521999999998,-94.617283 37.571896000000002,-94.617315000000005 37.571498999999996,-94.617080999999999 37.567013000000003,-94.61711240153133 37.563155381499406,-94.617159999999984 37.557307999999999,-94.617186000000004 37.553485000000002,-94.617167532949537 37.551779056391354,-94.616988484457494 37.535238968895172,-94.616907999999981 37.527804000000003,-94.616788999999997 37.521509999999999,-94.616880369657522 37.506771761864755,-94.617022999999989 37.483764999999998,-94.617182999999997 37.469664999999999,-94.617180000000005 37.465203000000002,-94.617221999999998 37.460476,-94.617204999999984 37.46037299999999,-94.617200999999994 37.454788,-94.617131999999998 37.439818000000002,-94.617265000000003 37.425535999999994,-94.617510999999993 37.410908999999997,-94.617557000000005 37.396374999999999,-94.61759158917468 37.381725975861251,-94.617625000000004 37.367576,-94.617626 37.367444999999989,-94.617536999999999 37.364355000000003,-94.617636000000005 37.338417,-94.617694999999998 37.336841999999997,-94.617648000000003 37.323588999999998,-94.61807499999999 37.240436000000003,-94.618157999999994 37.237596999999994,-94.618122999999997 37.229334,-94.61815 37.228121000000002,-94.618218999999996 37.207771999999999,-94.618305000000007 37.207337000000003,-94.618319 37.188774000000002,-94.618504999999985 37.181184000000002,-94.618472999999994 37.174782,-94.618351000000004 37.160210999999997,-94.618071999999998 37.132345,-94.61807499999999 37.129755000000003,-94.61816441512984 37.118929895303054,-94.618212 37.113168999999992,-94.618150999999997 37.103968000000002,-94.618059000000002 37.096676000000002,-94.618088 37.093670999999993,-94.618089999999995 37.093494,-94.618085255103864 37.089305442941992,-94.618082 37.086432000000002,-94.61811999999999 37.085934000000002,-94.617981999999998 37.075077,-94.617954311863897 37.070346986543974,-94.617947706480578 37.069218577181687,-94.617910161110728 37.062804634983031,-94.617893975984089 37.060039701061122,-94.617874999999998 37.056798,-94.617877538275181 37.056339390079508,-94.617964999999998 37.040537,-94.617972200190749 37.032971759572447,-94.617994999999979 37.009015999999995,-94.618027702303792 37.004829720380044,-94.618080000000006 36.998134999999998,-94.625223999999989 36.998671999999999,-94.699735000000004 36.998804999999997,-94.701796999999999 36.998814000000003,-94.711286363060864 36.99879670415919,-94.712770000000006 36.99879399999999,-94.722629184733563 36.998741903378082,-94.732834603466486 36.998687977231512,-94.736330645670293 36.998669503899912,-94.737183000000002 36.998665000000003,-94.739323999999996 36.998686999999997,-94.745992043692311 36.998700535427304,-94.749560781475736 36.99870777958963,-94.749834600019099 36.998708335412474,-94.777257000000006 36.998764,-94.831280000000007 36.998812,-94.831539962039543 36.998812565955092,-94.840925999999996 36.998832999999998,-94.846637705524785 36.998860673615503,-94.849800999999999 36.998875999999996,-94.853196999999994 36.998874,-94.896852168601683 36.999075231107383,-94.904605402657381 36.99911097010289,-94.9407882710602 36.999277757196154,-94.995293000000004 36.999528999999995,-95.007620000000003 36.999513999999998,-95.011432999999997 36.999535000000002,-95.030323999999993 36.999516999999997,-95.037857000000002 36.999496999999998,-95.049498999999983 36.999580000000002,-95.073509 36.999509000000003,-95.1405498515593 36.999533623834409,-95.155186999999998 36.999538999999999,-95.155372 36.999540000000003,-95.159067907556633 36.999536629205572,-95.177300999999986 36.999519999999997,-95.195307 36.999564999999997,-95.267905305061163 36.999446910377756,-95.285983101167361 36.999417504731007,-95.322564999999997 36.999357999999994,-95.328057999999999 36.999364999999997,-95.328326999999987 36.999366000000002,-95.331209999999999 36.999380000000002,-95.377252424658963 36.999296311678272,-95.381753803085687 36.999288129815376,-95.407683000000006 36.999240999999998,-95.511578 36.999234999999999,-95.522414951940931 36.999281058114107,-95.534401000000003 36.999332000000003,-95.573598000000004 36.999309999999994,-95.601517312742303 36.999317968253862,-95.612139999999997 36.999321000000002,-95.615933999999996 36.999364999999997,-95.621011943860609 36.999361983160732,-95.624350000000007 36.999360000000003,-95.630078999999995 36.999319999999997,-95.638122589416028 36.999320470082949,-95.664300999999995 36.999321999999999,-95.674044398562955 36.999333876292773,-95.686452000000003 36.999349000000002,-95.696658999999997 36.999215,-95.71038 36.999370999999996,-95.710782524132014 36.999362783399121,-95.714887000000004 36.999279,-95.718053999999995 36.999254999999998,-95.741907999999995 36.999243999999997,-95.746466244276931 36.999250838506164,-95.759905000000003 36.999270999999993,-95.768719000000004 36.999205000000003,-95.786761999999996 36.999309999999994,-95.807979999999986 36.999124000000002,-95.819364496908179 36.999150471530008,-95.866899000000004 36.999260999999997,-95.873943999999995 36.999299999999998,-95.875256999999991 36.999302,-95.877150999999998 36.999304000000002,-95.910179999999997 36.999336,-95.928122000000002 36.999245000000002,-95.936991999999989 36.999267999999994,-95.964270378114222 36.999093604402042,-96.00081 36.99886,-96.095164142267308 36.998935940299688,-96.14121 36.998972999999999,-96.143207000000004 36.999133999999998,-96.147143 36.999021999999997,-96.149709 36.99904,-96.152383999999998 36.999050999999994,-96.154016999999982 36.999161,-96.184768000000005 36.999211000000003,-96.200028000000003 36.999028000000003,-96.217571000000007 36.999070000000003,-96.235320025971774 36.999130675786525,-96.27480962492784 36.999265672629733,-96.276368000000005 36.999270999999993,-96.279078999999996 36.999271999999991,-96.381556872639493 36.999226629434901,-96.394272 36.999220999999999,-96.415412000000003 36.999113,-96.500287999999998 36.998643,-96.525212323286397 36.998711038495294,-96.525495980566973 36.998711812823821,-96.551130926932458 36.998781791180214,-96.551130927020779 36.998781791180456,-96.624487489749981 36.998982040153741,-96.705431000000004 36.999203,-96.710481999999999 36.999270999999993,-96.731983006833033 36.99928335311408,-96.736589999999993 36.999285999999998,-96.741269999999986 36.999239000000003,-96.749837999999997 36.998987999999997,-96.792060000000006 36.999179999999996,-96.795198999999997 36.99886,-96.822790999999995 36.999181999999998,-96.867517000000007 36.999217000000002,-96.876289999999997 36.999232999999997,-96.902083000000005 36.999155000000002,-96.903509999999997 36.999132000000003,-96.917092999999994 36.999181999999998,-96.921914999999998 36.999150999999998,-96.924934279563146 36.999131784030439,-96.934641999999997 36.999070000000003,-96.967371 36.999066999999997,-96.975561999999996 36.999018999999997,-97.030081999999979 36.998928999999997,-97.039783999999983 36.999000000000002,-97.045562883576096 36.99899981011751,-97.100651999999997 36.998998,-97.104275999999999 36.999020000000002,-97.120284999999996 36.999014000000003,-97.122596999999999 36.999035999999997,-97.147721000000004 36.999110999999999,-97.202000013134437 36.999050609464689,-97.255829185181881 36.998990719420135,-97.342808466604069 36.998893946743877,-97.362376892203329 36.998872175019791,-97.364929972745273 36.99886933447624,-97.372421000000003 36.998860999999998,-97.384924999999996 36.998843,-97.462279999999993 36.998685000000002,-97.472860999999995 36.998721000000003,-97.527292000000003 36.998749999999994,-97.545899999999989 36.998708999999991,-97.546497999999985 36.998746999999995,-97.564536000000004 36.998711,-97.582460039051355 36.99869862770732,-97.606549 36.998682000000002,-97.637136999999996 36.999090000000002,-97.650465999999994 36.999003999999999,-97.692180007144742 36.998844793059916,-97.697103999999982 36.998826,-97.768704 36.998749999999994,-97.783432000000005 36.998961,-97.783489000000003 36.998846999999998,-97.802297999999979 36.998713000000002,-97.965379045838461 36.998468720211747,-98.033955000000006 36.998365999999997,-98.03989 36.998348999999997,-98.045341999999991 36.998327000000003,-98.111985000000004 36.998133000000003,-98.128185436781749 36.99814624647324,-98.147452 36.998162,-98.177595999999994 36.998008999999996,-98.190367496841162 36.998003995168112,-98.208218000000002 36.997996999999998,-98.219498999999999 36.997824,-98.237712000000002 36.99797199999999,-98.346187999999984 36.997962,-98.347186011230875 36.997961873429141,-98.354073 36.997960999999997,-98.408991 36.998513000000003,-98.418267999999998 36.998538000000003,-98.420209 36.998516000000002,-98.476584655565659 36.998733519956424,-98.485495952453391 36.998767903324406,-98.544871999999984 36.998997000000003,-98.622244241689657 36.999025734091177,-98.714511999999999 36.99906,-98.718464999999995 36.999179999999996,-98.761596999999995 36.999425000000002,-98.791936000000007 36.999254999999998,-98.793711000000002 36.999226999999991,-98.797451999999993 36.999228999999993,-98.811832237742053 36.99924038482925,-98.869449000000003 36.999285999999998,-98.880009 36.999262999999999,-98.880579999999995 36.999308999999997,-98.994371 36.999493,-99.000846251360556 36.99951188908193,-99.029336999999998 36.999594999999999,-99.044703416105833 36.999312701167916,-99.049695 36.999220999999999,-99.124882999999997 36.99942,-99.12944899999998 36.999422000000003,-99.215429691089184 36.999525607779709,-99.221470798208784 36.999532887387339,-99.22594390512576 36.999538277535649,-99.248119999999986 36.999564999999997,-99.277506000000002 36.999578999999997,-99.375390999999993 37.000176999999994,-99.375813215185289 37.000169016042221,-99.396673054015949 36.999774562980598,-99.407015 36.999578999999997,-99.456202999999988 36.999471,-99.484333000000007 36.999625999999999,-99.500394999999983 36.99957599999999,-99.500394999999983 36.999637,-99.502664999999993 36.999645,-99.504092999999997 36.999648,-99.508573999999982 36.999657999999997,-99.541115670095081 36.999572526667627,-99.558068000000006 36.999527999999998,-99.625399000000002 36.999670999999999,-99.648651999999998 36.999603999999998,-99.657657999999998 37.000197,-99.675479899119665 37.000294824261658,-99.700804554289192 37.000433831091229,-99.722499410223932 37.000552913981863,-99.774254999999997 37.000836999999997,-99.774816 37.000841,-99.786016000000004 37.000931,-99.875408999999991 37.001658999999997,-99.904897139036905 37.001652107487203,-99.995200999999994 37.001631000000003,-100.001285999999993 37.001699000000002,-100.002562999999995 37.001705999999999,-100.005706000000004 37.001725999999998,-100.08949117994996 37.002091554886341,-100.115721999999991 37.002206,-100.187546999999995 37.002082,-100.19237099999998 37.002035999999997,-100.193753999999998 37.002133,-100.201675999999992 37.002080999999997,-100.269984573601874 37.001795796937508,-100.395563941387664 37.001271475927872,-100.434302684862132 37.001109733298897,-100.434343961694367 37.0011095609592,-100.436759028295029 37.001099477534027,-100.462594151135718 37.000991610310841,-100.526354155903263 37.000725398506596,-100.551597999999998 37.000619999999998,-100.552683000000002 37.000734999999999,-100.591328000000004 37.000376000000003,-100.591413000000003 37.000399000000002,-100.629769999999994 37.000025,-100.63332699999998 36.999935999999998,-100.675551999999996 36.999687999999999,-100.734516999999997 36.999059000000003,-100.756894000000003 36.999356999999996,-100.759718826764541 36.999297806889686,-100.765484 36.999177000000003,-100.806116000000003 36.999091,-100.814277000000004 36.999085,-100.850054835707368 36.998687920265262,-100.855633999999981 36.998626000000002,-100.891659999999987 36.998604,-100.904274 36.998745,-100.904588000000004 36.998561000000002,-100.945565999999985 36.998151999999997,-100.958261085233985 36.99812508251128,-100.996501999999992 36.998044,-101.012641000000002 36.998176,-101.053589000000002 36.997966999999996,-101.066742000000005 36.997920999999998,-101.096255470166753 36.997758490771822,-101.211485999999979 36.997123999999999,-101.212908999999996 36.997044000000002,-101.283204233333976 36.996668964004151,-101.357796999999991 36.996271,-101.359673999999998 36.996231999999999,-101.37818 36.996164,-101.413867999999994 36.996008000000003,-101.415004999999994 36.995966000000003,-101.485326 36.995610999999997,-101.519065999999995 36.99554599999999,-101.555239 36.99541399999999,-101.600396000000003 36.995152999999995,-101.601592999999994 36.995094999999999,-101.672152845644291 36.994768289529276,-101.672152845650672 36.994768289529254,-101.718235173867967 36.994554916342196,-101.761767880686108 36.994353348566563,-101.826607533764985 36.994053124077894,-101.862548907230888 36.993886706153717,-101.881050066963184 36.993801040963412,-101.899294480822903 36.993716564573397,-101.902439999999999 36.993701999999999,-101.905152836625547 36.993689460946754,-101.93521516037174 36.99355050931414,-102.000446999999994 36.993248999999992,-102.000446999999994 36.993271999999997,-102.028206999999981 36.993124999999999,-102.042240000000007 36.993082999999999,-102.041951999999995 37.024741999999996,-102.04195 37.030805,-102.041921000000002 37.032178000000002,-102.041748999999996 37.034396999999998,-102.04191999999999 37.035083,-102.041983000000002 37.106551000000003,-102.041808999999986 37.111972999999999,-102.042091999999997 37.125020999999997,-102.042135000000002 37.125020999999997,-102.042121535383529 37.12671399835564,-102.042001999999997 37.141744000000003,-102.041962999999996 37.258164,-102.041663999999997 37.29764999999999,-102.041816999999995 37.309489999999997,-102.041973999999996 37.352612999999998,-102.042089000000004 37.352818999999997,-102.041523999999995 37.375017999999997,-102.041585760607518 37.389190434149839,-102.041675999999981 37.409897999999991,-102.041668999999999 37.434739999999998,-102.041754999999995 37.434854999999992,-102.041800999999992 37.469487999999998,-102.041786000000002 37.506065999999997,-102.04201599999999 37.535260999999998,-102.041899 37.541186000000003,-102.041893999999999 37.557977,-102.041618 37.607868000000003,-102.041584999999998 37.644281999999997,-102.041581999999991 37.654494999999997,-102.041694000000007 37.665680999999999,-102.041573999999997 37.680436,-102.041876000000002 37.723875,-102.041989965869121 37.73854062916552,-102.042158 37.760164000000003,-102.042668000000006 37.788758,-102.042952999999997 37.803534999999997,-102.043032999999994 37.824145999999999,-102.043218999999993 37.86792899999999,-102.043714531331204 37.914003914798144,-102.043845000000005 37.926135000000002,-102.043844000000007 37.928101999999996,-102.044644000000005 38.045532,-102.044255000000007 38.113010999999993,-102.044450868202546 38.120049353793199,-102.044589000000002 38.125012999999996,-102.044415729020699 38.133607343100145,-102.044251000000003 38.141777999999995,-102.044296878804843 38.175558844899406,-102.044398 38.250014999999998,-102.044510721728557 38.262483349316234,-102.044567999999998 38.268819,-102.044612999999998 38.312323999999997,-102.044944 38.384419,-102.044441999999989 38.415801999999999,-102.044936000000007 38.41968,-102.045323999999979 38.453646999999997,-102.045262999999991 38.505395,-102.045261999999994 38.505531999999995,-102.045112000000003 38.523783999999999,-102.045222999999993 38.543796999999998,-102.045188999999979 38.558731999999992,-102.045210999999995 38.581608999999993,-102.045287999999999 38.615248999999999,-102.045074 38.669617000000002,-102.045102 38.674945999999998,-102.045159999999996 38.675221,-102.045126999999994 38.686725000000003,-102.045156000000006 38.688555,-102.045211999999992 38.697566999999999,-102.045375000000007 38.754338999999995,-102.045287000000002 38.755527999999998,-102.045371000000003 38.770063999999998,-102.045447999999993 38.783453000000002,-102.045333999999997 38.799463000000003,-102.045387999999988 38.813391999999993,-102.046570999999986 39.047038,-102.047133999999986 39.129700999999997,-102.047188612927897 39.133146793270186,-102.047250000000005 39.13702,-102.047851021058236 39.220289738242592,-102.048449000000005 39.30313799999999,-102.04895999999998 39.37371199999999,-102.049100972149461 39.394064428437375,-102.049166999999983 39.403596999999998,-102.049369999999996 39.418210000000002,-102.049368999999999 39.423333,-102.049678999999998 39.506183,-102.049672999999999 39.536690999999998,-102.049553999999986 39.538932000000003,-102.049763758475066 39.568170000775439,-102.04980599999999 39.574058,-102.049954 39.592331,-102.050258163748609 39.627242889069393,-102.050421999999983 39.646047999999993,-102.050099000000003 39.653812000000002,-102.05059399999999 39.67559399999999,-102.050898693231389 39.741794606053567,-102.051254 39.818992,-102.051317999999995 39.833311000000002,-102.051362999999995 39.843471,-102.051569 39.849805000000003,-102.051743999999999 40.003078000000002))
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/nz.wkt	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-MULTIPOLYGON (((174.616364000000004 -36.100861000000002,174.634978999999987 -36.124718,174.708862000000011 -36.205559,174.781096999999988 -36.266945,174.812744000000009 -36.339165,174.768311000000011 -36.34639,174.710784999999987 -36.525832999999999,174.708587999999992 -36.533332999999999,174.70773299999999 -36.541671999999998,174.714690999999988 -36.595832999999999,174.717194000000006 -36.603057999999997,174.774414000000007 -36.730277999999998,174.808319000000012 -36.805275000000002,174.854400999999996 -36.847777999999998,174.896636999999998 -36.878334000000002,175.011658000000011 -36.871941,175.020813000000004 -36.873610999999997,175.055542000000003 -36.880279999999999,175.076629999999994 -36.890839,175.082458000000003 -36.895279000000002,175.087463000000014 -36.900832999999999,175.091644000000002 -36.925559999999997,175.161652000000004 -36.955559,175.221069 -36.937775000000002,175.230255 -36.939438000000003,175.278320000000008 -36.965279000000002,175.310516000000007 -36.995002999999997,175.319976999999994 -37.005836000000002,175.323853000000014 -37.012222,175.328856999999999 -37.026947,175.330261000000007 -37.035277999999998,175.330535999999995 -37.044449,175.321899000000002 -37.06472,175.31942699999999 -37.095275999999998,175.317748999999992 -37.144165,175.319121999999993 -37.152495999999999,175.328856999999999 -37.168892,175.373290999999995 -37.216659999999997,175.385254000000003 -37.225830000000002,175.404967999999997 -37.228050000000003,175.579131999999987 -37.244446000000003,175.58914200000001 -37.169449,175.551636000000002 -37.024718999999997,175.547484999999995 -37.009171000000002,175.542480000000012 -36.994446000000003,175.536102 -36.980826999999998,175.524993999999992 -36.961669999999998,175.498566000000011 -36.927222999999998,175.484406000000007 -36.920279999999998,175.476348999999999 -36.917777999999998,175.464416999999997 -36.90889,175.435241999999988 -36.866942999999999,175.46691899999999 -36.809998,175.509430000000009 -36.776108,175.486358999999993 -36.679726000000002,175.463593000000003 -36.621383999999999,175.378296000000006 -36.570557,175.366364000000004 -36.561667999999997,175.361633000000012 -36.556389000000003,175.356628 -36.541671999999998,175.353850999999992 -36.525002,175.35244800000001 -36.489998,175.353577 -36.481940999999999,175.360229000000004 -36.478050000000003,175.538025000000005 -36.514724999999999,175.542755 -36.519996999999996,175.604950000000002 -36.622771999999998,175.631072999999986 -36.710555999999997,175.763610999999997 -36.713614999999997,175.840789999999998 -36.754173000000002,175.733582000000013 -36.805832000000002,175.701629999999994 -36.844161999999997,175.707458000000003 -36.869995000000003,175.709960999999993 -36.875275000000002,175.714690999999988 -36.880828999999999,175.720519999999993 -36.885277000000002,175.735779000000008 -36.891387999999999,175.74383499999999 -36.893889999999999,175.758330999999998 -36.876106,175.761382999999995 -36.869446000000003,175.757751000000013 -36.863059999999997,175.753051999999997 -36.857779999999998,175.749114999999989 -36.851394999999997,175.75 -36.843055999999997,175.752196999999995 -36.835555999999997,175.756378000000012 -36.830002,175.765533000000005 -36.828055999999997,175.808013999999986 -36.824173000000002,175.817200000000014 -36.825836000000002,175.833587999999992 -36.830832999999998,175.845519999999993 -36.839722000000002,175.849120999999997 -36.846107000000003,175.878570999999994 -36.914444000000003,175.881072999999986 -36.921669,175.918304000000006 -37.067504999999997,175.917480000000012 -37.075836000000002,175.915253000000007 -37.083061,175.898314999999997 -37.115004999999996,175.884154999999993 -37.168892,175.883330999999998 -37.176949,175.887206999999989 -37.244163999999998,175.892212 -37.249724999999998,175.921082000000013 -37.251671000000002,175.927185000000009 -37.256110999999997,175.93081699999999 -37.262504999999997,175.936371000000008 -37.278885000000002,175.940093999999988 -37.299717,175.974396000000013 -37.418059999999997,175.976074000000011 -37.453055999999997,176.026931999999988 -37.483108999999999,176.035583000000003 -37.487282,176.059417999999994 -37.502502,176.088287000000008 -37.525557999999997,176.093291999999991 -37.531112999999998,176.165526999999997 -37.613892,176.169433999999995 -37.620277000000002,176.167205999999993 -37.625832000000003,176.160247999999996 -37.624167999999997,176.082458000000003 -37.602500999999997,176.066924999999998 -37.59639,176.061095999999992 -37.591942000000003,176.057189999999991 -37.585555999999997,176.062744000000009 -37.580832999999998,176.070800999999989 -37.577781999999999,176.088287000000008 -37.580002,176.095245000000006 -37.576110999999997,176.090239999999994 -37.570838999999999,176.062468999999993 -37.546669,176.023087000000004 -37.528221000000002,176.018767999999994 -37.526057999999999,176.013931000000014 -37.524554999999999,176.007598999999999 -37.524222999999999,175.955535999999995 -37.521110999999998,175.946349999999995 -37.523055999999997,175.940796000000006 -37.527779000000002,175.953583000000009 -37.558891000000003,175.994415000000004 -37.638893000000003,176.071899000000002 -37.655273,176.14498900000001 -37.675277999999999,176.242187999999999 -37.709442000000003,176.267486999999988 -37.676392,176.488281 -37.756667999999998,176.521636999999998 -37.769447,176.527771 -37.773887999999999,176.537475999999998 -37.784447,176.549712999999997 -37.793334999999999,176.656646999999992 -37.855559999999997,176.671082000000013 -37.862502999999997,176.686645999999996 -37.868332000000002,176.759154999999993 -37.892775999999998,176.784149000000014 -37.900275999999998,176.80304000000001 -37.903328000000002,176.819702000000007 -37.904442000000003,176.838287000000008 -37.907501000000003,176.917755 -37.926108999999997,176.943848000000003 -37.932502999999997,177.08273299999999 -37.967216,177.107468000000011 -37.987220999999998,177.159424 -38.013336000000002,177.415253000000007 -37.982498,177.47357199999999 -37.962502,177.545806999999996 -37.919167000000002,177.552459999999996 -37.915000999999997,177.571625000000012 -37.902222000000002,177.599120999999997 -37.878051999999997,177.603577 -37.872498,177.646941999999996 -37.805,177.732178000000005 -37.682502999999997,177.738861000000014 -37.678336999999999,177.746917999999994 -37.675277999999999,177.791931000000005 -37.666946000000003,177.849396000000013 -37.657218999999998,177.858856000000003 -37.656661999999997,177.868010999999996 -37.654442000000003,177.875792999999987 -37.651389999999999,178.0 -37.592224000000002,178.006653 -37.588332999999999,178.012206999999989 -37.583328000000002,178.018004999999988 -37.550831000000002,178.05581699999999 -37.542777999999998,178.064972000000012 -37.542228999999999,178.187744000000009 -37.546951,178.281921000000011 -37.560828999999998,178.306915000000004 -37.568061999999998,178.311919999999986 -37.573334000000003,178.312468999999993 -37.578887999999999,178.306915000000004 -37.583610999999998,178.321075000000008 -37.602500999999997,178.336365 -37.618332000000002,178.34970100000001 -37.626944999999999,178.367737000000005 -37.630828999999999,178.448028999999991 -37.645279000000002,178.457458000000003 -37.646667,178.468018 -37.646949999999997,178.488861000000014 -37.644165,178.497192000000013 -37.646667,178.504424999999998 -37.649994,178.550536999999991 -37.6875,178.555542000000003 -37.692497000000003,178.559692000000013 -37.698883000000002,178.56552099999999 -37.713332999999999,178.562468999999993 -37.719994,178.483306999999996 -37.826393000000003,178.455230999999998 -37.860000999999997,178.449982000000006 -37.865004999999996,178.429687999999999 -37.876944999999999,178.419983000000002 -37.887779000000002,178.350525000000005 -38.004722999999998,178.347473000000008 -38.011116,178.347197999999992 -38.019722000000002,178.348846000000009 -38.027779000000002,178.354950000000002 -38.032218999999998,178.360229000000004 -38.037506,178.364136000000002 -38.043616999999998,178.375792999999987 -38.072777000000002,178.378296000000006 -38.089995999999999,178.377746999999999 -38.09861,178.353850999999992 -38.185555,178.319976999999994 -38.248055,178.318024000000008 -38.255561999999998,178.317474000000004 -38.263893000000003,178.320800999999989 -38.398612999999997,178.302459999999996 -38.528885000000002,178.300536999999991 -38.536391999999999,178.296356000000003 -38.541946000000003,178.158874999999995 -38.649169999999998,178.074982000000006 -38.713889999999999,178.068297999999999 -38.717773,178.060241999999988 -38.721107000000003,178.050812000000008 -38.721381999999998,178.044433999999995 -38.717216,177.928864000000004 -38.722220999999998,177.941070999999994 -38.793616999999998,177.923858999999993 -38.918334999999999,177.917786000000007 -38.942802,177.909697999999992 -38.969718999999998,177.897705000000002 -39.047942999999997,177.893859999999989 -39.064776999999999,177.906708000000009 -39.064278000000002,177.923034999999999 -39.089165,177.942200000000014 -39.091942000000003,177.967743000000013 -39.098334999999999,177.991332999999997 -39.115004999999996,177.996612999999996 -39.120277000000002,177.999390000000005 -39.127495000000003,177.909973000000008 -39.256950000000003,177.898865 -39.267502,177.874968999999993 -39.286118000000002,177.868010999999996 -39.290283000000002,177.861908 -39.285834999999999,177.844970999999987 -39.251396,177.839416999999997 -39.236946000000003,177.824127000000004 -39.193053999999997,177.823577999999998 -39.183883999999999,177.826629999999994 -39.177222999999998,177.841644000000002 -39.152779000000002,177.822021000000007 -39.114445000000003,177.823195999999996 -39.110115,177.82351700000001 -39.105110000000003,177.82119800000001 -39.101275999999999,177.816696000000007 -39.099274,177.680266999999986 -39.075279000000002,177.628845000000013 -39.071114,177.426085999999998 -39.064163,177.387755999999996 -39.077781999999999,177.246917999999994 -39.128334000000002,177.206085000000002 -39.143616000000002,177.149138999999991 -39.165000999999997,177.054961999999989 -39.204445,176.935790999999995 -39.349997999999999,176.931365999999997 -39.355559999999997,176.903870000000012 -39.398055999999997,176.898865 -39.412216,176.89776599999999 -39.438048999999999,176.899414000000007 -39.446387999999999,176.946625000000012 -39.664444000000003,177.01080300000001 -39.654998999999997,177.107178000000005 -39.660828000000002,177.116913000000011 -39.662216,177.120789000000002 -39.66861,177.119110000000006 -39.676108999999997,177.115783999999991 -39.682502999999997,177.08273299999999 -39.729996,177.073577999999998 -39.741385999999999,177.068024000000008 -39.746108999999997,177.059692000000013 -39.749167999999997,177.050262000000004 -39.751396,177.033874999999995 -39.757506999999997,177.028045999999989 -39.762504999999997,177.023590000000013 -39.768059,177.020263999999997 -39.774718999999997,176.894713999999993 -40.034728999999999,176.890533000000005 -40.049728000000002,176.889983999999998 -40.058052000000004,176.89498900000001 -40.082779000000002,176.893035999999995 -40.090279000000002,176.874114999999989 -40.121383999999999,176.834136999999998 -40.181671,176.808319000000012 -40.216659999999997,176.796935999999988 -40.226387000000003,176.687195000000003 -40.321387999999999,176.644135000000006 -40.379997000000003,176.628296000000006 -40.421944000000003,176.539977999999991 -40.495002999999997,176.521362000000011 -40.513893000000003,176.500823999999994 -40.535004,176.441924999999998 -40.600281000000003,176.405243000000013 -40.643889999999999,176.386108000000007 -40.675002999999997,176.35522499999999 -40.688606,176.349396000000013 -40.693610999999997,176.288574000000011 -40.793892,176.239136000000002 -40.90889,176.22079500000001 -40.931671,176.195526 -40.941665999999998,176.172760000000011 -40.952224999999999,176.158600000000007 -40.959999000000003,176.152771 -40.964722000000002,176.142212 -40.975273,176.134154999999993 -40.987502999999997,176.120789000000002 -41.013618,176.11300700000001 -41.035277999999998,176.098297000000002 -41.087218999999997,176.087463000000014 -41.116112,176.080811000000011 -41.129165999999998,176.062195000000003 -41.151938999999999,175.984679999999997 -41.231383999999998,175.955230999999998 -41.255279999999999,175.819121999999993 -41.347220999999998,175.743561 -41.392226999999998,175.736358999999993 -41.396110999999998,175.557738999999998 -41.485000999999997,175.471069 -41.541389000000002,175.427459999999996 -41.564444999999999,175.323028999999991 -41.614449,175.313292999999987 -41.616394,175.230804000000006 -41.620834000000002,175.222197999999992 -41.618332000000002,175.21691899999999 -41.612777999999999,175.184692000000013 -41.535834999999999,175.181915000000004 -41.519447,175.181091000000009 -41.500838999999999,175.188568000000004 -41.461112999999997,175.193024000000008 -41.446106,175.193848000000003 -41.437775000000002,175.191070999999994 -41.430557,175.186095999999992 -41.425002999999997,175.080261000000007 -41.385559,175.063018999999997 -41.380279999999999,175.05304000000001 -41.378608999999997,175.045532000000009 -41.378608999999997,175.027190999999988 -41.381667999999998,174.993286000000012 -41.393332999999998,174.985779000000008 -41.397224,174.972747999999996 -41.405830000000002,174.960509999999999 -41.415275999999999,174.949982000000006 -41.425559999999997,174.944976999999994 -41.431114,174.94165000000001 -41.437775000000002,174.936919999999986 -41.443328999999999,174.918578999999994 -41.448051,174.908600000000007 -41.448334000000003,174.872467 -41.429442999999999,174.86605800000001 -41.425002999999997,174.861084000000005 -41.419724000000002,174.861633000000012 -41.347496,174.863861000000014 -41.340279000000002,174.870789000000002 -41.327224999999999,174.87912 -41.315002,174.883881000000002 -41.309441,174.894440000000003 -41.290000999999997,174.89776599999999 -41.282501000000003,174.899993999999992 -41.275002,174.901916999999997 -41.258338999999999,174.901916999999997 -41.251114,174.898865 -41.234444000000003,174.89498900000001 -41.228050000000003,174.887482000000006 -41.224442000000003,174.827179 -41.218887000000002,174.818848000000003 -41.221938999999999,174.787475999999998 -41.244446000000003,174.778045999999989 -41.255836000000002,174.774414000000007 -41.262222,174.771087999999992 -41.278053,174.778594999999996 -41.281387000000002,174.796082000000013 -41.286949,174.818024000000008 -41.284728999999999,174.824127000000004 -41.289169,174.829407000000003 -41.294724000000002,174.833313000000004 -41.301108999999997,174.832184000000012 -41.309441,174.82995600000001 -41.316665999999998,174.826355000000007 -41.323334000000003,174.821625000000012 -41.328887999999999,174.815796000000006 -41.333610999999998,174.807189999999991 -41.336387999999999,174.744689999999991 -41.347496,174.700531000000012 -41.344444000000003,174.671906000000007 -41.338332999999999,174.654694000000006 -41.333061,174.648314999999997 -41.328612999999997,174.629669000000007 -41.315002,174.59191899999999 -41.27861,174.591644000000002 -41.271385000000002,174.594116000000014 -41.263893000000003,174.601074000000011 -41.250838999999999,174.608306999999996 -41.237777999999999,174.61300700000001 -41.232216,174.619110000000006 -41.23111,174.627746999999999 -41.233887000000003,174.637482000000006 -41.235557999999997,174.648590000000013 -41.234444000000003,174.666931000000005 -41.229720999999998,174.681365999999997 -41.221938999999999,174.694702000000007 -41.213614999999997,174.712738000000002 -41.199440000000003,174.718567000000007 -41.194716999999997,174.800812000000008 -41.100281000000003,174.844421000000011 -41.041671999999998,174.874390000000005 -41.018059,174.882721000000004 -41.015006999999997,174.892486999999988 -41.013061999999998,174.901093000000003 -41.010283999999999,174.908324999999991 -41.006393000000003,174.932189999999991 -40.987502999999997,174.94165000000001 -40.976387000000003,174.945251000000013 -40.969718999999998,174.947478999999987 -40.962218999999997,175.014983999999998 -40.84861,175.09857199999999 -40.755836000000002,175.112731999999994 -40.738892,175.120789000000002 -40.726944000000003,175.127746999999999 -40.713614999999997,175.164153999999996 -40.631943,175.169708000000014 -40.616942999999999,175.171906000000007 -40.609726000000002,175.187468999999993 -40.530830000000002,175.23800700000001 -40.329726999999998,175.23135400000001 -40.280830000000002,175.201629999999994 -40.181671,175.196349999999995 -40.166946000000003,175.178314 -40.134171000000002,175.15554800000001 -40.095832999999999,175.071625000000012 -40.003059,175.055542000000003 -39.987777999999999,175.022217000000012 -39.958053999999997,174.986358999999993 -39.93,174.974120999999997 -39.920836999999999,174.960784999999987 -39.912773,174.938873 -39.902222000000002,174.923034999999999 -39.895836000000003,174.836638999999991 -39.865004999999996,174.828307999999993 -39.862502999999997,174.790802000000014 -39.854720999999998,174.781096999999988 -39.853057999999997,174.751373 -39.865555,174.740509000000003 -39.866661,174.729674999999986 -39.865836999999999,174.57607999999999 -39.829169999999998,174.558013999999986 -39.824722,174.549408 -39.822226999999998,174.542205999999993 -39.818610999999997,174.523865 -39.805,174.421356000000003 -39.726944000000003,174.410521999999986 -39.716942000000003,174.376068000000004 -39.678612,174.353577 -39.639999000000003,174.348846000000009 -39.634444999999999,174.336638999999991 -39.625557,174.316070999999994 -39.613892,174.30886799999999 -39.610283000000003,174.217194000000006 -39.579726999999998,174.208862000000011 -39.577224999999999,174.040802000000014 -39.552779999999998,173.997741999999988 -39.551392,173.986908 -39.550552000000003,173.970245000000006 -39.545279999999998,173.963012999999989 -39.541671999999998,173.871062999999992 -39.483330000000002,173.851898000000006 -39.470551,173.839966000000004 -39.461387999999999,173.810790999999995 -39.4375,173.79525799999999 -39.421944000000003,173.786652000000004 -39.409996,173.775817999999987 -39.390839,173.769713999999993 -39.376944999999999,173.762206999999989 -39.354720999999998,173.754424999999998 -39.305,173.751923000000005 -39.288612,173.751647999999989 -39.269996999999996,173.781921000000011 -39.191383000000002,173.785247999999996 -39.184998,173.800536999999991 -39.169167000000002,173.82995600000001 -39.145836000000003,173.844421000000011 -39.138336000000002,173.868010999999996 -39.128883000000002,173.892761000000007 -39.120552000000004,174.011108000000007 -39.073334000000003,174.114685000000009 -39.024445,174.187744000000009 -38.988608999999997,174.209136999999998 -38.977218999999998,174.226623999999987 -38.972496,174.248016000000007 -38.970551,174.259978999999987 -38.970275999999998,174.281372000000005 -38.969994,174.293029999999987 -38.969994,174.313292999999987 -38.972496,174.351348999999999 -38.979438999999999,174.375244000000009 -38.979163999999997,174.384704999999997 -38.977218999999998,174.392761000000007 -38.974442000000003,174.456359999999989 -38.940277000000002,174.546082000000013 -38.871941,174.557738999999998 -38.860557999999997,174.568024000000008 -38.850281000000003,174.587738000000002 -38.828887999999999,174.594421000000011 -38.815834000000002,174.603302000000014 -38.786118000000002,174.608582000000013 -38.763061999999998,174.625518999999997 -38.677779999999998,174.642486999999988 -38.590836000000003,174.681091000000009 -38.379165999999998,174.724396000000013 -38.185828999999998,174.838561999999996 -38.157218999999998,174.848021999999986 -38.156944000000003,174.85635400000001 -38.154167,174.926636000000002 -38.116112,174.932465000000008 -38.111389000000003,174.940246999999999 -38.101112,174.898590000000013 -38.075004999999997,174.877166999999986 -38.064163,174.892486999999988 -37.976387000000003,174.893585000000002 -37.969994,174.868286000000012 -37.943610999999997,174.861084000000005 -37.939995000000003,174.85522499999999 -37.944716999999997,174.834686000000005 -37.963614999999997,174.830261000000007 -37.969161999999997,174.828033000000005 -37.976661999999997,174.828583000000009 -37.995002999999997,174.822754000000003 -37.999724999999998,174.814696999999995 -38.002502,174.804137999999995 -38.001944999999999,174.797211000000004 -37.998336999999999,174.791077 -37.993614,174.786376999999987 -37.988334999999999,174.783874999999995 -37.980826999999998,174.783600000000007 -37.971663999999997,174.788025000000005 -37.868332000000002,174.788879000000009 -37.860000999999997,174.791077 -37.852783000000002,174.795532000000009 -37.846947,174.819702000000007 -37.829169999999998,174.826629999999994 -37.825279000000002,174.841339000000005 -37.818610999999997,174.872741999999988 -37.806106999999997,174.883330999999998 -37.805,174.903045999999989 -37.807502999999997,174.945251000000013 -37.810555,174.967467999999997 -37.809165999999998,174.975525000000005 -37.806389000000003,174.974975999999998 -37.75,174.974670000000003 -37.740836999999999,174.966644000000002 -37.739998,174.951355000000007 -37.743057,174.94442699999999 -37.745002999999997,174.93081699999999 -37.752502,174.906921000000011 -37.774169999999998,174.870789000000002 -37.783057999999997,174.861633000000012 -37.785004,174.848297000000002 -37.769722000000002,174.828307999999993 -37.710830999999999,174.764160000000004 -37.527779000000002,174.744415000000004 -37.487502999999997,174.724975999999998 -37.447220000000002,174.717467999999997 -37.425002999999997,174.714690999999988 -37.408607000000003,174.714690999999988 -37.399445,174.719116000000014 -37.393616000000002,174.725799999999992 -37.389999000000003,174.744415000000004 -37.385834000000003,174.760528999999991 -37.380279999999999,174.767486999999988 -37.376389000000003,174.773041000000006 -37.371665999999998,174.831635000000006 -37.308052000000004,174.840789999999998 -37.296951,174.840515000000011 -37.291389000000002,174.82995600000001 -37.290557999999997,174.821899000000002 -37.291671999999998,174.812744000000009 -37.293616999999998,174.804687999999999 -37.296393999999999,174.797760000000011 -37.300277999999999,174.766083000000009 -37.321114,174.754700000000014 -37.330559,174.751373 -37.336945,174.744965000000008 -37.359169,174.740509000000003 -37.364722999999998,174.733582000000013 -37.368606999999997,174.724120999999997 -37.368889000000003,174.717194000000006 -37.365279999999998,174.711365 -37.360557999999997,174.701629999999994 -37.349724000000002,174.69442699999999 -37.336945,174.660187000000008 -37.273311999999997,174.645813000000004 -37.236389000000003,174.639709000000011 -37.224442000000003,174.599975999999998 -37.153885000000002,174.578307999999993 -37.115555,174.569976999999994 -37.103614999999998,174.555542000000003 -37.087502,174.551909999999992 -37.080832999999998,174.549712999999997 -37.073616,174.55304000000001 -37.067222999999998,174.558593999999999 -37.0625,174.568848000000003 -37.061385999999999,174.644135000000006 -37.061110999999997,174.661376999999987 -37.065551999999997,174.664977999999991 -37.071944999999999,174.666381999999999 -37.080283999999999,174.661925999999994 -37.085830999999999,174.650542999999999 -37.095275999999998,174.646087999999992 -37.100838000000003,174.648590000000013 -37.108055,174.703856999999999 -37.197777000000002,174.733856000000003 -37.196106,174.716644000000002 -37.154167,174.72357199999999 -37.150275999999998,174.87912 -37.088889999999999,174.887482000000006 -37.059165999999998,174.795532000000009 -37.023055999999997,174.804413000000011 -36.972220999999998,174.824982000000006 -36.960830999999999,174.829407000000003 -36.955002,174.83273299999999 -36.948608,174.828033000000005 -36.943053999999997,174.818848000000003 -36.941383000000002,174.770263999999997 -36.936661,174.696625000000012 -36.93972,174.686095999999992 -36.940834000000002,174.659697999999992 -36.947495000000004,174.653045999999989 -36.951393000000003,174.641662999999994 -36.960830999999999,174.622467 -36.982216,174.619110000000006 -36.988892,174.617187999999999 -36.996108999999997,174.600525000000005 -37.022224,174.524688999999995 -37.045555,174.515533000000005 -37.045555,174.508605999999986 -37.041946000000003,174.502472000000012 -37.037506,174.498016000000007 -37.031944000000003,174.490783999999991 -37.019165,174.484679999999997 -37.005561999999998,174.459228999999993 -36.944031000000003,174.451904000000013 -36.923889000000003,174.446930000000009 -36.909163999999997,174.443024000000008 -36.893616000000002,174.439147999999989 -36.868606999999997,174.436645999999996 -36.852226000000002,174.43386799999999 -36.835555999999997,174.427764999999994 -36.812775000000002,174.422760000000011 -36.798057999999997,174.416655999999989 -36.784171999999998,174.409697999999992 -36.771385000000002,174.406096999999988 -36.765006999999997,174.390533000000005 -36.740279999999998,174.344299000000007 -36.679336999999997,174.301085999999998 -36.62722,174.284973000000008 -36.612777999999999,174.267486999999988 -36.599167,174.236908 -36.568061999999998,174.208862000000011 -36.535277999999998,174.187744000000009 -36.496948000000003,174.17804000000001 -36.467498999999997,174.177764999999994 -36.458336000000003,174.178864000000004 -36.449997000000003,174.181091000000009 -36.442497000000003,174.184417999999994 -36.436110999999997,174.189972000000012 -36.431389000000003,174.196930000000009 -36.427779999999998,174.20495600000001 -36.428612,174.24383499999999 -36.440834000000002,174.251923000000005 -36.443610999999997,174.257751000000013 -36.448051,174.300262000000004 -36.515839,174.348846000000009 -36.601944000000003,174.367919999999998 -36.629165999999998,174.370728000000014 -36.6325,174.422484999999995 -36.667220999999998,174.430542000000003 -36.668059999999997,174.453033000000005 -36.651108,174.456359999999989 -36.644722000000002,174.465515000000011 -36.582779000000002,174.465515000000011 -36.532218999999998,174.442474000000004 -36.414718999999998,174.422211000000004 -36.366112,174.41885400000001 -36.370834000000002,174.391937000000013 -36.395004,174.384978999999987 -36.398887999999999,174.377166999999986 -36.401665,174.303864000000004 -36.395279000000002,174.296935999999988 -36.391669999999998,174.285247999999996 -36.3825,174.276916999999997 -36.370552000000004,174.26998900000001 -36.357779999999998,174.268585000000002 -36.349442000000003,174.268585000000002 -36.342224000000002,174.292205999999993 -36.316947999999996,174.299988000000013 -36.314163,174.308013999999986 -36.316947999999996,174.325531000000012 -36.330283999999999,174.334686000000005 -36.332222000000002,174.36883499999999 -36.331673000000002,174.376891999999998 -36.330832999999998,174.421248999999989 -36.310611999999999,174.50692699999999 -36.267220000000002,174.518311000000011 -36.258057,174.521636999999998 -36.251396,174.519135000000006 -36.245834000000002,174.505248999999992 -36.231383999999998,174.413299999999992 -36.263061999999998,174.378296000000006 -36.286667,174.364685000000009 -36.294167000000002,174.346619000000004 -36.298057999999997,174.336365 -36.298889000000003,174.305237000000005 -36.287506,174.365233999999987 -36.260002,174.442200000000014 -36.169724000000002,174.396087999999992 -36.144447,174.396362000000011 -36.151938999999999,174.394135000000006 -36.159163999999997,174.373290999999995 -36.206389999999999,174.369965000000008 -36.213057999999997,174.358856000000003 -36.222220999999998,174.345245000000006 -36.229720999999998,174.337463000000014 -36.232773000000002,174.33273299999999 -36.229163999999997,174.307738999999998 -36.176949,174.282745000000006 -36.121108999999997,174.274993999999992 -36.118332000000002,174.239409999999992 -36.111389000000003,174.229126000000008 -36.112502999999997,174.195251000000013 -36.131110999999997,174.188568000000004 -36.144165,174.185790999999995 -36.171944000000003,174.191345000000013 -36.176392,174.19830300000001 -36.18,174.217743000000013 -36.182502999999997,174.226898000000006 -36.182502999999997,174.236084000000005 -36.180557,174.244110000000006 -36.183059999999998,174.287749999999988 -36.210281000000002,174.312468999999993 -36.236663999999998,174.314696999999995 -36.243889000000003,174.267212 -36.270279000000002,174.259430000000009 -36.273055999999997,174.251373 -36.272499000000003,174.065796000000006 -36.168334999999999,173.999114999999989 -36.121108999999997,173.994415000000004 -36.115836999999999,173.99105800000001 -36.109444000000003,173.931091000000009 -35.981940999999999,173.938568000000004 -35.934998,173.947478999999987 -35.923889000000003,173.948577999999998 -35.915550000000003,173.946075000000008 -35.908051,173.913879000000009 -35.86972,173.908324999999991 -35.874442999999999,173.903870000000012 -35.879997000000003,173.904967999999997 -35.888336000000002,173.921356000000003 -36.003059,173.980804000000006 -36.121383999999999,173.987731999999994 -36.134171000000002,173.992461999999989 -36.139724999999999,174.124390000000005 -36.263618,174.176085999999998 -36.276947,174.180542000000003 -36.282501000000003,174.198853000000014 -36.343887000000002,174.199982000000006 -36.352226000000002,174.198028999999991 -36.368606999999997,174.194702000000007 -36.375275000000002,174.189147999999989 -36.379722999999998,174.115233999999987 -36.40361,174.089966000000004 -36.411385000000003,174.080811000000011 -36.409438999999999,174.06942699999999 -36.400275999999998,174.065796000000006 -36.393889999999999,174.057465000000008 -36.374718,174.049133000000012 -36.353614999999998,174.044433999999995 -36.338889999999999,174.039703000000003 -36.323334000000003,174.031096999999988 -36.293059999999997,174.020537999999988 -36.273887999999999,173.82607999999999 -36.032501000000003,173.737457000000006 -35.933608999999997,173.727172999999993 -35.923614999999998,173.590515000000011 -35.778053,173.398865 -35.573891000000003,173.395537999999988 -35.567504999999997,173.398865 -35.553612,173.446625000000012 -35.440277000000002,173.465789999999998 -35.429169000000002,173.501923000000005 -35.419724000000002,173.506378000000012 -35.425277999999999,173.540253000000007 -35.430832000000002,173.629943999999995 -35.356667000000002,173.65554800000001 -35.322502,173.65554800000001 -35.313332000000003,173.564147999999989 -35.278053,173.556091000000009 -35.280830000000002,173.551636000000002 -35.286391999999999,173.549712999999997 -35.302779999999998,173.549712999999997 -35.321114,173.551909999999992 -35.328612999999997,173.566924999999998 -35.344161999999997,173.568024000000008 -35.361671,173.566924999999998 -35.36972,173.559143000000006 -35.372771999999998,173.439696999999995 -35.376106,173.416077 -35.384444999999999,173.410247999999996 -35.388893000000003,173.391356999999999 -35.423057999999997,173.39498900000001 -35.449722,173.396087999999992 -35.458053999999997,173.392761000000007 -35.482773000000002,173.386382999999995 -35.523330999999999,173.380524000000008 -35.528053,173.37384 -35.524169999999998,173.306915000000004 -35.449165,173.237731999999994 -35.370277000000002,173.154144000000002 -35.276665,173.103302000000014 -35.226104999999997,173.09191899999999 -35.216942000000003,173.087463000000014 -35.211387999999999,173.09191899999999 -35.1875,173.098846000000009 -35.183608999999997,173.119110000000006 -35.185555,173.12802099999999 -35.1875,173.134704999999997 -35.191108999999997,173.14498900000001 -35.191940000000002,173.152771 -35.189163,173.163879000000009 -35.179169000000002,173.168578999999994 -35.173614999999998,173.18081699999999 -35.156104999999997,173.187468999999993 -35.143332999999998,173.191924999999998 -35.128334000000002,173.196349999999995 -35.104446000000003,173.197478999999987 -35.09639,173.198577999999998 -35.078887999999999,173.198577999999998 -35.051108999999997,173.193848000000003 -35.027222000000002,173.189423000000005 -35.012779000000002,173.179413000000011 -34.993332000000002,173.175812000000008 -34.986946000000003,173.159149000000014 -34.958336000000003,173.151093000000003 -34.946663,173.137755999999996 -34.93,172.947204999999997 -34.716942000000003,172.828033000000005 -34.584442000000003,172.812468999999993 -34.568893000000003,172.722473000000008 -34.495277000000002,172.739136000000002 -34.435555,172.900817999999987 -34.414718999999998,172.911925999999994 -34.414718999999998,173.020813000000004 -34.422226000000002,173.038879000000009 -34.436942999999999,173.043304000000006 -34.517775999999998,173.039977999999991 -34.522224,173.033324999999991 -34.525832999999999,173.024414000000007 -34.527779000000002,173.016662999999994 -34.52861,173.007476999999994 -34.526947,172.997467 -34.498336999999999,172.984130999999991 -34.472771000000002,172.961914000000007 -34.465279000000002,172.955230999999998 -34.468887000000002,172.908324999999991 -34.544167000000002,172.912749999999988 -34.549728000000002,172.923858999999993 -34.558891000000003,172.936095999999992 -34.567222999999998,172.973021999999986 -34.581116000000002,173.053314 -34.665550000000003,173.057738999999998 -34.680283000000003,173.110503999999992 -34.791389000000002,173.120789000000002 -34.810555,173.128570999999994 -34.822502,173.133026 -34.828055999999997,173.13857999999999 -34.832504,173.151916999999997 -34.839995999999999,173.213593000000003 -34.871941,173.242737000000005 -34.884726999999998,173.273314999999997 -34.940834000000002,173.268859999999989 -34.946387999999999,173.262206999999989 -34.959167,173.259978999999987 -34.966659999999997,173.258881000000002 -34.974716,173.259978999999987 -34.983055,173.264709000000011 -35.014449999999997,173.269135000000006 -35.019722000000002,173.317474000000004 -35.018889999999999,173.328583000000009 -35.009444999999999,173.358856000000003 -34.98111,173.36300700000001 -34.975555,173.366364000000004 -34.968887000000002,173.373259999999988 -34.936774999999997,173.371246000000014 -34.927444,173.400817999999987 -34.863334999999999,173.426085999999998 -34.82,173.450806 -34.807777000000002,173.500274999999988 -34.864722999999998,173.499114999999989 -34.871108999999997,173.492461999999989 -34.874718,173.452453999999989 -34.887779000000002,173.443297999999999 -34.889724999999999,173.433319000000012 -34.890555999999997,173.413025000000005 -34.888893000000003,173.405243000000013 -34.892502,173.399719000000005 -34.897224,173.399719000000005 -34.906387000000002,173.402190999999988 -34.913887000000003,173.411590999999987 -34.931778,173.419128 -34.945830999999998,173.426909999999992 -34.957779000000002,173.431641000000013 -34.963332999999999,173.44165000000001 -34.973328000000002,173.454131999999987 -34.981667000000002,173.467467999999997 -34.988892,173.475525000000005 -34.991669000000002,173.493286000000012 -34.995277000000002,173.541655999999989 -34.988608999999997,173.561645999999996 -34.958893000000003,173.562468999999993 -34.950836000000002,173.566924999999998 -34.936110999999997,173.572478999999987 -34.931389000000003,173.579131999999987 -34.927779999999998,173.589416999999997 -34.928612,173.83914200000001 -35.004173000000002,174.101074000000011 -35.121108999999997,174.098297000000002 -35.161667,174.091644000000002 -35.158051,174.056641000000013 -35.155555999999997,174.021911999999986 -35.164161999999997,174.008026 -35.207504,174.008026 -35.215004,174.011382999999995 -35.221381999999998,174.018311000000011 -35.224997999999999,174.093841999999995 -35.225273,174.100525000000005 -35.228881999999999,174.143585000000002 -35.328612999999997,174.208008000000007 -35.323334000000003,174.218018 -35.322226999999998,174.247741999999988 -35.27861,174.319976999999994 -35.232773000000002,174.383881000000002 -35.337775999999998,174.461638999999991 -35.445273999999998,174.491913000000011 -35.485275,174.575806 -35.601944000000003,174.577179 -35.610000999999997,174.577147999999994 -35.618088,174.569976999999994 -35.648055999999997,174.563292999999987 -35.651665,174.530272999999994 -35.649445,174.520263999999997 -35.648612999999997,174.513306 -35.645004,174.505248999999992 -35.642502,174.479126000000008 -35.641945,174.47357199999999 -35.646393000000003,174.474975999999998 -35.654716,174.518311000000011 -35.724167,174.523041000000006 -35.729438999999999,174.554137999999995 -35.750281999999999,174.561919999999986 -35.753059,174.583862000000011 -35.764724999999999,174.60244800000001 -35.844444000000003,174.596924 -35.849167,174.58914200000001 -35.851944000000003,174.577758999999986 -35.852226000000002,174.560790999999995 -35.847777999999998,174.554961999999989 -35.843330000000002,174.538574000000011 -35.819450000000003,174.523314999999997 -35.796669,174.519713999999993 -35.790283000000002,174.49105800000001 -35.769447,174.361908 -35.723328000000002,174.357451999999995 -35.72361,174.34857199999999 -35.734726000000002,174.346924 -35.833061,174.350525000000005 -35.839438999999999,174.35522499999999 -35.845001000000003,174.360779000000008 -35.849442000000003,174.381348000000003 -35.851112,174.384704999999997 -35.844718999999998,174.385528999999991 -35.828887999999999,174.391083000000009 -35.824173000000002,174.398865 -35.821387999999999,174.437468999999993 -35.822777000000002,174.476074000000011 -35.824173000000002,174.486358999999993 -35.824722,174.519713999999993 -35.844718999999998,174.525542999999999 -35.849167,174.524414000000007 -35.855559999999997,174.521362000000011 -35.862220999999998,174.501373 -35.889999000000003,174.496917999999994 -35.895553999999997,174.487182999999987 -35.915000999999997,174.495513999999986 -35.988608999999997,174.498016000000007 -35.994163999999998,174.514160000000004 -36.008614,174.56942699999999 -36.037224000000002,174.578583000000009 -36.038894999999997,174.587738000000002 -36.038894999999997,174.596619000000004 -36.036667,174.606902999999988 -36.037506,174.612731999999994 -36.042228999999999,174.622192000000013 -36.053055,174.62912 -36.065834000000002,174.629394999999988 -36.075004999999997,174.616364000000004 -36.100861000000002)),((171.185241999999988 -44.938332000000003,171.182129000000003 -44.94173,171.175017999999994 -44.949902000000002,171.167923000000002 -44.959850000000003,171.165436 -44.966599000000002,171.164703000000003 -44.970275999999998,171.163299999999992 -44.978332999999999,171.149719000000005 -44.996665999999998,171.07995600000001 -45.067222999999998,171.02664200000001 -45.103332999999999,170.975525000000005 -45.151108,170.966063999999989 -45.163055,170.961914000000007 -45.169167000000002,170.921630999999991 -45.243057,170.873566000000011 -45.358055,170.873290999999995 -45.367218,170.876891999999998 -45.373885999999999,170.871338000000009 -45.424171,170.859955000000014 -45.487502999999997,170.855804000000006 -45.493889000000003,170.750274999999988 -45.61972,170.674682999999987 -45.745002999999997,170.616913000000011 -45.839438999999999,170.55886799999999 -45.881667999999998,170.554413000000011 -45.888053999999997,170.555542000000003 -45.896110999999998,170.591063999999989 -45.894165,170.600525000000005 -45.891669999999998,170.608582000000013 -45.888053999999997,170.658600000000007 -45.858612,170.718018 -45.817504999999997,170.724670000000003 -45.813057,170.773314999999997 -45.782775999999998,170.781096999999988 -45.786391999999999,170.790802000000014 -45.806946000000003,170.790802000000014 -45.84639,170.788879000000009 -45.863892,170.783051 -45.878334000000002,170.776366999999993 -45.882773999999998,170.699982000000006 -45.911667,170.664429000000013 -45.908332999999999,170.57330300000001 -45.916663999999997,170.550536999999991 -45.919167000000002,170.484406000000007 -45.926949,170.452453999999989 -45.931946000000003,170.424408 -45.939438000000003,170.382721000000004 -45.956108,170.342467999999997 -45.97361,170.315246999999999 -45.991385999999999,170.309692000000013 -45.996948000000003,170.294433999999995 -46.013893000000003,170.281646999999992 -46.029442000000003,170.263610999999997 -46.051940999999999,170.256378000000012 -46.065551999999997,170.253051999999997 -46.081947,170.252472000000012 -46.09111,170.254424999999998 -46.107779999999998,170.252777000000009 -46.115836999999999,170.240783999999991 -46.146949999999997,170.237731999999994 -46.154167,170.226623999999987 -46.165000999999997,170.214416999999997 -46.174720999999998,170.193848000000003 -46.188048999999999,170.169433999999995 -46.198608,170.067748999999992 -46.246665999999998,169.911925999999994 -46.340279000000002,169.863585999999998 -46.371383999999999,169.858001999999999 -46.376663,169.849396000000013 -46.389442000000003,169.848021999999986 -46.416946000000003,169.849975999999998 -46.433326999999998,169.852172999999993 -46.440834000000002,169.853850999999992 -46.457504,169.850799999999992 -46.464722000000002,169.845245000000006 -46.469994,169.701904000000013 -46.558052000000004,169.631348000000003 -46.581947,169.458008000000007 -46.623328999999998,169.266388000000006 -46.656387000000002,169.133026 -46.670836999999999,169.107727000000011 -46.669167000000002,169.097197999999992 -46.666946000000003,169.084411999999986 -46.657501000000003,169.067200000000014 -46.635002,169.061919999999986 -46.675002999999997,169.053864000000004 -46.678612,169.008026 -46.680832000000002,168.883330999999998 -46.667777999999998,168.878296000000006 -46.661942000000003,168.861908 -46.628334000000002,168.862457000000006 -46.619446000000003,168.864409999999992 -46.611114999999998,168.864959999999996 -46.603889000000002,168.844970999999987 -46.563614,168.835784999999987 -46.560555,168.823853000000014 -46.561110999999997,168.733306999999996 -46.577499000000003,168.640533000000005 -46.603889000000002,168.633605999999986 -46.606392,168.614685000000009 -46.611114999999998,168.593018 -46.614165999999997,168.568848000000003 -46.615004999999996,168.516937000000013 -46.614165999999997,168.492737000000005 -46.613334999999999,168.442138999999997 -46.601500999999999,168.436630000000008 -46.599666999999997,168.446625000000012 -46.584003000000003,168.442200000000014 -46.575004999999997,168.454407000000003 -46.574447999999997,168.490509000000003 -46.573059,168.502472000000012 -46.574173000000002,168.506103999999993 -46.578887999999999,168.499114999999989 -46.583328000000002,168.505553999999989 -46.588051,168.551636000000002 -46.594444000000003,168.561371000000008 -46.591942000000003,168.566924999999998 -46.586661999999997,168.563599000000011 -46.580002,168.550812000000008 -46.570557,168.541655999999989 -46.567504999999997,168.391356999999999 -46.540000999999997,168.361908 -46.544449,168.353577 -46.547783000000003,168.351623999999987 -46.556106999999997,168.352172999999993 -46.564444999999999,168.362731999999994 -46.583885000000002,168.348236000000014 -46.582165000000003,168.352904999999993 -46.584499,168.359267999999986 -46.585830999999999,168.365082 -46.592666999999999,168.367248999999987 -46.596668,168.367599000000013 -46.601497999999999,168.364928999999989 -46.605331,168.35775799999999 -46.604500000000002,168.351409999999987 -46.603164999999997,168.275269000000009 -46.557777000000002,168.269135000000006 -46.535561,168.268311000000011 -46.529167,168.27664200000001 -46.525832999999999,168.286102 -46.523330999999999,168.307738999999998 -46.520553999999997,168.318297999999999 -46.520836000000003,168.318848000000003 -46.529167,168.321075000000008 -46.536667,168.328856999999999 -46.540557999999997,168.339416999999997 -46.539169,168.386658000000011 -46.497779999999999,168.392486999999988 -46.492226000000002,168.395537999999988 -46.485000999999997,168.396087999999992 -46.477775999999999,168.394135000000006 -46.470275999999998,168.37384 -46.421944000000003,168.36883499999999 -46.416106999999997,168.359679999999997 -46.415000999999997,168.350249999999988 -46.417503000000004,168.250274999999988 -46.400832999999999,168.211090000000013 -46.355277999999998,168.206085000000002 -46.351394999999997,168.194702000000007 -46.345551,168.185516000000007 -46.342498999999997,168.174988000000013 -46.340279000000002,168.116364000000004 -46.343612999999998,168.063873 -46.351669,167.955535999999995 -46.371383999999999,167.893035999999995 -46.387222,167.850799999999992 -46.399445,167.832184000000012 -46.398612999999997,167.824401999999992 -46.394447,167.753875999999991 -46.333885000000002,167.776916999999997 -46.312775000000002,167.781372000000005 -46.306389000000003,167.783600000000007 -46.298340000000003,167.781372000000005 -46.290840000000003,167.778045999999989 -46.284171999999998,167.701904000000013 -46.209442000000003,167.596924 -46.166389000000002,167.556641000000013 -46.156387000000002,167.546356000000003 -46.154167,167.534424 -46.152779000000002,167.483032000000009 -46.149726999999999,167.471069 -46.149994,167.460236000000009 -46.151389999999999,167.451904000000013 -46.154716,167.446075000000008 -46.159996,167.415526999999997 -46.204720000000002,167.356628 -46.254447999999996,167.280272999999994 -46.273055999999997,167.261108000000007 -46.267775999999998,167.238555999999988 -46.263893000000003,167.086638999999991 -46.240555,167.001373 -46.229163999999997,166.966063999999989 -46.224716,166.949982000000006 -46.223885000000003,166.915253000000007 -46.226104999999997,166.883026 -46.229996,166.836365 -46.232498,166.823028999999991 -46.231667000000002,166.768035999999995 -46.22361,166.726348999999999 -46.214165,166.717467999999997 -46.210830999999999,166.705230999999998 -46.201110999999997,166.670806999999996 -46.161667,166.67025799999999 -46.15361,166.684417999999994 -46.145004,166.693848000000003 -46.142775999999998,166.709411999999986 -46.135277000000002,166.738861000000014 -46.119163999999998,166.761230000000012 -46.093612999999998,166.784911999999991 -46.064945000000002,166.804748999999987 -46.033279,166.82995600000001 -46.003891000000003,166.854674999999986 -45.994163999999998,166.886932000000002 -45.990279999999998,166.943297999999999 -45.956108,166.949127000000004 -45.950836000000002,166.946930000000009 -45.945273999999998,166.939147999999989 -45.944716999999997,166.929687999999999 -45.947220000000002,166.836365 -45.981383999999998,166.828033000000005 -45.984444000000003,166.791350999999992 -46.005004999999997,166.785797000000002 -46.010283999999999,166.781096999999988 -46.016396,166.759308000000004 -46.035553,166.762969999999996 -46.038387,166.764969000000008 -46.042392999999997,166.763656999999995 -46.047221999999998,166.760162000000008 -46.050392000000002,166.740982000000002 -46.066059000000003,166.737793000000011 -46.066558999999998,166.670532000000009 -46.087218999999997,166.615783999999991 -46.090836000000003,166.613585999999998 -46.086387999999999,166.617461999999989 -46.059722999999998,166.621062999999992 -46.052498,166.640807999999993 -46.015006999999997,166.661652000000004 -45.991942999999999,166.625792999999987 -45.967216,166.492461999999989 -46.013061999999998,166.484406000000007 -46.014449999999997,166.474975999999998 -46.002785000000003,166.467194000000006 -45.990555,166.465239999999994 -45.983055,166.464690999999988 -45.839438999999999,166.468841999999995 -45.823059,166.472473000000008 -45.815834000000002,166.476898000000006 -45.809722999999998,166.537475999999998 -45.798889000000003,166.613861000000014 -45.801108999999997,166.652190999999988 -45.800277999999999,166.699982000000006 -45.798889000000003,166.881348000000003 -45.779998999999997,166.890807999999993 -45.777779000000002,166.974120999999997 -45.735000999999997,166.987182999999987 -45.709724,166.923034999999999 -45.705832999999998,166.912475999999998 -45.705275999999998,166.887482000000006 -45.705002,166.854126000000008 -45.707779000000002,166.825806 -45.714722000000002,166.809417999999994 -45.721381999999998,166.787475999999998 -45.689995000000003,166.775817999999987 -45.662773,166.81153900000001 -45.617942999999997,166.811217999999997 -45.613109999999999,166.812531000000007 -45.608111999999998,166.816710999999998 -45.605606000000002,166.869689999999991 -45.588779000000002,166.881026999999989 -45.586112999999997,166.88736 -45.585278000000002,166.895203000000009 -45.585608999999998,166.901366999999993 -45.587108999999998,166.912871999999993 -45.590946000000002,166.980255 -45.578612999999997,166.991913000000011 -45.580002,167.0 -45.576949999999997,167.005829000000006 -45.571671000000002,167.032470999999987 -45.527779000000002,167.041350999999992 -45.501396,166.989685000000009 -45.519165,166.891693000000004 -45.544724000000002,166.796875 -45.569389,166.791199000000006 -45.570720999999999,166.784836000000013 -45.571556,166.777023000000014 -45.571219999999997,166.710509999999999 -45.579445,166.704407000000003 -45.574447999999997,166.697204999999997 -45.554718,166.699127000000004 -45.546669,166.757476999999994 -45.425277999999999,166.801361000000014 -45.353614999999998,166.821625000000012 -45.320557,166.86883499999999 -45.279724000000002,166.880797999999999 -45.279167,167.008330999999998 -45.341667,167.038299999999992 -45.357779999999998,167.146941999999996 -45.427222999999998,167.16885400000001 -45.472496,167.205230999999998 -45.477775999999999,167.211914000000007 -45.475273,167.21414200000001 -45.467216,167.209411999999986 -45.461387999999999,167.173584000000005 -45.422775,167.158019999999993 -45.406661999999997,167.134978999999987 -45.386116,167.12912 -45.381385999999999,167.115509000000003 -45.372222999999998,167.097747999999996 -45.366112,167.087463000000014 -45.363616999999998,167.061645999999996 -45.345001000000003,167.051085999999998 -45.333328000000002,167.081421000000006 -45.325333,167.08407600000001 -45.321666999999998,167.092407000000009 -45.316498000000003,167.097243999999989 -45.314498999999998,167.114227 -45.310333,167.163574000000011 -45.302833999999997,167.169922000000014 -45.302998000000002,167.173584000000005 -45.305999999999997,167.176422000000002 -45.309330000000003,167.17756700000001 -45.313834999999997,167.212738000000002 -45.313332000000003,167.218841999999995 -45.318336000000002,167.232178000000005 -45.327224999999999,167.239685000000009 -45.331116000000002,167.248566000000011 -45.334167,167.260254000000003 -45.335830999999999,167.270813000000004 -45.334442000000003,167.301636000000002 -45.329445,167.309692000000013 -45.326110999999997,167.307738999999998 -45.318610999999997,167.300262000000004 -45.314444999999999,167.19464099999999 -45.271445999999997,167.138290000000012 -45.268943999999998,167.099471999999992 -45.272114000000002,167.094146999999992 -45.271278000000002,167.08964499999999 -45.268776000000003,167.002196999999995 -45.201110999999997,166.996917999999994 -45.145836000000003,167.146362000000011 -45.001671000000002,167.198577999999998 -44.956108,167.204407000000003 -44.951110999999997,167.228302000000014 -44.930832000000002,167.24105800000001 -44.921387000000003,167.260528999999991 -44.907501000000003,167.267486999999988 -44.903053,167.312744000000009 -44.875,167.320800999999989 -44.871383999999999,167.393462999999997 -44.862999000000002,167.398987000000005 -44.861496000000002,167.404312000000004 -44.863498999999997,167.421798999999993 -44.894168999999998,167.422974000000011 -44.898665999999999,167.420638999999994 -44.908496999999997,167.417968999999999 -44.912166999999997,167.440796000000006 -44.928612,167.439972000000012 -44.9375,167.441924999999998 -44.945,167.459686000000005 -44.99472,167.497741999999988 -45.003891000000003,167.507202000000007 -45.001396,167.508224000000013 -45.0,167.511658000000011 -44.995277000000002,167.511108000000007 -44.986946000000003,167.47908000000001 -44.903446000000002,167.465912000000003 -44.876441999999997,167.462752999999992 -44.867947,167.461578000000003 -44.863444999999999,167.460097999999988 -44.853946999999998,167.459411999999986 -44.843944999999998,167.459914999999995 -44.838444000000003,167.448577999999998 -44.795279999999998,167.453033000000005 -44.788894999999997,167.458587999999992 -44.783614999999998,167.59970100000001 -44.683883999999999,167.743010999999996 -44.611671,167.838866999999993 -44.498610999999997,167.850249999999988 -44.488052000000003,167.949982000000006 -44.40361,167.963593000000003 -44.395004,168.034973000000008 -44.353614999999998,168.12802099999999 -44.316947999999996,168.141662999999994 -44.308052000000004,168.144713999999993 -44.300834999999999,168.144135000000006 -44.292503000000004,168.124099999999999 -44.251404,168.143311000000011 -44.253059,168.153594999999996 -44.251396,168.169708000000014 -44.24472,168.288299999999992 -44.172775,168.29385400000001 -44.167503000000004,168.336638999999991 -44.123885999999999,168.339966000000004 -44.116661,168.337738000000002 -44.109169,168.334411999999986 -44.102783000000002,168.336365 -44.094444000000003,168.369689999999991 -44.043334999999999,168.374968999999993 -44.037781000000003,168.383026 -44.034447,168.402771 -44.029724000000002,168.672211000000004 -43.987777999999999,168.676909999999992 -43.993614,168.683043999999995 -43.998336999999999,168.690246999999999 -44.002228000000002,168.715239999999994 -44.012222,168.723021999999986 -44.012504999999997,168.753875999999991 -44.010002,168.764160000000004 -44.008614,168.824401999999992 -43.988334999999999,168.858582000000013 -43.976661999999997,168.866364000000004 -43.973328000000002,168.879669000000007 -43.964447,168.885254000000003 -43.959167,168.961914000000007 -43.90361,169.080765000000014 -43.848472999999998,169.142212 -43.794167000000002,169.224396000000013 -43.743332000000002,169.271636999999998 -43.722496,169.387482000000006 -43.679169000000002,169.491318000000007 -43.643467,169.539153999999996 -43.633614,169.62661700000001 -43.613892,169.64498900000001 -43.608893999999999,169.652771 -43.605559999999997,169.660521999999986 -43.601944000000003,169.721619000000004 -43.573334000000003,169.728302000000014 -43.568893000000003,169.739136000000002 -43.558052000000004,169.767486999999988 -43.522773999999998,169.790526999999997 -43.496665999999998,169.871062999999992 -43.406661999999997,169.884154999999993 -43.397781000000002,169.961638999999991 -43.371941,170.021911999999986 -43.352500999999997,170.028594999999996 -43.347777999999998,170.033874999999995 -43.342498999999997,170.038025000000005 -43.336112999999997,170.049408 -43.306946000000003,170.111358999999993 -43.254173000000002,170.288299999999992 -43.107779999999998,170.418029999999987 -43.052498,170.523041000000006 -43.010559,170.531921000000011 -43.008057,170.583037999999988 -42.990555,170.674347000000012 -42.958739999999999,170.704407000000003 -42.945830999999998,170.750549000000007 -42.924720999999998,170.781096999999988 -42.910553,170.794128 -42.901389999999999,171.065796000000006 -42.648055999999997,171.108306999999996 -42.608055,171.149719000000005 -42.563614,171.153594999999996 -42.55722,171.196075000000008 -42.476661999999997,171.225799999999992 -42.433608999999997,171.230255 -42.40889,171.235779000000008 -42.394165,171.247467 -42.375,171.260254000000003 -42.366112,171.270537999999988 -42.355003000000004,171.297760000000011 -42.310279999999999,171.304413000000011 -42.296669,171.309692000000013 -42.281944000000003,171.31665000000001 -42.249724999999998,171.321075000000008 -42.224716,171.322754000000003 -42.207222000000002,171.324401999999992 -42.18972,171.326355000000007 -42.172226000000002,171.329131999999987 -42.155830000000002,171.343841999999995 -42.110832000000002,171.361084000000005 -42.067779999999999,171.461638999999991 -41.859726000000002,171.51080300000001 -41.764449999999997,171.533051 -41.766396,171.557738999999998 -41.766663,171.569121999999993 -41.766112999999997,171.650817999999987 -41.761391000000003,171.663025000000005 -41.757781999999999,171.685790999999995 -41.746948000000003,171.790526999999997 -41.696387999999999,171.85522499999999 -41.652779000000002,171.886658000000011 -41.629997000000003,171.942200000000014 -41.550277999999999,172.02276599999999 -41.443053999999997,172.053864000000004 -41.417503000000004,172.064972000000012 -41.40361,172.122192000000013 -41.277779000000002,172.111633000000012 -41.236114999999998,172.10522499999999 -41.153053,172.106078999999994 -40.911385000000003,172.10635400000001 -40.893059,172.108856000000003 -40.885559,172.113861000000014 -40.879997000000003,172.186645999999996 -40.813332000000003,172.218567000000007 -40.785834999999999,172.22470100000001 -40.781109,172.255248999999992 -40.776947,172.263884999999988 -40.774169999999998,172.271362000000011 -40.770553999999997,172.299408 -40.755004999999997,172.348297000000002 -40.727493000000003,172.382721000000004 -40.698334000000003,172.426909999999992 -40.657775999999998,172.478302000000014 -40.613892,172.513320999999991 -40.598441999999999,172.517639000000003 -40.596783000000002,172.523482999999999 -40.597946,172.522644000000014 -40.602943000000003,172.521132999999992 -40.607277000000003,172.520813000000004 -40.625,172.519440000000003 -40.631385999999999,172.525542999999999 -40.6325,172.534149000000014 -40.631667999999998,172.571899000000002 -40.617775000000002,172.596343999999988 -40.601394999999997,172.62802099999999 -40.573891000000003,172.631621999999993 -40.567222999999998,172.631621999999993 -40.559998,172.608582000000013 -40.556946000000003,172.601348999999999 -40.558891000000003,172.597014999999999 -40.553333000000002,172.589690999999988 -40.558838000000002,172.583862000000011 -40.560004999999997,172.581024000000014 -40.556671,172.581848000000008 -40.551665999999997,172.589843999999999 -40.541172000000003,172.627166999999986 -40.511947999999997,172.633330999999998 -40.509171000000002,172.661376999999987 -40.502785000000003,172.712188999999995 -40.495552000000004,172.817748999999992 -40.504173000000002,172.861358999999993 -40.507781999999999,172.981628 -40.527222000000002,172.991332999999997 -40.529167,172.989959999999996 -40.53389,172.978026999999997 -40.53389,172.945251000000013 -40.530830000000002,172.895263999999997 -40.524445,172.797211000000004 -40.516112999999997,172.739959999999996 -40.516945,172.731628 -40.519722000000002,172.656921000000011 -40.653328000000002,172.701355000000007 -40.748336999999999,172.855804000000006 -40.853057999999997,172.865509000000003 -40.853057999999997,172.875244000000009 -40.851112,172.907195999999999 -40.828887999999999,172.930266999999986 -40.802222999999998,172.935241999999988 -40.796669,172.976623999999987 -40.781944000000003,172.985229000000004 -40.781112999999998,173.002196999999995 -40.786667,173.008330999999998 -40.791114999999998,173.013306 -40.796669,173.020537999999988 -40.809722999999998,173.051085999999998 -40.869446000000003,173.059692000000013 -40.962775999999998,173.059692000000013 -40.971938999999999,173.056091000000009 -40.978606999999997,173.031646999999992 -41.027495999999999,173.075806 -41.291114999999998,173.079680999999994 -41.297500999999997,173.085784999999987 -41.302222999999998,173.105529999999987 -41.313332000000003,173.168029999999987 -41.316108999999997,173.188873 -41.313332000000003,173.198853000000014 -41.311385999999999,173.207184000000012 -41.308608999999997,173.272217000000012 -41.274445,173.278320000000008 -41.269722000000002,173.32607999999999 -41.222496,173.340515000000011 -41.205832999999998,173.351623999999987 -41.195549,173.377166999999986 -41.178055,173.426085999999998 -41.150275999999998,173.598021999999986 -41.053612,173.606628 -41.052498,173.639709000000011 -41.073616,173.672760000000011 -41.070557,173.720519999999993 -41.060279999999999,173.727753000000007 -41.056389000000003,173.739959999999996 -41.047226000000002,173.744689999999991 -41.032501000000003,173.743286000000012 -41.024169999999998,173.738281 -41.018608,173.72744800000001 -41.019447,173.718841999999995 -41.022499000000003,173.696930000000009 -41.033614999999998,173.690796000000006 -41.038338000000003,173.682189999999991 -41.041114999999998,173.676085999999998 -41.036391999999999,173.673584000000005 -41.029167,173.674682999999987 -41.020836000000003,173.678314 -41.014449999999997,173.696625000000012 -41.000281999999999,173.751373 -40.976944000000003,173.800262000000004 -40.969161999999997,173.913299999999992 -40.931671,173.984679999999997 -40.896949999999997,173.994415000000004 -40.896667,174.02276599999999 -40.913055,174.027771 -40.91861,174.030272999999994 -40.925834999999999,174.03054800000001 -40.935271999999998,174.02941899999999 -40.943610999999997,174.022217000000012 -40.947220000000002,173.929961999999989 -40.992226000000002,173.832184000000012 -40.995002999999997,173.821075000000008 -40.994163999999998,173.782195999999999 -41.009171000000002,173.778594999999996 -41.015555999999997,173.769713999999993 -41.09861,173.778594999999996 -41.114449,173.794433999999995 -41.109444000000003,173.822204999999997 -41.080832999999998,173.821899000000002 -41.062218,173.836638999999991 -41.055,173.846343999999988 -41.053055,173.93081699999999 -41.049446000000003,173.946625000000012 -41.055832000000002,173.953033000000005 -41.060555,173.917755 -41.087502,173.887482000000006 -41.103332999999999,173.848846000000009 -41.144165,173.820526 -41.245834000000002,173.763306 -41.267502,173.76080300000001 -41.273055999999997,173.775817999999987 -41.289726000000002,173.788025000000005 -41.290557999999997,173.806365999999997 -41.289444000000003,174.03720100000001 -41.218330000000002,174.09970100000001 -41.198334000000003,174.128845000000013 -41.187218,174.133605999999986 -41.181671,174.133605999999986 -41.176108999999997,174.126068000000004 -41.174171,174.008605999999986 -41.175277999999999,174.001099000000011 -41.178885999999999,174.001373 -41.186385999999999,174.000274999999988 -41.194716999999997,173.993010999999996 -41.198334000000003,173.981902999999988 -41.199440000000003,173.932738999999998 -41.199997000000003,173.908324999999991 -41.199997000000003,173.899719000000005 -41.197495000000004,173.893585000000002 -41.192771999999998,173.887206999999989 -41.169724000000002,173.88580300000001 -41.161667,173.888031000000012 -41.154167,173.89776599999999 -41.133614,173.902466000000004 -41.128334000000002,174.032745000000006 -40.999724999999998,174.084411999999986 -41.021385000000002,174.094116000000014 -41.023330999999999,174.246338000000009 -41.044724000000002,174.258330999999998 -41.035277999999998,174.299408 -41.003616,174.315246999999999 -41.000557,174.323853000000014 -41.003334000000002,174.323853000000014 -41.010834000000003,174.321625000000012 -41.018059,174.209960999999993 -41.197495000000004,174.161376999999987 -41.225555,174.152771 -41.226661999999997,174.114685000000009 -41.231383999999998,174.052185000000009 -41.235000999999997,174.02664200000001 -41.236114999999998,174.053864000000004 -41.254173000000002,174.206359999999989 -41.269447,174.214966000000004 -41.266663,174.291655999999989 -41.238892,174.303588999999988 -41.229720999999998,174.320800999999989 -41.220275999999998,174.326904000000013 -41.222771000000002,174.288574000000011 -41.276947,174.249114999999989 -41.322502,174.241637999999995 -41.326110999999997,174.231902999999988 -41.328055999999997,174.208587999999992 -41.329445,174.193572999999986 -41.320281999999999,174.155243000000013 -41.305,174.148041000000006 -41.308608999999997,174.111633000000012 -41.336661999999997,174.052764999999994 -41.421112,174.049133000000012 -41.427779999999998,174.044433999999995 -41.442497000000003,174.045806999999996 -41.450836000000002,174.049988000000013 -41.466392999999997,174.063873 -41.493057,174.084136999999998 -41.526108,174.097473000000008 -41.519447,174.096069 -41.511116,174.100799999999992 -41.505561999999998,174.108306999999996 -41.509171000000002,174.114685000000009 -41.513893000000003,174.125792999999987 -41.523887999999999,174.151093000000003 -41.551392,174.176085999999998 -41.578612999999997,174.178864000000004 -41.586112999999997,174.179961999999989 -41.594444000000003,174.179137999999995 -41.602783000000002,174.174133000000012 -41.608336999999999,174.163299999999992 -41.618606999999997,174.157195999999999 -41.623328999999998,174.193024000000008 -41.685555,174.287749999999988 -41.734444000000003,174.291655999999989 -41.740836999999999,174.289153999999996 -41.748336999999999,174.283324999999991 -41.762222,174.236358999999993 -41.837218999999997,174.212188999999995 -41.865279999999998,174.201355000000007 -41.875557,174.184143000000006 -41.890555999999997,174.17804000000001 -41.895004,174.164703000000003 -41.90361,174.157195999999999 -41.907218999999998,174.143585000000002 -41.915832999999999,174.088561999999996 -41.957779000000002,174.009154999999993 -42.027495999999999,173.979674999999986 -42.061110999999997,173.965239999999994 -42.086945,173.959136999999998 -42.100838000000003,173.954407000000003 -42.115555,173.953307999999993 -42.123885999999999,173.953583000000009 -42.133330999999998,173.956359999999989 -42.166389000000002,173.933319000000012 -42.196944999999999,173.928314 -42.202499000000003,173.884154999999993 -42.243614,173.87802099999999 -42.248055,173.870513999999986 -42.251944999999999,173.86300700000001 -42.255561999999998,173.834686000000005 -42.271385000000002,173.801361000000014 -42.293059999999997,173.794983000000002 -42.297500999999997,173.568572999999986 -42.476944000000003,173.558593999999999 -42.487777999999999,173.541350999999992 -42.511947999999997,173.533874999999995 -42.525002,173.531372000000005 -42.532218999999998,173.500823999999994 -42.599724000000002,173.480804000000006 -42.621941,173.466063999999989 -42.656944000000003,173.459960999999993 -42.670836999999999,173.448853000000014 -42.690277000000002,173.387755999999996 -42.793616999999998,173.351623999999987 -42.840836000000003,173.328033000000005 -42.898887999999999,173.328033000000005 -42.906387000000002,173.325806 -42.913612,173.285521999999986 -42.958053999999997,173.106902999999988 -43.057777000000002,173.099396000000013 -43.061385999999999,173.090515000000011 -43.064444999999999,173.026366999999993 -43.081947,172.975799999999992 -43.09111,172.953033000000005 -43.092773,172.935516000000007 -43.098334999999999,172.92025799999999 -43.105834999999999,172.838012999999989 -43.148055999999997,172.818024000000008 -43.160828000000002,172.797760000000011 -43.183059999999998,172.772217000000012 -43.219718999999998,172.76080300000001 -43.239165999999997,172.758026 -43.246665999999998,172.726944000000003 -43.415539000000003,172.726593000000008 -43.423355,172.775817999999987 -43.612220999999998,172.894135000000006 -43.61972,172.90554800000001 -43.620834000000002,173.059692000000013 -43.653053,173.100525000000005 -43.697220000000002,173.105529999999987 -43.703612999999997,173.114409999999992 -43.741385999999999,173.116913000000011 -43.762504999999997,173.116913000000011 -43.769996999999996,173.112182999999987 -43.825004999999997,173.110779000000008 -43.833328000000002,173.091644000000002 -43.856392,173.058593999999999 -43.871108999999997,173.006088000000005 -43.869498999999998,173.002242999999993 -43.868999000000002,172.999236999999994 -43.865668999999997,172.990905999999995 -43.849670000000003,172.965239999999994 -43.802222999999998,172.961365 -43.764449999999997,172.958862000000011 -43.756950000000003,172.951355000000007 -43.755279999999999,172.939972000000012 -43.756110999999997,172.927185000000009 -43.766112999999997,172.921906000000007 -43.771667,172.920532000000009 -43.824173000000002,172.920532000000009 -43.833328000000002,172.917572000000007 -43.869221000000003,172.923584000000005 -43.875884999999997,172.931243999999992 -43.881390000000003,172.937408000000005 -43.887886000000002,172.938904000000008 -43.892384,172.938247999999987 -43.896220999999997,172.870789000000002 -43.904442000000003,172.861633000000012 -43.901389999999999,172.811919999999986 -43.882216999999997,172.804413000000011 -43.878334000000002,172.745789000000002 -43.837775999999998,172.740783999999991 -43.832222000000002,172.736908 -43.825836000000002,172.715239999999994 -43.808334000000002,172.642761000000007 -43.772224,172.513031000000012 -43.729438999999999,172.495238999999998 -43.723885000000003,172.483582000000013 -43.722771000000002,172.472197999999992 -43.72361,172.424988000000013 -43.733612,172.413299999999992 -43.743614,172.390258999999986 -43.763893000000003,172.384978999999987 -43.77861,172.382445999999987 -43.795006,172.383330999999998 -43.8125,172.384704999999997 -43.820838999999999,172.394713999999993 -43.850281000000003,172.393311000000011 -43.858612,172.386932000000002 -43.863334999999999,172.367461999999989 -43.867775000000002,172.297211000000004 -43.881110999999997,172.286925999999994 -43.883057,172.275542999999999 -43.883887999999999,172.189696999999995 -43.909163999999997,172.050812000000008 -43.965279000000002,171.978577 -43.995834000000002,171.955230999999998 -44.006667999999998,171.941070999999994 -44.015006999999997,171.782470999999987 -44.076949999999997,171.654694000000006 -44.122498,171.583587999999992 -44.153885000000002,171.547211000000004 -44.173889000000003,171.538483000000014 -44.178775999999999,171.355559999999997 -44.285491999999998,171.346465999999992 -44.292186999999998,171.342467999999997 -44.295555,171.319976999999994 -44.316391000000003,171.293578999999994 -44.343612999999998,171.285521999999986 -44.356392,171.278594999999996 -44.369995000000003,171.271911999999986 -44.383887999999999,171.269135000000006 -44.391112999999997,171.275542999999999 -44.395836000000003,171.279144000000002 -44.402495999999999,171.278594999999996 -44.420836999999999,171.277190999999988 -44.428885999999999,171.275542999999999 -44.437218,171.26998900000001 -44.451942000000003,171.263306 -44.465553,171.254974000000004 -44.478332999999999,171.214966000000004 -44.533057999999997,171.208313000000004 -44.537506,171.200531000000012 -44.541114999999998,171.196075000000008 -44.560279999999999,171.192200000000014 -44.645836000000003,171.193024000000008 -44.663330000000002,171.20495600000001 -44.700279000000002,171.21414200000001 -44.739165999999997,171.215239999999994 -44.747498,171.207184000000012 -44.851112,171.198577999999998 -44.919998,171.195800999999989 -44.927498,171.185241999999988 -44.938332000000003)))
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/state.mysql.sql	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
--- State border data courtesy of U.S. Census Bureau Cartographic Boundary Files: http://www.census.gov/geo/www/cob/st2000.html
--- Boundary file data is a product of the U.S. federal government and is public domain.  See 17 U.S.C. 105.
--- INSERT INTO geoapp_state (`name`, `poly`) VALUES ('Puerto Rico', NULL); MySQL spatial indices can't handle NULL values :-/
-INSERT INTO geoapp_state (`name`, `poly`) VALUES ('Colorado', GeomFromText('POLYGON ((-107.918420999999981 41.002035999999997,-107.69133582431418 41.002104250342249,-107.625624000000002 41.002124000000002,-107.521505363272311 41.002506710525772,-107.367442999999994 41.003073,-107.317794462401125 41.002967213367114,-107.305312956219666 41.00294061889776,-107.241193999999993 41.002803999999998,-107.000606000000005 41.003443999999995,-106.857772999999995 41.002662999999991,-106.453858999999994 41.002056999999994,-106.439563000000007 41.001978,-106.437419000000006 41.001794999999994,-106.430949999999996 41.001751999999996,-106.391852 41.001176,-106.386356000000006 41.001143999999996,-106.321164999999993 40.999122999999997,-106.217573000000002 40.997734,-106.194624254510543 40.99762614711792,-106.190540579491184 40.997606954952467,-106.061180999999991 40.996999000000002,-105.764246857267409 40.99689755617932,-105.730421000000007 40.996886000000003,-105.724804000000006 40.99691,-105.554417704421283 40.997390710823062,-105.412220703167577 40.997791891195448,-105.277137999999979 40.998173,-105.256527000000006 40.998190999999998,-105.254778999999999 40.99821,-105.173435761678107 40.998177015252317,-104.943370680568208 40.998083723679372,-104.855272999999997 40.998047999999997,-104.829503999999986 40.999270000000003,-104.675999000000004 41.000957,-104.497148999999993 41.001828000000003,-104.497057999999996 41.001804999999997,-104.467671999999979 41.001472999999997,-104.214691999999999 41.001657000000002,-104.214191 41.001567999999999,-104.211472999999998 41.001590999999998,-104.123585999999989 41.001625999999995,-104.104590000000002 41.001542999999991,-104.086067999999983 41.001562999999997,-104.066960999999992 41.001503999999997,-104.053248999999994 41.001405999999996,-104.039237999999997 41.001502000000002,-104.023382999999981 41.001887000000004,-104.018223000000006 41.001617000000003,-104.010804886779724 41.00161667450854,-103.972641999999979 41.001615,-103.971373 41.001524000000003,-103.953524999999999 41.001595999999999,-103.906323999999998 41.001387,-103.896207000000004 41.00175,-103.877966999999998 41.00167299999999,-103.858448999999993 41.001680999999998,-103.750497999999993 41.002054,-103.574522000000002 41.001721000000003,-103.497446999999994 41.001635,-103.486697000000007 41.001913999999999,-103.421975000000003 41.002006999999999,-103.421925000000002 41.001968999999995,-103.396990999999986 41.002558,-103.365313999999984 41.001846,-103.362978999999996 41.001843999999991,-103.077804 41.002298000000003,-103.076536000000004 41.002253000000003,-103.059537999999989 41.002367999999997,-103.057997999999998 41.002367999999997,-103.043443999999994 41.002344,-103.038703999999996 41.002251,-103.002026 41.002485999999998,-103.000101999999984 41.002400000000002,-102.982690000000005 41.002156999999997,-102.981482999999997 41.002111999999997,-102.963668999999982 41.002185999999995,-102.962522000000007 41.002071999999998,-102.960706000000002 41.002058999999996,-102.959623999999991 41.002094999999997,-102.944829999999996 41.002302999999998,-102.943109000000007 41.002051000000002,-102.925567999999998 41.002279999999999,-102.924029000000004 41.002141999999999,-102.906546999999989 41.002275999999995,-102.904796000000005 41.002206999999999,-102.887406999999982 41.002178,-102.885745999999997 41.002130999999999,-102.867822000000004 41.002183000000002,-102.865783999999991 41.001987999999997,-102.849262999999993 41.002301000000003,-102.846455000000006 41.002256000000003,-102.830302999999986 41.002350999999997,-102.827280000000002 41.002142999999997,-102.773545999999996 41.002414000000002,-102.766722999999999 41.00227499999999,-102.754616999999996 41.002360999999993,-102.739623999999992 41.002229999999997,-102.653462999999988 41.002332000000003,-102.621032999999997 41.002597000000002,-102.578695999999994 41.002291,-102.575738 41.002268,-102.575496 41.002200000000002,-102.566047999999995 41.002200000000002,-102.556788999999995 41.002218999999997,-102.517701071582451 41.002347335877943,-102.487954999999985 41.002444999999994,-102.470536999999979 41.002381999999997,-102.469223 41.002423999999998,-102.460334593696913 41.00241180236555,-102.387750989484957 41.002312195277327,-102.380372991932845 41.002302070389462,-102.379593 41.002301000000003,-102.364065999999994 41.002173999999997,-102.292833000000002 41.002206999999999,-102.292621999999994 41.002229999999997,-102.292552999999998 41.002206999999999,-102.291353999999998 41.002206999999999,-102.277803455573988 41.002233743569548,-102.272099999999995 41.002245000000002,-102.267811999999992 41.002383000000002,-102.231931000000003 41.002327,-102.212199999999982 41.002462,-102.209361 41.002442000000002,-102.209083936251005 41.002440229332002,-102.207776055197755 41.002431870883314,-102.191209999999998 41.002325999999996,-102.124972 41.002338000000002,-102.070598000000004 41.002423,-102.051614 41.002377000000003,-102.051291999999989 40.749591000000002,-102.051634432607003 40.582129592617228,-102.051725000000005 40.537838999999991,-102.051518999999999 40.520094,-102.051464999999993 40.440007999999999,-102.051839999999999 40.396396000000003,-102.051571999999993 40.393079999999998,-102.051797999999991 40.360069000000003,-102.051585542616536 40.350646145741024,-102.051309000000003 40.338380999999998,-102.051922000000005 40.235343999999998,-102.05189399999999 40.229192999999995,-102.051908999999995 40.162674000000003,-102.052001000000004 40.148358999999999,-102.051852600888665 40.064469617536822,-102.051743999999999 40.003078000000002,-102.051715564657869 39.978173027456265,-102.051569 39.849805000000003,-102.051362999999995 39.843471,-102.051317999999995 39.833311000000002,-102.051254 39.818992,-102.05059399999999 39.67559399999999,-102.050099000000003 39.653812000000002,-102.050421999999983 39.646047999999993,-102.049954 39.592331,-102.04980599999999 39.574058,-102.049553999999986 39.538932000000003,-102.049672999999999 39.536690999999998,-102.049678999999998 39.506183,-102.049368999999999 39.423333,-102.049369999999996 39.418210000000002,-102.049166999999983 39.403596999999998,-102.04895999999998 39.37371199999999,-102.048449000000005 39.30313799999999,-102.047250000000005 39.13702,-102.047133999999986 39.129700999999997,-102.046570999999986 39.047038,-102.045387999999988 38.813391999999993,-102.045333999999997 38.799463000000003,-102.045447999999993 38.783453000000002,-102.045371000000003 38.770063999999998,-102.045287000000002 38.755527999999998,-102.045375000000007 38.754338999999995,-102.045211999999992 38.697566999999999,-102.045156000000006 38.688555,-102.045126999999994 38.686725000000003,-102.045159999999996 38.675221,-102.045102 38.674945999999998,-102.045074 38.669617000000002,-102.045287999999999 38.615248999999999,-102.045210999999995 38.581608999999993,-102.045188999999979 38.558731999999992,-102.045222999999993 38.543796999999998,-102.045112000000003 38.523783999999999,-102.045261999999994 38.505531999999995,-102.045262999999991 38.505395,-102.045323999999979 38.453646999999997,-102.044936000000007 38.41968,-102.044441999999989 38.415801999999999,-102.044944 38.384419,-102.044612999999998 38.312323999999997,-102.044567999999998 38.268819,-102.044398 38.250014999999998,-102.044251000000003 38.141777999999995,-102.044535323623649 38.127675380028528,-102.044589000000002 38.125012999999996,-102.044540277332047 38.123262193231092,-102.044255000000007 38.113010999999993,-102.04462354493468 38.04908029653749,-102.044631007072184 38.047785855466316,-102.044644000000005 38.045532,-102.044620085883125 38.042021706570637,-102.044539342086111 38.030169526464491,-102.043844000000007 37.928101999999996,-102.043845000000005 37.926135000000002,-102.043218999999993 37.86792899999999,-102.043032999999994 37.824145999999999,-102.042952999999997 37.803534999999997,-102.042668000000006 37.788758,-102.042158 37.760164000000003,-102.041876000000002 37.723875,-102.041573999999997 37.680436,-102.041694000000007 37.665680999999999,-102.041581999999991 37.654494999999997,-102.041584999999998 37.644281999999997,-102.041618 37.607868000000003,-102.041779405839492 37.578691555295826,-102.041893999999999 37.557977,-102.041899 37.541186000000003,-102.04201599999999 37.535260999999998,-102.041786000000002 37.506065999999997,-102.041800999999992 37.469487999999998,-102.041754999999995 37.434854999999992,-102.041668999999999 37.434739999999998,-102.041675999999981 37.409897999999991,-102.041523999999995 37.375017999999997,-102.042089000000004 37.352818999999997,-102.041973999999996 37.352612999999998,-102.041816999999995 37.309489999999997,-102.041663999999997 37.29764999999999,-102.041962999999996 37.258164,-102.042001999999997 37.141744000000003,-102.042135000000002 37.125020999999997,-102.042091999999997 37.125020999999997,-102.041808999999986 37.111972999999999,-102.041983000000002 37.106551000000003,-102.04191999999999 37.035083,-102.041748999999996 37.034396999999998,-102.041921000000002 37.032178000000002,-102.04195 37.030805,-102.041951999999995 37.024741999999996,-102.042240000000007 36.993082999999999,-102.054502999999997 36.993108999999997,-102.184270999999995 36.993592999999997,-102.208315999999996 36.993729999999999,-102.260789000000003 36.994388,-102.270345681835295 36.994399933337462,-102.307593650497381 36.994446444520669,-102.355288000000002 36.994505999999994,-102.355367 36.994574999999998,-102.698142000000004 36.995148999999998,-102.742059999999981 36.997689,-102.759860000000003 37.000019000000002,-102.77856899999999 36.999242000000002,-102.806762000000006 37.000019000000002,-102.814616 37.000782999999998,-102.841988999999998 36.999597999999999,-102.979613 36.998548999999997,-102.985806999999994 36.998570999999998,-102.986975999999999 36.998524000000003,-103.002199000000005 37.000104,-103.086104969413952 37.000173865694038,-103.10540536532865 37.000189936488113,-103.155922000000004 37.000231999999997,-103.200631728472104 37.000060386509688,-103.327177769406262 36.999574653124313,-103.425678872433053 36.999196567220693,-103.733247000000006 36.998015999999993,-103.734363999999985 36.998041,-104.007854999999992 36.996239000000003,-104.215475488463966 36.994874432196589,-104.250535999999983 36.994644,-104.29757064295984 36.994053250381747,-104.338832999999994 36.993535,-104.355650525350313 36.993556531771581,-104.366447685535107 36.993570355564437,-104.399202882083287 36.993612292614962,-104.429769386650008 36.993651427444888,-104.480610316975273 36.993716519976395,-104.519256999999996 36.993765999999994,-104.624555999999998 36.994376999999993,-104.625545000000002 36.993599000000003,-104.645028999999994 36.993377999999993,-104.706112207267154 36.993426444188657,-104.732031000000006 36.993447000000003,-104.732119999999981 36.993484000000002,-104.839990412520109 36.993395592828207,-105.00055399999998 36.993264000000003,-105.029227999999989 36.99272899999999,-105.120800000000003 36.995427999999997,-105.155041964101514 36.995339147158163,-105.220613 36.995168999999997,-105.251295999999996 36.995604999999998,-105.419309999999996 36.995856000000003,-105.438102743613229 36.995968030697597,-105.442458999999999 36.995994000000003,-105.447254999999998 36.996016999999995,-105.465181999999999 36.995990999999997,-105.47087670692585 36.995978476706256,-105.508835999999988 36.99589499999999,-105.512484999999998 36.995776999999997,-105.533922000000004 36.995874999999998,-105.627469999999988 36.995679000000003,-105.664719999999988 36.995874,-105.716470999999999 36.995848999999993,-105.718407304549174 36.995846016149208,-105.996159000000006 36.995418,-105.997472000000002 36.995417000000003,-106.006633999999991 36.995342999999998,-106.099805867433119 36.994759106704976,-106.163971382218094 36.994356991615014,-106.201468999999989 36.994121999999997,-106.247704999999996 36.994266000000003,-106.248675000000006 36.99428799999999,-106.293278999999998 36.99389,-106.32542867882475 36.994109231664673,-106.343138999999979 36.994230000000002,-106.476277952851959 36.993839335051021,-106.500589000000005 36.993767999999996,-106.617159 36.992967,-106.617124999999987 36.993003999999999,-106.628652000000002 36.993175,-106.628732999999983 36.993160999999994,-106.661344 36.993243,-106.675625999999994 36.993122999999997,-106.750591 36.992460999999999,-106.782095289714647 36.992451749967366,-106.869795999999994 36.992425999999995,-106.877291999999983 37.00013899999999,-106.918886463342702 37.000128747161924,-106.95601836457638 37.000119594324254,-107.107262626744514 37.000082313330452,-107.255202723469637 37.000045846797775,-107.420912999999999 37.000004999999994,-107.422415013680663 37.000004989636103,-107.442181999144324 37.000004853243873,-107.481737001398656 37.00000458031429,-107.524086846417021 37.000004288100286,-107.600713640777798 37.000003759375268,-107.712477900838564 37.000002988201679,-107.855695499501934 37.000002000000002,-107.866308937617532 37.000001926767261,-107.869139908586362 37.000001907233546,-107.869180699306327 37.0000019069521,-108.000623000000004 37.000000999999997,-108.179187075278463 36.999293161624927,-108.187139540298872 36.999261637591275,-108.249358 36.999015,-108.250634999999988 36.999561,-108.288086000000007 36.999555,-108.288399999999996 36.999519999999997,-108.320464 36.999499,-108.320720999999992 36.99951,-108.379165570428881 36.999458977707043,-108.619688999999994 36.999248999999999,-108.620309000000006 36.999287000000002,-108.749269825405847 36.999139933822768,-108.954403999999997 36.998905999999998,-108.958867999999995 36.998913000000002,-109.045222999999993 36.999084000000003,-109.04516599999998 37.072741999999998,-109.045057999999997 37.074660999999999,-109.044995 37.086429000000003,-109.045188999999993 37.096270999999994,-109.045173000000005 37.109464000000003,-109.045202999999987 37.111957999999994,-109.045155999999992 37.112063999999997,-109.045995000000005 37.177278999999999,-109.045978000000005 37.201830999999999,-109.045801505106283 37.205070813598866,-109.045486999999994 37.210844000000002,-109.045559879533187 37.239775672002708,-109.04556019774752 37.239901996533845,-109.045583999999991 37.249350999999997,-109.046038999999993 37.249993000000003,-109.045898042273308 37.32693499054853,-109.045810000000003 37.374993000000003,-109.043799132325617 37.469028334242019,-109.043463783260819 37.484710450871816,-109.043424942780035 37.486526770085334,-109.043137000000002 37.499991999999999,-109.041915000000003 37.530653,-109.041865 37.530726,-109.041805999999994 37.604171,-109.042130999999998 37.617662000000003,-109.042089000000004 37.623795,-109.042269000000005 37.666066999999998,-109.041731999999996 37.711213999999998,-109.041759999999996 37.713182000000003,-109.041635999999997 37.740209999999998,-109.042097999999996 37.749989999999997,-109.042042148900066 37.754383999799849,-109.041460999999998 37.800105000000002,-109.041753999999997 37.83582599999999,-109.04172299999999 37.842050999999998,-109.041843999999998 37.872788,-109.041652818578953 37.881166902788557,-109.041058000000007 37.907235999999997,-109.043120999999985 37.97426,-109.042818999999994 37.997067999999999,-109.042819999999992 37.999301000000003,-109.041972403965843 38.131799166817459,-109.041836656974709 38.153019449536792,-109.041761999999991 38.16469,-109.054648 38.244920999999998,-109.060061999999988 38.275489,-109.059961999999999 38.49998699999999,-109.060253000000003 38.599327999999993,-109.059540999999996 38.719887999999997,-109.057388000000003 38.795455999999994,-109.057216044916757 38.799730849597076,-109.054188999999994 38.874983999999998,-109.05394299999999 38.904414000000003,-109.053797000000003 38.905283999999995,-109.053233000000006 38.942467,-109.053291999999985 38.942878,-109.052435999999986 38.999985000000002,-109.051587912503535 39.115734257770079,-109.051583515738272 39.116334340093104,-109.051580780636755 39.116707634089543,-109.051512000000002 39.126094999999999,-109.050764999999998 39.366677000000003,-109.051362999999981 39.497674000000004,-109.051040248333237 39.660472011844121,-109.050614999999993 39.874969999999998,-109.050872999999996 40.058914999999999,-109.050813000000005 40.059578999999992,-109.050944 40.180711999999993,-109.050972999999999 40.180849000000002,-109.050968715822648 40.22266241227041,-109.050945999999996 40.444367999999997,-109.050314 40.495092,-109.050697999999983 40.499963,-109.049954999999997 40.539901,-109.050073999999995 40.540357999999998,-109.050071964046666 40.540437104308737,-109.048044000000004 40.619230999999999,-109.048248999999998 40.653600999999995,-109.049087999999998 40.714562,-109.048455000000004 40.826081000000002,-109.050076000000004 41.000658999999999,-108.884137999999993 41.000093999999997,-108.631107999999998 41.00015599999999,-108.526667000000003 40.999608000000002,-108.500658999999999 41.000112,-108.250648999999996 41.000114000000004,-108.181227000000007 41.000454999999995,-108.089219003138552 41.001554139247368,-108.046538999999996 41.002063999999997,-107.923234122395939 41.0020370519008,-107.918420999999981 41.002035999999997))'));
-INSERT INTO geoapp_state (`name`, `poly`) VALUES ('Kansas', GeomFromText('POLYGON ((-102.051743999999999 40.003078000000002,-101.916696000000002 40.003141999999997,-101.904176000000007 40.003162000000003,-101.861740775252272 40.002907997451267,-101.841025000000002 40.002783999999991,-101.832160999999999 40.002932999999999,-101.807687 40.002797999999999,-101.804861999999986 40.002752,-101.783266423091504 40.002735966476642,-101.748492901329186 40.002710149056902,-101.627071 40.00262,-101.625809000000004 40.002710999999998,-101.579641080501318 40.002654627564297,-101.54227299999998 40.002608999999993,-101.417209 40.002423999999998,-101.411050023557621 40.002364583193085,-101.409952999999987 40.002353999999997,-101.387325211262052 40.00246006676732,-101.374325999999996 40.002520999999994,-101.342859000000004 40.002580000000002,-101.324035999999992 40.002695999999993,-101.293991000000005 40.002558999999998,-101.286555000000007 40.002558999999998,-101.248672999999997 40.002543000000003,-101.215033000000005 40.002555,-101.19221899999998 40.002490999999999,-101.186892990733696 40.002481867883319,-101.178804999999997 40.002468,-101.168704000000005 40.002547,-101.130906999999993 40.002426999999997,-101.104950380573442 40.002382874850099,-101.104950380567658 40.002382874850092,-101.060316999999998 40.002307000000002,-101.027686000000003 40.002255999999996,-100.962089380046322 40.00217532965339,-100.937427 40.002144999999999,-100.764559455237134 40.002296963384197,-100.758829999999989 40.002301999999993,-100.752183000000002 40.002127999999992,-100.7388309887763 40.002228385746484,-100.733295999999996 40.002270000000003,-100.729904000000005 40.002110999999999,-100.721127999999993 40.002068999999999,-100.683435000000003 40.002234,-100.660229999999984 40.002161999999998,-100.645444999999995 40.001882999999999,-100.626504856699498 40.001892789287538,-100.600944999999996 40.001905999999998,-100.594756999999987 40.001976999999997,-100.567238000000003 40.001888999999998,-100.551885999999996 40.001888999999998,-100.514429898999168 40.001844039098764,-100.511064999999988 40.00184,-100.487159000000005 40.001767,-100.477018 40.001752000000003,-100.475853999999998 40.001767999999998,-100.468772999999985 40.001724000000003,-100.447071999999991 40.001795,-100.439081000000002 40.001773999999997,-100.402449685831499 40.001800164690437,-100.390079999999998 40.001809000000002,-100.290126736823893 40.001691651381378,-100.231651999999997 40.001623000000002,-100.229478999999998 40.001692999999996,-100.215406000000002 40.001629,-100.196958999999993 40.001494,-100.19359 40.001573,-100.190323000000006 40.001586000000003,-100.188181 40.001541000000003,-100.177823000000004 40.001593,-99.990926000000002 40.001503,-99.986610999999996 40.001550000000002,-99.948166999999998 40.001812999999999,-99.944417 40.001584,-99.930432999999979 40.001516000000002,-99.906657999999993 40.001511999999998,-99.850154757615712 40.001444140609848,-99.813400999999999 40.001399999999997,-99.775639999999981 40.001646999999998,-99.772120999999984 40.001804,-99.764213999999996 40.001550999999999,-99.756834999999995 40.001342,-99.746628 40.001820000000002,-99.737774855821357 40.001824224692157,-99.731959000000003 40.001826999999992,-99.719639 40.001807999999997,-99.628345999999993 40.001866,-99.625979999999984 40.001865000000002,-99.515340365578794 40.002008435606839,-99.501791999999995 40.002026,-99.498998999999984 40.00195699999999,-99.497659999999982 40.001911999999997,-99.493464999999986 40.001936999999998,-99.480727999999999 40.001942,-99.423564999999996 40.002270000000003,-99.412644999999998 40.001867999999995,-99.403389000000004 40.001969000000003,-99.366747146128873 40.001962496644857,-99.290702999999979 40.001949000000003,-99.286655999999994 40.002017000000002,-99.282966999999999 40.001879000000002,-99.254012000000003 40.002074,-99.25036999999999 40.00195699999999,-99.216375999999997 40.002015999999998,-99.197591999999986 40.002032999999997,-99.188905000000005 40.002023,-99.186961999999994 40.001976999999997,-99.178965000000005 40.001976999999997,-99.169815999999997 40.001925,-99.123032999999992 40.002164999999998,-99.113510000000005 40.002192999999998,-99.085596999999993 40.002132999999994,-99.067047050731574 40.00217023690761,-99.020337999999995 40.00226399999999,-99.018700999999993 40.002333,-98.992135000000005 40.002192,-98.972286999999994 40.002245000000002,-98.971721000000002 40.002268,-98.961009000000004 40.002316999999998,-98.96091899999999 40.002271,-98.953888072580213 40.002253239016738,-98.934791999999987 40.002204999999996,-98.8435956659672 40.002348607685946,-98.842134005327992 40.002350909376077,-98.834455999999989 40.002363000000003,-98.820589999999982 40.002319,-98.777203 40.002358999999998,-98.774940999999998 40.002336,-98.729330606936671 40.002229113826232,-98.726294999999993 40.002222000000003,-98.710403999999997 40.002180000000003,-98.693095999999997 40.002372999999999,-98.691443000000007 40.002504999999999,-98.690286999999998 40.002547999999997,-98.672819000000004 40.002364,-98.669723999999988 40.002409999999998,-98.653832999999992 40.002268999999998,-98.652494000000004 40.002245000000002,-98.640709999999984 40.002493,-98.616372379820518 40.002409030470169,-98.613754999999998 40.002400000000002,-98.593342000000007 40.002475999999994,-98.575219000000004 40.002479999999991,-98.560578000000007 40.002274,-98.543186000000006 40.002285,-98.523053000000004 40.002336,-98.506634585466017 40.002329436673158,-98.504454999999979 40.002328565375151,-98.50084801790743 40.002327123469641,-98.490532999999999 40.002322999999997,-98.441997554675297 40.002366263566756,-98.391848301995964 40.002410965650498,-98.274015000000006 40.002516,-98.268218000000005 40.002490000000002,-98.25000799999998 40.002307000000002,-98.213290432425865 40.002506421375415,-98.193483 40.002614,-98.179315000000003 40.002482999999998,-98.172269 40.002437999999991,-98.156873151934732 40.002445128178877,-98.142031000000003 40.002451999999998,-98.099659000000003 40.002226999999998,-98.076034000000007 40.002300999999996,-98.068701000000004 40.002355,-98.050056999999981 40.002277999999997,-98.047469000000007 40.002186000000002,-98.042767978165202 40.002191261754177,-98.014411999999979 40.002223,-98.010157000000007 40.002153,-97.972185999999994 40.002113999999999,-97.931810999999996 40.002049999999997,-97.876261 40.002102,-97.85745 40.002065000000002,-97.838378999999989 40.001909999999995,-97.821597999999994 40.002003999999992,-97.819426000000007 40.001957999999995,-97.777154999999993 40.002167,-97.770775999999998 40.001976999999997,-97.769204000000002 40.001995,-97.767746000000002 40.001994000000003,-97.714825952022949 40.001974503868432,-97.706952472912022 40.001971603221314,-97.701160424072398 40.001969469388285,-97.61370959051284 40.001937251863488,-97.595964207410262 40.001930714334961,-97.593671575073259 40.001929869712491,-97.51530799999999 40.001900999999997,-97.511381 40.001899000000002,-97.510264000000006 40.001835,-97.48896951184885 40.0019310946697,-97.481234094494141 40.001966001936331,-97.463284999999999 40.00204699999999,-97.444661999999994 40.001957999999995,-97.425443 40.002048000000002,-97.417825999999991 40.002023999999999,-97.415833000000006 40.002000999999993,-97.369102999999996 40.00206,-97.350896000000006 40.001930000000002,-97.350272000000004 40.001975999999999,-97.256541388870858 40.001563097676062,-97.24516899999999 40.001513000000003,-97.245080000000002 40.001466999999998,-97.202309999999997 40.00144199999999,-97.200190000000006 40.001548999999997,-97.181775000000002 40.001550000000002,-97.165136038800085 40.001526729909067,-97.164288093539042 40.001525544031956,-97.157705785150654 40.001516338474417,-97.144150390621661 40.001497380844818,-97.142447999999987 40.001494999999998,-97.137865999999988 40.001814000000003,-97.049662999999995 40.001322999999999,-97.030802999999992 40.001342,-97.009164999999996 40.001463,-96.918187714380807 40.001505032225388,-96.916093000000004 40.001505999999999,-96.880459000000002 40.001448000000003,-96.878253 40.001466,-96.875056999999998 40.001448000000003,-96.873812 40.001449999999998,-96.868892342573133 40.001444286089438,-96.805301797100199 40.001370429180717,-96.693246065483095 40.001240282633297,-96.622400999999996 40.001157999999997,-96.610348999999999 40.000881,-96.604883999999984 40.000891000000003,-96.581788013355691 40.000963078853125,-96.580851999999993 40.000965999999998,-96.570853999999997 40.001090999999995,-96.557862999999998 40.000968,-96.538977000000003 40.000850999999997,-96.527110999999991 40.001030999999998,-96.469944999999996 40.000965999999998,-96.467535999999996 40.001035000000002,-96.463639999999998 40.000967000000003,-96.354812913341547 40.000735780492882,-96.350953725714731 40.00072758106856,-96.341811057717251 40.000708156095854,-96.304554999999993 40.000629000000004,-96.301066000000006 40.000632000000003,-96.239171999999996 40.000691000000003,-96.223838999999998 40.000729,-96.220170999999993 40.00072,-96.154364999999984 40.000495,-96.154246 40.00045,-96.147166999999982 40.000478999999999,-96.125936999999979 40.000432000000004,-96.125788 40.000467,-96.089781000000002 40.000518999999997,-96.081394999999986 40.000602999999998,-96.051691000000005 40.000726999999998,-96.02409 40.000718999999997,-96.014716997898134 40.000662392993569,-96.010677999999999 40.000638000000002,-95.995389500007406 40.000603953777215,-95.958139000000003 40.000520999999999,-95.901560435593936 40.000482839492363,-95.882524000000004 40.00047,-95.788023999999993 40.000452000000003,-95.784575000000004 40.000463000000003,-95.672891827756033 40.000336669594915,-95.658762261555324 40.000320686938032,-95.63965170807073 40.000299070038061,-95.565216789143676 40.000214872989645,-95.463103327781397 40.00009936736172,-95.455130658279359 40.000090349077695,-95.452048066669519 40.000086862204618,-95.438655850967621 40.000071713601649,-95.436011808705814 40.000068722793607,-95.426269559489981 40.00005770284973,-95.42148745056565 40.000052293567869,-95.41484447973599 40.000044779372317,-95.375257000000005 40.0,-95.339895999999982 39.999999000000003,-95.326448603970363 39.999998574530281,-95.30829 39.999997999999998,-95.308403999999996 39.993758,-95.307779999999994 39.990617999999998,-95.307111000000006 39.989114,-95.302506999999991 39.984357000000003,-95.289715 39.977705999999998,-95.274756999999994 39.972115000000002,-95.269885999999985 39.969396000000003,-95.261854 39.960617999999997,-95.257651999999993 39.954886000000002,-95.250253999999998 39.948644000000002,-95.241382999999999 39.944949,-95.236761 39.943930999999999,-95.231114000000005 39.943784,-95.220212000000004 39.944432999999997,-95.216440000000006 39.943953,-95.213736999999995 39.943205999999996,-95.204427999999993 39.938949,-95.201277000000005 39.934193999999998,-95.200689999999994 39.928154999999997,-95.20201 39.922438,-95.205744999999993 39.915168999999999,-95.206326000000004 39.912120999999999,-95.206195999999991 39.909557,-95.205732999999981 39.908275000000003,-95.202631127107011 39.904826841138963,-95.201935000000006 39.904052999999998,-95.19982446963148 39.902956959499498,-95.199773390195176 39.902930432929807,-95.199730682369619 39.902908253904485,-95.199347000000003 39.902709000000002,-95.193815999999984 39.900689999999997,-95.189565000000002 39.899959000000003,-95.179452999999995 39.900061999999991,-95.172296000000003 39.902025999999999,-95.159833999999989 39.906984,-95.156023999999988 39.907243,-95.153185481864639 39.906665666721331,-95.151701132402337 39.906363761184394,-95.149656999999991 39.905947999999995,-95.148243978290679 39.905255611516672,-95.146055000000004 39.904183000000003,-95.143801999999994 39.901917999999995,-95.142562999999981 39.897992000000002,-95.142444999999995 39.895419999999994,-95.143403000000006 39.889355999999992,-95.142718000000002 39.885888999999992,-95.140601000000004 39.88168799999999,-95.137091999999996 39.878350999999995,-95.134747000000004 39.876852,-95.128165999999993 39.874164999999998,-95.105912000000004 39.869163999999998,-95.090958483530287 39.863446088154532,-95.090158000000002 39.86314,-95.085003 39.861882999999999,-95.081534000000005 39.861718000000003,-95.079786043666886 39.861878094210859,-95.052535000000006 39.864373999999998,-95.042141999999998 39.864804999999997,-95.037767000000002 39.865541999999998,-95.034318031759739 39.867229060943565,-95.032053000000005 39.868336999999997,-95.031002514960235 39.869148692103728,-95.027930999999981 39.871521999999999,-95.025918959417425 39.87568321107333,-95.025422000000006 39.876711,-95.025119000000004 39.878833,-95.02586205726584 39.885935119809076,-95.025947000000002 39.886747,-95.025771840138887 39.887478608302466,-95.025475064075451 39.888718183571669,-95.025239999999997 39.889699999999998,-95.024388999999999 39.891202,-95.021897459019584 39.893924778577606,-95.019088516216428 39.896994416745422,-95.018742999999986 39.89737199999999,-95.018224596337973 39.897611313155366,-95.013151999999991 39.899952999999996,-95.010684182587667 39.900289758615472,-95.008439999999993 39.900596,-95.003818999999993 39.900400999999995,-94.990284000000003 39.897010000000002,-94.989784913598129 39.896958718834505,-94.987823822157509 39.896757216540813,-94.986975 39.89667,-94.985308455245701 39.896814869812808,-94.979390624873346 39.897329296428744,-94.977748999999989 39.897472,-94.963345000000004 39.901136,-94.959276000000003 39.901671,-94.958440298615102 39.901548064610132,-94.95153999999998 39.900532999999996,-94.943866999999983 39.898130000000002,-94.935306395585215 39.893779379194363,-94.934493000000003 39.893366,-94.929574000000002 39.888753999999992,-94.927897000000002 39.88611199999999,-94.927358999999996 39.883966,-94.927251999999996 39.880257999999991,-94.928466 39.876344000000003,-94.931084167287821 39.873075003673321,-94.931462999999994 39.872602,-94.938790999999995 39.866954,-94.940742999999998 39.864409999999999,-94.942407000000003 39.861065999999994,-94.942566999999983 39.856601999999995,-94.939767000000003 39.851930000000003,-94.937655000000007 39.849786000000002,-94.926149999999993 39.841321999999998,-94.916917999999995 39.836137999999998,-94.909941999999987 39.834426,-94.903156999999979 39.833849999999998,-94.892677000000006 39.834377999999994,-94.889493000000002 39.834026,-94.886932999999999 39.833098,-94.881012999999996 39.828921999999991,-94.878676999999996 39.826521999999997,-94.877043999999998 39.823754,-94.876543999999996 39.820594,-94.875944000000004 39.813293999999999,-94.87632679569893 39.807169268817198,-94.876344000000003 39.806894,-94.876705972386588 39.80614007495069,-94.880932 39.797338000000003,-94.884084 39.794234000000003,-94.890292000000002 39.791626,-94.892965000000004 39.791097999999991,-94.912908274541266 39.790276806342419,-94.92474489359239 39.789789416146199,-94.925605000000004 39.789753999999995,-94.925940683661906 39.789631963361245,-94.927258709273417 39.789152799691166,-94.929653999999999 39.788281999999995,-94.93035270914757 39.787827111232048,-94.930442023078356 39.787768964141691,-94.930979872832452 39.787418801541357,-94.932726000000002 39.786282,-94.932913349551853 39.786043884763131,-94.935059195246907 39.783316584105528,-94.935205999999994 39.78313,-94.935782000000003 39.778905999999999,-94.935301999999993 39.77561,-94.935036741896766 39.775108050050804,-94.934624304242575 39.774327591105198,-94.934262000000004 39.773642000000002,-94.929652999999988 39.769098,-94.929421387607832 39.768921584953624,-94.928626586797606 39.768316199289764,-94.926229000000006 39.76648999999999,-94.923991330811134 39.765173947104167,-94.916788999999994 39.760937999999996,-94.912293000000005 39.759337999999993,-94.906244 39.759417999999997,-94.905921454535701 39.759501730763866,-94.900921941190049 39.760799572828766,-94.899156000000005 39.761257999999998,-94.899025621234756 39.761323457651685,-94.895268000000002 39.76321,-94.895041000000006 39.763350000000003,-94.894070999999997 39.763945999999997,-94.893918999999997 39.76404,-94.893724000000006 39.764159999999997,-94.893646000000004 39.764208000000004,-94.883923999999993 39.770186000000002,-94.881460000000004 39.771258000000003,-94.881422 39.771258000000003,-94.874706321154179 39.772392308082928,-94.871144 39.772993999999997,-94.869643999999994 39.772894,-94.867142999999999 39.771693999999997,-94.865243000000007 39.770094,-94.863142999999994 39.767294,-94.860742999999999 39.763094000000002,-94.859442999999999 39.753694000000003,-94.860369889104035 39.749534984666809,-94.860371 39.74953,-94.862942999999987 39.742994000000003,-94.870142999999999 39.734594,-94.875642999999997 39.730494,-94.884142999999995 39.726793999999998,-94.891743999999989 39.724893999999999,-94.899315999999999 39.724041999999997,-94.900553640444031 39.724102079633198,-94.901582061073228 39.724152002964722,-94.902612000000005 39.724201999999998,-94.906055088082866 39.724933471502588,-94.907014260749904 39.725137244236571,-94.907785666538786 39.725301126582274,-94.910067999999995 39.725785999999999,-94.911087398893699 39.726157408899255,-94.918323999999998 39.728793999999994,-94.93000499999998 39.735370000000003,-94.939221000000003 39.74157799999999,-94.944740999999979 39.744377,-94.948658825773634 39.745572502168315,-94.948680784417533 39.745579202723142,-94.948725999999994 39.745593,-94.952629999999999 39.745961,-94.955286 39.745688999999999,-94.960086000000004 39.743065,-94.963779819772341 39.740240978767318,-94.964692434782606 39.73954326086956,-94.965317999999982 39.739064999999989,-94.965565209393333 39.738728671232884,-94.970224508542714 39.732389687437191,-94.970421999999985 39.732120999999999,-94.971205999999981 39.729304999999997,-94.971078000000006 39.723146,-94.968452999999997 39.707402000000002,-94.968980999999999 39.692954,-94.969909 39.689050000000002,-94.971316999999999 39.686410000000002,-94.976096392737759 39.68160006801152,-94.976325000000003 39.68137,-94.981556999999995 39.678634000000002,-94.984149000000002 39.677849999999992,-94.986445080691666 39.677537608069159,-94.990587390516794 39.676974028501114,-94.993556999999996 39.676569999999998,-94.998766892420107 39.676509388876212,-95.001379 39.676479,-95.004602740773237 39.676177881356345,-95.008105239221649 39.675850724907868,-95.009022999999999 39.675764999999998,-95.010225986948086 39.675477408241932,-95.013209713780839 39.674764104372102,-95.015309999999985 39.674261999999999,-95.018317999999994 39.672868999999999,-95.021521942351953 39.670631293568427,-95.024595000000005 39.668484999999997,-95.027643999999995 39.665453999999997,-95.037464 39.652904999999997,-95.039049000000006 39.649639,-95.044554000000005 39.644370000000002,-95.049518000000006 39.637875999999999,-95.053366999999994 39.630347,-95.054924999999997 39.624994999999991,-95.055024819926729 39.623527163368095,-95.055152000000007 39.621656999999992,-95.054958456554544 39.620961328886679,-95.053131423647116 39.614394255464305,-95.053011999999981 39.613965,-95.052555891387243 39.613278556984888,-95.047910999999999 39.606287999999999,-95.046445000000006 39.601605999999997,-95.046361000000005 39.599556999999997,-95.047165000000007 39.595117000000002,-95.049277000000004 39.589582999999998,-95.054804000000004 39.582487999999998,-95.056897000000006 39.580567000000002,-95.059518999999995 39.579132,-95.064519000000004 39.577114999999999,-95.066275551338904 39.576786470694117,-95.068266439890465 39.576414113098046,-95.069315000000003 39.576217999999997,-95.072159999999982 39.576121999999991,-95.075842551355763 39.576644128527029,-95.076688000000004 39.576763999999997,-95.088569515113861 39.580713698327401,-95.089515000000006 39.581028000000003,-95.09068217809525 39.58095107619048,-95.095736000000002 39.580618,-95.099095000000005 39.579690999999997,-95.100375015351446 39.579100080742663,-95.10182940536555 39.578428661399109,-95.103228 39.577782999999997,-95.106109962410699 39.575487768136732,-95.106244982404746 39.575380236480051,-95.106274453941239 39.575356764970024,-95.106406000000007 39.575251999999999,-95.107454000000004 39.573842999999997,-95.108931052511622 39.56997896968771,-95.109155613535791 39.569391508783276,-95.112830712234896 39.559777298955126,-95.112877844119652 39.559653999999995,-95.113077000000004 39.559132999999996,-95.113262990573148 39.557121201967142,-95.113516735173974 39.554376531201555,-95.113557 39.553940999999995,-95.113330390574859 39.553319942050457,-95.109694540741444 39.543355336910984,-95.109303999999995 39.542284999999993,-95.106595999999996 39.537657000000003,-95.106363136618171 39.537386330858773,-95.106309238275287 39.537323682029822,-95.102887999999993 39.533346999999999,-95.096713422649174 39.527826015970483,-95.095319522838992 39.526579663685382,-95.092703999999998 39.524241000000004,-95.082713999999996 39.516711999999998,-95.077440999999993 39.513551999999997,-95.059460999999985 39.506143000000002,-95.05637999999999 39.503971999999997,-95.052176999999986 39.499995999999996,-95.050551999999996 39.497514000000002,-95.049844999999991 39.494414999999989,-95.048370000000006 39.480420000000002,-95.047133000000002 39.474970999999996,-95.045715999999999 39.472459,-95.040779999999998 39.466386999999997,-95.03749999999998 39.463689000000002,-95.033407999999994 39.460875999999992,-95.028497999999999 39.458286999999999,-95.015825000000007 39.452809000000002,-94.995767999999998 39.448174000000002,-94.990172 39.446192000000003,-94.982144000000005 39.440551999999997,-94.978797999999998 39.436241000000003,-94.976606000000004 39.426701,-94.972952000000006 39.421705000000003,-94.968547467194298 39.418879728230785,-94.966981164652054 39.417875029083376,-94.966065999999998 39.417287999999999,-94.965430539155946 39.417093446959996,-94.954817000000006 39.413843999999997,-94.951209000000006 39.411706999999993,-94.947863999999996 39.408603999999997,-94.946292999999983 39.405645999999997,-94.946662000000003 39.399717000000003,-94.946226999999993 39.395648,-94.945577 39.393850999999998,-94.942038999999994 39.389499,-94.939696999999995 39.387949999999996,-94.938205659338905 39.38711651736979,-94.938199994953891 39.387113351650086,-94.938198708293527 39.387112632559479,-94.937157999999982 39.386530999999998,-94.933651999999995 39.385545999999998,-94.932170703908099 39.385397898493565,-94.923109999999994 39.384492000000002,-94.919224999999997 39.385173999999999,-94.915858999999998 39.386347999999998,-94.909581000000003 39.388865000000003,-94.901822999999993 39.392797999999999,-94.896448416922993 39.39340032396553,-94.894979000000006 39.393565000000002,-94.891845000000004 39.393312999999999,-94.888971999999995 39.392431999999999,-94.888058227506249 39.391822741147728,-94.885025999999996 39.389800999999999,-94.880978999999996 39.383899,-94.879281000000006 39.37977999999999,-94.879087999999996 39.375702999999994,-94.881359999999987 39.370382999999997,-94.885216 39.366911000000002,-94.890928000000002 39.364030999999997,-94.896832000000003 39.363135,-94.899023999999997 39.362431,-94.902496999999997 39.360382999999999,-94.90716104958679 39.35683832231404,-94.907297 39.356735,-94.907510470967722 39.356484333333356,-94.909408999999997 39.354254999999995,-94.910016999999996 39.352542999999997,-94.91007929967077 39.352122876579188,-94.910166635146069 39.351533921963672,-94.910234386079424 39.351077037464393,-94.910640999999998 39.348334999999999,-94.910055514481613 39.342727430625168,-94.908683540921714 39.329587162119807,-94.908064999999993 39.323663000000003,-94.906599414484603 39.317389801180319,-94.905982468129508 39.31474906332776,-94.905548856768945 39.312893060899633,-94.905328999999995 39.311951999999998,-94.904604536115073 39.31007473956825,-94.903592654247163 39.307452709910535,-94.903137 39.306272,-94.902341179156608 39.304705098857582,-94.900693838394318 39.301461629999167,-94.900362755471093 39.300809756886117,-94.900048999999996 39.300192000000003,-94.895217000000002 39.29420799999999,-94.889432625546704 39.288730528394183,-94.887056 39.286479999999997,-94.882576 39.283327999999997,-94.881425972827699 39.282735692772164,-94.879585687759075 39.281787876778168,-94.878319999999988 39.281135999999996,-94.869470269042495 39.278423959123423,-94.867567999999991 39.277841000000002,-94.866576416802303 39.277461598502107,-94.857072000000002 39.273825000000002,-94.850573678793964 39.270595179638669,-94.850470600187833 39.270543947117169,-94.846320000000006 39.268481,-94.844203868589133 39.266965084952687,-94.840994595225254 39.264666085108807,-94.837855000000005 39.262416999999999,-94.836102527271095 39.260730409704507,-94.834879550067882 39.259553409087879,-94.832501320107042 39.257264586268427,-94.832102355305352 39.256880620143498,-94.831470999999993 39.256273,-94.827487000000005 39.249888999999996,-94.826571473591798 39.245793223963304,-94.825663000000006 39.241728999999999,-94.826110999999983 39.238289000000002,-94.826405091238243 39.237538367125239,-94.827108391663188 39.2357432765168,-94.827791000000005 39.234000999999999,-94.828117769197533 39.233533772937683,-94.83244435695299 39.227347452739551,-94.834698551534771 39.224124319346686,-94.834896 39.223841999999998,-94.834917496024659 39.223414229109203,-94.835039139715306 39.220993519665384,-94.835046603087861 39.220844998551456,-94.835055999999994 39.220658,-94.833551999999997 39.217793999999998,-94.831678999999994 39.215938,-94.823791 39.209873999999999,-94.820687000000007 39.208626000000002,-94.811662999999996 39.206594000000003,-94.800359054554335 39.206051410618606,-94.799662999999995 39.206018,-94.798924306591658 39.206116812235138,-94.793913945984244 39.206787029303406,-94.788135068391796 39.207560047994349,-94.787343000000007 39.207666000000003,-94.783838000000003 39.207154000000003,-94.781518000000005 39.206145999999997,-94.780294078498926 39.205273290755756,-94.778971577769184 39.204330290235411,-94.777838000000003 39.203522,-94.775537999999997 39.200602000000003,-94.770897097034492 39.191141697801093,-94.770859400196969 39.191064854247678,-94.770337999999995 39.190002,-94.763137999999998 39.179903000000003,-94.75233799999998 39.173202999999994,-94.74193799999999 39.170203,-94.736536999999998 39.169203000000003,-94.723636999999997 39.169002999999989,-94.714136999999994 39.170403,-94.696331999999998 39.178562999999997,-94.687235999999999 39.183503000000002,-94.680335999999983 39.184303,-94.669134999999997 39.182003000000002,-94.663835000000006 39.179102999999998,-94.660314999999997 39.168050999999991,-94.662434999999988 39.157602999999995,-94.650734999999983 39.154102999999999,-94.640034999999997 39.153102999999994,-94.623934000000006 39.156602999999997,-94.615834000000007 39.160003000000003,-94.608834000000002 39.160502999999999,-94.601732999999996 39.15960299999999,-94.596033000000006 39.157702999999998,-94.591932999999997 39.155003,-94.589933000000002 39.140402999999999,-94.592533000000003 39.135902999999992,-94.600433999999993 39.128503000000002,-94.605733999999998 39.122204000000004,-94.607033999999999 39.119404000000003,-94.607354 39.113444,-94.607234000000005 39.089604,-94.607333999999994 39.081703999999995,-94.607275518421304 39.072346947409343,-94.607234000000005 39.065703999999997,-94.607342812841125 39.057404745686583,-94.60738379566331 39.05427894858029,-94.607437239929951 39.050202705779334,-94.607518499034526 39.044004999999999,-94.607559479691474 39.040879368039988,-94.607612854426819 39.036808428453341,-94.60764748233197 39.034167326647299,-94.607654028188094 39.033668068249817,-94.60769507925167 39.030537066312085,-94.607898722639391 39.015005000000002,-94.607914652765047 39.013789994834404,-94.607991843462372 39.007902590176151,-94.608087526605189 39.000604749887366,-94.608092759229436 39.000205652880325,-94.608190956218394 38.992716079262479,-94.608212339138063 38.991085184540211,-94.608264438806202 38.98711149548862,-94.608279957450691 38.985927874365181,-94.608301211867541 38.984306780669819,-94.608333999999999 38.981805999999999,-94.608294286905348 38.97390309416464,-94.608273484679671 38.969763451253407,-94.608249262127771 38.964943163424849,-94.608207879518076 38.956708024096379,-94.608134000000007 38.942005999999999,-94.608134000000007 38.940005999999997,-94.607866 38.937398000000002,-94.607977999999989 38.936869999999992,-94.608002838442587 38.912906322207348,-94.608006216770249 38.909646973100827,-94.608010407202343 38.90560412040071,-94.608022064178897 38.894357681354862,-94.60802273861259 38.893706999999999,-94.608033000000006 38.883806999999997,-94.608033000000006 38.869207000000003,-94.608033000000006 38.868107000000002,-94.607992999999993 38.867271000000002,-94.608033000000006 38.861207,-94.608033000000006 38.855007,-94.608033000000006 38.850107,-94.608033000000006 38.847206999999997,-94.607624999999999 38.827559999999991,-94.607668973053535 38.825816299300072,-94.608041 38.811064000000002,-94.608617609754887 38.781926100280451,-94.609398999999996 38.742440000000002,-94.60945599999998 38.74069999999999,-94.609507757106428 38.73815999467709,-94.609625656590424 38.7323740198146,-94.610322172686637 38.698192151600097,-94.61071084056907 38.679118085101081,-94.61073851283922 38.677760054904219,-94.611602000000005 38.635384000000002,-94.611464999999995 38.625011,-94.611857999999998 38.620485000000002,-94.611908 38.609271999999997,-94.611905562149673 38.605890005062435,-94.611886999999996 38.580139000000003,-94.611902 38.580109999999998,-94.612176000000005 38.576546,-94.612156999999996 38.549816999999997,-94.612272000000004 38.547916999999998,-94.612464742072774 38.518760616499996,-94.612644000000003 38.491644,-94.612725999999995 38.484366999999999,-94.612696 38.483153999999999,-94.612865999999997 38.477570999999998,-94.613365000000002 38.403421999999999,-94.613264999999998 38.392426,-94.613275404637193 38.388718047420433,-94.613328999999993 38.369617999999996,-94.613311999999993 38.364407,-94.613085455228386 38.3436360393057,-94.612999999999985 38.335800999999996,-94.612825 38.324387000000002,-94.612787999999995 38.320141999999997,-94.612673 38.314832000000003,-94.612673 38.302526999999998,-94.612689368276676 38.301464114946214,-94.612843999999996 38.291422999999995,-94.612848999999997 38.289914000000003,-94.612707829046002 38.272362044447966,-94.612691999999996 38.270394000000003,-94.612613999999994 38.237766,-94.612634999999997 38.226987,-94.612658999999994 38.219251,-94.61265866950464 38.21872154645218,-94.612657999999982 38.217649000000002,-94.612821999999994 38.203918000000002,-94.612848 38.200713999999998,-94.613073 38.190551999999997,-94.61341774677895 38.168183959706163,-94.613422 38.16790799999999,-94.613748 38.160632999999997,-94.613855999999998 38.149768999999999,-94.613889466360249 38.136312911169284,-94.613919497343275 38.124238112111762,-94.614061000000007 38.067343,-94.614088999999993 38.065900999999997,-94.614054999999993 38.060088,-94.613980999999995 38.036949,-94.614211999999981 37.992462000000003,-94.614464999999996 37.987798999999995,-94.614511123427164 37.979395512107736,-94.614514360688489 37.978805697169918,-94.614557000000005 37.971036999999995,-94.614561999999992 37.951517000000003,-94.614593999999997 37.949977999999994,-94.614611999999994 37.944361999999998,-94.614754000000005 37.940769000000003,-94.614834999999999 37.936700000000002,-94.614778 37.934199999999997,-94.615181000000007 37.915944000000003,-94.615392999999983 37.906391999999997,-94.61546899999999 37.901775,-94.615706000000003 37.886842999999999,-94.615921 37.878331000000003,-94.615834000000007 37.872509999999998,-94.616 37.863126,-94.616282760205394 37.851281931678621,-94.616426000000004 37.845281999999997,-94.616433230053673 37.842955730230052,-94.61645 37.837560000000003,-94.616861999999998 37.819456000000002,-94.6176681324215 37.775831003788085,-94.617720999999989 37.77297,-94.617737774720197 37.764628336555312,-94.617744979193901 37.761045725680312,-94.617807999999997 37.729706999999998,-94.617975 37.722175999999997,-94.61780499999999 37.690178000000003,-94.617650999999995 37.687671000000002,-94.617687000000004 37.686652999999993,-94.617885 37.682214000000002,-94.617733999999999 37.673127,-94.617576 37.653671000000003,-94.617517909436387 37.643988652624088,-94.61747699999998 37.637169999999998,-94.617472819127315 37.636539916507168,-94.6173 37.610495,-94.617428000000004 37.609521999999998,-94.617283 37.571896000000002,-94.617315000000005 37.571498999999996,-94.617080999999999 37.567013000000003,-94.61711240153133 37.563155381499406,-94.617159999999984 37.557307999999999,-94.617186000000004 37.553485000000002,-94.617167532949537 37.551779056391354,-94.616988484457494 37.535238968895172,-94.616907999999981 37.527804000000003,-94.616788999999997 37.521509999999999,-94.616880369657522 37.506771761864755,-94.617022999999989 37.483764999999998,-94.617182999999997 37.469664999999999,-94.617180000000005 37.465203000000002,-94.617221999999998 37.460476,-94.617204999999984 37.46037299999999,-94.617200999999994 37.454788,-94.617131999999998 37.439818000000002,-94.617265000000003 37.425535999999994,-94.617510999999993 37.410908999999997,-94.617557000000005 37.396374999999999,-94.61759158917468 37.381725975861251,-94.617625000000004 37.367576,-94.617626 37.367444999999989,-94.617536999999999 37.364355000000003,-94.617636000000005 37.338417,-94.617694999999998 37.336841999999997,-94.617648000000003 37.323588999999998,-94.61807499999999 37.240436000000003,-94.618157999999994 37.237596999999994,-94.618122999999997 37.229334,-94.61815 37.228121000000002,-94.618218999999996 37.207771999999999,-94.618305000000007 37.207337000000003,-94.618319 37.188774000000002,-94.618504999999985 37.181184000000002,-94.618472999999994 37.174782,-94.618351000000004 37.160210999999997,-94.618071999999998 37.132345,-94.61807499999999 37.129755000000003,-94.61816441512984 37.118929895303054,-94.618212 37.113168999999992,-94.618150999999997 37.103968000000002,-94.618059000000002 37.096676000000002,-94.618088 37.093670999999993,-94.618089999999995 37.093494,-94.618085255103864 37.089305442941992,-94.618082 37.086432000000002,-94.61811999999999 37.085934000000002,-94.617981999999998 37.075077,-94.617954311863897 37.070346986543974,-94.617947706480578 37.069218577181687,-94.617910161110728 37.062804634983031,-94.617893975984089 37.060039701061122,-94.617874999999998 37.056798,-94.617877538275181 37.056339390079508,-94.617964999999998 37.040537,-94.617972200190749 37.032971759572447,-94.617994999999979 37.009015999999995,-94.618027702303792 37.004829720380044,-94.618080000000006 36.998134999999998,-94.625223999999989 36.998671999999999,-94.699735000000004 36.998804999999997,-94.701796999999999 36.998814000000003,-94.711286363060864 36.99879670415919,-94.712770000000006 36.99879399999999,-94.722629184733563 36.998741903378082,-94.732834603466486 36.998687977231512,-94.736330645670293 36.998669503899912,-94.737183000000002 36.998665000000003,-94.739323999999996 36.998686999999997,-94.745992043692311 36.998700535427304,-94.749560781475736 36.99870777958963,-94.749834600019099 36.998708335412474,-94.777257000000006 36.998764,-94.831280000000007 36.998812,-94.831539962039543 36.998812565955092,-94.840925999999996 36.998832999999998,-94.846637705524785 36.998860673615503,-94.849800999999999 36.998875999999996,-94.853196999999994 36.998874,-94.896852168601683 36.999075231107383,-94.904605402657381 36.99911097010289,-94.9407882710602 36.999277757196154,-94.995293000000004 36.999528999999995,-95.007620000000003 36.999513999999998,-95.011432999999997 36.999535000000002,-95.030323999999993 36.999516999999997,-95.037857000000002 36.999496999999998,-95.049498999999983 36.999580000000002,-95.073509 36.999509000000003,-95.1405498515593 36.999533623834409,-95.155186999999998 36.999538999999999,-95.155372 36.999540000000003,-95.159067907556633 36.999536629205572,-95.177300999999986 36.999519999999997,-95.195307 36.999564999999997,-95.267905305061163 36.999446910377756,-95.285983101167361 36.999417504731007,-95.322564999999997 36.999357999999994,-95.328057999999999 36.999364999999997,-95.328326999999987 36.999366000000002,-95.331209999999999 36.999380000000002,-95.377252424658963 36.999296311678272,-95.381753803085687 36.999288129815376,-95.407683000000006 36.999240999999998,-95.511578 36.999234999999999,-95.522414951940931 36.999281058114107,-95.534401000000003 36.999332000000003,-95.573598000000004 36.999309999999994,-95.601517312742303 36.999317968253862,-95.612139999999997 36.999321000000002,-95.615933999999996 36.999364999999997,-95.621011943860609 36.999361983160732,-95.624350000000007 36.999360000000003,-95.630078999999995 36.999319999999997,-95.638122589416028 36.999320470082949,-95.664300999999995 36.999321999999999,-95.674044398562955 36.999333876292773,-95.686452000000003 36.999349000000002,-95.696658999999997 36.999215,-95.71038 36.999370999999996,-95.710782524132014 36.999362783399121,-95.714887000000004 36.999279,-95.718053999999995 36.999254999999998,-95.741907999999995 36.999243999999997,-95.746466244276931 36.999250838506164,-95.759905000000003 36.999270999999993,-95.768719000000004 36.999205000000003,-95.786761999999996 36.999309999999994,-95.807979999999986 36.999124000000002,-95.819364496908179 36.999150471530008,-95.866899000000004 36.999260999999997,-95.873943999999995 36.999299999999998,-95.875256999999991 36.999302,-95.877150999999998 36.999304000000002,-95.910179999999997 36.999336,-95.928122000000002 36.999245000000002,-95.936991999999989 36.999267999999994,-95.964270378114222 36.999093604402042,-96.00081 36.99886,-96.095164142267308 36.998935940299688,-96.14121 36.998972999999999,-96.143207000000004 36.999133999999998,-96.147143 36.999021999999997,-96.149709 36.99904,-96.152383999999998 36.999050999999994,-96.154016999999982 36.999161,-96.184768000000005 36.999211000000003,-96.200028000000003 36.999028000000003,-96.217571000000007 36.999070000000003,-96.235320025971774 36.999130675786525,-96.27480962492784 36.999265672629733,-96.276368000000005 36.999270999999993,-96.279078999999996 36.999271999999991,-96.381556872639493 36.999226629434901,-96.394272 36.999220999999999,-96.415412000000003 36.999113,-96.500287999999998 36.998643,-96.525212323286397 36.998711038495294,-96.525495980566973 36.998711812823821,-96.551130926932458 36.998781791180214,-96.551130927020779 36.998781791180456,-96.624487489749981 36.998982040153741,-96.705431000000004 36.999203,-96.710481999999999 36.999270999999993,-96.731983006833033 36.99928335311408,-96.736589999999993 36.999285999999998,-96.741269999999986 36.999239000000003,-96.749837999999997 36.998987999999997,-96.792060000000006 36.999179999999996,-96.795198999999997 36.99886,-96.822790999999995 36.999181999999998,-96.867517000000007 36.999217000000002,-96.876289999999997 36.999232999999997,-96.902083000000005 36.999155000000002,-96.903509999999997 36.999132000000003,-96.917092999999994 36.999181999999998,-96.921914999999998 36.999150999999998,-96.924934279563146 36.999131784030439,-96.934641999999997 36.999070000000003,-96.967371 36.999066999999997,-96.975561999999996 36.999018999999997,-97.030081999999979 36.998928999999997,-97.039783999999983 36.999000000000002,-97.045562883576096 36.99899981011751,-97.100651999999997 36.998998,-97.104275999999999 36.999020000000002,-97.120284999999996 36.999014000000003,-97.122596999999999 36.999035999999997,-97.147721000000004 36.999110999999999,-97.202000013134437 36.999050609464689,-97.255829185181881 36.998990719420135,-97.342808466604069 36.998893946743877,-97.362376892203329 36.998872175019791,-97.364929972745273 36.99886933447624,-97.372421000000003 36.998860999999998,-97.384924999999996 36.998843,-97.462279999999993 36.998685000000002,-97.472860999999995 36.998721000000003,-97.527292000000003 36.998749999999994,-97.545899999999989 36.998708999999991,-97.546497999999985 36.998746999999995,-97.564536000000004 36.998711,-97.582460039051355 36.99869862770732,-97.606549 36.998682000000002,-97.637136999999996 36.999090000000002,-97.650465999999994 36.999003999999999,-97.692180007144742 36.998844793059916,-97.697103999999982 36.998826,-97.768704 36.998749999999994,-97.783432000000005 36.998961,-97.783489000000003 36.998846999999998,-97.802297999999979 36.998713000000002,-97.965379045838461 36.998468720211747,-98.033955000000006 36.998365999999997,-98.03989 36.998348999999997,-98.045341999999991 36.998327000000003,-98.111985000000004 36.998133000000003,-98.128185436781749 36.99814624647324,-98.147452 36.998162,-98.177595999999994 36.998008999999996,-98.190367496841162 36.998003995168112,-98.208218000000002 36.997996999999998,-98.219498999999999 36.997824,-98.237712000000002 36.99797199999999,-98.346187999999984 36.997962,-98.347186011230875 36.997961873429141,-98.354073 36.997960999999997,-98.408991 36.998513000000003,-98.418267999999998 36.998538000000003,-98.420209 36.998516000000002,-98.476584655565659 36.998733519956424,-98.485495952453391 36.998767903324406,-98.544871999999984 36.998997000000003,-98.622244241689657 36.999025734091177,-98.714511999999999 36.99906,-98.718464999999995 36.999179999999996,-98.761596999999995 36.999425000000002,-98.791936000000007 36.999254999999998,-98.793711000000002 36.999226999999991,-98.797451999999993 36.999228999999993,-98.811832237742053 36.99924038482925,-98.869449000000003 36.999285999999998,-98.880009 36.999262999999999,-98.880579999999995 36.999308999999997,-98.994371 36.999493,-99.000846251360556 36.99951188908193,-99.029336999999998 36.999594999999999,-99.044703416105833 36.999312701167916,-99.049695 36.999220999999999,-99.124882999999997 36.99942,-99.12944899999998 36.999422000000003,-99.215429691089184 36.999525607779709,-99.221470798208784 36.999532887387339,-99.22594390512576 36.999538277535649,-99.248119999999986 36.999564999999997,-99.277506000000002 36.999578999999997,-99.375390999999993 37.000176999999994,-99.375813215185289 37.000169016042221,-99.396673054015949 36.999774562980598,-99.407015 36.999578999999997,-99.456202999999988 36.999471,-99.484333000000007 36.999625999999999,-99.500394999999983 36.99957599999999,-99.500394999999983 36.999637,-99.502664999999993 36.999645,-99.504092999999997 36.999648,-99.508573999999982 36.999657999999997,-99.541115670095081 36.999572526667627,-99.558068000000006 36.999527999999998,-99.625399000000002 36.999670999999999,-99.648651999999998 36.999603999999998,-99.657657999999998 37.000197,-99.675479899119665 37.000294824261658,-99.700804554289192 37.000433831091229,-99.722499410223932 37.000552913981863,-99.774254999999997 37.000836999999997,-99.774816 37.000841,-99.786016000000004 37.000931,-99.875408999999991 37.001658999999997,-99.904897139036905 37.001652107487203,-99.995200999999994 37.001631000000003,-100.001285999999993 37.001699000000002,-100.002562999999995 37.001705999999999,-100.005706000000004 37.001725999999998,-100.08949117994996 37.002091554886341,-100.115721999999991 37.002206,-100.187546999999995 37.002082,-100.19237099999998 37.002035999999997,-100.193753999999998 37.002133,-100.201675999999992 37.002080999999997,-100.269984573601874 37.001795796937508,-100.395563941387664 37.001271475927872,-100.434302684862132 37.001109733298897,-100.434343961694367 37.0011095609592,-100.436759028295029 37.001099477534027,-100.462594151135718 37.000991610310841,-100.526354155903263 37.000725398506596,-100.551597999999998 37.000619999999998,-100.552683000000002 37.000734999999999,-100.591328000000004 37.000376000000003,-100.591413000000003 37.000399000000002,-100.629769999999994 37.000025,-100.63332699999998 36.999935999999998,-100.675551999999996 36.999687999999999,-100.734516999999997 36.999059000000003,-100.756894000000003 36.999356999999996,-100.759718826764541 36.999297806889686,-100.765484 36.999177000000003,-100.806116000000003 36.999091,-100.814277000000004 36.999085,-100.850054835707368 36.998687920265262,-100.855633999999981 36.998626000000002,-100.891659999999987 36.998604,-100.904274 36.998745,-100.904588000000004 36.998561000000002,-100.945565999999985 36.998151999999997,-100.958261085233985 36.99812508251128,-100.996501999999992 36.998044,-101.012641000000002 36.998176,-101.053589000000002 36.997966999999996,-101.066742000000005 36.997920999999998,-101.096255470166753 36.997758490771822,-101.211485999999979 36.997123999999999,-101.212908999999996 36.997044000000002,-101.283204233333976 36.996668964004151,-101.357796999999991 36.996271,-101.359673999999998 36.996231999999999,-101.37818 36.996164,-101.413867999999994 36.996008000000003,-101.415004999999994 36.995966000000003,-101.485326 36.995610999999997,-101.519065999999995 36.99554599999999,-101.555239 36.99541399999999,-101.600396000000003 36.995152999999995,-101.601592999999994 36.995094999999999,-101.672152845644291 36.994768289529276,-101.672152845650672 36.994768289529254,-101.718235173867967 36.994554916342196,-101.761767880686108 36.994353348566563,-101.826607533764985 36.994053124077894,-101.862548907230888 36.993886706153717,-101.881050066963184 36.993801040963412,-101.899294480822903 36.993716564573397,-101.902439999999999 36.993701999999999,-101.905152836625547 36.993689460946754,-101.93521516037174 36.99355050931414,-102.000446999999994 36.993248999999992,-102.000446999999994 36.993271999999997,-102.028206999999981 36.993124999999999,-102.042240000000007 36.993082999999999,-102.041951999999995 37.024741999999996,-102.04195 37.030805,-102.041921000000002 37.032178000000002,-102.041748999999996 37.034396999999998,-102.04191999999999 37.035083,-102.041983000000002 37.106551000000003,-102.041808999999986 37.111972999999999,-102.042091999999997 37.125020999999997,-102.042135000000002 37.125020999999997,-102.042121535383529 37.12671399835564,-102.042001999999997 37.141744000000003,-102.041962999999996 37.258164,-102.041663999999997 37.29764999999999,-102.041816999999995 37.309489999999997,-102.041973999999996 37.352612999999998,-102.042089000000004 37.352818999999997,-102.041523999999995 37.375017999999997,-102.041585760607518 37.389190434149839,-102.041675999999981 37.409897999999991,-102.041668999999999 37.434739999999998,-102.041754999999995 37.434854999999992,-102.041800999999992 37.469487999999998,-102.041786000000002 37.506065999999997,-102.04201599999999 37.535260999999998,-102.041899 37.541186000000003,-102.041893999999999 37.557977,-102.041618 37.607868000000003,-102.041584999999998 37.644281999999997,-102.041581999999991 37.654494999999997,-102.041694000000007 37.665680999999999,-102.041573999999997 37.680436,-102.041876000000002 37.723875,-102.041989965869121 37.73854062916552,-102.042158 37.760164000000003,-102.042668000000006 37.788758,-102.042952999999997 37.803534999999997,-102.043032999999994 37.824145999999999,-102.043218999999993 37.86792899999999,-102.043714531331204 37.914003914798144,-102.043845000000005 37.926135000000002,-102.043844000000007 37.928101999999996,-102.044644000000005 38.045532,-102.044255000000007 38.113010999999993,-102.044450868202546 38.120049353793199,-102.044589000000002 38.125012999999996,-102.044415729020699 38.133607343100145,-102.044251000000003 38.141777999999995,-102.044296878804843 38.175558844899406,-102.044398 38.250014999999998,-102.044510721728557 38.262483349316234,-102.044567999999998 38.268819,-102.044612999999998 38.312323999999997,-102.044944 38.384419,-102.044441999999989 38.415801999999999,-102.044936000000007 38.41968,-102.045323999999979 38.453646999999997,-102.045262999999991 38.505395,-102.045261999999994 38.505531999999995,-102.045112000000003 38.523783999999999,-102.045222999999993 38.543796999999998,-102.045188999999979 38.558731999999992,-102.045210999999995 38.581608999999993,-102.045287999999999 38.615248999999999,-102.045074 38.669617000000002,-102.045102 38.674945999999998,-102.045159999999996 38.675221,-102.045126999999994 38.686725000000003,-102.045156000000006 38.688555,-102.045211999999992 38.697566999999999,-102.045375000000007 38.754338999999995,-102.045287000000002 38.755527999999998,-102.045371000000003 38.770063999999998,-102.045447999999993 38.783453000000002,-102.045333999999997 38.799463000000003,-102.045387999999988 38.813391999999993,-102.046570999999986 39.047038,-102.047133999999986 39.129700999999997,-102.047188612927897 39.133146793270186,-102.047250000000005 39.13702,-102.047851021058236 39.220289738242592,-102.048449000000005 39.30313799999999,-102.04895999999998 39.37371199999999,-102.049100972149461 39.394064428437375,-102.049166999999983 39.403596999999998,-102.049369999999996 39.418210000000002,-102.049368999999999 39.423333,-102.049678999999998 39.506183,-102.049672999999999 39.536690999999998,-102.049553999999986 39.538932000000003,-102.049763758475066 39.568170000775439,-102.04980599999999 39.574058,-102.049954 39.592331,-102.050258163748609 39.627242889069393,-102.050421999999983 39.646047999999993,-102.050099000000003 39.653812000000002,-102.05059399999999 39.67559399999999,-102.050898693231389 39.741794606053567,-102.051254 39.818992,-102.051317999999995 39.833311000000002,-102.051362999999995 39.843471,-102.051569 39.849805000000003,-102.051743999999999 40.003078000000002))'));
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/state.postgresql_psycopg2.sql	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
--- State border data courtesy of U.S. Census Bureau Cartographic Boundary Files: http://www.census.gov/geo/www/cob/st2000.html
--- Boundary file data is a product of the U.S. federal government and is public domain.  See 17 U.S.C. 105.
-INSERT INTO geoapp_state ("name", "poly") VALUES ('Puerto Rico', NULL);
-INSERT INTO geoapp_state ("name", "poly") VALUES ('Colorado', 'SRID=4326;POLYGON ((-107.918420999999981 41.002035999999997,-107.69133582431418 41.002104250342249,-107.625624000000002 41.002124000000002,-107.521505363272311 41.002506710525772,-107.367442999999994 41.003073,-107.317794462401125 41.002967213367114,-107.305312956219666 41.00294061889776,-107.241193999999993 41.002803999999998,-107.000606000000005 41.003443999999995,-106.857772999999995 41.002662999999991,-106.453858999999994 41.002056999999994,-106.439563000000007 41.001978,-106.437419000000006 41.001794999999994,-106.430949999999996 41.001751999999996,-106.391852 41.001176,-106.386356000000006 41.001143999999996,-106.321164999999993 40.999122999999997,-106.217573000000002 40.997734,-106.194624254510543 40.99762614711792,-106.190540579491184 40.997606954952467,-106.061180999999991 40.996999000000002,-105.764246857267409 40.99689755617932,-105.730421000000007 40.996886000000003,-105.724804000000006 40.99691,-105.554417704421283 40.997390710823062,-105.412220703167577 40.997791891195448,-105.277137999999979 40.998173,-105.256527000000006 40.998190999999998,-105.254778999999999 40.99821,-105.173435761678107 40.998177015252317,-104.943370680568208 40.998083723679372,-104.855272999999997 40.998047999999997,-104.829503999999986 40.999270000000003,-104.675999000000004 41.000957,-104.497148999999993 41.001828000000003,-104.497057999999996 41.001804999999997,-104.467671999999979 41.001472999999997,-104.214691999999999 41.001657000000002,-104.214191 41.001567999999999,-104.211472999999998 41.001590999999998,-104.123585999999989 41.001625999999995,-104.104590000000002 41.001542999999991,-104.086067999999983 41.001562999999997,-104.066960999999992 41.001503999999997,-104.053248999999994 41.001405999999996,-104.039237999999997 41.001502000000002,-104.023382999999981 41.001887000000004,-104.018223000000006 41.001617000000003,-104.010804886779724 41.00161667450854,-103.972641999999979 41.001615,-103.971373 41.001524000000003,-103.953524999999999 41.001595999999999,-103.906323999999998 41.001387,-103.896207000000004 41.00175,-103.877966999999998 41.00167299999999,-103.858448999999993 41.001680999999998,-103.750497999999993 41.002054,-103.574522000000002 41.001721000000003,-103.497446999999994 41.001635,-103.486697000000007 41.001913999999999,-103.421975000000003 41.002006999999999,-103.421925000000002 41.001968999999995,-103.396990999999986 41.002558,-103.365313999999984 41.001846,-103.362978999999996 41.001843999999991,-103.077804 41.002298000000003,-103.076536000000004 41.002253000000003,-103.059537999999989 41.002367999999997,-103.057997999999998 41.002367999999997,-103.043443999999994 41.002344,-103.038703999999996 41.002251,-103.002026 41.002485999999998,-103.000101999999984 41.002400000000002,-102.982690000000005 41.002156999999997,-102.981482999999997 41.002111999999997,-102.963668999999982 41.002185999999995,-102.962522000000007 41.002071999999998,-102.960706000000002 41.002058999999996,-102.959623999999991 41.002094999999997,-102.944829999999996 41.002302999999998,-102.943109000000007 41.002051000000002,-102.925567999999998 41.002279999999999,-102.924029000000004 41.002141999999999,-102.906546999999989 41.002275999999995,-102.904796000000005 41.002206999999999,-102.887406999999982 41.002178,-102.885745999999997 41.002130999999999,-102.867822000000004 41.002183000000002,-102.865783999999991 41.001987999999997,-102.849262999999993 41.002301000000003,-102.846455000000006 41.002256000000003,-102.830302999999986 41.002350999999997,-102.827280000000002 41.002142999999997,-102.773545999999996 41.002414000000002,-102.766722999999999 41.00227499999999,-102.754616999999996 41.002360999999993,-102.739623999999992 41.002229999999997,-102.653462999999988 41.002332000000003,-102.621032999999997 41.002597000000002,-102.578695999999994 41.002291,-102.575738 41.002268,-102.575496 41.002200000000002,-102.566047999999995 41.002200000000002,-102.556788999999995 41.002218999999997,-102.517701071582451 41.002347335877943,-102.487954999999985 41.002444999999994,-102.470536999999979 41.002381999999997,-102.469223 41.002423999999998,-102.460334593696913 41.00241180236555,-102.387750989484957 41.002312195277327,-102.380372991932845 41.002302070389462,-102.379593 41.002301000000003,-102.364065999999994 41.002173999999997,-102.292833000000002 41.002206999999999,-102.292621999999994 41.002229999999997,-102.292552999999998 41.002206999999999,-102.291353999999998 41.002206999999999,-102.277803455573988 41.002233743569548,-102.272099999999995 41.002245000000002,-102.267811999999992 41.002383000000002,-102.231931000000003 41.002327,-102.212199999999982 41.002462,-102.209361 41.002442000000002,-102.209083936251005 41.002440229332002,-102.207776055197755 41.002431870883314,-102.191209999999998 41.002325999999996,-102.124972 41.002338000000002,-102.070598000000004 41.002423,-102.051614 41.002377000000003,-102.051291999999989 40.749591000000002,-102.051634432607003 40.582129592617228,-102.051725000000005 40.537838999999991,-102.051518999999999 40.520094,-102.051464999999993 40.440007999999999,-102.051839999999999 40.396396000000003,-102.051571999999993 40.393079999999998,-102.051797999999991 40.360069000000003,-102.051585542616536 40.350646145741024,-102.051309000000003 40.338380999999998,-102.051922000000005 40.235343999999998,-102.05189399999999 40.229192999999995,-102.051908999999995 40.162674000000003,-102.052001000000004 40.148358999999999,-102.051852600888665 40.064469617536822,-102.051743999999999 40.003078000000002,-102.051715564657869 39.978173027456265,-102.051569 39.849805000000003,-102.051362999999995 39.843471,-102.051317999999995 39.833311000000002,-102.051254 39.818992,-102.05059399999999 39.67559399999999,-102.050099000000003 39.653812000000002,-102.050421999999983 39.646047999999993,-102.049954 39.592331,-102.04980599999999 39.574058,-102.049553999999986 39.538932000000003,-102.049672999999999 39.536690999999998,-102.049678999999998 39.506183,-102.049368999999999 39.423333,-102.049369999999996 39.418210000000002,-102.049166999999983 39.403596999999998,-102.04895999999998 39.37371199999999,-102.048449000000005 39.30313799999999,-102.047250000000005 39.13702,-102.047133999999986 39.129700999999997,-102.046570999999986 39.047038,-102.045387999999988 38.813391999999993,-102.045333999999997 38.799463000000003,-102.045447999999993 38.783453000000002,-102.045371000000003 38.770063999999998,-102.045287000000002 38.755527999999998,-102.045375000000007 38.754338999999995,-102.045211999999992 38.697566999999999,-102.045156000000006 38.688555,-102.045126999999994 38.686725000000003,-102.045159999999996 38.675221,-102.045102 38.674945999999998,-102.045074 38.669617000000002,-102.045287999999999 38.615248999999999,-102.045210999999995 38.581608999999993,-102.045188999999979 38.558731999999992,-102.045222999999993 38.543796999999998,-102.045112000000003 38.523783999999999,-102.045261999999994 38.505531999999995,-102.045262999999991 38.505395,-102.045323999999979 38.453646999999997,-102.044936000000007 38.41968,-102.044441999999989 38.415801999999999,-102.044944 38.384419,-102.044612999999998 38.312323999999997,-102.044567999999998 38.268819,-102.044398 38.250014999999998,-102.044251000000003 38.141777999999995,-102.044535323623649 38.127675380028528,-102.044589000000002 38.125012999999996,-102.044540277332047 38.123262193231092,-102.044255000000007 38.113010999999993,-102.04462354493468 38.04908029653749,-102.044631007072184 38.047785855466316,-102.044644000000005 38.045532,-102.044620085883125 38.042021706570637,-102.044539342086111 38.030169526464491,-102.043844000000007 37.928101999999996,-102.043845000000005 37.926135000000002,-102.043218999999993 37.86792899999999,-102.043032999999994 37.824145999999999,-102.042952999999997 37.803534999999997,-102.042668000000006 37.788758,-102.042158 37.760164000000003,-102.041876000000002 37.723875,-102.041573999999997 37.680436,-102.041694000000007 37.665680999999999,-102.041581999999991 37.654494999999997,-102.041584999999998 37.644281999999997,-102.041618 37.607868000000003,-102.041779405839492 37.578691555295826,-102.041893999999999 37.557977,-102.041899 37.541186000000003,-102.04201599999999 37.535260999999998,-102.041786000000002 37.506065999999997,-102.041800999999992 37.469487999999998,-102.041754999999995 37.434854999999992,-102.041668999999999 37.434739999999998,-102.041675999999981 37.409897999999991,-102.041523999999995 37.375017999999997,-102.042089000000004 37.352818999999997,-102.041973999999996 37.352612999999998,-102.041816999999995 37.309489999999997,-102.041663999999997 37.29764999999999,-102.041962999999996 37.258164,-102.042001999999997 37.141744000000003,-102.042135000000002 37.125020999999997,-102.042091999999997 37.125020999999997,-102.041808999999986 37.111972999999999,-102.041983000000002 37.106551000000003,-102.04191999999999 37.035083,-102.041748999999996 37.034396999999998,-102.041921000000002 37.032178000000002,-102.04195 37.030805,-102.041951999999995 37.024741999999996,-102.042240000000007 36.993082999999999,-102.054502999999997 36.993108999999997,-102.184270999999995 36.993592999999997,-102.208315999999996 36.993729999999999,-102.260789000000003 36.994388,-102.270345681835295 36.994399933337462,-102.307593650497381 36.994446444520669,-102.355288000000002 36.994505999999994,-102.355367 36.994574999999998,-102.698142000000004 36.995148999999998,-102.742059999999981 36.997689,-102.759860000000003 37.000019000000002,-102.77856899999999 36.999242000000002,-102.806762000000006 37.000019000000002,-102.814616 37.000782999999998,-102.841988999999998 36.999597999999999,-102.979613 36.998548999999997,-102.985806999999994 36.998570999999998,-102.986975999999999 36.998524000000003,-103.002199000000005 37.000104,-103.086104969413952 37.000173865694038,-103.10540536532865 37.000189936488113,-103.155922000000004 37.000231999999997,-103.200631728472104 37.000060386509688,-103.327177769406262 36.999574653124313,-103.425678872433053 36.999196567220693,-103.733247000000006 36.998015999999993,-103.734363999999985 36.998041,-104.007854999999992 36.996239000000003,-104.215475488463966 36.994874432196589,-104.250535999999983 36.994644,-104.29757064295984 36.994053250381747,-104.338832999999994 36.993535,-104.355650525350313 36.993556531771581,-104.366447685535107 36.993570355564437,-104.399202882083287 36.993612292614962,-104.429769386650008 36.993651427444888,-104.480610316975273 36.993716519976395,-104.519256999999996 36.993765999999994,-104.624555999999998 36.994376999999993,-104.625545000000002 36.993599000000003,-104.645028999999994 36.993377999999993,-104.706112207267154 36.993426444188657,-104.732031000000006 36.993447000000003,-104.732119999999981 36.993484000000002,-104.839990412520109 36.993395592828207,-105.00055399999998 36.993264000000003,-105.029227999999989 36.99272899999999,-105.120800000000003 36.995427999999997,-105.155041964101514 36.995339147158163,-105.220613 36.995168999999997,-105.251295999999996 36.995604999999998,-105.419309999999996 36.995856000000003,-105.438102743613229 36.995968030697597,-105.442458999999999 36.995994000000003,-105.447254999999998 36.996016999999995,-105.465181999999999 36.995990999999997,-105.47087670692585 36.995978476706256,-105.508835999999988 36.99589499999999,-105.512484999999998 36.995776999999997,-105.533922000000004 36.995874999999998,-105.627469999999988 36.995679000000003,-105.664719999999988 36.995874,-105.716470999999999 36.995848999999993,-105.718407304549174 36.995846016149208,-105.996159000000006 36.995418,-105.997472000000002 36.995417000000003,-106.006633999999991 36.995342999999998,-106.099805867433119 36.994759106704976,-106.163971382218094 36.994356991615014,-106.201468999999989 36.994121999999997,-106.247704999999996 36.994266000000003,-106.248675000000006 36.99428799999999,-106.293278999999998 36.99389,-106.32542867882475 36.994109231664673,-106.343138999999979 36.994230000000002,-106.476277952851959 36.993839335051021,-106.500589000000005 36.993767999999996,-106.617159 36.992967,-106.617124999999987 36.993003999999999,-106.628652000000002 36.993175,-106.628732999999983 36.993160999999994,-106.661344 36.993243,-106.675625999999994 36.993122999999997,-106.750591 36.992460999999999,-106.782095289714647 36.992451749967366,-106.869795999999994 36.992425999999995,-106.877291999999983 37.00013899999999,-106.918886463342702 37.000128747161924,-106.95601836457638 37.000119594324254,-107.107262626744514 37.000082313330452,-107.255202723469637 37.000045846797775,-107.420912999999999 37.000004999999994,-107.422415013680663 37.000004989636103,-107.442181999144324 37.000004853243873,-107.481737001398656 37.00000458031429,-107.524086846417021 37.000004288100286,-107.600713640777798 37.000003759375268,-107.712477900838564 37.000002988201679,-107.855695499501934 37.000002000000002,-107.866308937617532 37.000001926767261,-107.869139908586362 37.000001907233546,-107.869180699306327 37.0000019069521,-108.000623000000004 37.000000999999997,-108.179187075278463 36.999293161624927,-108.187139540298872 36.999261637591275,-108.249358 36.999015,-108.250634999999988 36.999561,-108.288086000000007 36.999555,-108.288399999999996 36.999519999999997,-108.320464 36.999499,-108.320720999999992 36.99951,-108.379165570428881 36.999458977707043,-108.619688999999994 36.999248999999999,-108.620309000000006 36.999287000000002,-108.749269825405847 36.999139933822768,-108.954403999999997 36.998905999999998,-108.958867999999995 36.998913000000002,-109.045222999999993 36.999084000000003,-109.04516599999998 37.072741999999998,-109.045057999999997 37.074660999999999,-109.044995 37.086429000000003,-109.045188999999993 37.096270999999994,-109.045173000000005 37.109464000000003,-109.045202999999987 37.111957999999994,-109.045155999999992 37.112063999999997,-109.045995000000005 37.177278999999999,-109.045978000000005 37.201830999999999,-109.045801505106283 37.205070813598866,-109.045486999999994 37.210844000000002,-109.045559879533187 37.239775672002708,-109.04556019774752 37.239901996533845,-109.045583999999991 37.249350999999997,-109.046038999999993 37.249993000000003,-109.045898042273308 37.32693499054853,-109.045810000000003 37.374993000000003,-109.043799132325617 37.469028334242019,-109.043463783260819 37.484710450871816,-109.043424942780035 37.486526770085334,-109.043137000000002 37.499991999999999,-109.041915000000003 37.530653,-109.041865 37.530726,-109.041805999999994 37.604171,-109.042130999999998 37.617662000000003,-109.042089000000004 37.623795,-109.042269000000005 37.666066999999998,-109.041731999999996 37.711213999999998,-109.041759999999996 37.713182000000003,-109.041635999999997 37.740209999999998,-109.042097999999996 37.749989999999997,-109.042042148900066 37.754383999799849,-109.041460999999998 37.800105000000002,-109.041753999999997 37.83582599999999,-109.04172299999999 37.842050999999998,-109.041843999999998 37.872788,-109.041652818578953 37.881166902788557,-109.041058000000007 37.907235999999997,-109.043120999999985 37.97426,-109.042818999999994 37.997067999999999,-109.042819999999992 37.999301000000003,-109.041972403965843 38.131799166817459,-109.041836656974709 38.153019449536792,-109.041761999999991 38.16469,-109.054648 38.244920999999998,-109.060061999999988 38.275489,-109.059961999999999 38.49998699999999,-109.060253000000003 38.599327999999993,-109.059540999999996 38.719887999999997,-109.057388000000003 38.795455999999994,-109.057216044916757 38.799730849597076,-109.054188999999994 38.874983999999998,-109.05394299999999 38.904414000000003,-109.053797000000003 38.905283999999995,-109.053233000000006 38.942467,-109.053291999999985 38.942878,-109.052435999999986 38.999985000000002,-109.051587912503535 39.115734257770079,-109.051583515738272 39.116334340093104,-109.051580780636755 39.116707634089543,-109.051512000000002 39.126094999999999,-109.050764999999998 39.366677000000003,-109.051362999999981 39.497674000000004,-109.051040248333237 39.660472011844121,-109.050614999999993 39.874969999999998,-109.050872999999996 40.058914999999999,-109.050813000000005 40.059578999999992,-109.050944 40.180711999999993,-109.050972999999999 40.180849000000002,-109.050968715822648 40.22266241227041,-109.050945999999996 40.444367999999997,-109.050314 40.495092,-109.050697999999983 40.499963,-109.049954999999997 40.539901,-109.050073999999995 40.540357999999998,-109.050071964046666 40.540437104308737,-109.048044000000004 40.619230999999999,-109.048248999999998 40.653600999999995,-109.049087999999998 40.714562,-109.048455000000004 40.826081000000002,-109.050076000000004 41.000658999999999,-108.884137999999993 41.000093999999997,-108.631107999999998 41.00015599999999,-108.526667000000003 40.999608000000002,-108.500658999999999 41.000112,-108.250648999999996 41.000114000000004,-108.181227000000007 41.000454999999995,-108.089219003138552 41.001554139247368,-108.046538999999996 41.002063999999997,-107.923234122395939 41.0020370519008,-107.918420999999981 41.002035999999997))');
-INSERT INTO geoapp_state ("name", "poly") VALUES ('Kansas', 'SRID=4326;POLYGON ((-102.051743999999999 40.003078000000002,-101.916696000000002 40.003141999999997,-101.904176000000007 40.003162000000003,-101.861740775252272 40.002907997451267,-101.841025000000002 40.002783999999991,-101.832160999999999 40.002932999999999,-101.807687 40.002797999999999,-101.804861999999986 40.002752,-101.783266423091504 40.002735966476642,-101.748492901329186 40.002710149056902,-101.627071 40.00262,-101.625809000000004 40.002710999999998,-101.579641080501318 40.002654627564297,-101.54227299999998 40.002608999999993,-101.417209 40.002423999999998,-101.411050023557621 40.002364583193085,-101.409952999999987 40.002353999999997,-101.387325211262052 40.00246006676732,-101.374325999999996 40.002520999999994,-101.342859000000004 40.002580000000002,-101.324035999999992 40.002695999999993,-101.293991000000005 40.002558999999998,-101.286555000000007 40.002558999999998,-101.248672999999997 40.002543000000003,-101.215033000000005 40.002555,-101.19221899999998 40.002490999999999,-101.186892990733696 40.002481867883319,-101.178804999999997 40.002468,-101.168704000000005 40.002547,-101.130906999999993 40.002426999999997,-101.104950380573442 40.002382874850099,-101.104950380567658 40.002382874850092,-101.060316999999998 40.002307000000002,-101.027686000000003 40.002255999999996,-100.962089380046322 40.00217532965339,-100.937427 40.002144999999999,-100.764559455237134 40.002296963384197,-100.758829999999989 40.002301999999993,-100.752183000000002 40.002127999999992,-100.7388309887763 40.002228385746484,-100.733295999999996 40.002270000000003,-100.729904000000005 40.002110999999999,-100.721127999999993 40.002068999999999,-100.683435000000003 40.002234,-100.660229999999984 40.002161999999998,-100.645444999999995 40.001882999999999,-100.626504856699498 40.001892789287538,-100.600944999999996 40.001905999999998,-100.594756999999987 40.001976999999997,-100.567238000000003 40.001888999999998,-100.551885999999996 40.001888999999998,-100.514429898999168 40.001844039098764,-100.511064999999988 40.00184,-100.487159000000005 40.001767,-100.477018 40.001752000000003,-100.475853999999998 40.001767999999998,-100.468772999999985 40.001724000000003,-100.447071999999991 40.001795,-100.439081000000002 40.001773999999997,-100.402449685831499 40.001800164690437,-100.390079999999998 40.001809000000002,-100.290126736823893 40.001691651381378,-100.231651999999997 40.001623000000002,-100.229478999999998 40.001692999999996,-100.215406000000002 40.001629,-100.196958999999993 40.001494,-100.19359 40.001573,-100.190323000000006 40.001586000000003,-100.188181 40.001541000000003,-100.177823000000004 40.001593,-99.990926000000002 40.001503,-99.986610999999996 40.001550000000002,-99.948166999999998 40.001812999999999,-99.944417 40.001584,-99.930432999999979 40.001516000000002,-99.906657999999993 40.001511999999998,-99.850154757615712 40.001444140609848,-99.813400999999999 40.001399999999997,-99.775639999999981 40.001646999999998,-99.772120999999984 40.001804,-99.764213999999996 40.001550999999999,-99.756834999999995 40.001342,-99.746628 40.001820000000002,-99.737774855821357 40.001824224692157,-99.731959000000003 40.001826999999992,-99.719639 40.001807999999997,-99.628345999999993 40.001866,-99.625979999999984 40.001865000000002,-99.515340365578794 40.002008435606839,-99.501791999999995 40.002026,-99.498998999999984 40.00195699999999,-99.497659999999982 40.001911999999997,-99.493464999999986 40.001936999999998,-99.480727999999999 40.001942,-99.423564999999996 40.002270000000003,-99.412644999999998 40.001867999999995,-99.403389000000004 40.001969000000003,-99.366747146128873 40.001962496644857,-99.290702999999979 40.001949000000003,-99.286655999999994 40.002017000000002,-99.282966999999999 40.001879000000002,-99.254012000000003 40.002074,-99.25036999999999 40.00195699999999,-99.216375999999997 40.002015999999998,-99.197591999999986 40.002032999999997,-99.188905000000005 40.002023,-99.186961999999994 40.001976999999997,-99.178965000000005 40.001976999999997,-99.169815999999997 40.001925,-99.123032999999992 40.002164999999998,-99.113510000000005 40.002192999999998,-99.085596999999993 40.002132999999994,-99.067047050731574 40.00217023690761,-99.020337999999995 40.00226399999999,-99.018700999999993 40.002333,-98.992135000000005 40.002192,-98.972286999999994 40.002245000000002,-98.971721000000002 40.002268,-98.961009000000004 40.002316999999998,-98.96091899999999 40.002271,-98.953888072580213 40.002253239016738,-98.934791999999987 40.002204999999996,-98.8435956659672 40.002348607685946,-98.842134005327992 40.002350909376077,-98.834455999999989 40.002363000000003,-98.820589999999982 40.002319,-98.777203 40.002358999999998,-98.774940999999998 40.002336,-98.729330606936671 40.002229113826232,-98.726294999999993 40.002222000000003,-98.710403999999997 40.002180000000003,-98.693095999999997 40.002372999999999,-98.691443000000007 40.002504999999999,-98.690286999999998 40.002547999999997,-98.672819000000004 40.002364,-98.669723999999988 40.002409999999998,-98.653832999999992 40.002268999999998,-98.652494000000004 40.002245000000002,-98.640709999999984 40.002493,-98.616372379820518 40.002409030470169,-98.613754999999998 40.002400000000002,-98.593342000000007 40.002475999999994,-98.575219000000004 40.002479999999991,-98.560578000000007 40.002274,-98.543186000000006 40.002285,-98.523053000000004 40.002336,-98.506634585466017 40.002329436673158,-98.504454999999979 40.002328565375151,-98.50084801790743 40.002327123469641,-98.490532999999999 40.002322999999997,-98.441997554675297 40.002366263566756,-98.391848301995964 40.002410965650498,-98.274015000000006 40.002516,-98.268218000000005 40.002490000000002,-98.25000799999998 40.002307000000002,-98.213290432425865 40.002506421375415,-98.193483 40.002614,-98.179315000000003 40.002482999999998,-98.172269 40.002437999999991,-98.156873151934732 40.002445128178877,-98.142031000000003 40.002451999999998,-98.099659000000003 40.002226999999998,-98.076034000000007 40.002300999999996,-98.068701000000004 40.002355,-98.050056999999981 40.002277999999997,-98.047469000000007 40.002186000000002,-98.042767978165202 40.002191261754177,-98.014411999999979 40.002223,-98.010157000000007 40.002153,-97.972185999999994 40.002113999999999,-97.931810999999996 40.002049999999997,-97.876261 40.002102,-97.85745 40.002065000000002,-97.838378999999989 40.001909999999995,-97.821597999999994 40.002003999999992,-97.819426000000007 40.001957999999995,-97.777154999999993 40.002167,-97.770775999999998 40.001976999999997,-97.769204000000002 40.001995,-97.767746000000002 40.001994000000003,-97.714825952022949 40.001974503868432,-97.706952472912022 40.001971603221314,-97.701160424072398 40.001969469388285,-97.61370959051284 40.001937251863488,-97.595964207410262 40.001930714334961,-97.593671575073259 40.001929869712491,-97.51530799999999 40.001900999999997,-97.511381 40.001899000000002,-97.510264000000006 40.001835,-97.48896951184885 40.0019310946697,-97.481234094494141 40.001966001936331,-97.463284999999999 40.00204699999999,-97.444661999999994 40.001957999999995,-97.425443 40.002048000000002,-97.417825999999991 40.002023999999999,-97.415833000000006 40.002000999999993,-97.369102999999996 40.00206,-97.350896000000006 40.001930000000002,-97.350272000000004 40.001975999999999,-97.256541388870858 40.001563097676062,-97.24516899999999 40.001513000000003,-97.245080000000002 40.001466999999998,-97.202309999999997 40.00144199999999,-97.200190000000006 40.001548999999997,-97.181775000000002 40.001550000000002,-97.165136038800085 40.001526729909067,-97.164288093539042 40.001525544031956,-97.157705785150654 40.001516338474417,-97.144150390621661 40.001497380844818,-97.142447999999987 40.001494999999998,-97.137865999999988 40.001814000000003,-97.049662999999995 40.001322999999999,-97.030802999999992 40.001342,-97.009164999999996 40.001463,-96.918187714380807 40.001505032225388,-96.916093000000004 40.001505999999999,-96.880459000000002 40.001448000000003,-96.878253 40.001466,-96.875056999999998 40.001448000000003,-96.873812 40.001449999999998,-96.868892342573133 40.001444286089438,-96.805301797100199 40.001370429180717,-96.693246065483095 40.001240282633297,-96.622400999999996 40.001157999999997,-96.610348999999999 40.000881,-96.604883999999984 40.000891000000003,-96.581788013355691 40.000963078853125,-96.580851999999993 40.000965999999998,-96.570853999999997 40.001090999999995,-96.557862999999998 40.000968,-96.538977000000003 40.000850999999997,-96.527110999999991 40.001030999999998,-96.469944999999996 40.000965999999998,-96.467535999999996 40.001035000000002,-96.463639999999998 40.000967000000003,-96.354812913341547 40.000735780492882,-96.350953725714731 40.00072758106856,-96.341811057717251 40.000708156095854,-96.304554999999993 40.000629000000004,-96.301066000000006 40.000632000000003,-96.239171999999996 40.000691000000003,-96.223838999999998 40.000729,-96.220170999999993 40.00072,-96.154364999999984 40.000495,-96.154246 40.00045,-96.147166999999982 40.000478999999999,-96.125936999999979 40.000432000000004,-96.125788 40.000467,-96.089781000000002 40.000518999999997,-96.081394999999986 40.000602999999998,-96.051691000000005 40.000726999999998,-96.02409 40.000718999999997,-96.014716997898134 40.000662392993569,-96.010677999999999 40.000638000000002,-95.995389500007406 40.000603953777215,-95.958139000000003 40.000520999999999,-95.901560435593936 40.000482839492363,-95.882524000000004 40.00047,-95.788023999999993 40.000452000000003,-95.784575000000004 40.000463000000003,-95.672891827756033 40.000336669594915,-95.658762261555324 40.000320686938032,-95.63965170807073 40.000299070038061,-95.565216789143676 40.000214872989645,-95.463103327781397 40.00009936736172,-95.455130658279359 40.000090349077695,-95.452048066669519 40.000086862204618,-95.438655850967621 40.000071713601649,-95.436011808705814 40.000068722793607,-95.426269559489981 40.00005770284973,-95.42148745056565 40.000052293567869,-95.41484447973599 40.000044779372317,-95.375257000000005 40.0,-95.339895999999982 39.999999000000003,-95.326448603970363 39.999998574530281,-95.30829 39.999997999999998,-95.308403999999996 39.993758,-95.307779999999994 39.990617999999998,-95.307111000000006 39.989114,-95.302506999999991 39.984357000000003,-95.289715 39.977705999999998,-95.274756999999994 39.972115000000002,-95.269885999999985 39.969396000000003,-95.261854 39.960617999999997,-95.257651999999993 39.954886000000002,-95.250253999999998 39.948644000000002,-95.241382999999999 39.944949,-95.236761 39.943930999999999,-95.231114000000005 39.943784,-95.220212000000004 39.944432999999997,-95.216440000000006 39.943953,-95.213736999999995 39.943205999999996,-95.204427999999993 39.938949,-95.201277000000005 39.934193999999998,-95.200689999999994 39.928154999999997,-95.20201 39.922438,-95.205744999999993 39.915168999999999,-95.206326000000004 39.912120999999999,-95.206195999999991 39.909557,-95.205732999999981 39.908275000000003,-95.202631127107011 39.904826841138963,-95.201935000000006 39.904052999999998,-95.19982446963148 39.902956959499498,-95.199773390195176 39.902930432929807,-95.199730682369619 39.902908253904485,-95.199347000000003 39.902709000000002,-95.193815999999984 39.900689999999997,-95.189565000000002 39.899959000000003,-95.179452999999995 39.900061999999991,-95.172296000000003 39.902025999999999,-95.159833999999989 39.906984,-95.156023999999988 39.907243,-95.153185481864639 39.906665666721331,-95.151701132402337 39.906363761184394,-95.149656999999991 39.905947999999995,-95.148243978290679 39.905255611516672,-95.146055000000004 39.904183000000003,-95.143801999999994 39.901917999999995,-95.142562999999981 39.897992000000002,-95.142444999999995 39.895419999999994,-95.143403000000006 39.889355999999992,-95.142718000000002 39.885888999999992,-95.140601000000004 39.88168799999999,-95.137091999999996 39.878350999999995,-95.134747000000004 39.876852,-95.128165999999993 39.874164999999998,-95.105912000000004 39.869163999999998,-95.090958483530287 39.863446088154532,-95.090158000000002 39.86314,-95.085003 39.861882999999999,-95.081534000000005 39.861718000000003,-95.079786043666886 39.861878094210859,-95.052535000000006 39.864373999999998,-95.042141999999998 39.864804999999997,-95.037767000000002 39.865541999999998,-95.034318031759739 39.867229060943565,-95.032053000000005 39.868336999999997,-95.031002514960235 39.869148692103728,-95.027930999999981 39.871521999999999,-95.025918959417425 39.87568321107333,-95.025422000000006 39.876711,-95.025119000000004 39.878833,-95.02586205726584 39.885935119809076,-95.025947000000002 39.886747,-95.025771840138887 39.887478608302466,-95.025475064075451 39.888718183571669,-95.025239999999997 39.889699999999998,-95.024388999999999 39.891202,-95.021897459019584 39.893924778577606,-95.019088516216428 39.896994416745422,-95.018742999999986 39.89737199999999,-95.018224596337973 39.897611313155366,-95.013151999999991 39.899952999999996,-95.010684182587667 39.900289758615472,-95.008439999999993 39.900596,-95.003818999999993 39.900400999999995,-94.990284000000003 39.897010000000002,-94.989784913598129 39.896958718834505,-94.987823822157509 39.896757216540813,-94.986975 39.89667,-94.985308455245701 39.896814869812808,-94.979390624873346 39.897329296428744,-94.977748999999989 39.897472,-94.963345000000004 39.901136,-94.959276000000003 39.901671,-94.958440298615102 39.901548064610132,-94.95153999999998 39.900532999999996,-94.943866999999983 39.898130000000002,-94.935306395585215 39.893779379194363,-94.934493000000003 39.893366,-94.929574000000002 39.888753999999992,-94.927897000000002 39.88611199999999,-94.927358999999996 39.883966,-94.927251999999996 39.880257999999991,-94.928466 39.876344000000003,-94.931084167287821 39.873075003673321,-94.931462999999994 39.872602,-94.938790999999995 39.866954,-94.940742999999998 39.864409999999999,-94.942407000000003 39.861065999999994,-94.942566999999983 39.856601999999995,-94.939767000000003 39.851930000000003,-94.937655000000007 39.849786000000002,-94.926149999999993 39.841321999999998,-94.916917999999995 39.836137999999998,-94.909941999999987 39.834426,-94.903156999999979 39.833849999999998,-94.892677000000006 39.834377999999994,-94.889493000000002 39.834026,-94.886932999999999 39.833098,-94.881012999999996 39.828921999999991,-94.878676999999996 39.826521999999997,-94.877043999999998 39.823754,-94.876543999999996 39.820594,-94.875944000000004 39.813293999999999,-94.87632679569893 39.807169268817198,-94.876344000000003 39.806894,-94.876705972386588 39.80614007495069,-94.880932 39.797338000000003,-94.884084 39.794234000000003,-94.890292000000002 39.791626,-94.892965000000004 39.791097999999991,-94.912908274541266 39.790276806342419,-94.92474489359239 39.789789416146199,-94.925605000000004 39.789753999999995,-94.925940683661906 39.789631963361245,-94.927258709273417 39.789152799691166,-94.929653999999999 39.788281999999995,-94.93035270914757 39.787827111232048,-94.930442023078356 39.787768964141691,-94.930979872832452 39.787418801541357,-94.932726000000002 39.786282,-94.932913349551853 39.786043884763131,-94.935059195246907 39.783316584105528,-94.935205999999994 39.78313,-94.935782000000003 39.778905999999999,-94.935301999999993 39.77561,-94.935036741896766 39.775108050050804,-94.934624304242575 39.774327591105198,-94.934262000000004 39.773642000000002,-94.929652999999988 39.769098,-94.929421387607832 39.768921584953624,-94.928626586797606 39.768316199289764,-94.926229000000006 39.76648999999999,-94.923991330811134 39.765173947104167,-94.916788999999994 39.760937999999996,-94.912293000000005 39.759337999999993,-94.906244 39.759417999999997,-94.905921454535701 39.759501730763866,-94.900921941190049 39.760799572828766,-94.899156000000005 39.761257999999998,-94.899025621234756 39.761323457651685,-94.895268000000002 39.76321,-94.895041000000006 39.763350000000003,-94.894070999999997 39.763945999999997,-94.893918999999997 39.76404,-94.893724000000006 39.764159999999997,-94.893646000000004 39.764208000000004,-94.883923999999993 39.770186000000002,-94.881460000000004 39.771258000000003,-94.881422 39.771258000000003,-94.874706321154179 39.772392308082928,-94.871144 39.772993999999997,-94.869643999999994 39.772894,-94.867142999999999 39.771693999999997,-94.865243000000007 39.770094,-94.863142999999994 39.767294,-94.860742999999999 39.763094000000002,-94.859442999999999 39.753694000000003,-94.860369889104035 39.749534984666809,-94.860371 39.74953,-94.862942999999987 39.742994000000003,-94.870142999999999 39.734594,-94.875642999999997 39.730494,-94.884142999999995 39.726793999999998,-94.891743999999989 39.724893999999999,-94.899315999999999 39.724041999999997,-94.900553640444031 39.724102079633198,-94.901582061073228 39.724152002964722,-94.902612000000005 39.724201999999998,-94.906055088082866 39.724933471502588,-94.907014260749904 39.725137244236571,-94.907785666538786 39.725301126582274,-94.910067999999995 39.725785999999999,-94.911087398893699 39.726157408899255,-94.918323999999998 39.728793999999994,-94.93000499999998 39.735370000000003,-94.939221000000003 39.74157799999999,-94.944740999999979 39.744377,-94.948658825773634 39.745572502168315,-94.948680784417533 39.745579202723142,-94.948725999999994 39.745593,-94.952629999999999 39.745961,-94.955286 39.745688999999999,-94.960086000000004 39.743065,-94.963779819772341 39.740240978767318,-94.964692434782606 39.73954326086956,-94.965317999999982 39.739064999999989,-94.965565209393333 39.738728671232884,-94.970224508542714 39.732389687437191,-94.970421999999985 39.732120999999999,-94.971205999999981 39.729304999999997,-94.971078000000006 39.723146,-94.968452999999997 39.707402000000002,-94.968980999999999 39.692954,-94.969909 39.689050000000002,-94.971316999999999 39.686410000000002,-94.976096392737759 39.68160006801152,-94.976325000000003 39.68137,-94.981556999999995 39.678634000000002,-94.984149000000002 39.677849999999992,-94.986445080691666 39.677537608069159,-94.990587390516794 39.676974028501114,-94.993556999999996 39.676569999999998,-94.998766892420107 39.676509388876212,-95.001379 39.676479,-95.004602740773237 39.676177881356345,-95.008105239221649 39.675850724907868,-95.009022999999999 39.675764999999998,-95.010225986948086 39.675477408241932,-95.013209713780839 39.674764104372102,-95.015309999999985 39.674261999999999,-95.018317999999994 39.672868999999999,-95.021521942351953 39.670631293568427,-95.024595000000005 39.668484999999997,-95.027643999999995 39.665453999999997,-95.037464 39.652904999999997,-95.039049000000006 39.649639,-95.044554000000005 39.644370000000002,-95.049518000000006 39.637875999999999,-95.053366999999994 39.630347,-95.054924999999997 39.624994999999991,-95.055024819926729 39.623527163368095,-95.055152000000007 39.621656999999992,-95.054958456554544 39.620961328886679,-95.053131423647116 39.614394255464305,-95.053011999999981 39.613965,-95.052555891387243 39.613278556984888,-95.047910999999999 39.606287999999999,-95.046445000000006 39.601605999999997,-95.046361000000005 39.599556999999997,-95.047165000000007 39.595117000000002,-95.049277000000004 39.589582999999998,-95.054804000000004 39.582487999999998,-95.056897000000006 39.580567000000002,-95.059518999999995 39.579132,-95.064519000000004 39.577114999999999,-95.066275551338904 39.576786470694117,-95.068266439890465 39.576414113098046,-95.069315000000003 39.576217999999997,-95.072159999999982 39.576121999999991,-95.075842551355763 39.576644128527029,-95.076688000000004 39.576763999999997,-95.088569515113861 39.580713698327401,-95.089515000000006 39.581028000000003,-95.09068217809525 39.58095107619048,-95.095736000000002 39.580618,-95.099095000000005 39.579690999999997,-95.100375015351446 39.579100080742663,-95.10182940536555 39.578428661399109,-95.103228 39.577782999999997,-95.106109962410699 39.575487768136732,-95.106244982404746 39.575380236480051,-95.106274453941239 39.575356764970024,-95.106406000000007 39.575251999999999,-95.107454000000004 39.573842999999997,-95.108931052511622 39.56997896968771,-95.109155613535791 39.569391508783276,-95.112830712234896 39.559777298955126,-95.112877844119652 39.559653999999995,-95.113077000000004 39.559132999999996,-95.113262990573148 39.557121201967142,-95.113516735173974 39.554376531201555,-95.113557 39.553940999999995,-95.113330390574859 39.553319942050457,-95.109694540741444 39.543355336910984,-95.109303999999995 39.542284999999993,-95.106595999999996 39.537657000000003,-95.106363136618171 39.537386330858773,-95.106309238275287 39.537323682029822,-95.102887999999993 39.533346999999999,-95.096713422649174 39.527826015970483,-95.095319522838992 39.526579663685382,-95.092703999999998 39.524241000000004,-95.082713999999996 39.516711999999998,-95.077440999999993 39.513551999999997,-95.059460999999985 39.506143000000002,-95.05637999999999 39.503971999999997,-95.052176999999986 39.499995999999996,-95.050551999999996 39.497514000000002,-95.049844999999991 39.494414999999989,-95.048370000000006 39.480420000000002,-95.047133000000002 39.474970999999996,-95.045715999999999 39.472459,-95.040779999999998 39.466386999999997,-95.03749999999998 39.463689000000002,-95.033407999999994 39.460875999999992,-95.028497999999999 39.458286999999999,-95.015825000000007 39.452809000000002,-94.995767999999998 39.448174000000002,-94.990172 39.446192000000003,-94.982144000000005 39.440551999999997,-94.978797999999998 39.436241000000003,-94.976606000000004 39.426701,-94.972952000000006 39.421705000000003,-94.968547467194298 39.418879728230785,-94.966981164652054 39.417875029083376,-94.966065999999998 39.417287999999999,-94.965430539155946 39.417093446959996,-94.954817000000006 39.413843999999997,-94.951209000000006 39.411706999999993,-94.947863999999996 39.408603999999997,-94.946292999999983 39.405645999999997,-94.946662000000003 39.399717000000003,-94.946226999999993 39.395648,-94.945577 39.393850999999998,-94.942038999999994 39.389499,-94.939696999999995 39.387949999999996,-94.938205659338905 39.38711651736979,-94.938199994953891 39.387113351650086,-94.938198708293527 39.387112632559479,-94.937157999999982 39.386530999999998,-94.933651999999995 39.385545999999998,-94.932170703908099 39.385397898493565,-94.923109999999994 39.384492000000002,-94.919224999999997 39.385173999999999,-94.915858999999998 39.386347999999998,-94.909581000000003 39.388865000000003,-94.901822999999993 39.392797999999999,-94.896448416922993 39.39340032396553,-94.894979000000006 39.393565000000002,-94.891845000000004 39.393312999999999,-94.888971999999995 39.392431999999999,-94.888058227506249 39.391822741147728,-94.885025999999996 39.389800999999999,-94.880978999999996 39.383899,-94.879281000000006 39.37977999999999,-94.879087999999996 39.375702999999994,-94.881359999999987 39.370382999999997,-94.885216 39.366911000000002,-94.890928000000002 39.364030999999997,-94.896832000000003 39.363135,-94.899023999999997 39.362431,-94.902496999999997 39.360382999999999,-94.90716104958679 39.35683832231404,-94.907297 39.356735,-94.907510470967722 39.356484333333356,-94.909408999999997 39.354254999999995,-94.910016999999996 39.352542999999997,-94.91007929967077 39.352122876579188,-94.910166635146069 39.351533921963672,-94.910234386079424 39.351077037464393,-94.910640999999998 39.348334999999999,-94.910055514481613 39.342727430625168,-94.908683540921714 39.329587162119807,-94.908064999999993 39.323663000000003,-94.906599414484603 39.317389801180319,-94.905982468129508 39.31474906332776,-94.905548856768945 39.312893060899633,-94.905328999999995 39.311951999999998,-94.904604536115073 39.31007473956825,-94.903592654247163 39.307452709910535,-94.903137 39.306272,-94.902341179156608 39.304705098857582,-94.900693838394318 39.301461629999167,-94.900362755471093 39.300809756886117,-94.900048999999996 39.300192000000003,-94.895217000000002 39.29420799999999,-94.889432625546704 39.288730528394183,-94.887056 39.286479999999997,-94.882576 39.283327999999997,-94.881425972827699 39.282735692772164,-94.879585687759075 39.281787876778168,-94.878319999999988 39.281135999999996,-94.869470269042495 39.278423959123423,-94.867567999999991 39.277841000000002,-94.866576416802303 39.277461598502107,-94.857072000000002 39.273825000000002,-94.850573678793964 39.270595179638669,-94.850470600187833 39.270543947117169,-94.846320000000006 39.268481,-94.844203868589133 39.266965084952687,-94.840994595225254 39.264666085108807,-94.837855000000005 39.262416999999999,-94.836102527271095 39.260730409704507,-94.834879550067882 39.259553409087879,-94.832501320107042 39.257264586268427,-94.832102355305352 39.256880620143498,-94.831470999999993 39.256273,-94.827487000000005 39.249888999999996,-94.826571473591798 39.245793223963304,-94.825663000000006 39.241728999999999,-94.826110999999983 39.238289000000002,-94.826405091238243 39.237538367125239,-94.827108391663188 39.2357432765168,-94.827791000000005 39.234000999999999,-94.828117769197533 39.233533772937683,-94.83244435695299 39.227347452739551,-94.834698551534771 39.224124319346686,-94.834896 39.223841999999998,-94.834917496024659 39.223414229109203,-94.835039139715306 39.220993519665384,-94.835046603087861 39.220844998551456,-94.835055999999994 39.220658,-94.833551999999997 39.217793999999998,-94.831678999999994 39.215938,-94.823791 39.209873999999999,-94.820687000000007 39.208626000000002,-94.811662999999996 39.206594000000003,-94.800359054554335 39.206051410618606,-94.799662999999995 39.206018,-94.798924306591658 39.206116812235138,-94.793913945984244 39.206787029303406,-94.788135068391796 39.207560047994349,-94.787343000000007 39.207666000000003,-94.783838000000003 39.207154000000003,-94.781518000000005 39.206145999999997,-94.780294078498926 39.205273290755756,-94.778971577769184 39.204330290235411,-94.777838000000003 39.203522,-94.775537999999997 39.200602000000003,-94.770897097034492 39.191141697801093,-94.770859400196969 39.191064854247678,-94.770337999999995 39.190002,-94.763137999999998 39.179903000000003,-94.75233799999998 39.173202999999994,-94.74193799999999 39.170203,-94.736536999999998 39.169203000000003,-94.723636999999997 39.169002999999989,-94.714136999999994 39.170403,-94.696331999999998 39.178562999999997,-94.687235999999999 39.183503000000002,-94.680335999999983 39.184303,-94.669134999999997 39.182003000000002,-94.663835000000006 39.179102999999998,-94.660314999999997 39.168050999999991,-94.662434999999988 39.157602999999995,-94.650734999999983 39.154102999999999,-94.640034999999997 39.153102999999994,-94.623934000000006 39.156602999999997,-94.615834000000007 39.160003000000003,-94.608834000000002 39.160502999999999,-94.601732999999996 39.15960299999999,-94.596033000000006 39.157702999999998,-94.591932999999997 39.155003,-94.589933000000002 39.140402999999999,-94.592533000000003 39.135902999999992,-94.600433999999993 39.128503000000002,-94.605733999999998 39.122204000000004,-94.607033999999999 39.119404000000003,-94.607354 39.113444,-94.607234000000005 39.089604,-94.607333999999994 39.081703999999995,-94.607275518421304 39.072346947409343,-94.607234000000005 39.065703999999997,-94.607342812841125 39.057404745686583,-94.60738379566331 39.05427894858029,-94.607437239929951 39.050202705779334,-94.607518499034526 39.044004999999999,-94.607559479691474 39.040879368039988,-94.607612854426819 39.036808428453341,-94.60764748233197 39.034167326647299,-94.607654028188094 39.033668068249817,-94.60769507925167 39.030537066312085,-94.607898722639391 39.015005000000002,-94.607914652765047 39.013789994834404,-94.607991843462372 39.007902590176151,-94.608087526605189 39.000604749887366,-94.608092759229436 39.000205652880325,-94.608190956218394 38.992716079262479,-94.608212339138063 38.991085184540211,-94.608264438806202 38.98711149548862,-94.608279957450691 38.985927874365181,-94.608301211867541 38.984306780669819,-94.608333999999999 38.981805999999999,-94.608294286905348 38.97390309416464,-94.608273484679671 38.969763451253407,-94.608249262127771 38.964943163424849,-94.608207879518076 38.956708024096379,-94.608134000000007 38.942005999999999,-94.608134000000007 38.940005999999997,-94.607866 38.937398000000002,-94.607977999999989 38.936869999999992,-94.608002838442587 38.912906322207348,-94.608006216770249 38.909646973100827,-94.608010407202343 38.90560412040071,-94.608022064178897 38.894357681354862,-94.60802273861259 38.893706999999999,-94.608033000000006 38.883806999999997,-94.608033000000006 38.869207000000003,-94.608033000000006 38.868107000000002,-94.607992999999993 38.867271000000002,-94.608033000000006 38.861207,-94.608033000000006 38.855007,-94.608033000000006 38.850107,-94.608033000000006 38.847206999999997,-94.607624999999999 38.827559999999991,-94.607668973053535 38.825816299300072,-94.608041 38.811064000000002,-94.608617609754887 38.781926100280451,-94.609398999999996 38.742440000000002,-94.60945599999998 38.74069999999999,-94.609507757106428 38.73815999467709,-94.609625656590424 38.7323740198146,-94.610322172686637 38.698192151600097,-94.61071084056907 38.679118085101081,-94.61073851283922 38.677760054904219,-94.611602000000005 38.635384000000002,-94.611464999999995 38.625011,-94.611857999999998 38.620485000000002,-94.611908 38.609271999999997,-94.611905562149673 38.605890005062435,-94.611886999999996 38.580139000000003,-94.611902 38.580109999999998,-94.612176000000005 38.576546,-94.612156999999996 38.549816999999997,-94.612272000000004 38.547916999999998,-94.612464742072774 38.518760616499996,-94.612644000000003 38.491644,-94.612725999999995 38.484366999999999,-94.612696 38.483153999999999,-94.612865999999997 38.477570999999998,-94.613365000000002 38.403421999999999,-94.613264999999998 38.392426,-94.613275404637193 38.388718047420433,-94.613328999999993 38.369617999999996,-94.613311999999993 38.364407,-94.613085455228386 38.3436360393057,-94.612999999999985 38.335800999999996,-94.612825 38.324387000000002,-94.612787999999995 38.320141999999997,-94.612673 38.314832000000003,-94.612673 38.302526999999998,-94.612689368276676 38.301464114946214,-94.612843999999996 38.291422999999995,-94.612848999999997 38.289914000000003,-94.612707829046002 38.272362044447966,-94.612691999999996 38.270394000000003,-94.612613999999994 38.237766,-94.612634999999997 38.226987,-94.612658999999994 38.219251,-94.61265866950464 38.21872154645218,-94.612657999999982 38.217649000000002,-94.612821999999994 38.203918000000002,-94.612848 38.200713999999998,-94.613073 38.190551999999997,-94.61341774677895 38.168183959706163,-94.613422 38.16790799999999,-94.613748 38.160632999999997,-94.613855999999998 38.149768999999999,-94.613889466360249 38.136312911169284,-94.613919497343275 38.124238112111762,-94.614061000000007 38.067343,-94.614088999999993 38.065900999999997,-94.614054999999993 38.060088,-94.613980999999995 38.036949,-94.614211999999981 37.992462000000003,-94.614464999999996 37.987798999999995,-94.614511123427164 37.979395512107736,-94.614514360688489 37.978805697169918,-94.614557000000005 37.971036999999995,-94.614561999999992 37.951517000000003,-94.614593999999997 37.949977999999994,-94.614611999999994 37.944361999999998,-94.614754000000005 37.940769000000003,-94.614834999999999 37.936700000000002,-94.614778 37.934199999999997,-94.615181000000007 37.915944000000003,-94.615392999999983 37.906391999999997,-94.61546899999999 37.901775,-94.615706000000003 37.886842999999999,-94.615921 37.878331000000003,-94.615834000000007 37.872509999999998,-94.616 37.863126,-94.616282760205394 37.851281931678621,-94.616426000000004 37.845281999999997,-94.616433230053673 37.842955730230052,-94.61645 37.837560000000003,-94.616861999999998 37.819456000000002,-94.6176681324215 37.775831003788085,-94.617720999999989 37.77297,-94.617737774720197 37.764628336555312,-94.617744979193901 37.761045725680312,-94.617807999999997 37.729706999999998,-94.617975 37.722175999999997,-94.61780499999999 37.690178000000003,-94.617650999999995 37.687671000000002,-94.617687000000004 37.686652999999993,-94.617885 37.682214000000002,-94.617733999999999 37.673127,-94.617576 37.653671000000003,-94.617517909436387 37.643988652624088,-94.61747699999998 37.637169999999998,-94.617472819127315 37.636539916507168,-94.6173 37.610495,-94.617428000000004 37.609521999999998,-94.617283 37.571896000000002,-94.617315000000005 37.571498999999996,-94.617080999999999 37.567013000000003,-94.61711240153133 37.563155381499406,-94.617159999999984 37.557307999999999,-94.617186000000004 37.553485000000002,-94.617167532949537 37.551779056391354,-94.616988484457494 37.535238968895172,-94.616907999999981 37.527804000000003,-94.616788999999997 37.521509999999999,-94.616880369657522 37.506771761864755,-94.617022999999989 37.483764999999998,-94.617182999999997 37.469664999999999,-94.617180000000005 37.465203000000002,-94.617221999999998 37.460476,-94.617204999999984 37.46037299999999,-94.617200999999994 37.454788,-94.617131999999998 37.439818000000002,-94.617265000000003 37.425535999999994,-94.617510999999993 37.410908999999997,-94.617557000000005 37.396374999999999,-94.61759158917468 37.381725975861251,-94.617625000000004 37.367576,-94.617626 37.367444999999989,-94.617536999999999 37.364355000000003,-94.617636000000005 37.338417,-94.617694999999998 37.336841999999997,-94.617648000000003 37.323588999999998,-94.61807499999999 37.240436000000003,-94.618157999999994 37.237596999999994,-94.618122999999997 37.229334,-94.61815 37.228121000000002,-94.618218999999996 37.207771999999999,-94.618305000000007 37.207337000000003,-94.618319 37.188774000000002,-94.618504999999985 37.181184000000002,-94.618472999999994 37.174782,-94.618351000000004 37.160210999999997,-94.618071999999998 37.132345,-94.61807499999999 37.129755000000003,-94.61816441512984 37.118929895303054,-94.618212 37.113168999999992,-94.618150999999997 37.103968000000002,-94.618059000000002 37.096676000000002,-94.618088 37.093670999999993,-94.618089999999995 37.093494,-94.618085255103864 37.089305442941992,-94.618082 37.086432000000002,-94.61811999999999 37.085934000000002,-94.617981999999998 37.075077,-94.617954311863897 37.070346986543974,-94.617947706480578 37.069218577181687,-94.617910161110728 37.062804634983031,-94.617893975984089 37.060039701061122,-94.617874999999998 37.056798,-94.617877538275181 37.056339390079508,-94.617964999999998 37.040537,-94.617972200190749 37.032971759572447,-94.617994999999979 37.009015999999995,-94.618027702303792 37.004829720380044,-94.618080000000006 36.998134999999998,-94.625223999999989 36.998671999999999,-94.699735000000004 36.998804999999997,-94.701796999999999 36.998814000000003,-94.711286363060864 36.99879670415919,-94.712770000000006 36.99879399999999,-94.722629184733563 36.998741903378082,-94.732834603466486 36.998687977231512,-94.736330645670293 36.998669503899912,-94.737183000000002 36.998665000000003,-94.739323999999996 36.998686999999997,-94.745992043692311 36.998700535427304,-94.749560781475736 36.99870777958963,-94.749834600019099 36.998708335412474,-94.777257000000006 36.998764,-94.831280000000007 36.998812,-94.831539962039543 36.998812565955092,-94.840925999999996 36.998832999999998,-94.846637705524785 36.998860673615503,-94.849800999999999 36.998875999999996,-94.853196999999994 36.998874,-94.896852168601683 36.999075231107383,-94.904605402657381 36.99911097010289,-94.9407882710602 36.999277757196154,-94.995293000000004 36.999528999999995,-95.007620000000003 36.999513999999998,-95.011432999999997 36.999535000000002,-95.030323999999993 36.999516999999997,-95.037857000000002 36.999496999999998,-95.049498999999983 36.999580000000002,-95.073509 36.999509000000003,-95.1405498515593 36.999533623834409,-95.155186999999998 36.999538999999999,-95.155372 36.999540000000003,-95.159067907556633 36.999536629205572,-95.177300999999986 36.999519999999997,-95.195307 36.999564999999997,-95.267905305061163 36.999446910377756,-95.285983101167361 36.999417504731007,-95.322564999999997 36.999357999999994,-95.328057999999999 36.999364999999997,-95.328326999999987 36.999366000000002,-95.331209999999999 36.999380000000002,-95.377252424658963 36.999296311678272,-95.381753803085687 36.999288129815376,-95.407683000000006 36.999240999999998,-95.511578 36.999234999999999,-95.522414951940931 36.999281058114107,-95.534401000000003 36.999332000000003,-95.573598000000004 36.999309999999994,-95.601517312742303 36.999317968253862,-95.612139999999997 36.999321000000002,-95.615933999999996 36.999364999999997,-95.621011943860609 36.999361983160732,-95.624350000000007 36.999360000000003,-95.630078999999995 36.999319999999997,-95.638122589416028 36.999320470082949,-95.664300999999995 36.999321999999999,-95.674044398562955 36.999333876292773,-95.686452000000003 36.999349000000002,-95.696658999999997 36.999215,-95.71038 36.999370999999996,-95.710782524132014 36.999362783399121,-95.714887000000004 36.999279,-95.718053999999995 36.999254999999998,-95.741907999999995 36.999243999999997,-95.746466244276931 36.999250838506164,-95.759905000000003 36.999270999999993,-95.768719000000004 36.999205000000003,-95.786761999999996 36.999309999999994,-95.807979999999986 36.999124000000002,-95.819364496908179 36.999150471530008,-95.866899000000004 36.999260999999997,-95.873943999999995 36.999299999999998,-95.875256999999991 36.999302,-95.877150999999998 36.999304000000002,-95.910179999999997 36.999336,-95.928122000000002 36.999245000000002,-95.936991999999989 36.999267999999994,-95.964270378114222 36.999093604402042,-96.00081 36.99886,-96.095164142267308 36.998935940299688,-96.14121 36.998972999999999,-96.143207000000004 36.999133999999998,-96.147143 36.999021999999997,-96.149709 36.99904,-96.152383999999998 36.999050999999994,-96.154016999999982 36.999161,-96.184768000000005 36.999211000000003,-96.200028000000003 36.999028000000003,-96.217571000000007 36.999070000000003,-96.235320025971774 36.999130675786525,-96.27480962492784 36.999265672629733,-96.276368000000005 36.999270999999993,-96.279078999999996 36.999271999999991,-96.381556872639493 36.999226629434901,-96.394272 36.999220999999999,-96.415412000000003 36.999113,-96.500287999999998 36.998643,-96.525212323286397 36.998711038495294,-96.525495980566973 36.998711812823821,-96.551130926932458 36.998781791180214,-96.551130927020779 36.998781791180456,-96.624487489749981 36.998982040153741,-96.705431000000004 36.999203,-96.710481999999999 36.999270999999993,-96.731983006833033 36.99928335311408,-96.736589999999993 36.999285999999998,-96.741269999999986 36.999239000000003,-96.749837999999997 36.998987999999997,-96.792060000000006 36.999179999999996,-96.795198999999997 36.99886,-96.822790999999995 36.999181999999998,-96.867517000000007 36.999217000000002,-96.876289999999997 36.999232999999997,-96.902083000000005 36.999155000000002,-96.903509999999997 36.999132000000003,-96.917092999999994 36.999181999999998,-96.921914999999998 36.999150999999998,-96.924934279563146 36.999131784030439,-96.934641999999997 36.999070000000003,-96.967371 36.999066999999997,-96.975561999999996 36.999018999999997,-97.030081999999979 36.998928999999997,-97.039783999999983 36.999000000000002,-97.045562883576096 36.99899981011751,-97.100651999999997 36.998998,-97.104275999999999 36.999020000000002,-97.120284999999996 36.999014000000003,-97.122596999999999 36.999035999999997,-97.147721000000004 36.999110999999999,-97.202000013134437 36.999050609464689,-97.255829185181881 36.998990719420135,-97.342808466604069 36.998893946743877,-97.362376892203329 36.998872175019791,-97.364929972745273 36.99886933447624,-97.372421000000003 36.998860999999998,-97.384924999999996 36.998843,-97.462279999999993 36.998685000000002,-97.472860999999995 36.998721000000003,-97.527292000000003 36.998749999999994,-97.545899999999989 36.998708999999991,-97.546497999999985 36.998746999999995,-97.564536000000004 36.998711,-97.582460039051355 36.99869862770732,-97.606549 36.998682000000002,-97.637136999999996 36.999090000000002,-97.650465999999994 36.999003999999999,-97.692180007144742 36.998844793059916,-97.697103999999982 36.998826,-97.768704 36.998749999999994,-97.783432000000005 36.998961,-97.783489000000003 36.998846999999998,-97.802297999999979 36.998713000000002,-97.965379045838461 36.998468720211747,-98.033955000000006 36.998365999999997,-98.03989 36.998348999999997,-98.045341999999991 36.998327000000003,-98.111985000000004 36.998133000000003,-98.128185436781749 36.99814624647324,-98.147452 36.998162,-98.177595999999994 36.998008999999996,-98.190367496841162 36.998003995168112,-98.208218000000002 36.997996999999998,-98.219498999999999 36.997824,-98.237712000000002 36.99797199999999,-98.346187999999984 36.997962,-98.347186011230875 36.997961873429141,-98.354073 36.997960999999997,-98.408991 36.998513000000003,-98.418267999999998 36.998538000000003,-98.420209 36.998516000000002,-98.476584655565659 36.998733519956424,-98.485495952453391 36.998767903324406,-98.544871999999984 36.998997000000003,-98.622244241689657 36.999025734091177,-98.714511999999999 36.99906,-98.718464999999995 36.999179999999996,-98.761596999999995 36.999425000000002,-98.791936000000007 36.999254999999998,-98.793711000000002 36.999226999999991,-98.797451999999993 36.999228999999993,-98.811832237742053 36.99924038482925,-98.869449000000003 36.999285999999998,-98.880009 36.999262999999999,-98.880579999999995 36.999308999999997,-98.994371 36.999493,-99.000846251360556 36.99951188908193,-99.029336999999998 36.999594999999999,-99.044703416105833 36.999312701167916,-99.049695 36.999220999999999,-99.124882999999997 36.99942,-99.12944899999998 36.999422000000003,-99.215429691089184 36.999525607779709,-99.221470798208784 36.999532887387339,-99.22594390512576 36.999538277535649,-99.248119999999986 36.999564999999997,-99.277506000000002 36.999578999999997,-99.375390999999993 37.000176999999994,-99.375813215185289 37.000169016042221,-99.396673054015949 36.999774562980598,-99.407015 36.999578999999997,-99.456202999999988 36.999471,-99.484333000000007 36.999625999999999,-99.500394999999983 36.99957599999999,-99.500394999999983 36.999637,-99.502664999999993 36.999645,-99.504092999999997 36.999648,-99.508573999999982 36.999657999999997,-99.541115670095081 36.999572526667627,-99.558068000000006 36.999527999999998,-99.625399000000002 36.999670999999999,-99.648651999999998 36.999603999999998,-99.657657999999998 37.000197,-99.675479899119665 37.000294824261658,-99.700804554289192 37.000433831091229,-99.722499410223932 37.000552913981863,-99.774254999999997 37.000836999999997,-99.774816 37.000841,-99.786016000000004 37.000931,-99.875408999999991 37.001658999999997,-99.904897139036905 37.001652107487203,-99.995200999999994 37.001631000000003,-100.001285999999993 37.001699000000002,-100.002562999999995 37.001705999999999,-100.005706000000004 37.001725999999998,-100.08949117994996 37.002091554886341,-100.115721999999991 37.002206,-100.187546999999995 37.002082,-100.19237099999998 37.002035999999997,-100.193753999999998 37.002133,-100.201675999999992 37.002080999999997,-100.269984573601874 37.001795796937508,-100.395563941387664 37.001271475927872,-100.434302684862132 37.001109733298897,-100.434343961694367 37.0011095609592,-100.436759028295029 37.001099477534027,-100.462594151135718 37.000991610310841,-100.526354155903263 37.000725398506596,-100.551597999999998 37.000619999999998,-100.552683000000002 37.000734999999999,-100.591328000000004 37.000376000000003,-100.591413000000003 37.000399000000002,-100.629769999999994 37.000025,-100.63332699999998 36.999935999999998,-100.675551999999996 36.999687999999999,-100.734516999999997 36.999059000000003,-100.756894000000003 36.999356999999996,-100.759718826764541 36.999297806889686,-100.765484 36.999177000000003,-100.806116000000003 36.999091,-100.814277000000004 36.999085,-100.850054835707368 36.998687920265262,-100.855633999999981 36.998626000000002,-100.891659999999987 36.998604,-100.904274 36.998745,-100.904588000000004 36.998561000000002,-100.945565999999985 36.998151999999997,-100.958261085233985 36.99812508251128,-100.996501999999992 36.998044,-101.012641000000002 36.998176,-101.053589000000002 36.997966999999996,-101.066742000000005 36.997920999999998,-101.096255470166753 36.997758490771822,-101.211485999999979 36.997123999999999,-101.212908999999996 36.997044000000002,-101.283204233333976 36.996668964004151,-101.357796999999991 36.996271,-101.359673999999998 36.996231999999999,-101.37818 36.996164,-101.413867999999994 36.996008000000003,-101.415004999999994 36.995966000000003,-101.485326 36.995610999999997,-101.519065999999995 36.99554599999999,-101.555239 36.99541399999999,-101.600396000000003 36.995152999999995,-101.601592999999994 36.995094999999999,-101.672152845644291 36.994768289529276,-101.672152845650672 36.994768289529254,-101.718235173867967 36.994554916342196,-101.761767880686108 36.994353348566563,-101.826607533764985 36.994053124077894,-101.862548907230888 36.993886706153717,-101.881050066963184 36.993801040963412,-101.899294480822903 36.993716564573397,-101.902439999999999 36.993701999999999,-101.905152836625547 36.993689460946754,-101.93521516037174 36.99355050931414,-102.000446999999994 36.993248999999992,-102.000446999999994 36.993271999999997,-102.028206999999981 36.993124999999999,-102.042240000000007 36.993082999999999,-102.041951999999995 37.024741999999996,-102.04195 37.030805,-102.041921000000002 37.032178000000002,-102.041748999999996 37.034396999999998,-102.04191999999999 37.035083,-102.041983000000002 37.106551000000003,-102.041808999999986 37.111972999999999,-102.042091999999997 37.125020999999997,-102.042135000000002 37.125020999999997,-102.042121535383529 37.12671399835564,-102.042001999999997 37.141744000000003,-102.041962999999996 37.258164,-102.041663999999997 37.29764999999999,-102.041816999999995 37.309489999999997,-102.041973999999996 37.352612999999998,-102.042089000000004 37.352818999999997,-102.041523999999995 37.375017999999997,-102.041585760607518 37.389190434149839,-102.041675999999981 37.409897999999991,-102.041668999999999 37.434739999999998,-102.041754999999995 37.434854999999992,-102.041800999999992 37.469487999999998,-102.041786000000002 37.506065999999997,-102.04201599999999 37.535260999999998,-102.041899 37.541186000000003,-102.041893999999999 37.557977,-102.041618 37.607868000000003,-102.041584999999998 37.644281999999997,-102.041581999999991 37.654494999999997,-102.041694000000007 37.665680999999999,-102.041573999999997 37.680436,-102.041876000000002 37.723875,-102.041989965869121 37.73854062916552,-102.042158 37.760164000000003,-102.042668000000006 37.788758,-102.042952999999997 37.803534999999997,-102.043032999999994 37.824145999999999,-102.043218999999993 37.86792899999999,-102.043714531331204 37.914003914798144,-102.043845000000005 37.926135000000002,-102.043844000000007 37.928101999999996,-102.044644000000005 38.045532,-102.044255000000007 38.113010999999993,-102.044450868202546 38.120049353793199,-102.044589000000002 38.125012999999996,-102.044415729020699 38.133607343100145,-102.044251000000003 38.141777999999995,-102.044296878804843 38.175558844899406,-102.044398 38.250014999999998,-102.044510721728557 38.262483349316234,-102.044567999999998 38.268819,-102.044612999999998 38.312323999999997,-102.044944 38.384419,-102.044441999999989 38.415801999999999,-102.044936000000007 38.41968,-102.045323999999979 38.453646999999997,-102.045262999999991 38.505395,-102.045261999999994 38.505531999999995,-102.045112000000003 38.523783999999999,-102.045222999999993 38.543796999999998,-102.045188999999979 38.558731999999992,-102.045210999999995 38.581608999999993,-102.045287999999999 38.615248999999999,-102.045074 38.669617000000002,-102.045102 38.674945999999998,-102.045159999999996 38.675221,-102.045126999999994 38.686725000000003,-102.045156000000006 38.688555,-102.045211999999992 38.697566999999999,-102.045375000000007 38.754338999999995,-102.045287000000002 38.755527999999998,-102.045371000000003 38.770063999999998,-102.045447999999993 38.783453000000002,-102.045333999999997 38.799463000000003,-102.045387999999988 38.813391999999993,-102.046570999999986 39.047038,-102.047133999999986 39.129700999999997,-102.047188612927897 39.133146793270186,-102.047250000000005 39.13702,-102.047851021058236 39.220289738242592,-102.048449000000005 39.30313799999999,-102.04895999999998 39.37371199999999,-102.049100972149461 39.394064428437375,-102.049166999999983 39.403596999999998,-102.049369999999996 39.418210000000002,-102.049368999999999 39.423333,-102.049678999999998 39.506183,-102.049672999999999 39.536690999999998,-102.049553999999986 39.538932000000003,-102.049763758475066 39.568170000775439,-102.04980599999999 39.574058,-102.049954 39.592331,-102.050258163748609 39.627242889069393,-102.050421999999983 39.646047999999993,-102.050099000000003 39.653812000000002,-102.05059399999999 39.67559399999999,-102.050898693231389 39.741794606053567,-102.051254 39.818992,-102.051317999999995 39.833311000000002,-102.051362999999995 39.843471,-102.051569 39.849805000000003,-102.051743999999999 40.003078000000002))');
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/state.sqlite3.sql	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
--- State border data courtesy of U.S. Census Bureau Cartographic Boundary Files: http://www.census.gov/geo/www/cob/st2000.html
--- Boundary file data is a product of the U.S. federal government and is public domain.  See 17 U.S.C. 105.
-INSERT INTO geoapp_state ("name", "poly") VALUES ('Puerto Rico', NULL);
-INSERT INTO geoapp_state ("name", "poly") VALUES ('Colorado', GeomFromText('POLYGON ((-107.918420999999981 41.002035999999997,-107.69133582431418 41.002104250342249,-107.625624000000002 41.002124000000002,-107.521505363272311 41.002506710525772,-107.367442999999994 41.003073,-107.317794462401125 41.002967213367114,-107.305312956219666 41.00294061889776,-107.241193999999993 41.002803999999998,-107.000606000000005 41.003443999999995,-106.857772999999995 41.002662999999991,-106.453858999999994 41.002056999999994,-106.439563000000007 41.001978,-106.437419000000006 41.001794999999994,-106.430949999999996 41.001751999999996,-106.391852 41.001176,-106.386356000000006 41.001143999999996,-106.321164999999993 40.999122999999997,-106.217573000000002 40.997734,-106.194624254510543 40.99762614711792,-106.190540579491184 40.997606954952467,-106.061180999999991 40.996999000000002,-105.764246857267409 40.99689755617932,-105.730421000000007 40.996886000000003,-105.724804000000006 40.99691,-105.554417704421283 40.997390710823062,-105.412220703167577 40.997791891195448,-105.277137999999979 40.998173,-105.256527000000006 40.998190999999998,-105.254778999999999 40.99821,-105.173435761678107 40.998177015252317,-104.943370680568208 40.998083723679372,-104.855272999999997 40.998047999999997,-104.829503999999986 40.999270000000003,-104.675999000000004 41.000957,-104.497148999999993 41.001828000000003,-104.497057999999996 41.001804999999997,-104.467671999999979 41.001472999999997,-104.214691999999999 41.001657000000002,-104.214191 41.001567999999999,-104.211472999999998 41.001590999999998,-104.123585999999989 41.001625999999995,-104.104590000000002 41.001542999999991,-104.086067999999983 41.001562999999997,-104.066960999999992 41.001503999999997,-104.053248999999994 41.001405999999996,-104.039237999999997 41.001502000000002,-104.023382999999981 41.001887000000004,-104.018223000000006 41.001617000000003,-104.010804886779724 41.00161667450854,-103.972641999999979 41.001615,-103.971373 41.001524000000003,-103.953524999999999 41.001595999999999,-103.906323999999998 41.001387,-103.896207000000004 41.00175,-103.877966999999998 41.00167299999999,-103.858448999999993 41.001680999999998,-103.750497999999993 41.002054,-103.574522000000002 41.001721000000003,-103.497446999999994 41.001635,-103.486697000000007 41.001913999999999,-103.421975000000003 41.002006999999999,-103.421925000000002 41.001968999999995,-103.396990999999986 41.002558,-103.365313999999984 41.001846,-103.362978999999996 41.001843999999991,-103.077804 41.002298000000003,-103.076536000000004 41.002253000000003,-103.059537999999989 41.002367999999997,-103.057997999999998 41.002367999999997,-103.043443999999994 41.002344,-103.038703999999996 41.002251,-103.002026 41.002485999999998,-103.000101999999984 41.002400000000002,-102.982690000000005 41.002156999999997,-102.981482999999997 41.002111999999997,-102.963668999999982 41.002185999999995,-102.962522000000007 41.002071999999998,-102.960706000000002 41.002058999999996,-102.959623999999991 41.002094999999997,-102.944829999999996 41.002302999999998,-102.943109000000007 41.002051000000002,-102.925567999999998 41.002279999999999,-102.924029000000004 41.002141999999999,-102.906546999999989 41.002275999999995,-102.904796000000005 41.002206999999999,-102.887406999999982 41.002178,-102.885745999999997 41.002130999999999,-102.867822000000004 41.002183000000002,-102.865783999999991 41.001987999999997,-102.849262999999993 41.002301000000003,-102.846455000000006 41.002256000000003,-102.830302999999986 41.002350999999997,-102.827280000000002 41.002142999999997,-102.773545999999996 41.002414000000002,-102.766722999999999 41.00227499999999,-102.754616999999996 41.002360999999993,-102.739623999999992 41.002229999999997,-102.653462999999988 41.002332000000003,-102.621032999999997 41.002597000000002,-102.578695999999994 41.002291,-102.575738 41.002268,-102.575496 41.002200000000002,-102.566047999999995 41.002200000000002,-102.556788999999995 41.002218999999997,-102.517701071582451 41.002347335877943,-102.487954999999985 41.002444999999994,-102.470536999999979 41.002381999999997,-102.469223 41.002423999999998,-102.460334593696913 41.00241180236555,-102.387750989484957 41.002312195277327,-102.380372991932845 41.002302070389462,-102.379593 41.002301000000003,-102.364065999999994 41.002173999999997,-102.292833000000002 41.002206999999999,-102.292621999999994 41.002229999999997,-102.292552999999998 41.002206999999999,-102.291353999999998 41.002206999999999,-102.277803455573988 41.002233743569548,-102.272099999999995 41.002245000000002,-102.267811999999992 41.002383000000002,-102.231931000000003 41.002327,-102.212199999999982 41.002462,-102.209361 41.002442000000002,-102.209083936251005 41.002440229332002,-102.207776055197755 41.002431870883314,-102.191209999999998 41.002325999999996,-102.124972 41.002338000000002,-102.070598000000004 41.002423,-102.051614 41.002377000000003,-102.051291999999989 40.749591000000002,-102.051634432607003 40.582129592617228,-102.051725000000005 40.537838999999991,-102.051518999999999 40.520094,-102.051464999999993 40.440007999999999,-102.051839999999999 40.396396000000003,-102.051571999999993 40.393079999999998,-102.051797999999991 40.360069000000003,-102.051585542616536 40.350646145741024,-102.051309000000003 40.338380999999998,-102.051922000000005 40.235343999999998,-102.05189399999999 40.229192999999995,-102.051908999999995 40.162674000000003,-102.052001000000004 40.148358999999999,-102.051852600888665 40.064469617536822,-102.051743999999999 40.003078000000002,-102.051715564657869 39.978173027456265,-102.051569 39.849805000000003,-102.051362999999995 39.843471,-102.051317999999995 39.833311000000002,-102.051254 39.818992,-102.05059399999999 39.67559399999999,-102.050099000000003 39.653812000000002,-102.050421999999983 39.646047999999993,-102.049954 39.592331,-102.04980599999999 39.574058,-102.049553999999986 39.538932000000003,-102.049672999999999 39.536690999999998,-102.049678999999998 39.506183,-102.049368999999999 39.423333,-102.049369999999996 39.418210000000002,-102.049166999999983 39.403596999999998,-102.04895999999998 39.37371199999999,-102.048449000000005 39.30313799999999,-102.047250000000005 39.13702,-102.047133999999986 39.129700999999997,-102.046570999999986 39.047038,-102.045387999999988 38.813391999999993,-102.045333999999997 38.799463000000003,-102.045447999999993 38.783453000000002,-102.045371000000003 38.770063999999998,-102.045287000000002 38.755527999999998,-102.045375000000007 38.754338999999995,-102.045211999999992 38.697566999999999,-102.045156000000006 38.688555,-102.045126999999994 38.686725000000003,-102.045159999999996 38.675221,-102.045102 38.674945999999998,-102.045074 38.669617000000002,-102.045287999999999 38.615248999999999,-102.045210999999995 38.581608999999993,-102.045188999999979 38.558731999999992,-102.045222999999993 38.543796999999998,-102.045112000000003 38.523783999999999,-102.045261999999994 38.505531999999995,-102.045262999999991 38.505395,-102.045323999999979 38.453646999999997,-102.044936000000007 38.41968,-102.044441999999989 38.415801999999999,-102.044944 38.384419,-102.044612999999998 38.312323999999997,-102.044567999999998 38.268819,-102.044398 38.250014999999998,-102.044251000000003 38.141777999999995,-102.044535323623649 38.127675380028528,-102.044589000000002 38.125012999999996,-102.044540277332047 38.123262193231092,-102.044255000000007 38.113010999999993,-102.04462354493468 38.04908029653749,-102.044631007072184 38.047785855466316,-102.044644000000005 38.045532,-102.044620085883125 38.042021706570637,-102.044539342086111 38.030169526464491,-102.043844000000007 37.928101999999996,-102.043845000000005 37.926135000000002,-102.043218999999993 37.86792899999999,-102.043032999999994 37.824145999999999,-102.042952999999997 37.803534999999997,-102.042668000000006 37.788758,-102.042158 37.760164000000003,-102.041876000000002 37.723875,-102.041573999999997 37.680436,-102.041694000000007 37.665680999999999,-102.041581999999991 37.654494999999997,-102.041584999999998 37.644281999999997,-102.041618 37.607868000000003,-102.041779405839492 37.578691555295826,-102.041893999999999 37.557977,-102.041899 37.541186000000003,-102.04201599999999 37.535260999999998,-102.041786000000002 37.506065999999997,-102.041800999999992 37.469487999999998,-102.041754999999995 37.434854999999992,-102.041668999999999 37.434739999999998,-102.041675999999981 37.409897999999991,-102.041523999999995 37.375017999999997,-102.042089000000004 37.352818999999997,-102.041973999999996 37.352612999999998,-102.041816999999995 37.309489999999997,-102.041663999999997 37.29764999999999,-102.041962999999996 37.258164,-102.042001999999997 37.141744000000003,-102.042135000000002 37.125020999999997,-102.042091999999997 37.125020999999997,-102.041808999999986 37.111972999999999,-102.041983000000002 37.106551000000003,-102.04191999999999 37.035083,-102.041748999999996 37.034396999999998,-102.041921000000002 37.032178000000002,-102.04195 37.030805,-102.041951999999995 37.024741999999996,-102.042240000000007 36.993082999999999,-102.054502999999997 36.993108999999997,-102.184270999999995 36.993592999999997,-102.208315999999996 36.993729999999999,-102.260789000000003 36.994388,-102.270345681835295 36.994399933337462,-102.307593650497381 36.994446444520669,-102.355288000000002 36.994505999999994,-102.355367 36.994574999999998,-102.698142000000004 36.995148999999998,-102.742059999999981 36.997689,-102.759860000000003 37.000019000000002,-102.77856899999999 36.999242000000002,-102.806762000000006 37.000019000000002,-102.814616 37.000782999999998,-102.841988999999998 36.999597999999999,-102.979613 36.998548999999997,-102.985806999999994 36.998570999999998,-102.986975999999999 36.998524000000003,-103.002199000000005 37.000104,-103.086104969413952 37.000173865694038,-103.10540536532865 37.000189936488113,-103.155922000000004 37.000231999999997,-103.200631728472104 37.000060386509688,-103.327177769406262 36.999574653124313,-103.425678872433053 36.999196567220693,-103.733247000000006 36.998015999999993,-103.734363999999985 36.998041,-104.007854999999992 36.996239000000003,-104.215475488463966 36.994874432196589,-104.250535999999983 36.994644,-104.29757064295984 36.994053250381747,-104.338832999999994 36.993535,-104.355650525350313 36.993556531771581,-104.366447685535107 36.993570355564437,-104.399202882083287 36.993612292614962,-104.429769386650008 36.993651427444888,-104.480610316975273 36.993716519976395,-104.519256999999996 36.993765999999994,-104.624555999999998 36.994376999999993,-104.625545000000002 36.993599000000003,-104.645028999999994 36.993377999999993,-104.706112207267154 36.993426444188657,-104.732031000000006 36.993447000000003,-104.732119999999981 36.993484000000002,-104.839990412520109 36.993395592828207,-105.00055399999998 36.993264000000003,-105.029227999999989 36.99272899999999,-105.120800000000003 36.995427999999997,-105.155041964101514 36.995339147158163,-105.220613 36.995168999999997,-105.251295999999996 36.995604999999998,-105.419309999999996 36.995856000000003,-105.438102743613229 36.995968030697597,-105.442458999999999 36.995994000000003,-105.447254999999998 36.996016999999995,-105.465181999999999 36.995990999999997,-105.47087670692585 36.995978476706256,-105.508835999999988 36.99589499999999,-105.512484999999998 36.995776999999997,-105.533922000000004 36.995874999999998,-105.627469999999988 36.995679000000003,-105.664719999999988 36.995874,-105.716470999999999 36.995848999999993,-105.718407304549174 36.995846016149208,-105.996159000000006 36.995418,-105.997472000000002 36.995417000000003,-106.006633999999991 36.995342999999998,-106.099805867433119 36.994759106704976,-106.163971382218094 36.994356991615014,-106.201468999999989 36.994121999999997,-106.247704999999996 36.994266000000003,-106.248675000000006 36.99428799999999,-106.293278999999998 36.99389,-106.32542867882475 36.994109231664673,-106.343138999999979 36.994230000000002,-106.476277952851959 36.993839335051021,-106.500589000000005 36.993767999999996,-106.617159 36.992967,-106.617124999999987 36.993003999999999,-106.628652000000002 36.993175,-106.628732999999983 36.993160999999994,-106.661344 36.993243,-106.675625999999994 36.993122999999997,-106.750591 36.992460999999999,-106.782095289714647 36.992451749967366,-106.869795999999994 36.992425999999995,-106.877291999999983 37.00013899999999,-106.918886463342702 37.000128747161924,-106.95601836457638 37.000119594324254,-107.107262626744514 37.000082313330452,-107.255202723469637 37.000045846797775,-107.420912999999999 37.000004999999994,-107.422415013680663 37.000004989636103,-107.442181999144324 37.000004853243873,-107.481737001398656 37.00000458031429,-107.524086846417021 37.000004288100286,-107.600713640777798 37.000003759375268,-107.712477900838564 37.000002988201679,-107.855695499501934 37.000002000000002,-107.866308937617532 37.000001926767261,-107.869139908586362 37.000001907233546,-107.869180699306327 37.0000019069521,-108.000623000000004 37.000000999999997,-108.179187075278463 36.999293161624927,-108.187139540298872 36.999261637591275,-108.249358 36.999015,-108.250634999999988 36.999561,-108.288086000000007 36.999555,-108.288399999999996 36.999519999999997,-108.320464 36.999499,-108.320720999999992 36.99951,-108.379165570428881 36.999458977707043,-108.619688999999994 36.999248999999999,-108.620309000000006 36.999287000000002,-108.749269825405847 36.999139933822768,-108.954403999999997 36.998905999999998,-108.958867999999995 36.998913000000002,-109.045222999999993 36.999084000000003,-109.04516599999998 37.072741999999998,-109.045057999999997 37.074660999999999,-109.044995 37.086429000000003,-109.045188999999993 37.096270999999994,-109.045173000000005 37.109464000000003,-109.045202999999987 37.111957999999994,-109.045155999999992 37.112063999999997,-109.045995000000005 37.177278999999999,-109.045978000000005 37.201830999999999,-109.045801505106283 37.205070813598866,-109.045486999999994 37.210844000000002,-109.045559879533187 37.239775672002708,-109.04556019774752 37.239901996533845,-109.045583999999991 37.249350999999997,-109.046038999999993 37.249993000000003,-109.045898042273308 37.32693499054853,-109.045810000000003 37.374993000000003,-109.043799132325617 37.469028334242019,-109.043463783260819 37.484710450871816,-109.043424942780035 37.486526770085334,-109.043137000000002 37.499991999999999,-109.041915000000003 37.530653,-109.041865 37.530726,-109.041805999999994 37.604171,-109.042130999999998 37.617662000000003,-109.042089000000004 37.623795,-109.042269000000005 37.666066999999998,-109.041731999999996 37.711213999999998,-109.041759999999996 37.713182000000003,-109.041635999999997 37.740209999999998,-109.042097999999996 37.749989999999997,-109.042042148900066 37.754383999799849,-109.041460999999998 37.800105000000002,-109.041753999999997 37.83582599999999,-109.04172299999999 37.842050999999998,-109.041843999999998 37.872788,-109.041652818578953 37.881166902788557,-109.041058000000007 37.907235999999997,-109.043120999999985 37.97426,-109.042818999999994 37.997067999999999,-109.042819999999992 37.999301000000003,-109.041972403965843 38.131799166817459,-109.041836656974709 38.153019449536792,-109.041761999999991 38.16469,-109.054648 38.244920999999998,-109.060061999999988 38.275489,-109.059961999999999 38.49998699999999,-109.060253000000003 38.599327999999993,-109.059540999999996 38.719887999999997,-109.057388000000003 38.795455999999994,-109.057216044916757 38.799730849597076,-109.054188999999994 38.874983999999998,-109.05394299999999 38.904414000000003,-109.053797000000003 38.905283999999995,-109.053233000000006 38.942467,-109.053291999999985 38.942878,-109.052435999999986 38.999985000000002,-109.051587912503535 39.115734257770079,-109.051583515738272 39.116334340093104,-109.051580780636755 39.116707634089543,-109.051512000000002 39.126094999999999,-109.050764999999998 39.366677000000003,-109.051362999999981 39.497674000000004,-109.051040248333237 39.660472011844121,-109.050614999999993 39.874969999999998,-109.050872999999996 40.058914999999999,-109.050813000000005 40.059578999999992,-109.050944 40.180711999999993,-109.050972999999999 40.180849000000002,-109.050968715822648 40.22266241227041,-109.050945999999996 40.444367999999997,-109.050314 40.495092,-109.050697999999983 40.499963,-109.049954999999997 40.539901,-109.050073999999995 40.540357999999998,-109.050071964046666 40.540437104308737,-109.048044000000004 40.619230999999999,-109.048248999999998 40.653600999999995,-109.049087999999998 40.714562,-109.048455000000004 40.826081000000002,-109.050076000000004 41.000658999999999,-108.884137999999993 41.000093999999997,-108.631107999999998 41.00015599999999,-108.526667000000003 40.999608000000002,-108.500658999999999 41.000112,-108.250648999999996 41.000114000000004,-108.181227000000007 41.000454999999995,-108.089219003138552 41.001554139247368,-108.046538999999996 41.002063999999997,-107.923234122395939 41.0020370519008,-107.918420999999981 41.002035999999997))', 4326));
-INSERT INTO geoapp_state ("name", "poly") VALUES ('Kansas', GeomFromText('POLYGON ((-102.051743999999999 40.003078000000002,-101.916696000000002 40.003141999999997,-101.904176000000007 40.003162000000003,-101.861740775252272 40.002907997451267,-101.841025000000002 40.002783999999991,-101.832160999999999 40.002932999999999,-101.807687 40.002797999999999,-101.804861999999986 40.002752,-101.783266423091504 40.002735966476642,-101.748492901329186 40.002710149056902,-101.627071 40.00262,-101.625809000000004 40.002710999999998,-101.579641080501318 40.002654627564297,-101.54227299999998 40.002608999999993,-101.417209 40.002423999999998,-101.411050023557621 40.002364583193085,-101.409952999999987 40.002353999999997,-101.387325211262052 40.00246006676732,-101.374325999999996 40.002520999999994,-101.342859000000004 40.002580000000002,-101.324035999999992 40.002695999999993,-101.293991000000005 40.002558999999998,-101.286555000000007 40.002558999999998,-101.248672999999997 40.002543000000003,-101.215033000000005 40.002555,-101.19221899999998 40.002490999999999,-101.186892990733696 40.002481867883319,-101.178804999999997 40.002468,-101.168704000000005 40.002547,-101.130906999999993 40.002426999999997,-101.104950380573442 40.002382874850099,-101.104950380567658 40.002382874850092,-101.060316999999998 40.002307000000002,-101.027686000000003 40.002255999999996,-100.962089380046322 40.00217532965339,-100.937427 40.002144999999999,-100.764559455237134 40.002296963384197,-100.758829999999989 40.002301999999993,-100.752183000000002 40.002127999999992,-100.7388309887763 40.002228385746484,-100.733295999999996 40.002270000000003,-100.729904000000005 40.002110999999999,-100.721127999999993 40.002068999999999,-100.683435000000003 40.002234,-100.660229999999984 40.002161999999998,-100.645444999999995 40.001882999999999,-100.626504856699498 40.001892789287538,-100.600944999999996 40.001905999999998,-100.594756999999987 40.001976999999997,-100.567238000000003 40.001888999999998,-100.551885999999996 40.001888999999998,-100.514429898999168 40.001844039098764,-100.511064999999988 40.00184,-100.487159000000005 40.001767,-100.477018 40.001752000000003,-100.475853999999998 40.001767999999998,-100.468772999999985 40.001724000000003,-100.447071999999991 40.001795,-100.439081000000002 40.001773999999997,-100.402449685831499 40.001800164690437,-100.390079999999998 40.001809000000002,-100.290126736823893 40.001691651381378,-100.231651999999997 40.001623000000002,-100.229478999999998 40.001692999999996,-100.215406000000002 40.001629,-100.196958999999993 40.001494,-100.19359 40.001573,-100.190323000000006 40.001586000000003,-100.188181 40.001541000000003,-100.177823000000004 40.001593,-99.990926000000002 40.001503,-99.986610999999996 40.001550000000002,-99.948166999999998 40.001812999999999,-99.944417 40.001584,-99.930432999999979 40.001516000000002,-99.906657999999993 40.001511999999998,-99.850154757615712 40.001444140609848,-99.813400999999999 40.001399999999997,-99.775639999999981 40.001646999999998,-99.772120999999984 40.001804,-99.764213999999996 40.001550999999999,-99.756834999999995 40.001342,-99.746628 40.001820000000002,-99.737774855821357 40.001824224692157,-99.731959000000003 40.001826999999992,-99.719639 40.001807999999997,-99.628345999999993 40.001866,-99.625979999999984 40.001865000000002,-99.515340365578794 40.002008435606839,-99.501791999999995 40.002026,-99.498998999999984 40.00195699999999,-99.497659999999982 40.001911999999997,-99.493464999999986 40.001936999999998,-99.480727999999999 40.001942,-99.423564999999996 40.002270000000003,-99.412644999999998 40.001867999999995,-99.403389000000004 40.001969000000003,-99.366747146128873 40.001962496644857,-99.290702999999979 40.001949000000003,-99.286655999999994 40.002017000000002,-99.282966999999999 40.001879000000002,-99.254012000000003 40.002074,-99.25036999999999 40.00195699999999,-99.216375999999997 40.002015999999998,-99.197591999999986 40.002032999999997,-99.188905000000005 40.002023,-99.186961999999994 40.001976999999997,-99.178965000000005 40.001976999999997,-99.169815999999997 40.001925,-99.123032999999992 40.002164999999998,-99.113510000000005 40.002192999999998,-99.085596999999993 40.002132999999994,-99.067047050731574 40.00217023690761,-99.020337999999995 40.00226399999999,-99.018700999999993 40.002333,-98.992135000000005 40.002192,-98.972286999999994 40.002245000000002,-98.971721000000002 40.002268,-98.961009000000004 40.002316999999998,-98.96091899999999 40.002271,-98.953888072580213 40.002253239016738,-98.934791999999987 40.002204999999996,-98.8435956659672 40.002348607685946,-98.842134005327992 40.002350909376077,-98.834455999999989 40.002363000000003,-98.820589999999982 40.002319,-98.777203 40.002358999999998,-98.774940999999998 40.002336,-98.729330606936671 40.002229113826232,-98.726294999999993 40.002222000000003,-98.710403999999997 40.002180000000003,-98.693095999999997 40.002372999999999,-98.691443000000007 40.002504999999999,-98.690286999999998 40.002547999999997,-98.672819000000004 40.002364,-98.669723999999988 40.002409999999998,-98.653832999999992 40.002268999999998,-98.652494000000004 40.002245000000002,-98.640709999999984 40.002493,-98.616372379820518 40.002409030470169,-98.613754999999998 40.002400000000002,-98.593342000000007 40.002475999999994,-98.575219000000004 40.002479999999991,-98.560578000000007 40.002274,-98.543186000000006 40.002285,-98.523053000000004 40.002336,-98.506634585466017 40.002329436673158,-98.504454999999979 40.002328565375151,-98.50084801790743 40.002327123469641,-98.490532999999999 40.002322999999997,-98.441997554675297 40.002366263566756,-98.391848301995964 40.002410965650498,-98.274015000000006 40.002516,-98.268218000000005 40.002490000000002,-98.25000799999998 40.002307000000002,-98.213290432425865 40.002506421375415,-98.193483 40.002614,-98.179315000000003 40.002482999999998,-98.172269 40.002437999999991,-98.156873151934732 40.002445128178877,-98.142031000000003 40.002451999999998,-98.099659000000003 40.002226999999998,-98.076034000000007 40.002300999999996,-98.068701000000004 40.002355,-98.050056999999981 40.002277999999997,-98.047469000000007 40.002186000000002,-98.042767978165202 40.002191261754177,-98.014411999999979 40.002223,-98.010157000000007 40.002153,-97.972185999999994 40.002113999999999,-97.931810999999996 40.002049999999997,-97.876261 40.002102,-97.85745 40.002065000000002,-97.838378999999989 40.001909999999995,-97.821597999999994 40.002003999999992,-97.819426000000007 40.001957999999995,-97.777154999999993 40.002167,-97.770775999999998 40.001976999999997,-97.769204000000002 40.001995,-97.767746000000002 40.001994000000003,-97.714825952022949 40.001974503868432,-97.706952472912022 40.001971603221314,-97.701160424072398 40.001969469388285,-97.61370959051284 40.001937251863488,-97.595964207410262 40.001930714334961,-97.593671575073259 40.001929869712491,-97.51530799999999 40.001900999999997,-97.511381 40.001899000000002,-97.510264000000006 40.001835,-97.48896951184885 40.0019310946697,-97.481234094494141 40.001966001936331,-97.463284999999999 40.00204699999999,-97.444661999999994 40.001957999999995,-97.425443 40.002048000000002,-97.417825999999991 40.002023999999999,-97.415833000000006 40.002000999999993,-97.369102999999996 40.00206,-97.350896000000006 40.001930000000002,-97.350272000000004 40.001975999999999,-97.256541388870858 40.001563097676062,-97.24516899999999 40.001513000000003,-97.245080000000002 40.001466999999998,-97.202309999999997 40.00144199999999,-97.200190000000006 40.001548999999997,-97.181775000000002 40.001550000000002,-97.165136038800085 40.001526729909067,-97.164288093539042 40.001525544031956,-97.157705785150654 40.001516338474417,-97.144150390621661 40.001497380844818,-97.142447999999987 40.001494999999998,-97.137865999999988 40.001814000000003,-97.049662999999995 40.001322999999999,-97.030802999999992 40.001342,-97.009164999999996 40.001463,-96.918187714380807 40.001505032225388,-96.916093000000004 40.001505999999999,-96.880459000000002 40.001448000000003,-96.878253 40.001466,-96.875056999999998 40.001448000000003,-96.873812 40.001449999999998,-96.868892342573133 40.001444286089438,-96.805301797100199 40.001370429180717,-96.693246065483095 40.001240282633297,-96.622400999999996 40.001157999999997,-96.610348999999999 40.000881,-96.604883999999984 40.000891000000003,-96.581788013355691 40.000963078853125,-96.580851999999993 40.000965999999998,-96.570853999999997 40.001090999999995,-96.557862999999998 40.000968,-96.538977000000003 40.000850999999997,-96.527110999999991 40.001030999999998,-96.469944999999996 40.000965999999998,-96.467535999999996 40.001035000000002,-96.463639999999998 40.000967000000003,-96.354812913341547 40.000735780492882,-96.350953725714731 40.00072758106856,-96.341811057717251 40.000708156095854,-96.304554999999993 40.000629000000004,-96.301066000000006 40.000632000000003,-96.239171999999996 40.000691000000003,-96.223838999999998 40.000729,-96.220170999999993 40.00072,-96.154364999999984 40.000495,-96.154246 40.00045,-96.147166999999982 40.000478999999999,-96.125936999999979 40.000432000000004,-96.125788 40.000467,-96.089781000000002 40.000518999999997,-96.081394999999986 40.000602999999998,-96.051691000000005 40.000726999999998,-96.02409 40.000718999999997,-96.014716997898134 40.000662392993569,-96.010677999999999 40.000638000000002,-95.995389500007406 40.000603953777215,-95.958139000000003 40.000520999999999,-95.901560435593936 40.000482839492363,-95.882524000000004 40.00047,-95.788023999999993 40.000452000000003,-95.784575000000004 40.000463000000003,-95.672891827756033 40.000336669594915,-95.658762261555324 40.000320686938032,-95.63965170807073 40.000299070038061,-95.565216789143676 40.000214872989645,-95.463103327781397 40.00009936736172,-95.455130658279359 40.000090349077695,-95.452048066669519 40.000086862204618,-95.438655850967621 40.000071713601649,-95.436011808705814 40.000068722793607,-95.426269559489981 40.00005770284973,-95.42148745056565 40.000052293567869,-95.41484447973599 40.000044779372317,-95.375257000000005 40.0,-95.339895999999982 39.999999000000003,-95.326448603970363 39.999998574530281,-95.30829 39.999997999999998,-95.308403999999996 39.993758,-95.307779999999994 39.990617999999998,-95.307111000000006 39.989114,-95.302506999999991 39.984357000000003,-95.289715 39.977705999999998,-95.274756999999994 39.972115000000002,-95.269885999999985 39.969396000000003,-95.261854 39.960617999999997,-95.257651999999993 39.954886000000002,-95.250253999999998 39.948644000000002,-95.241382999999999 39.944949,-95.236761 39.943930999999999,-95.231114000000005 39.943784,-95.220212000000004 39.944432999999997,-95.216440000000006 39.943953,-95.213736999999995 39.943205999999996,-95.204427999999993 39.938949,-95.201277000000005 39.934193999999998,-95.200689999999994 39.928154999999997,-95.20201 39.922438,-95.205744999999993 39.915168999999999,-95.206326000000004 39.912120999999999,-95.206195999999991 39.909557,-95.205732999999981 39.908275000000003,-95.202631127107011 39.904826841138963,-95.201935000000006 39.904052999999998,-95.19982446963148 39.902956959499498,-95.199773390195176 39.902930432929807,-95.199730682369619 39.902908253904485,-95.199347000000003 39.902709000000002,-95.193815999999984 39.900689999999997,-95.189565000000002 39.899959000000003,-95.179452999999995 39.900061999999991,-95.172296000000003 39.902025999999999,-95.159833999999989 39.906984,-95.156023999999988 39.907243,-95.153185481864639 39.906665666721331,-95.151701132402337 39.906363761184394,-95.149656999999991 39.905947999999995,-95.148243978290679 39.905255611516672,-95.146055000000004 39.904183000000003,-95.143801999999994 39.901917999999995,-95.142562999999981 39.897992000000002,-95.142444999999995 39.895419999999994,-95.143403000000006 39.889355999999992,-95.142718000000002 39.885888999999992,-95.140601000000004 39.88168799999999,-95.137091999999996 39.878350999999995,-95.134747000000004 39.876852,-95.128165999999993 39.874164999999998,-95.105912000000004 39.869163999999998,-95.090958483530287 39.863446088154532,-95.090158000000002 39.86314,-95.085003 39.861882999999999,-95.081534000000005 39.861718000000003,-95.079786043666886 39.861878094210859,-95.052535000000006 39.864373999999998,-95.042141999999998 39.864804999999997,-95.037767000000002 39.865541999999998,-95.034318031759739 39.867229060943565,-95.032053000000005 39.868336999999997,-95.031002514960235 39.869148692103728,-95.027930999999981 39.871521999999999,-95.025918959417425 39.87568321107333,-95.025422000000006 39.876711,-95.025119000000004 39.878833,-95.02586205726584 39.885935119809076,-95.025947000000002 39.886747,-95.025771840138887 39.887478608302466,-95.025475064075451 39.888718183571669,-95.025239999999997 39.889699999999998,-95.024388999999999 39.891202,-95.021897459019584 39.893924778577606,-95.019088516216428 39.896994416745422,-95.018742999999986 39.89737199999999,-95.018224596337973 39.897611313155366,-95.013151999999991 39.899952999999996,-95.010684182587667 39.900289758615472,-95.008439999999993 39.900596,-95.003818999999993 39.900400999999995,-94.990284000000003 39.897010000000002,-94.989784913598129 39.896958718834505,-94.987823822157509 39.896757216540813,-94.986975 39.89667,-94.985308455245701 39.896814869812808,-94.979390624873346 39.897329296428744,-94.977748999999989 39.897472,-94.963345000000004 39.901136,-94.959276000000003 39.901671,-94.958440298615102 39.901548064610132,-94.95153999999998 39.900532999999996,-94.943866999999983 39.898130000000002,-94.935306395585215 39.893779379194363,-94.934493000000003 39.893366,-94.929574000000002 39.888753999999992,-94.927897000000002 39.88611199999999,-94.927358999999996 39.883966,-94.927251999999996 39.880257999999991,-94.928466 39.876344000000003,-94.931084167287821 39.873075003673321,-94.931462999999994 39.872602,-94.938790999999995 39.866954,-94.940742999999998 39.864409999999999,-94.942407000000003 39.861065999999994,-94.942566999999983 39.856601999999995,-94.939767000000003 39.851930000000003,-94.937655000000007 39.849786000000002,-94.926149999999993 39.841321999999998,-94.916917999999995 39.836137999999998,-94.909941999999987 39.834426,-94.903156999999979 39.833849999999998,-94.892677000000006 39.834377999999994,-94.889493000000002 39.834026,-94.886932999999999 39.833098,-94.881012999999996 39.828921999999991,-94.878676999999996 39.826521999999997,-94.877043999999998 39.823754,-94.876543999999996 39.820594,-94.875944000000004 39.813293999999999,-94.87632679569893 39.807169268817198,-94.876344000000003 39.806894,-94.876705972386588 39.80614007495069,-94.880932 39.797338000000003,-94.884084 39.794234000000003,-94.890292000000002 39.791626,-94.892965000000004 39.791097999999991,-94.912908274541266 39.790276806342419,-94.92474489359239 39.789789416146199,-94.925605000000004 39.789753999999995,-94.925940683661906 39.789631963361245,-94.927258709273417 39.789152799691166,-94.929653999999999 39.788281999999995,-94.93035270914757 39.787827111232048,-94.930442023078356 39.787768964141691,-94.930979872832452 39.787418801541357,-94.932726000000002 39.786282,-94.932913349551853 39.786043884763131,-94.935059195246907 39.783316584105528,-94.935205999999994 39.78313,-94.935782000000003 39.778905999999999,-94.935301999999993 39.77561,-94.935036741896766 39.775108050050804,-94.934624304242575 39.774327591105198,-94.934262000000004 39.773642000000002,-94.929652999999988 39.769098,-94.929421387607832 39.768921584953624,-94.928626586797606 39.768316199289764,-94.926229000000006 39.76648999999999,-94.923991330811134 39.765173947104167,-94.916788999999994 39.760937999999996,-94.912293000000005 39.759337999999993,-94.906244 39.759417999999997,-94.905921454535701 39.759501730763866,-94.900921941190049 39.760799572828766,-94.899156000000005 39.761257999999998,-94.899025621234756 39.761323457651685,-94.895268000000002 39.76321,-94.895041000000006 39.763350000000003,-94.894070999999997 39.763945999999997,-94.893918999999997 39.76404,-94.893724000000006 39.764159999999997,-94.893646000000004 39.764208000000004,-94.883923999999993 39.770186000000002,-94.881460000000004 39.771258000000003,-94.881422 39.771258000000003,-94.874706321154179 39.772392308082928,-94.871144 39.772993999999997,-94.869643999999994 39.772894,-94.867142999999999 39.771693999999997,-94.865243000000007 39.770094,-94.863142999999994 39.767294,-94.860742999999999 39.763094000000002,-94.859442999999999 39.753694000000003,-94.860369889104035 39.749534984666809,-94.860371 39.74953,-94.862942999999987 39.742994000000003,-94.870142999999999 39.734594,-94.875642999999997 39.730494,-94.884142999999995 39.726793999999998,-94.891743999999989 39.724893999999999,-94.899315999999999 39.724041999999997,-94.900553640444031 39.724102079633198,-94.901582061073228 39.724152002964722,-94.902612000000005 39.724201999999998,-94.906055088082866 39.724933471502588,-94.907014260749904 39.725137244236571,-94.907785666538786 39.725301126582274,-94.910067999999995 39.725785999999999,-94.911087398893699 39.726157408899255,-94.918323999999998 39.728793999999994,-94.93000499999998 39.735370000000003,-94.939221000000003 39.74157799999999,-94.944740999999979 39.744377,-94.948658825773634 39.745572502168315,-94.948680784417533 39.745579202723142,-94.948725999999994 39.745593,-94.952629999999999 39.745961,-94.955286 39.745688999999999,-94.960086000000004 39.743065,-94.963779819772341 39.740240978767318,-94.964692434782606 39.73954326086956,-94.965317999999982 39.739064999999989,-94.965565209393333 39.738728671232884,-94.970224508542714 39.732389687437191,-94.970421999999985 39.732120999999999,-94.971205999999981 39.729304999999997,-94.971078000000006 39.723146,-94.968452999999997 39.707402000000002,-94.968980999999999 39.692954,-94.969909 39.689050000000002,-94.971316999999999 39.686410000000002,-94.976096392737759 39.68160006801152,-94.976325000000003 39.68137,-94.981556999999995 39.678634000000002,-94.984149000000002 39.677849999999992,-94.986445080691666 39.677537608069159,-94.990587390516794 39.676974028501114,-94.993556999999996 39.676569999999998,-94.998766892420107 39.676509388876212,-95.001379 39.676479,-95.004602740773237 39.676177881356345,-95.008105239221649 39.675850724907868,-95.009022999999999 39.675764999999998,-95.010225986948086 39.675477408241932,-95.013209713780839 39.674764104372102,-95.015309999999985 39.674261999999999,-95.018317999999994 39.672868999999999,-95.021521942351953 39.670631293568427,-95.024595000000005 39.668484999999997,-95.027643999999995 39.665453999999997,-95.037464 39.652904999999997,-95.039049000000006 39.649639,-95.044554000000005 39.644370000000002,-95.049518000000006 39.637875999999999,-95.053366999999994 39.630347,-95.054924999999997 39.624994999999991,-95.055024819926729 39.623527163368095,-95.055152000000007 39.621656999999992,-95.054958456554544 39.620961328886679,-95.053131423647116 39.614394255464305,-95.053011999999981 39.613965,-95.052555891387243 39.613278556984888,-95.047910999999999 39.606287999999999,-95.046445000000006 39.601605999999997,-95.046361000000005 39.599556999999997,-95.047165000000007 39.595117000000002,-95.049277000000004 39.589582999999998,-95.054804000000004 39.582487999999998,-95.056897000000006 39.580567000000002,-95.059518999999995 39.579132,-95.064519000000004 39.577114999999999,-95.066275551338904 39.576786470694117,-95.068266439890465 39.576414113098046,-95.069315000000003 39.576217999999997,-95.072159999999982 39.576121999999991,-95.075842551355763 39.576644128527029,-95.076688000000004 39.576763999999997,-95.088569515113861 39.580713698327401,-95.089515000000006 39.581028000000003,-95.09068217809525 39.58095107619048,-95.095736000000002 39.580618,-95.099095000000005 39.579690999999997,-95.100375015351446 39.579100080742663,-95.10182940536555 39.578428661399109,-95.103228 39.577782999999997,-95.106109962410699 39.575487768136732,-95.106244982404746 39.575380236480051,-95.106274453941239 39.575356764970024,-95.106406000000007 39.575251999999999,-95.107454000000004 39.573842999999997,-95.108931052511622 39.56997896968771,-95.109155613535791 39.569391508783276,-95.112830712234896 39.559777298955126,-95.112877844119652 39.559653999999995,-95.113077000000004 39.559132999999996,-95.113262990573148 39.557121201967142,-95.113516735173974 39.554376531201555,-95.113557 39.553940999999995,-95.113330390574859 39.553319942050457,-95.109694540741444 39.543355336910984,-95.109303999999995 39.542284999999993,-95.106595999999996 39.537657000000003,-95.106363136618171 39.537386330858773,-95.106309238275287 39.537323682029822,-95.102887999999993 39.533346999999999,-95.096713422649174 39.527826015970483,-95.095319522838992 39.526579663685382,-95.092703999999998 39.524241000000004,-95.082713999999996 39.516711999999998,-95.077440999999993 39.513551999999997,-95.059460999999985 39.506143000000002,-95.05637999999999 39.503971999999997,-95.052176999999986 39.499995999999996,-95.050551999999996 39.497514000000002,-95.049844999999991 39.494414999999989,-95.048370000000006 39.480420000000002,-95.047133000000002 39.474970999999996,-95.045715999999999 39.472459,-95.040779999999998 39.466386999999997,-95.03749999999998 39.463689000000002,-95.033407999999994 39.460875999999992,-95.028497999999999 39.458286999999999,-95.015825000000007 39.452809000000002,-94.995767999999998 39.448174000000002,-94.990172 39.446192000000003,-94.982144000000005 39.440551999999997,-94.978797999999998 39.436241000000003,-94.976606000000004 39.426701,-94.972952000000006 39.421705000000003,-94.968547467194298 39.418879728230785,-94.966981164652054 39.417875029083376,-94.966065999999998 39.417287999999999,-94.965430539155946 39.417093446959996,-94.954817000000006 39.413843999999997,-94.951209000000006 39.411706999999993,-94.947863999999996 39.408603999999997,-94.946292999999983 39.405645999999997,-94.946662000000003 39.399717000000003,-94.946226999999993 39.395648,-94.945577 39.393850999999998,-94.942038999999994 39.389499,-94.939696999999995 39.387949999999996,-94.938205659338905 39.38711651736979,-94.938199994953891 39.387113351650086,-94.938198708293527 39.387112632559479,-94.937157999999982 39.386530999999998,-94.933651999999995 39.385545999999998,-94.932170703908099 39.385397898493565,-94.923109999999994 39.384492000000002,-94.919224999999997 39.385173999999999,-94.915858999999998 39.386347999999998,-94.909581000000003 39.388865000000003,-94.901822999999993 39.392797999999999,-94.896448416922993 39.39340032396553,-94.894979000000006 39.393565000000002,-94.891845000000004 39.393312999999999,-94.888971999999995 39.392431999999999,-94.888058227506249 39.391822741147728,-94.885025999999996 39.389800999999999,-94.880978999999996 39.383899,-94.879281000000006 39.37977999999999,-94.879087999999996 39.375702999999994,-94.881359999999987 39.370382999999997,-94.885216 39.366911000000002,-94.890928000000002 39.364030999999997,-94.896832000000003 39.363135,-94.899023999999997 39.362431,-94.902496999999997 39.360382999999999,-94.90716104958679 39.35683832231404,-94.907297 39.356735,-94.907510470967722 39.356484333333356,-94.909408999999997 39.354254999999995,-94.910016999999996 39.352542999999997,-94.91007929967077 39.352122876579188,-94.910166635146069 39.351533921963672,-94.910234386079424 39.351077037464393,-94.910640999999998 39.348334999999999,-94.910055514481613 39.342727430625168,-94.908683540921714 39.329587162119807,-94.908064999999993 39.323663000000003,-94.906599414484603 39.317389801180319,-94.905982468129508 39.31474906332776,-94.905548856768945 39.312893060899633,-94.905328999999995 39.311951999999998,-94.904604536115073 39.31007473956825,-94.903592654247163 39.307452709910535,-94.903137 39.306272,-94.902341179156608 39.304705098857582,-94.900693838394318 39.301461629999167,-94.900362755471093 39.300809756886117,-94.900048999999996 39.300192000000003,-94.895217000000002 39.29420799999999,-94.889432625546704 39.288730528394183,-94.887056 39.286479999999997,-94.882576 39.283327999999997,-94.881425972827699 39.282735692772164,-94.879585687759075 39.281787876778168,-94.878319999999988 39.281135999999996,-94.869470269042495 39.278423959123423,-94.867567999999991 39.277841000000002,-94.866576416802303 39.277461598502107,-94.857072000000002 39.273825000000002,-94.850573678793964 39.270595179638669,-94.850470600187833 39.270543947117169,-94.846320000000006 39.268481,-94.844203868589133 39.266965084952687,-94.840994595225254 39.264666085108807,-94.837855000000005 39.262416999999999,-94.836102527271095 39.260730409704507,-94.834879550067882 39.259553409087879,-94.832501320107042 39.257264586268427,-94.832102355305352 39.256880620143498,-94.831470999999993 39.256273,-94.827487000000005 39.249888999999996,-94.826571473591798 39.245793223963304,-94.825663000000006 39.241728999999999,-94.826110999999983 39.238289000000002,-94.826405091238243 39.237538367125239,-94.827108391663188 39.2357432765168,-94.827791000000005 39.234000999999999,-94.828117769197533 39.233533772937683,-94.83244435695299 39.227347452739551,-94.834698551534771 39.224124319346686,-94.834896 39.223841999999998,-94.834917496024659 39.223414229109203,-94.835039139715306 39.220993519665384,-94.835046603087861 39.220844998551456,-94.835055999999994 39.220658,-94.833551999999997 39.217793999999998,-94.831678999999994 39.215938,-94.823791 39.209873999999999,-94.820687000000007 39.208626000000002,-94.811662999999996 39.206594000000003,-94.800359054554335 39.206051410618606,-94.799662999999995 39.206018,-94.798924306591658 39.206116812235138,-94.793913945984244 39.206787029303406,-94.788135068391796 39.207560047994349,-94.787343000000007 39.207666000000003,-94.783838000000003 39.207154000000003,-94.781518000000005 39.206145999999997,-94.780294078498926 39.205273290755756,-94.778971577769184 39.204330290235411,-94.777838000000003 39.203522,-94.775537999999997 39.200602000000003,-94.770897097034492 39.191141697801093,-94.770859400196969 39.191064854247678,-94.770337999999995 39.190002,-94.763137999999998 39.179903000000003,-94.75233799999998 39.173202999999994,-94.74193799999999 39.170203,-94.736536999999998 39.169203000000003,-94.723636999999997 39.169002999999989,-94.714136999999994 39.170403,-94.696331999999998 39.178562999999997,-94.687235999999999 39.183503000000002,-94.680335999999983 39.184303,-94.669134999999997 39.182003000000002,-94.663835000000006 39.179102999999998,-94.660314999999997 39.168050999999991,-94.662434999999988 39.157602999999995,-94.650734999999983 39.154102999999999,-94.640034999999997 39.153102999999994,-94.623934000000006 39.156602999999997,-94.615834000000007 39.160003000000003,-94.608834000000002 39.160502999999999,-94.601732999999996 39.15960299999999,-94.596033000000006 39.157702999999998,-94.591932999999997 39.155003,-94.589933000000002 39.140402999999999,-94.592533000000003 39.135902999999992,-94.600433999999993 39.128503000000002,-94.605733999999998 39.122204000000004,-94.607033999999999 39.119404000000003,-94.607354 39.113444,-94.607234000000005 39.089604,-94.607333999999994 39.081703999999995,-94.607275518421304 39.072346947409343,-94.607234000000005 39.065703999999997,-94.607342812841125 39.057404745686583,-94.60738379566331 39.05427894858029,-94.607437239929951 39.050202705779334,-94.607518499034526 39.044004999999999,-94.607559479691474 39.040879368039988,-94.607612854426819 39.036808428453341,-94.60764748233197 39.034167326647299,-94.607654028188094 39.033668068249817,-94.60769507925167 39.030537066312085,-94.607898722639391 39.015005000000002,-94.607914652765047 39.013789994834404,-94.607991843462372 39.007902590176151,-94.608087526605189 39.000604749887366,-94.608092759229436 39.000205652880325,-94.608190956218394 38.992716079262479,-94.608212339138063 38.991085184540211,-94.608264438806202 38.98711149548862,-94.608279957450691 38.985927874365181,-94.608301211867541 38.984306780669819,-94.608333999999999 38.981805999999999,-94.608294286905348 38.97390309416464,-94.608273484679671 38.969763451253407,-94.608249262127771 38.964943163424849,-94.608207879518076 38.956708024096379,-94.608134000000007 38.942005999999999,-94.608134000000007 38.940005999999997,-94.607866 38.937398000000002,-94.607977999999989 38.936869999999992,-94.608002838442587 38.912906322207348,-94.608006216770249 38.909646973100827,-94.608010407202343 38.90560412040071,-94.608022064178897 38.894357681354862,-94.60802273861259 38.893706999999999,-94.608033000000006 38.883806999999997,-94.608033000000006 38.869207000000003,-94.608033000000006 38.868107000000002,-94.607992999999993 38.867271000000002,-94.608033000000006 38.861207,-94.608033000000006 38.855007,-94.608033000000006 38.850107,-94.608033000000006 38.847206999999997,-94.607624999999999 38.827559999999991,-94.607668973053535 38.825816299300072,-94.608041 38.811064000000002,-94.608617609754887 38.781926100280451,-94.609398999999996 38.742440000000002,-94.60945599999998 38.74069999999999,-94.609507757106428 38.73815999467709,-94.609625656590424 38.7323740198146,-94.610322172686637 38.698192151600097,-94.61071084056907 38.679118085101081,-94.61073851283922 38.677760054904219,-94.611602000000005 38.635384000000002,-94.611464999999995 38.625011,-94.611857999999998 38.620485000000002,-94.611908 38.609271999999997,-94.611905562149673 38.605890005062435,-94.611886999999996 38.580139000000003,-94.611902 38.580109999999998,-94.612176000000005 38.576546,-94.612156999999996 38.549816999999997,-94.612272000000004 38.547916999999998,-94.612464742072774 38.518760616499996,-94.612644000000003 38.491644,-94.612725999999995 38.484366999999999,-94.612696 38.483153999999999,-94.612865999999997 38.477570999999998,-94.613365000000002 38.403421999999999,-94.613264999999998 38.392426,-94.613275404637193 38.388718047420433,-94.613328999999993 38.369617999999996,-94.613311999999993 38.364407,-94.613085455228386 38.3436360393057,-94.612999999999985 38.335800999999996,-94.612825 38.324387000000002,-94.612787999999995 38.320141999999997,-94.612673 38.314832000000003,-94.612673 38.302526999999998,-94.612689368276676 38.301464114946214,-94.612843999999996 38.291422999999995,-94.612848999999997 38.289914000000003,-94.612707829046002 38.272362044447966,-94.612691999999996 38.270394000000003,-94.612613999999994 38.237766,-94.612634999999997 38.226987,-94.612658999999994 38.219251,-94.61265866950464 38.21872154645218,-94.612657999999982 38.217649000000002,-94.612821999999994 38.203918000000002,-94.612848 38.200713999999998,-94.613073 38.190551999999997,-94.61341774677895 38.168183959706163,-94.613422 38.16790799999999,-94.613748 38.160632999999997,-94.613855999999998 38.149768999999999,-94.613889466360249 38.136312911169284,-94.613919497343275 38.124238112111762,-94.614061000000007 38.067343,-94.614088999999993 38.065900999999997,-94.614054999999993 38.060088,-94.613980999999995 38.036949,-94.614211999999981 37.992462000000003,-94.614464999999996 37.987798999999995,-94.614511123427164 37.979395512107736,-94.614514360688489 37.978805697169918,-94.614557000000005 37.971036999999995,-94.614561999999992 37.951517000000003,-94.614593999999997 37.949977999999994,-94.614611999999994 37.944361999999998,-94.614754000000005 37.940769000000003,-94.614834999999999 37.936700000000002,-94.614778 37.934199999999997,-94.615181000000007 37.915944000000003,-94.615392999999983 37.906391999999997,-94.61546899999999 37.901775,-94.615706000000003 37.886842999999999,-94.615921 37.878331000000003,-94.615834000000007 37.872509999999998,-94.616 37.863126,-94.616282760205394 37.851281931678621,-94.616426000000004 37.845281999999997,-94.616433230053673 37.842955730230052,-94.61645 37.837560000000003,-94.616861999999998 37.819456000000002,-94.6176681324215 37.775831003788085,-94.617720999999989 37.77297,-94.617737774720197 37.764628336555312,-94.617744979193901 37.761045725680312,-94.617807999999997 37.729706999999998,-94.617975 37.722175999999997,-94.61780499999999 37.690178000000003,-94.617650999999995 37.687671000000002,-94.617687000000004 37.686652999999993,-94.617885 37.682214000000002,-94.617733999999999 37.673127,-94.617576 37.653671000000003,-94.617517909436387 37.643988652624088,-94.61747699999998 37.637169999999998,-94.617472819127315 37.636539916507168,-94.6173 37.610495,-94.617428000000004 37.609521999999998,-94.617283 37.571896000000002,-94.617315000000005 37.571498999999996,-94.617080999999999 37.567013000000003,-94.61711240153133 37.563155381499406,-94.617159999999984 37.557307999999999,-94.617186000000004 37.553485000000002,-94.617167532949537 37.551779056391354,-94.616988484457494 37.535238968895172,-94.616907999999981 37.527804000000003,-94.616788999999997 37.521509999999999,-94.616880369657522 37.506771761864755,-94.617022999999989 37.483764999999998,-94.617182999999997 37.469664999999999,-94.617180000000005 37.465203000000002,-94.617221999999998 37.460476,-94.617204999999984 37.46037299999999,-94.617200999999994 37.454788,-94.617131999999998 37.439818000000002,-94.617265000000003 37.425535999999994,-94.617510999999993 37.410908999999997,-94.617557000000005 37.396374999999999,-94.61759158917468 37.381725975861251,-94.617625000000004 37.367576,-94.617626 37.367444999999989,-94.617536999999999 37.364355000000003,-94.617636000000005 37.338417,-94.617694999999998 37.336841999999997,-94.617648000000003 37.323588999999998,-94.61807499999999 37.240436000000003,-94.618157999999994 37.237596999999994,-94.618122999999997 37.229334,-94.61815 37.228121000000002,-94.618218999999996 37.207771999999999,-94.618305000000007 37.207337000000003,-94.618319 37.188774000000002,-94.618504999999985 37.181184000000002,-94.618472999999994 37.174782,-94.618351000000004 37.160210999999997,-94.618071999999998 37.132345,-94.61807499999999 37.129755000000003,-94.61816441512984 37.118929895303054,-94.618212 37.113168999999992,-94.618150999999997 37.103968000000002,-94.618059000000002 37.096676000000002,-94.618088 37.093670999999993,-94.618089999999995 37.093494,-94.618085255103864 37.089305442941992,-94.618082 37.086432000000002,-94.61811999999999 37.085934000000002,-94.617981999999998 37.075077,-94.617954311863897 37.070346986543974,-94.617947706480578 37.069218577181687,-94.617910161110728 37.062804634983031,-94.617893975984089 37.060039701061122,-94.617874999999998 37.056798,-94.617877538275181 37.056339390079508,-94.617964999999998 37.040537,-94.617972200190749 37.032971759572447,-94.617994999999979 37.009015999999995,-94.618027702303792 37.004829720380044,-94.618080000000006 36.998134999999998,-94.625223999999989 36.998671999999999,-94.699735000000004 36.998804999999997,-94.701796999999999 36.998814000000003,-94.711286363060864 36.99879670415919,-94.712770000000006 36.99879399999999,-94.722629184733563 36.998741903378082,-94.732834603466486 36.998687977231512,-94.736330645670293 36.998669503899912,-94.737183000000002 36.998665000000003,-94.739323999999996 36.998686999999997,-94.745992043692311 36.998700535427304,-94.749560781475736 36.99870777958963,-94.749834600019099 36.998708335412474,-94.777257000000006 36.998764,-94.831280000000007 36.998812,-94.831539962039543 36.998812565955092,-94.840925999999996 36.998832999999998,-94.846637705524785 36.998860673615503,-94.849800999999999 36.998875999999996,-94.853196999999994 36.998874,-94.896852168601683 36.999075231107383,-94.904605402657381 36.99911097010289,-94.9407882710602 36.999277757196154,-94.995293000000004 36.999528999999995,-95.007620000000003 36.999513999999998,-95.011432999999997 36.999535000000002,-95.030323999999993 36.999516999999997,-95.037857000000002 36.999496999999998,-95.049498999999983 36.999580000000002,-95.073509 36.999509000000003,-95.1405498515593 36.999533623834409,-95.155186999999998 36.999538999999999,-95.155372 36.999540000000003,-95.159067907556633 36.999536629205572,-95.177300999999986 36.999519999999997,-95.195307 36.999564999999997,-95.267905305061163 36.999446910377756,-95.285983101167361 36.999417504731007,-95.322564999999997 36.999357999999994,-95.328057999999999 36.999364999999997,-95.328326999999987 36.999366000000002,-95.331209999999999 36.999380000000002,-95.377252424658963 36.999296311678272,-95.381753803085687 36.999288129815376,-95.407683000000006 36.999240999999998,-95.511578 36.999234999999999,-95.522414951940931 36.999281058114107,-95.534401000000003 36.999332000000003,-95.573598000000004 36.999309999999994,-95.601517312742303 36.999317968253862,-95.612139999999997 36.999321000000002,-95.615933999999996 36.999364999999997,-95.621011943860609 36.999361983160732,-95.624350000000007 36.999360000000003,-95.630078999999995 36.999319999999997,-95.638122589416028 36.999320470082949,-95.664300999999995 36.999321999999999,-95.674044398562955 36.999333876292773,-95.686452000000003 36.999349000000002,-95.696658999999997 36.999215,-95.71038 36.999370999999996,-95.710782524132014 36.999362783399121,-95.714887000000004 36.999279,-95.718053999999995 36.999254999999998,-95.741907999999995 36.999243999999997,-95.746466244276931 36.999250838506164,-95.759905000000003 36.999270999999993,-95.768719000000004 36.999205000000003,-95.786761999999996 36.999309999999994,-95.807979999999986 36.999124000000002,-95.819364496908179 36.999150471530008,-95.866899000000004 36.999260999999997,-95.873943999999995 36.999299999999998,-95.875256999999991 36.999302,-95.877150999999998 36.999304000000002,-95.910179999999997 36.999336,-95.928122000000002 36.999245000000002,-95.936991999999989 36.999267999999994,-95.964270378114222 36.999093604402042,-96.00081 36.99886,-96.095164142267308 36.998935940299688,-96.14121 36.998972999999999,-96.143207000000004 36.999133999999998,-96.147143 36.999021999999997,-96.149709 36.99904,-96.152383999999998 36.999050999999994,-96.154016999999982 36.999161,-96.184768000000005 36.999211000000003,-96.200028000000003 36.999028000000003,-96.217571000000007 36.999070000000003,-96.235320025971774 36.999130675786525,-96.27480962492784 36.999265672629733,-96.276368000000005 36.999270999999993,-96.279078999999996 36.999271999999991,-96.381556872639493 36.999226629434901,-96.394272 36.999220999999999,-96.415412000000003 36.999113,-96.500287999999998 36.998643,-96.525212323286397 36.998711038495294,-96.525495980566973 36.998711812823821,-96.551130926932458 36.998781791180214,-96.551130927020779 36.998781791180456,-96.624487489749981 36.998982040153741,-96.705431000000004 36.999203,-96.710481999999999 36.999270999999993,-96.731983006833033 36.99928335311408,-96.736589999999993 36.999285999999998,-96.741269999999986 36.999239000000003,-96.749837999999997 36.998987999999997,-96.792060000000006 36.999179999999996,-96.795198999999997 36.99886,-96.822790999999995 36.999181999999998,-96.867517000000007 36.999217000000002,-96.876289999999997 36.999232999999997,-96.902083000000005 36.999155000000002,-96.903509999999997 36.999132000000003,-96.917092999999994 36.999181999999998,-96.921914999999998 36.999150999999998,-96.924934279563146 36.999131784030439,-96.934641999999997 36.999070000000003,-96.967371 36.999066999999997,-96.975561999999996 36.999018999999997,-97.030081999999979 36.998928999999997,-97.039783999999983 36.999000000000002,-97.045562883576096 36.99899981011751,-97.100651999999997 36.998998,-97.104275999999999 36.999020000000002,-97.120284999999996 36.999014000000003,-97.122596999999999 36.999035999999997,-97.147721000000004 36.999110999999999,-97.202000013134437 36.999050609464689,-97.255829185181881 36.998990719420135,-97.342808466604069 36.998893946743877,-97.362376892203329 36.998872175019791,-97.364929972745273 36.99886933447624,-97.372421000000003 36.998860999999998,-97.384924999999996 36.998843,-97.462279999999993 36.998685000000002,-97.472860999999995 36.998721000000003,-97.527292000000003 36.998749999999994,-97.545899999999989 36.998708999999991,-97.546497999999985 36.998746999999995,-97.564536000000004 36.998711,-97.582460039051355 36.99869862770732,-97.606549 36.998682000000002,-97.637136999999996 36.999090000000002,-97.650465999999994 36.999003999999999,-97.692180007144742 36.998844793059916,-97.697103999999982 36.998826,-97.768704 36.998749999999994,-97.783432000000005 36.998961,-97.783489000000003 36.998846999999998,-97.802297999999979 36.998713000000002,-97.965379045838461 36.998468720211747,-98.033955000000006 36.998365999999997,-98.03989 36.998348999999997,-98.045341999999991 36.998327000000003,-98.111985000000004 36.998133000000003,-98.128185436781749 36.99814624647324,-98.147452 36.998162,-98.177595999999994 36.998008999999996,-98.190367496841162 36.998003995168112,-98.208218000000002 36.997996999999998,-98.219498999999999 36.997824,-98.237712000000002 36.99797199999999,-98.346187999999984 36.997962,-98.347186011230875 36.997961873429141,-98.354073 36.997960999999997,-98.408991 36.998513000000003,-98.418267999999998 36.998538000000003,-98.420209 36.998516000000002,-98.476584655565659 36.998733519956424,-98.485495952453391 36.998767903324406,-98.544871999999984 36.998997000000003,-98.622244241689657 36.999025734091177,-98.714511999999999 36.99906,-98.718464999999995 36.999179999999996,-98.761596999999995 36.999425000000002,-98.791936000000007 36.999254999999998,-98.793711000000002 36.999226999999991,-98.797451999999993 36.999228999999993,-98.811832237742053 36.99924038482925,-98.869449000000003 36.999285999999998,-98.880009 36.999262999999999,-98.880579999999995 36.999308999999997,-98.994371 36.999493,-99.000846251360556 36.99951188908193,-99.029336999999998 36.999594999999999,-99.044703416105833 36.999312701167916,-99.049695 36.999220999999999,-99.124882999999997 36.99942,-99.12944899999998 36.999422000000003,-99.215429691089184 36.999525607779709,-99.221470798208784 36.999532887387339,-99.22594390512576 36.999538277535649,-99.248119999999986 36.999564999999997,-99.277506000000002 36.999578999999997,-99.375390999999993 37.000176999999994,-99.375813215185289 37.000169016042221,-99.396673054015949 36.999774562980598,-99.407015 36.999578999999997,-99.456202999999988 36.999471,-99.484333000000007 36.999625999999999,-99.500394999999983 36.99957599999999,-99.500394999999983 36.999637,-99.502664999999993 36.999645,-99.504092999999997 36.999648,-99.508573999999982 36.999657999999997,-99.541115670095081 36.999572526667627,-99.558068000000006 36.999527999999998,-99.625399000000002 36.999670999999999,-99.648651999999998 36.999603999999998,-99.657657999999998 37.000197,-99.675479899119665 37.000294824261658,-99.700804554289192 37.000433831091229,-99.722499410223932 37.000552913981863,-99.774254999999997 37.000836999999997,-99.774816 37.000841,-99.786016000000004 37.000931,-99.875408999999991 37.001658999999997,-99.904897139036905 37.001652107487203,-99.995200999999994 37.001631000000003,-100.001285999999993 37.001699000000002,-100.002562999999995 37.001705999999999,-100.005706000000004 37.001725999999998,-100.08949117994996 37.002091554886341,-100.115721999999991 37.002206,-100.187546999999995 37.002082,-100.19237099999998 37.002035999999997,-100.193753999999998 37.002133,-100.201675999999992 37.002080999999997,-100.269984573601874 37.001795796937508,-100.395563941387664 37.001271475927872,-100.434302684862132 37.001109733298897,-100.434343961694367 37.0011095609592,-100.436759028295029 37.001099477534027,-100.462594151135718 37.000991610310841,-100.526354155903263 37.000725398506596,-100.551597999999998 37.000619999999998,-100.552683000000002 37.000734999999999,-100.591328000000004 37.000376000000003,-100.591413000000003 37.000399000000002,-100.629769999999994 37.000025,-100.63332699999998 36.999935999999998,-100.675551999999996 36.999687999999999,-100.734516999999997 36.999059000000003,-100.756894000000003 36.999356999999996,-100.759718826764541 36.999297806889686,-100.765484 36.999177000000003,-100.806116000000003 36.999091,-100.814277000000004 36.999085,-100.850054835707368 36.998687920265262,-100.855633999999981 36.998626000000002,-100.891659999999987 36.998604,-100.904274 36.998745,-100.904588000000004 36.998561000000002,-100.945565999999985 36.998151999999997,-100.958261085233985 36.99812508251128,-100.996501999999992 36.998044,-101.012641000000002 36.998176,-101.053589000000002 36.997966999999996,-101.066742000000005 36.997920999999998,-101.096255470166753 36.997758490771822,-101.211485999999979 36.997123999999999,-101.212908999999996 36.997044000000002,-101.283204233333976 36.996668964004151,-101.357796999999991 36.996271,-101.359673999999998 36.996231999999999,-101.37818 36.996164,-101.413867999999994 36.996008000000003,-101.415004999999994 36.995966000000003,-101.485326 36.995610999999997,-101.519065999999995 36.99554599999999,-101.555239 36.99541399999999,-101.600396000000003 36.995152999999995,-101.601592999999994 36.995094999999999,-101.672152845644291 36.994768289529276,-101.672152845650672 36.994768289529254,-101.718235173867967 36.994554916342196,-101.761767880686108 36.994353348566563,-101.826607533764985 36.994053124077894,-101.862548907230888 36.993886706153717,-101.881050066963184 36.993801040963412,-101.899294480822903 36.993716564573397,-101.902439999999999 36.993701999999999,-101.905152836625547 36.993689460946754,-101.93521516037174 36.99355050931414,-102.000446999999994 36.993248999999992,-102.000446999999994 36.993271999999997,-102.028206999999981 36.993124999999999,-102.042240000000007 36.993082999999999,-102.041951999999995 37.024741999999996,-102.04195 37.030805,-102.041921000000002 37.032178000000002,-102.041748999999996 37.034396999999998,-102.04191999999999 37.035083,-102.041983000000002 37.106551000000003,-102.041808999999986 37.111972999999999,-102.042091999999997 37.125020999999997,-102.042135000000002 37.125020999999997,-102.042121535383529 37.12671399835564,-102.042001999999997 37.141744000000003,-102.041962999999996 37.258164,-102.041663999999997 37.29764999999999,-102.041816999999995 37.309489999999997,-102.041973999999996 37.352612999999998,-102.042089000000004 37.352818999999997,-102.041523999999995 37.375017999999997,-102.041585760607518 37.389190434149839,-102.041675999999981 37.409897999999991,-102.041668999999999 37.434739999999998,-102.041754999999995 37.434854999999992,-102.041800999999992 37.469487999999998,-102.041786000000002 37.506065999999997,-102.04201599999999 37.535260999999998,-102.041899 37.541186000000003,-102.041893999999999 37.557977,-102.041618 37.607868000000003,-102.041584999999998 37.644281999999997,-102.041581999999991 37.654494999999997,-102.041694000000007 37.665680999999999,-102.041573999999997 37.680436,-102.041876000000002 37.723875,-102.041989965869121 37.73854062916552,-102.042158 37.760164000000003,-102.042668000000006 37.788758,-102.042952999999997 37.803534999999997,-102.043032999999994 37.824145999999999,-102.043218999999993 37.86792899999999,-102.043714531331204 37.914003914798144,-102.043845000000005 37.926135000000002,-102.043844000000007 37.928101999999996,-102.044644000000005 38.045532,-102.044255000000007 38.113010999999993,-102.044450868202546 38.120049353793199,-102.044589000000002 38.125012999999996,-102.044415729020699 38.133607343100145,-102.044251000000003 38.141777999999995,-102.044296878804843 38.175558844899406,-102.044398 38.250014999999998,-102.044510721728557 38.262483349316234,-102.044567999999998 38.268819,-102.044612999999998 38.312323999999997,-102.044944 38.384419,-102.044441999999989 38.415801999999999,-102.044936000000007 38.41968,-102.045323999999979 38.453646999999997,-102.045262999999991 38.505395,-102.045261999999994 38.505531999999995,-102.045112000000003 38.523783999999999,-102.045222999999993 38.543796999999998,-102.045188999999979 38.558731999999992,-102.045210999999995 38.581608999999993,-102.045287999999999 38.615248999999999,-102.045074 38.669617000000002,-102.045102 38.674945999999998,-102.045159999999996 38.675221,-102.045126999999994 38.686725000000003,-102.045156000000006 38.688555,-102.045211999999992 38.697566999999999,-102.045375000000007 38.754338999999995,-102.045287000000002 38.755527999999998,-102.045371000000003 38.770063999999998,-102.045447999999993 38.783453000000002,-102.045333999999997 38.799463000000003,-102.045387999999988 38.813391999999993,-102.046570999999986 39.047038,-102.047133999999986 39.129700999999997,-102.047188612927897 39.133146793270186,-102.047250000000005 39.13702,-102.047851021058236 39.220289738242592,-102.048449000000005 39.30313799999999,-102.04895999999998 39.37371199999999,-102.049100972149461 39.394064428437375,-102.049166999999983 39.403596999999998,-102.049369999999996 39.418210000000002,-102.049368999999999 39.423333,-102.049678999999998 39.506183,-102.049672999999999 39.536690999999998,-102.049553999999986 39.538932000000003,-102.049763758475066 39.568170000775439,-102.04980599999999 39.574058,-102.049954 39.592331,-102.050258163748609 39.627242889069393,-102.050421999999983 39.646047999999993,-102.050099000000003 39.653812000000002,-102.05059399999999 39.67559399999999,-102.050898693231389 39.741794606053567,-102.051254 39.818992,-102.051317999999995 39.833311000000002,-102.051362999999995 39.843471,-102.051569 39.849805000000003,-102.051743999999999 40.003078000000002))', 4326));
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/sql/tx.wkt	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-MULTIPOLYGON (((-103.00243399999998 36.500397,-102.90421904194784 36.500393342967676,-102.8402359524855 36.500390960558398,-102.840235952479716 36.500390960558398,-102.840235952474345 36.500390960558398,-102.840235952468362 36.500390960558398,-102.840235952461725 36.500390960558398,-102.840235952455885 36.500390960558398,-102.792077446284736 36.500389167377229,-102.643207699865854 36.500383624214699,-102.366462330167067 36.500373319605465,-102.250452999999979 36.500368999999999,-102.24499 36.500703999999999,-102.162463000000002 36.500326,-102.12545 36.500323999999999,-102.124752896301885 36.500398159967887,-102.122066000000004 36.500684,-101.930244999999999 36.500526,-101.925344139375468 36.500484781341967,-101.914929315957153 36.500397187533892,-101.826564999999988 36.499653999999992,-101.826498 36.499535000000002,-101.81449312121488 36.499579719643286,-101.788110000000003 36.499678000000003,-101.783359000000004 36.499709000000003,-101.781987 36.499718,-101.780609999999982 36.499727,-101.779435000000007 36.499733999999997,-101.773235954788092 36.499732939140301,-101.709314000000006 36.499721999999998,-101.698684999999998 36.499507999999999,-101.653707999999995 36.499572999999998,-101.649966000000006 36.499572999999998,-101.623914999999997 36.499527999999998,-101.414793008557069 36.499417763984319,-101.392608849457574 36.499406069885133,-101.340061173170298 36.499378370041477,-101.085155999999984 36.499243999999997,-101.052418000000003 36.499562999999995,-101.04533099999999 36.499540000000003,-100.977087999999995 36.499594999999999,-100.936058000000003 36.499602000000003,-100.918513000000004 36.499620999999998,-100.884174000000002 36.499682,-100.884079999999997 36.499682,-100.859656999999984 36.499687000000002,-100.850840000000005 36.49969999999999,-100.824235999999999 36.499617999999998,-100.824218000000002 36.499617999999998,-100.80619 36.499673999999999,-100.806172000000004 36.499634,-100.802909 36.499620999999998,-100.802886 36.499620999999998,-100.761810999999994 36.499617999999998,-100.761810999999994 36.499580000000002,-100.724361999999999 36.499580000000002,-100.724361000000002 36.499558,-100.708625999999995 36.499552999999999,-100.708628000000004 36.499520999999994,-100.657762999999989 36.499482999999991,-100.657762999999989 36.499499999999998,-100.648342999999997 36.499495000000003,-100.648343999999994 36.499462999999999,-100.592613999999998 36.499468999999998,-100.592555999999988 36.499468999999998,-100.592551 36.499428999999999,-100.583539000000002 36.499482999999991,-100.583378999999994 36.499442999999999,-100.578113999999999 36.499462999999999,-100.578113999999999 36.499439000000002,-100.546144999999996 36.499343000000003,-100.531215000000003 36.499341,-100.531215000000003 36.499290000000002,-100.530478000000002 36.49924,-100.530314000000004 36.499357000000003,-100.522227 36.499290999999999,-100.441064999999995 36.499490000000002,-100.441063999999997 36.499462,-100.433959000000002 36.499456000000002,-100.421327999999988 36.499447000000004,-100.421300999999985 36.499487999999999,-100.413634000000002 36.499443999999997,-100.41355 36.499468999999998,-100.378634000000005 36.499516999999997,-100.378591999999998 36.499445,-100.35185199999998 36.499487000000002,-100.351841999999991 36.499473000000002,-100.334463999999997 36.49942,-100.334440999999998 36.49944,-100.324150000000003 36.499679,-100.311244999999985 36.499631,-100.311018000000004 36.499687999999999,-100.310642999999985 36.499642,-100.253572851827684 36.499638031344489,-100.181220999999994 36.499633000000003,-100.090020999999993 36.499634,-100.000405999999984 36.499701999999999,-100.0004059967807 36.499497793115623,-100.00040222345956 36.260147946939995,-100.000399000000002 36.055677000000003,-100.000396170268971 35.879197994164429,-100.000394020347557 35.745115995014778,-100.000391999999991 35.619115,-100.000390396259149 35.519130234823749,-100.000386875554753 35.299632926398459,-100.000386874882437 35.299591010324292,-100.000386852473085 35.298193905884737,-100.000384999999994 35.182701999999999,-100.000381972929958 34.852568985943549,-100.000381605014198 34.812443999872983,-100.000381000000004 34.746460999999996,-100.000381000000004 34.570853999999997,-100.000381000000004 34.570647,-100.000381000000004 34.560509000000003,-99.998254592787575 34.560446149085699,-99.997501461048799 34.560423888524269,-99.985833 34.560079000000002,-99.974761999999998 34.561317999999993,-99.971554999999995 34.562179,-99.965608000000003 34.565843999999998,-99.958898000000005 34.571271000000003,-99.957540999999992 34.572708999999996,-99.95755299999999 34.574168999999998,-99.956716999999998 34.576523999999992,-99.954566999999997 34.578195,-99.94571999999998 34.579273,-99.930492488760507 34.576894921075187,-99.930189904388058 34.576847666503667,-99.929333999999997 34.576714000000003,-99.923210999999995 34.574551999999997,-99.921801000000002 34.570253,-99.915771000000007 34.565975000000002,-99.914151070156151 34.564995899308187,-99.898943000000003 34.555804000000002,-99.896006999999997 34.555529999999997,-99.89376 34.554219000000003,-99.887146999999999 34.549047000000002,-99.885392392967745 34.547401436342639,-99.884583851343237 34.546643143067669,-99.87806651563541 34.540530839522475,-99.87650823800611 34.539069404005723,-99.874403 34.537095,-99.873254000000003 34.535350999999999,-99.872356999999994 34.532096000000003,-99.868953000000005 34.52761499999999,-99.867217250163094 34.525864500605081,-99.853065999999998 34.511592999999998,-99.832903999999985 34.500067999999999,-99.825324999999992 34.497596,-99.818185999999997 34.487839999999991,-99.818738999999979 34.484975999999996,-99.814544624457952 34.476663062301249,-99.814312999999984 34.476204000000003,-99.793683999999999 34.453893999999998,-99.783787954821193 34.445078397966533,-99.782985999999994 34.444364,-99.775743000000006 34.444225000000003,-99.774224411180043 34.443216449834381,-99.765598999999995 34.437488000000002,-99.764825999999999 34.436433999999998,-99.764881999999986 34.435265999999999,-99.767647999999994 34.431854,-99.767234000000002 34.430501999999997,-99.754248000000004 34.421288999999994,-99.740907000000007 34.414763,-99.735679661059166 34.413018903486261,-99.730348000000006 34.411239999999992,-99.720258999999999 34.406295,-99.719721039768913 34.405807854123296,-99.716415999999995 34.402814999999997,-99.715089000000006 34.400753999999999,-99.714231999999996 34.397821999999998,-99.714838 34.394523999999997,-99.712682 34.390928000000002,-99.707900999999993 34.387538999999997,-99.696461999999997 34.381036000000002,-99.678282999999979 34.379798999999998,-99.672337448339604 34.378003970284972,-99.671377000000007 34.377713999999997,-99.666676988468737 34.374633899592595,-99.665992000000003 34.374184999999997,-99.665404581506792 34.374094751646162,-99.662705000000003 34.373679999999993,-99.659863615570984 34.374283464835351,-99.659362000000002 34.374389999999998,-99.654194000000004 34.376519000000002,-99.649662000000006 34.379885000000002,-99.630904999999998 34.376007,-99.628541546335526 34.375150829397036,-99.624196999999995 34.373576999999997,-99.600026 34.374687999999999,-99.596322999999998 34.377136999999998,-99.587595999999991 34.385866999999998,-99.587235087741874 34.386377538370702,-99.585718954359294 34.388522226586467,-99.585441999999986 34.388914,-99.584530999999984 34.391204999999999,-99.585306000000003 34.398122,-99.584479999999985 34.407673000000003,-99.580059999999989 34.416652999999997,-99.574366999999995 34.418281,-99.569695999999993 34.418418000000003,-99.563067665646059 34.417445690943012,-99.562203999999994 34.417318999999999,-99.561530791054494 34.417028950664999,-99.555986000000004 34.414639999999999,-99.549242000000007 34.412714999999992,-99.529786 34.411451999999997,-99.528744576810823 34.411579971493573,-99.523649999999989 34.412205999999998,-99.517623999999998 34.414493999999991,-99.514279999999999 34.414034999999998,-99.499874999999989 34.409607999999999,-99.497090999999983 34.407730999999991,-99.494103999999993 34.404755000000002,-99.490425999999999 34.399693999999997,-99.487218999999982 34.397955000000003,-99.477547 34.396355,-99.477019613816751 34.396364300212412,-99.474810232095294 34.396403261641368,-99.472297823530695 34.396447566809115,-99.470968999999997 34.396470999999991,-99.463286816319666 34.393024688790533,-99.452647999999996 34.388252,-99.445020999999983 34.379891999999998,-99.440759999999997 34.374122999999997,-99.430994999999982 34.373413999999997,-99.43081720973791 34.373532661492725,-99.420432000000005 34.380464000000003,-99.408847999999992 34.372776000000002,-99.407167999999999 34.372605,-99.406018176721332 34.372844364351735,-99.404336527339453 34.373194441551952,-99.402959999999979 34.373480999999998,-99.399602999999999 34.375078999999999,-99.397253000000006 34.377870999999999,-99.396160718377317 34.383134276834824,-99.391492 34.405631,-99.393918999999997 34.415273999999989,-99.396488000000005 34.417290999999999,-99.396901999999997 34.418688000000003,-99.397009999999995 34.424002999999999,-99.395768462359129 34.43494110377263,-99.394955999999993 34.442098999999999,-99.381011 34.456935999999999,-99.376037841709419 34.458617501802458,-99.375365000000002 34.458844999999997,-99.369609999999994 34.458699000000003,-99.358795 34.455862999999994,-99.354671999999994 34.451856999999997,-99.35478257092818 34.450383391084422,-99.354837000000003 34.449657999999999,-99.356770999999995 34.446542,-99.357101999999998 34.444915000000002,-99.356712999999999 34.442143999999999,-99.350407000000004 34.437083,-99.342020261837703 34.431514649700844,-99.341336999999996 34.431061,-99.341016600261696 34.430906286427735,-99.334036999999995 34.427536000000003,-99.331050066208874 34.424666026137302,-99.328674000000007 34.422383000000004,-99.325094009617374 34.416010263301388,-99.324222000000006 34.414458000000003,-99.321411663781888 34.411055277053073,-99.319798627189357 34.409102230797522,-99.319605999999979 34.408869000000003,-99.318363000000005 34.408295999999993,-99.316372999999999 34.408204999999995,-99.308273999999997 34.410013999999997,-99.299098 34.414227999999994,-99.294647999999981 34.415373000000002,-99.289922000000004 34.414731000000003,-99.287844819286008 34.413958196831629,-99.264167 34.405149000000002,-99.261320999999981 34.403498999999996,-99.261255940568432 34.403158389836314,-99.260996786434447 34.401801622187399,-99.259199386422964 34.392391568987605,-99.258998120407611 34.391337867029385,-99.258979999999994 34.391243000000003,-99.259239630132384 34.391043961974496,-99.260703756811225 34.389921531074158,-99.261190999999997 34.389547999999998,-99.262646013804954 34.388906249865343,-99.264243556741917 34.388201635660714,-99.264508000000006 34.388084999999997,-99.271031915197597 34.387722560266795,-99.271781628057255 34.38768090955238,-99.273607516746409 34.387579471291865,-99.273957999999993 34.38756,-99.27534 34.386598999999997,-99.274925999999994 34.384903999999999,-99.271845396288441 34.382114976063626,-99.271280999999988 34.381603999999996,-99.258696 34.372633999999998,-99.254722 34.372405,-99.251407999999984 34.375079999999997,-99.248969000000002 34.375984000000003,-99.242944999999992 34.372667999999997,-99.239138083830497 34.366035888164781,-99.237232999999989 34.362716999999996,-99.237183660287812 34.362563767173611,-99.235448627455725 34.357175329079247,-99.234251999999984 34.353459,-99.233273999999994 34.344101000000002,-99.23260599999999 34.342379999999999,-99.229993999999991 34.340538000000002,-99.226152999999982 34.339725999999999,-99.221975 34.340020000000003,-99.219768999999999 34.341377,-99.217335000000006 34.341520000000003,-99.213134999999994 34.340369000000003,-99.210957832415772 34.336710386428308,-99.210716000000005 34.336303999999998,-99.20972399999998 34.324934999999996,-99.211600000000004 34.313969999999998,-99.213476 34.310671999999997,-99.213233598142949 34.308226764636807,-99.211647999999997 34.292231999999991,-99.211468055040228 34.291676209875057,-99.209990337717599 34.287112032604114,-99.209742000000006 34.286344999999997,-99.209514950796304 34.286049346749877,-99.207560999999998 34.283504999999998,-99.203681000000003 34.281925999999999,-99.200221999999997 34.281151999999999,-99.196259999999995 34.281463000000002,-99.196052113016066 34.281264951942028,-99.19571031750732 34.280939333014615,-99.195605 34.280839,-99.194569999999985 34.272424,-99.196926000000005 34.260928999999997,-99.197153 34.244298,-99.19555299999999 34.24006,-99.191138999999993 34.23234,-99.190145999999984 34.229660000000003,-99.190036000000006 34.227186000000003,-99.192076 34.222192,-99.192683000000002 34.218825000000002,-99.192104 34.216693999999997,-99.189758414718312 34.214539281858485,-99.189510999999996 34.214312,-99.188483307800709 34.214128939694163,-99.159015999999994 34.20888,-99.143985 34.214762999999998,-99.138220000000004 34.219158999999998,-99.130609000000007 34.219408,-99.128513999999996 34.218766000000002,-99.127549000000002 34.217986000000003,-99.126614000000004 34.21532899999999,-99.127525000000006 34.213771,-99.130089999999996 34.212192000000002,-99.131552999999997 34.209352000000003,-99.131884999999997 34.207382000000003,-99.129791999999995 34.204402999999999,-99.126566999999994 34.203004,-99.119203999999996 34.201746999999997,-99.108757999999995 34.203400999999999,-99.102001344898341 34.205813362825268,-99.092190999999985 34.209316,-99.08119261238302 34.211229594305671,-99.079534999999993 34.211517999999991,-99.075978000000006 34.211221000000002,-99.06646499999998 34.208404000000002,-99.060343999999986 34.204760999999991,-99.059158999999994 34.202928999999997,-99.058800000000005 34.201256,-99.058083999999994 34.200569000000002,-99.048792000000006 34.198208999999999,-99.043470999999997 34.198208,-99.040961999999993 34.200842000000002,-99.039004000000006 34.204667,-99.037458999999998 34.206454,-99.036272999999994 34.206912000000003,-99.013074999999986 34.203221999999997,-99.005790000000005 34.206646999999997,-99.002916243275195 34.208781598893673,-99.002945441244265 34.209102775846141,-99.003147197273819 34.211322087284138,-99.003432988816769 34.214465787333673,-99.000760999999997 34.217643000000002,-98.99085199999999 34.221632999999997,-98.987293999999991 34.221223000000002,-98.981363999999999 34.217582999999991,-98.978684999999984 34.210231,-98.976586999999995 34.206291,-98.974131999999983 34.203566000000002,-98.969003 34.201298999999999,-98.966301999999999 34.201323000000002,-98.962469999999996 34.204667999999998,-98.962085000000002 34.206386000000002,-98.962306999999981 34.211312,-98.960791 34.213029999999996,-98.958474999999993 34.213854999999995,-98.952512999999982 34.212649999999996,-98.950395999999984 34.21168,-98.940219999999997 34.203685999999998,-98.928145 34.192689,-98.927456000000006 34.191155000000002,-98.923128999999989 34.185977999999999,-98.920704 34.183435000000003,-98.918333000000004 34.181831000000003,-98.909348999999992 34.177498999999997,-98.892677318093561 34.17250349095427,-98.87651287834953 34.167659972141138,-98.872921999999988 34.166584,-98.871543000000003 34.165026999999995,-98.871211000000002 34.163012000000002,-98.872229000000004 34.160446,-98.874954999999986 34.157031000000003,-98.874871999999996 34.155656999999998,-98.873271000000003 34.153596,-98.868116 34.149635000000004,-98.862549999999999 34.149110999999998,-98.860124999999996 34.149912999999998,-98.858418999999998 34.152732,-98.8579 34.159627,-98.857321999999982 34.161093999999999,-98.855585000000005 34.161620999999997,-98.854264541670545 34.16164976192438,-98.831114999999983 34.162154,-98.812953999999991 34.158444000000003,-98.806809999999984 34.155901,-98.804411553093104 34.153928907629435,-98.792015000000006 34.143735999999997,-98.779288744496085 34.140194111533035,-98.773070373738221 34.138463455122455,-98.767587610783494 34.136937528280072,-98.765569999999983 34.136375999999998,-98.764702233233265 34.135780085954792,-98.763778343962841 34.135145631382905,-98.761796999999987 34.133785000000003,-98.760558000000003 34.132387999999999,-98.759485999999995 34.128881999999997,-98.759653 34.126911999999997,-98.757118934362524 34.12470437936247,-98.757036999999983 34.124633000000003,-98.753813984496389 34.124468645349353,-98.749290999999999 34.124237999999998,-98.741966000000005 34.125529999999998,-98.740191287161664 34.126850584722824,-98.739461000000006 34.127394000000002,-98.737231999999992 34.130991999999999,-98.736819999999994 34.133374000000003,-98.735471000000004 34.135207999999999,-98.734286999999995 34.135758000000003,-98.730242646678789 34.1359250861193,-98.717536999999993 34.136450000000004,-98.716104 34.135947000000002,-98.70640034274598 34.134745066348501,-98.696517999999998 34.133521000000002,-98.690291400890658 34.133167457450512,-98.690072 34.133155000000002,-98.688275858887323 34.134465065675442,-98.685589983550884 34.136424083851644,-98.676900633591032 34.14276190388366,-98.676457484208683 34.143085127260051,-98.670573548505118 34.147376740066704,-98.655654999999982 34.158257999999996,-98.650582999999997 34.163113000000003,-98.648072999999997 34.164440999999997,-98.643223000000006 34.164530999999997,-98.635729999999995 34.161617999999997,-98.634085211037615 34.161100728840964,-98.630950281399748 34.160114822001631,-98.621666000000005 34.157195000000002,-98.620507214282355 34.157012478916968,-98.617663812339856 34.156564612849806,-98.616732999999996 34.156418000000002,-98.615748434938936 34.156446107485429,-98.612133570686254 34.156549305078279,-98.611829 34.156557999999997,-98.610173632571488 34.157093658210222,-98.610154152422197 34.157099961766605,-98.608852999999996 34.157521000000003,-98.603977999999998 34.160249,-98.599789 34.160570999999997,-98.577135999999996 34.148961999999997,-98.572451 34.145091,-98.560191000000003 34.133201999999997,-98.558593000000002 34.128253999999998,-98.550916999999998 34.119334000000002,-98.536257000000006 34.107343,-98.530610999999993 34.099843,-98.528199999999998 34.094960999999998,-98.504182 34.072370999999997,-98.487068052145446 34.063003092954936,-98.486783271268621 34.06284720836274,-98.486328 34.062598,-98.483944186894661 34.06241565608709,-98.482821069121968 34.062329745958955,-98.482039999999998 34.062269999999998,-98.475065999999998 34.064269000000003,-98.449033999999983 34.073461999999999,-98.446378999999993 34.075429999999997,-98.445784000000003 34.076827000000002,-98.445590305319797 34.079232123390703,-98.445584999999994 34.079298,-98.445259148452962 34.079797720749731,-98.443724000000003 34.082152,-98.442807999999999 34.083143999999997,-98.442148160210323 34.083427517317581,-98.441104460406791 34.083875970068213,-98.440092000000007 34.084311,-98.439068026005657 34.084479541105658,-98.434822808733685 34.08517828308225,-98.432126999999994 34.085622,-98.43151641213494 34.085605425226575,-98.43092946822253 34.085589492282431,-98.428479999999993 34.085523000000002,-98.425229999999999 34.084798999999997,-98.422252999999998 34.083036999999997,-98.419995 34.082487999999998,-98.419161945519861 34.082694545588339,-98.41804644206556 34.082971120917755,-98.417812999999995 34.083029000000003,-98.414426000000006 34.085073999999999,-98.400747497198822 34.098985940284976,-98.399776999999986 34.099972999999999,-98.398505572550647 34.104180252359392,-98.39838899999998 34.104565999999998,-98.398160000000004 34.121395999999997,-98.400493999999995 34.121777999999999,-98.400966999999994 34.122236,-98.398441000000005 34.128456,-98.384381000000005 34.146317000000003,-98.381237999999996 34.149453999999999,-98.367493999999994 34.156190999999993,-98.366862955318183 34.156357896864854,-98.364023000000003 34.157108999999998,-98.34173552164826 34.153594120579292,-98.339428832109121 34.153230340726623,-98.331172907733077 34.151928328079421,-98.326986688030772 34.151268134169193,-98.325445000000002 34.151024999999997,-98.324621914768684 34.150650086831803,-98.323612587945547 34.150190341106089,-98.322580000000002 34.149720000000002,-98.320651676675396 34.148059023851737,-98.318749999999994 34.146420999999997,-98.315432139066189 34.144301906683673,-98.312023538956254 34.142124858924547,-98.300208999999995 34.134579000000002,-98.299345719035045 34.134365643147696,-98.29862570169189 34.134187693395319,-98.293901000000005 34.133020000000002,-98.280321 34.130749999999999,-98.258217018239392 34.129574098564007,-98.256467 34.129480999999998,-98.254901718278489 34.129708262798985,-98.247953999999993 34.13071699999999,-98.241012999999995 34.133102999999998,-98.225282000000007 34.127245000000002,-98.223600000000005 34.125093,-98.216463000000005 34.121820999999997,-98.203710999999998 34.117676000000003,-98.200074999999998 34.116782999999998,-98.191455000000005 34.115752999999998,-98.169120000000007 34.114170999999999,-98.157411999999994 34.120466999999998,-98.154353999999998 34.122734,-98.142753999999996 34.136358999999999,-98.136769999999999 34.144992000000002,-98.130815999999996 34.150531999999998,-98.123377000000005 34.154539999999997,-98.114506000000006 34.154727,-98.109461999999979 34.154110999999993,-98.107064999999992 34.152531000000003,-98.101937000000007 34.146829999999994,-98.092021474678845 34.132735952269094,-98.090223999999992 34.130181,-98.089754999999982 34.128211,-98.090659999999986 34.12198,-98.092421000000002 34.116917,-98.095117999999999 34.11119,-98.096177285423778 34.109455137055363,-98.096466125075011 34.108982084942461,-98.099327999999986 34.104295,-98.101378023037029 34.101786489578267,-98.103538246996251 34.099143131812454,-98.104308999999986 34.098199999999999,-98.119416999999999 34.084474,-98.121038999999996 34.081265999999999,-98.120207999999991 34.072127000000002,-98.11802999999999 34.067064999999999,-98.114587 34.06228,-98.100919767943822 34.050244792175462,-98.099096110217346 34.048638900093685,-98.096177018664264 34.044625138601674,-98.096541898037387 34.040976263553816,-98.09727167092565 34.038969381040054,-98.097731364247636 34.038509687718062,-98.098001443813914 34.038239608151798,-98.102015208841422 34.03732738850595,-98.104022094890695 34.036232725638037,-98.104083244997014 34.036133356900422,-98.105481647738245 34.033860956680144,-98.105481647738245 34.032444902147553,-98.105481647738245 34.031306746267951,-98.103616999999986 34.029206999999992,-98.088202999999993 34.005481000000003,-98.085260000000005 34.003259,-98.082839000000007 34.002412,-98.055197000000007 33.995840999999999,-98.050169864666017 33.994989457544634,-98.041117 33.993456000000002,-98.027671999999981 33.993357000000003,-98.019485000000003 33.993803999999997,-98.018481521828946 33.993960861546498,-98.005667000000003 33.995964,-97.987387999999996 33.999822999999999,-97.982805999999997 34.001949000000003,-97.978243000000006 34.005386999999999,-97.974597608872358 34.00657735007583,-97.974172999999993 34.006715999999997,-97.973934144800623 34.006593661859519,-97.971670000000003 34.005434,-97.968339999999998 34.000529999999998,-97.965354903485249 33.996992503283089,-97.963375425210828 33.994646717187933,-97.96302799999998 33.994235000000003,-97.962715090700769 33.994009516348072,-97.958325000000002 33.990845999999998,-97.955849999999998 33.990136,-97.952687999999995 33.990113999999998,-97.947571999999994 33.991053,-97.946472999999997 33.990731999999994,-97.945729999999998 33.989839000000003,-97.945949999999982 33.988395999999995,-97.952184120103468 33.971402949359636,-97.95307606469359 33.968971674482539,-97.95691699999999 33.958502000000003,-97.960351000000003 33.951928000000002,-97.965737000000004 33.947392,-97.972662 33.944527,-97.974172999999993 33.942832000000003,-97.974062000000004 33.940289,-97.972493999999998 33.937907000000003,-97.971175000000002 33.937128999999999,-97.965952999999999 33.936191,-97.963425 33.936236999999998,-97.955511 33.938186000000002,-97.954466999999994 33.937773999999997,-97.953395 33.936444999999999,-97.952679000000003 33.929482,-97.953694999999996 33.924373000000003,-97.957155 33.914453999999999,-97.960615000000004 33.910353999999998,-97.961188664141474 33.909913087050903,-97.963139679674441 33.908413554571595,-97.964461 33.907398,-97.964803587866868 33.907309441163022,-97.9693952279504 33.906122503898267,-97.969873000000007 33.905999,-97.970298415583201 33.906261144464871,-97.973142999999993 33.908014,-97.976962999999998 33.912548999999999,-97.978803999999997 33.912548,-97.979984999999999 33.911402000000002,-97.983551999999989 33.904001999999991,-97.984539999999996 33.900703,-97.984566 33.899076999999998,-97.984416725907181 33.89872544733722,-97.984025057628415 33.897803036597892,-97.98383498894799 33.897355409354304,-97.983768999999995 33.897199999999991,-97.977858999999995 33.889929000000002,-97.974177999999995 33.886642999999999,-97.967776999999998 33.882429999999999,-97.958438 33.879179,-97.951215000000005 33.878424000000003,-97.946463999999992 33.878883000000002,-97.942729999999997 33.879845000000003,-97.938801999999995 33.879891,-97.936743000000007 33.879204,-97.933120450042608 33.877388671138185,-97.918328311832767 33.869976048610916,-97.905467000000002 33.863530999999995,-97.896737999999985 33.857984999999999,-97.877386999999999 33.850236000000002,-97.871447000000003 33.849001,-97.865764999999982 33.849392999999999,-97.835425213046037 33.857383352392631,-97.834333 33.857671000000003,-97.833886750888084 33.857971936447115,-97.833218553718808 33.858422547723912,-97.806802470257153 33.876236728393856,-97.805423000000005 33.877167,-97.803472999999997 33.880189999999999,-97.801578000000006 33.885137999999998,-97.784656999999982 33.890631999999997,-97.78061799999999 33.895533,-97.779683000000006 33.899242999999998,-97.780339999999995 33.904833000000004,-97.783716999999996 33.910559999999997,-97.772672 33.914382000000003,-97.765445999999997 33.913531999999989,-97.763769999999994 33.914240999999997,-97.762914903547767 33.914953098088951,-97.761142192227695 33.916429357685161,-97.760223999999994 33.917194000000002,-97.759399000000002 33.91881999999999,-97.759833999999984 33.92521,-97.762660999999994 33.930846000000003,-97.762767999999994 33.934396,-97.752956999999995 33.937049000000002,-97.738478 33.937421,-97.736553999999998 33.936574999999998,-97.735919542935619 33.936533987763056,-97.734773489745407 33.936459905200778,-97.733722999999998 33.936391999999998,-97.732266999999993 33.936691000000003,-97.725289000000004 33.941045000000003,-97.720699142354164 33.94461309292862,-97.716772000000006 33.947665999999998,-97.714693355370301 33.94981590741822,-97.712051708440285 33.952548118711093,-97.709683999999996 33.954996999999999,-97.708350195107343 33.95701014009046,-97.70415899999999 33.963335999999998,-97.69792099999998 33.977331,-97.69310999999999 33.983699,-97.688023 33.986606999999999,-97.671772000000004 33.991370000000003,-97.661489000000003 33.990817999999997,-97.656210000000002 33.989488,-97.633778000000007 33.981256999999999,-97.609091000000006 33.968093000000003,-97.589597999999995 33.953553999999997,-97.588828000000007 33.951881999999998,-97.591270649549756 33.930345579062646,-97.591514000000004 33.928199999999997,-97.595084 33.922953999999997,-97.596154999999996 33.922105999999999,-97.59697899999999 33.920228000000002,-97.597115000000002 33.917867999999999,-97.596955673755872 33.917077348335745,-97.596288999999985 33.913769000000002,-97.593782375104212 33.910260437761373,-97.589253999999997 33.903922,-97.587440999999984 33.902479,-97.582744000000005 33.900784999999999,-97.578907598302408 33.900207204108142,-97.558269999999993 33.897098999999997,-97.555002000000002 33.897281999999997,-97.551541 33.897947000000002,-97.543245999999996 33.901288999999998,-97.533617322522971 33.906127586572126,-97.532723000000004 33.906576999999999,-97.525277000000003 33.911750999999995,-97.519170999999986 33.913637999999999,-97.504870374844515 33.918353570482601,-97.500960000000006 33.919643,-97.495648860558163 33.919307898609453,-97.494857999999979 33.919257999999999,-97.492061582842766 33.918500058129531,-97.487115891787269 33.917159576320657,-97.48650499999998 33.916993999999995,-97.484158940985964 33.915822631562747,-97.460375999999982 33.903948,-97.458068999999995 33.901634999999999,-97.451065249608234 33.891558064966901,-97.450953999999996 33.891398000000002,-97.451469000000003 33.87093,-97.452287410342421 33.86882620086994,-97.455665873415143 33.860141550511862,-97.457616999999999 33.855125999999998,-97.459565999999995 33.853316,-97.461485999999994 33.849559999999997,-97.462857 33.841771999999999,-97.459067999999988 33.834581,-97.453056999999987 33.828536,-97.444192999999999 33.823773000000003,-97.426492999999994 33.819398,-97.410387 33.818845000000003,-97.403235695189224 33.818961304668854,-97.384901622687948 33.819259479377855,-97.372940999999997 33.819454,-97.368744000000007 33.821471000000003,-97.365506999999994 33.823762999999992,-97.358512999999988 33.830018000000003,-97.348337999999984 33.843876000000002,-97.340900078515631 33.860236176367188,-97.339391593410966 33.867629740388111,-97.337846311291798 33.870430566802547,-97.336524008254173 33.872827243260353,-97.33293952159849 33.874440259476913,-97.329175814777756 33.874440259476913,-97.327562805507441 33.873902588562437,-97.326564370247013 33.872737756024428,-97.326487449786001 33.872648016149064,-97.324157539016809 33.866016724171544,-97.322365295688968 33.864941382342593,-97.318243141591921 33.865120602507631,-97.31654836796514 33.865642075591225,-97.315913230822716 33.865837504006514,-97.314412999999988 33.866988999999997,-97.310479256695203 33.873361218982971,-97.307489695517361 33.878203969770759,-97.302471419756401 33.880175433263638,-97.299245387323282 33.880175433263638,-97.295170524880618 33.877119286431629,-97.294227111562321 33.876411726442917,-97.286921603026471 33.869423850720118,-97.28598279642199 33.868525862052032,-97.284253187903744 33.867526845294535,-97.279107999999979 33.864555000000003,-97.275347999999994 33.863225,-97.271531999999993 33.862560000000002,-97.257971626565464 33.863220416657512,-97.256624999999985 33.863286000000002,-97.255635999999996 33.863697999999999,-97.254234999999994 33.865322999999997,-97.249208999999993 33.875100999999994,-97.246418496348156 33.898356425448434,-97.246179999999981 33.900343999999997,-97.245398270620598 33.902084836575838,-97.245057441245748 33.90284383100218,-97.244945999999999 33.903092,-97.242092 33.906277000000003,-97.241794392023195 33.906436890220043,-97.238755934556053 33.908069304909361,-97.226522000000003 33.914642,-97.210920999999999 33.916063999999999,-97.210512235443105 33.915911440173737,-97.206141000000002 33.914279999999998,-97.185457999999997 33.9007,-97.180845000000005 33.895203999999993,-97.179608999999999 33.892249999999997,-97.170773789281327 33.861660975771436,-97.166629 33.847310999999998,-97.166824000000005 33.840395,-97.171627 33.835335,-97.180939422624874 33.831550006302521,-97.181369999999987 33.831375,-97.186254000000005 33.830894,-97.193690000000004 33.831307000000002,-97.195830999999998 33.830803000000003,-97.197477000000006 33.829794999999997,-97.199700000000007 33.827322000000002,-97.203513999999998 33.821824999999997,-97.204994999999997 33.81886999999999,-97.205652 33.809823999999999,-97.205556910941183 33.806237292333442,-97.205445103342427 33.802019970418343,-97.205431000000004 33.801487999999999,-97.205114487332324 33.800890302957832,-97.203236000000004 33.797342999999998,-97.194785999999993 33.785344000000002,-97.190397000000004 33.781153000000003,-97.187792000000002 33.769702000000002,-97.181842999999986 33.755869999999994,-97.173532726140948 33.740090726508434,-97.172577000695028 33.738276026602087,-97.172191999999995 33.737544999999997,-97.168438536634085 33.734131892706188,-97.163454368039083 33.729599677915004,-97.163149000000004 33.729322000000003,-97.162807288850388 33.729115696596551,-97.155066000000005 33.724442000000003,-97.152609597300682 33.723370138808036,-97.150103410774264 33.72227655424301,-97.149393999999987 33.721966999999999,-97.137529999999998 33.718663999999997,-97.126102000000003 33.716940999999998,-97.121101999999993 33.717174,-97.119522126797463 33.717502594273334,-97.114921749218269 33.718459416457094,-97.113264999999998 33.718803999999999,-97.112398501853761 33.719102240295193,-97.110065570752283 33.719905212653977,-97.108936 33.720294000000003,-97.108097026518521 33.720734123472262,-97.106518853348803 33.721562029324609,-97.104524999999995 33.722608,-97.097154000000003 33.727809,-97.094085000000007 33.730992,-97.092697209381924 33.732891057656268,-97.092130098039192 33.733667094850453,-97.091071999999983 33.735115,-97.089936943375889 33.737167271747261,-97.087911027802278 33.740830286618703,-97.086195000000004 33.743932999999998,-97.084820762198987 33.752363244406453,-97.084693 33.753146999999998,-97.08461299999999 33.759993,-97.085217999999998 33.765512,-97.087362453285593 33.77250304797397,-97.087851999999998 33.774099,-97.093101265647221 33.787040841586602,-97.093917000000005 33.789051999999998,-97.094675961767678 33.791977368936216,-97.095047178759813 33.793408200769441,-97.095235999999986 33.794136000000002,-97.095080023591905 33.79561056406444,-97.094877682854474 33.797523445530629,-97.094770999999994 33.798532000000002,-97.093897185962049 33.800360798466031,-97.09266432242093 33.802941048788071,-97.092111999999986 33.804096999999999,-97.087998999999982 33.808746999999997,-97.078589999999991 33.812755999999993,-97.067977124183287 33.814475679891196,-97.064604445188394 33.815487484896828,-97.062631847535258 33.816079264957295,-97.058622892638837 33.818751903281317,-97.055415722506638 33.823829921794093,-97.055412197115942 33.8238546000754,-97.055148464371385 33.82570077017467,-97.055682980641905 33.830778788687446,-97.057821087157734 33.834520485448607,-97.058282726048489 33.836367011192308,-97.058622892638837 33.837727655580807,-97.057553829022481 33.840133030590344,-97.055415722506638 33.841202089027483,-97.052208542016004 33.841736615656437,-97.048734113748537 33.840934820533782,-97.045339940802535 33.839496399893775,-97.041245000000004 33.837761,-97.038858000000005 33.838264000000002,-97.023899 33.844213000000003,-97.017857000000006 33.850141999999998,-97.010381749407998 33.858564100233409,-96.999664164722446 33.87063922351804,-96.985567000000003 33.886521999999999,-96.983970999999997 33.892082999999992,-96.984938999999997 33.904865999999991,-96.985275905099471 33.906070041818985,-96.988744999999994 33.918467999999997,-96.993996999999979 33.928978999999998,-96.995022999999989 33.932034999999999,-96.995140238436761 33.933014648420269,-96.996024643022366 33.940404763634284,-96.996183000000002 33.941727999999998,-96.996167702736543 33.941832622020257,-96.995421139189489 33.946938567064805,-96.995367999999999 33.947302,-96.994947208134789 33.948043840473474,-96.994456760007211 33.948908482357652,-96.994287999999983 33.949205999999997,-96.990835000000004 33.952700999999998,-96.988126301178397 33.954514162310069,-96.987892000000002 33.954670999999998,-96.982723774786024 33.956016867344054,-96.981537499896135 33.956325787441237,-96.981336999999982 33.956377999999994,-96.979415000000003 33.956178,-96.979347000000004 33.955129999999997,-96.980675999999988 33.951813999999999,-96.981031000000002 33.949159999999999,-96.97981799999998 33.941588000000003,-96.976955000000004 33.937452999999998,-96.973806999999979 33.935696999999998,-96.97254199999999 33.935794999999999,-96.952313000000004 33.944581999999997,-96.944610999999995 33.949216999999997,-96.933309804512817 33.955134148312766,-96.932252000000005 33.955688000000002,-96.924267999999998 33.959159,-96.922113999999979 33.959578999999998,-96.921429967464036 33.959451233053208,-96.919039990098355 33.959004821377064,-96.918617999999995 33.958925999999998,-96.91833921313939 33.958790334953079,-96.917063225391544 33.958169405626251,-96.916299999999993 33.957797999999997,-96.91417790611122 33.956157267456653,-96.911732563120111 33.95426660943896,-96.911336000000006 33.953960000000002,-96.910857206749995 33.953482904168467,-96.908421363636307 33.951055696608989,-96.907387 33.950024999999997,-96.905252999999988 33.947218999999997,-96.902433999999985 33.942017999999997,-96.901946611333699 33.940667581536225,-96.899441999999993 33.933728000000002,-96.896468999999996 33.91331799999999,-96.897193999999999 33.902954,-96.895728000000005 33.896414,-96.887761838797758 33.878628251663962,-96.883009999999999 33.868018999999997,-96.875280999999987 33.860505000000003,-96.87198767019855 33.857765462058182,-96.866438000000002 33.853149000000002,-96.85608999999998 33.84749,-96.850593000000003 33.847211,-96.845895999999996 33.848974999999996,-96.841592000000006 33.852893999999999,-96.840818999999996 33.863644999999998,-96.839777999999995 33.868395999999997,-96.837412999999984 33.871349000000002,-96.833926235310372 33.873661568818115,-96.832156999999995 33.874834999999997,-96.812777999999994 33.872646000000003,-96.794275999999996 33.868886000000003,-96.786859371055769 33.865207582975678,-96.783484999999999 33.863533999999994,-96.780568999999986 33.860098,-96.779588000000004 33.857939000000002,-96.777202000000003 33.848162000000002,-96.776765999999995 33.841976000000003,-96.770675999999995 33.829621000000003,-96.769378000000003 33.827477000000002,-96.766316855179326 33.825510582121247,-96.766234999999995 33.825457999999998,-96.761588000000003 33.824406000000003,-96.754041 33.824657999999999,-96.746233969152598 33.825673509073113,-96.746037999999984 33.825699,-96.741799282455162 33.826447231494264,-96.71318112067361 33.831498997677379,-96.712421999999989 33.831632999999997,-96.708134 33.833060000000003,-96.704457000000005 33.835020999999998,-96.700318655907978 33.838434731313264,-96.699573999999998 33.839049000000003,-96.695480719177567 33.844085960723298,-96.693127324791789 33.84698191524042,-96.690708 33.849958999999998,-96.688190999999989 33.854613,-96.687524326814838 33.85620885855986,-96.684726999999995 33.862904999999998,-96.682762564556768 33.871464102957781,-96.682209 33.873876000000003,-96.682102999999998 33.876645000000003,-96.683464 33.884217,-96.681051007513375 33.895708672998403,-96.680947000000003 33.89620399999999,-96.675306000000006 33.909114000000002,-96.673449000000005 33.912278,-96.670618000000005 33.914913999999996,-96.667186999999998 33.916939999999997,-96.665308436653305 33.917161206414967,-96.66440999999999 33.917267000000002,-96.659896000000003 33.916665999999999,-96.65150600931733 33.910998546998165,-96.644049999999979 33.905962000000002,-96.630116999999998 33.895422000000003,-96.628293999999997 33.894477000000002,-96.616355751891987 33.894625565889051,-96.614680358047494 33.89464641537834,-96.611821556077771 33.89468199182577,-96.607562 33.894734999999997,-96.592948000000007 33.895615999999997,-96.588319642127203 33.894847991673281,-96.587934000000004 33.894784,-96.58760387584924 33.894318075382706,-96.585452000000004 33.891280999999999,-96.585359999999994 33.888947999999999,-96.587494000000007 33.884250999999999,-96.590112000000005 33.880665,-96.597347999999982 33.875100999999994,-96.601685999999987 33.872822999999997,-96.611969999999999 33.869016000000002,-96.625399000000002 33.856541999999997,-96.628968999999998 33.852406999999999,-96.629746999999995 33.850866000000003,-96.630021999999983 33.847541,-96.629842405402627 33.847037300944812,-96.629577623992816 33.846294683138318,-96.629289999999997 33.845488000000003,-96.627812273090953 33.844523322531259,-96.626623854929747 33.84374750920842,-96.623154999999997 33.84148299999999,-96.622548607895212 33.841284829387497,-96.620258613641042 33.840536452948584,-96.605267599881515 33.835637348301233,-96.601258 33.834327000000002,-96.599141379811712 33.83346048638235,-96.597030984690946 33.832596521217091,-96.595164098773168 33.831832245189069,-96.592925999999991 33.830916000000002,-96.587067000000005 33.828009000000002,-96.573054340771023 33.81917200025552,-96.572936999999996 33.819097999999997,-96.568822993124115 33.818734252140963,-96.566549213959448 33.818533211567136,-96.566298000000003 33.818511,-96.551222999999993 33.81912899999999,-96.541502252916899 33.82118138128849,-96.537683599711926 33.821987629236112,-96.532865 33.823005000000002,-96.532141353898353 33.822830017549641,-96.529233999999988 33.822127000000002,-96.526655000000005 33.820891000000003,-96.526331240434345 33.820568979830284,-96.523863000000006 33.818114,-96.519910999999993 33.811346999999998,-96.517492044660074 33.805400310572544,-96.516583999999995 33.803167999999999,-96.515958999999995 33.798933999999996,-96.515952403498957 33.797370629253059,-96.5159410675722 33.794684014612457,-96.515912 33.787795000000003,-96.51191399999999 33.781477999999993,-96.502285999999998 33.773459999999993,-96.500268000000005 33.772582999999997,-96.486059999999995 33.773009999999999,-96.459153999999998 33.775232000000003,-96.456254 33.776035,-96.450509999999994 33.780588000000002,-96.448044999999993 33.781030999999999,-96.436454999999995 33.780050000000003,-96.430214000000007 33.778654000000003,-96.423664429058576 33.776393528613141,-96.422642999999994 33.776040999999999,-96.422322840041474 33.775682043625913,-96.420980388055867 33.774176915691271,-96.419961 33.773034000000003,-96.419583102042878 33.772404537625398,-96.417562000000004 33.769038000000002,-96.416145999999998 33.76609899999999,-96.413408000000004 33.757714,-96.411885201063754 33.755703128434462,-96.408468999999997 33.751191999999996,-96.403507000000005 33.746288999999997,-96.384116000000006 33.730141000000003,-96.383299027856694 33.729391180874664,-96.380090129695702 33.726446045924753,-96.379450023740389 33.7258585550397,-96.370956555983966 33.718063228581727,-96.370761536889887 33.717884239557762,-96.369590000000002 33.716808999999998,-96.369084597701828 33.715741445126696,-96.366945 33.711221999999999,-96.363253 33.701050000000002,-96.363143372320295 33.69469995601051,-96.363135 33.694215,-96.362964209763192 33.693778090504111,-96.362198000000006 33.691817999999998,-96.356236230636398 33.68737146600408,-96.355945999999989 33.687154999999997,-96.355455421824701 33.68710517164083,-96.352724507664888 33.686827790830883,-96.348305999999994 33.686378999999995,-96.346643697131185 33.686554630652331,-96.344174978865311 33.686815463144171,-96.342664999999997 33.686974999999997,-96.337175125435976 33.689043696356201,-96.321102999999994 33.695099999999996,-96.318759999999997 33.696753,-96.318590686098233 33.696960051986665,-96.318010443675675 33.697669623646739,-96.316924999999998 33.698996999999999,-96.314798583555884 33.702507526903553,-96.309963999999994 33.710489000000003,-96.308342766341951 33.715746247280322,-96.307034999999985 33.719987000000003,-96.307001890234133 33.720499786556005,-96.306595999999999 33.726785999999997,-96.307389 33.735005,-96.3061 33.741002000000002,-96.30525491425243 33.743702118680943,-96.304087485467235 33.747432149959735,-96.303009000000003 33.750878,-96.301705999999982 33.753756000000003,-96.294866999999996 33.764771000000003,-96.292482000000007 33.766418999999999,-96.277269000000004 33.769734999999997,-96.269895999999989 33.768405,-96.251497151236435 33.760405611313516,-96.248231999999987 33.758986,-96.23960043273749 33.754058875473291,-96.229595766085112 33.748347949873668,-96.229022999999998 33.748021,-96.220521000000005 33.747390000000003,-96.1999 33.752116999999998,-96.196336040977513 33.753254070097242,-96.186553999999987 33.756374999999998,-96.178059000000005 33.760517999999998,-96.174632999999986 33.763699000000003,-96.169932696734321 33.769534234627457,-96.169452000000007 33.770130999999999,-96.167888847884015 33.774482610028038,-96.162756999999985 33.788769000000002,-96.162122572851359 33.796140263149638,-96.162213638666273 33.796174412747511,-96.166837334419654 33.79790829445497,-96.170373408451042 33.799381659586444,-96.173025461119408 33.800560352833699,-96.175150000000002 33.801951000000003,-96.17734 33.805117000000003,-96.17895107878303 33.810509748931381,-96.178963999999993 33.810552999999999,-96.176910000000007 33.813934000000003,-96.175889999999981 33.814627000000002,-96.164217431250009 33.817001137011715,-96.150765000000007 33.816986999999997,-96.148792 33.819197000000003,-96.151629999999983 33.831945999999995,-96.150147000000004 33.835856,-96.148457006953691 33.837436961236868,-96.14806999999999 33.83779899999999,-96.147446683377808 33.837891494337825,-96.138904999999994 33.839159000000002,-96.128108733462625 33.839703753325978,-96.122951 33.839963999999995,-96.118168999999995 33.837883999999995,-96.109992999999989 33.832396000000003,-96.104074999999995 33.830730000000003,-96.099360000000004 33.830469999999998,-96.097448 33.832724999999996,-96.097637999999989 33.837935000000002,-96.099152999999987 33.842409000000004,-96.100785000000002 33.844230000000003,-96.101348999999999 33.845720999999998,-96.101472999999999 33.846708999999997,-96.100094999999996 33.847971,-96.084626 33.846656000000003,-96.063924 33.841522999999995,-96.055357999999984 33.838262,-96.049381559404907 33.836618570443349,-96.048833999999999 33.836468000000004,-96.044074587870469 33.838420736557822,-96.037191000000007 33.841245,-96.031783693249977 33.849934429642978,-96.031271075997878 33.850758194920559,-96.029462717056688 33.852402158173604,-96.025188419607474 33.852073366797306,-96.022229284477689 33.850922593794486,-96.021900493101384 33.849114234853282,-96.022507000000004 33.846130000000002,-96.022064891975305 33.843195970965255,-96.021407302851145 33.841880802274289,-96.019950829321616 33.840821548098475,-96.019598947095744 33.84056563358331,-96.005296 33.845505000000003,-96.000534603789163 33.849305889934179,-95.998351 33.851049000000003,-95.997709 33.852181999999992,-95.997673906338932 33.852568581878202,-95.997405462294296 33.855525685805766,-95.9977342536706 33.860950759443568,-95.997376655326022 33.862202357114477,-95.996747879541701 33.864403078452035,-95.993624351909531 33.866211440579008,-95.991487204777812 33.866869023331596,-95.988856861024331 33.866869023331596,-95.984753921632091 33.864671017651808,-95.984253769013037 33.864403078452035,-95.980965842506947 33.859306796190523,-95.9735403792467 33.856832331211713,-95.972155999999998 33.856371000000003,-95.971744371228908 33.856383941655046,-95.951609000000005 33.857016999999999,-95.945502988542614 33.859346036998218,-95.944283999999982 33.859811,-95.943359355023844 33.860365112733476,-95.941777921153459 33.861312819872232,-95.941266999999996 33.861618999999997,-95.936631000000006 33.870615,-95.93550004724635 33.874497995518659,-95.935325000000006 33.875098999999999,-95.935308000000006 33.878723999999998,-95.935637 33.880370999999997,-95.936817000000005 33.882385999999997,-95.937201999999999 33.884652000000003,-95.936131999999986 33.886825999999999,-95.935198 33.887100999999994,-95.922712000000004 33.883758,-95.915960999999996 33.881148000000003,-95.905343000000002 33.875629000000004,-95.893305999999995 33.868161,-95.887490999999997 33.863855999999998,-95.881292000000002 33.860627,-95.859469000000004 33.852455999999997,-95.849863999999997 33.844951999999999,-95.843772999999999 33.838949,-95.841300369514457 33.837329726167006,-95.840012000000002 33.836486,-95.839442445999168 33.836292954052603,-95.838335071878717 33.835917618112738,-95.837515999999994 33.835639999999998,-95.831947999999997 33.835160999999999,-95.828244999999995 33.836053999999997,-95.827967044704152 33.836191602640042,-95.826538854622555 33.836898632614485,-95.822787000000005 33.838755999999989,-95.821905415666805 33.839551758599306,-95.821112514659319 33.840267467546653,-95.820784000000003 33.840564,-95.819357999999994 33.842784999999999,-95.818975999999992 33.844456,-95.819524999999999 33.848438999999999,-95.820676999999989 33.850750999999995,-95.821665999999979 33.855443,-95.821665999999979 33.856633000000002,-95.82138191533943 33.857119395418813,-95.820824189768416 33.858074304994595,-95.820595999999995 33.858464999999995,-95.820256321913618 33.858527429344676,-95.805149 33.861303999999997,-95.800842000000003 33.861212000000002,-95.790314669347865 33.857829825250164,-95.789867 33.857685999999994,-95.789358977006231 33.85733891951336,-95.788304168820886 33.85661827626933,-95.787891000000002 33.856335999999999,-95.776255000000006 33.845145000000002,-95.773281999999995 33.843834,-95.772067000000007 33.843817,-95.763621999999984 33.847954,-95.758311274366889 33.849968021173019,-95.758015999999998 33.850079999999998,-95.757640875431136 33.850475976069447,-95.754310000000004 33.853991999999998,-95.753512999999984 33.856464000000003,-95.753688987366843 33.856976705401074,-95.75729390188404 33.867478931648478,-95.757457999999986 33.86795699999999,-95.758009454152003 33.868443703186436,-95.760805000000005 33.870911,-95.762558999999996 33.874366999999992,-95.76194240701966 33.883030946465368,-95.761915999999999 33.883401999999997,-95.758343999999994 33.890610999999993,-95.756366999999997 33.892625000000002,-95.747335000000007 33.895755999999999,-95.737508000000005 33.895966999999999,-95.729445045960333 33.893952819075864,-95.728448999999998 33.893704,-95.723226300470785 33.890698381785455,-95.717160861060378 33.887207774089354,-95.713910181462765 33.885337036216413,-95.713539999999981 33.885123999999998,-95.710877999999994 33.884551999999999,-95.696961999999999 33.885218000000002,-95.684831000000003 33.890231999999997,-95.676924999999983 33.897236999999997,-95.669978 33.905844000000002,-95.665338000000006 33.908132000000002,-95.659818 33.909092,-95.647272999999998 33.905976000000003,-95.636977999999999 33.906613,-95.609439392746168 33.923623282239362,-95.603656999999998 33.927194999999998,-95.599677999999983 33.934246999999999,-95.585944999999981 33.93448,-95.570311428427317 33.932892416047835,-95.564667905744443 33.932319318211334,-95.563423999999998 33.932192999999998,-95.562724847986416 33.932007581530534,-95.561592737930383 33.931707340510293,-95.561007000000004 33.931551999999996,-95.560415995740641 33.931042615914556,-95.559931936825777 33.930625407571753,-95.559414000000004 33.930179000000003,-95.558286100391328 33.928753215740784,-95.557777967458279 33.928110882033096,-95.556914999999989 33.927019999999999,-95.551147999999984 33.914566,-95.549144999999996 33.90795,-95.549475 33.901310999999993,-95.552330999999981 33.894419999999997,-95.55209457427955 33.888655441173519,-95.552085000000005 33.888421999999998,-95.551943532854764 33.888208369560985,-95.548485831718622 33.882986873004867,-95.548324999999991 33.882744000000002,-95.547838962671932 33.882363312195096,-95.545708294665019 33.880694470565629,-95.545197000000002 33.880293999999999,-95.54352178779898 33.880173169084813,-95.541265054919734 33.880010393826282,-95.539789999999996 33.879904000000003,-95.537358049249164 33.88037416967029,-95.534038375697051 33.881015963020303,-95.533282999999997 33.881161999999996,-95.531798241123994 33.881968630089013,-95.525321999999989 33.885486999999998,-95.521418133191162 33.888379988113826,-95.520137966641357 33.88932866459119,-95.515301759339067 33.891142240377064,-95.510062536063273 33.890134704348199,-95.506233872599807 33.886306036979761,-95.506495 33.878588999999998,-95.506084999999999 33.87639,-95.502407477038815 33.874787101867227,-95.502303999999995 33.874741999999998,-95.492028000000005 33.874822000000002,-95.480004545492946 33.87882505156746,-95.478574999999992 33.879300999999998,-95.477829321179073 33.879890044047791,-95.469962325642697 33.886104525088022,-95.467351237093553 33.886417854985297,-95.464924614258621 33.886709049048328,-95.462909526581015 33.885903021006229,-95.461498966768687 33.883686425341857,-95.46277824472287 33.878821065729895,-95.464211000000006 33.873372000000003,-95.463346 33.872312999999998,-95.461127233926518 33.871832054399569,-95.447370000000006 33.868850000000002,-95.418546279096461 33.866998581211959,-95.411345060268999 33.866536029139695,-95.407794999999979 33.866307999999989,-95.406882133018115 33.866362247208706,-95.404325916920058 33.866514150597617,-95.375232999999994 33.868243,-95.352338000000003 33.867789000000002,-95.339561303488324 33.868836967540759,-95.339121999999989 33.868873,-95.339014688391742 33.869073090388603,-95.33835013321854 33.870312202400832,-95.334854000000007 33.876830999999996,-95.334836460323601 33.877305631062114,-95.334523000000004 33.885787999999998,-95.333451999999994 33.886285999999998,-95.325571999999994 33.885703999999997,-95.310579050797429 33.880679668661742,-95.294789354523203 33.875388337067108,-95.287864786488143 33.87494634339312,-95.28344485260331 33.877745636185885,-95.281676877907344 33.882902226669891,-95.281529544303439 33.887616824907447,-95.281317419351268 33.889260797911334,-95.280350898312903 33.896751357029835,-95.279761569607459 33.899108654721076,-95.277846267017765 33.900876629417048,-95.275341635722626 33.901760616765031,-95.272542342929853 33.902055281117747,-95.267212735027385 33.900338966530455,-95.263849803053915 33.899255988324974,-95.261050510261143 33.899992642069066,-95.255746586173245 33.902939265610648,-95.253094626984378 33.90544389690578,-95.250884657186859 33.913105118684925,-95.250737329293145 33.917083057468233,-95.251326652288412 33.924154956252103,-95.253020000000006 33.927236999999998,-95.253623000000005 33.92971,-95.252905999999982 33.933647999999998,-95.250453815364224 33.936614470603772,-95.23166760862577 33.959340626388752,-95.231194814374604 33.959912577712174,-95.230491 33.960763999999998,-95.226393000000002 33.961953999999999,-95.219358 33.961567000000002,-95.184075000000007 33.950353,-95.174181557651636 33.944707625858101,-95.173657196254922 33.944408415920272,-95.168745999999999 33.941605999999993,-95.166685999999984 33.939728000000002,-95.161108999999982 33.937598,-95.149462 33.936335999999997,-95.131725657216535 33.936903570678005,-95.131056 33.936924999999995,-95.130760550144942 33.936820411866918,-95.124700000000004 33.934674999999991,-95.121184 33.931306999999997,-95.121974867397924 33.925542192115131,-95.122499622273722 33.921717137430115,-95.122365486317321 33.918632002634986,-95.119951031304154 33.915815139752631,-95.110963896232136 33.912998276870283,-95.103318123323447 33.913668959251616,-95.10214780889666 33.912991409673538,-95.100769532353866 33.912193461131935,-95.098489218495843 33.909913139475762,-95.095001673232161 33.904815960136006,-95.095247706914634 33.899772255341666,-95.095269945144935 33.899316370327696,-95.09392858558104 33.895962961020395,-95.090441035118587 33.893280234094433,-95.084002493615529 33.893280234094433,-95.079139333602001 33.898143394107954,-95.078905311676394 33.898377416033576,-95.074957661870556 33.900039583313315,-95.073630040977179 33.900598581227868,-95.071259538767663 33.901596686785098,-95.065491679645973 33.899584642240477,-95.06106518008815 33.895292278639054,-95.058834000000004 33.886812999999997,-95.049025 33.864089999999997,-95.046567999999994 33.862564999999996,-95.038661112238941 33.860609605793528,-95.037206999999995 33.86025,-95.033518790033554 33.860141698175291,-95.03143098776043 33.86008039125462,-95.030255193062573 33.860045864827867,-95.022324999999995 33.859813000000003,-95.016999191469623 33.861237606415294,-95.016422000000006 33.861392000000002,-95.008375999999984 33.866088999999995,-95.000223000000005 33.862504999999999,-94.995524000000003 33.857438000000002,-94.992810330111539 33.852698351540766,-94.992671 33.852454999999999,-94.992523097811741 33.852403566519136,-94.990494037024106 33.851697953840834,-94.988486999999992 33.850999999999999,-94.98739725328582 33.851074415574232,-94.983303000000006 33.851354,-94.981650000000002 33.852283999999997,-94.976208 33.859846999999995,-94.973410999999999 33.861730999999999,-94.971435 33.862122999999997,-94.968895000000003 33.860916000000003,-94.965888000000007 33.848421999999999,-94.964400999999995 33.837020999999993,-94.957676000000006 33.835003999999998,-94.949533421399437 33.825707838785306,-94.949112883549958 33.821754768331147,-94.948729542346143 33.818151347643564,-94.948715939727023 33.818023482549535,-94.944301522854289 33.81213759866646,-94.939560116480934 33.810502632153295,-94.935799688114457 33.810339132650462,-94.932366255585293 33.810993121156741,-94.928442330884351 33.812628087669893,-94.92451840618341 33.812791587172725,-94.924196338046286 33.812670811231236,-94.921902464831703 33.811810605997493,-94.919450010309433 33.810175636315982,-94.917815040627914 33.808704169305649,-94.917091634856007 33.805689966907131,-94.916834062621035 33.804616745101868,-94.916997555787162 33.801510305241678,-94.91961350347556 33.794152948011565,-94.920034399525505 33.790224602097751,-94.920103995647338 33.789575041141042,-94.920095560257593 33.789518805381888,-94.91961350347556 33.786305103362189,-94.913003475392784 33.779908559849432,-94.912450337640749 33.77937328682863,-94.911427000000003 33.778382999999998,-94.906244999999998 33.778191999999997,-94.902276 33.776288999999998,-94.89497736748055 33.771540270803243,-94.89019868072495 33.768431100796676,-94.888367999999986 33.76724,-94.887910246679809 33.766674529711281,-94.886225692565191 33.764593571999796,-94.885411379435553 33.764756432942491,-94.881447983999394 33.765549103837166,-94.879218389137634 33.764912090842074,-94.876033253179955 33.760771407616105,-94.875653319149677 33.757021753168047,-94.875534806260347 33.755852122792213,-94.875497398046861 33.755482932714841,-94.877080000000007 33.75222,-94.874668 33.749164,-94.870299604394191 33.746484207390097,-94.869443369718425 33.745958950164457,-94.869299999999996 33.745871,-94.8570941233355 33.742035460072337,-94.849295999999981 33.739584999999991,-94.841633779899112 33.739430990835892,-94.830804318260235 33.740068022348083,-94.828875382311935 33.74092532536806,-94.827937698058648 33.741342073027738,-94.826026615866809 33.743890180559411,-94.824752565187154 33.749304914465036,-94.82447272313469 33.749460382205008,-94.821885938813196 33.750897483986968,-94.817426749089677 33.752171534666616,-94.815635414888177 33.752066164468857,-94.813744972719192 33.751954964523563,-94.81275807295215 33.751896912919612,-94.812012015184067 33.751853028169073,-94.80914539498248 33.749304914465036,-94.798634446013509 33.744527205899239,-94.789716054221742 33.746119775421171,-94.777638928565466 33.753471071068567,-94.775064434371529 33.755038154868203,-94.770923763490302 33.754401129528375,-94.768057130944001 33.753445597691005,-94.766464573766783 33.750897483986968,-94.766146067269247 33.748030863785381,-94.766818924318841 33.746124416643802,-94.768057130944001 33.742616129879757,-94.767738636791165 33.737519908644046,-94.767244154304578 33.736926531576607,-94.76296091588064 33.731786662068515,-94.759138751496963 33.729557067206756,-94.758159820145337 33.729557067206756,-94.753087004596253 33.729557067206756,-94.750011775433265 33.728811557489699,-94.742576055627282 33.727008959675082,-94.742176780415733 33.726449974997927,-94.739390916583417 33.72254976995157,-94.737479828219207 33.716179498036198,-94.737788227808608 33.71500758055268,-94.73907239774114 33.71012773879076,-94.73746132453816 33.705563045258067,-94.73716130937693 33.704713004885136,-94.732383613155861 33.700253815161624,-94.728242929929891 33.699616789821789,-94.725694828570582 33.702483410023376,-94.724525908047042 33.704821269192259,-94.724102271393392 33.705668549067234,-94.721872664186904 33.707261118589173,-94.719006043985303 33.708216656598914,-94.714865360759347 33.707261118589173,-94.711043208720398 33.705668549067234,-94.709450639198465 33.699616789821789,-94.710289486124168 33.697309952648205,-94.710724689878106 33.696113138108018,-94.710724689878106 33.691653948384499,-94.710106194192988 33.688252279047049,-94.71008765219355 33.688150299756906,-94.707858069676533 33.686876245991066,-94.691547961569825 33.685092048879412,-94.684792000000002 33.684353000000002,-94.659166999999997 33.692138,-94.652265035786613 33.690979104454883,-94.649628372726468 33.688049476940073,-94.649099284135872 33.686462209886628,-94.648456523423718 33.684533926193204,-94.64818493525776 33.682632803768527,-94.647928021538007 33.680834402751707,-94.647870600191638 33.680432452214262,-94.648456523423718 33.673401362074948,-94.647827859209684 33.672301196274027,-94.646112824818204 33.669299876741562,-94.642890235687361 33.668420997570671,-94.635273213800133 33.669885811328072,-94.631328876730365 33.67284406472757,-94.630585813750528 33.673401362074948,-94.627656194751552 33.677795791992715,-94.62121101648988 33.681018386800773,-94.616816575217669 33.679553573043371,-94.614284398758912 33.677302743466427,-94.611543254774574 33.674866164477912,-94.611424034353576 33.674789522931938,-94.607441775118403 33.672229504256364,-94.60304734520065 33.671350625085473,-94.596895128555005 33.671350625085473,-94.593672545101384 33.673987285307021,-94.590449961647764 33.677502836053897,-94.590316660066918 33.67755410593854,-94.586641449284855 33.678967649811298,-94.579620000000006 33.677622999999997,-94.576973687569549 33.673401362074948,-94.5728722135906 33.669885811328072,-94.571305222138406 33.668005422800071,-94.569942586075811 33.666370260581196,-94.569356662843745 33.663440621711956,-94.571445361022185 33.660423619728157,-94.571993323065286 33.659632120703485,-94.572286279004103 33.656995454804722,-94.570821465246695 33.654944723492456,-94.568770728257221 33.65465176187643,-94.564669254278257 33.655823608340576,-94.563858010166513 33.65591721375597,-94.557052229552454 33.656702498865904,-94.552071876402621 33.653479904057846,-94.551192985877293 33.650257320604226,-94.551311999999982 33.644569999999995,-94.553536678805585 33.642054372646328,-94.552657799634687 33.638245860283412,-94.549142248887819 33.635902161677912,-94.543868917090279 33.635902161677912,-94.538888563940446 33.637952898667386,-94.538195599937964 33.637916426989378,-94.537583502619341 33.637884211439605,-94.533322276204103 33.637659937051346,-94.529220802225154 33.63443734792051,-94.528408204203203 33.630103504051213,-94.528341911699826 33.629749945032266,-94.52980672545722 33.627406252103981,-94.528927834931892 33.621839964367631,-94.526291174710352 33.619203298468861,-94.521363727720257 33.61686924674752,-94.520724886974008 33.61656663824732,-94.504615 33.620682000000002,-94.493418698303032 33.624467326832118,-94.492501061148843 33.624777568252533,-94.491502999999994 33.625115,-94.491295462081894 33.62531395337146,-94.487514000000004 33.628939000000003,-94.485874999999993 33.637867,-94.481313 33.638818999999998,-94.476415000000003 33.638947000000002,-94.466075000000004 33.636262000000002,-94.464185999999998 33.637655000000002,-94.461453000000006 33.643615999999994,-94.459197999999986 33.645145999999997,-94.454819999999998 33.644902999999999,-94.448637000000005 33.642766000000002,-94.446871000000002 33.640177999999999,-94.447513999999998 33.636254999999991,-94.448451000000006 33.634497000000003,-94.458816999999982 33.632444,-94.462736000000007 33.63091,-94.461129 33.625414999999997,-94.460285999999996 33.624420999999998,-94.45525499999998 33.622917,-94.452710999999994 33.622621000000002,-94.452325000000002 33.618817,-94.452961000000002 33.616985999999997,-94.454768999999999 33.615155999999992,-94.462335999999993 33.610567000000003,-94.469451000000007 33.60731599999999,-94.472166 33.604199,-94.471974000000003 33.602665000000002,-94.471151999999989 33.601588,-94.468086 33.599435999999997,-94.461794602929331 33.598691554192769,-94.458900358388505 33.598349085232492,-94.458231999999995 33.598269999999999,-94.454858239556387 33.593453869357283,-94.453995999999989 33.592222999999997,-94.453435550445548 33.592019500625121,-94.452150252013013 33.591552808439438,-94.451622 33.591360999999999,-94.449112 33.590893999999992,-94.442363999999998 33.591242999999999,-94.441536999999997 33.591501999999991,-94.439518000000007 33.594154000000003,-94.430358101189597 33.59122600196271,-94.430038999999994 33.591124,-94.429672337173542 33.590855074196774,-94.427920122643982 33.589569927010331,-94.427577999999983 33.589319000000003,-94.425982000000005 33.586424999999998,-94.413155000000003 33.569367999999997,-94.412481642075306 33.56890283335202,-94.412480771235352 33.568902231761562,-94.412480202418593 33.568901838813659,-94.412175000000005 33.568691,-94.408900999999986 33.568196999999998,-94.403341999999995 33.568424,-94.397341999999981 33.571607999999998,-94.385926999999995 33.581887999999999,-94.382886999999997 33.58326799999999,-94.379649 33.580607,-94.378075999999993 33.577019,-94.377759999999981 33.574609000000002,-94.378561000000005 33.571328999999999,-94.380090999999993 33.568942999999997,-94.382534000000007 33.567056999999998,-94.388052000000002 33.565511,-94.392357000000004 33.565286999999998,-94.394655618773015 33.564059042448399,-94.397398454287298 33.562313601959417,-94.399227012370631 33.559903231990447,-94.399393244337958 33.557077279687135,-94.399143896386974 33.555498071165481,-94.397957000000005 33.554389999999998,-94.392572999999999 33.551141999999999,-94.389515000000003 33.546778000000003,-94.386086000000006 33.544922999999997,-94.381666999999993 33.544035,-94.373392999999993 33.544471,-94.371597999999992 33.545000999999999,-94.363297000000003 33.544956999999997,-94.361350999999999 33.544612999999998,-94.358969999999999 33.54323,-94.355945000000006 33.54318,-94.348944999999986 33.548358999999998,-94.347382999999979 33.55107799999999,-94.34729 33.552197,-94.352653000000004 33.560611000000002,-94.352433000000005 33.56217199999999,-94.345512999999997 33.567312999999999,-94.344023000000007 33.567824000000002,-94.340576999999996 33.567878,-94.340047258358467 33.56768232744934,-94.338972839399958 33.567285465504582,-94.33842199999998 33.567081999999999,-94.337996277272822 33.566655299162022,-94.334939999999989 33.563592,-94.334379999999996 33.562536,-94.333929800646288 33.557825151092565,-94.333894999999998 33.557461000000004,-94.333202999999997 33.555365999999992,-94.331833000000003 33.553348,-94.33059 33.552692,-94.323660000000004 33.549835000000002,-94.319491999999997 33.548864000000002,-94.309582000000006 33.551673,-94.30641 33.555616,-94.306214999999995 33.557676,-94.307180999999986 33.559797000000003,-94.303577000000004 33.56828,-94.301022999999986 33.573022000000002,-94.298392000000007 33.576217999999997,-94.293257999999994 33.580418999999999,-94.289129000000003 33.582143999999992,-94.287025 33.582410000000003,-94.283581999999996 33.581890999999999,-94.282647999999995 33.580978000000002,-94.280849000000003 33.577187000000002,-94.280604999999994 33.574907999999994,-94.282171999999989 33.572989,-94.290372000000005 33.567905000000003,-94.291686999999996 33.563481000000003,-94.290901000000005 33.558872,-94.289439999999999 33.557634999999998,-94.287571999999997 33.557178,-94.279089999999997 33.557026,-94.275600999999995 33.557963999999998,-94.274473 33.558652000000002,-94.271997999999996 33.561517999999992,-94.270978999999997 33.563220999999999,-94.270853000000002 33.564782999999998,-94.265668999999988 33.573588999999998,-94.262754999999999 33.577354,-94.257801 33.582507999999997,-94.257524288354617 33.582703553652586,-94.252656000000002 33.586143999999997,-94.245931999999996 33.589113999999995,-94.242777000000004 33.589708999999999,-94.240178999999998 33.589536000000003,-94.236971999999994 33.587411000000003,-94.236362999999997 33.585991999999997,-94.236835999999997 33.580914,-94.237975000000006 33.577756999999998,-94.238867999999997 33.576721999999997,-94.244365999999999 33.573549,-94.251108000000002 33.56528,-94.252330999999984 33.561855,-94.252283000000006 33.560445,-94.251569000000003 33.558188,-94.250197 33.556764999999999,-94.237903999999986 33.552675,-94.233128263729824 33.552212399803537,-94.233017493976078 33.552201670126067,-94.231843999999981 33.552087999999998,-94.226392000000004 33.552911999999999,-94.222920999999999 33.554088,-94.21922099999999 33.556095999999997,-94.213604000000004 33.563133999999998,-94.21268334130005 33.563763266722709,-94.208078 33.566910999999998,-94.205634000000003 33.567228999999998,-94.203593999999981 33.566546000000002,-94.202594978382763 33.562850001484037,-94.201237000000006 33.557825999999999,-94.199485999999993 33.556085000000003,-94.197816999999986 33.555238000000003,-94.196394999999995 33.555123000000002,-94.193247999999997 33.556153999999999,-94.191332999999986 33.55766599999999,-94.189883999999992 33.562454000000002,-94.192482999999996 33.570425,-94.194399000000004 33.573678,-94.196366991504703 33.574779501237479,-94.201105911663163 33.575851400157113,-94.204265191768783 33.575005164570705,-94.207404999999994 33.574353000000002,-94.209665 33.573509999999999,-94.211329000000006 33.573774,-94.216140999999993 33.576391999999998,-94.217408000000006 33.579259999999998,-94.217197999999982 33.580736999999999,-94.214431000000005 33.583187000000002,-94.212997 33.583486999999991,-94.210966999999997 33.583143,-94.205788416261612 33.581380140341984,-94.203588205048902 33.580815984742067,-94.199751933850294 33.581098061448763,-94.196536237091394 33.581718635888464,-94.194464999999994 33.582886000000002,-94.190890999999979 33.587474,-94.183913000000004 33.594681999999999,-94.180879999999988 33.592612000000003,-94.176327 33.591076999999999,-94.162266000000002 33.588906,-94.161081999999993 33.587972,-94.162009999999995 33.580877,-94.161276999999998 33.579270999999999,-94.156782000000007 33.575749000000002,-94.152625999999998 33.575923000000003,-94.148731999999995 33.580196999999998,-94.146047999999993 33.581975,-94.144383000000005 33.582097999999995,-94.142160000000004 33.581389999999999,-94.141852 33.579590000000003,-94.143023999999983 33.577725,-94.145668999999984 33.575599999999994,-94.149506000000002 33.573602,-94.151257 33.571793,-94.151754999999994 33.569476000000002,-94.151455999999996 33.568387,-94.148520000000005 33.565677999999991,-94.145239000000004 33.564987000000002,-94.143401999999995 33.565504999999995,-94.136863999999989 33.570999999999998,-94.136045999999993 33.571387999999999,-94.135142000000002 33.571033,-94.134308000000004 33.569209,-94.133047999999988 33.557952999999998,-94.131382000000002 33.552934,-94.128658 33.550952000000002,-94.126897999999983 33.550646999999991,-94.123897999999997 33.552100000000003,-94.122878999999983 33.553111999999999,-94.12071899999998 33.560555,-94.120354999999989 33.5655,-94.119902152897509 33.566998927274319,-94.112842999999998 33.566991000000002,-94.103176000000005 33.570349999999998,-94.100106999999994 33.57256799999999,-94.097439999999992 33.573718999999997,-94.088943 33.575322,-94.082640999999995 33.575491999999997,-94.072670000000002 33.572234000000002,-94.072231491265512 33.572605318678747,-94.072031926011121 33.573523317998088,-94.072031926011121 33.573846369634623,-94.072031926011121 33.574161925883949,-94.071815412538413 33.574459631515609,-94.071712621294751 33.574600969288895,-94.071353404455635 33.574840447439463,-94.070395493400298 33.574561056392717,-94.069534727631535 33.574169799087244,-94.069517406590393 33.574161925883949,-94.068559493988133 33.573563230894273,-94.068280102941401 33.571966710019424,-94.06782332144887 33.570215714974232,-94.067801146640278 33.570130711574109,-94.066845999999998 33.568908999999998,-94.061283000000003 33.568804999999998,-94.056597999999994 33.567824999999999,-94.056095999999997 33.567252000000003,-94.055662999999996 33.561886999999999,-94.056442000000004 33.560997999999991,-94.059849999999997 33.559249,-94.061179999999993 33.559159,-94.066685000000007 33.560953999999995,-94.067984999999993 33.560960999999999,-94.071719999999999 33.559682000000002,-94.073744000000005 33.558284999999998,-94.073825999999997 33.555833999999997,-94.072156000000007 33.553863999999997,-94.069091999999998 33.553406000000003,-94.06547999999998 33.550908999999997,-94.061896000000004 33.549764000000003,-94.056095999999997 33.550725999999997,-94.051882000000006 33.552585,-94.050211999999988 33.551082999999998,-94.046040000000005 33.551321000000002,-94.043449999999993 33.552253,-94.043428000000006 33.551424999999995,-94.043374999999997 33.542315000000002,-94.043020107474533 33.494534442391668,-94.043008999999998 33.493039000000003,-94.043278999999998 33.491029999999995,-94.043271947583932 33.489425304099555,-94.043188 33.470323999999991,-94.043130608695648 33.460424000000003,-94.043089437732434 33.453322008844353,-94.043061045958495 33.448424427841935,-94.043010021810147 33.439622762252007,-94.042987999999994 33.435823999999997,-94.042987999999994 33.434442436873745,-94.042987999999994 33.431023999999994,-94.042886999999993 33.420225000000002,-94.042890126641851 33.419424334827802,-94.042891364631132 33.419107312620362,-94.042967439944888 33.399626074590046,-94.043053 33.377715999999999,-94.042868999999996 33.371169999999999,-94.043127999999996 33.358756999999997,-94.043066999999979 33.352097,-94.043066999999979 33.347351000000003,-94.043066999999979 33.339614667914582,-94.043066999999979 33.330497999999999,-94.042990000000003 33.271227000000003,-94.043049999999994 33.260903999999996,-94.043003999999996 33.250127999999997,-94.042730000000006 33.241822999999997,-94.042876000000007 33.215218999999998,-94.042891999999995 33.202666,-94.042874999999995 33.199784999999999,-94.042718999999991 33.160290999999994,-94.043184999999994 33.143476,-94.043076999999982 33.138162,-94.043007000000003 33.13389,-94.042951563372725 33.117233519058104,-94.042869999999994 33.092726999999996,-94.043036 33.079484999999998,-94.042963999999998 33.019219,-94.042986850316112 33.007494023677346,-94.043068075862834 32.965815492539427,-94.043087999999997 32.955592000000003,-94.043066999999979 32.937902999999999,-94.043092 32.910021,-94.042884999999998 32.898910999999998,-94.042859000000007 32.892771000000003,-94.042885999999996 32.880965000000003,-94.043025 32.880445999999999,-94.042784999999995 32.871485999999997,-94.042921087938623 32.829694015190334,-94.043025999999983 32.797476000000003,-94.042747000000006 32.786973000000003,-94.042828999999998 32.785277,-94.042937999999992 32.780557999999999,-94.043026999999995 32.776862999999999,-94.042946999999998 32.767991000000002,-94.042974715046569 32.757603400545236,-94.04314699999999 32.693030999999998,-94.042912999999999 32.655126999999993,-94.042779999999993 32.643465999999997,-94.042823999999996 32.640304999999998,-94.042925999999994 32.622014999999998,-94.042929 32.618259999999992,-94.042918999999998 32.610142000000003,-94.042939007208048 32.604544739553475,-94.043082999999996 32.564261000000002,-94.043142000000003 32.559502000000002,-94.043081 32.513612999999999,-94.042884999999998 32.505144999999999,-94.042911000000004 32.492851999999999,-94.043088999999995 32.486561000000002,-94.043071999999995 32.48429999999999,-94.042955000000006 32.480260999999999,-94.042995000000005 32.478003999999999,-94.042901999999998 32.472905999999995,-94.042874999999995 32.471347999999992,-94.042902999999981 32.470385999999998,-94.042907999999997 32.439890999999996,-94.042985999999999 32.435507,-94.042898999999991 32.400658999999997,-94.042923000000002 32.399918,-94.042900999999986 32.392282999999999,-94.042762999999994 32.373331999999998,-94.042738999999997 32.363559000000002,-94.042733519218956 32.277818574933548,-94.042732999999998 32.269696000000003,-94.042732 32.269620000000003,-94.042671451745775 32.225096273752321,-94.042662000000007 32.218145999999997,-94.042600205901905 32.185155675879351,-94.042565999999994 32.166893999999999,-94.042538999999991 32.166826,-94.042591000000002 32.158096999999998,-94.042681000000002 32.137956000000003,-94.042751999999993 32.125163,-94.042337000000003 32.119914,-94.042699999999996 32.056012000000003,-94.042717288248511 32.00695918811028,-94.042720000000003 31.999265,-94.042490448495869 31.997488887291052,-94.042251674184627 31.995641414801661,-94.041832999999997 31.992401999999998,-94.038411999999994 31.992436999999999,-94.029282999999992 31.995864999999998,-94.027080554152732 31.994823406342874,-94.018664 31.990842999999998,-94.011671046736083 31.979908989829021,-94.008352361284565 31.974719974671689,-94.002944198469422 31.966263903968002,-93.995504541226836 31.954631438414648,-93.994147015257326 31.952508844111783,-93.977461000000005 31.926418999999996,-93.971711999999982 31.920383999999995,-93.953546000000003 31.910562999999996,-93.943541310721315 31.908563758569336,-93.938002035663573 31.906916949339585,-93.935007833635339 31.903773037645127,-93.932462763507019 31.895538979891644,-93.931327794714704 31.894581351390723,-93.92767203678045 31.891496810199779,-93.923929283519882 31.889849995167665,-93.919587694495533 31.890748256066246,-93.915948999999998 31.892861000000003,-93.909557114944889 31.893143619429534,-93.905252294448232 31.890856686636408,-93.90476638821832 31.890598549301192,-93.901173350426333 31.885957535142037,-93.901888 31.880063,-93.898135577976262 31.874953416991548,-93.896981462364707 31.873381885463036,-93.889196542313442 31.867692899288475,-93.888241004857136 31.85786451213389,-93.888148571748644 31.856913771406646,-93.887306164689562 31.854968889155742,-93.884117000000003 31.847605999999995,-93.880377455095243 31.844791786271248,-93.879654915472827 31.84424803536659,-93.874821999999995 31.840611000000003,-93.874804231839249 31.835091218914506,-93.874787826198073 31.829994712349503,-93.874761000000007 31.821660999999999,-93.870917000000006 31.816836999999996,-93.868473098390325 31.815251608244314,-93.853390000000005 31.805467,-93.846187999999998 31.802021,-93.839950728453459 31.798597132180646,-93.836868453653821 31.794158659336233,-93.836868453653821 31.791454071635616,-93.836868453653821 31.788733862378688,-93.834649214842401 31.783309060642711,-93.831197070889573 31.780226788232302,-93.827450999999996 31.777740999999999,-93.823442999999997 31.775098,-93.822597999999985 31.773558999999995,-93.826519525540022 31.761832440276638,-93.827342999999999 31.759369999999997,-93.830112066651125 31.754555168030393,-93.830647423185951 31.745811043570992,-93.824579 31.734396999999998,-93.819048075401312 31.72885814427071,-93.818932598107111 31.728523867973351,-93.815657495541259 31.719043310199801,-93.815835943108667 31.711905251886723,-93.815525624652665 31.710796971318612,-93.814600367558683 31.707492480599399,-93.814586782471608 31.707443962415162,-93.811060073548262 31.705827553684028,-93.810303944025605 31.705480994217723,-93.807270273132957 31.704231833580664,-93.806045429297654 31.703104120446881,-93.803419352361757 31.700686292667093,-93.802693549340276 31.697783082925291,-93.802451615781152 31.693186330065117,-93.804479 31.685663999999999,-93.812820813246589 31.676953615984285,-93.81562111199878 31.674029590143711,-93.817425 31.672146,-93.821829497696953 31.673879806810671,-93.822051000000002 31.673966999999998,-93.822341750589956 31.673502431839047,-93.826462000000006 31.666919,-93.8257324849111 31.66154827530681,-93.825660999999997 31.661021999999996,-93.825228912080746 31.660277861177896,-93.81803699999999 31.647891999999999,-93.817707248836442 31.6409111211136,-93.816838000000004 31.622509,-93.818717000000007 31.614555999999997,-93.823976999999999 31.614227999999997,-93.825414416100287 31.615089707767993,-93.827851999999993 31.616550999999998,-93.838056999999992 31.606795000000002,-93.839382999999998 31.599074999999999,-93.837534908858984 31.593743346167731,-93.834924 31.586210999999999,-93.822958 31.568129999999996,-93.822219025006859 31.564792487143556,-93.820763999999997 31.558221000000003,-93.818582000000006 31.554825999999998,-93.798086999999995 31.534044000000002,-93.787687000000005 31.527343999999996,-93.781574079702807 31.525595412174177,-93.780834999999996 31.525383999999999,-93.777170583402579 31.525128039451072,-93.760062000000005 31.523933,-93.753860000000003 31.525331,-93.751899169046524 31.525601857922521,-93.749869902733366 31.526210635456998,-93.746826003263621 31.526007705679731,-93.743376259969125 31.525196002300419,-93.742401241878753 31.523787647735123,-93.74154991556837 31.522557958452786,-93.741111000000004 31.520101,-93.740752889151466 31.518711098615515,-93.740332360499409 31.517078940980245,-93.739317727342822 31.515049678599539,-93.734411826534469 31.513527159467717,-93.733432858180635 31.513223342063657,-93.726736285639134 31.511599931372594,-93.725924582259807 31.504091651519342,-93.728765551952293 31.496786301443361,-93.730997740177827 31.492118989316349,-93.733996137544537 31.48847587643743,-93.737167999999997 31.484621999999998,-93.741884999999982 31.483535,-93.745608448194673 31.481972669547908,-93.746355058504165 31.481633300507966,-93.747840636420193 31.480958036391328,-93.749869902733366 31.478928770078173,-93.749869902733366 31.475276095040186,-93.749626709600278 31.47120988033301,-93.749476 31.468689999999999,-93.709416000000004 31.442995,-93.706857276389258 31.44142369846492,-93.700929751125955 31.437783629836048,-93.697919763270235 31.429300939077926,-93.697603150134782 31.428408665937056,-93.704678 31.418899999999997,-93.704697874245824 31.418107106580852,-93.704878999999991 31.410881,-93.701611 31.409333999999998,-93.695865999999995 31.409391999999997,-93.689953513429003 31.406208353384852,-93.678362516190631 31.399967047179565,-93.675064666986117 31.398191282223291,-93.674659331220113 31.397973024503138,-93.674116999999981 31.397680999999995,-93.671643999999986 31.393352,-93.670181999999983 31.387184,-93.668532759396427 31.379357124595749,-93.668145986696857 31.37510269235548,-93.669064113561134 31.373151679996884,-93.669693055010129 31.371815184369147,-93.669512094168894 31.370548454097019,-93.668919524600994 31.366400452767671,-93.667402247962755 31.365414223393856,-93.665051865060306 31.363886475190469,-93.663891561951601 31.361952641672623,-93.663698175601809 31.360018811902275,-93.664665092360735 31.357698213179859,-93.665825387974422 31.355184231855155,-93.668439000000006 31.353011999999996,-93.669515978941746 31.350266666374935,-93.673736148309771 31.339509006758242,-93.677277000000004 31.330482999999997,-93.687850999999995 31.309835,-93.686922292404276 31.305369360695714,-93.686880000000002 31.305166,-93.686723586265984 31.304979085312567,-93.684737187533131 31.30260533533086,-93.684038999999999 31.301770999999995,-93.683824154244718 31.301752735987076,-93.675439999999995 31.30104,-93.668927999999994 31.297974999999997,-93.657003999999986 31.281735999999999,-93.647719584117951 31.27389987096868,-93.642516 31.269508000000002,-93.632650200244299 31.270182983909681,-93.620343000000005 31.271025000000002,-93.615257056394739 31.261768439618621,-93.61394199999998 31.259374999999995,-93.614287999999988 31.251631,-93.616308000000004 31.244595000000004,-93.616007481020262 31.233959925788763,-93.613835693061347 31.232449117569455,-93.609977782626956 31.229765355202261,-93.609827614285464 31.229660890324059,-93.608033931702224 31.227867209671889,-93.60740940488401 31.227242683526022,-93.605259887151632 31.224152751460338,-93.604319472818304 31.220794125122111,-93.604319472818304 31.215285983654958,-93.607287999999997 31.205403,-93.602442999999994 31.182541,-93.600307999999998 31.176157999999997,-93.598827999999997 31.174679,-93.595531708436056 31.171774432382691,-93.588772842417583 31.16581877494577,-93.588502999999989 31.165581,-93.588046655571759 31.165671453282986,-93.583339301771971 31.166604510813709,-93.579215000000005 31.167421999999995,-93.578993496784307 31.167654977688123,-93.574136071231791 31.172764031170193,-93.569563000000002 31.177574,-93.560942999999995 31.182481999999997,-93.552649000000002 31.185575,-93.548930999999996 31.186601,-93.535096999999993 31.185614,-93.533756450961803 31.184752004501149,-93.533306999999994 31.184463,-93.5330935917342 31.183965183917415,-93.531744000000003 31.180816999999998,-93.533193520062923 31.174490811082034,-93.53417786817559 31.170194787673282,-93.536829999999981 31.158620000000003,-93.540253000000007 31.156578999999997,-93.544009577425854 31.153014849431809,-93.544887639546317 31.148844041597808,-93.544887639546317 31.143136612291205,-93.544701999999987 31.135888999999999,-93.540277800652078 31.128868068802213,-93.539619249807799 31.121843550568837,-93.541375382556595 31.113501939154769,-93.541635919885238 31.113241401693255,-93.548470239502265 31.106407078590973,-93.549716998224596 31.105160319232844,-93.55112206776522 31.099540038044921,-93.551692642249563 31.097257738879012,-93.551034091405285 31.091111287020031,-93.546643772295099 31.082989189009115,-93.540128999999993 31.078002999999995,-93.53104031045666 31.074698717981779,-93.527873992025093 31.072210897922254,-93.526043656150705 31.070772777782928,-93.524020490083288 31.067083472240864,-93.523009982318626 31.065240780256033,-93.523659621286654 31.063941504256789,-93.525329858273139 31.060601035263321,-93.529255791555698 31.057567354514948,-93.532069000000007 31.055264,-93.531218761655126 31.051678447674814,-93.523247999999995 31.037841999999998,-93.516942620821894 31.032584114108545,-93.516407263768343 31.029550433360171,-93.516883288197775 31.024314186160638,-93.516942620821894 31.023661529978199,-93.539525999999995 31.008497999999999,-93.540062152267268 31.008345085566372,-93.540618575989114 31.008186389569964,-93.555580999999989 31.003918999999996,-93.562626264226125 31.00599480945781,-93.566016847371429 31.004567194682853,-93.567979815741779 31.001533515663564,-93.569764334642755 30.996715319472376,-93.571101253513504 30.991033414001794,-93.571905755076102 30.987614282198351,-93.567971999999997 30.977981,-93.560533000000007 30.971285999999999,-93.55046299120518 30.967360467203815,-93.549841 30.967117999999996,-93.539153617393822 30.956968324013513,-93.532549000000003 30.950695999999997,-93.526524876707626 30.939912016599852,-93.526293050708773 30.939497017171423,-93.526245000000003 30.939411,-93.526242458076936 30.939167805401102,-93.526231146824912 30.938085618677029,-93.526146999999995 30.930035,-93.526269219450654 30.929894609689271,-93.530935999999983 30.924533999999998,-93.542488999999989 30.920064,-93.54502991280485 30.920837107400992,-93.546884259495414 30.92151141825828,-93.549244331161987 30.921005686748707,-93.550358562122057 30.920030731622223,-93.551941554990407 30.918645608548566,-93.555650241837967 30.911228247920597,-93.555751501305451 30.910053639118178,-93.555774257662236 30.909789665608852,-93.556493125509377 30.9014508058257,-93.562447641167196 30.896531852982324,-93.563812214002311 30.895404595987301,-93.564247644832776 30.895044891882932,-93.567787752332634 30.888301832311882,-93.567450600170787 30.878524390216981,-93.566008182600839 30.875519355165832,-93.565853452041281 30.875197,-93.565427680666076 30.874309976760035,-93.563763247930751 30.87311591407202,-93.559394659034922 30.869981891957959,-93.55904186947815 30.86972880101742,-93.558616999999984 30.869423999999999,-93.558608112367665 30.868835818489011,-93.558593354020289 30.867859114376206,-93.558393833586933 30.854654896933653,-93.558352334289978 30.851908482785802,-93.558231866260058 30.843935935637496,-93.558171999999999 30.839973999999998,-93.553625999999994 30.835139999999999,-93.55374115920948 30.832414921630001,-93.554057 30.824940999999995,-93.561666000000002 30.807738999999998,-93.563243 30.806218000000005,-93.564501487304341 30.805543276361082,-93.569303000000005 30.802969,-93.578395 30.802046999999998,-93.584264999999988 30.796662999999995,-93.588934854633479 30.787551489258888,-93.589380999999989 30.786681000000002,-93.589895999999996 30.77776,-93.591925627378814 30.768225181611253,-93.592827999999997 30.763985999999996,-93.607757000000007 30.757656999999995,-93.611581311334461 30.752392350515215,-93.615058988962588 30.747604886281291,-93.619129 30.742001999999996,-93.617688 30.738479000000005,-93.609908791486006 30.729403419430973,-93.609718999999998 30.729181999999998,-93.609544 30.723138999999996,-93.61030547238029 30.720788970554505,-93.611192000000003 30.718053,-93.61618399999999 30.713980000000003,-93.616977218405893 30.712276394979256,-93.620773999999997 30.704122000000005,-93.621061387132315 30.696047232392139,-93.621092999999988 30.695159,-93.62235785978659 30.692974242186811,-93.629903999999996 30.679939999999995,-93.632922525899005 30.677439880221801,-93.638212999999993 30.673057999999997,-93.646373493696458 30.671658473870171,-93.653439445062318 30.670446661945991,-93.654970999999989 30.670183999999999,-93.666219386787546 30.661299653678171,-93.670353999999989 30.658033999999997,-93.670860468306827 30.657347728689221,-93.683099999999996 30.640763000000003,-93.685120999999981 30.625201,-93.684323003112922 30.617258061147268,-93.683396999999985 30.608040999999997,-93.680812614601606 30.602993111696524,-93.680648411741274 30.602453589051585,-93.679828117977763 30.599758343304948,-93.681234543283509 30.596101640780542,-93.683902548646543 30.593069810094963,-93.684328672415049 30.59258557751615,-93.684347894395486 30.592579170189346,-93.687282162286593 30.59160108089231,-93.689533999999995 30.592759,-93.692869000000002 30.594382000000003,-93.712453999999994 30.588479,-93.72107859525056 30.580404159651369,-93.727657631584904 30.574244488790981,-93.727844000000005 30.574069999999995,-93.727840097341868 30.573768021870688,-93.72780696123904 30.571204031383882,-93.727747245613443 30.566583382517752,-93.727745999999996 30.566486999999999,-93.725846999999987 30.556978,-93.728764326223569 30.546403128121515,-93.729195000000004 30.544841999999999,-93.736587760607577 30.541316766984647,-93.740252999999996 30.539569,-93.738909526480768 30.537838512460276,-93.732793 30.529960000000003,-93.727721000000003 30.525671000000003,-93.718711305261792 30.520890798500346,-93.714321999999996 30.518561999999996,-93.710116999999997 30.506399999999996,-93.713193644304937 30.50058809182816,-93.716678000000002 30.494005999999995,-93.71365216083376 30.483878530555742,-93.711446941284677 30.476497671106777,-93.710595424186792 30.473647647388944,-93.709703157003446 30.47066123332699,-93.708899372668625 30.467970970942378,-93.705844999999997 30.457747999999999,-93.697828 30.443837999999996,-93.6978 30.440583,-93.698862234241474 30.438260713588438,-93.702220303997905 30.430919206922557,-93.702664999999996 30.429947000000002,-93.722313999999997 30.420729,-93.729486046484141 30.413342592858086,-93.738025291703323 30.404548123662593,-93.738321805525445 30.404242747530638,-93.745333000000002 30.397022,-93.751243378615428 30.396311282781173,-93.751436999999996 30.396287999999998,-93.754787283332149 30.393127406185759,-93.75746720581121 30.390599218098316,-93.757654000000002 30.390422999999995,-93.757872622462301 30.389610210267922,-93.758470934573069 30.387385818798332,-93.75855399999999 30.387077,-93.758091991038413 30.3842338214119,-93.758032188807945 30.383865801664729,-93.757931393201204 30.383245510859378,-93.75589426835937 30.370709152880856,-93.756044740613035 30.365928314513319,-93.75610723110799 30.3639428524199,-93.756352000000007 30.356166000000002,-93.758519945992674 30.350935458285047,-93.760658351649255 30.34577618769989,-93.763244572034736 30.339536487238696,-93.765822 30.333317999999995,-93.764264999999995 30.330222999999997,-93.760690955159149 30.32995156504764,-93.760328 30.329923999999998,-93.747921244232074 30.314935395431327,-93.743830002049762 30.309992764786195,-93.741160171732417 30.306767342150266,-93.738698999999997 30.303793999999996,-93.734966161369201 30.301561360829975,-93.729390287632427 30.298226388348422,-93.724220000000003 30.295133999999997,-93.718684474451791 30.295009979388311,-93.714319430116035 30.294282471059141,-93.71311219174963 30.293184979315004,-93.711118400234781 30.291372437742464,-93.709949692759622 30.289928741213533,-93.708644873043468 30.288316906143507,-93.708448001046747 30.287627854154977,-93.707590519980414 30.284626670422831,-93.706607851977495 30.281187332412603,-93.706635817233519 30.280914670488997,-93.707189856385114 30.275512775340033,-93.709131999999997 30.271826999999995,-93.707538803456245 30.253087036355307,-93.707271000000006 30.249936999999996,-93.705637767078656 30.244573755694763,-93.705083000000002 30.242751999999996,-93.707646217538425 30.23733474070027,-93.713358999999997 30.225261,-93.71802168481895 30.219915738218987,-93.719219999999993 30.218541999999999,-93.720945999999998 30.209852,-93.717397000000005 30.193439,-93.710467999999992 30.180670999999997,-93.706634735424259 30.17682001000631,-93.705927274531248 30.176109277739844,-93.705791510460429 30.175972885881706,-93.703764000000007 30.173936,-93.703646997347349 30.173527735424756,-93.702964616901454 30.171146663230584,-93.701744610591902 30.166889619937699,-93.701686103512344 30.166685467574972,-93.697748000000004 30.152943999999998,-93.696083741705934 30.150925109485563,-93.688211999999979 30.141376,-93.69286799999999 30.135216999999997,-93.69498 30.135185,-93.698276000000007 30.138608000000005,-93.700984936503929 30.137486558544058,-93.701251999999997 30.137376,-93.7012922571502 30.136537706048752,-93.701585086407604 30.130439981942867,-93.701656556414648 30.128951727699913,-93.701742498922442 30.127162105630983,-93.701985639262489 30.122099077688652,-93.702366286953335 30.114172668214064,-93.702403861450691 30.11339023643033,-93.702436000000006 30.112720999999997,-93.70268530105453 30.112503701678254,-93.704703872918159 30.110744253531749,-93.710410303455276 30.105770356484715,-93.714491639657382 30.10221294069715,-93.723764999999986 30.094129999999996,-93.727140999999989 30.092110594495406,-93.7293848599641 30.090768395691203,-93.72996305770063 30.09042253796256,-93.732484999999997 30.088913999999995,-93.734084999999979 30.086129999999997,-93.731705540540531 30.081478540540548,-93.731605000000002 30.081282000000002,-93.729179922109864 30.079341937687897,-93.727017487667368 30.077611990133899,-93.71640499999998 30.069121999999997,-93.716151269697463 30.069056930886212,-93.707507094464489 30.066840132907302,-93.702179999999998 30.065473999999995,-93.700580000000002 30.063666,-93.699479012508235 30.0595596142199,-93.699395999999993 30.059249999999995,-93.699786698153744 30.05843348475733,-93.700658293446523 30.056611948527472,-93.700819999999993 30.056273999999998,-93.702099264262131 30.055460929156467,-93.703267223154896 30.054718601437116,-93.703940000000003 30.054290999999999,-93.704473210548429 30.054251542735575,-93.709782747672762 30.053858640136632,-93.710785394684464 30.05378444485228,-93.720804999999999 30.053042999999995,-93.729054152595779 30.045230570163486,-93.729990027439044 30.044344241966268,-93.737446000000006 30.037282999999999,-93.739158000000003 30.032626999999998,-93.739733999999999 30.023987000000002,-93.741078000000002 30.021571000000002,-93.744068611359822 30.019549890100706,-93.74834924745744 30.01665695787004,-93.753252045558341 30.013343557169065,-93.766227014667976 30.004574835541469,-93.782835629207284 29.993350429819579,-93.786934999999986 29.990579999999998,-93.789430999999993 29.987812000000002,-93.803328792953494 29.962666096659486,-93.807814999999991 29.954549,-93.813734999999994 29.935126,-93.816550000000007 29.920725999999995,-93.818997999999993 29.914822,-93.830374000000006 29.894358999999998,-93.838374000000002 29.882854999999999,-93.853129483564672 29.866348149842587,-93.854474509531912 29.864843479256791,-93.855140000000006 29.864098999999996,-93.857517787207271 29.862146563102172,-93.862474802662518 29.858076283033213,-93.863569999999996 29.857177,-93.864820388168837 29.856398395289631,-93.872445999999997 29.851650000000003,-93.890679000000006 29.843159000000004,-93.900728 29.836967,-93.911111176241661 29.828996955749506,-93.916359999999997 29.824967999999998,-93.922743999999994 29.818808,-93.927992000000003 29.809640000000002,-93.929208000000003 29.802952,-93.928808000000004 29.79708,-93.926503999999994 29.789559999999998,-93.922407000000007 29.785048,-93.898470000000003 29.771576999999997,-93.893861999999999 29.767289000000002,-93.890820999999988 29.761672999999995,-93.891780610698319 29.758916671398389,-93.892526767476923 29.756773455119472,-93.893828999999997 29.753032999999999,-93.891732576672823 29.744984915009951,-93.891637000000003 29.744618000000003,-93.891484462723341 29.744488863328282,-93.888820999999993 29.742234000000003,-93.873941000000002 29.737770000000005,-93.870019999999997 29.735482,-93.863203999999996 29.724059,-93.837970999999982 29.690618999999998,-93.852868 29.675885,-93.866980999999996 29.673085,-93.889989999999997 29.674012999999999,-93.930999999999997 29.679611999999999,-93.955443390383635 29.680262610936268,-93.955453232202885 29.68026287289646,-93.991585827226885 29.681224615973395,-94.000169999999997 29.681453101326589,-94.000222586816207 29.681454501032487,-94.001406000000003 29.681486,-94.010062765207763 29.679864152681674,-94.056505999999999 29.671163,-94.132576999999984 29.646217,-94.354166823921716 29.561457673765378,-94.370794193562546 29.555097613439198,-94.391123278008692 29.54732162684321,-94.45341877657637 29.523493256060661,-94.456196753642018 29.522430664556182,-94.45805240375158 29.521720868184531,-94.499046371673685 29.506040450016997,-94.499089575343746 29.506023924375612,-94.500455432020999 29.505501476685335,-94.500806999999995 29.505367,-94.552043946167103 29.48495633977835,-94.552044379602123 29.484956167115939,-94.568074121423052 29.478570587212708,-94.593696728539513 29.46836361027578,-94.594852999999986 29.467903,-94.599458690353401 29.465813271763974,-94.62931993394271 29.452264405230761,-94.631084 29.451464,-94.634656044789836 29.449584234717392,-94.661528069434993 29.435443006940758,-94.670389 29.430779999999999,-94.674924987623086 29.427889211977174,-94.680871144138621 29.42409972235215,-94.694158000000002 29.415631999999999,-94.708472999999998 29.403049000000003,-94.723958999999979 29.383268000000005,-94.730956033155138 29.369322304827527,-94.731047000000004 29.369140999999996,-94.731324722869132 29.369141342444962,-94.731537324603394 29.369141604592603,-94.742750849251038 29.369155431380086,-94.744595216508316 29.369157705569055,-94.744833999999997 29.369157999999999,-94.761491000000007 29.361882999999999,-94.772184717669788 29.3616343088914,-94.778690999999995 29.361483,-94.780073439975141 29.362532749099824,-94.782355999999993 29.364266,-94.782645420567292 29.368514320481975,-94.783130999999997 29.375641999999996,-94.766847999999996 29.393488999999999,-94.754099999999994 29.400999999999996,-94.743385419572206 29.410035318862811,-94.73704402931665 29.415382843516582,-94.727822669267709 29.423158969605012,-94.723817999999994 29.426535999999995,-94.716270519001597 29.430976788539081,-94.706539419927282 29.436702374764607,-94.706364999999991 29.436804999999996,-94.686385999999999 29.466508999999995,-94.681540999999996 29.471388999999999,-94.672399999999996 29.476842999999999,-94.665852999999998 29.478401000000002,-94.656737000000007 29.478032999999996,-94.645948000000004 29.473769,-94.628217000000006 29.475986000000002,-94.608557000000005 29.483344999999996,-94.594211 29.492127,-94.595122262498009 29.503650874486677,-94.595439999999996 29.507669,-94.591407000000004 29.513857999999999,-94.580274000000003 29.525295,-94.566674000000006 29.531987999999995,-94.553989999999985 29.529558999999999,-94.546993999999998 29.524379,-94.532347999999999 29.5178,-94.511044999999996 29.519649999999995,-94.495024999999984 29.525030999999998,-94.503428999999997 29.543249999999997,-94.509486999999993 29.542589999999997,-94.523742999999996 29.545987,-94.523871183237745 29.546315590042923,-94.5261306113389 29.55210749848424,-94.526336 29.552633999999998,-94.542531999999994 29.568999999999999,-94.546193009360195 29.571896121601313,-94.546385 29.572047999999995,-94.546803832691651 29.57214903106096,-94.55398799999999 29.573882,-94.570006000000006 29.572232,-94.578210999999982 29.567281,-94.593518000000003 29.561319,-94.625889999999998 29.552807999999999,-94.634988842169335 29.550728838088908,-94.643914431984982 29.54868926579681,-94.666855093063802 29.543447131924982,-94.691625000000002 29.537787000000002,-94.693243673136905 29.537529479678042,-94.718275999999989 29.533546999999995,-94.740699000000006 29.525857999999999,-94.757688999999999 29.524616999999999,-94.768675999999999 29.525659,-94.780938000000006 29.531093000000002,-94.785987568065153 29.540133852805589,-94.789123822994313 29.545749069554745,-94.789562096440733 29.546533763545689,-94.78971899677407 29.546814681200559,-94.790604999999999 29.548400999999998,-94.779438999999996 29.549472000000002,-94.772471009935998 29.548613672580952,-94.771052999999995 29.548438999999995,-94.762972090755014 29.555767305595641,-94.75523699999998 29.562781999999999,-94.750081379755628 29.56810096117977,-94.734626000000006 29.584046,-94.731874420576986 29.588423440241069,-94.724443803393115 29.600244680945409,-94.708741000000003 29.625226,-94.705273448792255 29.640626536822896,-94.703938528752261 29.6465553563269,-94.702680930363101 29.65214076491651,-94.702542126991759 29.652757236398369,-94.699660909360375 29.665553672721437,-94.69780371146922 29.673802100155214,-94.694887994254785 29.686751760487848,-94.693153999999993 29.694452999999999,-94.692434000000006 29.70361,-94.692611750388934 29.704808689927841,-94.695098387970873 29.721577752663908,-94.695317000000003 29.723051999999999,-94.695611486157915 29.72357178078331,-94.697558868014866 29.727008993840069,-94.705700105090941 29.741378628781629,-94.713878412983604 29.755813695314995,-94.714586470042065 29.757063446593907,-94.722078339612551 29.770286919851305,-94.724615999999983 29.774766,-94.735270999999997 29.785433,-94.738125273271791 29.786265833277604,-94.740919000000005 29.787080999999997,-94.749144589762409 29.783534045463153,-94.75591801041729 29.780613280409739,-94.771512 29.773888999999997,-94.792237999999998 29.767432999999997,-94.798897371247961 29.764438558858895,-94.816085 29.756710000000002,-94.81943931055217 29.753325616252695,-94.823987131664666 29.748737021482022,-94.851107999999996 29.721373000000003,-94.856932183541645 29.710462974624775,-94.860426638443812 29.703917062844585,-94.864167858487249 29.696908903620852,-94.865007000000006 29.695336999999999,-94.865123196353878 29.694545038919138,-94.867438000000007 29.678768000000002,-94.872550999999987 29.67125,-94.893107 29.661335999999999,-94.915413 29.656613999999998,-94.921317999999999 29.658177999999999,-94.928410408640929 29.669495826038883,-94.930071799099807 29.672147016790593,-94.930110565443542 29.672208878811933,-94.930656833967475 29.673080595662611,-94.931474856161643 29.67438596783704,-94.934166999999988 29.678681999999998,-94.935264231405057 29.686686879688732,-94.935319060033862 29.687086883348073,-94.935997030967087 29.692033037575822,-94.936088999999996 29.692703999999999,-94.936280063994801 29.692851065945039,-94.941277009519624 29.696697319220664,-94.942680999999993 29.697778,-94.942922907078852 29.697804516058127,-94.95311095436017 29.698921254167477,-94.965343618259496 29.700262107971746,-94.965962999999988 29.70033,-94.972666000000004 29.684869999999997,-94.980123280315652 29.679059463608382,-94.986438191421769 29.674139034277729,-94.988580124776774 29.672470090483102,-95.001800051879343 29.662169436052462,-95.002396227716986 29.661704909944582,-95.005398 29.659365999999995,-95.011683000000005 29.649802000000005,-95.013860566469219 29.644103309100927,-95.014229369455222 29.643138151779844,-95.015636 29.639457,-95.015582911847446 29.639202042718885,-95.014543866006605 29.634211997110764,-95.013498999999996 29.629193999999998,-95.006633444897872 29.623869765921089,-95.00056235200779 29.61916163683599,-95.000370188745762 29.619012614335521,-94.997782627529062 29.617005962082896,-94.997731096758997 29.616965999999998,-94.995478872439179 29.615219401320278,-94.993499353954022 29.613684285860323,-94.988871000000003 29.610095,-94.988045541621688 29.608923290953985,-94.982835617337045 29.60152798723708,-94.982705999999993 29.601344000000005,-94.982886347998431 29.601051719777942,-94.983895794498991 29.599415764569699,-94.98693593300419 29.594488776939745,-94.988992999999994 29.591155,-94.991605757589539 29.588791109774153,-94.991811610459919 29.588604864563266,-94.992208959522046 29.588245363334387,-95.006677600766466 29.575154872369662,-95.007235451984087 29.574650156950938,-95.007670000000005 29.574256999999996,-95.00815781845921 29.573398130166158,-95.016627 29.558487,-95.018253 29.554884999999999,-95.016926355758628 29.548485488141377,-95.015164999999996 29.539988999999998,-95.012091452887788 29.536262245236642,-95.011587670186657 29.535651395780732,-95.011086587278399 29.535043819893005,-95.001666768519442 29.523622047865974,-94.999580999999992 29.521093,-94.989064037839412 29.515168017977793,-94.982063906682782 29.511224326765198,-94.981915999999998 29.511140999999995,-94.981645984265953 29.511070508097891,-94.961088181447877 29.505703566689924,-94.958443000000003 29.505013000000002,-94.958183821928699 29.504969740154092,-94.957844913785792 29.504913172428417,-94.95747910332102 29.504852114391142,-94.955724072517796 29.504559179260749,-94.952845264169682 29.504078672538427,-94.930551536860648 29.500357589179547,-94.927405495678158 29.499832478177321,-94.909464999999997 29.496837999999997,-94.913072085311995 29.488019044482122,-94.913385000000005 29.487254,-94.917178632618899 29.481741136316387,-94.925104227340569 29.470223752399235,-94.925293406029382 29.469948840084836,-94.925914000000006 29.469047,-94.930860999999993 29.450503999999999,-94.923011455799639 29.448810114938265,-94.920334997737442 29.448232551169699,-94.919400999999993 29.448030999999997,-94.916063708203708 29.446327523795176,-94.890799999999984 29.433432,-94.888257132054065 29.420136433311271,-94.887299999999996 29.415132,-94.887087039327696 29.40154064293051,-94.886938304445962 29.392048238229908,-94.886925408340758 29.391225196262944,-94.886904215833582 29.389872669858736,-94.886764190565785 29.380936121184895,-94.886591910643261 29.369941049100753,-94.886536208040312 29.366386054846032,-94.886982892003275 29.364738908620176,-94.888420210858001 29.359438798199445,-94.888544709543254 29.358979709544975,-94.888781730376067 29.358105695694917,-94.894234145274325 29.337999926591962,-94.894147383920654 29.327241695272729,-94.894002695197727 29.309300588032027,-94.893993580875261 29.308170430590454,-94.891329624021282 29.304475264201969,-94.888683946869179 29.30080545353194,-94.886599269217157 29.297913803549264,-94.886536208040312 29.297826331584119,-94.885816422022174 29.297499155955627,-94.884216982863776 29.296772137788121,-94.876917125093229 29.293454018939102,-94.875951551627523 29.293015121686942,-94.86617837453683 29.293883848703121,-94.865126326153927 29.293977364132552,-94.861112574100105 29.294855372432302,-94.849730461009372 29.297345209778594,-94.825607939204673 29.30577638202961,-94.824952733476934 29.30600538596191,-94.823862547308252 29.313200608971236,-94.822547126780194 29.321882377573708,-94.82230657170463 29.344254498409398,-94.810695999999993 29.353434999999998,-94.797913847039041 29.344567105809805,-94.79693012269928 29.343884625840758,-94.784895000000006 29.335535,-94.779995 29.334935000000002,-94.777063999999996 29.336811,-94.773074869484503 29.336485139838025,-94.745528999999991 29.334235,-94.744945 29.33641,-94.731319999999997 29.338066,-94.722529999999992 29.331445999999996,-94.731082 29.331833,-94.769694999999999 29.304936,-94.780304129101268 29.295750693651897,-94.786095000000003 29.290737,-94.793321795438203 29.286014946162535,-94.795651468635626 29.284492716516493,-94.803695000000005 29.279236999999998,-94.809348860129617 29.275904173901317,-94.81020919937113 29.275397022855465,-94.819018398045671 29.270204194137058,-94.82210781776098 29.268383049216432,-94.825036245866656 29.266656805306088,-94.825782574142963 29.266216861214712,-94.826962003659688 29.265521613475173,-94.833188167130103 29.261851427154124,-94.844390135018429 29.255248113651685,-94.870677905110114 29.23975205180561,-94.881596387366812 29.233315846843187,-94.896165027201874 29.224727954332334,-94.925556066041452 29.207402583865772,-94.927613957028456 29.206189502425392,-94.940693735267132 29.198479261054111,-94.968741214129224 29.181945889621023,-94.978383546115566 29.176261947153485,-94.981700088962569 29.174306918145966,-95.026218999999998 29.148064000000002,-95.076832914261459 29.114498139229923,-95.081772999999998 29.111222,-95.084611040272236 29.108948681405003,-95.100241410561338 29.096428488590096,-95.110484 29.088224,-95.116308293211759 29.081343778536318,-95.119264367911811 29.077851775668329,-95.119484217932538 29.077592067446851,-95.122403192505772 29.074143890856067,-95.122524999999996 29.074000000000002,-95.122638295373392 29.073709965581063,-95.125134000000003 29.067321,-95.183550616106302 29.028323983126334,-95.191390999999996 29.023089999999996,-95.192301227546167 29.02243038040822,-95.237672480263356 28.989550945676651,-95.238923999999997 28.988644,-95.240558404572027 28.987315672512366,-95.251568580535192 28.978367386619187,-95.251619678822578 28.978325857575001,-95.272266000000002 28.961545999999995,-95.29656403895315 28.934716691525271,-95.297146999999981 28.934073,-95.309703999999996 28.928262,-95.334686660244515 28.911063042846731,-95.353450999999993 28.898145,-95.376979000000006 28.876159999999999,-95.377903963555724 28.874482723635413,-95.38239 28.866347999999999,-95.416173999999998 28.859482,-95.436326577581042 28.85908617652915,-95.439594 28.859022000000003,-95.449516932572138 28.854239851149391,-95.480746000949352 28.839189657836059,-95.485144835951402 28.837069731735976,-95.486768999999995 28.836286999999995,-95.506945757563287 28.824808612805594,-95.536465934189138 28.808014833314715,-95.564052739104355 28.79232093268277,-95.564094788066555 28.792297011382839,-95.564132228771385 28.792275711681647,-95.568135999999981 28.789997999999997,-95.576201168007842 28.785870627961152,-95.606319447682353 28.770457515020929,-95.613122366343802 28.766976102576891,-95.695711236705606 28.724711019702028,-95.715243498124195 28.714715330888584,-95.812504000000004 28.664942,-95.854124934570734 28.646410960033691,-95.884026000000006 28.633098,-95.920915435374582 28.618912188118028,-95.97832748198536 28.596834417485056,-96.000681999999983 28.588238,-96.000998496292368 28.588108377001081,-96.024040703743012 28.578671299526803,-96.035336417502748 28.574045070633311,-96.05294532761279 28.566833233429691,-96.077867999999995 28.556625999999998,-96.194412 28.502223999999998,-96.220123346321373 28.492065891861738,-96.220376184174313 28.491966,-96.226882700448613 28.487451845000788,-96.241923733725443 28.477016528665938,-96.244750999999994 28.475055,-96.270391000000004 28.461929999999999,-96.303212000000002 28.441870999999999,-96.321560000000005 28.425148,-96.328817 28.423658999999997,-96.341616999999999 28.417333999999997,-96.371116999999998 28.397660999999999,-96.372100999999986 28.393874999999998,-96.370716999999985 28.387667,-96.378616389014681 28.383909329746462,-96.379349732835649 28.386024690464755,-96.381702691108558 28.392811896356477,-96.381863685354148 28.393276290946375,-96.375880899310658 28.401794149460329,-96.37413840285555 28.404274990018202,-96.340801887331921 28.432913073072363,-96.338559687910475 28.434839257985413,-96.335119195902806 28.437794848703732,-96.312964581561445 28.451131053409146,-96.280819757359396 28.470480970729877,-96.274497619264608 28.474286648703266,-96.268341347214189 28.477992481854848,-96.252027698910211 28.484249764669329,-96.250247000000002 28.484932771712327,-96.223824788704931 28.495067307260509,-96.218978121459415 28.500382701101032,-96.21505000939203 28.509679222336811,-96.145447855080619 28.544740658174199,-96.10473518795402 28.559498996555909,-96.046210731424992 28.586980036018211,-96.032979113622659 28.589015683181284,-96.007533711461477 28.59970275682273,-95.986159544454679 28.60631857558586,-95.982088289576367 28.614461085342473,-95.98565064745685 28.621076904105603,-95.983106103295938 28.641942154390655,-95.97852589224803 28.650593590730978,-95.986065974637228 28.655467849280154,-95.996337701374344 28.658736120211515,-96.002953500413568 28.656191585912577,-96.006515878017979 28.648049056432036,-96.010005951759737 28.648641710656278,-96.010506546843942 28.648726717396318,-96.011440067305529 28.648885239790378,-96.014343010193883 28.649378192516537,-96.026200716522851 28.65139176594381,-96.03348799089656 28.652629228032097,-96.039323368019012 28.651170385770797,-96.047737442142406 28.649066870151618,-96.049244844336243 28.648218956037223,-96.052682972641108 28.646285007998213,-96.05836686193534 28.643087818836001,-96.072165030584017 28.635326345489485,-96.092812363862251 28.627145317384699,-96.098878916233431 28.624741586366319,-96.099137163186526 28.624639261986079,-96.099760206508392 28.62447226081035,-96.102639895829256 28.623700385909448,-96.141413249033207 28.613307536255487,-96.148501276515404 28.611407654045699,-96.187178316202875 28.593595864643298,-96.198374286842139 28.586980055742131,-96.221784081288092 28.580364246840958,-96.228908787187095 28.580873158631725,-96.233997875508891 28.596649310733014,-96.233997875508891 28.601738394123839,-96.222292978285921 28.607336389305434,-96.214150448805384 28.613443281484855,-96.212623728226021 28.62260364440889,-96.2309444244882 28.64143324753087,-96.208552463485731 28.662298487953962,-96.214659365527126 28.665351929112688,-96.192267404524671 28.68774389011514,-96.1912495908051 28.694359708878277,-96.195829762405154 28.698939880478335,-96.202445561444364 28.700975507917487,-96.208747675276499 28.700187749031503,-96.21684000834783 28.699176214258408,-96.221467818495611 28.69859774191346,-96.222801895007663 28.698430983480506,-96.223384071149837 28.698294,-96.224163927167865 28.698110503315906,-96.227000018566372 28.697443183508955,-96.229623268039219 28.696825944469072,-96.231453341209956 28.69639533631743,-96.233964222112746 28.695240331316239,-96.23422531976 28.695120226420762,-96.234426397558138 28.695027730650764,-96.243315632596989 28.690938683290845,-96.256898753233088 28.684690448956413,-96.263514562134276 28.683672635236839,-96.268603640594122 28.688761723558645,-96.287942160437836 28.68316371851509,-96.304227224329892 28.671458831154069,-96.305245042980445 28.660262850652849,-96.303866760710434 28.646480081370939,-96.303718312539132 28.644995605411349,-96.322902111893882 28.641863561491792,-96.322903115546453 28.641863397630402,-96.328654788116609 28.640924350533034,-96.373438710121519 28.626674919011112,-96.376492171004159 28.620059100247982,-96.384634680760783 28.615987845369677,-96.473693647496702 28.573239550803915,-96.48794308888057 28.569677192923439,-96.482854000558774 28.580364266564878,-96.480309456397848 28.596649335387912,-96.485907441717487 28.60784531588914,-96.490487633041468 28.610898766909834,-96.510843966604781 28.614970031650095,-96.510335069606953 28.617514575811001,-96.497612348802434 28.625148188569788,-96.496594535082863 28.630746183751381,-96.49964797624159 28.635835272073191,-96.506263795004728 28.638379806372129,-96.513590449607946 28.639711925390898,-96.518002756430107 28.640514162994929,-96.524548246905439 28.641704252172264,-96.541744210187403 28.644830790950802,-96.545449731689985 28.645504522133091,-96.555118991611849 28.64601343885484,-96.5632615210924 28.64448670841351,-96.564664053901609 28.647882315216158,-96.572092291837293 28.665866475800886,-96.572930781014264 28.667896502859467,-96.570386236853366 28.674003385176928,-96.559190266214102 28.687235002979271,-96.559699163211917 28.6913062775815,-96.561225893653244 28.696395346179383,-96.566823878972883 28.697922096344637,-96.575158129308363 28.702846874961025,-96.578019859474111 28.704537895383844,-96.57828826199534 28.705826226653553,-96.579938546079447 28.713747585140421,-96.580564403635009 28.716751699466613,-96.584126761515478 28.722858581784067,-96.584439828543964 28.722940967911413,-96.591359183115401 28.724761852179114,-96.593796021437342 28.725403125944972,-96.611342043876562 28.720366765465901,-96.616906294097589 28.718769618875786,-96.625254999999996 28.716373230030175,-96.632357663078409 28.714334501780041,-96.638120426114043 28.71268037463507,-96.643733366943522 28.711069252030907,-96.64589364157122 28.710449172933409,-96.648758110223909 28.709626963981723,-96.65548660082564 28.704200766225345,-96.664534272187169 28.696904262901135,-96.657918463285995 28.687743919701024,-96.642136214348383 28.67476740345478,-96.635017595423747 28.668914316579048,-96.634564255386636 28.662567599984854,-96.634358790297441 28.659691108644115,-96.634304719917793 28.658934128568227,-96.633999771842213 28.654664885057134,-96.627892869800831 28.650084693733149,-96.626425176648581 28.649921620227584,-96.623312698200763 28.64957579673532,-96.621378075676532 28.648286046719594,-96.615940371111847 28.64466090565978,-96.615679075580019 28.64448670841351,-96.614055987266909 28.642701311583636,-96.613585709918453 28.642184006591457,-96.613038272810982 28.641581825879328,-96.612716570908134 28.641227953848528,-96.611999586497333 28.640439271135588,-96.610589997120172 28.638888723093881,-96.610589997120172 28.638695619081329,-96.610589997120172 28.63634418879494,-96.61975034032028 28.62769274259265,-96.620390401117646 28.626519297452973,-96.620672695530928 28.626001757543317,-96.621575870071126 28.624345937066781,-96.622336527533278 28.62295139797671,-96.622803791340985 28.622094747411062,-96.621924089240224 28.619379144726071,-96.621515564809087 28.618118047314677,-96.621338841511317 28.617572510068054,-96.620571817957583 28.61520474122884,-96.620437729127232 28.614790814755992,-96.617253050911174 28.604959849584038,-96.615239196090883 28.598743166058551,-96.614649885719274 28.596923990196654,-96.613008078443599 28.591855801497097,-96.611528402529856 28.587288105363601,-96.611113505533794 28.586007336117376,-96.611098903979951 28.585962261746474,-96.608298572876635 28.583628658523324,-96.608045443097311 28.583417717585569,-96.607377235577218 28.583437664220053,-96.600365219155734 28.58364697962633,-96.593251058093557 28.583859344147964,-96.573948594733835 28.584435541167107,-96.565297148531556 28.582399903865994,-96.564279334811971 28.57629300182461,-96.563658896232639 28.575155527088082,-96.562968608029692 28.573889994257026,-96.561225893653244 28.570695006643017,-96.557566061723506 28.569051817003789,-96.543745727976315 28.562846769979732,-96.536289388489891 28.559499026141786,-96.535271536438941 28.559346348925885,-96.526111211846271 28.557972305562419,-96.524846286909124 28.55686549700842,-96.523547686998668 28.555729222873186,-96.522039937244045 28.554409942750958,-96.516783301381025 28.541093122164042,-96.514406314623301 28.535071417976255,-96.512075206364955 28.532603188828926,-96.505754868421008 28.525911074776143,-96.496773944100411 28.520225902118948,-96.493684489370622 28.518270192113103,-96.482894459981281 28.511439806078794,-96.464303363514816 28.49967112954555,-96.450283853050735 28.49079639296917,-96.41974938229167 28.46738661824714,-96.410828816467941 28.459457253614527,-96.410588999643707 28.459244083835621,-96.409758652296418 28.458206146634446,-96.408886828651134 28.457116363910039,-96.40506625078595 28.452340627696451,-96.402446489887097 28.449065917053971,-96.402758256176753 28.447714917044181,-96.403973200604497 28.442450108152798,-96.407195206365273 28.441281062045864,-96.417343901660857 28.437598792799108,-96.461479843413926 28.421584870195201,-96.476120924474287 28.411702150055138,-96.481836236149007 28.407844318412668,-96.504737094149291 28.397666161492985,-96.511137484289378 28.396220910815867,-96.520513236388609 28.394103803612502,-96.534249520963641 28.388796609353736,-96.542905217114992 28.385452367272176,-96.559699173073881 28.377818734789468,-96.57038624671533 28.368658381727396,-96.577905378446388 28.364719789411506,-96.5917603939982 28.357462401226169,-96.600411840200493 28.354408960067438,-96.650793747525029 28.34677533744669,-96.672676831253582 28.335579347083499,-96.688452973492915 28.347284234444516,-96.694559875534281 28.347284234444516,-96.698122233414779 28.342704062844462,-96.705246949175717 28.348810964885843,-96.700157860853906 28.369676195446971,-96.705755865897487 28.400210705653887,-96.710336037497541 28.406826524417021,-96.710425531143088 28.406841439843959,-96.711757514930511 28.407063434453107,-96.711949596522956 28.407095447664108,-96.71209813364915 28.407120203551969,-96.7125191933293 28.40719037931537,-96.712878460543081 28.407250256459115,-96.722549831718325 28.408862132132249,-96.749013067323034 28.408862132132249,-96.762244685125353 28.411915593014903,-96.76554491144303 28.411090543097366,-96.768351577304784 28.410388882297497,-96.775985199925543 28.405808690973519,-96.777118787058129 28.404067826336821,-96.778115367638478 28.402537364460464,-96.780337941159374 28.399124129135416,-96.780820705165937 28.398382742114745,-96.790234641309425 28.383925636830853,-96.794392274787313 28.366371177405831,-96.794814812909479 28.364587126849088,-96.794810066932399 28.364444747076842,-96.79477772408616 28.363474458555832,-96.794305906049686 28.349319871745632,-96.794064195689629 28.347593374049037,-96.792754716842737 28.338239980125699,-96.790743538307225 28.323874459722486,-96.791161640090152 28.319066463411133,-96.791737095961722 28.312448960638157,-96.791761391474679 28.312169572361466,-96.791798306096766 28.312130020933203,-96.806010803272656 28.29690232711997,-96.809573161153153 28.290286508356836,-96.806010803272656 28.282143978876302,-96.799480493673911 28.2729662335258,-96.799349781293685 28.272782529381054,-96.787181219874626 28.255680743271615,-96.787181219874626 28.250082757951983,-96.800412817953031 28.224128419345121,-96.810027933605966 28.21709297064087,-96.81015126416365 28.217002728792142,-96.823379937963566 28.207323213817581,-96.836184503007971 28.197954022244446,-96.84100213695676 28.194428925121734,-96.842143298799229 28.193593928862132,-96.847274602334139 28.190686192954498,-96.857267971405633 28.185023289193378,-96.872677809006134 28.176291056181483,-96.877474270970822 28.171878306563691,-96.886067200578026 28.1639728030657,-96.898123211167331 28.152881261735526,-96.906497631141988 28.149042991548708,-96.910337015250093 28.147283276415891,-96.926704620510804 28.131597659113019,-96.934764623415617 28.123873491831901,-96.962356663895278 28.123371819605953,-96.962754569737697 28.123364584972112,-96.979717515560068 28.129783000626698,-96.995398793779131 28.135716460690723,-97.000413785843605 28.137614026355994,-97.007520616950742 28.136091128354632,-97.007538501604586 28.136087295914667,-97.009222611239821 28.135094102666635,-97.00939982996681 28.134989589017771,-97.027385928308092 28.12438239869169,-97.028912648887456 28.117257682930727,-97.025203084589847 28.111384210119862,-97.023365428929196 28.108474590635566,-97.022805746846075 28.107588427939849,-97.02290356380766 28.107197159145706,-97.023379876854563 28.105291902342927,-97.02382356056566 28.10351716319958,-97.025496807419856 28.101530180660298,-97.031966099908146 28.09384788848477,-97.033883146887263 28.088918342142531,-97.035528457788629 28.084687545284659,-97.035528457788629 28.083043098067591,-97.035528457788629 28.081818766572983,-97.035528457788629 28.074000471643224,-97.033022532693735 28.061470870449408,-97.032801767679686 28.060367047518316,-97.031459273912688 28.053654591691117,-97.031457183186404 28.053644138079921,-97.025859197866765 28.041939250718904,-97.030948266464648 28.033287814378582,-97.03239348781301 28.032603236465789,-97.040617526386512 28.028707642778524,-97.041168915404441 28.028259640036232,-97.046718327422383 28.023750751173218,-97.048760075590963 28.022091833877354,-97.050263648357429 28.019142519014494,-97.059727497080047 28.000578821719444,-97.061991693393324 27.99613751499442,-97.06790259446116 27.99219690579767,-97.073772658186698 27.988283521554418,-97.075732208193486 27.986977152070377,-97.083740513918784 27.975854507337193,-97.090858162154831 27.965968886660271,-97.094600599978094 27.960771057335059,-97.101378519421061 27.951357282114685,-97.101544336287489 27.951126980954953,-97.101629253046639 27.951009041034034,-97.112670327945679 27.935674217691009,-97.118292397880069 27.927865788706086,-97.121533983365822 27.923363587495643,-97.122089895488358 27.923104160785101,-97.123659587861624 27.92237163470331,-97.129167576400675 27.91980122961516,-97.134800331352182 27.902469771509406,-97.13578341488774 27.899444915775788,-97.139044920333077 27.897526377912126,-97.141761509630356 27.895928379836029,-97.144434841366106 27.894355827453982,-97.155121915007527 27.880615312653809,-97.156735458496229 27.877916799393841,-97.171211094589736 27.85370753808861,-97.17159000749372 27.853073838716419,-97.18273536107327 27.834434189625789,-97.184638591770963 27.831251199324921,-97.187183135931861 27.824126483563962,-97.18941247112663 27.823657146727278,-97.196852395853725 27.822090836400886,-97.201135366472329 27.822090836400886,-97.208766105658313 27.822090836400886,-97.209575096934316 27.822090836400886,-97.21103842611052 27.822356897891609,-97.21191517248603 27.822516307306422,-97.214117494684729 27.822916731993345,-97.215541825234411 27.823175702780983,-97.217387510601711 27.823511284007832,-97.220771087297493 27.824126483563962,-97.222189700736266 27.82464074101355,-97.223091414240102 27.824967618564596,-97.225175600069406 27.825723150734085,-97.225442194074731 27.826156365185522,-97.225555528799433 27.826340533769983,-97.225696025109201 27.826568839847944,-97.22598639723725 27.82704069367685,-97.227317456819009 27.829203661466853,-97.227317456819009 27.832884543697009,-97.227317456819009 27.832951908184537,-97.22711696094737 27.834288541284948,-97.22651425924083 27.838306534493725,-97.227537582741903 27.841230302974814,-97.228388390382094 27.843661171179477,-97.233100025453197 27.847817700825228,-97.234045759551762 27.848652012430087,-97.234511621821596 27.849062988727319,-97.238500481248579 27.854279199579018,-97.239439164419366 27.855506710708827,-97.241127420860792 27.857714434929608,-97.24139627838295 27.858969111470945,-97.242350826195675 27.863423696705052,-97.242654131578206 27.86483913096664,-97.243132066142749 27.865496290124597,-97.244364366034702 27.867190700237273,-97.250796680782656 27.876035121329831,-97.263010484865433 27.88010639593206,-97.267085449659064 27.88068852838779,-97.272090543185925 27.881403535150675,-97.273697558506882 27.881633106649463,-97.276628649874411 27.881144591421538,-97.283916343274228 27.879929975854907,-97.291452123510041 27.878674012482271,-97.291709327200167 27.878631145200583,-97.295071705789752 27.87807074876898,-97.29826066531912 27.876989746639367,-97.302276298241679 27.875628516526195,-97.30641171632756 27.874226681314273,-97.315889353880934 27.871013926092836,-97.325097299274915 27.867892591849294,-97.326845878314657 27.866807265961079,-97.334190606350404 27.862248465187459,-97.346213303335873 27.854786094892546,-97.354613966176373 27.849571885725148,-97.359768343966266 27.850509060182219,-97.360211961357962 27.850589719168646,-97.360654441244435 27.850290746360063,-97.363614400263117 27.848290774636723,-97.376904444631478 27.839311017562139,-97.379041564479934 27.837867018088055,-97.379057154646048 27.837837708581311,-97.379081675001302 27.837791610322164,-97.37968928125764 27.836649310776913,-97.391764280353456 27.813948316782309,-97.391812130016405 27.812975373996721,-97.391812459346511 27.812968677620422,-97.39203202611381 27.808504155006624,-97.392068018906713 27.807772301822137,-97.392095751995882 27.807208395884746,-97.393123788240075 27.786304999999999,-97.393168763213623 27.785390509210199,-97.393291005863816 27.782904909577571,-97.393142269808052 27.782564941361908,-97.39298939956177 27.782215523565412,-97.390949955785928 27.777553936582201,-97.390465068726371 27.776445623015572,-97.390185233729682 27.775805999999999,-97.389524844304646 27.774296538065283,-97.38835420640342 27.771620793596586,-97.388306220610531 27.771511111755789,-97.388011229692253 27.770836846624743,-97.38704242749894 27.768622441036733,-97.386166290102864 27.766619840754537,-97.385225495384532 27.765302728148875,-97.378862356737287 27.756394334042721,-97.375764970087644 27.752057992733249,-97.373069654276961 27.748284550598278,-97.368354500700462 27.741683335591173,-97.365855345900911 27.739779218033028,-97.354970329043653 27.731485873530172,-97.352272255056832 27.729430198526604,-97.34997871774064 27.727682741876539,-97.347507961666906 27.725800261438444,-97.346980343555629 27.725398266768138,-97.343485766084669 27.723942192633796,-97.323096068004702 27.715446484002907,-97.316445853072636 27.712675560756566,-97.312489136070184 27.711663774861414,-97.307771479065892 27.710457406346261,-97.30518751069485 27.709796650788128,-97.285725857752936 27.704820043684109,-97.259850586867117 27.698203387982087,-97.253955150197811 27.696695845323848,-97.254014647303208 27.696526337654994,-97.255455364792269 27.692421723465429,-97.259957004258851 27.67959652118169,-97.261636792970123 27.679316557300702,-97.26241778482418 27.679186392412099,-97.266063906300232 27.678578707462119,-97.266172011465457 27.678349884642419,-97.272736281666539 27.664455499360063,-97.273042341106247 27.663807672923248,-97.273584380560237 27.662660354976065,-97.276535709391737 27.656413369610792,-97.277059923980644 27.655303780997631,-97.278846463786479 27.651522268106756,-97.280071982275985 27.648928251476995,-97.280889132874719 27.647198614380269,-97.282300269490932 27.644211705671331,-97.282869528026779 27.64300677394548,-97.287959956150573 27.632232024058997,-97.288756326795195 27.630546371240786,-97.290370933329072 27.627128784125372,-97.290610159422798 27.626622421740255,-97.291264204229464 27.625238025568656,-97.291996439564016 27.623688125953898,-97.292910903535031 27.621752508687905,-97.293983233844585 27.619482740684056,-97.29528946695001 27.616717877953022,-97.296598377059297 27.613947348891728,-97.297587499071795 27.609496333379006,-97.298634024222366 27.60478700569162,-97.29761621050281 27.598680093788271,-97.294053852622326 27.594099922188217,-97.294182769084571 27.593971005725969,-97.300049926927869 27.588103847882682,-97.302196382102863 27.585957392707677,-97.311120578488044 27.579146819865922,-97.321534901946578 27.571199044464009,-97.325080504595888 27.561034984604785,-97.336802147188081 27.527432946040641,-97.343417965951204 27.517763686118776,-97.347489240553443 27.503005347737066,-97.350542661988243 27.478577729709574,-97.359194108190536 27.458221396146271,-97.365809926953673 27.450587783387487,-97.371916828995055 27.425142361502377,-97.369881181831957 27.412419660421783,-97.372934622990698 27.401223670058592,-97.379550422029908 27.390027689557368,-97.399397858595393 27.344734850830708,-97.401942402756291 27.335574497768633,-97.404995863638931 27.329976512448997,-97.413138393119482 27.321325066246711,-97.42026310888042 27.317253791644482,-97.430441285524054 27.313691423902039,-97.450797599363412 27.313691423902039,-97.482858840011673 27.297915271800758,-97.508304242172855 27.275014394076553,-97.532222933616623 27.278576761818989,-97.544436737699399 27.284174747138625,-97.546981281860297 27.290790556039799,-97.536803105216677 27.289263825598471,-97.526624948296998 27.291808369759369,-97.524589320857856 27.297915271800758,-97.51746460509689 27.305039987561717,-97.504741884292372 27.305039987561717,-97.498126085253162 27.308602345442196,-97.502706237129289 27.322342870104325,-97.499143898972747 27.327940855423961,-97.483876634007316 27.33862793892736,-97.483876634007316 27.351350640007954,-97.486930094889971 27.358984272490666,-97.501688443133645 27.366617904973374,-97.514411144214236 27.361528796927644,-97.520518046255617 27.352877370449281,-97.538329835658018 27.335574478044709,-97.570899973304094 27.315727061203152,-97.584131581244463 27.309620159161771,-97.609068086407831 27.285192570720163,-97.621790807212349 27.287228188297352,-97.63146005727225 27.286210384439741,-97.63654914066305 27.282139109837512,-97.636657939024673 27.281797172172649,-97.640111498543547 27.270943129336285,-97.639093679892994 27.253131339933887,-97.635022415152719 27.247024437892502,-97.628915513111338 27.242953173152234,-97.597363199046811 27.242444266292445,-97.5826048606651 27.240408628991332,-97.573953414462821 27.238881903480983,-97.56123071338223 27.232775006370584,-97.542910007258072 27.229212648490105,-97.520009129533875 27.231248285791217,-97.509830972614182 27.235319550531486,-97.503215153851045 27.23989972213154,-97.500161712692318 27.244479898662579,-97.485148876501881 27.25084127385778,-97.467082638600573 27.253640266517596,-97.45843119239828 27.259492710198106,-97.450288657986775 27.262546171080761,-97.424079880742951 27.264072891660124,-97.422298701802717 27.257711541119829,-97.434766954384401 27.202240525749552,-97.444945121166043 27.144733882940127,-97.443672849085587 27.116235010034327,-97.452324285425917 27.115217201245734,-97.455886653168363 27.110382571284802,-97.456650008527049 27.09969549764336,-97.46173908698691 27.095624227972113,-97.475479621510999 27.098423220631929,-97.480568699970846 27.102494490303176,-97.491510231973166 27.101222218222723,-97.495835955074313 27.09409750739275,-97.4932914109134 27.078066891999608,-97.477515248950155 27.066107546277717,-97.479041969529504 27.06279964182713,-97.482256963728076 27.061942305056665,-97.48693005051112 27.057710553505324,-97.487693415731783 27.053639288765055,-97.486675602012198 27.034809685643079,-97.477515248950141 27.032519589981089,-97.473952881207694 27.029211690461484,-97.473443984209865 27.022850330059228,-97.478300083716704 27.000269498406993,-97.478533072531675 26.999186101907302,-97.480568690108868 26.997659376396957,-97.483967678435022 27.000330000000002,-97.484131057851314 27.000458369056773,-97.492988547644813 27.000330000000002,-97.49889841702128 27.000244349959733,-97.533497176854453 26.999742920066073,-97.536803065768822 26.999695008767091,-97.549271318350492 26.995878197456715,-97.555378215460905 26.990280207206101,-97.551052502221722 26.980865400714134,-97.549525776711377 26.965343697111763,-97.552324769371197 26.95211208177491,-97.555378205598956 26.947277449348487,-97.555378205598956 26.938880461507075,-97.540874325578116 26.906310323861007,-97.540110950495503 26.900966796902246,-97.547999041339082 26.895114353221743,-97.552324764440229 26.888498544320569,-97.552324764440229 26.875332999999998,-97.552324764440229 26.873831771434514,-97.552324764440229 26.871753101924,-97.552324764440229 26.867633303897481,-97.555396527456509 26.865969429990074,-97.558431656619632 26.864325399446898,-97.558453748966258 26.864224239771101,-97.559853702000524 26.857813929560987,-97.562641307980527 26.845049630589628,-97.563266286580571 26.842187886943357,-97.552579212939136 26.827938454188693,-97.547744582978211 26.824630549738107,-97.537566416196555 26.824885004400745,-97.509830908511418 26.8035108521869,-97.48438549155729 26.763561555211936,-97.478024141017002 26.757200199740662,-97.471662790476714 26.758726925251008,-97.468609339456009 26.740915130917632,-97.467337057513589 26.710126182073765,-97.444945096511148 26.633535472850511,-97.445708451869848 26.609362327976836,-97.441206258760758 26.5999011976768,-97.435205432977895 26.587290766879221,-97.432741093635642 26.582112082834445,-97.429217375703914 26.574707168454967,-97.428151110966368 26.572466467229631,-97.418145193925739 26.555638334425574,-97.416955130465126 26.553636864107652,-97.41864075483771 26.543121778291471,-97.42039414733226 26.532183948458435,-97.422284917775215 26.520389141863415,-97.422298667285844 26.520303371102887,-97.425861015304378 26.516741008291426,-97.430695645265303 26.506562841509776,-97.430695645265303 26.494603495787885,-97.42802638225659 26.488322868889494,-97.42636993202612 26.484425333937217,-97.429168909893022 26.478063961207511,-97.43553026043331 26.470175880225888,-97.441382709044788 26.466613522345408,-97.441382709044788 26.455417541844177,-97.43756589773443 26.449819546662585,-97.425861005442428 26.446002740283195,-97.421026375481503 26.446766095641895,-97.417209564171131 26.449819546662585,-97.411611568989528 26.447275002501684,-97.412883841069984 26.433025580841726,-97.421789740702152 26.417249413947498,-97.419499649971158 26.413178149207234,-97.406013578738921 26.409106884466965,-97.398125502688274 26.410888063407203,-97.394308686446919 26.414450416356704,-97.395072051667569 26.417249413947498,-97.382484933201752 26.411326066613285,-97.377769169124974 26.409106884466965,-97.369626639644437 26.394602999515151,-97.374461259743413 26.38086247238753,-97.388965149626202 26.365849678110436,-97.392018610508856 26.339386444971247,-97.391000786927322 26.332261729210284,-97.38794734576858 26.330480545339064,-97.376242448545611 26.336332993950553,-97.372171183805335 26.339895346900054,-97.36937219114553 26.348546788171358,-97.358176200782339 26.356434874083959,-97.343417852538664 26.35923386920927,-97.342332537534404 26.358759043566288,-97.335275323058127 26.355671510096041,-97.335020017473738 26.355402767481841,-97.331108052904881 26.351284911668415,-97.330440693097202 26.350582427937965,-97.333762617526986 26.340749518544904,-97.336802038706509 26.331752819885011,-97.343786761143846 26.325987658774913,-97.344677525679145 26.325252425399061,-97.352414066956698 26.31886671611711,-97.352832659030639 26.318521211944631,-97.354359379610003 26.313941040344577,-97.348998828460125 26.312092573442666,-97.347821984790102 26.311686765063648,-97.346980205488165 26.311396496183672,-97.34736083223585 26.297503848546928,-97.347437236753805 26.2947151295396,-97.347489122209922 26.292821341560611,-97.347051378510429 26.289694600417153,-97.344137846000223 26.268883651035111,-97.343926764329439 26.267375924606483,-97.342629246748771 26.266550231912309,-97.341127771669619 26.265594748131736,-97.335282658907644 26.265594748131736,-97.331967408745584 26.265594748131736,-97.330307576264516 26.266747410222209,-97.323817586106017 26.271254350355399,-97.322807065545476 26.271956101137519,-97.313207351206557 26.273518846137112,-97.312102101648151 26.273698770576502,-97.311865543405119 26.273737280077761,-97.307030913444194 26.253126493084562,-97.308048727163751 26.249055213551365,-97.321280340035131 26.236078054109896,-97.321280340035131 26.228698889850026,-97.304486359421333 26.202490107675235,-97.296598288301666 26.200708923804015,-97.294817109361432 26.192311940893585,-97.296089381441874 26.182388227541828,-97.303096384204423 26.167373221160254,-97.305986772892751 26.161179530923267,-97.306776455083323 26.159487354748606,-97.300965235160419 26.149753561518516,-97.296881711355638 26.142913659244432,-97.296598288301666 26.14243892563589,-97.285549237329036 26.12861437636975,-97.28536038956149 26.128378090441405,-97.284582435540926 26.126454238998875,-97.282094393487881 26.120301403270393,-97.282839179410786 26.118439442973433,-97.28311220967295 26.117756868971455,-97.285501587752023 26.116923364107649,-97.294053737977038 26.113940052730097,-97.295071554162092 26.108342057548505,-97.292023254217796 26.105090538920617,-97.291924538345086 26.104985242032239,-97.291541272704407 26.104576425513905,-97.287190793518263 26.099935916255493,-97.286650074642992 26.099359149688052,-97.286603231473521 26.09930918366079,-97.283195451762182 26.095674220102872,-97.282639002190891 26.095080674133143,-97.282108002623801 26.094514274823585,-97.280435495761154 26.092730268223651,-97.279905974795895 26.09216544608875,-97.27980430522237 26.092056998587434,-97.27089841052117 26.086459003405839,-97.267086875013263 26.085485845069449,-97.24859983335169 26.080765747704277,-97.246979719077387 26.080352101364454,-97.229515030031649 26.08000965739204,-97.220290685310772 26.079828788368793,-97.208048240752987 26.079588741074772,-97.205005053278043 26.078666562185607,-97.199651252911579 26.077044196913871,-97.199152512570265 26.073220535461079,-97.199134106850465 26.073079425477676,-97.198725011196004 26.069943037351702,-97.198302051934135 26.066700361972018,-97.196018989165054 26.049196947106083,-97.195939794821285 26.0485897927724,-97.195071061587612 26.04192952989985,-97.204994779870347 26.030224637607851,-97.214918488291119 26.030733549398622,-97.224842206573854 26.027425644948035,-97.226114478654296 26.024372193927345,-97.219244211392265 25.99612778184791,-97.216954125592238 25.993837693582392,-97.208557137750816 25.991802058746771,-97.195834416946283 25.993074335758202,-97.174460269663413 26.000071824804216,-97.167208324722026 26.007069313850227,-97.162755377371425 26.014575709756024,-97.16262814819099 26.023481604457221,-97.172042954682937 26.044728528107019,-97.178658763584124 26.045491893327686,-97.182730028324386 26.053125515948434,-97.164981847348457 26.063876207878327,-97.152009000000007 26.062107999999998,-97.152012551274964 26.062039393270581,-97.15321 26.038906,-97.151921999999999 26.017652999999999,-97.14747181118706 25.985075937251509,-97.145567 25.971132,-97.146880999999993 25.969781,-97.146293999999997 25.955606,-97.147784999999985 25.953132,-97.156608000000006 25.949021999999999,-97.160293999999993 25.950243,-97.168198638692317 25.959262149012673,-97.178362000000007 25.962114,-97.187583000000004 25.958174,-97.206945000000005 25.960899,-97.214339285966162 25.960186817526893,-97.227626420907342 25.958907063854085,-97.229225999999997 25.958753000000002,-97.239867000000004 25.954974,-97.244841570811701 25.950784663302475,-97.248032999999992 25.948097,-97.255343503388133 25.949129556975723,-97.276707000000002 25.952147,-97.28138899999999 25.948036999999996,-97.277163000000002 25.935438,-97.284201820237172 25.935775045516863,-97.290083634347766 25.936056689174489,-97.293963761326751 25.936242484429805,-97.303601999999998 25.936703999999999,-97.316138101068788 25.931602038234757,-97.320560999999984 25.929801999999999,-97.324914000000007 25.924040999999999,-97.332235861490744 25.923541683060932,-97.33463605770983 25.923378000829199,-97.338346 25.923124999999999,-97.339310160867683 25.923294280152341,-97.350397999999998 25.925241,-97.367642000000004 25.915679999999998,-97.369283543255307 25.913688286645449,-97.373641276386991 25.908400972256459,-97.374430000000004 25.907443999999998,-97.372365000000002 25.905015999999996,-97.365976000000003 25.902446999999999,-97.365883578347024 25.900015396466173,-97.365521 25.890476,-97.364300486696564 25.885628504434479,-97.362421560218849 25.878165998501085,-97.360082000000006 25.868874000000002,-97.364783621478566 25.852096838905283,-97.36542 25.849826,-97.372864000000007 25.840116999999996,-97.394513000000003 25.837377,-97.422635999999997 25.840377999999998,-97.42853949246836 25.842912007889609,-97.434188204901034 25.845336654308195,-97.441181027463472 25.848338244915578,-97.445113000000006 25.850026,-97.445601387363794 25.851485440010176,-97.447179184935308 25.856200346812667,-97.448271000000005 25.859463000000002,-97.449172000000004 25.871677999999996,-97.452166849899044 25.875807172885114,-97.453724626189043 25.87795496921364,-97.454727000000005 25.879337,-97.45488774919265 25.879394304385261,-97.462586893331732 25.882138919861518,-97.468261999999982 25.884162,-97.468599721544905 25.884059457735212,-97.481532785459223 25.880132596436578,-97.486059999999995 25.878758,-97.490359999998347 25.879275544671589,-97.494739403174762 25.879802646248233,-97.496860999999996 25.880057999999998,-97.519591990380178 25.88590026892226,-97.521761999999995 25.886458,-97.52344767329889 25.891064017588189,-97.524375103029939 25.893598172727145,-97.528116959024402 25.903822606212749,-97.528119935206945 25.903830738482007,-97.52812430798204 25.903842686870224,-97.528627999999998 25.905218999999999,-97.528849446448064 25.906732522417784,-97.530321999999998 25.916796999999999,-97.530415259581318 25.916820899843632,-97.539878370214808 25.919246032588486,-97.542957 25.920034999999999,-97.545169999999999 25.923974999999999,-97.545468770003851 25.926387609575503,-97.545470694802859 25.92640315259677,-97.546397824784293 25.933889856891241,-97.546420999999995 25.934076999999998,-97.546611329705271 25.934141994258589,-97.555160182125618 25.937061277530951,-97.555378999999988 25.937135999999999,-97.555477252221124 25.937015705749829,-97.559364000000002 25.932257,-97.582565000000002 25.937856999999997,-97.580418999999992 25.945115999999995,-97.583044 25.955442999999999,-97.598043000000004 25.957556,-97.5981230356591 25.957681442330628,-97.607733999999994 25.972745,-97.60783562843973 25.973457509771446,-97.607844088251909 25.973516820913719,-97.608283 25.976593999999999,-97.609461531117333 25.977846566488182,-97.613191727531174 25.981811093986448,-97.613466053312663 25.982102652924251,-97.616041456343709 25.984839842874308,-97.624938181905222 25.994295461083137,-97.627225999999993 25.996727,-97.634804000000003 25.999508999999996,-97.635072411453706 25.99971613545971,-97.639164724998494 26.00287420951236,-97.642117661027001 26.005153015998879,-97.644011365977178 26.006614404624422,-97.643848619841975 26.01214811069886,-97.643707610985203 26.016942704231127,-97.649175518723894 26.021499311673544,-97.65096419129361 26.02118629315062,-97.659123404318109 26.019758427116106,-97.661326460130226 26.019372891335045,-97.66298585459532 26.019511685247039,-97.668297999999993 26.019955999999997,-97.669519566971061 26.021667429940447,-97.671350987084779 26.024233271429612,-97.671567999996611 26.024226704244594,-97.691453959129774 26.023624920821636,-97.697068999999999 26.023454999999998,-97.703247203861338 26.030308742132775,-97.706066818770353 26.031284762516545,-97.709294717923569 26.032402112038366,-97.711145328137576 26.033042707775564,-97.719920000000002 26.030837999999999,-97.723585926686539 26.030959832537771,-97.729354247932832 26.031151535557555,-97.735180242251758 26.031345155270547,-97.758837769919694 26.032131383932391,-97.76309059882324 26.033650253079866,-97.763351431657455 26.034258862745556,-97.76491324062286 26.037903081983409,-97.769788888528993 26.041344719068825,-97.770077387482857 26.041548365582649,-97.776788595669075 26.042443189872706,-97.779190602367677 26.042763456191249,-97.784050976575529 26.040637041739476,-97.789822674626535 26.0424596835391,-97.792252861730461 26.04428232533872,-97.793102878401371 26.047342389307317,-97.793537334820812 26.048906434437896,-97.794638769549053 26.052871604582215,-97.795290594138677 26.055218176136449,-97.801344 26.060016999999998,-97.803973303988229 26.059548218630308,-97.8082126910423 26.058792373859696,-97.819424117916668 26.056793476786609,-97.820997703829306 26.056512920501468,-97.825546000000003 26.055702,-97.826721102251625 26.055271667399982,-97.830409376527257 26.053920989485444,-97.836607999999984 26.051650999999996,-97.848759348822554 26.052295281844582,-97.85186756815483 26.052460084066457,-97.859824237628374 26.052881958029587,-97.860225497621784 26.05290323340671,-97.860503999999992 26.052917999999998,-97.861874999990562 26.053580848914272,-97.869705222636284 26.057366592615971,-97.871187000000006 26.058082999999996,-97.876982999999996 26.064482999999999,-97.886529999999993 26.066338999999999,-97.901546631929207 26.060958662441269,-97.905109129229899 26.05968224852101,-97.913882 26.056539,-97.935419999999993 26.052687999999996,-97.944344999999984 26.059620999999996,-97.950095000000005 26.061827999999998,-97.96210735288345 26.054793018383155,-97.96735799999999 26.051718,-97.971403108419892 26.054550391225565,-97.978769 26.059707999999997,-97.979877702655912 26.062937323324391,-97.981335 26.067181999999995,-98.010970999999998 26.063862999999998,-98.015122209308288 26.064471399070538,-98.026123959861238 26.06608380989196,-98.028288992822496 26.066401115993269,-98.028758999999994 26.066469999999999,-98.029241090705753 26.065867136858621,-98.033102 26.061039,-98.034402999999998 26.051375,-98.034479464439173 26.051215303797409,-98.034525269179767 26.051119640464091,-98.039238999999981 26.041274999999995,-98.054365285842039 26.044575736209502,-98.070020999999997 26.047992,-98.070022345126233 26.049160242153427,-98.070025 26.051466,-98.071425788568789 26.055027814897404,-98.076094939927231 26.066900165398668,-98.076139697069991 26.067013970337847,-98.076205751241318 26.067181927684643,-98.076543999999998 26.068041999999998,-98.076994427275579 26.068371469710563,-98.080289992888041 26.070782045417982,-98.080494999999999 26.070931999999999,-98.080906883185932 26.070920010911959,-98.084755 26.070808,-98.085506402845155 26.069709056167966,-98.085848999999982 26.069208,-98.085628527723046 26.069048386721494,-98.081567000000007 26.066108,-98.081855064865067 26.063941606819231,-98.081884000000002 26.063724,-98.082307152201508 26.063513440869801,-98.091037999999998 26.059169,-98.093593108176947 26.058759459973995,-98.094431999999998 26.058624999999996,-98.095078111969258 26.058956205325877,-98.096949561841043 26.059915534659098,-98.097643000000005 26.060270999999997,-98.105504999999994 26.067537000000002,-98.122952624574893 26.063250384797335,-98.12786358062813 26.062043837809401,-98.128331000000003 26.061928999999999,-98.142925292417388 26.051941751725515,-98.14645163947533 26.049528582072455,-98.146621999999994 26.049412,-98.146852932570667 26.049588146033326,-98.149462999999997 26.051579,-98.149462999999997 26.055813,-98.151730999999998 26.058187,-98.158277994458601 26.062311711597108,-98.16142849281799 26.064296576133319,-98.161911645017582 26.064600969774318,-98.167608590156348 26.068190136655492,-98.172071527808072 26.071001859012309,-98.177897000000002 26.074672,-98.179863281323136 26.072661506851002,-98.189059999999998 26.063257999999998,-98.191534000000004 26.057117999999999,-98.197046 26.056152999999998,-98.200871000000006 26.059161,-98.203328791159265 26.063523594334541,-98.204415309491765 26.065452171017675,-98.20496 26.066419,-98.205720285634712 26.066905180236589,-98.2057544964389 26.066927057036718,-98.220672999999991 26.076467,-98.228363119990576 26.077028417928002,-98.230097 26.077155,-98.231072909449267 26.07694353295701,-98.240214327563166 26.074962705064888,-98.248806000000002 26.073101,-98.250234708208026 26.074229377516481,-98.260964088277859 26.082703320039151,-98.264514000000005 26.085506999999996,-98.272091468517374 26.0934369782697,-98.272527821536428 26.09389363077193,-98.277218000000005 26.098801999999999,-98.277020629370639 26.099144109090908,-98.272932087266241 26.106230915405163,-98.272897999999998 26.10629,-98.272099931737145 26.106512924095771,-98.270258188934392 26.107027377392626,-98.270033999999995 26.107089999999999,-98.269661374787887 26.108231250649609,-98.268046405073434 26.113177467856264,-98.266755660647689 26.117130670341034,-98.265753950746401 26.120198637935399,-98.265698 26.12037,-98.266046753689267 26.120369439652073,-98.268388964369507 26.120365676386069,-98.271048543344023 26.120361403199535,-98.2713587738927 26.120360904747326,-98.279433560913844 26.12034793086255,-98.289509742149562 26.120331741306838,-98.296194999999997 26.120321,-98.299522999999979 26.11749,-98.299575546893735 26.117376878214852,-98.299577897643644 26.117371817572689,-98.299619756950364 26.117281703787395,-98.301477861619162 26.113281617347607,-98.302978999999993 26.110049999999998,-98.307788398559808 26.112633359128559,-98.31093219000293 26.114322040617914,-98.314784784069062 26.116391454064445,-98.31781148535309 26.118017240801439,-98.323055746360907 26.120834185452331,-98.323827999999992 26.121248999999995,-98.324165904650499 26.121735183484471,-98.335204000000004 26.137616999999999,-98.337914801547555 26.149187638321976,-98.338210450252006 26.150449569219312,-98.338419999999999 26.151344000000002,-98.338123748811455 26.151776768193923,-98.337139471603692 26.153214615149455,-98.336278203634194 26.154472768358826,-98.335109254490916 26.156180386856505,-98.334230366689056 26.157464279382136,-98.333315999999996 26.158799999999999,-98.333279392301918 26.159609030127591,-98.333194378655719 26.161487831708563,-98.333156000000002 26.162336,-98.33332593363771 26.162525092143447,-98.336569396995017 26.166134227137082,-98.336837000000003 26.166432,-98.337709251548077 26.166391430160555,-98.345513373134324 26.166028447761192,-98.345781000000002 26.166015999999999,-98.345955918391979 26.165759937155421,-98.34781294946896 26.163041431373035,-98.354645000000005 26.15304,-98.380009845764519 26.156864235849298,-98.386243919298991 26.157804141722139,-98.386694000000006 26.157872,-98.386714843024777 26.157901012682096,-98.387178289965661 26.158546112849205,-98.389418830831929 26.161664858836595,-98.394322667090904 26.168490808715738,-98.402249554153599 26.179524728065878,-98.404432999999997 26.182563999999999,-98.41082579547016 26.183537375155975,-98.418120000000002 26.184647999999999,-98.44253599999999 26.199151,-98.444302622216625 26.201317032456906,-98.444376000000005 26.201407,-98.444366742625562 26.201566115583965,-98.444174812576264 26.204865005795593,-98.443681770155465 26.213339409994948,-98.45054565332704 26.219516919037407,-98.450975699346984 26.219903961344286,-98.465077324681431 26.222335272645303,-98.467962758220992 26.221802674698019,-98.47639547470331 26.220246150374404,-98.481645999999998 26.219277000000002,-98.483269000000007 26.216439,-98.496684404575589 26.212853148677059,-98.500574513964963 26.213825676024403,-98.503492081872309 26.214798198660183,-98.504399410834864 26.216045775617395,-98.509275818143593 26.222750833698164,-98.509327236533252 26.222821533963195,-98.516621175147847 26.223550930651591,-98.520846190978133 26.222726536052498,-98.524733007990875 26.221968131567948,-98.526589565145571 26.221605875956907,-98.528323413163747 26.222421776495104,-98.535240999999999 26.225677,-98.538016739096946 26.231331135295655,-98.538505426714039 26.231595841236214,-98.543851889046309 26.23449184328507,-98.556093449912439 26.231976454911809,-98.561600478976516 26.23084487397777,-98.564343479612191 26.231667774301364,-98.575891642961039 26.235132223865481,-98.57618836327309 26.235221239973473,-98.581780384919284 26.243001439905978,-98.583095590242166 26.247416774401941,-98.585184223567666 26.254428618568909,-98.588002268837087 26.255070784392117,-98.599153999999999 26.257611999999998,-98.610401443364651 26.253223367217647,-98.613465000000005 26.252027999999999,-98.617434734670965 26.252082931217494,-98.618976176235122 26.252104260920568,-98.625299999997523 26.252191766854153,-98.626653663614832 26.252210498179227,-98.633391522135483 26.243617562727948,-98.63418 26.242612,-98.636673745354344 26.241784277127035,-98.654221000000007 26.235959999999999,-98.669397000000004 26.236319999999996,-98.675206000000003 26.239989,-98.678410535728389 26.244637915883345,-98.679041999999995 26.245553999999998,-98.678977427258005 26.246060764449961,-98.677766000000005 26.255568,-98.679196310064967 26.258571609080832,-98.681167000000002 26.262709999999998,-98.687156000000002 26.26512,-98.698855915315121 26.265619481498664,-98.707451416076225 26.272152066874316,-98.710601999999994 26.279018,-98.709170532219119 26.284185773270103,-98.710647239525585 26.288123668959596,-98.711233447604599 26.289686894290245,-98.722550749196131 26.295571625529284,-98.729196000000002 26.299026999999999,-98.73263614407044 26.29899082409209,-98.734613221934339 26.298970033513189,-98.745271658069271 26.303095890935232,-98.745297595683382 26.304159357241051,-98.745599830797417 26.316551278053844,-98.745615470637418 26.317192526042046,-98.748245116157776 26.32061106368975,-98.74905366960931 26.321662182706675,-98.754840366886953 26.324877004144408,-98.755242435754027 26.32510037501579,-98.766685638772316 26.325769085950686,-98.779858354339893 26.326538865087553,-98.779911999999996 26.326541999999996,-98.779946859358333 26.326559704051515,-98.789821999999987 26.331575,-98.796251999999996 26.349104,-98.797592059971961 26.356670995104565,-98.798210999999995 26.360166,-98.807348000000005 26.369420999999999,-98.808280016253249 26.369491024329768,-98.813413043374013 26.369876679389535,-98.81818280466733 26.370235041528161,-98.81932575812273 26.370320914010964,-98.824571000000006 26.370715,-98.828353477559162 26.367368473620303,-98.832909 26.363337999999999,-98.838554497099707 26.360957856802237,-98.842229804437778 26.359408346173527,-98.844057000000006 26.358637999999999,-98.847707 26.359594999999999,-98.853132332741467 26.364754198689674,-98.853414999999998 26.365023,-98.853852117327648 26.365076242531281,-98.854321671505204 26.365133435992636,-98.861354000000006 26.365989999999996,-98.861661690067152 26.365902494757481,-98.869113443480302 26.363783259984523,-98.874117355796216 26.362360176799562,-98.876164212939671 26.361778062685843,-98.882912762903771 26.359858814831277,-98.890964919192157 26.357568829017531,-98.895015448091129 26.359360408468842,-98.900432100164338 26.361756234493352,-98.900829697862818 26.361932094951143,-98.905559653818443 26.364024190108832,-98.91296803413384 26.372226331500926,-98.915344992389564 26.37485796579432,-98.921277034399395 26.381425588572444,-98.922831447878195 26.38166472803821,-98.923508557916591 26.381768898347495,-98.924925720775448 26.381986922427696,-98.926689551972586 26.38116380140492,-98.934437533628781 26.377548077521784,-98.937555770591459 26.376092900630621,-98.942046463189357 26.375531566775365,-98.950185820407469 26.380302920861933,-98.952073083609605 26.383491745197549,-98.952938578460817 26.384954133189183,-98.953327659277917 26.385611545667039,-98.958325183064531 26.394055638388448,-98.960041959595969 26.394835991082342,-98.96758721887106 26.398265653180793,-98.981979903868819 26.396488780147621,-98.98323657723455 26.396333635432413,-98.985344372930967 26.396073413984297,-98.99032130527651 26.395458978465552,-99.008003378826189 26.395458978465552,-99.014739404125635 26.398826987036053,-99.018845438188137 26.404005475794783,-99.021934999999999 26.407902,-99.025336792347318 26.409271761295809,-99.030462148109507 26.411335530401477,-99.031104888479149 26.411594335405351,-99.032315999999994 26.412082000000002,-99.033086386506682 26.412180127570064,-99.037216923343138 26.412706252494743,-99.039107 26.412946999999999,-99.039645291109963 26.412681959983438,-99.045466000000005 26.409815999999999,-99.053184999999999 26.402006,-99.062093000000004 26.397371,-99.082001999999989 26.396509999999996,-99.085125999999988 26.398782,-99.089412999999979 26.408099999999997,-99.092044248326658 26.410330707587079,-99.0977332288968 26.415153685331873,-99.099649490160544 26.416778244479925,-99.110855 26.426278,-99.113807999999992 26.434002,-99.110485406379198 26.436329519428725,-99.103082999999998 26.441514999999999,-99.097481906444941 26.458865277747179,-99.094712087984234 26.467445230774196,-99.091634999999997 26.476977000000002,-99.105030999999997 26.500335,-99.114051328117867 26.510193091438737,-99.123438026388797 26.520451579672599,-99.126618350727256 26.523927276756307,-99.127319211298612 26.524693229780183,-99.127781999999996 26.525199,-99.128040494672888 26.525242991472329,-99.131554903978838 26.52584108518932,-99.136510932879688 26.526684518463242,-99.143658999999985 26.527901,-99.157083944984777 26.532657279516766,-99.166741999999985 26.536078999999997,-99.170704 26.540316,-99.171403999999995 26.549848,-99.167459686682065 26.559874693319248,-99.167410000000004 26.560001,-99.168618869529794 26.566870928153797,-99.16946034016965 26.571652951934592,-99.178064000000006 26.620546999999998,-99.200522000000007 26.656442999999999,-99.209947999999997 26.693937999999999,-99.208906999999982 26.724761,-99.240022999999979 26.745850999999998,-99.242444000000006 26.788262,-99.243132825912184 26.78921716914337,-99.262208 26.815667999999999,-99.268613000000002 26.843212999999999,-99.274832961326339 26.850997131057774,-99.280470999999991 26.858053000000002,-99.295146000000003 26.86544,-99.316753000000006 26.865831,-99.328801222539823 26.879647723469141,-99.328900000000004 26.879760999999998,-99.328852280051947 26.879943529980665,-99.328653604395157 26.88070346927794,-99.326247644284351 26.88990632616278,-99.321819000000005 26.906846000000002,-99.324684000000005 26.915973,-99.337297000000007 26.922758999999999,-99.361143999999996 26.928920999999999,-99.367053999999996 26.929033999999998,-99.379148999999998 26.934489999999997,-99.388253000000006 26.944216999999998,-99.393748000000002 26.960730000000002,-99.390189000000007 26.966348,-99.377312000000003 26.973818999999999,-99.376593 26.977716999999998,-99.378434999999996 26.980034,-99.385448615007036 26.981891053234623,-99.387366999999998 26.982399,-99.403694000000002 26.997355999999996,-99.407320999999996 27.005808999999999,-99.415475999999998 27.017239999999997,-99.420446999999996 27.016567999999999,-99.429379999999981 27.010833000000002,-99.432154999999995 27.010698999999995,-99.438721 27.01463,-99.445682828533535 27.022104842939122,-99.446523999999997 27.023008,-99.446589518313687 27.0234513503828,-99.446929167151652 27.025749691622671,-99.446969999999979 27.026026000000002,-99.446787747918748 27.026353589968604,-99.444062000000002 27.031253,-99.443973 27.036457999999996,-99.447729715193731 27.048260380671568,-99.452315999999996 27.062668999999996,-99.450282 27.067705,-99.439210578806851 27.075275465844946,-99.434470000000005 27.078517000000002,-99.429209 27.090981999999997,-99.430274999999995 27.094871999999999,-99.437646 27.100442,-99.442122999999995 27.106839,-99.441108999999997 27.110041999999996,-99.433369999999982 27.119218,-99.430581000000004 27.126611999999998,-99.431354999999996 27.13758,-99.438264999999987 27.144791999999995,-99.439971 27.151071999999996,-99.437950999999998 27.154121,-99.42998399999999 27.159148999999999,-99.426616441133064 27.174998569551711,-99.42634799999999 27.176261999999998,-99.426389092127664 27.176475083747437,-99.428025433058153 27.184960350328335,-99.432794999999999 27.209693,-99.441928000000004 27.217984999999995,-99.442101400955139 27.218265584747954,-99.445237999999989 27.223341,-99.443121431464945 27.230753685991843,-99.441406999999998 27.236757999999998,-99.441548999999995 27.249919999999999,-99.452207395848959 27.263806782859465,-99.452390999999992 27.264046,-99.452635348600225 27.264144272092288,-99.454218033886534 27.264780796280988,-99.462735864984637 27.268206496624611,-99.463308999999981 27.268436999999995,-99.463731957038988 27.268231398925973,-99.480688 27.259988999999997,-99.487909999999999 27.260721,-99.492407 27.264118,-99.496069429210138 27.270723950024919,-99.496615000000006 27.271707999999997,-99.496412995851571 27.272119287725655,-99.490870463706145 27.283404082904614,-99.487572835142558 27.290118173493504,-99.487513000000007 27.29024,-99.487552182270463 27.290674424182523,-99.487937000000002 27.294941,-99.493651777311726 27.30231355132117,-99.494603999999995 27.303542,-99.494999311050705 27.30367917804087,-99.501697839297435 27.306003653868146,-99.502036000000004 27.306121,-99.50260564894451 27.305998370990778,-99.511531000000005 27.304076999999999,-99.522353224815092 27.304131436852781,-99.523657999999983 27.304137999999995,-99.527521386758664 27.305370598210363,-99.529216737576675 27.305911493159478,-99.529653999999994 27.306051,-99.533911450776046 27.310119063512179,-99.536090758332008 27.312201427353024,-99.536443000000006 27.312538,-99.537771000000006 27.316072999999996,-99.53137599999998 27.323809,-99.52136037329538 27.324774325824137,-99.521259999999998 27.324784,-99.520793197388144 27.325167862222077,-99.515101491997058 27.329848278790703,-99.509737777509301 27.334258981108004,-99.504836999999995 27.338289,-99.507830999999996 27.348637,-99.507785758525344 27.353517859091919,-99.507778999999999 27.354247,-99.505884699626023 27.358359262089539,-99.503847413823948 27.362781925614613,-99.502763417847504 27.36513512979511,-99.502013099315448 27.366763966750881,-99.499076000000002 27.373139999999999,-99.492143999999996 27.380516999999998,-99.488110785984318 27.408328989964531,-99.487887470616073 27.409868914391197,-99.487633320470721 27.411621467383494,-99.487521 27.412396,-99.487591555014376 27.412624523015491,-99.489856740583164 27.419961308946796,-99.495313182879073 27.437634363915539,-99.495699000000002 27.438884000000002,-99.495681276107845 27.439260342274874,-99.495103999999998 27.451518,-99.489866073767956 27.458841813736395,-99.48498035355378 27.465673163249864,-99.484933241276849 27.465739036942171,-99.483818999999997 27.467296999999995,-99.483170086267094 27.470026063960816,-99.480813109028745 27.479938539705284,-99.480418999999998 27.481595999999996,-99.480219000000005 27.485795999999997,-99.483519 27.491095999999999,-99.494943552274876 27.498766770813134,-99.497518999999997 27.500495999999998,-99.501722168778215 27.500229993495459,-99.502529258718056 27.500178915086504,-99.513319999999993 27.499496,-99.516119999999361 27.498282666666942,-99.519319999999979 27.496896,-99.525819999999982 27.496696,-99.528319999999994 27.498895999999998,-99.525855930815595 27.516294999999385,-99.525849791073696 27.516338353233991,-99.525316190784537 27.520106149807926,-99.523876376642917 27.530272798702207,-99.522431296340699 27.540476632400054,-99.521918999999997 27.544094,-99.518818999999993 27.553194,-99.514319 27.556994,-99.511118999999994 27.564493999999996,-99.512219000000002 27.568093999999995,-99.515978000000004 27.572130999999999,-99.51621006287597 27.572263354504685,-99.516956092136581 27.572688844074506,-99.522907946893667 27.576083418863931,-99.530137999999994 27.580207,-99.536560517954015 27.595669560441458,-99.539721999999998 27.603280999999999,-99.549741780062789 27.610632655019803,-99.554405160028892 27.614054243170667,-99.554950000000005 27.614453999999999,-99.555217670042637 27.614437037021997,-99.556811999999994 27.614335999999998,-99.559466999999998 27.609075999999998,-99.562869000000006 27.607264,-99.580005999999997 27.602250999999995,-99.584175941853502 27.603675176957196,-99.584843000000006 27.603902999999999,-99.584876722760043 27.604178863233781,-99.585148000000004 27.606397999999999,-99.578360965974085 27.610254799100861,-99.578159999999983 27.610368999999999,-99.578158133228257 27.610639131051315,-99.578098999999995 27.619195999999999,-99.584782000000004 27.622006999999996,-99.591372000000007 27.627464,-99.592626330929548 27.632690692534315,-99.594037999999998 27.638573,-99.596231000000003 27.639857999999997,-99.603532999999999 27.641991999999998,-99.612907806834755 27.638651258855042,-99.615318942915422 27.637792043123689,-99.624515000000002 27.634515,-99.625321999999997 27.631136999999999,-99.638929000000005 27.626757999999999,-99.654323999999988 27.629615999999999,-99.665948 27.635967999999998,-99.665422000000007 27.640274999999999,-99.660175716081199 27.644678795569117,-99.659499999999994 27.645246,-99.659300532255756 27.646059100049566,-99.658294999999995 27.650158,-99.661845 27.655753,-99.668942 27.659973999999998,-99.672015651285406 27.660163655087903,-99.685812999999982 27.661014999999999,-99.699355999999995 27.655417,-99.704600999999997 27.654953999999996,-99.711511000000002 27.658365,-99.721518999999986 27.666154999999996,-99.723715999999996 27.673328,-99.727277746539684 27.678262316066267,-99.732288643517421 27.685204233237535,-99.732448000000005 27.685424999999999,-99.732610774853441 27.685596448480599,-99.757538999999994 27.711853,-99.758533999999997 27.717071,-99.770740000000004 27.732133999999999,-99.774900999999986 27.73354,-99.785365999999996 27.730354999999999,-99.788844999999981 27.730718,-99.796341999999981 27.735586,-99.801651000000007 27.741771,-99.805670000000006 27.758687999999999,-99.813085999999998 27.773952,-99.817390803736785 27.775433523363962,-99.819091999999998 27.776019000000002,-99.822192999999999 27.766855,-99.825793000000004 27.764373999999997,-99.835127 27.762881,-99.841707999999997 27.766463999999999,-99.843346625073153 27.773142384459568,-99.844736999999981 27.778808999999999,-99.849281022020321 27.790032142335203,-99.850876999999997 27.793973999999999,-99.857944055165163 27.794214491272228,-99.870065999999994 27.794626999999998,-99.877441689362087 27.799278597548025,-99.877677000000006 27.799427,-99.877679299916537 27.799779028327777,-99.877693551047656 27.801960325692491,-99.877840000000006 27.824375999999997,-99.876677795668783 27.832975173255242,-99.876002999999997 27.837968,-99.877201999999997 27.842179000000002,-99.882014999999996 27.850391999999996,-99.89364999999998 27.856193,-99.901486000000006 27.864162,-99.904385000000005 27.875283999999997,-99.901231999999993 27.884405999999995,-99.894091000000003 27.892949999999999,-99.893456 27.899208000000002,-99.895827999999995 27.904177999999998,-99.900080000000003 27.912141999999999,-99.905861237749605 27.914081496997749,-99.917461000000003 27.917973,-99.925935042520848 27.927688375003317,-99.93714199999998 27.940536999999999,-99.938541 27.954059,-99.932160999999979 27.96771,-99.931811999999994 27.980967,-99.962768999999994 27.983536,-99.984922999999995 27.990729000000002,-99.991446999999994 27.99456,-99.998749958954292 28.00705628754028,-100.000278657311796 28.009672084008166,-100.008630999999994 28.023963999999999,-100.012838999999985 28.037203000000002,-100.014975394500183 28.048814882934586,-100.016570970484992 28.057487270710915,-100.017914000000005 28.064786999999999,-100.028724999999994 28.073118,-100.046108000000004 28.079067999999999,-100.053122999999985 28.08473,-100.056983000000002 28.094207,-100.05559599999998 28.101140999999998,-100.056492999999989 28.104185999999995,-100.064147158981442 28.110644603904401,-100.067651999999995 28.113602,-100.075474 28.124881999999999,-100.083393 28.144034999999999,-100.090288999999984 28.148312999999998,-100.119627999999992 28.155588000000002,-100.12658652988236 28.159659080291213,-100.141098 28.168149,-100.159890345070792 28.168159605160877,-100.160589999999999 28.16816,-100.1644540887186 28.169825181963088,-100.168437999999995 28.171541999999999,-100.173949604741296 28.178834844700365,-100.174413 28.179448,-100.17569869464343 28.180169771489844,-100.185693999999998 28.185780999999999,-100.195825662217615 28.189941498404405,-100.196499000000003 28.190218000000002,-100.19841872968675 28.190245400986015,-100.202449991411854 28.190302940621361,-100.208059000000006 28.190382999999997,-100.21208061434919 28.196473071951928,-100.212104999999994 28.196509999999996,-100.212111438897693 28.196576571978802,-100.212136678181992 28.196837521783539,-100.213449999999995 28.210415999999999,-100.217564999999993 28.226934,-100.220284000000007 28.232209999999995,-100.22363 28.235223999999995,-100.227575000000002 28.235856999999999,-100.246200000000002 28.234092,-100.251633999999996 28.236177,-100.261135590980771 28.244561246718906,-100.267604000000006 28.250268999999999,-100.280518 28.267969,-100.289383999999998 28.273491,-100.293468000000004 28.278475,-100.294296000000003 28.284381,-100.287553999999986 28.301093000000002,-100.286470999999992 28.312295999999996,-100.288638999999989 28.316977999999995,-100.314198000000005 28.345859,-100.317245999999997 28.357382,-100.320392999999996 28.362116999999998,-100.341869000000003 28.384952999999996,-100.344399999999979 28.389662,-100.34934096344108 28.4019924953441,-100.349585999999988 28.402603999999997,-100.349394820211828 28.402858691740477,-100.345766407828719 28.407692501181913,-100.343945000000005 28.410119000000002,-100.337058999999996 28.427150999999995,-100.336185999999998 28.430180999999997,-100.337474638078888 28.440402915586755,-100.337648113426326 28.441778981052359,-100.337796999999995 28.442959999999999,-100.338752462381066 28.444650728533539,-100.341532999999998 28.449570999999995,-100.350785999999999 28.459246,-100.353875644654778 28.461269551534915,-100.357498000000007 28.463642,-100.35795880406117 28.464220845064407,-100.358193534884933 28.464515705266944,-100.367961112704847 28.47678537623738,-100.368288000000007 28.477195999999999,-100.368051363629903 28.477598261305609,-100.365982000000002 28.481116,-100.356642877924983 28.482149981508559,-100.352234999999979 28.482638,-100.344180999999992 28.486249,-100.337140000000005 28.491728999999999,-100.33381399999999 28.499251999999998,-100.338517999999993 28.501833,-100.362147999999991 28.508399,-100.379079000000004 28.511638999999999,-100.388859999999994 28.515747999999995,-100.405057999999983 28.535779999999999,-100.411413999999994 28.551898999999999,-100.40430324537553 28.563833042228197,-100.397270000000006 28.575637,-100.396799999999999 28.580400999999998,-100.398385000000005 28.584883999999999,-100.403243426032972 28.586668145075244,-100.425819035320046 28.594958517689108,-100.429856 28.596440999999995,-100.431892715674053 28.597943579291371,-100.447320000000005 28.609324999999998,-100.448648000000006 28.616773999999999,-100.447280739633683 28.625703494601449,-100.445528999999993 28.637143999999996,-100.44560646842767 28.637394606891831,-100.447014715516048 28.641950223113035,-100.447091 28.642196999999999,-100.447325484276334 28.642184618041064,-100.447599559425257 28.642170145483281,-100.456522261830528 28.641698981546444,-100.462866000000005 28.641363999999999,-100.474494000000007 28.647071,-100.479445543783555 28.654922981332383,-100.479495071011698 28.655001519842354,-100.479635999999999 28.655225000000002,-100.481416494659797 28.655591917738484,-100.492493911747701 28.657874710783531,-100.493322226012125 28.658045406716248,-100.495863 28.658568999999996,-100.496129521434568 28.658770241190073,-100.500353999999987 28.661960000000004,-100.502122125123847 28.667202406240314,-100.505211969634487 28.676363647108229,-100.509438609439442 28.688895431533517,-100.510054999999994 28.690722999999995,-100.510127443340068 28.69126843161186,-100.510538898440004 28.694366309458967,-100.51077198772829 28.696121257064849,-100.511998000000006 28.705352,-100.511351260759739 28.706743032691019,-100.510646631791559 28.708258576930099,-100.509872363628347 28.709923903942272,-100.509406561254394 28.710925770365975,-100.508636802312012 28.712581398765199,-100.507069450532313 28.715952521820881,-100.506701000000007 28.716745000000003,-100.506745928327234 28.717920131927187,-100.506786973330165 28.718993692782757,-100.507152057645129 28.728542729239727,-100.507513721430456 28.738002299344281,-100.507590113222051 28.740000380261673,-100.507613000000006 28.740599,-100.507694735304739 28.740708529390524,-100.51442566685138 28.749728313832868,-100.519226000000003 28.756160999999999,-100.533017 28.763279999999998,-100.537772000000004 28.780775999999996,-100.534846642084489 28.786410367511117,-100.532431000000003 28.791062999999998,-100.535830000000004 28.805887999999999,-100.546431879116881 28.824270186264151,-100.546968759195195 28.825201061771438,-100.547323999999989 28.825817,-100.548186025546428 28.826178082695296,-100.553129999999982 28.828249,-100.561442999999997 28.829174000000002,-100.570509999999999 28.826317,-100.574698999999995 28.828786999999998,-100.576846000000003 28.836168000000004,-100.572991999999999 28.848463999999996,-100.580501999999996 28.856007999999999,-100.591040000000007 28.863054000000002,-100.598061272695219 28.874286065303028,-100.598877000000002 28.875590999999996,-100.602654 28.887660000000004,-100.602394435759351 28.893839359355621,-100.602053999999995 28.901944,-100.615584686670886 28.902906942475386,-100.627205999999987 28.903734,-100.631611000000007 28.902838999999997,-100.633502414453218 28.905240591668694,-100.640568000000002 28.914211999999999,-100.639169999999979 28.916288999999999,-100.638857000000002 28.927621999999996,-100.651511999999997 28.943431999999998,-100.64789859018552 28.954344193790252,-100.646992999999995 28.957078999999997,-100.646600907687997 28.967547400926616,-100.64647463428885 28.970918751315974,-100.645893999999998 28.986421,-100.647406325643686 28.99295674936236,-100.647835962928511 28.994813493392339,-100.648681241069511 28.998466493719445,-100.65094599999999 29.008254000000004,-100.653757999999996 29.015356,-100.656109999999998 29.017223999999999,-100.660207999999997 29.031497000000002,-100.663212 29.048041999999995,-100.662508000000003 29.058106999999996,-100.664064999999994 29.073205999999999,-100.666359117032755 29.07896154562156,-100.668483863047285 29.084292168447689,-100.674655999999999 29.099777000000003,-100.684472 29.110657,-100.692326999999992 29.115227999999995,-100.70996599999998 29.119684000000003,-100.727461999999989 29.129122999999996,-100.737795000000006 29.139078999999999,-100.739115999999996 29.141658,-100.737590999999995 29.147406999999998,-100.739681000000004 29.150486000000004,-100.746139999999997 29.154149000000004,-100.752330696165359 29.155516457617566,-100.759726 29.157149999999998,-100.76337082361762 29.160348915845475,-100.772648999999987 29.168492,-100.775904999999995 29.173344,-100.772154104961558 29.17809434863841,-100.766030999999998 29.185848999999997,-100.767059000000003 29.195287,-100.768348510582513 29.197581465531123,-100.775064591152173 29.209531592641572,-100.785521000000003 29.228136999999997,-100.791371999999996 29.225944999999999,-100.795681000000002 29.227729999999998,-100.79704599999998 29.235585999999998,-100.795234211471239 29.241421249558652,-100.795010188783237 29.242142762180318,-100.794911999999997 29.242459,-100.795310930062826 29.24310735172228,-100.797670999999994 29.246943000000002,-100.805332448258866 29.251327106905226,-100.815767091023289 29.257298117587734,-100.823532999999998 29.261742000000002,-100.834039999999987 29.261399999999998,-100.839016 29.263259,-100.841581161127962 29.265429071012271,-100.848663999999999 29.271420999999997,-100.856469000000004 29.275663999999999,-100.864659000000003 29.276076,-100.874739696506666 29.279181633366278,-100.876048999999995 29.279585,-100.876625364221198 29.280115401513385,-100.878513170701353 29.281852663087207,-100.878882999999988 29.282193000000003,-100.879105716359817 29.283377353454046,-100.880504361011205 29.290815018226784,-100.882051999999987 29.299044999999996,-100.886842 29.307848,-100.895590728097048 29.309871687341737,-100.904835000000006 29.31201,-100.906461302333199 29.313095095005444,-100.914770068080642 29.318638836799305,-100.916744062319239 29.319955917421627,-100.92203960930695 29.323489191321695,-100.922232587658954 29.323617949573855,-100.924041970395777 29.324825198761538,-100.926468967605715 29.326444530233299,-100.926628772437255 29.326551154580446,-100.926677999999981 29.326584,-100.92692137104487 29.32669794102517,-100.927819078352698 29.327118228044156,-100.92782883100196 29.32712279402223,-100.930446231588661 29.328348203997709,-100.940614999999994 29.333109,-100.941560773525751 29.336361493535293,-100.943196 29.341985,-100.945807189162338 29.344363370184055,-100.948971999999998 29.347245999999998,-100.95603875001359 29.347290187325033,-100.964324999999988 29.347342,-100.971743000000004 29.351370999999997,-100.972915999999998 29.354545000000005,-100.995606999999993 29.363403000000005,-101.004206999999994 29.364771999999999,-101.010614000000004 29.368669,-101.010768998319776 29.36895846820963,-101.014103165002794 29.375185214807839,-101.024016000000003 29.393697999999997,-101.036603999999997 29.406107999999996,-101.038600000000002 29.410713999999999,-101.037642000000005 29.414681000000002,-101.043363999999997 29.42988,-101.056956999999983 29.440773,-101.06011415724447 29.458454662113137,-101.060150999999991 29.458660999999999,-101.063843258270609 29.460131584976065,-101.087148999999997 29.469414,-101.103699000000006 29.470549999999999,-101.115253999999993 29.468458999999996,-101.130037999999985 29.47842,-101.137502999999995 29.473541999999998,-101.144336999999993 29.473246,-101.151876999999999 29.477004999999998,-101.163854997623304 29.493316894569897,-101.168923969306405 29.50021992913986,-101.171662999999995 29.503950000000003,-101.173821000000004 29.514566000000002,-101.192719999999994 29.520285,-101.227418999999998 29.522349999999996,-101.235274999999987 29.524854,-101.254895000000005 29.520341999999996,-101.260836999999981 29.529933,-101.261174999999994 29.536777,-101.252755240314642 29.553001111955531,-101.244355179006547 29.569187266927752,-101.24384013276574 29.574337712700849,-101.242022713082847 29.59251185083151,-101.251352546644355 29.604174135250076,-101.252152766968493 29.604494220898598,-101.259127443101093 29.607284069726152,-101.265347312053251 29.607284069726152,-101.274677145614746 29.602619152945408,-101.277624046978673 29.599940160672645,-101.283229510623855 29.594844301688571,-101.297224215766221 29.587069435365102,-101.30733154801338 29.587846934050759,-101.312894947857018 29.594028488101586,-101.314328915651188 29.595621785307589,-101.313192213312618 29.602947206633093,-101.31110792457288 29.616379301091623,-101.30733154801338 29.640715970810437,-101.311218981175116 29.64849082206727,-101.316661381574889 29.655488204771718,-101.325213716450733 29.657820655628775,-101.350093282659174 29.654710721152696,-101.353062961800887 29.655502634567405,-101.361755552011104 29.657820655628775,-101.364595571422868 29.66106639883844,-101.367197952410862 29.664040554714198,-101.371300910394638 29.676075888592084,-101.372874548462477 29.680691889931673,-101.378860251896057 29.698249939417508,-101.396947999999995 29.713947,-101.398362000000006 29.717000000000002,-101.396293999999997 29.727055,-101.397008999999997 29.733962999999999,-101.400635999999992 29.738078999999999,-101.410024000000007 29.741498,-101.415583999999996 29.746534,-101.415509877418046 29.750619769974676,-101.415402087456428 29.756561346443686,-101.424731921017937 29.758116313681725,-101.430388403484372 29.756500180308258,-101.441059122217254 29.75345141196761,-101.446501522617027 29.755006409338922,-101.451652003139955 29.758440048234313,-101.453498905321467 29.759671311053037,-101.455223999999987 29.771874,-101.467493655663716 29.779885945414083,-101.475268506920557 29.780663444099741,-101.503223000000006 29.764581999999997,-101.522695143280473 29.759671311053037,-101.526552276219391 29.761451532447605,-101.532802460460985 29.764336242900427,-101.53746737724174 29.782995910023434,-101.53804719015173 29.783865628452077,-101.546797210803248 29.796990645299058,-101.56156944476453 29.794658179375361,-101.572592853930203 29.778735448896484,-101.575564187573463 29.774443514881042,-101.582561562744587 29.771333610538232,-101.598573641854728 29.773657690388074,-101.603680999999995 29.774398999999999,-101.607256216824311 29.773863608191139,-101.625957999999997 29.771063000000002,-101.630319 29.768729,-101.632632680380155 29.763891873249722,-101.63512799999998 29.758675,-101.646417999999997 29.754303999999998,-101.652400999999983 29.758794999999996,-101.65328091488901 29.761368862201802,-101.654578 29.765162999999998,-101.662452999999985 29.77128,-101.689992000000004 29.771212999999996,-101.706636000000003 29.762736999999998,-101.714223999999987 29.767659999999999,-101.735201999999987 29.771591999999998,-101.754322999999999 29.777661999999999,-101.760919284561496 29.782457957985276,-101.763273999999981 29.784169999999996,-101.776796131253491 29.789191504347542,-101.777161000000007 29.789327,-101.777360180704861 29.789301830227139,-101.785668 29.788251999999996,-101.791002820423358 29.783037559970925,-101.796869557069002 29.782618516634159,-101.806507764952315 29.786389987871868,-101.809441149516488 29.790161459109573,-101.813855730843954 29.79253854440006,-101.814888826583982 29.793094827432377,-101.818909248247508 29.792167038125061,-101.830044431332681 29.789597381341238,-101.831231874027822 29.789323356194672,-101.852603555202364 29.801894932400803,-101.862241763085706 29.800218726571018,-101.866487373818487 29.79821962567333,-101.875399999999985 29.794022999999999,-101.878152615094365 29.794637055896249,-101.892739000000006 29.797891,-101.912406000000004 29.797849999999997,-101.917556726002999 29.792675767854249,-101.917942403066036 29.792482929945557,-101.922585359733716 29.790161459109573,-101.929709258872364 29.789323356194672,-101.932572380438657 29.791613852338052,-101.938090312383324 29.796028195755184,-101.946471365894325 29.797704401584976,-101.952535620779244 29.796990962273608,-101.953595265032959 29.796866298670082,-101.959462001678588 29.799380623656123,-101.965427194081556 29.806464275410743,-101.966166845299441 29.8073426094683,-101.970357372054934 29.81027599403247,-101.974547898810414 29.81027599403247,-101.982165144097308 29.804870201524977,-101.987538526473998 29.801056829485908,-101.993568005272067 29.802652866652032,-102.001318622543394 29.804704498914084,-102.001786318660763 29.804828300723614,-102.021918999999997 29.802490999999996,-102.032489182844799 29.803756293694118,-102.034758999999994 29.804027999999999,-102.039012999999997 29.802655,-102.041088000000002 29.799609999999998,-102.038411999999994 29.792831999999997,-102.039226999999997 29.790977000000002,-102.041308736499772 29.78984019520162,-102.048982832584102 29.785649487466547,-102.050044 29.785069999999997,-102.053123037129694 29.785312127485501,-102.073645999999982 29.786926,-102.076299925656656 29.790865308882584,-102.077348 29.792421,-102.084438999999989 29.794962000000002,-102.091420021879856 29.792967151942147,-102.091815999999994 29.792853999999995,-102.098789196918744 29.792718427915432,-102.115682000000007 29.792389999999997,-102.142325999999997 29.802854,-102.159600999999995 29.814355999999997,-102.161673999999991 29.819486999999999,-102.181894 29.846033999999996,-102.182859740836193 29.846584944255238,-102.18326563789924 29.846816503951921,-102.184058205433814 29.847268654791659,-102.186149999999998 29.848461999999998,-102.187393471220204 29.848699156882201,-102.188384798592551 29.848888224473839,-102.188671999999997 29.848942999999998,-102.189026115519184 29.848805138880103,-102.189342793483831 29.848681852617602,-102.205381000000003 29.842438,-102.216284162639099 29.842976962035557,-102.227553 29.843533999999995,-102.261388999999994 29.853283,-102.264041000000006 29.855964,-102.261776999999995 29.864001999999999,-102.264954000000003 29.867805999999998,-102.268816999999984 29.867990999999996,-102.276754999999994 29.862977999999998,-102.281249000000003 29.863116999999999,-102.297330999999986 29.875194,-102.301381000000006 29.877673999999995,-102.315388999999996 29.879919999999998,-102.320618999999994 29.878979999999995,-102.320667125014978 29.878900015386019,-102.320698585434869 29.878847727619664,-102.324634000000003 29.872306999999996,-102.333383999999995 29.868046,-102.341032999999996 29.869305000000004,-102.349861000000004 29.862316999999997,-102.361383773688715 29.849029038788231,-102.364542 29.845386999999995,-102.363642671554629 29.839963091609825,-102.362514000000004 29.833155999999995,-102.369522000000003 29.820395,-102.377253999999994 29.800163,-102.377312999999987 29.789971,-102.385270832882995 29.770348713937391,-102.386677616883858 29.766879890389689,-102.391739211722737 29.765814289574276,-102.392906191083 29.765568609270456,-102.402175111261812 29.766775086101941,-102.412062000000006 29.768061999999997,-102.433301 29.776608,-102.460890018677347 29.77909171043791,-102.468946430597143 29.779816991558327,-102.469957868267898 29.780012383523857,-102.481595292961757 29.782260529257879,-102.490330613701886 29.783948039559665,-102.492674483475767 29.783853017496881,-102.508312776666344 29.783219030534834,-102.508509848222559 29.783087649355906,-102.512686811979108 29.780303003853621,-102.512942156326147 29.774953626291172,-102.513380999999995 29.76576,-102.526400256170959 29.758693706517125,-102.535832205630967 29.753574449155192,-102.539417050278132 29.751628749336795,-102.545492105079163 29.750899740311965,-102.551081152293932 29.752357753652575,-102.556670813570321 29.757783010503054,-102.559343229460382 29.760376824671383,-102.565661280990938 29.761591836573395,-102.572255912443325 29.757095496286663,-102.57574472309652 29.754716761401177,-102.57635337725236 29.754301769870359,-102.585948674897452 29.751239442391949,-102.587774480184081 29.750656738873374,-102.597160000000002 29.751608,-102.612879000000007 29.748181999999996,-102.622534000000002 29.736632,-102.630150999999984 29.734314999999999,-102.64566499999998 29.733910000000002,-102.661251958261417 29.736122779697027,-102.66726872436665 29.739732837494621,-102.670971460158171 29.741954477821469,-102.677191937153026 29.738261067251376,-102.678467215476147 29.736427653943998,-102.6852530581628 29.72667193704833,-102.688163999999986 29.722486999999997,-102.690237999999979 29.707481999999999,-102.695507594622001 29.699754690880447,-102.698346999999984 29.695590999999997,-102.699316999999994 29.685029,-102.693466 29.676507,-102.697798916570122 29.672550546488289,-102.711337549653422 29.6601882100483,-102.724231000000003 29.648415000000004,-102.736947999999984 29.641537999999997,-102.742030999999997 29.632142000000002,-102.74048425929719 29.62775763619268,-102.738427999999999 29.621928999999998,-102.739991000000003 29.599041,-102.746201999999997 29.592875000000003,-102.757065999999995 29.597798999999998,-102.761810999999994 29.598396999999999,-102.768340999999992 29.594733999999999,-102.766929734823805 29.591197739636346,-102.762241000000003 29.579448999999997,-102.766124000000005 29.572347999999998,-102.768792219428661 29.572598581791439,-102.773961 29.573084,-102.776343296957975 29.562015327831393,-102.777530999999996 29.556497,-102.77572499999998 29.552188999999995,-102.771428999999998 29.548545999999998,-102.79216136048494 29.533953841063816,-102.807296321997939 29.523301326891541,-102.808565712504773 29.522407885546979,-102.808691999999979 29.522319000000003,-102.808681334358837 29.522097795383676,-102.808577631171161 29.519946998869006,-102.807327 29.494009000000002,-102.813953999999995 29.482805999999997,-102.814096473430837 29.482483316434472,-102.814383778328263 29.481832608662831,-102.822314986984821 29.463869465126457,-102.82537225240516 29.456945161410285,-102.827007089548758 29.453242470491304,-102.830969999999979 29.444267,-102.832538999999997 29.433109000000002,-102.830570753051859 29.427471931628293,-102.827354999999983 29.418261999999995,-102.825211066354328 29.40389180477127,-102.824564449740322 29.399557712155943,-102.831802092379931 29.389471209449322,-102.832669213065941 29.388262775214326,-102.84047188579207 29.377388836904565,-102.840778422425643 29.376961642203423,-102.841560439245441 29.370344567434586,-102.842457529677418 29.362753791491347,-102.843015380341285 29.358033509958585,-102.843020777220957 29.357987843989019,-102.861629999999991 29.351638999999995,-102.871857000000006 29.352092999999996,-102.876866000000007 29.354058999999996,-102.879534000000007 29.353326999999997,-102.883721999999992 29.348058999999999,-102.881857488401977 29.34363024944906,-102.879805000000005 29.338754999999999,-102.890489000000002 29.309498999999995,-102.88922161316745 29.299205074185686,-102.888328 29.291947,-102.891022000000007 29.287113000000002,-102.902604999999994 29.279440999999998,-102.90311226801488 29.27677066200776,-102.906295999999998 29.260010999999995,-102.903188999999983 29.254028999999999,-102.887901999999997 29.245611999999998,-102.881135 29.246022,-102.871347 29.241624999999999,-102.870795537867835 29.239589944231255,-102.86823682221636 29.230147538772215,-102.866845999999995 29.225014999999999,-102.878020000000006 29.214697999999999,-102.890063999999995 29.208813999999997,-102.899231 29.208863,-102.908656596973657 29.219194069767902,-102.908787000000004 29.219336999999996,-102.909098471667448 29.219296482603067,-102.910575587951939 29.219104333804097,-102.912131000000002 29.218902,-102.912650757516516 29.218481184275788,-102.915803535402844 29.215928573746115,-102.915865999999994 29.215877999999996,-102.915845750043147 29.215583596781208,-102.915608148145267 29.212129230727648,-102.915554 29.211341999999998,-102.915202931298523 29.21076702044931,-102.914525807203304 29.209658028088604,-102.912447999999998 29.206254999999999,-102.91453363655873 29.20019781620671,-102.917367531146525 29.191967513425833,-102.917805 29.190697,-102.922897000000006 29.192704085059273,-102.925481999999988 29.193722999999995,-102.932612000000006 29.194113000000005,-102.944911000000005 29.188819999999996,-102.947155999999993 29.180776999999999,-102.95089 29.176834999999997,-102.953474999999997 29.176307999999995,-102.977266 29.186226,-102.981742305424802 29.185103060319207,-102.989431999999994 29.183174,-102.98978258837333 29.182935350109393,-102.991725524817895 29.181612768970929,-102.994653 29.17962,-102.994906329461855 29.17910907354543,-102.99809599999999 29.172675999999996,-102.995688 29.161218999999999,-103.00243399999998 29.150260999999997,-103.0050672680876 29.149386797638936,-103.008362000000005 29.148292999999995,-103.010324999999995 29.137821999999996,-103.015028 29.125769999999996,-103.016945338084582 29.124525732477775,-103.024896087692937 29.119366048020158,-103.032982999999987 29.114118,-103.033302941039096 29.107355634443419,-103.034095953658579 29.105913798143234,-103.035682683422891 29.103028844591982,-103.04044215980575 29.099351067768175,-103.049126083320303 29.097714968852063,-103.055369601981923 29.096538655622457,-103.061557539334615 29.093936906572154,-103.06671291432167 29.091769303506382,-103.074407490743866 29.088534080562461,-103.076354546596249 29.085721668416742,-103.076667707631657 29.079576983004682,-103.076847 29.076059,-103.091926967746744 29.064237268591206,-103.100265999999991 29.057699999999997,-103.101359249603803 29.049403674773888,-103.102531654124817 29.040506667933872,-103.100975335951205 29.030701853789079,-103.100368259199087 29.026877266486249,-103.101607999999999 29.018122999999999,-103.107810999999998 29.013812,-103.117237999999986 29.000208999999998,-103.113922000000002 28.988546999999997,-103.115062910480361 28.985887850893185,-103.115327999999991 28.98527,-103.115773294260094 28.985147329619764,-103.126748000000006 28.982123999999995,-103.134930999999995 28.983525,-103.143274000000005 28.978073999999999,-103.156645999999995 28.972830999999999,-103.163865 28.972099,-103.165923000000006 28.974001999999999,-103.166234999999986 28.978836000000005,-103.174329720990258 28.980505274886987,-103.182663652045193 28.982223879127538,-103.194928465619142 28.984753100989199,-103.195705106971403 28.984913258196226,-103.207825367468075 28.987412670652219,-103.227338454203803 28.991436614861634,-103.227579101883322 28.991486240676846,-103.227800999999999 28.991532000000003,-103.228011662384262 28.991347921912006,-103.228737472224623 28.990713704806197,-103.239108999999985 28.981650999999996,-103.245121150470112 28.980239630911282,-103.2474464632202 28.980649978816817,-103.249155161185584 28.980951512720708,-103.25190330878641 28.984768118238364,-103.253285000000005 28.986686999999996,-103.26030800838916 28.989731411362609,-103.266003072061508 28.990206003834011,-103.270357000000004 28.988113999999996,-103.270725571428585 28.987466542857135,-103.27232562100086 28.984655789108508,-103.273357000000004 28.982844,-103.273647076585334 28.982817854078331,-103.281189929980513 28.982137982403092,-103.282424051550748 28.983865752282551,-103.284749352823042 28.987121173462914,-103.285935817906974 28.994002716014545,-103.289257951411443 28.999697788883793,-103.296614077237592 29.004443676810233,-103.302399476821606 29.006455988366771,-103.312987409437454 29.010138745081029,-103.315449022736544 29.011725838031147,-103.323993942362023 29.017235063099889,-103.331021803791103 29.021766184756,-103.332920159881368 29.026986669752301,-103.332783823258595 29.028827200289001,-103.332445567409962 29.033393619832523,-103.334818511373186 29.039800579109659,-103.341462759988346 29.041224342728523,-103.347869719265475 29.037427630547988,-103.350815999999995 29.028566999999999,-103.355428000000003 29.021529,-103.355590463621823 29.021464336016578,-103.361777791205157 29.019001647792766,-103.361998 29.018913999999999,-103.382125000000002 29.024248999999998,-103.386095607142025 29.025822707722725,-103.399799910010643 29.031254261761571,-103.402689272115182 29.032399429564627,-103.427474921518822 29.04222295692054,-103.427754276336316 29.042333676218103,-103.430481680804888 29.047455485683194,-103.434668000000002 29.055316999999995,-103.439550459717495 29.058547821156772,-103.449722032594721 29.065278554178825,-103.453029264571228 29.067467015663059,-103.457386392383299 29.068596640465525,-103.460381908910477 29.067681344107211,-103.463195887793432 29.066821517562918,-103.469166763983068 29.069242141692889,-103.471264639062966 29.073115142802621,-103.471299587628792 29.074897490538035,-103.471426016715213 29.08134526859719,-103.474814887995407 29.086670637304994,-103.484429000000006 29.094524,-103.49531945696836 29.1087608679228,-103.500928937954981 29.116094025764934,-103.503236 29.119109999999996,-103.506163032831353 29.119368513261239,-103.513192088151087 29.119989313955617,-103.524613000000002 29.120998,-103.524225442342612 29.124905426308125,-103.523383999999993 29.133389,-103.525026999999994 29.137353999999998,-103.539240927934515 29.144791265038371,-103.551909954693073 29.151420179312847,-103.558678999999984 29.154961999999998,-103.579462000000007 29.149964999999998,-103.592359999999999 29.150259999999999,-103.598960126757959 29.155019048637598,-103.606437999999997 29.160411,-103.607894091053709 29.162314354517299,-103.610539999999986 29.165772999999998,-103.624537921955991 29.163185608071569,-103.629433693714475 29.1622806680118,-103.638195234739996 29.160661174732635,-103.645634999999999 29.159286000000002,-103.653180000000006 29.162863999999995,-103.656807999999984 29.169098999999999,-103.660202999999996 29.170933999999999,-103.667724667668963 29.172878689431396,-103.669696386484915 29.173388467437,-103.688670000000002 29.178293999999998,-103.688830238367032 29.178273608722382,-103.690116124218548 29.178109972160996,-103.697314000000006 29.177194,-103.699305464408098 29.178139630948273,-103.713769999999997 29.185008,-103.724743000000004 29.191469999999999,-103.73193762439729 29.198544108660482,-103.742175000000003 29.20861,-103.750912464183997 29.219357091602017,-103.755265634411842 29.22471149629115,-103.75594348727293 29.225545256136954,-103.768569999999997 29.227360999999995,-103.777623396259372 29.232265264832392,-103.780085146052983 29.242351446713872,-103.780352362214714 29.243446273985068,-103.781659908552058 29.248803500057083,-103.789034484601103 29.257501704713096,-103.792700821322356 29.259284649416337,-103.795120675584712 29.260461427946989,-103.80876361213285 29.267096007175422,-103.816641821688407 29.27092719156084,-103.818617217853202 29.271599921312173,-103.838302999999982 29.278303999999999,-103.854966933859771 29.281484400071786,-103.856892999999999 29.281852,-103.880606 29.284961999999997,-103.896615144488038 29.284634799403065,-103.910231251371073 29.284356508561018,-103.916269383748329 29.284233099060927,-103.91710599999999 29.284215999999997,-103.91776286712728 29.284516760669142,-103.918698764585329 29.284945281345607,-103.918909999999997 29.285042,-103.918905327188597 29.285488562070029,-103.918900778480648 29.285923264066316,-103.918857000000003 29.290106999999995,-103.924975999999987 29.293913000000003,-103.943697999999983 29.294945999999996,-103.965795999999983 29.298586999999998,-103.975234999999998 29.296016999999999,-103.983459597310627 29.299165977024781,-103.998789342279238 29.305035323921498,-104.012357062242771 29.310230038851625,-104.018558084893087 29.312604243583909,-104.038281999999995 29.320155999999997,-104.047006656168747 29.325575022319434,-104.055595999999994 29.330909999999996,-104.056467149578211 29.334496091467582,-104.057243999999997 29.337694000000003,-104.068917843404819 29.342306667996301,-104.075923999999986 29.345075,-104.082149999999999 29.345922999999996,-104.091021999999995 29.353691999999995,-104.093326000000005 29.359926000000002,-104.098377999999983 29.366755999999999,-104.106466999999981 29.373127,-104.122882935723638 29.379859019095424,-104.125474999999994 29.380922000000002,-104.132831527553293 29.381873417846823,-104.136236243923818 29.382313748953422,-104.143691999999987 29.383277999999997,-104.1467332019064 29.385415391432094,-104.148888696362661 29.386930297552944,-104.151718842950046 29.388919356896473,-104.157422367906094 29.392927859373117,-104.166562999999996 29.399352,-104.180069999999986 29.412763999999999,-104.181273000000004 29.426265,-104.182051945448123 29.427144615030393,-104.195989999999995 29.442884000000003,-104.208194000000006 29.448201,-104.212529153241931 29.452438774515159,-104.213947876032222 29.456222068892099,-104.21370324326665 29.462011765001886,-104.213238514637069 29.473010445135856,-104.218538498245692 29.476600759818915,-104.220568643482977 29.477976020723915,-104.227547514371139 29.480496161448666,-104.229081071868791 29.481049944541308,-104.233824999999996 29.486544999999996,-104.233486999999997 29.492733999999995,-104.235847000000007 29.496744,-104.238313284768751 29.498023301020304,-104.246870092866089 29.50246185307569,-104.254473621536903 29.506405923975272,-104.260293266516271 29.50942466611497,-104.26168489846043 29.511073814728768,-104.264155000000002 29.514001,-104.271046277211582 29.51559593462645,-104.274575430964404 29.516412730896519,-104.293481117436073 29.520788310787555,-104.306646311930564 29.523835296697214,-104.308812834933008 29.524336722260216,-104.311570786550874 29.52540915148019,-104.318073989469781 29.527937921306467,-104.320711000000003 29.526326414398167,-104.326090351466348 29.523039031981277,-104.327483437129615 29.522187701603762,-104.334811000000002 29.519462999999998,-104.338113000000007 29.519967,-104.353150868059984 29.530471948300562,-104.369085650105362 29.541603450512167,-104.37074044290263 29.542759433043344,-104.371174999999994 29.543062999999997,-104.371454921502831 29.543072731712495,-104.371996954766473 29.543091575966443,-104.375901661123379 29.543227326450971,-104.381040999999996 29.543405999999997,-104.394588999999982 29.556087000000002,-104.394583075653415 29.556197720561212,-104.394577025204526 29.556310797858156,-104.394552364240909 29.55677168847231,-104.394503136758885 29.55769170460702,-104.394351 29.560534999999998,-104.39571704642303 29.563607040276512,-104.39636925661604 29.56507376640522,-104.397848504811165 29.56840038104859,-104.399550133070164 29.572227096202102,-104.399591 29.572319,-104.399981791506633 29.572551361916329,-104.452301000000006 29.60366,-104.466520000000003 29.609296,-104.483502 29.627740999999997,-104.486693164979016 29.629712817604439,-104.493658999999994 29.634016999999997,-104.503232654335022 29.63787621670291,-104.507568060311556 29.63962385355849,-104.51068846437596 29.64315687341222,-104.513969549435132 29.646871821353749,-104.51818442992635 29.651644041921735,-104.53325150001281 29.668703453669117,-104.535568725458901 29.671327089370656,-104.539761023554547 29.676073741438437,-104.540155514025756 29.678572204873163,-104.540559188867974 29.681128836544634,-104.537934834631798 29.684482179324355,-104.535770155740693 29.687248158943191,-104.536302269386866 29.690440851131939,-104.537991394981006 29.693268523024599,-104.544269904764263 29.703779029587054,-104.545505621253113 29.70584767433138,-104.552240999999995 29.717122999999997,-104.555600999999996 29.731220999999998,-104.554914970831931 29.738152096413199,-104.554660236582549 29.740725729903364,-104.557361904757329 29.745049367744027,-104.565950999999998 29.758794999999996,-104.565687999999994 29.770461999999998,-104.571279565966023 29.778773775962186,-104.586447318468245 29.801320404476364,-104.592472 29.810276000000002,-104.594023000000007 29.809220999999997,-104.599148999999997 29.811007,-104.610166000000007 29.819117999999996,-104.610205623651026 29.819231101342197,-104.610356932717465 29.819662996386217,-104.613081011852316 29.827438579869643,-104.615248982559379 29.833626813172685,-104.619039 29.844444999999997,-104.624350000000007 29.845221999999996,-104.629290740007292 29.852171499068138,-104.629713747950376 29.852766489555783,-104.630103000000005 29.853313999999997,-104.630111961493199 29.853664893019587,-104.630290851730521 29.860669455113747,-104.630338938536084 29.862552324858758,-104.630359999999996 29.863376999999996,-104.630588419131911 29.86393398222631,-104.633274999999998 29.870484999999999,-104.63616345635748 29.872800876528242,-104.645854762904364 29.880571071602066,-104.65678299999999 29.889332999999997,-104.658422170930251 29.891285606400047,-104.65864999999998 29.891556999999999,-104.658665881124946 29.891956296855856,-104.659041999999999 29.901413000000002,-104.661965712024596 29.903547518850328,-104.666224133352003 29.906656470935726,-104.672326999999996 29.911111999999996,-104.679772 29.924658999999998,-104.680850906343153 29.932111041680564,-104.684321999999995 29.956085999999999,-104.679660999999982 29.975271999999997,-104.680379178583593 29.977083,-104.685479 29.989943,-104.689640999999995 30.014949999999999,-104.693591999999995 30.019077000000003,-104.701242868742796 30.021046973658397,-104.702310999999995 30.021321999999998,-104.702447580064685 30.021555813412469,-104.7030116881661 30.022521518330599,-104.703997999999999 30.02421,-104.703882705803636 30.024660825787098,-104.703121214098445 30.027638426639932,-104.701101999999992 30.035533999999998,-104.706873999999999 30.050685,-104.706630611705322 30.051708605996314,-104.703831250551389 30.063481739403372,-104.703581999999997 30.06453,-104.699792220462342 30.065066336345112,-104.698848962238912 30.065199827927678,-104.698233000000002 30.065286999999998,-104.697787990647399 30.065651654776563,-104.69277799999999 30.069756999999996,-104.687313590037505 30.080921966773531,-104.685080632167896 30.08548438075637,-104.685002999999995 30.085643,-104.685554782105299 30.093963293324606,-104.685687 30.095957000000002,-104.686861171517634 30.098036494960315,-104.692093999999983 30.107303999999996,-104.693655813605488 30.119154117533654,-104.695366000000007 30.13213,-104.692122999999995 30.138662999999998,-104.690080458880587 30.149079251722458,-104.687506999999997 30.162202999999998,-104.687296000000003 30.179464000000003,-104.702787999999998 30.211735999999995,-104.707897632633845 30.218501061672534,-104.711235999999985 30.222920999999999,-104.713166 30.237956999999998,-104.722357186598074 30.248308653999679,-104.724410584274111 30.250621311025988,-104.72532436157617 30.251650460675243,-104.73347160041142 30.260826359409911,-104.733822000000004 30.261220999999999,-104.734059376092361 30.261231667834558,-104.737359999999995 30.261379999999996,-104.740448 30.259454000000002,-104.749663999999996 30.26126,-104.751566999999994 30.263643999999999,-104.754655151309422 30.272796681105522,-104.757893999999993 30.282395999999999,-104.761634 30.301147999999998,-104.779356000000007 30.313188,-104.790279572675416 30.323632238875831,-104.797291 30.330335999999999,-104.809794338457337 30.334925849121163,-104.810755485390246 30.338091979227556,-104.81211787963197 30.342579864771171,-104.813478341684558 30.347061385458392,-104.814379749150064 30.356375955470707,-104.814778573671205 30.360497153782266,-104.817595751374526 30.365914799658352,-104.824313633436745 30.370465624210016,-104.837492999999995 30.373909,-104.849824017938076 30.383147747051474,-104.859521 30.390413000000002,-104.857439999999997 30.408957,-104.852419999999995 30.418792,-104.861074000000002 30.428896999999996,-104.86474141169117 30.441297336779865,-104.865463293164552 30.443738179024677,-104.868454614768496 30.453852504447951,-104.869872 30.458644999999997,-104.86871099999999 30.463229999999996,-104.866118999999983 30.46479,-104.866094000000004 30.467379999999999,-104.870137228360662 30.483875070981508,-104.873288503237063 30.496731258693877,-104.873335488188886 30.496922942181985,-104.876786999999979 30.511004000000003,-104.878566789651714 30.514416830422793,-104.880108146577356 30.517372454871531,-104.88208573587417 30.521164575423189,-104.889375999999999 30.535143999999995,-104.890392881954469 30.540947215529823,-104.892228000000003 30.551419999999997,-104.895440150997459 30.560421421221292,-104.899000999999998 30.570399999999996,-104.909330873116318 30.584188648619556,-104.909747767935556 30.584745133303247,-104.918689620637082 30.596681007395873,-104.924796 30.604831999999998,-104.927016167130404 30.604700501077968,-104.934922481779466 30.604232215677584,-104.939873000000006 30.603939,-104.953391370086464 30.606003357240429,-104.967167000000003 30.608106999999997,-104.971627504383378 30.61006529240159,-104.972071 30.61026,-104.972794851616513 30.611297344530712,-104.980135850742045 30.621817657146149,-104.980290999999994 30.622039999999995,-104.982191641583043 30.62882153037463,-104.983981 30.635206,-104.985513855292751 30.652294791670293,-104.9863 30.661059000000002,-105.001239999999996 30.672583000000003,-105.002056999999994 30.680971999999997,-105.006614566555172 30.685839873047019,-105.006800999999996 30.686039,-105.007528432885024 30.6859080282745,-105.007959930235828 30.685830338698263,-105.020141999999993 30.683637,-105.035888798004834 30.686138071331488,-105.042930223005172 30.687256464175281,-105.044973600167665 30.685364445024991,-105.049769587265445 30.680923708581364,-105.049884734287517 30.6808170907847,-105.050688284649809 30.681171184306308,-105.054688384336032 30.682933873306403,-105.062333999999993 30.686302999999995,-105.062477471553692 30.692159292631892,-105.062625999999995 30.698222,-105.084504902225902 30.710918832086001,-105.098281999999998 30.718914000000002,-105.108075999999997 30.730049999999995,-105.110705999999993 30.737749999999995,-105.110681999999983 30.743366000000002,-105.113815999999986 30.746001,-105.119547104826722 30.748125675649064,-105.123265000000004 30.749504000000005,-105.140207000000004 30.752502,-105.152361999999982 30.751451999999997,-105.157640215066564 30.754007791997694,-105.16015278062757 30.757058756266805,-105.160271207191187 30.758203550015399,-105.161229588477383 30.767467931854636,-105.164076390339474 30.771453450048199,-105.164818961888187 30.77249304906519,-105.164868027003308 30.772491740665838,-105.170370203038615 30.772345016388588,-105.178279098267282 30.772134113115257,-105.183436 30.776644999999995,-105.185930999999997 30.784391999999997,-105.195143999999999 30.792138,-105.195988495740664 30.791702299374609,-105.203522176185984 30.787815448176353,-105.206160999999994 30.786453999999996,-105.212916518294108 30.785414778041517,-105.215967484302155 30.786491589369188,-105.216685356202021 30.789542555377231,-105.215888956387687 30.792967070566242,-105.214890669496626 30.797259699168034,-105.218659510882389 30.801566944478708,-105.222008841883465 30.801829013843189,-105.231580057313238 30.802577916338681,-105.238364256021057 30.803108747911697,-105.249792715464977 30.799033957074698,-105.255416052233826 30.797028969328842,-105.261224946310648 30.798054073736733,-105.261360733612406 30.798078036329223,-105.27276013440985 30.808707209360072,-105.27887297001547 30.814407016614517,-105.283004544196217 30.818259431108679,-105.287237620233441 30.822206489243744,-105.289317685342255 30.822206489243744,-105.295630129130572 30.822206489243744,-105.300778681061615 30.818848737795758,-105.303672944509898 30.816961174571279,-105.314862960890409 30.816961174571279,-105.316949659843416 30.82296045428,-105.31766045482081 30.825003996727105,-105.320108268786385 30.827451797139727,-105.322675464925993 30.828439452154051,-105.330102631610075 30.831296841312803,-105.347695000000002 30.838065,-105.353219571709047 30.842032277683753,-105.358103536812379 30.84553952616983,-105.359771122039604 30.846737044096301,-105.360672052753856 30.84738401593513,-105.36720323988537 30.847875849249167,-105.377416999999994 30.848644999999998,-105.387780492422849 30.851314552204784,-105.394242074789418 30.852979003795937,-105.396689881978517 30.855426817761515,-105.396237319899697 30.858492407966825,-105.394628539050657 30.86939005724841,-105.394248999999988 30.871960999999999,-105.395681745186749 30.87649980844607,-105.399608999999998 30.888940999999996,-105.399828021807267 30.889112280223049,-105.402824820246408 30.891455847338634,-105.413505 30.899808,-105.430088999999995 30.905791999999998,-105.44547819369545 30.915748838601054,-105.448693870984556 30.917829388134351,-105.452149246331331 30.920065022782566,-105.4597280766598 30.924968540917344,-105.469954295993247 30.931584924947412,-105.472488639470896 30.933224650164071,-105.476269681741059 30.935670991952524,-105.488027000000002 30.943277999999999,-105.495516502166126 30.9493992090351,-105.4968561000139 30.950494069316512,-105.497422439936116 30.953962910943051,-105.497963910074574 30.957279424722472,-105.502256687477072 30.962680017552614,-105.507558525965123 30.966493977230062,-105.533087999999992 30.984859,-105.541468808393844 30.984769556162778,-105.543675999999991 30.984745999999998,-105.557430349577899 30.990228688381027,-105.570063935625512 31.008532833135739,-105.575218046011173 31.016000355201566,-105.578084306850855 31.020153131231776,-105.578407858220658 31.020621907958049,-105.57911399999999 31.021644999999999,-105.580554486932016 31.024917232759986,-105.581339666024604 31.026700857930102,-105.581404000000006 31.026847000000004,-105.581361569643192 31.027041810483581,-105.581235244876609 31.027621805343596,-105.579823718925667 31.034102543987302,-105.579541999999989 31.035395999999995,-105.579765234089464 31.036249085539566,-105.579847333127134 31.036562825712579,-105.585323000000002 31.057487999999996,-105.592709163135751 31.0626132919136,-105.595921000000004 31.064841999999999,-105.598772999999994 31.074925999999998,-105.60333 31.082624999999997,-105.627348999999995 31.098545,-105.641890000000004 31.098321999999996,-105.646730999999988 31.113907999999999,-105.647031366805422 31.114192798578223,-105.648833999999994 31.115902000000002,-105.662869191777489 31.12063916934996,-105.673930643060629 31.124372639388369,-105.709491 31.136374999999997,-105.717005999999998 31.141438,-105.717653520299876 31.143411480377267,-105.719539999999995 31.149160999999996,-105.742677999999998 31.164897,-105.763531 31.164121000000005,-105.773256999999987 31.166896999999999,-105.774148788612138 31.168976038235485,-105.780021000000005 31.182666,-105.779878030009812 31.18682806893737,-105.779724999999999 31.191282999999995,-105.782894999999996 31.197562999999999,-105.790659746923424 31.200723362140888,-105.794386000000003 31.20224,-105.818835000000007 31.230680999999997,-105.825806058218902 31.23733997673531,-105.835722000000004 31.246811999999995,-105.851073632158958 31.265902599748792,-105.86604427072389 31.284519412988434,-105.869353000000004 31.288633999999998,-105.869862116496506 31.288859823963843,-105.876014999999981 31.291588999999995,-105.890871999999987 31.290013999999996,-105.895034999999993 31.290977999999999,-105.903460999999993 31.306768999999999,-105.908770999999987 31.312773999999997,-105.914613899052299 31.312859252963214,-105.93196564998388 31.313112430054005,-105.932552999999999 31.313120999999995,-105.933375187723101 31.313903465142818,-105.938451999999984 31.318735,-105.948091000000005 31.340069,-105.945903 31.352809999999998,-105.953942999999995 31.364749,-105.970101 31.365936999999995,-105.997579969562565 31.386863626037869,-106.00418474278807 31.391893495117941,-106.004925999999998 31.392457999999998,-106.006143777923754 31.392558937255828,-106.022866323827969 31.393945009265412,-106.080091217088636 31.398688175961098,-106.080258 31.398702,-106.080335505244278 31.398768097394733,-106.096409750603954 31.412476405141465,-106.100621535494 31.416068265421309,-106.102641400977276 31.417790830744398,-106.10264993125142 31.41779810546371,-106.106876999999997 31.421403000000005,-106.112168999999994 31.423577999999996,-106.132782000000006 31.425367000000005,-106.143572676566535 31.431101721097118,-106.158218000000005 31.438885000000003,-106.175305198785026 31.455910533348611,-106.175674999999998 31.456278999999995,-106.17677981450808 31.456634312625521,-106.182946895641223 31.45861766980741,-106.20560859826729 31.465905761156737,-106.205826999999999 31.465975999999998,-106.205998876707866 31.466165148890862,-106.212686244283063 31.473524541419071,-106.218538531147885 31.479964934554566,-106.218843000000007 31.480299999999996,-106.218893022078106 31.480498686193428,-106.223908999999992 31.500422,-106.236804000000006 31.513376,-106.242649095206133 31.530650094003715,-106.245874455325477 31.540182047193959,-106.246202999999994 31.541153,-106.246406806009631 31.541315626597875,-106.254779999999997 31.547997000000002,-106.280345588488331 31.561810530102129,-106.280548572587122 31.561920205925162,-106.280811 31.562061999999997,-106.287785 31.584444999999999,-106.292254713772053 31.594651759250389,-106.295141086978958 31.601242900860864,-106.303535999999994 31.620412999999996,-106.308594276522342 31.627497440426588,-106.330970256390501 31.658836434185069,-106.33473699999999 31.664111999999999,-106.338265602146336 31.671883697950737,-106.346992532059133 31.691104641686092,-106.349537999999995 31.696711,-106.357472918704602 31.702103016258707,-106.368303742040567 31.709462886938788,-106.370138999999995 31.710709999999999,-106.373839000000004 31.714809999999996,-106.378039 31.72831,-106.381039 31.732109999999999,-106.38595139194058 31.734759025425479,-106.394642915450532 31.739445961452269,-106.404086535473255 31.744538468290354,-106.417940000000002 31.752009,-106.421739999999616 31.752623660686648,-106.431540999999996 31.754208999999996,-106.434644983693715 31.755853956158482,-106.444263765046571 31.76095142933643,-106.451540999999992 31.764807999999999,-106.467641999999998 31.759607999999997,-106.470742 31.753508,-106.472156160715315 31.752506597443457,-106.47367184987327 31.751433300058491,-106.475016438009845 31.750481163584279,-106.475542000000004 31.750108999999998,-106.48261401078824 31.748321568701869,-106.484641999999994 31.747809000000004,-106.486162292248409 31.747994847970777,-106.488078402545341 31.748229082678503,-106.489542 31.748407999999998,-106.507341999999994 31.761208,-106.509102011460428 31.762827435120251,-106.511609062807707 31.765134242258316,-106.523643000000007 31.776206999999996,-106.528643000000002 31.781807,-106.528542999999999 31.783906999999996,-106.528542999999999 31.784407000000002,-106.527996999999999 31.786944999999999,-106.527623000000006 31.789119000000003,-106.527737999999985 31.789760999999995,-106.527942999999993 31.790507000000002,-106.530514999999994 31.792103,-106.532480000000007 31.791913999999998,-106.533 31.791829,-106.533043000000006 31.791906999999995,-106.534743000000006 31.796106999999999,-106.535154000000006 31.797088999999996,-106.535342999999997 31.797507,-106.535842999999986 31.798607,-106.542096999999998 31.802145999999997,-106.542143999999993 31.802106999999996,-106.544713999999999 31.804286999999999,-106.545344 31.805007,-106.546561898485905 31.806561850400339,-106.546615562760394 31.806630361790774,-106.547143999999989 31.807304999999996,-106.551861034152338 31.808599471053657,-106.558443999999994 31.810406,-106.560680020141419 31.810752754512048,-106.560847305685968 31.810778696593822,-106.562944999999999 31.811104,-106.56344399999999 31.812605999999995,-106.566844000000003 31.813305999999997,-106.569123704016391 31.811582321353455,-106.570943999999997 31.810205999999997,-106.577243999999993 31.810406,-106.581344 31.813905999999996,-106.582144 31.815505999999999,-106.588044999999994 31.822105999999998,-106.589044999999984 31.822705999999997,-106.593826000000007 31.824901,-106.602727000000002 31.825023999999996,-106.605266999999998 31.827911999999998,-106.603310537982878 31.834798487166189,-106.601945 31.839604999999999,-106.60204499999999 31.844404999999998,-106.605244999999982 31.845904999999998,-106.605845000000002 31.846304999999997,-106.614637000000002 31.846489999999996,-106.621857000000006 31.852854,-106.625763000000006 31.856276,-106.627808000000002 31.860592999999998,-106.629708357956787 31.861913746439043,-106.635925999999998 31.866235,-106.635879999999986 31.871514,-106.634872999999999 31.874477999999996,-106.630798999999996 31.879696999999997,-106.629271361585637 31.8835303997664,-106.629197000000005 31.883717000000004,-106.629948941610351 31.885072003811555,-106.630443527558498 31.88596325099838,-106.630530381920593 31.886119763139838,-106.630691999999982 31.886410999999999,-106.633926999999986 31.889183999999997,-106.635073463799642 31.889856364267651,-106.636317332120683 31.890585853164694,-106.638154 31.891662999999998,-106.638364165758659 31.89171923904625,-106.642899999999983 31.892932999999999,-106.645296000000002 31.894859,-106.645645999999999 31.895648999999995,-106.645478999999995 31.898669999999999,-106.640839999999997 31.904598,-106.63512839833713 31.908732779117901,-106.633668 31.90979,-106.633408736085542 31.909871832166754,-106.625946999999996 31.912227,-106.62344499999999 31.914034,-106.618336531290581 31.916262323146238,-106.614677480394235 31.917858407661853,-106.614345999999998 31.918002999999995,-106.611846 31.920003,-106.616063629645311 31.921863544491501,-106.623932999999994 31.925334999999997,-106.624022586877501 31.92530240401349,-106.628663000000003 31.923614,-106.629746999999995 31.926570000000002,-106.625321999999983 31.930053000000004,-106.622529 31.934863000000004,-106.622117000000003 31.936620999999999,-106.622377 31.940863,-106.623659000000004 31.945509999999995,-106.616135999999983 31.948439,-106.614701999999994 31.956,-106.617707999999993 31.956008,-106.622819000000007 31.952891,-106.625123000000002 31.954530999999999,-106.625534999999985 31.957475999999996,-106.624298999999993 31.961054,-106.620453999999981 31.963402999999996,-106.619370999999987 31.964777000000005,-106.618745000000004 31.966954999999995,-106.619568999999998 31.971578,-106.621872999999994 31.972933,-106.623215999999999 31.972909999999999,-106.626465999999994 31.97069,-106.630114000000006 31.971257999999999,-106.638186000000005 31.976819999999996,-106.639528999999996 31.980347999999996,-106.63649199999999 31.985719,-106.631181999999995 31.989809,-106.629494617643616 31.990072722748106,-106.628337072326531 31.990253636712819,-106.62822051159516 31.990271854111079,-106.626910882874782 31.990476537349483,-106.623567999999992 31.990998999999999,-106.619448000000006 31.994733,-106.618486000000004 32.000494999999994,-106.599096000000003 32.000731000000002,-106.598639000000006 32.000753999999993,-106.595332999999997 32.000777999999997,-106.587971999999979 32.000748999999999,-106.582805114232855 32.000751357586125,-106.566056000000003 32.000759000000002,-106.565141999999994 32.000736000000003,-106.564298514026802 32.00073927393025,-106.562131862706067 32.000747683631808,-106.55942760630407 32.000758180008894,-106.517043115844388 32.000922692365819,-106.411074999999983 32.001334,-106.409326934223301 32.001349629127162,-106.409108574114072 32.001351581443814,-106.394297999999992 32.001483999999998,-106.376861000000005 32.001171999999997,-106.32356972407176 32.001457096670784,-106.313306999999995 32.001511999999998,-106.205915000000005 32.001761999999999,-106.200699 32.001784999999998,-106.18183999999998 32.002049999999997,-106.125534000000002 32.002532999999993,-106.05045734599986 32.002412317859424,-105.998002999999997 32.002327999999999,-105.900599999999997 32.002099999999992,-105.886159000000006 32.001969999999993,-105.854061000000002 32.00235,-105.750527000000005 32.002206,-105.731362000000004 32.001564000000002,-105.563520259526442 32.001015604709174,-105.429281000000003 32.000577,-105.428582000000006 32.000599999999999,-105.427048999999997 32.000638000000002,-105.390395999999981 32.000607000000002,-105.340142768272344 32.000583616714373,-105.200871148394683 32.000518812363367,-105.153993999999997 32.000497000000003,-105.150310000000005 32.000497000000003,-105.14824 32.000484999999998,-105.132915999999994 32.000518,-105.131377 32.000523999999999,-105.118039999999993 32.000484999999998,-105.078604999999996 32.000532999999997,-105.077045999999996 32.000578999999995,-104.918272000000002 32.000495999999991,-104.643525999999994 32.000442999999997,-104.640917999999999 32.000396000000002,-104.531936999999999 32.000311000000004,-104.531756 32.000117000000003,-104.024520999999993 32.000010000000003,-103.980179000000007 32.000124999999997,-103.875476000000006 32.000554,-103.748317 32.000197999999997,-103.72373965094468 32.000208021677786,-103.713395184678689 32.000212239744897,-103.713395184670219 32.000212239744904,-103.713395184654971 32.000212239744911,-103.713395184639609 32.000212239744918,-103.60161412595366 32.000257819670985,-103.326500999999993 32.00036999999999,-103.278520999999998 32.000419,-103.270382999999995 32.000326,-103.267707999999999 32.000323999999992,-103.267633000000004 32.000475000000002,-103.215641000000005 32.000512999999998,-103.133028835827503 32.000473953106116,-103.088697999999994 32.000452999999993,-103.085875999999985 32.000464999999998,-103.064422999999991 32.000518,-103.064344000000006 32.087051000000002,-103.064347999999995 32.123041,-103.064421999999993 32.145006000000002,-103.064695999999998 32.522193,-103.064761000000004 32.587983,-103.064787999999993 32.600397,-103.064761000000004 32.601863000000002,-103.064814999999996 32.624536999999997,-103.064633 32.646419999999992,-103.064864 32.682647000000003,-103.064797999999996 32.690761000000002,-103.064798999999994 32.708694,-103.064826999999994 32.726627999999998,-103.064807000000002 32.777302999999996,-103.064698000000007 32.783602000000002,-103.064711000000003 32.784593,-103.064699000000005 32.827531,-103.064672000000002 32.828470000000003,-103.064888999999994 32.849359,-103.064915999999982 32.857259999999997,-103.064807000000002 32.857695999999997,-103.064862000000005 32.868346000000003,-103.064700999999985 32.879354999999997,-103.064569000000006 32.900013999999999,-103.064656999999997 32.959097,-103.064678999999998 32.964373000000002,-103.064625000000007 32.999898999999999,-103.064452000000003 33.010289999999998,-103.06398 33.038693000000002,-103.063904999999991 33.042054999999998,-103.063382198608849 33.066417104805645,-103.0628188509327 33.092668632365545,-103.062136190569035 33.12448003074244,-103.060102999999984 33.219225000000002,-103.059719999999999 33.256262,-103.059241999999998 33.260370999999992,-103.057856 33.315233999999997,-103.057486999999995 33.32947699999999,-103.056655000000006 33.388437999999994,-103.052609999999987 33.570599,-103.051664000000002 33.629489,-103.051362999999995 33.64195,-103.051535 33.650486999999998,-103.051086999999981 33.658186,-103.050532000000004 33.672407999999997,-103.050147999999993 33.701971,-103.049608000000006 33.737766,-103.049096000000006 33.746270000000003,-103.047346000000005 33.824674999999999,-103.046907000000004 33.850299999999997,-103.045643999999996 33.901536999999998,-103.045698000000002 33.90629899999999,-103.044893000000002 33.945616999999999,-103.043949999999981 33.974629,-103.043616999999998 34.003633,-103.043531000000002 34.018014,-103.043554999999984 34.032713999999991,-103.043745999999999 34.037294000000003,-103.043771000000007 34.041538000000003,-103.043720999999991 34.042319999999997,-103.043767000000003 34.043544999999995,-103.043744000000004 34.049985999999997,-103.04368599999998 34.063077999999997,-103.043515999999983 34.079382000000003,-103.043569000000005 34.087947,-103.043571175003294 34.092846731402311,-103.043572866326429 34.096656853966635,-103.04358003846437 34.112813863799865,-103.043644 34.256903,-103.043718999999982 34.289440999999997,-103.043935999999988 34.302584999999993,-103.043978999999979 34.312763999999994,-103.043947553639484 34.376410480771497,-103.043947499824213 34.37651940122479,-103.043946000000005 34.379555000000003,-103.043943999999982 34.37966,-103.043919000000002 34.380915999999992,-103.043693000000005 34.383578,-103.043629999999993 34.384689999999999,-103.043614000000005 34.384968999999998,-103.043612999999993 34.388679000000003,-103.043612999999993 34.390442,-103.043606047260084 34.391254973944719,-103.043584999999993 34.393715999999998,-103.043610999999999 34.397105000000003,-103.043582999999998 34.400677999999999,-103.043537999999998 34.405462999999997,-103.043582 34.455657000000002,-103.043587999999986 34.459662000000002,-103.043588999999997 34.459774000000003,-103.043593999999985 34.46266,-103.043434927764125 34.510540742996007,-103.043071999999981 34.619782,-103.043277851519235 34.65183038816317,-103.0432796163159 34.65210514391012,-103.043285999999995 34.653098999999997,-103.042827000000003 34.671187999999994,-103.042768999999993 34.747360999999998,-103.042770000000004 34.792223999999997,-103.042781000000005 34.850242999999999,-103.042520999999979 34.899546,-103.0425974544018 35.032467348285799,-103.042641999999987 35.109912999999999,-103.043261 35.125058000000003,-103.042519999999996 35.135596,-103.042599999999993 35.142766000000002,-103.042710999999997 35.144734999999997,-103.042568000000003 35.159317999999999,-103.042394999999999 35.178573,-103.042338999999984 35.181922,-103.042366 35.182786,-103.042377000000002 35.183149,-103.042496999999997 35.211862000000004,-103.042775000000006 35.241236999999998,-103.042366 35.250056,-103.041554000000005 35.622487,-103.041484634909168 35.651235429903174,-103.041145999999998 35.791583000000003,-103.041916999999998 35.796441000000002,-103.041715999999994 35.814072000000003,-103.042186 35.825216999999995,-103.04130499999998 35.837693999999999,-103.040823999999986 36.055230999999992,-103.041387523024824 36.229129564686382,-103.041674 36.317534000000002,-103.041745000000006 36.318266999999999,-103.041923999999995 36.500439,-103.00243399999998 36.500397)),((-96.818513748151517 28.172441936006489,-96.816443421354066 28.174808025412563,-96.791958210781445 28.188687337716829,-96.733036581469989 28.190913261798631,-96.70383764358462 28.198245729538105,-96.697421731775194 28.2029594609741,-96.702659211994316 28.211208487181011,-96.703313894801497 28.216445964862743,-96.686815839850283 28.218410020896432,-96.662461568376486 28.227313732447904,-96.66062845144161 28.228884976259902,-96.663116248646261 28.233205895474203,-96.651855673914184 28.251275190431315,-96.607991796426646 28.277069769155677,-96.608122730450688 28.280081317680857,-96.611527096272326 28.281390688369981,-96.610479598706064 28.283092866206033,-96.592934048725994 28.296972182316367,-96.581018783574592 28.302209665072866,-96.553260151988255 28.302340591484768,-96.546975176740276 28.305614018207578,-96.542130508742858 28.315958034472228,-96.528905880514458 28.322504882843088,-96.476269225261575 28.330753906512612,-96.45099839278295 28.337038879223222,-96.434107525610045 28.344764159184386,-96.418918843885365 28.35484630740093,-96.415252604940861 28.362833452872817,-96.417216660974546 28.367154372087118,-96.412895739222876 28.36951123780511,-96.403206408302779 28.371475291301415,-96.401242352269094 28.366892498964241,-96.400558825492723 28.362187299887704,-96.398667286465624 28.349166496619617,-96.397846 28.343512999999998,-96.413700000000006 28.327342999999999,-96.439098999999999 28.319051999999999,-96.495600517783487 28.293964130304811,-96.547774000000004 28.270797999999999,-96.587113635820756 28.248878526668094,-96.611036668198281 28.235548960715661,-96.621533999999983 28.229699999999998,-96.694665999999998 28.18212,-96.758140999999995 28.136872999999998,-96.830820125734775 28.079724674840076,-96.849624000000006 28.064938999999999,-96.854049189790473 28.060788472935577,-96.855594496383262 28.059339080448503,-96.859762278796424 28.055429983997605,-96.896530613737951 28.020943786452513,-96.898080497387397 28.019490100997579,-96.929052999999996 27.990439999999996,-96.96699599999998 27.950531000000002,-97.001440999999986 27.911442,-97.031660000000002 27.869974999999997,-97.041798999999997 27.852925999999997,-97.045408776308051 27.837452569961062,-97.045409609838757 27.837448997003069,-97.04598 27.835004,-97.050599498412936 27.830109781194331,-97.058265753683145 27.821987615677948,-97.076304165860961 27.802876463727326,-97.079565315161531 27.799421374709375,-97.083535350812468 27.795215242050556,-97.085211615730273 27.793439290085495,-97.085394999999991 27.793244999999999,-97.11422230692618 27.755303327915222,-97.116276999999997 27.752599,-97.117304906633777 27.751048809529347,-97.118830196202964 27.748748513687826,-97.139140047561696 27.718119138409879,-97.139351757288111 27.717799858049549,-97.143807202733072 27.711080581371732,-97.165547551982726 27.678293865995041,-97.166583141799606 27.676732088482499,-97.166681999999994 27.676583,-97.184850261879149 27.644709535797791,-97.192144670654784 27.631912600211269,-97.198729900630283 27.620359811436909,-97.201865999999995 27.614857999999998,-97.211651066704889 27.596044174137351,-97.213608899397855 27.592279833590187,-97.221943360361436 27.576255098965802,-97.265194083077162 27.493096589152017,-97.265746568141566 27.492034321708481,-97.276090999999994 27.472145,-97.304469999999995 27.407734,-97.326522999999995 27.347611999999998,-97.347445832595042 27.277936119324231,-97.350397999999998 27.268104999999998,-97.363400999999996 27.210366,-97.370941000000002 27.161165999999998,-97.377001000000007 27.101020999999999,-97.379130000000004 27.047996,-97.378361999999996 26.992877,-97.370730999999992 26.909706,-97.365301177044699 26.875333999999995,-97.365282052674758 26.875212938438843,-97.364726000000005 26.871692999999997,-97.363633430415348 26.866515420001111,-97.352028350385282 26.811520085064032,-97.35141299999998 26.808603999999999,-97.350529648372714 26.805138580575584,-97.333027999999999 26.736478999999996,-97.304204860681779 26.646364129642233,-97.300690000000003 26.635375,-97.297812715808362 26.627503004299889,-97.297022484076606 26.625340999999999,-97.287871455917369 26.600304594305239,-97.275119000000004 26.565415000000002,-97.269391999999982 26.554046,-97.269132970349304 26.553256905349773,-97.257954534248029 26.519203490608863,-97.229844 26.433568999999999,-97.223724090442104 26.411478908273114,-97.206682644704898 26.34996703527348,-97.194643999999997 26.306512999999999,-97.185844000000003 26.267102999999995,-97.177979856301576 26.220346386353309,-97.177168840972797 26.215524458900923,-97.173264999999986 26.192314,-97.170387765328073 26.167037808112223,-97.169872392484734 26.162510314053797,-97.167099005951158 26.138146416702778,-97.161470999999992 26.088705,-97.158662630175101 26.080176913346069,-97.154270970414501 26.066840900880429,-97.161462285840642 26.067639941946975,-97.169842256221145 26.077853024187579,-97.171781452365479 26.102521767945923,-97.179531587141199 26.146202099560895,-97.178745972847352 26.177103221942961,-97.183983445454302 26.214289306886101,-97.194458400817808 26.271639686993655,-97.214884565299002 26.353606215503973,-97.226930759399721 26.385554824668418,-97.240286324189555 26.405980989149626,-97.240845398636537 26.411470089808617,-97.243166933615896 26.434263367616055,-97.247618791929028 26.456260775909261,-97.254165635225121 26.471187589585856,-97.262545605605609 26.482971915638458,-97.27642492679071 26.521729238684483,-97.292399243108349 26.528014213932472,-97.310730412457033 26.556558470596535,-97.308111681228326 26.5712234060755,-97.308635417324538 26.576722756880109,-97.317015387705027 26.597672667607057,-97.318434072834165 26.60022630157264,-97.324871601690262 26.611813856840271,-97.338489044677715 26.647428701777493,-97.33639404954522 26.666021744249065,-97.345821512417203 26.700589103038251,-97.363105189274393 26.710540307081217,-97.370437657013895 26.723895871871047,-97.370961403259614 26.736203954318924,-97.367557047587525 26.740393934434408,-97.364152671616353 26.758986971196869,-97.364646278833362 26.767121661774897,-97.368866408127118 26.774699404876429,-97.370437646864346 26.781508126370166,-97.368342661881371 26.795649318140761,-97.373056398392137 26.808481136684847,-97.387459455673451 26.820789208983193,-97.383531343606066 26.875520854055946,-97.385626348888096 26.88887641440536,-97.391649435788921 26.901970109878395,-97.389554460955466 26.945964918852653,-97.390340075249313 27.05228571820243,-97.389816329003565 27.067212531879022,-97.386411973331462 27.083186832972341,-97.387459455673422 27.090519300711819,-97.390601943297412 27.094185534581555,-97.390078197051665 27.156511519247964,-97.377508246555678 27.199458835730731,-97.379865109736301 27.202863196477598,-97.386673841379576 27.204696313412462,-97.382221972916923 27.229050589961044,-97.37488951532697 27.25026236588155,-97.373318276589728 27.276449754290233,-97.372896734486858 27.277942715507475,-97.367033301341749 27.298709035706306,-97.36467643816114 27.302637142698917,-97.359962701650375 27.304732132756659,-97.357605838469766 27.307874620380655,-97.362319574980518 27.32672953597509,-97.366771423144115 27.333276389420721,-97.36179581858525 27.359987519000377,-97.346607126710992 27.390364889744752,-97.336132171347501 27.402411088920228,-97.331156576938184 27.412362295500575,-97.329585328051422 27.418123524502818,-97.330894688591016 27.425455992242295,-97.329847196099536 27.434359703793774,-97.317277255753083 27.463689574751687,-97.293708603647858 27.497209429631152,-97.282971770086746 27.521563701104967,-97.267627232015485 27.541048841138782,-97.26651977444007 27.542455137362143,-97.266473727822444 27.542513609294531,-97.257831889393842 27.556392930479635,-97.261144559602045 27.562355746269706,-97.261759991311692 27.563463525096239,-97.260450620622564 27.56739163716362,-97.260303240478223 27.567589679048492,-97.252732825146552 27.577762415194865,-97.252070650242061 27.578652211895708,-97.247885553160842 27.581360217573209,-97.247618802078478 27.581532821322067,-97.236881968517352 27.598292751933528,-97.24107194863285 27.602482732049012,-97.241084821027414 27.602523494839662,-97.242643187370078 27.607458346757408,-97.231683715414945 27.631671123728168,-97.231553918442799 27.631957884363242,-97.231382612637987 27.632336350521356,-97.221955159915538 27.632860099304484,-97.221711030183002 27.632638163711842,-97.219074540339648 27.630241360463614,-97.217418907944051 27.630677052710489,-97.214098935780783 27.631550728615359,-97.200743370990949 27.650143776161688,-97.197339005169326 27.664546838517776,-97.19760088336696 27.678426154628117,-97.203474366386629 27.684532651921231,-97.20308902068453 27.688000774441392,-97.200450811776179 27.688974477466285,-97.190006537429824 27.692829222058965,-97.188284576858237 27.695272543577584,-97.170627865440125 27.720325976082009,-97.166176017276527 27.732372180332245,-97.161200407642937 27.734074342943998,-97.153606061705801 27.733288721037997,-97.147321086457822 27.735383711095739,-97.130823034043985 27.751619892924076,-97.127942424617643 27.75580987303956,-97.127680546420009 27.759999858229808,-97.125046985317312 27.763143140340585,-97.103326269871417 27.789067861139614,-97.102999946318647 27.791923200131116,-97.10255066693685 27.795854405604921,-97.102495980878558 27.796332909939515,-97.102278777379922 27.798233445813956,-97.100865886772965 27.802472121847156,-97.098874421707819 27.808446522979796,-97.095168997779496 27.812151946908138,-97.092851314507953 27.81446963017968,-97.092589446459854 27.819183356540908,-97.098874421707819 27.822849590410645,-97.104263831428213 27.822227735056668,-97.126109297533233 27.819707102786651,-97.130299287798252 27.820492727230029,-97.134489267913736 27.825206463740791,-97.132394272781227 27.827301438574235,-97.10670775348396 27.832389859144307,-97.087681973298601 27.836158807756469,-97.056712719518927 27.842293721800239,-97.055822986229373 27.843403727743151,-97.04322620548075 27.859119113080268,-97.013634476624247 27.906780143237341,-97.017955395838555 27.911493874673329,-97.016384146951765 27.917255079570445,-96.985744902767337 27.954048356415132,-96.977888688782102 27.976438572489602,-96.978805242174786 27.978271691961854,-96.980900237307296 27.978271691961854,-96.986006780964971 27.976176699366729,-96.986661461234775 27.980759491703903,-96.978281501003806 28.001709402430844,-96.967806540565562 28.020040576854303,-96.966759042999328 28.020367911280101,-96.965187799187319 28.013297317932185,-96.962569062883844 28.012380759464751,-96.952617853766114 28.01643980428749,-96.946987563862692 28.02652194996665,-96.932453562407773 28.035425661518129,-96.926430465357427 28.043412814602167,-96.929572952981431 28.051399967686208,-96.927085150701998 28.057292130712504,-96.906004298338829 28.076147047258459,-96.890946545563423 28.076801730065643,-96.886232814127425 28.084396073465374,-96.88832780925992 28.086622002621937,-96.889113433703315 28.099453823703399,-96.886887499471996 28.117130312782294,-96.879424092633712 28.131402425890027,-96.874972236857971 28.133235547899659,-96.87078225420511 28.13127149186597,-96.86462821551855 28.126295887307109,-96.857164811217643 28.115559058820768,-96.845380482627661 28.108881273888468,-96.830128556765757 28.111822717849165,-96.827049318353744 28.112416571196771,-96.816574357915513 28.119618104912195,-96.810420321766344 28.126034014184238,-96.810944073086844 28.136378030448888,-96.816836228500989 28.158048094801106,-96.820248352517055 28.163388807027481,-96.822859330626116 28.167475552598326,-96.818513748151517 28.172441936006489)))
\ No newline at end of file
--- a/web/lib/django/contrib/gis/tests/geoapp/test_feeds.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/geoapp/test_feeds.py	Tue May 25 02:43:45 2010 +0200
@@ -18,14 +18,15 @@
         # Uses `GEOSGeometry` in `item_geometry`
         doc1 = minidom.parseString(self.client.get('/geoapp/feeds/rss1/').content)
         # Uses a 2-tuple in `item_geometry`
-        doc2 = minidom.parseString(self.client.get('/geoapp/feeds/rss2/').content) 
+        doc2 = minidom.parseString(self.client.get('/geoapp/feeds/rss2/').content)
         feed1, feed2 = doc1.firstChild, doc2.firstChild
 
         # Making sure the box got added to the second GeoRSS feed.
-        self.assertChildNodes(feed2.getElementsByTagName('channel')[0], 
-                              ['title', 'link', 'description', 'language', 'lastBuildDate', 'item', 'georss:box']
+        self.assertChildNodes(feed2.getElementsByTagName('channel')[0],
+                              ['title', 'link', 'description', 'language',
+                               'lastBuildDate', 'item', 'georss:box', 'atom:link']
                               )
-        
+
         # Incrementing through the feeds.
         for feed in [feed1, feed2]:
             # Ensuring the georss namespace was added to the <rss> element.
@@ -33,7 +34,7 @@
             chan = feed.getElementsByTagName('channel')[0]
             items = chan.getElementsByTagName('item')
             self.assertEqual(len(items), City.objects.count())
-                
+
             # Ensuring the georss element was added to each item in the feed.
             for item in items:
                 self.assertChildNodes(item, ['title', 'link', 'description', 'guid', 'georss:point'])
@@ -45,14 +46,14 @@
         feed1, feed2 = doc1.firstChild, doc2.firstChild
 
         # Making sure the box got added to the second GeoRSS feed.
-        self.assertChildNodes(feed2, ['title', 'link', 'id', 'updated', 'entry', 'georss:box'])        
+        self.assertChildNodes(feed2, ['title', 'link', 'id', 'updated', 'entry', 'georss:box'])
 
         for feed in [feed1, feed2]:
             # Ensuring the georsss namespace was added to the <feed> element.
             self.assertEqual(feed.getAttribute(u'xmlns:georss'),  u'http://www.georss.org/georss')
             entries = feed.getElementsByTagName('entry')
             self.assertEqual(len(entries), City.objects.count())
-            
+
             # Ensuring the georss element was added to each entry in the feed.
             for entry in entries:
                 self.assertChildNodes(entry, ['title', 'link', 'id', 'summary', 'georss:point'])
--- a/web/lib/django/contrib/gis/tests/geoapp/test_regress.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/geoapp/test_regress.py	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,4 @@
 import os, unittest
-from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.gis.tests.utils import no_mysql, no_oracle, no_postgis, no_spatialite
 from django.contrib.gis.shortcuts import render_to_kmz
 from models import City
@@ -28,8 +27,11 @@
         kmz = render_to_kmz('gis/kml/placemarks.kml', {'places' : places})
 
     @no_spatialite
+    @no_mysql
     def test03_extent(self):
         "Testing `extent` on a table with a single point, see #11827."
         pnt = City.objects.get(name='Pueblo').point
         ref_ext = (pnt.x, pnt.y, pnt.x, pnt.y)
-        self.assertEqual(ref_ext, City.objects.filter(name='Pueblo').extent())
+        extent = City.objects.filter(name='Pueblo').extent()
+        for ref_val, val in zip(ref_ext, extent):
+            self.assertAlmostEqual(ref_val, val, 4)
--- a/web/lib/django/contrib/gis/tests/geoapp/tests.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/geoapp/tests.py	Tue May 25 02:43:45 2010 +0200
@@ -1,49 +1,29 @@
-import os, unittest
+import re, os, unittest
+from django.db import connection
 from django.contrib.gis import gdal
-from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.gis.geos import *
 from django.contrib.gis.measure import Distance
-from django.contrib.gis.tests.utils import no_oracle, no_postgis, no_spatialite
-from models import Country, City, PennsylvaniaCity, State
+from django.contrib.gis.tests.utils import \
+    no_mysql, no_oracle, no_postgis, no_spatialite, \
+    mysql, oracle, postgis, spatialite
+from django.test import TestCase
 
-if not SpatialBackend.spatialite:
+from models import Country, City, PennsylvaniaCity, State, Track
+
+if not spatialite:
     from models import Feature, MinusOneSRID
 
-# TODO: Some tests depend on the success/failure of previous tests, these should
-# be decoupled.  This flag is an artifact of this problem, and makes debugging easier;
-# specifically, the DISABLE flag will disables all tests, allowing problem tests to
-# be examined individually.
-DISABLE = False
-
-class GeoModelTest(unittest.TestCase):
+class GeoModelTest(TestCase):
 
-    def test01_initial_sql(self):
-        "Testing geographic initial SQL."
-        if DISABLE: return
-        if SpatialBackend.oracle:
-            # Oracle doesn't allow strings longer than 4000 characters
-            # in SQL files, and I'm stumped on how to use Oracle BFILE's
-            # in PLSQL, so we set up the larger geometries manually, rather
-            # than relying on the initial SQL.
-
-            # Routine for returning the path to the data files.
-            data_dir = os.path.join(os.path.dirname(__file__), 'sql')
-            def get_file(wkt_file):
-                return os.path.join(data_dir, wkt_file)
-            State(name='Puerto Rico', poly=None).save()
-            State(name='Colorado', poly=fromfile(get_file('co.wkt'))).save()
-            State(name='Kansas', poly=fromfile(get_file('ks.wkt'))).save()
-            Country(name='Texas', mpoly=fromfile(get_file('tx.wkt'))).save()
-            Country(name='New Zealand', mpoly=fromfile(get_file('nz.wkt'))).save()
-
-        # Ensuring that data was loaded from initial SQL.
+    def test01_fixtures(self):
+        "Testing geographic model initialization from fixtures."
+        # Ensuring that data was loaded from initial data fixtures.
         self.assertEqual(2, Country.objects.count())
         self.assertEqual(8, City.objects.count())
-        self.assertEqual(3, State.objects.count())
+        self.assertEqual(2, State.objects.count())
 
     def test02_proxy(self):
         "Testing Lazy-Geometry support (using the GeometryProxy)."
-        if DISABLE: return
         ## Testing on a Point
         pnt = Point(0, 0)
         nullcity = City(name='NullCity', point=pnt)
@@ -110,11 +90,13 @@
         self.assertEqual(ply, State.objects.get(name='NullState').poly)
         ns.delete()
 
-    @no_oracle # Oracle does not support KML.
-    @no_spatialite # SpatiaLite does not support KML.
     def test03a_kml(self):
         "Testing KML output from the database using GeoQuerySet.kml()."
-        if DISABLE: return
+        # Only PostGIS supports KML serialization
+        if not postgis:
+            self.assertRaises(NotImplementedError, State.objects.all().kml, field_name='poly')
+            return
+
         # Should throw a TypeError when trying to obtain KML from a
         #  non-geometry field.
         qs = City.objects.all()
@@ -122,14 +104,10 @@
 
         # The reference KML depends on the version of PostGIS used
         # (the output stopped including altitude in 1.3.3).
-        major, minor1, minor2 = SpatialBackend.version
-        ref_kml1 = '<Point><coordinates>-104.609252,38.255001,0</coordinates></Point>'
-        ref_kml2 = '<Point><coordinates>-104.609252,38.255001</coordinates></Point>'
-        if major == 1:
-            if minor1 > 3 or (minor1 == 3 and minor2 >= 3): ref_kml = ref_kml2
-            else: ref_kml = ref_kml1
+        if connection.ops.spatial_version >= (1, 3, 3):
+            ref_kml =  '<Point><coordinates>-104.609252,38.255001</coordinates></Point>'
         else:
-            ref_kml = ref_kml2
+            ref_kml = '<Point><coordinates>-104.609252,38.255001,0</coordinates></Point>'
 
         # Ensuring the KML is as expected.
         ptown1 = City.objects.kml(field_name='point', precision=9).get(name='Pueblo')
@@ -137,19 +115,20 @@
         for ptown in [ptown1, ptown2]:
             self.assertEqual(ref_kml, ptown.kml)
 
-    @no_spatialite # SpatiaLite does not support GML.
     def test03b_gml(self):
         "Testing GML output from the database using GeoQuerySet.gml()."
-        if DISABLE: return
+        if mysql or spatialite:
+            self.assertRaises(NotImplementedError, Country.objects.all().gml, field_name='mpoly')
+            return
+
         # Should throw a TypeError when tyring to obtain GML from a
-        #  non-geometry field.
+        # non-geometry field.
         qs = City.objects.all()
         self.assertRaises(TypeError, qs.gml, field_name='name')
         ptown1 = City.objects.gml(field_name='point', precision=9).get(name='Pueblo')
         ptown2 = City.objects.gml(precision=9).get(name='Pueblo')
 
-        import re
-        if SpatialBackend.oracle:
+        if oracle:
             # No precision parameter for Oracle :-/
             gml_regex = re.compile(r'^<gml:Point srsName="SDO:4326" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="\." cs="," ts=" ">-104.60925\d+,38.25500\d+ </gml:coordinates></gml:Point>')
             for ptown in [ptown1, ptown2]:
@@ -159,17 +138,14 @@
             for ptown in [ptown1, ptown2]:
                 self.failUnless(gml_regex.match(ptown.gml))
 
-    @no_spatialite
-    @no_oracle
     def test03c_geojson(self):
         "Testing GeoJSON output from the database using GeoQuerySet.geojson()."
-        if DISABLE: return
-        # PostGIS only supports GeoJSON on 1.3.4+
-        if not SpatialBackend.geojson:
+        # Only PostGIS 1.3.4+ supports GeoJSON.
+        if not connection.ops.geojson:
+            self.assertRaises(NotImplementedError, Country.objects.all().geojson, field_name='mpoly')
             return
 
-        major, minor1, minor2 = SpatialBackend.version
-        if major >=1 and minor1 >= 4:
+        if connection.ops.spatial_version >= (1, 4, 0):
             pueblo_json = '{"type":"Point","coordinates":[-104.609252,38.255001]}'
             houston_json = '{"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:4326"}},"coordinates":[-95.363151,29.763374]}'
             victoria_json = '{"type":"Point","bbox":[-123.30519600,48.46261100,-123.30519600,48.46261100],"coordinates":[-123.305196,48.462611]}'
@@ -179,10 +155,10 @@
             houston_json = '{"type":"Point","crs":{"type":"EPSG","properties":{"EPSG":4326}},"coordinates":[-95.36315100,29.76337400]}'
             victoria_json = '{"type":"Point","bbox":[-123.30519600,48.46261100,-123.30519600,48.46261100],"coordinates":[-123.30519600,48.46261100]}'
             chicago_json = '{"type":"Point","crs":{"type":"EPSG","properties":{"EPSG":4326}},"bbox":[-87.65018,41.85039,-87.65018,41.85039],"coordinates":[-87.65018,41.85039]}'
-            
+
         # Precision argument should only be an integer
         self.assertRaises(TypeError, City.objects.geojson, precision='foo')
-        
+
         # Reference queries and values.
         # SELECT ST_AsGeoJson("geoapp_city"."point", 8, 0) FROM "geoapp_city" WHERE "geoapp_city"."name" = 'Pueblo';
         self.assertEqual(pueblo_json, City.objects.geojson().get(name='Pueblo').geojson)
@@ -200,11 +176,13 @@
         # 1.(3|4).x: SELECT ST_AsGeoJson("geoapp_city"."point", 5, 3) FROM "geoapp_city" WHERE "geoapp_city"."name" = 'Chicago';
         # Finally, we set every available keyword.
         self.assertEqual(chicago_json, City.objects.geojson(bbox=True, crs=True, precision=5).get(name='Chicago').geojson)
-        
-    @no_oracle
+
     def test03d_svg(self):
         "Testing SVG output using GeoQuerySet.svg()."
-        if DISABLE: return
+        if mysql or oracle:
+            self.assertRaises(NotImplementedError, City.objects.svg)
+            return
+
         self.assertRaises(TypeError, City.objects.svg, precision='foo')
         # SELECT AsSVG(geoapp_city.point, 0, 8) FROM geoapp_city WHERE name = 'Pueblo';
         svg1 = 'cx="-104.609252" cy="-38.255001"'
@@ -214,9 +192,9 @@
         self.assertEqual(svg1, City.objects.svg().get(name='Pueblo').svg)
         self.assertEqual(svg2, City.objects.svg(relative=5).get(name='Pueblo').svg)
 
+    @no_mysql
     def test04_transform(self):
         "Testing the transform() GeoManager method."
-        if DISABLE: return
         # Pre-transformed points for Houston and Pueblo.
         htown = fromstr('POINT(1947516.83115183 6322297.06040572)', srid=3084)
         ptown = fromstr('POINT(992363.390841912 481455.395105533)', srid=2774)
@@ -224,7 +202,7 @@
 
         # Asserting the result of the transform operation with the values in
         #  the pre-transformed points.  Oracle does not have the 3084 SRID.
-        if not SpatialBackend.oracle:
+        if not oracle:
             h = City.objects.transform(htown.srid).get(name='Houston')
             self.assertEqual(3084, h.point.srid)
             self.assertAlmostEqual(htown.x, h.point.x, prec)
@@ -237,10 +215,10 @@
             self.assertAlmostEqual(ptown.x, p.point.x, prec)
             self.assertAlmostEqual(ptown.y, p.point.y, prec)
 
+    @no_mysql
     @no_spatialite # SpatiaLite does not have an Extent function
     def test05_extent(self):
         "Testing the `extent` GeoQuerySet method."
-        if DISABLE: return
         # Reference query:
         # `SELECT ST_extent(point) FROM geoapp_city WHERE (name='Houston' or name='Dallas');`
         #   =>  BOX(-96.8016128540039 29.7633724212646,-95.3631439208984 32.7820587158203)
@@ -252,11 +230,12 @@
         for val, exp in zip(extent, expected):
             self.assertAlmostEqual(exp, val, 4)
 
+    # Only PostGIS has support for the MakeLine aggregate.
+    @no_mysql
     @no_oracle
-    @no_spatialite # SpatiaLite does not have a MakeLine function
+    @no_spatialite
     def test06_make_line(self):
         "Testing the `make_line` GeoQuerySet method."
-        if DISABLE: return
         # Ensuring that a `TypeError` is raised on models without PointFields.
         self.assertRaises(TypeError, State.objects.make_line)
         self.assertRaises(TypeError, Country.objects.make_line)
@@ -265,34 +244,26 @@
         ref_line = GEOSGeometry('LINESTRING(-95.363151 29.763374,-96.801611 32.782057,-97.521157 34.464642,174.783117 -41.315268,-104.609252 38.255001,-95.23506 38.971823,-87.650175 41.850385,-123.305196 48.462611)', srid=4326)
         self.assertEqual(ref_line, City.objects.make_line())
 
+    @no_mysql
     def test09_disjoint(self):
         "Testing the `disjoint` lookup type."
-        if DISABLE: return
         ptown = City.objects.get(name='Pueblo')
         qs1 = City.objects.filter(point__disjoint=ptown.point)
         self.assertEqual(7, qs1.count())
 
-        if not (SpatialBackend.postgis or SpatialBackend.spatialite):
-            # TODO: Do NULL columns bork queries on PostGIS?  The following
-            # error is encountered:
-            #  psycopg2.ProgrammingError: invalid memory alloc request size 4294957297
-            #
-            # Similarly, on SpatiaLite Puerto Rico is also returned (could be a
-            # manifestation of
-            qs2 = State.objects.filter(poly__disjoint=ptown.point)
-            self.assertEqual(1, qs2.count())
-            self.assertEqual('Kansas', qs2[0].name)
+        qs2 = State.objects.filter(poly__disjoint=ptown.point)
+        self.assertEqual(1, qs2.count())
+        self.assertEqual('Kansas', qs2[0].name)
 
     def test10_contains_contained(self):
         "Testing the 'contained', 'contains', and 'bbcontains' lookup types."
-        if DISABLE: return
         # Getting Texas, yes we were a country -- once ;)
         texas = Country.objects.get(name='Texas')
 
         # Seeing what cities are in Texas, should get Houston and Dallas,
         #  and Oklahoma City because 'contained' only checks on the
         #  _bounding box_ of the Geometries.
-        if not SpatialBackend.oracle:
+        if not oracle:
             qs = City.objects.filter(point__contained=texas.mpoly)
             self.assertEqual(3, qs.count())
             cities = ['Houston', 'Dallas', 'Oklahoma City']
@@ -313,30 +284,31 @@
         self.assertEqual('New Zealand', nz.name)
 
         # Spatialite 2.3 thinks that Lawrence is in Puerto Rico (a NULL geometry).
-        if not SpatialBackend.spatialite:
+        if not spatialite:
             ks = State.objects.get(poly__contains=lawrence.point)
             self.assertEqual('Kansas', ks.name)
 
         # Pueblo and Oklahoma City (even though OK City is within the bounding box of Texas)
-        #  are not contained in Texas or New Zealand.
+        # are not contained in Texas or New Zealand.
         self.assertEqual(0, len(Country.objects.filter(mpoly__contains=pueblo.point))) # Query w/GEOSGeometry object
-        self.assertEqual(0, len(Country.objects.filter(mpoly__contains=okcity.point.wkt))) # Qeury w/WKT
+        self.assertEqual((mysql and 1) or 0,
+                         len(Country.objects.filter(mpoly__contains=okcity.point.wkt))) # Qeury w/WKT
 
         # OK City is contained w/in bounding box of Texas.
-        if not SpatialBackend.oracle:
+        if not oracle:
             qs = Country.objects.filter(mpoly__bbcontains=okcity.point)
             self.assertEqual(1, len(qs))
             self.assertEqual('Texas', qs[0].name)
 
+    @no_mysql
     def test11_lookup_insert_transform(self):
         "Testing automatic transform for lookups and inserts."
-        if DISABLE: return
         # San Antonio in 'WGS84' (SRID 4326)
         sa_4326 = 'POINT (-98.493183 29.424170)'
         wgs_pnt = fromstr(sa_4326, srid=4326) # Our reference point in WGS84
 
         # Oracle doesn't have SRID 3084, using 41157.
-        if SpatialBackend.oracle:
+        if oracle:
             # San Antonio in 'Texas 4205, Southern Zone (1983, meters)' (SRID 41157)
             # Used the following Oracle SQL to get this value:
             #  SELECT SDO_UTIL.TO_WKTGEOMETRY(SDO_CS.TRANSFORM(SDO_GEOMETRY('POINT (-98.493183 29.424170)', 4326), 41157)) FROM DUAL;
@@ -351,15 +323,14 @@
         # `SDO_OVERLAPBDYINTERSECT` operates differently from
         # `ST_Intersects`, so contains is used instead.
         nad_pnt = fromstr(nad_wkt, srid=nad_srid)
-        if SpatialBackend.oracle:
+        if oracle:
             tx = Country.objects.get(mpoly__contains=nad_pnt)
         else:
             tx = Country.objects.get(mpoly__intersects=nad_pnt)
         self.assertEqual('Texas', tx.name)
 
         # Creating San Antonio.  Remember the Alamo.
-        sa = City(name='San Antonio', point=nad_pnt)
-        sa.save()
+        sa = City.objects.create(name='San Antonio', point=nad_pnt)
 
         # Now verifying that San Antonio was transformed correctly
         sa = City.objects.get(name='San Antonio')
@@ -369,14 +340,17 @@
         # If the GeometryField SRID is -1, then we shouldn't perform any
         # transformation if the SRID of the input geometry is different.
         # SpatiaLite does not support missing SRID values.
-        if not SpatialBackend.spatialite:
+        if not spatialite:
             m1 = MinusOneSRID(geom=Point(17, 23, srid=4326))
             m1.save()
             self.assertEqual(-1, m1.geom.srid)
 
+    @no_mysql
     def test12_null_geometries(self):
         "Testing NULL geometry support, and the `isnull` lookup type."
-        if DISABLE: return
+        # Creating a state with a NULL boundary.
+        State.objects.create(name='Puerto Rico')
+
         # Querying for both NULL and Non-NULL values.
         nullqs = State.objects.filter(poly__isnull=True)
         validqs = State.objects.filter(poly__isnull=False)
@@ -401,27 +375,28 @@
         State.objects.filter(name='Northern Mariana Islands').update(poly=None)
         self.assertEqual(None, State.objects.get(name='Northern Mariana Islands').poly)
 
-    @no_oracle # No specific `left` or `right` operators in Oracle.
-    @no_spatialite # No `left` or `right` operators in SpatiaLite.
+    # Only PostGIS has `left` and `right` lookup types.
+    @no_mysql
+    @no_oracle
+    @no_spatialite
     def test13_left_right(self):
         "Testing the 'left' and 'right' lookup types."
-        if DISABLE: return
         # Left: A << B => true if xmax(A) < xmin(B)
         # Right: A >> B => true if xmin(A) > xmax(B)
-        #  See: BOX2D_left() and BOX2D_right() in lwgeom_box2dfloat4.c in PostGIS source.
+        # See: BOX2D_left() and BOX2D_right() in lwgeom_box2dfloat4.c in PostGIS source.
 
         # Getting the borders for Colorado & Kansas
         co_border = State.objects.get(name='Colorado').poly
         ks_border = State.objects.get(name='Kansas').poly
 
         # Note: Wellington has an 'X' value of 174, so it will not be considered
-        #  to the left of CO.
+        # to the left of CO.
 
         # These cities should be strictly to the right of the CO border.
-        cities = ['Houston', 'Dallas', 'San Antonio', 'Oklahoma City',
+        cities = ['Houston', 'Dallas', 'Oklahoma City',
                   'Lawrence', 'Chicago', 'Wellington']
         qs = City.objects.filter(point__right=co_border)
-        self.assertEqual(7, len(qs))
+        self.assertEqual(6, len(qs))
         for c in qs: self.assertEqual(True, c.name in cities)
 
         # These cities should be strictly to the right of the KS border.
@@ -442,16 +417,15 @@
 
     def test14_equals(self):
         "Testing the 'same_as' and 'equals' lookup types."
-        if DISABLE: return
         pnt = fromstr('POINT (-95.363151 29.763374)', srid=4326)
         c1 = City.objects.get(point=pnt)
         c2 = City.objects.get(point__same_as=pnt)
         c3 = City.objects.get(point__equals=pnt)
         for c in [c1, c2, c3]: self.assertEqual('Houston', c.name)
 
+    @no_mysql
     def test15_relate(self):
         "Testing the 'relate' lookup type."
-        if DISABLE: return
         # To make things more interesting, we will have our Texas reference point in
         # different SRIDs.
         pnt1 = fromstr('POINT (649287.0363174 4177429.4494686)', srid=2847)
@@ -459,19 +433,20 @@
 
         # Not passing in a geometry as first param shoud
         # raise a type error when initializing the GeoQuerySet
-        self.assertRaises(TypeError, Country.objects.filter, mpoly__relate=(23, 'foo'))
+        self.assertRaises(ValueError, Country.objects.filter, mpoly__relate=(23, 'foo'))
+
         # Making sure the right exception is raised for the given
         # bad arguments.
-        for bad_args, e in [((pnt1, 0), TypeError), ((pnt2, 'T*T***FF*', 0), ValueError)]:
+        for bad_args, e in [((pnt1, 0), ValueError), ((pnt2, 'T*T***FF*', 0), ValueError)]:
             qs = Country.objects.filter(mpoly__relate=bad_args)
             self.assertRaises(e, qs.count)
 
         # Relate works differently for the different backends.
-        if SpatialBackend.postgis or SpatialBackend.spatialite:
+        if postgis or spatialite:
             contains_mask = 'T*T***FF*'
             within_mask = 'T*F**F***'
             intersects_mask = 'T********'
-        elif SpatialBackend.oracle:
+        elif oracle:
             contains_mask = 'contains'
             within_mask = 'inside'
             # TODO: This is not quite the same as the PostGIS mask above
@@ -486,24 +461,23 @@
         self.assertEqual('Lawrence', City.objects.get(point__relate=(ks.poly, within_mask)).name)
 
         # Testing intersection relation mask.
-        if not SpatialBackend.oracle:
+        if not oracle:
             self.assertEqual('Texas', Country.objects.get(mpoly__relate=(pnt1, intersects_mask)).name)
             self.assertEqual('Texas', Country.objects.get(mpoly__relate=(pnt2, intersects_mask)).name)
             self.assertEqual('Lawrence', City.objects.get(point__relate=(ks.poly, intersects_mask)).name)
 
     def test16_createnull(self):
         "Testing creating a model instance and the geometry being None"
-        if DISABLE: return
         c = City()
         self.assertEqual(c.point, None)
 
+    @no_mysql
     def test17_unionagg(self):
         "Testing the `unionagg` (aggregate union) GeoManager method."
-        if DISABLE: return
         tx = Country.objects.get(name='Texas').mpoly
-        # Houston, Dallas, San Antonio -- Oracle has different order.
-        union1 = fromstr('MULTIPOINT(-98.493183 29.424170,-96.801611 32.782057,-95.363151 29.763374)')
-        union2 = fromstr('MULTIPOINT(-96.801611 32.782057,-95.363151 29.763374,-98.493183 29.424170)')
+        # Houston, Dallas -- Oracle has different order.
+        union1 = fromstr('MULTIPOINT(-96.801611 32.782057,-95.363151 29.763374)')
+        union2 = fromstr('MULTIPOINT(-96.801611 32.782057,-95.363151 29.763374)')
         qs = City.objects.filter(point__within=tx)
         self.assertRaises(TypeError, qs.unionagg, 'name')
         # Using `field_name` keyword argument in one query and specifying an
@@ -512,7 +486,7 @@
         u1 = qs.unionagg(field_name='point')
         u2 = qs.order_by('name').unionagg()
         tol = 0.00001
-        if SpatialBackend.oracle:
+        if oracle:
             union = union2
         else:
             union = union1
@@ -523,8 +497,7 @@
 
     @no_spatialite # SpatiaLite does not support abstract geometry columns
     def test18_geometryfield(self):
-        "Testing GeometryField."
-        if DISABLE: return
+        "Testing the general GeometryField."
         Feature(name='Point', geom=Point(1, 1)).save()
         Feature(name='LineString', geom=LineString((0, 0), (1, 1), (5, 5))).save()
         Feature(name='Polygon', geom=Polygon(LinearRing((0, 0), (0, 5), (5, 5), (5, 0), (0, 0)))).save()
@@ -545,60 +518,62 @@
         self.assertEqual(True, isinstance(f_4.geom, GeometryCollection))
         self.assertEqual(f_3.geom, f_4.geom[2])
 
+    @no_mysql
     def test19_centroid(self):
         "Testing the `centroid` GeoQuerySet method."
-        if DISABLE: return
         qs = State.objects.exclude(poly__isnull=True).centroid()
-        if SpatialBackend.oracle:
+        if oracle:
             tol = 0.1
-        elif SpatialBackend.spatialite:
+        elif spatialite:
             tol = 0.000001
         else:
             tol = 0.000000001
         for s in qs:
             self.assertEqual(True, s.poly.centroid.equals_exact(s.centroid, tol))
 
+    @no_mysql
     def test20_pointonsurface(self):
         "Testing the `point_on_surface` GeoQuerySet method."
-        if DISABLE: return
         # Reference values.
-        if SpatialBackend.oracle:
+        if oracle:
             # SELECT SDO_UTIL.TO_WKTGEOMETRY(SDO_GEOM.SDO_POINTONSURFACE(GEOAPP_COUNTRY.MPOLY, 0.05)) FROM GEOAPP_COUNTRY;
             ref = {'New Zealand' : fromstr('POINT (174.616364 -36.100861)', srid=4326),
                    'Texas' : fromstr('POINT (-103.002434 36.500397)', srid=4326),
                    }
 
-        elif SpatialBackend.postgis or SpatialBackend.spatialite:
+        elif postgis or spatialite:
             # Using GEOSGeometry to compute the reference point on surface values
             # -- since PostGIS also uses GEOS these should be the same.
             ref = {'New Zealand' : Country.objects.get(name='New Zealand').mpoly.point_on_surface,
                    'Texas' : Country.objects.get(name='Texas').mpoly.point_on_surface
                    }
-        for cntry in Country.objects.point_on_surface():
-            if SpatialBackend.spatialite:
+
+        for c in Country.objects.point_on_surface():
+            if spatialite:
                 # XXX This seems to be a WKT-translation-related precision issue?
                 tol = 0.00001
-            else: tol = 0.000000001
-            self.assertEqual(True, ref[cntry.name].equals_exact(cntry.point_on_surface, tol))
+            else:
+                tol = 0.000000001
+            self.assertEqual(True, ref[c.name].equals_exact(c.point_on_surface, tol))
 
+    @no_mysql
     @no_oracle
     def test21_scale(self):
         "Testing the `scale` GeoQuerySet method."
-        if DISABLE: return
         xfac, yfac = 2, 3
+        tol = 5 # XXX The low precision tolerance is for SpatiaLite
         qs = Country.objects.scale(xfac, yfac, model_att='scaled')
         for c in qs:
             for p1, p2 in zip(c.mpoly, c.scaled):
                 for r1, r2 in zip(p1, p2):
                     for c1, c2 in zip(r1.coords, r2.coords):
-                        # XXX The low precision is for SpatiaLite
-                        self.assertAlmostEqual(c1[0] * xfac, c2[0], 5)
-                        self.assertAlmostEqual(c1[1] * yfac, c2[1], 5)
+                        self.assertAlmostEqual(c1[0] * xfac, c2[0], tol)
+                        self.assertAlmostEqual(c1[1] * yfac, c2[1], tol)
 
+    @no_mysql
     @no_oracle
     def test22_translate(self):
         "Testing the `translate` GeoQuerySet method."
-        if DISABLE: return
         xfac, yfac = 5, -23
         qs = Country.objects.translate(xfac, yfac, model_att='translated')
         for c in qs:
@@ -609,57 +584,60 @@
                         self.assertAlmostEqual(c1[0] + xfac, c2[0], 5)
                         self.assertAlmostEqual(c1[1] + yfac, c2[1], 5)
 
+    @no_mysql
     def test23_numgeom(self):
         "Testing the `num_geom` GeoQuerySet method."
-        if DISABLE: return
         # Both 'countries' only have two geometries.
         for c in Country.objects.num_geom(): self.assertEqual(2, c.num_geom)
         for c in City.objects.filter(point__isnull=False).num_geom():
             # Oracle will return 1 for the number of geometries on non-collections,
             # whereas PostGIS will return None.
-            if SpatialBackend.postgis: self.assertEqual(None, c.num_geom)
-            else: self.assertEqual(1, c.num_geom)
+            if postgis:
+                self.assertEqual(None, c.num_geom)
+            else:
+                self.assertEqual(1, c.num_geom)
 
+    @no_mysql
     @no_spatialite # SpatiaLite can only count vertices in LineStrings
     def test24_numpoints(self):
         "Testing the `num_points` GeoQuerySet method."
-        if DISABLE: return
         for c in Country.objects.num_points():
             self.assertEqual(c.mpoly.num_points, c.num_points)
-        if not SpatialBackend.oracle:
+
+        if not oracle:
             # Oracle cannot count vertices in Point geometries.
             for c in City.objects.num_points(): self.assertEqual(1, c.num_points)
 
+    @no_mysql
     def test25_geoset(self):
         "Testing the `difference`, `intersection`, `sym_difference`, and `union` GeoQuerySet methods."
-        if DISABLE: return
         geom = Point(5, 23)
         tol = 1
         qs = Country.objects.all().difference(geom).sym_difference(geom).union(geom)
 
         # XXX For some reason SpatiaLite does something screwey with the Texas geometry here.  Also,
         # XXX it doesn't like the null intersection.
-        if SpatialBackend.spatialite:
+        if spatialite:
             qs = qs.exclude(name='Texas')
         else:
             qs = qs.intersection(geom)
-        
+
         for c in qs:
-            if SpatialBackend.oracle:
+            if oracle:
                 # Should be able to execute the queries; however, they won't be the same
                 # as GEOS (because Oracle doesn't use GEOS internally like PostGIS or
                 # SpatiaLite).
                 pass
             else:
                 self.assertEqual(c.mpoly.difference(geom), c.difference)
-                if not SpatialBackend.spatialite:
+                if not spatialite:
                     self.assertEqual(c.mpoly.intersection(geom), c.intersection)
                 self.assertEqual(c.mpoly.sym_difference(geom), c.sym_difference)
                 self.assertEqual(c.mpoly.union(geom), c.union)
 
+    @no_mysql
     def test26_inherited_geofields(self):
         "Test GeoQuerySet methods on inherited Geometry fields."
-        if DISABLE: return
         # Creating a Pennsylvanian city.
         mansfield = PennsylvaniaCity.objects.create(name='Mansfield', county='Tioga', point='POINT(-77.071445 41.823881)')
 
@@ -669,13 +647,12 @@
 
         self.assertEqual(1, qs.count())
         for pc in qs: self.assertEqual(32128, pc.point.srid)
-        
+
+    @no_mysql
+    @no_oracle
     @no_spatialite
-    @no_oracle
     def test27_snap_to_grid(self):
         "Testing GeoQuerySet.snap_to_grid()."
-        if DISABLE: return
-
         # Let's try and break snap_to_grid() with bad combinations of arguments.
         for bad_args in ((), range(3), range(5)):
             self.assertRaises(ValueError, Country.objects.snap_to_grid, *bad_args)
@@ -710,6 +687,48 @@
         ref = fromstr('MULTIPOLYGON(((12.4 43.87,12.45 43.87,12.45 44.1,12.5 44.1,12.5 43.87,12.45 43.87,12.4 43.87)))')
         self.failUnless(ref.equals_exact(Country.objects.snap_to_grid(0.05, 0.23, 0.5, 0.17).get(name='San Marino').snap_to_grid, tol))
 
+    @no_mysql
+    @no_spatialite
+    def test28_reverse(self):
+        "Testing GeoQuerySet.reverse_geom()."
+        coords = [ (-95.363151, 29.763374), (-95.448601, 29.713803) ]
+        Track.objects.create(name='Foo', line=LineString(coords))
+        t = Track.objects.reverse_geom().get(name='Foo')
+        coords.reverse()
+        self.assertEqual(tuple(coords), t.reverse_geom.coords)
+        if oracle:
+            self.assertRaises(TypeError, State.objects.reverse_geom)
+        
+    @no_mysql
+    @no_oracle
+    @no_spatialite
+    def test29_force_rhr(self):
+        "Testing GeoQuerySet.force_rhr()."
+        rings = ( ( (0, 0), (5, 0), (0, 5), (0, 0) ),
+                  ( (1, 1), (1, 3), (3, 1), (1, 1) ),
+                  )
+        rhr_rings = ( ( (0, 0), (0, 5), (5, 0), (0, 0) ),
+                      ( (1, 1), (3, 1), (1, 3), (1, 1) ),
+                      )
+        State.objects.create(name='Foo', poly=Polygon(*rings))
+        s = State.objects.force_rhr().get(name='Foo')
+        self.assertEqual(rhr_rings, s.force_rhr.coords)
+
+    @no_mysql
+    @no_oracle
+    @no_spatialite
+    def test29_force_rhr(self):
+        "Testing GeoQuerySet.geohash()."
+        if not connection.ops.geohash: return
+        # Reference query:
+        # SELECT ST_GeoHash(point) FROM geoapp_city WHERE name='Houston';
+        # SELECT ST_GeoHash(point, 5) FROM geoapp_city WHERE name='Houston';
+        ref_hash = '9vk1mfq8jx0c8e0386z6'
+        h1 = City.objects.geohash().get(name='Houston')
+        h2 = City.objects.geohash(precision=5).get(name='Houston')
+        self.assertEqual(ref_hash, h1.geohash)
+        self.assertEqual(ref_hash[:5], h2.geohash)
+
 from test_feeds import GeoFeedTest
 from test_regress import GeoRegressionTests
 from test_sitemaps import GeoSitemapTest
--- a/web/lib/django/contrib/gis/tests/geoapp/tests_mysql.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,186 +0,0 @@
-"""
- A limited test module is used for a limited spatial database.
-"""
-import os, unittest
-from models import Country, City, State, Feature
-from django.contrib.gis import gdal
-from django.contrib.gis.geos import *
-from django.core.exceptions import ImproperlyConfigured
-
-class GeoModelTest(unittest.TestCase):
-
-    def test01_initial_sql(self):
-        "Testing geographic initial SQL."
-        # Ensuring that data was loaded from initial SQL.
-        self.assertEqual(2, Country.objects.count())
-        self.assertEqual(8, City.objects.count())
-        self.assertEqual(2, State.objects.count())
-
-    def test02_proxy(self):
-        "Testing Lazy-Geometry support (using the GeometryProxy)."
-        #### Testing on a Point
-        pnt = Point(0, 0)
-        nullcity = City(name='NullCity', point=pnt)
-        nullcity.save()
-
-        # Making sure TypeError is thrown when trying to set with an
-        #  incompatible type.
-        for bad in [5, 2.0, LineString((0, 0), (1, 1))]:
-            try:
-                nullcity.point = bad
-            except TypeError:
-                pass
-            else:
-                self.fail('Should throw a TypeError')
-
-        # Now setting with a compatible GEOS Geometry, saving, and ensuring
-        #  the save took, notice no SRID is explicitly set.
-        new = Point(5, 23)
-        nullcity.point = new
-
-        # Ensuring that the SRID is automatically set to that of the
-        #  field after assignment, but before saving.
-        self.assertEqual(4326, nullcity.point.srid)
-        nullcity.save()
-
-        # Ensuring the point was saved correctly after saving
-        self.assertEqual(new, City.objects.get(name='NullCity').point)
-
-        # Setting the X and Y of the Point
-        nullcity.point.x = 23
-        nullcity.point.y = 5
-        # Checking assignments pre & post-save.
-        self.assertNotEqual(Point(23, 5), City.objects.get(name='NullCity').point)
-        nullcity.save()
-        self.assertEqual(Point(23, 5), City.objects.get(name='NullCity').point)
-        nullcity.delete()
-
-        #### Testing on a Polygon
-        shell = LinearRing((0, 0), (0, 100), (100, 100), (100, 0), (0, 0))
-        inner = LinearRing((40, 40), (40, 60), (60, 60), (60, 40), (40, 40))
-
-        # Creating a State object using a built Polygon
-        ply = Polygon(shell, inner)
-        nullstate = State(name='NullState', poly=ply)
-        self.assertEqual(4326, nullstate.poly.srid) # SRID auto-set from None
-        nullstate.save()
-
-        ns = State.objects.get(name='NullState')
-        self.assertEqual(ply, ns.poly)
-
-        # Testing the `ogr` and `srs` lazy-geometry properties.
-        if gdal.HAS_GDAL:
-            self.assertEqual(True, isinstance(ns.poly.ogr, gdal.OGRGeometry))
-            self.assertEqual(ns.poly.wkb, ns.poly.ogr.wkb)
-            self.assertEqual(True, isinstance(ns.poly.srs, gdal.SpatialReference))
-            self.assertEqual('WGS 84', ns.poly.srs.name)
-
-        # Changing the interior ring on the poly attribute.
-        new_inner = LinearRing((30, 30), (30, 70), (70, 70), (70, 30), (30, 30))
-        ns.poly[1] = new_inner
-        ply[1] = new_inner
-        self.assertEqual(4326, ns.poly.srid)
-        ns.save()
-        self.assertEqual(ply, State.objects.get(name='NullState').poly)
-        ns.delete()
-
-    def test03_contains_contained(self):
-        "Testing the 'contained', 'contains', and 'bbcontains' lookup types."
-        # Getting Texas, yes we were a country -- once ;)
-        texas = Country.objects.get(name='Texas')
-
-        # Seeing what cities are in Texas, should get Houston and Dallas,
-        #  and Oklahoma City because MySQL 'within' only checks on the
-        #  _bounding box_ of the Geometries.
-        qs = City.objects.filter(point__within=texas.mpoly)
-        self.assertEqual(3, qs.count())
-        cities = ['Houston', 'Dallas', 'Oklahoma City']
-        for c in qs: self.assertEqual(True, c.name in cities)
-
-        # Pulling out some cities.
-        houston = City.objects.get(name='Houston')
-        wellington = City.objects.get(name='Wellington')
-        pueblo = City.objects.get(name='Pueblo')
-        okcity = City.objects.get(name='Oklahoma City')
-        lawrence = City.objects.get(name='Lawrence')
-
-        # Now testing contains on the countries using the points for
-        #  Houston and Wellington.
-        tx = Country.objects.get(mpoly__contains=houston.point) # Query w/GEOSGeometry
-        nz = Country.objects.get(mpoly__contains=wellington.point.hex) # Query w/EWKBHEX
-        ks = State.objects.get(poly__contains=lawrence.point)
-        self.assertEqual('Texas', tx.name)
-        self.assertEqual('New Zealand', nz.name)
-        self.assertEqual('Kansas', ks.name)
-
-        # Pueblo is not contained in Texas or New Zealand.
-        self.assertEqual(0, len(Country.objects.filter(mpoly__contains=pueblo.point))) # Query w/GEOSGeometry object
-
-        # OK City is contained w/in bounding box of Texas.
-        qs = Country.objects.filter(mpoly__bbcontains=okcity.point)
-        self.assertEqual(1, len(qs))
-        self.assertEqual('Texas', qs[0].name)
-
-    def test04_disjoint(self):
-        "Testing the `disjoint` lookup type."
-        ptown = City.objects.get(name='Pueblo')
-        qs1 = City.objects.filter(point__disjoint=ptown.point)
-        self.assertEqual(7, qs1.count())
-        # TODO: This query should work in MySQL, but it appears the
-        # `MBRDisjoint` function doesn't work properly (I went down
-        # to the SQL level for debugging and still got bogus answers).
-        #qs2 = State.objects.filter(poly__disjoint=ptown.point)
-        #self.assertEqual(1, qs2.count())
-        #self.assertEqual('Kansas', qs2[0].name)
-
-    def test05_equals(self):
-        "Testing the 'same_as' and 'equals' lookup types."
-        pnt = fromstr('POINT (-95.363151 29.763374)', srid=4326)
-        c1 = City.objects.get(point=pnt)
-        c2 = City.objects.get(point__same_as=pnt)
-        c3 = City.objects.get(point__equals=pnt)
-        for c in [c1, c2, c3]: self.assertEqual('Houston', c.name)
-
-    def test06_geometryfield(self):
-        "Testing GeometryField."
-        f1 = Feature(name='Point', geom=Point(1, 1))
-        f2 = Feature(name='LineString', geom=LineString((0, 0), (1, 1), (5, 5)))
-        f3 = Feature(name='Polygon', geom=Polygon(LinearRing((0, 0), (0, 5), (5, 5), (5, 0), (0, 0))))
-        f4 = Feature(name='GeometryCollection',
-                     geom=GeometryCollection(Point(2, 2), LineString((0, 0), (2, 2)),
-                                             Polygon(LinearRing((0, 0), (0, 5), (5, 5), (5, 0), (0, 0)))))
-        f1.save()
-        f2.save()
-        f3.save()
-        f4.save()
-
-        f_1 = Feature.objects.get(name='Point')
-        self.assertEqual(True, isinstance(f_1.geom, Point))
-        self.assertEqual((1.0, 1.0), f_1.geom.tuple)
-        f_2 = Feature.objects.get(name='LineString')
-        self.assertEqual(True, isinstance(f_2.geom, LineString))
-        self.assertEqual(((0.0, 0.0), (1.0, 1.0), (5.0, 5.0)), f_2.geom.tuple)
-
-        f_3 = Feature.objects.get(name='Polygon')
-        self.assertEqual(True, isinstance(f_3.geom, Polygon))
-        f_4 = Feature.objects.get(name='GeometryCollection')
-        self.assertEqual(True, isinstance(f_4.geom, GeometryCollection))
-        self.assertEqual(f_3.geom, f_4.geom[2])
-
-    def test07_mysql_limitations(self):
-        "Testing that union(), kml(), gml() raise exceptions."
-        self.assertRaises(ImproperlyConfigured, City.objects.union, Point(5, 23), field_name='point')
-        self.assertRaises(ImproperlyConfigured, State.objects.all().kml, field_name='poly')
-        self.assertRaises(ImproperlyConfigured, Country.objects.all().gml, field_name='mpoly')
-
-from test_feeds import GeoFeedTest
-from test_regress import GeoRegressionTests
-from test_sitemaps import GeoSitemapTest
-
-def suite():
-    s = unittest.TestSuite()
-    s.addTest(unittest.makeSuite(GeoModelTest))
-    s.addTest(unittest.makeSuite(GeoFeedTest))
-    s.addTest(unittest.makeSuite(GeoSitemapTest))
-    s.addTest(unittest.makeSuite(GeoRegressionTests))
-    return s
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/tests/geogapp/fixtures/initial_data.json	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,98 @@
+[  
+  {
+    "pk": 1, 
+    "model": "geogapp.city", 
+    "fields": {
+      "name": "Houston", 
+      "point": "POINT (-95.363151 29.763374)"
+    }
+  }, 
+  {
+    "pk": 2, 
+    "model": "geogapp.city", 
+    "fields": {
+      "name": "Dallas", 
+      "point": "POINT (-96.801611 32.782057)"
+    }
+  }, 
+  {
+    "pk": 3, 
+    "model": "geogapp.city", 
+    "fields": {
+      "name": "Oklahoma City",
+      "point": "POINT (-97.521157 34.464642)"
+    }
+  }, 
+  {
+    "pk": 4, 
+    "model": "geogapp.city", 
+    "fields": {
+      "name": "Wellington",
+      "point": "POINT (174.783117 -41.315268)"
+    }
+  }, 
+  {
+    "pk": 5, 
+    "model": "geogapp.city", 
+    "fields": {
+      "name": "Pueblo", 
+      "point": "POINT (-104.609252 38.255001)"
+    }
+  }, 
+  {
+    "pk": 6, 
+    "model": "geogapp.city", 
+    "fields": {
+      "name": "Lawrence", 
+      "point": "POINT (-95.235060 38.971823)"
+    }
+  }, 
+  {
+    "pk": 7, 
+    "model": "geogapp.city", 
+    "fields": {
+      "name": "Chicago", 
+      "point": "POINT (-87.650175 41.850385)"
+    }
+  }, 
+  {
+    "pk": 8, 
+    "model": "geogapp.city", 
+    "fields": {
+      "name": "Victoria", 
+      "point": "POINT (-123.305196 48.462611)"
+    }
+  },
+  {
+    "pk": 1,
+    "model": "geogapp.zipcode",
+    "fields" : {
+       "code" : "77002",
+       "poly" : "SRID=4269;POLYGON ((-95.365015 29.772327, -95.362415 29.772327, -95.360915 29.771827, -95.354615 29.771827, -95.351515 29.772527, -95.350915 29.765327, -95.351015 29.762436, -95.350115 29.760328, -95.347515 29.758528, -95.352315 29.753928, -95.356415 29.756328, -95.358215 29.754028, -95.360215 29.756328, -95.363415 29.757128, -95.364014 29.75638, -95.363415 29.753928, -95.360015 29.751828, -95.361815 29.749528, -95.362715 29.750028, -95.367516 29.744128, -95.369316 29.745128, -95.373916 29.744128, -95.380116 29.738028, -95.387916 29.727929, -95.388516 29.729629, -95.387916 29.732129, -95.382916 29.737428, -95.376616 29.742228, -95.372616 29.747228, -95.378601 29.750846, -95.378616 29.752028, -95.378616 29.754428, -95.376016 29.754528, -95.374616 29.759828, -95.373616 29.761128, -95.371916 29.763928, -95.372316 29.768727, -95.365884 29.76791, -95.366015 29.767127, -95.358715 29.765327, -95.358615 29.766327, -95.359115 29.767227, -95.360215 29.767027, -95.362783 29.768267, -95.365315 29.770527, -95.365015 29.772327))"
+       }
+  },
+  {
+    "pk": 2,
+    "model": "geogapp.zipcode",
+    "fields" : {
+       "code" : "77005",
+       "poly" : "SRID=4269;POLYGON ((-95.447918 29.727275, -95.428017 29.728729, -95.421117 29.729029, -95.418617 29.727629, -95.418517 29.726429, -95.402117 29.726629, -95.402117 29.725729, -95.395316 29.725729, -95.391916 29.726229, -95.389716 29.725829, -95.396517 29.715429, -95.397517 29.715929, -95.400917 29.711429, -95.411417 29.715029, -95.418417 29.714729, -95.418317 29.70623, -95.440818 29.70593, -95.445018 29.70683, -95.446618 29.70763, -95.447418 29.71003, -95.447918 29.727275))"
+    }
+  },
+  {
+    "pk": 3,
+    "model": "geogapp.zipcode",
+    "fields" : {
+       "code" : "77025",
+       "poly" : "SRID=4269;POLYGON ((-95.418317 29.70623, -95.414717 29.706129, -95.414617 29.70533, -95.418217 29.70533, -95.419817 29.69533, -95.419484 29.694196, -95.417166 29.690901, -95.414517 29.69433, -95.413317 29.69263, -95.412617 29.68973, -95.412817 29.68753, -95.414087 29.685055, -95.419165 29.685428, -95.421617 29.68513, -95.425717 29.67983, -95.425017 29.67923, -95.424517 29.67763, -95.427418 29.67763, -95.438018 29.664631, -95.436713 29.664411, -95.440118 29.662231, -95.439218 29.661031, -95.437718 29.660131, -95.435718 29.659731, -95.431818 29.660331, -95.441418 29.656631, -95.441318 29.656331, -95.441818 29.656131, -95.441718 29.659031, -95.441118 29.661031, -95.446718 29.656431, -95.446518 29.673431, -95.446918 29.69013, -95.447418 29.71003, -95.446618 29.70763, -95.445018 29.70683, -95.440818 29.70593, -95.418317 29.70623))"
+    }
+  },
+  {
+    "pk": 4,
+    "model": "geogapp.zipcode",
+    "fields" : {
+       "code" : "77401",
+       "poly" : "SRID=4269;POLYGON ((-95.447918 29.727275, -95.447418 29.71003, -95.446918 29.69013, -95.454318 29.68893, -95.475819 29.68903, -95.475819 29.69113, -95.484419 29.69103, -95.484519 29.69903, -95.480419 29.70133, -95.480419 29.69833, -95.474119 29.69833, -95.474119 29.70453, -95.472719 29.71283, -95.468019 29.71293, -95.468219 29.720229, -95.464018 29.720229, -95.464118 29.724529, -95.463018 29.725929, -95.459818 29.726129, -95.459918 29.720329, -95.451418 29.720429, -95.451775 29.726303, -95.451318 29.727029, -95.447918 29.727275))"
+    }
+  }
+]
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/tests/geogapp/models.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,20 @@
+from django.contrib.gis.db import models
+
+class City(models.Model):
+    name = models.CharField(max_length=30)
+    point = models.PointField(geography=True)
+    objects = models.GeoManager()
+    def __unicode__(self): return self.name
+
+class Zipcode(models.Model):
+    code = models.CharField(max_length=10)
+    poly = models.PolygonField(geography=True)
+    objects = models.GeoManager()
+    def __unicode__(self): return self.name
+
+class County(models.Model):
+    name = models.CharField(max_length=25)
+    state = models.CharField(max_length=20)
+    mpoly = models.MultiPolygonField(geography=True)
+    objects = models.GeoManager()
+    def __unicode__(self): return ' County, '.join([self.name, self.state])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/gis/tests/geogapp/tests.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,74 @@
+"""
+Tests for geography support in PostGIS 1.5+
+"""
+import os
+from django.contrib.gis import gdal
+from django.contrib.gis.measure import D
+from django.test import TestCase
+from models import City, County, Zipcode
+
+class GeographyTest(TestCase):
+
+    def test01_fixture_load(self):
+        "Ensure geography features loaded properly."
+        self.assertEqual(8, City.objects.count())
+
+    def test02_distance_lookup(self):
+        "Testing GeoQuerySet distance lookup support on non-point geography fields."
+        z = Zipcode.objects.get(code='77002')
+        cities1 = list(City.objects
+                       .filter(point__distance_lte=(z.poly, D(mi=500)))
+                       .order_by('name')
+                       .values_list('name', flat=True))
+        cities2 = list(City.objects
+                       .filter(point__dwithin=(z.poly, D(mi=500)))
+                       .order_by('name')
+                       .values_list('name', flat=True))
+        for cities in [cities1, cities2]:
+            self.assertEqual(['Dallas', 'Houston', 'Oklahoma City'], cities)
+
+    def test03_distance_method(self):
+        "Testing GeoQuerySet.distance() support on non-point geography fields."
+        # `GeoQuerySet.distance` is not allowed geometry fields.
+        htown = City.objects.get(name='Houston')
+        qs = Zipcode.objects.distance(htown.point)
+
+    def test04_invalid_operators_functions(self):
+        "Ensuring exceptions are raised for operators & functions invalid on geography fields."
+        # Only a subset of the geometry functions & operator are available
+        # to PostGIS geography types.  For more information, visit:
+        #  http://postgis.refractions.net/documentation/manual-1.5/ch08.html#PostGIS_GeographyFunctions
+        z = Zipcode.objects.get(code='77002')
+        # ST_Within not available.
+        self.assertRaises(ValueError, City.objects.filter(point__within=z.poly).count)
+        # `@` operator not available.
+        self.assertRaises(ValueError, City.objects.filter(point__contained=z.poly).count)
+
+    def test05_geography_layermapping(self):
+        "Testing LayerMapping support on models with geography fields."
+        # There is a similar test in `layermap` that uses the same data set,
+        # but the County model here is a bit different.
+        if not gdal.HAS_GDAL: return
+        from django.contrib.gis.utils import LayerMapping
+
+        # Getting the shapefile and mapping dictionary.
+        shp_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'data'))
+        co_shp = os.path.join(shp_path, 'counties', 'counties.shp')
+        co_mapping = {'name' : 'Name',
+                      'state' : 'State',
+                      'mpoly' : 'MULTIPOLYGON',
+                      }
+
+        # Reference county names, number of polygons, and state names.
+        names = ['Bexar', 'Galveston', 'Harris', 'Honolulu', 'Pueblo']
+        num_polys = [1, 2, 1, 19, 1] # Number of polygons for each.
+        st_names = ['Texas', 'Texas', 'Texas', 'Hawaii', 'Colorado']
+
+        lm = LayerMapping(County, co_shp, co_mapping, source_srs=4269, unique='name')
+        lm.save(silent=True, strict=True)
+
+        for c, name, num_poly, state in zip(County.objects.order_by('name'), names, num_polys, st_names):
+            self.assertEqual(4326, c.mpoly.srid)
+            self.assertEqual(num_poly, len(c.mpoly))
+            self.assertEqual(name, c.name)
+            self.assertEqual(state, c.state)
--- a/web/lib/django/contrib/gis/tests/geometries.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/geometries.py	Tue May 25 02:43:45 2010 +0200
@@ -12,7 +12,7 @@
         if not self.bad:
             m = wkt_regex.match(wkt)
             if not m:
-                raise Exception, 'Improper WKT: "%s"' % wkt
+                raise Exception('Improper WKT: "%s"' % wkt)
             self.geo_type = m.group('type')
 
         for key, value in kwargs.items():
@@ -171,3 +171,10 @@
                        not_equal=True,
                        ),
               )
+
+# For testing HEX(EWKB).
+ogc_hex = '01010000000000000000000000000000000000F03F'
+# `SELECT ST_AsHEXEWKB(ST_GeomFromText('POINT(0 1)', 4326));`
+hexewkb_2d = '0101000020E61000000000000000000000000000000000F03F'
+# `SELECT ST_AsHEXEWKB(ST_GeomFromEWKT('SRID=4326;POINT(0 1 2)'));`
+hexewkb_3d = '01010000A0E61000000000000000000000000000000000F03F0000000000000040'
--- a/web/lib/django/contrib/gis/tests/layermap/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/layermap/models.py	Tue May 25 02:43:45 2010 +0200
@@ -29,6 +29,20 @@
     path = models.LineStringField()
     objects = models.GeoManager()
 
+# Same as `City` above, but for testing model inheritance.
+class CityBase(models.Model):
+    name = models.CharField(max_length=25)
+    population = models.IntegerField()
+    density = models.DecimalField(max_digits=7, decimal_places=1)
+    point = models.PointField()
+    objects = models.GeoManager()
+
+class ICity1(CityBase):
+    dt = models.DateField()
+    
+class ICity2(ICity1):
+    dt_time = models.DateTimeField(auto_now=True)
+
 # Mapping dictionaries for the models above.
 co_mapping = {'name' : 'Name',
               'state' : {'name' : 'State'}, # ForeignKey's use another mapping dictionary for the _related_ Model (State in this case).
--- a/web/lib/django/contrib/gis/tests/layermap/tests.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/layermap/tests.py	Tue May 25 02:43:45 2010 +0200
@@ -1,15 +1,19 @@
-import os, unittest
-from copy import copy
+import os
+import unittest
 from decimal import Decimal
-from models import City, County, CountyFeat, Interstate, State, city_mapping, co_mapping, cofeat_mapping, inter_mapping
-from django.contrib.gis.db.backend import SpatialBackend
+
+from django.utils.copycompat import copy
+
+from django.contrib.gis.gdal import DataSource
+from django.contrib.gis.tests.utils import mysql
 from django.contrib.gis.utils.layermapping import LayerMapping, LayerMapError, InvalidDecimal, MissingForeignKey
-from django.contrib.gis.gdal import DataSource
+
+from models import City, County, CountyFeat, Interstate, ICity1, ICity2, State, city_mapping, co_mapping, cofeat_mapping, inter_mapping
 
-shp_path = os.path.dirname(__file__)
-city_shp = os.path.join(shp_path, '../data/cities/cities.shp')
-co_shp = os.path.join(shp_path, '../data/counties/counties.shp')
-inter_shp = os.path.join(shp_path, '../data/interstates/interstates.shp')
+shp_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'data'))
+city_shp = os.path.join(shp_path, 'cities', 'cities.shp')
+co_shp = os.path.join(shp_path, 'counties', 'counties.shp')
+inter_shp = os.path.join(shp_path, 'interstates', 'interstates.shp')
 
 # Dictionaries to hold what's expected in the county shapefile.  
 NAMES  = ['Bexar', 'Galveston', 'Harris', 'Honolulu', 'Pueblo']
@@ -84,7 +88,7 @@
             lm.save(silent=True, strict=True)
         except InvalidDecimal:
             # No transactions for geoms on MySQL; delete added features.
-            if SpatialBackend.mysql: Interstate.objects.all().delete()
+            if mysql: Interstate.objects.all().delete()
         else:
             self.fail('Should have failed on strict import with invalid decimal values.')
 
@@ -149,7 +153,7 @@
             self.assertRaises(e, LayerMapping, County, co_shp, co_mapping, transform=False, unique=arg)
 
         # No source reference system defined in the shapefile, should raise an error.
-        if not SpatialBackend.mysql:
+        if not mysql:
             self.assertRaises(LayerMapError, LayerMapping, County, co_shp, co_mapping)
 
         # Passing in invalid ForeignKey mapping parameters -- must be a dictionary
@@ -242,6 +246,26 @@
             lm.save(step=st, strict=True)
             self.county_helper(county_feat=False)
 
+    def test06_model_inheritance(self):
+        "Tests LayerMapping on inherited models.  See #12093."
+        icity_mapping = {'name' : 'Name',
+                         'population' : 'Population',
+                         'density' : 'Density',
+                         'point' : 'POINT',
+                         'dt' : 'Created',
+                         }
+
+        # Parent model has geometry field.
+        lm1 = LayerMapping(ICity1, city_shp, icity_mapping)
+        lm1.save()
+
+        # Grandparent has geometry field.
+        lm2 = LayerMapping(ICity2, city_shp, icity_mapping)
+        lm2.save()
+
+        self.assertEqual(6, ICity1.objects.count())
+        self.assertEqual(3, ICity2.objects.count())
+        
 def suite():
     s = unittest.TestSuite()
     s.addTest(unittest.makeSuite(LayerMapTest))
--- a/web/lib/django/contrib/gis/tests/layermap/tests_mysql.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-from tests import *
--- a/web/lib/django/contrib/gis/tests/relatedapp/tests.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/relatedapp/tests.py	Tue May 25 02:43:45 2010 +0200
@@ -1,8 +1,8 @@
 import os, unittest
 from django.contrib.gis.geos import *
-from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.gis.db.models import Collect, Count, Extent, F, Union
-from django.contrib.gis.tests.utils import no_mysql, no_oracle, no_spatialite
+from django.contrib.gis.geometry.backend import Geometry
+from django.contrib.gis.tests.utils import mysql, oracle, postgis, spatialite, no_mysql, no_oracle, no_spatialite
 from django.conf import settings
 from models import City, Location, DirectoryEntry, Parcel, Book, Author
 
@@ -19,7 +19,6 @@
             loc = Location.objects.create(point=Point(lon, lat))
             c = City.objects.create(name=name, state=state, location=loc)
 
-    @no_oracle # TODO: Fix select_related() problems w/Oracle and pagination.
     def test02_select_related(self):
         "Testing `select_related` on geographic models (see #7126)."
         qs1 = City.objects.all()
@@ -34,7 +33,6 @@
                 self.assertEqual(Point(lon, lat), c.location.point)
 
     @no_mysql
-    @no_oracle # Pagination problem is implicated in this test as well.
     def test03_transform_related(self):
         "Testing the `transform` GeoQuerySet method on related geographic models."
         # All the transformations are to state plane coordinate systems using
@@ -95,7 +93,7 @@
         # geometries than PostGIS.  The second union aggregate is for a union
         # query that includes limiting information in the WHERE clause (in other
         # words a `.filter()` precedes the call to `.unionagg()`).
-        if SpatialBackend.oracle:
+        if oracle:
             ref_u1 = MultiPoint(p3, p1, p2, srid=4326)
             ref_u2 = MultiPoint(p3, p2, srid=4326)
         else:
@@ -144,7 +142,7 @@
         self.assertEqual(1, len(qs))
         self.assertEqual('P2', qs[0].name)
 
-        if not SpatialBackend.mysql:
+        if not mysql:
             # This time center2 is in a different coordinate system and needs
             # to be wrapped in transformation SQL.
             qs = Parcel.objects.filter(center2__within=F('border1'))
@@ -157,7 +155,7 @@
         self.assertEqual(1, len(qs))
         self.assertEqual('P1', qs[0].name)
 
-        if not SpatialBackend.mysql:
+        if not mysql:
             # This time the city column should be wrapped in transformation SQL.
             qs = Parcel.objects.filter(border2__contains=F('city__location__point'))
             self.assertEqual(1, len(qs))
@@ -175,8 +173,8 @@
         for m, d, t in zip(gqs, gvqs, gvlqs):
             # The values should be Geometry objects and not raw strings returned
             # by the spatial database.
-            self.failUnless(isinstance(d['point'], SpatialBackend.Geometry))
-            self.failUnless(isinstance(t[1], SpatialBackend.Geometry))
+            self.failUnless(isinstance(d['point'], Geometry))
+            self.failUnless(isinstance(t[1], Geometry))
             self.assertEqual(m.point, d['point'])
             self.assertEqual(m.point, t[1])
 
@@ -238,7 +236,7 @@
         # as Dallas.
         dallas = City.objects.get(name='Dallas')
         ftworth = City.objects.create(name='Fort Worth', state='TX', location=dallas.location)
-        
+
         # Count annotation should be 2 for the Dallas location now.
         loc = Location.objects.annotate(num_cities=Count('city')).get(id=dallas.location.id)
         self.assertEqual(2, loc.num_cities)
@@ -279,11 +277,11 @@
     def test14_collect(self):
         "Testing the `collect` GeoQuerySet method and `Collect` aggregate."
         # Reference query:
-        # SELECT AsText(ST_Collect("relatedapp_location"."point")) FROM "relatedapp_city" LEFT OUTER JOIN 
-        #    "relatedapp_location" ON ("relatedapp_city"."location_id" = "relatedapp_location"."id") 
+        # SELECT AsText(ST_Collect("relatedapp_location"."point")) FROM "relatedapp_city" LEFT OUTER JOIN
+        #    "relatedapp_location" ON ("relatedapp_city"."location_id" = "relatedapp_location"."id")
         #    WHERE "relatedapp_city"."state" = 'TX';
         ref_geom = fromstr('MULTIPOINT(-97.516111 33.058333,-96.801611 32.782057,-95.363151 29.763374,-96.801611 32.782057)')
-        
+
         c1 = City.objects.filter(state='TX').collect(field_name='location__point')
         c2 = City.objects.filter(state='TX').aggregate(Collect('location__point'))['location__point__collect']
 
--- a/web/lib/django/contrib/gis/tests/relatedapp/tests_mysql.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-from tests import *
--- a/web/lib/django/contrib/gis/tests/test_measure.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/test_measure.py	Tue May 25 02:43:45 2010 +0200
@@ -95,6 +95,8 @@
 
         d3 = d1 * 2
         self.assertEqual(d3.m, 200)
+        d3 = 2 * d1
+        self.assertEqual(d3.m, 200)
         d3 *= 5
         self.assertEqual(d3.m, 1000)
         
@@ -248,6 +250,8 @@
 
         a3 = a1 * 2
         self.assertEqual(a3.sq_m, 200)
+        a3 = 2 * a1
+        self.assertEqual(a3.sq_m, 200)
         a3 *= 5
         self.assertEqual(a3.sq_m, 1000)
         
@@ -319,7 +323,6 @@
         self.assertEqual(repr(a1), 'Area(sq_m=100.0)')
         self.assertEqual(repr(a2), 'Area(sq_km=3.5)')
 
-        
 def suite():
     s = unittest.TestSuite()
     s.addTest(unittest.makeSuite(DistanceTest))
--- a/web/lib/django/contrib/gis/tests/test_spatialrefsys.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/test_spatialrefsys.py	Tue May 25 02:43:45 2010 +0200
@@ -1,8 +1,7 @@
 import unittest
-from django.contrib.gis.db.backend import SpatialBackend
+
+from django.db import connection
 from django.contrib.gis.tests.utils import mysql, no_mysql, oracle, postgis, spatialite
-if not mysql:
-    from django.contrib.gis.models import SpatialRefSys
 
 test_srs = ({'srid' : 4326,
              'auth_name' : ('EPSG', True),
@@ -28,9 +27,12 @@
              },
             )
 
-if SpatialBackend.postgis:
-    major, minor1, minor2 = SpatialBackend.version
-    POSTGIS_14 = major >=1 and minor1 >= 4
+if oracle:
+    from django.contrib.gis.db.backends.oracle.models import SpatialRefSys
+elif postgis:
+    from django.contrib.gis.db.backends.postgis.models import SpatialRefSys
+elif spatialite:
+    from django.contrib.gis.db.backends.spatialite.models import SpatialRefSys
 
 class SpatialRefSysTest(unittest.TestCase):
 
@@ -52,7 +54,7 @@
 
             # No proj.4 and different srtext on oracle backends :(
             if postgis:
-                if POSTGIS_14:
+                if connection.ops.spatial_version >= (1, 4, 0):
                     srtext = sd['srtext14']
                 else:
                     srtext = sd['srtext']
@@ -79,7 +81,7 @@
                 self.assertEqual(sd['proj4'], srs.proj4)
                 # No `srtext` field in the `spatial_ref_sys` table in SpatiaLite
                 if not spatialite:
-                    if POSTGIS_14:
+                    if connection.ops.spatial_version >= (1, 4, 0):
                         srtext = sd['srtext14']
                     else:
                         srtext = sd['srtext']
--- a/web/lib/django/contrib/gis/tests/utils.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/tests/utils.py	Tue May 25 02:43:45 2010 +0200
@@ -1,11 +1,12 @@
 from django.conf import settings
+from django.db import DEFAULT_DB_ALIAS
 
 # function that will pass a test.
 def pass_test(*args): return
 
 def no_backend(test_func, backend):
     "Use this decorator to disable test on specified backend."
-    if settings.DATABASE_ENGINE == backend:
+    if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'].rsplit('.')[-1] == backend:
         return pass_test
     else:
         return test_func
@@ -13,12 +14,13 @@
 # Decorators to disable entire test functions for specific
 # spatial backends.
 def no_oracle(func): return no_backend(func, 'oracle')
-def no_postgis(func): return no_backend(func, 'postgresql_psycopg2')
+def no_postgis(func): return no_backend(func, 'postgis')
 def no_mysql(func): return no_backend(func, 'mysql')
-def no_spatialite(func): return no_backend(func, 'sqlite3')
+def no_spatialite(func): return no_backend(func, 'spatialite')
 
 # Shortcut booleans to omit only portions of tests.
-oracle  = settings.DATABASE_ENGINE == 'oracle'
-postgis = settings.DATABASE_ENGINE == 'postgresql_psycopg2' 
-mysql   = settings.DATABASE_ENGINE == 'mysql'
-spatialite = settings.DATABASE_ENGINE == 'sqlite3'
+_default_db = settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'].rsplit('.')[-1]
+oracle  = _default_db == 'oracle'
+postgis = _default_db == 'postgis'
+mysql   = _default_db == 'mysql'
+spatialite = _default_db == 'spatialite'
--- a/web/lib/django/contrib/gis/utils/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/utils/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -6,11 +6,11 @@
 if HAS_GDAL:
     from django.contrib.gis.utils.ogrinfo import ogrinfo, sample
     from django.contrib.gis.utils.ogrinspect import mapping, ogrinspect
-    from django.contrib.gis.utils.srs import add_postgis_srs
+    from django.contrib.gis.utils.srs import add_postgis_srs, add_srs_entry
     try:
         # LayerMapping requires DJANGO_SETTINGS_MODULE to be set, 
         # so this needs to be in try/except.
-        from django.contrib.gis.utils.layermapping import LayerMapping
+        from django.contrib.gis.utils.layermapping import LayerMapping, LayerMapError
     except:
         pass
     
--- a/web/lib/django/contrib/gis/utils/layermapping.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/utils/layermapping.py	Tue May 25 02:43:45 2010 +0200
@@ -3,115 +3,15 @@
  The LayerMapping class provides a way to map the contents of OGR
  vector files (e.g. SHP files) to Geographic-enabled Django models.
 
- This grew out of my personal needs, specifically the code repetition
- that went into pulling geometries and fields out of an OGR layer,
- converting to another coordinate system (e.g. WGS84), and then inserting
- into a GeoDjango model.
-
- Please report any bugs encountered using this utility.
-
- Requirements:  OGR C Library (from GDAL) required.
-
- Usage: 
-  lm = LayerMapping(model, source_file, mapping) where,
-
-  model:
-   GeoDjango model (not an instance)
-
-  data:
-   OGR-supported data source file (e.g. a shapefile) or
-    gdal.DataSource instance
-
-  mapping:
-   A python dictionary, keys are strings corresponding
-   to the GeoDjango model field, and values correspond to
-   string field names for the OGR feature, or if the model field
-   is a geographic then it should correspond to the OGR
-   geometry type, e.g. 'POINT', 'LINESTRING', 'POLYGON'.
-
- Keyword Args:
-  layer:
-   The index of the layer to use from the Data Source (defaults to 0)
-
-  source_srs:
-   Use this to specify the source SRS manually (for example, 
-   some shapefiles don't come with a '.prj' file).  An integer SRID,
-   a string WKT, and SpatialReference objects are valid parameters.
-
-  encoding:
-   Specifies the encoding of the string in the OGR data source.
-   For example, 'latin-1', 'utf-8', and 'cp437' are all valid
-   encoding parameters.
-
-  transaction_mode:
-   May be 'commit_on_success' (default) or 'autocommit'.
-
-  transform:
-   Setting this to False will disable all coordinate transformations.  
-
-  unique:
-   Setting this to the name, or a tuple of names, from the given
-   model will create models unique only to the given name(s).
-   Geometries will from each feature will be added into the collection
-   associated with the unique model.  Forces transaction mode to
-   be 'autocommit'.
-
-Example:
-
- 1. You need a GDAL-supported data source, like a shapefile.
-
-  Assume we're using the test_poly SHP file:
-  >>> from django.contrib.gis.gdal import DataSource
-  >>> ds = DataSource('test_poly.shp')
-  >>> layer = ds[0]
-  >>> print layer.fields # Exploring the fields in the layer, we only want the 'str' field.
-  ['float', 'int', 'str']
-  >>> print len(layer) # getting the number of features in the layer (should be 3)
-  3
-  >>> print layer.geom_type # Should be 3 (a Polygon)
-  3
-  >>> print layer.srs # WGS84
-  GEOGCS["GCS_WGS_1984",
-      DATUM["WGS_1984",
-          SPHEROID["WGS_1984",6378137,298.257223563]],
-      PRIMEM["Greenwich",0],
-      UNIT["Degree",0.017453292519943295]]
-
- 2. Now we define our corresponding Django model (make sure to use syncdb):
-
-  from django.contrib.gis.db import models
-  class TestGeo(models.Model, models.GeoMixin):
-      name = models.CharField(maxlength=25) # corresponds to the 'str' field
-      poly = models.PolygonField(srid=4269) # we want our model in a different SRID
-      objects = models.GeoManager()
-      def __str__(self):
-          return 'Name: %s' % self.name
-
- 3. Use LayerMapping to extract all the features and place them in the database:
-
-  >>> from django.contrib.gis.utils import LayerMapping
-  >>> from geoapp.models import TestGeo
-  >>> mapping = {'name' : 'str', # The 'name' model field maps to the 'str' layer field.
-                 'poly' : 'POLYGON', # For geometry fields use OGC name.
-                 } # The mapping is a dictionary
-  >>> lm = LayerMapping(TestGeo, 'test_poly.shp', mapping) 
-  >>> lm.save(verbose=True) # Save the layermap, imports the data. 
-  Saved: Name: 1
-  Saved: Name: 2
-  Saved: Name: 3
-
- LayerMapping just transformed the three geometries from the SHP file from their
- source spatial reference system (WGS84) to the spatial reference system of
- the GeoDjango model (NAD83).  If no spatial reference system is defined for
- the layer, use the `source_srs` keyword with a SpatialReference object to
- specify one.
+ For more information, please consult the GeoDjango documentation:
+   http://geodjango.org/docs/layermapping.html
 """
 import sys
 from datetime import date, datetime
 from decimal import Decimal
 from django.core.exceptions import ObjectDoesNotExist
+from django.db import connections, DEFAULT_DB_ALIAS
 from django.contrib.gis.db.models import GeometryField
-from django.contrib.gis.db.backend import SpatialBackend
 from django.contrib.gis.gdal import CoordTransform, DataSource, \
     OGRException, OGRGeometry, OGRGeomType, SpatialReference
 from django.contrib.gis.gdal.field import \
@@ -128,11 +28,14 @@
 
 class LayerMapping(object):
     "A class that maps OGR Layers to GeoDjango Models."
-    
+
     # Acceptable 'base' types for a multi-geometry type.
     MULTI_TYPES = {1 : OGRGeomType('MultiPoint'),
                    2 : OGRGeomType('MultiLineString'),
                    3 : OGRGeomType('MultiPolygon'),
+                   OGRGeomType('Point25D').num : OGRGeomType('MultiPoint25D'),
+                   OGRGeomType('LineString25D').num : OGRGeomType('MultiLineString25D'),
+                   OGRGeomType('Polygon25D').num : OGRGeomType('MultiPolygon25D'),
                    }
 
     # Acceptable Django field types and corresponding acceptable OGR
@@ -161,10 +64,10 @@
                          'commit_on_success' : transaction.commit_on_success,
                          }
 
-    def __init__(self, model, data, mapping, layer=0, 
+    def __init__(self, model, data, mapping, layer=0,
                  source_srs=None, encoding=None,
-                 transaction_mode='commit_on_success', 
-                 transform=True, unique=None):
+                 transaction_mode='commit_on_success',
+                 transform=True, unique=None, using=DEFAULT_DB_ALIAS):
         """
         A LayerMapping object is initialized using the given Model (not an instance),
         a DataSource (or string path to an OGR-supported data file), and a mapping
@@ -178,20 +81,23 @@
             self.ds = data
         self.layer = self.ds[layer]
 
+        self.using = using
+        self.spatial_backend = connections[using].ops
+
         # Setting the mapping & model attributes.
         self.mapping = mapping
         self.model = model
- 
+
         # Checking the layer -- intitialization of the object will fail if
         # things don't check out before hand.
         self.check_layer()
 
-        # Getting the geometry column associated with the model (an 
+        # Getting the geometry column associated with the model (an
         # exception will be raised if there is no geometry column).
-        if SpatialBackend.mysql:
+        if self.spatial_backend.mysql:
             transform = False
         else:
-            self.geo_col = self.geometry_column()
+            self.geo_field = self.geometry_field()
 
         # Checking the source spatial reference system, and getting
         # the coordinate transformation object (unless the `transform`
@@ -219,14 +125,17 @@
         else:
             self.unique = None
 
-        # Setting the transaction decorator with the function in the 
+        # Setting the transaction decorator with the function in the
         # transaction modes dictionary.
         if transaction_mode in self.TRANSACTION_MODES:
             self.transaction_decorator = self.TRANSACTION_MODES[transaction_mode]
             self.transaction_mode = transaction_mode
         else:
             raise LayerMapError('Unrecognized transaction mode: %s' % transaction_mode)
-    
+
+        if using is None:
+            pass
+
     #### Checking routines used during initialization ####
     def check_fid_range(self, fid_range):
         "This checks the `fid_range` keyword."
@@ -282,30 +191,40 @@
                 if self.geom_field:
                     raise LayerMapError('LayerMapping does not support more than one GeometryField per model.')
 
+                # Getting the coordinate dimension of the geometry field.
+                coord_dim = model_field.dim
+
                 try:
-                    gtype = OGRGeomType(ogr_name)
+                    if coord_dim == 3:
+                        gtype = OGRGeomType(ogr_name + '25D')
+                    else:
+                        gtype = OGRGeomType(ogr_name)
                 except OGRException:
                     raise LayerMapError('Invalid mapping for GeometryField "%s".' % field_name)
 
                 # Making sure that the OGR Layer's Geometry is compatible.
                 ltype = self.layer.geom_type
-                if not (gtype == ltype or self.make_multi(ltype, model_field)):
-                    raise LayerMapError('Invalid mapping geometry; model has %s, feature has %s.' % (fld_name, gtype))
+                if not (ltype.name.startswith(gtype.name) or self.make_multi(ltype, model_field)):
+                    raise LayerMapError('Invalid mapping geometry; model has %s%s, '
+                                        'layer geometry type is %s.' %
+                                        (fld_name, (coord_dim == 3 and '(dim=3)') or '', ltype))
 
                 # Setting the `geom_field` attribute w/the name of the model field
-                # that is a Geometry.
+                # that is a Geometry.  Also setting the coordinate dimension
+                # attribute.
                 self.geom_field = field_name
+                self.coord_dim = coord_dim
                 fields_val = model_field
             elif isinstance(model_field, models.ForeignKey):
                 if isinstance(ogr_name, dict):
                     # Is every given related model mapping field in the Layer?
                     rel_model = model_field.rel.to
-                    for rel_name, ogr_field in ogr_name.items(): 
+                    for rel_name, ogr_field in ogr_name.items():
                         idx = check_ogr_fld(ogr_field)
                         try:
                             rel_field = rel_model._meta.get_field(rel_name)
                         except models.fields.FieldDoesNotExist:
-                            raise LayerMapError('ForeignKey mapping field "%s" not in %s fields.' % 
+                            raise LayerMapError('ForeignKey mapping field "%s" not in %s fields.' %
                                                 (rel_name, rel_model.__class__.__name__))
                     fields_val = rel_model
                 else:
@@ -321,25 +240,25 @@
 
                 # Can the OGR field type be mapped to the Django field type?
                 if not issubclass(ogr_field, self.FIELD_TYPES[model_field.__class__]):
-                    raise LayerMapError('OGR field "%s" (of type %s) cannot be mapped to Django %s.' % 
+                    raise LayerMapError('OGR field "%s" (of type %s) cannot be mapped to Django %s.' %
                                         (ogr_field, ogr_field.__name__, fld_name))
                 fields_val = model_field
-        
+
             self.fields[field_name] = fields_val
 
     def check_srs(self, source_srs):
         "Checks the compatibility of the given spatial reference object."
-        from django.contrib.gis.models import SpatialRefSys
+
         if isinstance(source_srs, SpatialReference):
             sr = source_srs
-        elif isinstance(source_srs, SpatialRefSys):
+        elif isinstance(source_srs, self.spatial_backend.spatial_ref_sys()):
             sr = source_srs.srs
         elif isinstance(source_srs, (int, basestring)):
             sr = SpatialReference(source_srs)
         else:
             # Otherwise just pulling the SpatialReference from the layer
             sr = self.layer.srs
-        
+
         if not sr:
             raise LayerMapError('No source reference system defined.')
         else:
@@ -349,7 +268,7 @@
         "Checks the `unique` keyword parameter -- may be a sequence or string."
         if isinstance(unique, (list, tuple)):
             # List of fields to determine uniqueness with
-            for attr in unique: 
+            for attr in unique:
                 if not attr in self.mapping: raise ValueError
         elif isinstance(unique, basestring):
             # Only a single field passed in.
@@ -370,7 +289,7 @@
         # dictionary mapping.
         for field_name, ogr_name in self.mapping.items():
             model_field = self.fields[field_name]
-            
+
             if isinstance(model_field, GeometryField):
                 # Verify OGR geometry.
                 val = self.verify_geom(feat.geom, model_field)
@@ -385,7 +304,7 @@
             # Setting the keyword arguments for the field name with the
             # value obtained above.
             kwargs[field_name] = val
-            
+
         return kwargs
 
     def unique_kwargs(self, kwargs):
@@ -403,11 +322,11 @@
     def verify_ogr_field(self, ogr_field, model_field):
         """
         Verifies if the OGR Field contents are acceptable to the Django
-        model field.  If they are, the verified value is returned, 
+        model field.  If they are, the verified value is returned,
         otherwise the proper exception is raised.
         """
-        if (isinstance(ogr_field, OFTString) and 
-            isinstance(model_field, (models.CharField, models.TextField))): 
+        if (isinstance(ogr_field, OFTString) and
+            isinstance(model_field, (models.CharField, models.TextField))):
             if self.encoding:
                 # The encoding for OGR data sources may be specified here
                 # (e.g., 'cp437' for Census Bureau boundary files).
@@ -432,14 +351,14 @@
             # Maximum amount of precision, or digits to the left of the decimal.
             max_prec = model_field.max_digits - model_field.decimal_places
 
-            # Getting the digits to the left of the decimal place for the 
+            # Getting the digits to the left of the decimal place for the
             # given decimal.
             if d_idx < 0:
                 n_prec = len(digits[:d_idx])
             else:
                 n_prec = len(digits) + d_idx
 
-            # If we have more than the maximum digits allowed, then throw an 
+            # If we have more than the maximum digits allowed, then throw an
             # InvalidDecimal exception.
             if n_prec > max_prec:
                 raise InvalidDecimal('A DecimalField with max_digits %d, decimal_places %d must round to an absolute value less than 10^%d.' %
@@ -462,7 +381,7 @@
         mapping.
         """
         # TODO: It is expensive to retrieve a model for every record --
-        #  explore if an efficient mechanism exists for caching related 
+        #  explore if an efficient mechanism exists for caching related
         #  ForeignKey models.
 
         # Constructing and verifying the related model keyword arguments.
@@ -475,13 +394,17 @@
             return rel_model.objects.get(**fk_kwargs)
         except ObjectDoesNotExist:
             raise MissingForeignKey('No ForeignKey %s model found with keyword arguments: %s' % (rel_model.__name__, fk_kwargs))
-            
+
     def verify_geom(self, geom, model_field):
         """
         Verifies the geometry -- will construct and return a GeometryCollection
         if necessary (for example if the model field is MultiPolygonField while
         the mapped shapefile only contains Polygons).
         """
+        # Downgrade a 3D geom to a 2D one, if necessary.
+        if self.coord_dim != geom.coord_dim:
+            geom.coord_dim = self.coord_dim
+
         if self.make_multi(geom.geom_type, model_field):
             # Constructing a multi-geometry type to contain the single geometry
             multi_type = self.MULTI_TYPES[geom.geom_type.num]
@@ -491,61 +414,51 @@
             g = geom
 
         # Transforming the geometry with our Coordinate Transformation object,
-        # but only if the class variable `transform` is set w/a CoordTransform 
+        # but only if the class variable `transform` is set w/a CoordTransform
         # object.
         if self.transform: g.transform(self.transform)
-        
+
         # Returning the WKT of the geometry.
         return g.wkt
 
     #### Other model methods ####
     def coord_transform(self):
         "Returns the coordinate transformation object."
-        from django.contrib.gis.models import SpatialRefSys
+        SpatialRefSys = self.spatial_backend.spatial_ref_sys()
         try:
             # Getting the target spatial reference system
-            target_srs = SpatialRefSys.objects.get(srid=self.geo_col.srid).srs
+            target_srs = SpatialRefSys.objects.get(srid=self.geo_field.srid).srs
 
             # Creating the CoordTransform object
             return CoordTransform(self.source_srs, target_srs)
         except Exception, msg:
             raise LayerMapError('Could not translate between the data source and model geometry: %s' % msg)
 
-    def geometry_column(self):
-        "Returns the GeometryColumn model associated with the geographic column."
-        from django.contrib.gis.models import GeometryColumns
-        # Getting the GeometryColumn object.
-        try:
-            db_table = self.model._meta.db_table
-            geo_col = self.geom_field
-            if SpatialBackend.oracle:
-                # Making upper case for Oracle.
-                db_table = db_table.upper()
-                geo_col = geo_col.upper()
-            gc_kwargs = {GeometryColumns.table_name_col() : db_table,
-                         GeometryColumns.geom_col_name() : geo_col,
-                         }
-            return GeometryColumns.objects.get(**gc_kwargs)
-        except Exception, msg:
-            raise LayerMapError('Geometry column does not exist for model. (did you run syncdb?):\n %s' % msg)
+    def geometry_field(self):
+        "Returns the GeometryField instance associated with the geographic column."
+        # Use the `get_field_by_name` on the model's options so that we
+        # get the correct field instance if there's model inheritance.
+        opts = self.model._meta
+        fld, model, direct, m2m = opts.get_field_by_name(self.geom_field)
+        return fld
 
     def make_multi(self, geom_type, model_field):
         """
-        Given the OGRGeomType for a geometry and its associated GeometryField, 
+        Given the OGRGeomType for a geometry and its associated GeometryField,
         determine whether the geometry should be turned into a GeometryCollection.
         """
-        return (geom_type.num in self.MULTI_TYPES and 
+        return (geom_type.num in self.MULTI_TYPES and
                 model_field.__class__.__name__ == 'Multi%s' % geom_type.django)
 
-    def save(self, verbose=False, fid_range=False, step=False, 
+    def save(self, verbose=False, fid_range=False, step=False,
              progress=False, silent=False, stream=sys.stdout, strict=False):
         """
         Saves the contents from the OGR DataSource Layer into the database
-        according to the mapping dictionary given at initialization. 
-        
+        according to the mapping dictionary given at initialization.
+
         Keyword Parameters:
          verbose:
-           If set, information will be printed subsequent to each model save 
+           If set, information will be printed subsequent to each model save
            executed on the database.
 
          fid_range:
@@ -555,32 +468,32 @@
            data source.
 
          step:
-           If set with an integer, transactions will occur at every step 
-           interval. For example, if step=1000, a commit would occur after 
+           If set with an integer, transactions will occur at every step
+           interval. For example, if step=1000, a commit would occur after
            the 1,000th feature, the 2,000th feature etc.
 
          progress:
-           When this keyword is set, status information will be printed giving 
-           the number of features processed and sucessfully saved.  By default, 
-           progress information will pe printed every 1000 features processed, 
-           however, this default may be overridden by setting this keyword with an 
+           When this keyword is set, status information will be printed giving
+           the number of features processed and sucessfully saved.  By default,
+           progress information will pe printed every 1000 features processed,
+           however, this default may be overridden by setting this keyword with an
            integer for the desired interval.
 
          stream:
-           Status information will be written to this file handle.  Defaults to 
+           Status information will be written to this file handle.  Defaults to
            using `sys.stdout`, but any object with a `write` method is supported.
 
          silent:
-           By default, non-fatal error notifications are printed to stdout, but 
+           By default, non-fatal error notifications are printed to stdout, but
            this keyword may be set to disable these notifications.
 
          strict:
-           Execution of the model mapping will cease upon the first error 
+           Execution of the model mapping will cease upon the first error
            encountered.  The default behavior is to attempt to continue.
         """
         # Getting the default Feature ID range.
         default_range = self.check_fid_range(fid_range)
-    
+
         # Setting the progress interval, if requested.
         if progress:
             if progress is True or not isinstance(progress, int):
@@ -588,7 +501,7 @@
             else:
                 progress_interval = progress
 
-        # Defining the 'real' save method, utilizing the transaction 
+        # Defining the 'real' save method, utilizing the transaction
         # decorator created during initialization.
         @self.transaction_decorator
         def _save(feat_range=default_range, num_feat=0, num_saved=0):
@@ -605,7 +518,7 @@
                 except LayerMapError, msg:
                     # Something borked the validation
                     if strict: raise
-                    elif not silent: 
+                    elif not silent:
                         stream.write('Ignoring Feature ID %s because: %s\n' % (feat.fid, msg))
                 else:
                     # Constructing the model using the keyword args
@@ -617,16 +530,16 @@
                             # Getting the keyword arguments and retrieving
                             # the unique model.
                             u_kwargs = self.unique_kwargs(kwargs)
-                            m = self.model.objects.get(**u_kwargs)
+                            m = self.model.objects.using(self.using).get(**u_kwargs)
                             is_update = True
-                                
-                            # Getting the geometry (in OGR form), creating 
-                            # one from the kwargs WKT, adding in additional 
-                            # geometries, and update the attribute with the 
+
+                            # Getting the geometry (in OGR form), creating
+                            # one from the kwargs WKT, adding in additional
+                            # geometries, and update the attribute with the
                             # just-updated geometry WKT.
                             geom = getattr(m, self.geom_field).ogr
                             new = OGRGeometry(kwargs[self.geom_field])
-                            for g in new: geom.add(g) 
+                            for g in new: geom.add(g)
                             setattr(m, self.geom_field, geom.wkt)
                         except ObjectDoesNotExist:
                             # No unique model exists yet, create.
@@ -636,7 +549,7 @@
 
                     try:
                         # Attempting to save.
-                        m.save()
+                        m.save(using=self.using)
                         num_saved += 1
                         if verbose: stream.write('%s: %s\n' % (is_update and 'Updated' or 'Saved', m))
                     except SystemExit:
@@ -646,7 +559,7 @@
                             # Rolling back the transaction so that other model saves
                             # will work.
                             transaction.rollback_unless_managed()
-                        if strict: 
+                        if strict:
                             # Bailing out if the `strict` keyword is set.
                             if not silent:
                                 stream.write('Failed to save the feature (id: %s) into the model with the keyword arguments:\n' % feat.fid)
@@ -658,15 +571,15 @@
                 # Printing progress information, if requested.
                 if progress and num_feat % progress_interval == 0:
                     stream.write('Processed %d features, saved %d ...\n' % (num_feat, num_saved))
-        
+
             # Only used for status output purposes -- incremental saving uses the
             # values returned here.
             return num_saved, num_feat
 
         nfeat = self.layer.num_feat
         if step and isinstance(step, int) and step < nfeat:
-            # Incremental saving is requested at the given interval (step) 
-            if default_range: 
+            # Incremental saving is requested at the given interval (step)
+            if default_range:
                 raise LayerMapError('The `step` keyword may not be used in conjunction with the `fid_range` keyword.')
             beg, num_feat, num_saved = (0, 0, 0)
             indices = range(step, nfeat, step)
@@ -677,7 +590,7 @@
                 # special (e.g, [100:] instead of [90:100]).
                 if i+1 == n_i: step_slice = slice(beg, None)
                 else: step_slice = slice(beg, end)
-            
+
                 try:
                     num_feat, num_saved = _save(step_slice, num_feat, num_saved)
                     beg = end
--- a/web/lib/django/contrib/gis/utils/ogrinfo.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/utils/ogrinfo.py	Tue May 25 02:43:45 2010 +0200
@@ -19,7 +19,7 @@
     elif isinstance(data_source, DataSource):
         pass
     else:
-        raise Exception, 'Data source parameter must be a string or a DataSource object.'
+        raise Exception('Data source parameter must be a string or a DataSource object.')
 
     for i, layer in enumerate(data_source):
         print "data source : %s" % data_source.name
--- a/web/lib/django/contrib/gis/utils/srs.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/gis/utils/srs.py	Tue May 25 02:43:45 2010 +0200
@@ -1,49 +1,77 @@
-def add_postgis_srs(srs, auth_name='EPSG', auth_srid=None, ref_sys_name=None):
+from django.contrib.gis.gdal import SpatialReference
+from django.db import connections, DEFAULT_DB_ALIAS
+
+def add_srs_entry(srs, auth_name='EPSG', auth_srid=None, ref_sys_name=None,
+                  database=DEFAULT_DB_ALIAS):
     """
-    This function takes a GDAL SpatialReference system and adds its
-    information to the PostGIS `spatial_ref_sys` table -- enabling
-    spatial transformations with PostGIS.  This is handy for adding
-    spatial reference systems not included by default with PostGIS.
-    For example, the following adds the so-called "Google Maps Mercator
-    Projection" (available in GDAL 1.5):
+    This function takes a GDAL SpatialReference system and adds its information
+    to the `spatial_ref_sys` table of the spatial backend.  Doing this enables
+    database-level spatial transformations for the backend.  Thus, this utility
+    is useful for adding spatial reference systems not included by default with
+    the backend -- for example, the so-called "Google Maps Mercator Projection"
+    is excluded in PostGIS 1.3 and below, and the following adds it to the
+    `spatial_ref_sys` table:
 
-    >>> add_postgis_srs(SpatialReference(900913))
+    >>> from django.contrib.gis.utils import add_srs_entry
+    >>> add_srs_entry(900913)
 
     Keyword Arguments:
-     auth_name: This keyword may be customized with the value of the
-                `auth_name` field.  Defaults to 'EPSG'.
+     auth_name:
+       This keyword may be customized with the value of the `auth_name` field.
+       Defaults to 'EPSG'.
 
-     auth_srid: This keyword may be customized with the value of the
-                `auth_srid` field.  Defaults to the SRID determined
-                by GDAL.
+     auth_srid:
+       This keyword may be customized with the value of the `auth_srid` field.
+       Defaults to the SRID determined by GDAL.
+
+     ref_sys_name:
+       For SpatiaLite users only, sets the value of the the `ref_sys_name` field.
+       Defaults to the name determined by GDAL.
 
-     ref_sys_name: For SpatiaLite users only, sets the value of the
-                   the `ref_sys_name` field.  Defaults to the name
-                   determined by GDAL.
+     database:
+      The name of the database connection to use; the default is the value
+      of `django.db.DEFAULT_DB_ALIAS` (at the time of this writing, it's value
+      is 'default').
     """
-    from django.contrib.gis.db.backend import SpatialBackend
-    from django.contrib.gis.models import SpatialRefSys
-    from django.contrib.gis.gdal import SpatialReference
+    connection = connections[database]
+    if not hasattr(connection.ops, 'spatial_version'):
+        raise Exception('The `add_srs_entry` utility only works '
+                        'with spatial backends.')
+    if connection.ops.oracle or connection.ops.mysql:
+        raise Exception('This utility does not support the '
+                        'Oracle or MySQL spatial backends.')
+    SpatialRefSys = connection.ops.spatial_ref_sys()
 
-    if SpatialBackend.oracle or SpatialBackend.mysql:
-        raise Exception('This utility not supported on Oracle or MySQL spatial backends.')
-
+    # If argument is not a `SpatialReference` instance, use it as parameter
+    # to construct a `SpatialReference` instance.
     if not isinstance(srs, SpatialReference):
         srs = SpatialReference(srs)
 
     if srs.srid is None:
-        raise Exception('Spatial reference requires an SRID to be compatible with PostGIS.')
+        raise Exception('Spatial reference requires an SRID to be '
+                        'compatible with the spatial backend.')
 
-    # Initializing the keyword arguments dictionary for both PostGIS and SpatiaLite.
+    # Initializing the keyword arguments dictionary for both PostGIS
+    # and SpatiaLite.
     kwargs = {'srid' : srs.srid,
               'auth_name' : auth_name,
               'auth_srid' : auth_srid or srs.srid,
               'proj4text' : srs.proj4,
               }
 
-    # Backend-specific keyword settings.
-    if SpatialBackend.postgis: kwargs['srtext'] = srs.wkt
-    if SpatialBackend.spatialite: kwargs['ref_sys_name'] = ref_sys_name or srs.name
+    # Backend-specific fields for the SpatialRefSys model.
+    if connection.ops.postgis:
+        kwargs['srtext'] = srs.wkt
+    if connection.ops.spatialite:
+        kwargs['ref_sys_name'] = ref_sys_name or srs.name
 
     # Creating the spatial_ref_sys model.
-    sr, created = SpatialRefSys.objects.get_or_create(**kwargs)
+    try:
+        # Try getting via SRID only, because using all kwargs may
+        # differ from exact wkt/proj in database.
+        sr = SpatialRefSys.objects.get(srid=srs.srid)
+    except SpatialRefSys.DoesNotExist:
+        sr = SpatialRefSys.objects.create(**kwargs)
+
+# Alias is for backwards-compatibility purposes.
+add_postgis_srs = add_srs_entry
--- a/web/lib/django/contrib/humanize/templatetags/humanize.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/humanize/templatetags/humanize.py	Tue May 25 02:43:45 2010 +0200
@@ -14,7 +14,7 @@
     """
     try:
         value = int(value)
-    except ValueError:
+    except (TypeError, ValueError):
         return value
     t = (_('th'), _('st'), _('nd'), _('rd'), _('th'), _('th'), _('th'), _('th'), _('th'), _('th'))
     if value % 100 in (11, 12, 13): # special case
--- a/web/lib/django/contrib/localflavor/ar/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/ar/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -4,7 +4,8 @@
 """
 
 from django.forms import ValidationError
-from django.forms.fields import RegexField, CharField, Select, EMPTY_VALUES
+from django.core.validators import EMPTY_VALUES
+from django.forms.fields import RegexField, CharField, Select
 from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext_lazy as _
 
--- a/web/lib/django/contrib/localflavor/au/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/au/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,9 +2,10 @@
 Australian-specific Form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, EMPTY_VALUES
-from django.forms.util import smart_unicode
+from django.forms.fields import Field, RegexField, Select
+from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext_lazy as _
 import re
 
--- a/web/lib/django/contrib/localflavor/br/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/br/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -3,17 +3,13 @@
 BR-specific Form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, CharField, Select, EMPTY_VALUES
+from django.forms.fields import Field, RegexField, CharField, Select
 from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext_lazy as _
 import re
 
-try:
-    set
-except NameError:
-    from sets import Set as set     # For Python 2.3
-
 phone_digits_re = re.compile(r'^(\d{2})[-\.]?(\d{4})[-\.]?(\d{4})$')
 
 class BRZipCodeField(RegexField):
--- a/web/lib/django/contrib/localflavor/ca/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/ca/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,9 +2,10 @@
 Canada-specific Form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, EMPTY_VALUES
-from django.forms.util import smart_unicode
+from django.forms.fields import Field, RegexField, Select
+from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext_lazy as _
 import re
 
@@ -12,13 +13,20 @@
 sin_re = re.compile(r"^(\d{3})-(\d{3})-(\d{3})$")
 
 class CAPostalCodeField(RegexField):
-    """Canadian postal code field."""
+    """
+    Canadian postal code field.
+
+    Validates against known invalid characters: D, F, I, O, Q, U
+    Additionally the first character cannot be Z or W.
+    For more info see:
+    http://www.canadapost.ca/tools/pg/manual/PGaddress-e.asp#1402170
+    """
     default_error_messages = {
         'invalid': _(u'Enter a postal code in the format XXX XXX.'),
     }
 
     def __init__(self, *args, **kwargs):
-        super(CAPostalCodeField, self).__init__(r'^[ABCEGHJKLMNPRSTVXYZ]\d[A-Z] \d[A-Z]\d$',
+        super(CAPostalCodeField, self).__init__(r'^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ] \d[ABCEGHJKLMNPRSTVWXYZ]\d$',
             max_length=None, min_length=None, *args, **kwargs)
 
 class CAPhoneNumberField(Field):
--- a/web/lib/django/contrib/localflavor/ch/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/ch/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,9 @@
 Swiss-specific Form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.forms.fields import Field, RegexField, Select
 from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext_lazy as _
 import re
--- a/web/lib/django/contrib/localflavor/cl/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/cl/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,9 @@
 Chile specific form helpers.
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import RegexField, Select, EMPTY_VALUES
+from django.forms.fields import RegexField, Select
 from django.utils.translation import ugettext_lazy as _
 from django.utils.encoding import smart_unicode
 
--- a/web/lib/django/contrib/localflavor/cz/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/cz/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,9 @@
 Czech-specific form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Select, RegexField, Field, EMPTY_VALUES
+from django.forms.fields import Select, RegexField, Field
 from django.utils.translation import ugettext_lazy as _
 import re
 
--- a/web/lib/django/contrib/localflavor/de/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/de/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,9 @@
 DE-specific Form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.forms.fields import Field, RegexField, Select
 from django.utils.translation import ugettext_lazy as _
 import re
 
--- a/web/lib/django/contrib/localflavor/es/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/es/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -3,8 +3,9 @@
 Spanish-specific Form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import RegexField, Select, EMPTY_VALUES
+from django.forms.fields import RegexField, Select
 from django.utils.translation import ugettext_lazy as _
 import re
 
@@ -96,13 +97,13 @@
             if letter2 == nif_get_checksum(number):
                 return value
             else:
-                raise ValidationError, self.error_messages['invalid_nif']
+                raise ValidationError(self.error_messages['invalid_nif'])
         elif letter1 in self.nie_types and letter2:
             # NIE
             if letter2 == nif_get_checksum(number):
                 return value
             else:
-                raise ValidationError, self.error_messages['invalid_nie']
+                raise ValidationError(self.error_messages['invalid_nie'])
         elif not self.only_nif and letter1 in self.cif_types and len(number) in [7, 8]:
             # CIF
             if not letter2:
@@ -111,9 +112,9 @@
             if letter2 in (checksum, self.cif_control[checksum]):
                 return value
             else:
-                raise ValidationError, self.error_messages['invalid_cif']
+                raise ValidationError(self.error_messages['invalid_cif'])
         else:
-            raise ValidationError, self.error_messages['invalid']
+            raise ValidationError(self.error_messages['invalid'])
 
 class ESCCCField(RegexField):
     """
@@ -158,7 +159,7 @@
         if get_checksum('00' + entity + office) + get_checksum(account) == checksum:
             return value
         else:
-            raise ValidationError, self.error_messages['checksum']
+            raise ValidationError(self.error_messages['checksum'])
 
 class ESRegionSelect(Select):
     """
--- a/web/lib/django/contrib/localflavor/fi/fi_municipalities.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/fi/fi_municipalities.py	Tue May 25 02:43:45 2010 +0200
@@ -9,22 +9,15 @@
 
 MUNICIPALITY_CHOICES = (
     ('akaa', u"Akaa"),
-    ('alaharma', u"Alahärmä"),
     ('alajarvi', u"Alajärvi"),
-    ('alastaro', u"Alastaro"),
     ('alavieska', u"Alavieska"),
     ('alavus', u"Alavus"),
-    ('anjalankoski', u"Anjalankoski"),
     ('artjarvi', u"Artjärvi"),
     ('asikkala', u"Asikkala"),
-    ('askainen', u"Askainen"),
     ('askola', u"Askola"),
     ('aura', u"Aura"),
     ('brando', u"Brändö"),
-    ('dragsfjard', u"Dragsfjärd"),
     ('eckero', u"Eckerö"),
-    ('elimaki', u"Elimäki"),
-    ('eno', u"Eno"),
     ('enonkoski', u"Enonkoski"),
     ('enontekio', u"Enontekiö"),
     ('espoo', u"Espoo"),
@@ -38,7 +31,6 @@
     ('haapajarvi', u"Haapajärvi"),
     ('haapavesi', u"Haapavesi"),
     ('hailuoto', u"Hailuoto"),
-    ('halikko', u"Halikko"),
     ('halsua', u"Halsua"),
     ('hamina', u"Hamina"),
     ('hammarland', u"Hammarland"),
@@ -47,17 +39,14 @@
     ('harjavalta', u"Harjavalta"),
     ('hartola', u"Hartola"),
     ('hattula', u"Hattula"),
-    ('hauho', u"Hauho"),
     ('haukipudas', u"Haukipudas"),
     ('hausjarvi', u"Hausjärvi"),
     ('heinola', u"Heinola"),
     ('heinavesi', u"Heinävesi"),
     ('helsinki', u"Helsinki"),
-    ('himanka', u"Himanka"),
     ('hirvensalmi', u"Hirvensalmi"),
     ('hollola', u"Hollola"),
     ('honkajoki', u"Honkajoki"),
-    ('houtskari', u"Houtskari"),
     ('huittinen', u"Huittinen"),
     ('humppila', u"Humppila"),
     ('hyrynsalmi', u"Hyrynsalmi"),
@@ -73,11 +62,9 @@
     ('ilomantsi', u"Ilomantsi"),
     ('imatra', u"Imatra"),
     ('inari', u"Inari"),
-    ('inio', u"Iniö"),
     ('inkoo', u"Inkoo"),
     ('isojoki', u"Isojoki"),
     ('isokyro', u"Isokyrö"),
-    ('jaala', u"Jaala"),
     ('jalasjarvi', u"Jalasjärvi"),
     ('janakkala', u"Janakkala"),
     ('joensuu', u"Joensuu"),
@@ -85,30 +72,24 @@
     ('jomala', u"Jomala"),
     ('joroinen', u"Joroinen"),
     ('joutsa', u"Joutsa"),
-    ('joutseno', u"Joutseno"),
     ('juankoski', u"Juankoski"),
-    ('jurva', u"Jurva"),
     ('juuka', u"Juuka"),
     ('juupajoki', u"Juupajoki"),
     ('juva', u"Juva"),
     ('jyvaskyla', u"Jyväskylä"),
-    ('jyvaskylan_mlk', u"Jyväskylän maalaiskunta"),
     ('jamijarvi', u"Jämijärvi"),
     ('jamsa', u"Jämsä"),
-    ('jamsankoski', u"Jämsänkoski"),
     ('jarvenpaa', u"Järvenpää"),
     ('kaarina', u"Kaarina"),
     ('kaavi', u"Kaavi"),
     ('kajaani', u"Kajaani"),
     ('kalajoki', u"Kalajoki"),
-    ('kalvola', u"Kalvola"),
     ('kangasala', u"Kangasala"),
     ('kangasniemi', u"Kangasniemi"),
     ('kankaanpaa', u"Kankaanpää"),
     ('kannonkoski', u"Kannonkoski"),
     ('kannus', u"Kannus"),
     ('karijoki', u"Karijoki"),
-    ('karjaa', u"Karjaa"),
     ('karjalohja', u"Karjalohja"),
     ('karkkila', u"Karkkila"),
     ('karstula', u"Karstula"),
@@ -123,23 +104,19 @@
     ('kemi', u"Kemi"),
     ('kemijarvi', u"Kemijärvi"),
     ('keminmaa', u"Keminmaa"),
-    ('kemio', u"Kemiö"),
+    ('kemionsaari', u"Kemiönsaari"),
     ('kempele', u"Kempele"),
     ('kerava', u"Kerava"),
     ('kerimaki', u"Kerimäki"),
-    ('kestila', u"Kestilä"),
     ('kesalahti', u"Kesälahti"),
     ('keuruu', u"Keuruu"),
     ('kihnio', u"Kihniö"),
-    ('kiikala', u"Kiikala"),
     ('kiikoinen', u"Kiikoinen"),
     ('kiiminki', u"Kiiminki"),
     ('kinnula', u"Kinnula"),
     ('kirkkonummi', u"Kirkkonummi"),
-    ('kisko', u"Kisko"),
     ('kitee', u"Kitee"),
     ('kittila', u"Kittilä"),
-    ('kiukainen', u"Kiukainen"),
     ('kiuruvesi', u"Kiuruvesi"),
     ('kivijarvi', u"Kivijärvi"),
     ('kokemaki', u"Kokemäki"),
@@ -147,11 +124,8 @@
     ('kolari', u"Kolari"),
     ('konnevesi', u"Konnevesi"),
     ('kontiolahti', u"Kontiolahti"),
-    ('korpilahti', u"Korpilahti"),
-    ('korppoo', u"Korppoo"),
     ('korsnas', u"Korsnäs"),
-    ('kortesjarvi', u"Kortesjärvi"),
-    ('koskitl', u"KoskiTl"),
+    ('koskitl', u"Koski Tl"),
     ('kotka', u"Kotka"),
     ('kouvola', u"Kouvola"),
     ('kristiinankaupunki', u"Kristiinankaupunki"),
@@ -163,14 +137,10 @@
     ('kuopio', u"Kuopio"),
     ('kuortane', u"Kuortane"),
     ('kurikka', u"Kurikka"),
-    ('kuru', u"Kuru"),
     ('kustavi', u"Kustavi"),
     ('kuusamo', u"Kuusamo"),
-    ('kuusankoski', u"Kuusankoski"),
-    ('kuusjoki', u"Kuusjoki"),
     ('kylmakoski', u"Kylmäkoski"),
     ('kyyjarvi', u"Kyyjärvi"),
-    ('kalvia', u"Kälviä"),
     ('karkola', u"Kärkölä"),
     ('karsamaki', u"Kärsämäki"),
     ('kokar', u"Kökar"),
@@ -178,30 +148,23 @@
     ('lahti', u"Lahti"),
     ('laihia', u"Laihia"),
     ('laitila', u"Laitila"),
-    ('lammi', u"Lammi"),
     ('lapinjarvi', u"Lapinjärvi"),
     ('lapinlahti', u"Lapinlahti"),
     ('lappajarvi', u"Lappajärvi"),
     ('lappeenranta', u"Lappeenranta"),
-    ('lappi', u"Lappi"),
     ('lapua', u"Lapua"),
     ('laukaa', u"Laukaa"),
     ('lavia', u"Lavia"),
-    ('lehtimaki', u"Lehtimäki"),
-    ('leivonmaki', u"Leivonmäki"),
     ('lemi', u"Lemi"),
     ('lemland', u"Lemland"),
     ('lempaala', u"Lempäälä"),
-    ('lemu', u"Lemu"),
     ('leppavirta', u"Leppävirta"),
     ('lestijarvi', u"Lestijärvi"),
     ('lieksa', u"Lieksa"),
     ('lieto', u"Lieto"),
-    ('liljendal', u"Liljendal"),
     ('liminka', u"Liminka"),
     ('liperi', u"Liperi"),
     ('lohja', u"Lohja"),
-    ('lohtaja', u"Lohtaja"),
     ('loimaa', u"Loimaa"),
     ('loppi', u"Loppi"),
     ('loviisa', u"Loviisa"),
@@ -211,42 +174,36 @@
     ('luoto', u"Luoto"),
     ('luumaki', u"Luumäki"),
     ('luvia', u"Luvia"),
+    ('lansi-turunmaa', u"Länsi-Turunmaa"),
     ('maalahti', u"Maalahti"),
     ('maaninka', u"Maaninka"),
     ('maarianhamina', u"Maarianhamina"),
     ('marttila', u"Marttila"),
     ('masku', u"Masku"),
-    ('mellila', u"Mellilä"),
     ('merijarvi', u"Merijärvi"),
     ('merikarvia', u"Merikarvia"),
-    ('merimasku', u"Merimasku"),
     ('miehikkala', u"Miehikkälä"),
     ('mikkeli', u"Mikkeli"),
-    ('mouhijarvi', u"Mouhijärvi"),
     ('muhos', u"Muhos"),
     ('multia', u"Multia"),
     ('muonio', u"Muonio"),
     ('mustasaari', u"Mustasaari"),
     ('muurame', u"Muurame"),
-    ('muurla', u"Muurla"),
     ('mynamaki', u"Mynämäki"),
     ('myrskyla', u"Myrskylä"),
     ('mantsala', u"Mäntsälä"),
-    ('mantta', u"Mänttä"),
+    ('mantta-vilppula', u"Mänttä-Vilppula"),
     ('mantyharju', u"Mäntyharju"),
     ('naantali', u"Naantali"),
     ('nakkila', u"Nakkila"),
     ('nastola', u"Nastola"),
-    ('nauvo', u"Nauvo"),
     ('nilsia', u"Nilsiä"),
     ('nivala', u"Nivala"),
     ('nokia', u"Nokia"),
-    ('noormarkku', u"Noormarkku"),
     ('nousiainen', u"Nousiainen"),
     ('nummi-pusula', u"Nummi-Pusula"),
     ('nurmes', u"Nurmes"),
     ('nurmijarvi', u"Nurmijärvi"),
-    ('nurmo', u"Nurmo"),
     ('narpio', u"Närpiö"),
     ('oravainen', u"Oravainen"),
     ('orimattila', u"Orimattila"),
@@ -259,26 +216,19 @@
     ('padasjoki', u"Padasjoki"),
     ('paimio', u"Paimio"),
     ('paltamo', u"Paltamo"),
-    ('parainen', u"Parainen"),
     ('parikkala', u"Parikkala"),
     ('parkano', u"Parkano"),
     ('pedersore', u"Pedersöre"),
     ('pelkosenniemi', u"Pelkosenniemi"),
     ('pello', u"Pello"),
     ('perho', u"Perho"),
-    ('pernaja', u"Pernaja"),
-    ('pernio', u"Perniö"),
-    ('pertteli', u"Pertteli"),
     ('pertunmaa', u"Pertunmaa"),
     ('petajavesi', u"Petäjävesi"),
     ('pieksamaki', u"Pieksämäki"),
     ('pielavesi', u"Pielavesi"),
     ('pietarsaari', u"Pietarsaari"),
     ('pihtipudas', u"Pihtipudas"),
-    ('piikkio', u"Piikkiö"),
-    ('piippola', u"Piippola"),
     ('pirkkala', u"Pirkkala"),
-    ('pohja', u"Pohja"),
     ('polvijarvi', u"Polvijärvi"),
     ('pomarkku', u"Pomarkku"),
     ('pori', u"Pori"),
@@ -287,7 +237,6 @@
     ('posio', u"Posio"),
     ('pudasjarvi', u"Pudasjärvi"),
     ('pukkila', u"Pukkila"),
-    ('pulkkila', u"Pulkkila"),
     ('punkaharju', u"Punkaharju"),
     ('punkalaidun', u"Punkalaidun"),
     ('puolanka', u"Puolanka"),
@@ -297,45 +246,40 @@
     ('pyhajarvi', u"Pyhäjärvi"),
     ('pyhanta', u"Pyhäntä"),
     ('pyharanta', u"Pyhäranta"),
-    ('pyhaselka', u"Pyhäselkä"),
-    ('pylkonmaki', u"Pylkönmäki"),
     ('palkane', u"Pälkäne"),
     ('poytya', u"Pöytyä"),
     ('raahe', u"Raahe"),
+    ('raasepori', u"Raasepori"),
     ('raisio', u"Raisio"),
     ('rantasalmi', u"Rantasalmi"),
-    ('rantsila', u"Rantsila"),
     ('ranua', u"Ranua"),
     ('rauma', u"Rauma"),
     ('rautalampi', u"Rautalampi"),
     ('rautavaara', u"Rautavaara"),
     ('rautjarvi', u"Rautjärvi"),
     ('reisjarvi', u"Reisjärvi"),
-    ('renko', u"Renko"),
     ('riihimaki', u"Riihimäki"),
     ('ristiina', u"Ristiina"),
     ('ristijarvi', u"Ristijärvi"),
     ('rovaniemi', u"Rovaniemi"),
     ('ruokolahti', u"Ruokolahti"),
-    ('ruotsinpyhtaa', u"Ruotsinpyhtää"),
     ('ruovesi', u"Ruovesi"),
     ('rusko', u"Rusko"),
-    ('rymattyla', u"Rymättylä"),
     ('raakkyla', u"Rääkkylä"),
     ('saarijarvi', u"Saarijärvi"),
     ('salla', u"Salla"),
     ('salo', u"Salo"),
     ('saltvik', u"Saltvik"),
-    ('sammatti', u"Sammatti"),
+    ('sastamala', u"Sastamala"),
     ('sauvo', u"Sauvo"),
     ('savitaipale', u"Savitaipale"),
     ('savonlinna', u"Savonlinna"),
-    ('savonranta', u"Savonranta"),
     ('savukoski', u"Savukoski"),
     ('seinajoki', u"Seinäjoki"),
     ('sievi', u"Sievi"),
     ('siikainen', u"Siikainen"),
     ('siikajoki', u"Siikajoki"),
+    ('siikalatva', u"Siikalatva"),
     ('siilinjarvi', u"Siilinjärvi"),
     ('simo', u"Simo"),
     ('sipoo', u"Sipoo"),
@@ -349,17 +293,14 @@
     ('sulkava', u"Sulkava"),
     ('sund', u"Sund"),
     ('suomenniemi', u"Suomenniemi"),
-    ('suomusjarvi', u"Suomusjärvi"),
     ('suomussalmi', u"Suomussalmi"),
     ('suonenjoki', u"Suonenjoki"),
     ('sysma', u"Sysmä"),
     ('sakyla', u"Säkylä"),
-    ('sarkisalo', u"Särkisalo"),
     ('taipalsaari', u"Taipalsaari"),
     ('taivalkoski', u"Taivalkoski"),
     ('taivassalo', u"Taivassalo"),
     ('tammela', u"Tammela"),
-    ('tammisaari', u"Tammisaari"),
     ('tampere', u"Tampere"),
     ('tarvasjoki', u"Tarvasjoki"),
     ('tervo', u"Tervo"),
@@ -370,12 +311,10 @@
     ('toivakka', u"Toivakka"),
     ('tornio', u"Tornio"),
     ('turku', u"Turku"),
-    ('tuulos', u"Tuulos"),
     ('tuusniemi', u"Tuusniemi"),
     ('tuusula', u"Tuusula"),
     ('tyrnava', u"Tyrnävä"),
     ('toysa', u"Töysä"),
-    ('ullava', u"Ullava"),
     ('ulvila', u"Ulvila"),
     ('urjala', u"Urjala"),
     ('utajarvi', u"Utajärvi"),
@@ -385,17 +324,12 @@
     ('uusikaupunki', u"Uusikaupunki"),
     ('vaala', u"Vaala"),
     ('vaasa', u"Vaasa"),
-    ('vahto', u"Vahto"),
     ('valkeakoski', u"Valkeakoski"),
-    ('valkeala', u"Valkeala"),
     ('valtimo', u"Valtimo"),
-    ('vammala', u"Vammala"),
-    ('vampula', u"Vampula"),
     ('vantaa', u"Vantaa"),
     ('varkaus', u"Varkaus"),
     ('varpaisjarvi', u"Varpaisjärvi"),
     ('vehmaa', u"Vehmaa"),
-    ('velkua', u"Velkua"),
     ('vesanto', u"Vesanto"),
     ('vesilahti', u"Vesilahti"),
     ('veteli', u"Veteli"),
@@ -403,25 +337,17 @@
     ('vihanti', u"Vihanti"),
     ('vihti', u"Vihti"),
     ('viitasaari', u"Viitasaari"),
-    ('vilppula', u"Vilppula"),
     ('vimpeli', u"Vimpeli"),
     ('virolahti', u"Virolahti"),
     ('virrat', u"Virrat"),
     ('vardo', u"Vårdö"),
     ('vahakyro', u"Vähäkyrö"),
-    ('vastanfjard', u"Västanfjärd"),
     ('voyri-maksamaa', u"Vöyri-Maksamaa"),
-    ('yliharma', u"Ylihärmä"),
     ('yli-ii', u"Yli-Ii"),
-    ('ylikiiminki', u"Ylikiiminki"),
-    ('ylistaro', u"Ylistaro"),
     ('ylitornio', u"Ylitornio"),
     ('ylivieska', u"Ylivieska"),
-    ('ylamaa', u"Ylämaa"),
-    ('ylane', u"Yläne"),
     ('ylojarvi', u"Ylöjärvi"),
     ('ypaja', u"Ypäjä"),
-    ('aetsa', u"Äetsä"),
     ('ahtari', u"Ähtäri"),
     ('aanekoski', u"Äänekoski")
 )
\ No newline at end of file
--- a/web/lib/django/contrib/localflavor/fi/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/fi/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -3,8 +3,9 @@
 """
 
 import re
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.forms.fields import Field, RegexField, Select
 from django.utils.translation import ugettext_lazy as _
 
 class FIZipCodeField(RegexField):
--- a/web/lib/django/contrib/localflavor/fr/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/fr/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,9 @@
 FR-specific Form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.forms.fields import Field, RegexField, Select
 from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext_lazy as _
 import re
--- a/web/lib/django/contrib/localflavor/fr/fr_department.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/fr/fr_department.py	Tue May 25 02:43:45 2010 +0200
@@ -97,8 +97,6 @@
     ('93', '93 - Seine-Saint-Denis'),
     ('94', '94 - Val-de-Marne'),
     ('95', '95 - Val-d\'Oise'),
-    ('2A', '2A - Corse du sud'),
-    ('2B', '2B - Haute Corse'),
     ('971', '971 - Guadeloupe'),
     ('972', '972 - Martinique'),
     ('973', '973 - Guyane'),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/id/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,211 @@
+"""
+ID-specific Form helpers
+"""
+
+import re
+import time
+
+from django.core.validators import EMPTY_VALUES
+from django.forms import ValidationError
+from django.forms.fields import Field, Select
+from django.utils.translation import ugettext_lazy as _
+from django.utils.encoding import smart_unicode
+
+postcode_re = re.compile(r'^[1-9]\d{4}$')
+phone_re = re.compile(r'^(\+62|0)[2-9]\d{7,10}$')
+plate_re = re.compile(r'^(?P<prefix>[A-Z]{1,2}) ' + \
+            r'(?P<number>\d{1,5})( (?P<suffix>([A-Z]{1,3}|[1-9][0-9]{,2})))?$')
+nik_re = re.compile(r'^\d{16}$')
+
+
+class IDPostCodeField(Field):
+    """
+    An Indonesian post code field.
+
+    http://id.wikipedia.org/wiki/Kode_pos
+    """
+    default_error_messages = {
+        'invalid': _('Enter a valid post code'),
+    }
+
+    def clean(self, value):
+        super(IDPostCodeField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return u''
+
+        value = value.strip()
+        if not postcode_re.search(value):
+            raise ValidationError(self.error_messages['invalid'])
+
+        if int(value) < 10110:
+            raise ValidationError(self.error_messages['invalid'])
+
+        # 1xxx0
+        if value[0] == '1' and value[4] != '0':
+            raise ValidationError(self.error_messages['invalid'])
+
+        return u'%s' % (value, )
+
+
+class IDProvinceSelect(Select):
+    """
+    A Select widget that uses a list of provinces of Indonesia as its
+    choices.
+    """
+
+    def __init__(self, attrs=None):
+        from id_choices import PROVINCE_CHOICES
+        super(IDProvinceSelect, self).__init__(attrs, choices=PROVINCE_CHOICES)
+
+
+class IDPhoneNumberField(Field):
+    """
+    An Indonesian telephone number field.
+
+    http://id.wikipedia.org/wiki/Daftar_kode_telepon_di_Indonesia
+    """
+    default_error_messages = {
+        'invalid': _('Enter a valid phone number'),
+    }
+
+    def clean(self, value):
+        super(IDPhoneNumberField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return u''
+
+        phone_number = re.sub(r'[\-\s\(\)]', '', smart_unicode(value))
+
+        if phone_re.search(phone_number):
+            return smart_unicode(value)
+
+        raise ValidationError(self.error_messages['invalid'])
+
+
+class IDLicensePlatePrefixSelect(Select):
+    """
+    A Select widget that uses a list of vehicle license plate prefix code
+    of Indonesia as its choices.
+
+    http://id.wikipedia.org/wiki/Tanda_Nomor_Kendaraan_Bermotor
+    """
+
+    def __init__(self, attrs=None):
+        from id_choices import LICENSE_PLATE_PREFIX_CHOICES
+        super(IDLicensePlatePrefixSelect, self).__init__(attrs,
+            choices=LICENSE_PLATE_PREFIX_CHOICES)
+
+
+class IDLicensePlateField(Field):
+    """
+    An Indonesian vehicle license plate field.
+
+    http://id.wikipedia.org/wiki/Tanda_Nomor_Kendaraan_Bermotor
+
+    Plus: "B 12345 12"
+    """
+    default_error_messages = {
+        'invalid': _('Enter a valid vehicle license plate number'),
+    }
+
+    def clean(self, value):
+        super(IDLicensePlateField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return u''
+
+        plate_number = re.sub(r'\s+', ' ',
+            smart_unicode(value.strip())).upper()
+
+        matches = plate_re.search(plate_number)
+        if matches is None:
+            raise ValidationError(self.error_messages['invalid'])
+
+        # Make sure prefix is in the list of known codes.
+        from id_choices import LICENSE_PLATE_PREFIX_CHOICES
+        prefix = matches.group('prefix')
+        if prefix not in [choice[0] for choice in LICENSE_PLATE_PREFIX_CHOICES]:
+            raise ValidationError(self.error_messages['invalid'])
+
+        # Only Jakarta (prefix B) can have 3 letter suffix.
+        suffix = matches.group('suffix')
+        if suffix is not None and len(suffix) == 3 and prefix != 'B':
+            raise ValidationError(self.error_messages['invalid'])
+
+        # RI plates don't have suffix.
+        if prefix == 'RI' and suffix is not None and suffix != '':
+            raise ValidationError(self.error_messages['invalid'])
+
+        # Number can't be zero.
+        number = matches.group('number')
+        if number == '0':
+            raise ValidationError(self.error_messages['invalid'])
+
+        # CD, CC and B 12345 12
+        if len(number) == 5 or prefix in ('CD', 'CC'):
+            # suffix must be numeric and non-empty
+            if re.match(r'^\d+$', suffix) is None:
+                raise ValidationError(self.error_messages['invalid'])
+
+            # Known codes range is 12-124
+            if prefix in ('CD', 'CC') and not (12 <= int(number) <= 124):
+                raise ValidationError(self.error_messages['invalid'])
+            if len(number) == 5 and not (12 <= int(suffix) <= 124):
+                raise ValidationError(self.error_messages['invalid'])
+        else:
+            # suffix must be non-numeric
+            if suffix is not None and re.match(r'^[A-Z]{,3}$', suffix) is None:
+                raise ValidationError(self.error_messages['invalid'])
+
+        return plate_number
+
+
+class IDNationalIdentityNumberField(Field):
+    """
+    An Indonesian national identity number (NIK/KTP#) field.
+
+    http://id.wikipedia.org/wiki/Nomor_Induk_Kependudukan
+
+    xx.xxxx.ddmmyy.xxxx - 16 digits (excl. dots)
+    """
+    default_error_messages = {
+        'invalid': _('Enter a valid NIK/KTP number'),
+    }
+
+    def clean(self, value):
+        super(IDNationalIdentityNumberField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return u''
+
+        value = re.sub(r'[\s.]', '', smart_unicode(value))
+
+        if not nik_re.search(value):
+            raise ValidationError(self.error_messages['invalid'])
+
+        if int(value) == 0:
+            raise ValidationError(self.error_messages['invalid'])
+
+        def valid_nik_date(year, month, day):
+            try:
+                t1 = (int(year), int(month), int(day), 0, 0, 0, 0, 0, -1)
+                d = time.mktime(t1)
+                t2 = time.localtime(d)
+                if t1[:3] != t2[:3]:
+                    return False
+                else:
+                    return True
+            except (OverflowError, ValueError):
+                return False
+
+        year = int(value[10:12])
+        month = int(value[8:10])
+        day = int(value[6:8])
+        current_year = time.localtime().tm_year
+        if year < int(str(current_year)[-2:]):
+            if not valid_nik_date(2000 + int(year), month, day):
+                raise ValidationError(self.error_messages['invalid'])
+        elif not valid_nik_date(1900 + int(year), month, day):
+            raise ValidationError(self.error_messages['invalid'])
+
+        if value[:6] == '000000' or value[12:] == '0000':
+            raise ValidationError(self.error_messages['invalid'])
+
+        return '%s.%s.%s.%s' % (value[:2], value[2:6], value[6:12], value[12:])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/id/id_choices.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,101 @@
+from django.utils.translation import ugettext_lazy as _
+
+# Reference: http://id.wikipedia.org/wiki/Daftar_provinsi_Indonesia
+
+# Indonesia does not have an official Province code standard.
+# I decided to use unambiguous and consistent (some are common) 3-letter codes.
+
+PROVINCE_CHOICES = (
+    ('BLI', _('Bali')),
+    ('BTN', _('Banten')),
+    ('BKL', _('Bengkulu')),
+    ('DIY', _('Yogyakarta')),
+    ('JKT', _('Jakarta')),
+    ('GOR', _('Gorontalo')),
+    ('JMB', _('Jambi')),
+    ('JBR', _('Jawa Barat')),
+    ('JTG', _('Jawa Tengah')),
+    ('JTM', _('Jawa Timur')),
+    ('KBR', _('Kalimantan Barat')),
+    ('KSL', _('Kalimantan Selatan')),
+    ('KTG', _('Kalimantan Tengah')),
+    ('KTM', _('Kalimantan Timur')),
+    ('BBL', _('Kepulauan Bangka-Belitung')),
+    ('KRI', _('Kepulauan Riau')),
+    ('LPG', _('Lampung')),
+    ('MLK', _('Maluku')),
+    ('MUT', _('Maluku Utara')),
+    ('NAD', _('Nanggroe Aceh Darussalam')),
+    ('NTB', _('Nusa Tenggara Barat')),
+    ('NTT', _('Nusa Tenggara Timur')),
+    ('PPA', _('Papua')),
+    ('PPB', _('Papua Barat')),
+    ('RIU', _('Riau')),
+    ('SLB', _('Sulawesi Barat')),
+    ('SLS', _('Sulawesi Selatan')),
+    ('SLT', _('Sulawesi Tengah')),
+    ('SLR', _('Sulawesi Tenggara')),
+    ('SLU', _('Sulawesi Utara')),
+    ('SMB', _('Sumatera Barat')),
+    ('SMS', _('Sumatera Selatan')),
+    ('SMU', _('Sumatera Utara')),
+)
+
+LICENSE_PLATE_PREFIX_CHOICES = (
+    ('A', _('Banten')),
+    ('AA', _('Magelang')),
+    ('AB', _('Yogyakarta')),
+    ('AD', _('Surakarta - Solo')),
+    ('AE', _('Madiun')),
+    ('AG', _('Kediri')),
+    ('B', _('Jakarta')),
+    ('BA', _('Sumatera Barat')),
+    ('BB', _('Tapanuli')),
+    ('BD', _('Bengkulu')),
+    ('BE', _('Lampung')),
+    ('BG', _('Sumatera Selatan')),
+    ('BH', _('Jambi')),
+    ('BK', _('Sumatera Utara')),
+    ('BL', _('Nanggroe Aceh Darussalam')),
+    ('BM', _('Riau')),
+    ('BN', _('Kepulauan Bangka Belitung')),
+    ('BP', _('Kepulauan Riau')),
+    ('CC', _('Corps Consulate')),
+    ('CD', _('Corps Diplomatic')),
+    ('D', _('Bandung')),
+    ('DA', _('Kalimantan Selatan')),
+    ('DB', _('Sulawesi Utara Daratan')),
+    ('DC', _('Sulawesi Barat')),
+    ('DD', _('Sulawesi Selatan')),
+    ('DE', _('Maluku')),
+    ('DG', _('Maluku Utara')),
+    ('DH', _('NTT - Timor')),
+    ('DK', _('Bali')),
+    ('DL', _('Sulawesi Utara Kepulauan')),
+    ('DM', _('Gorontalo')),
+    ('DN', _('Sulawesi Tengah')),
+    ('DR', _('NTB - Lombok')),
+    ('DS', _('Papua dan Papua Barat')),
+    ('DT', _('Sulawesi Tenggara')),
+    ('E', _('Cirebon')),
+    ('EA', _('NTB - Sumbawa')),
+    ('EB', _('NTT - Flores')),
+    ('ED', _('NTT - Sumba')),
+    ('F', _('Bogor')),
+    ('G', _('Pekalongan')),
+    ('H', _('Semarang')),
+    ('K', _('Pati')),
+    ('KB', _('Kalimantan Barat')),
+    ('KH', _('Kalimantan Tengah')),
+    ('KT', _('Kalimantan Timur')),
+    ('L', _('Surabaya')),
+    ('M', _('Madura')),
+    ('N', _('Malang')),
+    ('P', _('Jember')),
+    ('R', _('Banyumas')),
+    ('RI', _('Federal Government')),
+    ('S', _('Bojonegoro')),
+    ('T', _('Purwakarta')),
+    ('W', _('Sidoarjo')),
+    ('Z', _('Garut')),
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/ie/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,13 @@
+"""
+UK-specific Form helpers
+"""
+
+from django.forms.fields import Select
+
+class IECountySelect(Select):
+    """
+    A Select widget that uses a list of Irish Counties as its choices.
+    """
+    def __init__(self, attrs=None):
+        from ie_counties import IE_COUNTY_CHOICES
+        super(IECountySelect, self).__init__(attrs, choices=IE_COUNTY_CHOICES)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/ie/ie_counties.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,40 @@
+"""
+Sources:
+    Irish Counties: http://en.wikipedia.org/wiki/Counties_of_Ireland    
+"""
+from django.utils.translation import ugettext_lazy as _
+
+IE_COUNTY_CHOICES = (
+    ('antrim', _('Antrim')),
+    ('armagh', _('Armagh')),
+    ('carlow', _('Carlow')),
+    ('cavan', _('Cavan')),
+    ('clare', _('Clare')),
+    ('cork', _('Cork')),
+    ('derry', _('Derry')),
+    ('donegal', _('Donegal')),
+    ('down', _('Down')),
+    ('dublin', _('Dublin')),
+    ('fermanagh', _('Fermanagh')),
+    ('galway', _('Galway')),
+    ('kerry', _('Kerry')),
+    ('kildare', _('Kildare')),
+    ('kilkenny', _('Kilkenny')),
+    ('laois', _('Laois')),
+    ('leitrim', _('Leitrim')),
+    ('limerick', _('Limerick')),
+    ('longford', _('Longford')),
+    ('louth', _('Louth')),
+    ('mayo', _('Mayo')),
+    ('meath', _('Meath')),
+    ('monaghan', _('Monaghan')),
+    ('offaly', _('Offaly')),
+    ('roscommon', _('Roscommon')),
+    ('sligo', _('Sligo')),
+    ('tipperary', _('Tipperary')),
+    ('tyrone', _('Tyrone')),
+    ('waterford', _('Waterford')),
+    ('westmeath', _('Westmeath')),
+    ('wexford', _('Wexford')),
+    ('wicklow', _('Wicklow')),
+)
--- a/web/lib/django/contrib/localflavor/in_/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/in_/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,9 @@
 India-specific Form helpers.
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.forms.fields import Field, RegexField, Select
 from django.utils.encoding import smart_unicode
 from django.utils.translation import gettext
 import re
--- a/web/lib/django/contrib/localflavor/is_/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/is_/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,9 @@
 Iceland specific form helpers.
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import RegexField, EMPTY_VALUES
+from django.forms.fields import RegexField
 from django.forms.widgets import Select
 from django.utils.translation import ugettext_lazy as _
 from django.utils.encoding import smart_unicode
--- a/web/lib/django/contrib/localflavor/it/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/it/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,9 @@
 IT-specific Form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.forms.fields import Field, RegexField, Select
 from django.utils.translation import ugettext_lazy as _
 from django.utils.encoding import smart_unicode
 from django.contrib.localflavor.it.util import ssn_check_digit, vat_number_check_digit
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/kw/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,63 @@
+"""
+Kuwait-specific Form helpers
+"""
+import re
+from datetime import date
+
+from django.core.validators import EMPTY_VALUES
+from django.forms import ValidationError
+from django.forms.fields import Field, RegexField
+from django.utils.translation import gettext as _
+
+id_re = re.compile(r'^(?P<initial>\d{1})(?P<yy>\d\d)(?P<mm>\d\d)(?P<dd>\d\d)(?P<mid>\d{4})(?P<checksum>\d{1})')
+
+class KWCivilIDNumberField(Field):
+    """
+    Kuwaiti Civil ID numbers are 12 digits, second to seventh digits
+    represents the person's birthdate.
+
+    Checks the following rules to determine the validty of the number:
+        * The number consist of 12 digits.
+        * The birthdate of the person is a valid date.
+        * The calculated checksum equals to the last digit of the Civil ID.
+    """
+    default_error_messages = {
+        'invalid': _('Enter a valid Kuwaiti Civil ID number'),
+    }
+
+    def has_valid_checksum(self, value):
+        weight = (2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
+        calculated_checksum = 0
+        for i in range(11):
+            calculated_checksum += int(value[i]) * weight[i]
+
+        remainder = calculated_checksum % 11
+        checkdigit = 11 - remainder
+        if checkdigit != int(value[11]):
+            return False
+        return True
+
+    def clean(self, value):
+        super(KWCivilIDNumberField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return u''
+
+        if not re.match(r'^\d{12}$', value):
+            raise ValidationError(self.error_messages['invalid'])
+
+        match = re.match(id_re, value)
+
+        if not match:
+            raise ValidationError(self.error_messages['invalid'])
+
+        gd = match.groupdict()
+
+        try:
+            d = date(int(gd['yy']), int(gd['mm']), int(gd['dd']))
+        except ValueError:
+            raise ValidationError(self.error_messages['invalid'])
+
+        if not self.has_valid_checksum(value):
+            raise ValidationError(self.error_messages['invalid'])
+
+        return value
--- a/web/lib/django/contrib/localflavor/nl/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/nl/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -4,8 +4,9 @@
 
 import re
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, Select, EMPTY_VALUES
+from django.forms.fields import Field, Select
 from django.utils.translation import ugettext_lazy as _
 from django.utils.encoding import smart_unicode
 
--- a/web/lib/django/contrib/localflavor/no/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/no/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -3,8 +3,9 @@
 """
 
 import re, datetime
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.forms.fields import Field, RegexField, Select
 from django.utils.translation import ugettext_lazy as _
 
 class NOZipCodeField(RegexField):
--- a/web/lib/django/contrib/localflavor/pe/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/pe/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -3,8 +3,9 @@
 PE-specific Form helpers.
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import RegexField, CharField, Select, EMPTY_VALUES
+from django.forms.fields import RegexField, CharField, Select
 from django.utils.translation import ugettext_lazy as _
 
 class PERegionSelect(Select):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/pt/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,48 @@
+"""
+PT-specific Form helpers
+"""
+
+from django.core.validators import EMPTY_VALUES
+from django.forms import ValidationError
+from django.forms.fields import Field, RegexField, Select
+from django.utils.encoding import smart_unicode
+from django.utils.translation import ugettext_lazy as _
+import re
+
+phone_digits_re = re.compile(r'^(\d{9}|(00|\+)\d*)$')
+
+
+class PTZipCodeField(RegexField):
+    default_error_messages = {
+        'invalid': _('Enter a zip code in the format XXXX-XXX.'),
+    }
+
+    def __init__(self, *args, **kwargs):
+        super(PTZipCodeField, self).__init__(r'^(\d{4}-\d{3}|\d{7})$',
+            max_length=None, min_length=None, *args, **kwargs)
+
+    def clean(self,value):
+        cleaned = super(PTZipCodeField, self).clean(value)
+        if len(cleaned) == 7:
+           return u'%s-%s' % (cleaned[:4],cleaned[4:])
+        else:
+           return cleaned
+        
+class PTPhoneNumberField(Field):
+    """
+    Validate local Portuguese phone number (including international ones)
+    It should have 9 digits (may include spaces) or start by 00 or + (international)
+    """
+    default_error_messages = {
+        'invalid': _('Phone numbers must have 9 digits, or start by + or 00.'),
+    }
+
+    def clean(self, value):
+        super(PTPhoneNumberField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return u''
+        value = re.sub('(\.|\s)', '', smart_unicode(value))
+        m = phone_digits_re.search(value)
+        if m:
+            return u'%s' % value
+        raise ValidationError(self.error_messages['invalid'])
--- a/web/lib/django/contrib/localflavor/ro/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/ro/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -5,8 +5,8 @@
 
 import re
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError, Field, RegexField, Select
-from django.forms.fields import EMPTY_VALUES
 from django.utils.translation import ugettext_lazy as _
 
 class ROCIFField(RegexField):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/se/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,157 @@
+# -*- coding: utf-8 -*-
+"""
+Swedish specific Form helpers
+"""
+import re
+from django import forms
+from django.utils.translation import ugettext_lazy as _
+from django.core.validators import EMPTY_VALUES
+from django.contrib.localflavor.se.utils import (id_number_checksum,
+    validate_id_birthday, format_personal_id_number, valid_organisation,
+    format_organisation_number)
+
+__all__ = ('SECountySelect', 'SEOrganisationNumberField',
+    'SEPersonalIdentityNumberField', 'SEPostalCodeField')
+
+SWEDISH_ID_NUMBER = re.compile(r'^(?P<century>\d{2})?(?P<year>\d{2})(?P<month>\d{2})(?P<day>\d{2})(?P<sign>[\-+])?(?P<serial>\d{3})(?P<checksum>\d)$')
+SE_POSTAL_CODE = re.compile(r'^[1-9]\d{2} ?\d{2}$')
+
+class SECountySelect(forms.Select):
+    """
+    A Select form widget that uses a list of the Swedish counties (län) as its
+    choices.
+
+    The cleaned value is the official county code -- see
+    http://en.wikipedia.org/wiki/Counties_of_Sweden for a list.
+    """
+
+    def __init__(self, attrs=None):
+        from se_counties import COUNTY_CHOICES
+        super(SECountySelect, self).__init__(attrs=attrs,
+                                             choices=COUNTY_CHOICES)
+
+class SEOrganisationNumberField(forms.CharField):
+    """
+    A form field that validates input as a Swedish organisation number
+    (organisationsnummer).
+
+    It accepts the same input as SEPersonalIdentityField (for sole
+    proprietorships (enskild firma). However, co-ordination numbers are not
+    accepted.
+
+    It also accepts ordinary Swedish organisation numbers with the format
+    NNNNNNNNNN.
+
+    The return value will be YYYYMMDDXXXX for sole proprietors, and NNNNNNNNNN
+    for other organisations.
+    """
+
+    default_error_messages = {
+        'invalid': _('Enter a valid Swedish organisation number.'),
+    }
+
+    def clean(self, value):
+        value = super(SEOrganisationNumberField, self).clean(value)
+        
+        if value in EMPTY_VALUES:
+            return u''
+        
+        match = SWEDISH_ID_NUMBER.match(value)
+        if not match:
+            raise forms.ValidationError(self.error_messages['invalid'])
+
+        gd = match.groupdict()
+        
+        # Compare the calculated value with the checksum 
+        if id_number_checksum(gd) != int(gd['checksum']):
+            raise forms.ValidationError(self.error_messages['invalid'])
+        
+        # First: check if this is a real organisation_number
+        if valid_organisation(gd):
+            return format_organisation_number(gd)
+
+        # Is this a single properitor (enskild firma)?
+        try:
+            birth_day = validate_id_birthday(gd, False)
+            return format_personal_id_number(birth_day, gd)
+        except ValueError:
+            raise forms.ValidationError(self.error_messages['invalid'])
+
+
+class SEPersonalIdentityNumberField(forms.CharField):
+    """
+    A form field that validates input as a Swedish personal identity number
+    (personnummer).
+
+    The correct formats are YYYYMMDD-XXXX, YYYYMMDDXXXX, YYMMDD-XXXX,
+    YYMMDDXXXX and YYMMDD+XXXX.
+
+    A + indicates that the person is older than 100 years, which will be taken
+    into consideration when the date is validated.
+    
+    The checksum will be calculated and checked. The birth date is checked to
+    be a valid date.
+
+    By default, co-ordination numbers (samordningsnummer) will be accepted. To
+    only allow real personal identity numbers, pass the keyword argument
+    coordination_number=False to the constructor.
+
+    The cleaned value will always have the format YYYYMMDDXXXX.
+    """
+
+    def __init__(self, coordination_number=True, *args, **kwargs):
+        self.coordination_number = coordination_number
+        super(SEPersonalIdentityNumberField, self).__init__(*args, **kwargs)
+
+    default_error_messages = {
+        'invalid': _('Enter a valid Swedish personal identity number.'),
+        'coordination_number': _('Co-ordination numbers are not allowed.'),
+    }
+
+    def clean(self, value):
+        value = super(SEPersonalIdentityNumberField, self).clean(value)
+
+        if value in EMPTY_VALUES:
+            return u''
+ 
+        match = SWEDISH_ID_NUMBER.match(value)
+        if match is None:
+            raise forms.ValidationError(self.error_messages['invalid'])
+
+        gd = match.groupdict()
+ 
+        # compare the calculated value with the checksum 
+        if id_number_checksum(gd) != int(gd['checksum']):
+            raise forms.ValidationError(self.error_messages['invalid'])
+
+        # check for valid birthday
+        try:
+            birth_day = validate_id_birthday(gd)
+        except ValueError:
+            raise forms.ValidationError(self.error_messages['invalid'])
+
+        # make sure that co-ordination numbers do not pass if not allowed 
+        if not self.coordination_number and int(gd['day']) > 60:
+            raise forms.ValidationError(self.error_messages['coordination_number'])
+  
+        return format_personal_id_number(birth_day, gd)
+
+
+class SEPostalCodeField(forms.RegexField):
+    """
+    A form field that validates input as a Swedish postal code (postnummer).
+    Valid codes consist of five digits (XXXXX). The number can optionally be
+    formatted with a space after the third digit (XXX XX).
+
+    The cleaned value will never contain the space. 
+    """
+
+    default_error_messages = {
+        'invalid': _('Enter a Swedish postal code in the format XXXXX.'),
+    }
+
+    def __init__(self, *args, **kwargs):
+        super(SEPostalCodeField, self).__init__(SE_POSTAL_CODE, *args, **kwargs)
+
+    def clean(self, value):
+        return super(SEPostalCodeField, self).clean(value).replace(' ', '')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/se/se_counties.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+"""
+An alphabetical list of Swedish counties, sorted by codes.
+
+http://en.wikipedia.org/wiki/Counties_of_Sweden
+
+This exists in this standalone file so that it's only imported into memory
+when explicitly needed.
+
+"""
+
+from django.utils.translation import ugettext_lazy as _
+
+COUNTY_CHOICES = (
+    ('AB', _(u'Stockholm')),
+    ('AC', _(u'Västerbotten')),
+    ('BD', _(u'Norrbotten')),
+    ('C', _(u'Uppsala')),
+    ('D', _(u'Södermanland')),
+    ('E', _(u'Östergötland')),
+    ('F', _(u'Jönköping')),
+    ('G', _(u'Kronoberg')),
+    ('H', _(u'Kalmar')),
+    ('I', _(u'Gotland')),
+    ('K', _(u'Blekinge')),
+    ('M', _(u'Skåne')),
+    ('N', _(u'Halland')),
+    ('O', _(u'Västra Götaland')),
+    ('S', _(u'Värmland')),
+    ('T', _(u'Örebro')),
+    ('U', _(u'Västmanland')),
+    ('W', _(u'Dalarna')),
+    ('X', _(u'Gävleborg')),
+    ('Y', _(u'Västernorrland')),
+    ('Z', _(u'Jämtland')),
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/se/utils.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,84 @@
+import re
+import datetime
+
+def id_number_checksum(gd):
+    """
+    Calculates a Swedish ID number checksum, using the
+    "Luhn"-algoritm
+    """
+    n = s = 0
+    for c in (gd['year'] + gd['month'] + gd['day'] + gd['serial']):
+        tmp = ((n % 2) and 1 or 2) * int(c)
+
+        if tmp > 9:
+            tmp = sum([int(i) for i in str(tmp)])
+ 
+        s += tmp
+        n += 1
+
+    if (s % 10) == 0:
+        return 0
+
+    return (((s / 10) + 1) * 10) - s
+
+def validate_id_birthday(gd, fix_coordination_number_day=True):
+    """
+    Validates the birth_day and returns the datetime.date object for
+    the birth_day.
+
+    If the date is an invalid birth day, a ValueError will be raised.
+    """
+    
+    today = datetime.date.today()
+    
+    day = int(gd['day'])
+    if fix_coordination_number_day and day > 60:
+        day -= 60
+
+    if gd['century'] is None:
+
+        # The century was not specified, and need to be calculated from todays date
+        current_year = today.year
+        year = int(today.strftime('%Y')) - int(today.strftime('%y')) + int(gd['year'])
+   
+        if ('%s%s%02d' % (gd['year'], gd['month'], day)) > today.strftime('%y%m%d'):
+            year -= 100
+
+        # If the person is older than 100 years
+        if gd['sign'] == '+':
+            year -= 100
+    else:
+        year = int(gd['century'] + gd['year'])
+        
+        # Make sure the year is valid
+        # There are no swedish personal identity numbers where year < 1800
+        if year < 1800:
+            raise ValueError
+
+    # ValueError will be raise for invalid dates
+    birth_day = datetime.date(year, int(gd['month']), day)
+    
+    # birth_day must not be in the future
+    if birth_day > today:
+        raise ValueError
+    
+    return birth_day
+
+def format_personal_id_number(birth_day, gd):
+    # birth_day.strftime cannot be used, since it does not support dates < 1900
+    return unicode(str(birth_day.year) + gd['month'] + gd['day'] + gd['serial'] + gd['checksum'])
+
+def format_organisation_number(gd):
+    if gd['century'] is None:
+        century = ''
+    else:
+        century = gd['century']
+
+    return unicode(century + gd['year'] + gd['month'] + gd['day'] + gd['serial'] + gd['checksum'])
+
+def valid_organisation(gd):
+    return gd['century'] in (None, 16) and \
+        int(gd['month']) >= 20 and \
+        gd['sign'] in (None, '-') and \
+        gd['year'][0] in ('2', '5', '7', '8', '9') # group identifier
+
--- a/web/lib/django/contrib/localflavor/uk/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/uk/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -33,7 +33,7 @@
         # Put a single space before the incode (second part).
         postcode = self.space_regex.sub(r' \1', postcode)
         if not self.postcode_regex.search(postcode):
-            raise ValidationError(self.default_error_messages['invalid'])
+            raise ValidationError(self.error_messages['invalid'])
         return postcode
 
 class UKCountySelect(Select):
--- a/web/lib/django/contrib/localflavor/us/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/us/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,9 @@
 USA-specific Form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, Select, EMPTY_VALUES
+from django.forms.fields import Field, RegexField, Select, CharField
 from django.utils.encoding import smart_unicode
 from django.utils.translation import ugettext_lazy as _
 import re
@@ -20,9 +21,9 @@
         super(USZipCodeField, self).__init__(r'^\d{5}(?:-\d{4})?$',
             max_length=None, min_length=None, *args, **kwargs)
 
-class USPhoneNumberField(Field):
+class USPhoneNumberField(CharField):
     default_error_messages = {
-        'invalid': u'Phone numbers must be in XXX-XXX-XXXX format.',
+        'invalid': _('Phone numbers must be in XXX-XXX-XXXX format.'),
     }
 
     def clean(self, value):
@@ -84,7 +85,7 @@
     abbreviation for the given state.
     """
     default_error_messages = {
-        'invalid': u'Enter a U.S. state or territory.',
+        'invalid': _('Enter a U.S. state or territory.'),
     }
 
     def clean(self, value):
--- a/web/lib/django/contrib/localflavor/us/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/us/models.py	Tue May 25 02:43:45 2010 +0200
@@ -1,35 +1,27 @@
 from django.conf import settings
-from django.db.models.fields import Field
+from django.utils.translation import ugettext_lazy as _
+from django.db.models.fields import CharField
+from django.contrib.localflavor.us.us_states import STATE_CHOICES
+
+class USStateField(CharField):
+
+    description = _("U.S. state (two uppercase letters)")
 
-class USStateField(Field): 
-    def get_internal_type(self): 
-        return "USStateField" 
-        
-    def db_type(self):
-        if settings.DATABASE_ENGINE == 'oracle':
-            return 'CHAR(2)'
-        else:
-            return 'varchar(2)'
-    
-    def formfield(self, **kwargs): 
-        from django.contrib.localflavor.us.forms import USStateSelect 
-        defaults = {'widget': USStateSelect} 
-        defaults.update(kwargs) 
-        return super(USStateField, self).formfield(**defaults)
+    def __init__(self, *args, **kwargs):
+        kwargs['choices'] = STATE_CHOICES
+        kwargs['max_length'] = 2
+        super(USStateField, self).__init__(*args, **kwargs)
 
-class PhoneNumberField(Field):
-    def get_internal_type(self):
-        return "PhoneNumberField"
+class PhoneNumberField(CharField):
+
+    description = _("Phone number")
 
-    def db_type(self):
-        if settings.DATABASE_ENGINE == 'oracle':
-            return 'VARCHAR2(20)'
-        else:
-            return 'varchar(20)'
+    def __init__(self, *args, **kwargs):
+        kwargs['max_length'] = 20
+        super(PhoneNumberField, self).__init__(*args, **kwargs)
 
     def formfield(self, **kwargs):
         from django.contrib.localflavor.us.forms import USPhoneNumberField
         defaults = {'form_class': USPhoneNumberField}
         defaults.update(kwargs)
         return super(PhoneNumberField, self).formfield(**defaults)
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/uy/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,60 @@
+# -*- coding: utf-8 -*-
+"""
+UY-specific form helpers.
+"""
+import re
+
+from django.core.validators import EMPTY_VALUES
+from django.forms.fields import Select, RegexField
+from django.forms import ValidationError
+from django.utils.translation import ugettext_lazy as _
+from django.contrib.localflavor.uy.util import get_validation_digit
+
+
+class UYDepartamentSelect(Select):
+    """
+    A Select widget that uses a list of Uruguayan departaments as its choices.
+    """
+    def __init__(self, attrs=None):
+        from uy_departaments import DEPARTAMENT_CHOICES
+        super(UYDepartamentSelect, self).__init__(attrs, choices=DEPARTAMENT_CHOICES)
+
+
+class UYCIField(RegexField):
+    """
+    A field that validates Uruguayan 'Cedula de identidad' (CI) numbers.
+    """
+    default_error_messages = {
+        'invalid': _("Enter a valid CI number in X.XXX.XXX-X,"
+                     "XXXXXXX-X or XXXXXXXX format."),
+        'invalid_validation_digit': _("Enter a valid CI number."),
+    }
+
+    def __init__(self, *args, **kwargs):
+        super(UYCIField, self).__init__(r'(?P<num>(\d{6,7}|(\d\.)?\d{3}\.\d{3}))-?(?P<val>\d)',
+                                        *args, **kwargs)
+
+    def clean(self, value):
+        """
+        Validates format and validation digit.
+
+        The official format is [X.]XXX.XXX-X but usually dots and/or slash are
+        omitted so, when validating, those characters are ignored if found in
+        the correct place. The three typically used formats are supported:
+        [X]XXXXXXX, [X]XXXXXX-X and [X.]XXX.XXX-X.
+        """
+
+        value = super(UYCIField, self).clean(value)
+        if value in EMPTY_VALUES:
+            return u''
+        match = self.regex.match(value)
+        if not match:
+            raise ValidationError(self.error_messages['invalid'])
+
+        number = int(match.group('num').replace('.', ''))
+        validation_digit = int(match.group('val'))
+
+        if not validation_digit == get_validation_digit(number):
+            raise ValidationError(self.error_messages['invalid_validation_digit'])
+
+        return value
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/uy/util.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+
+def get_validation_digit(number):
+    """ Calculates the validation digit for the given number. """
+    sum = 0
+    dvs = [4, 3, 6, 7, 8, 9, 2]
+    number = str(number)
+
+    for i in range(0, len(number)):
+        sum = (int(number[-1 - i]) * dvs[i] + sum) % 10
+
+    return (10-sum) % 10
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/localflavor/uy/uy_departaments.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+"""A list of Urguayan departaments as `choices` in a formfield."""
+
+DEPARTAMENT_CHOICES = (
+    ('G', u'Artigas'),
+    ('A', u'Canelones'),
+    ('E', u'Cerro Largo'),
+    ('L', u'Colonia'),
+    ('Q', u'Durazno'),
+    ('N', u'Flores'),
+    ('O', u'Florida'),
+    ('P', u'Lavalleja'),
+    ('B', u'Maldonado'),
+    ('S', u'Montevideo'),
+    ('I', u'Paysandú'),
+    ('J', u'Río Negro'),
+    ('F', u'Rivera'),
+    ('C', u'Rocha'),
+    ('H', u'Salto'),
+    ('M', u'San José'),
+    ('K', u'Soriano'),
+    ('R', u'Tacuarembó'),
+    ('D', u'Treinta y Tres'),
+)
--- a/web/lib/django/contrib/localflavor/za/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/localflavor/za/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,9 @@
 South Africa-specific Form helpers
 """
 
+from django.core.validators import EMPTY_VALUES
 from django.forms import ValidationError
-from django.forms.fields import Field, RegexField, EMPTY_VALUES
+from django.forms.fields import Field, RegexField
 from django.utils.checksums import luhn
 from django.utils.translation import gettext as _
 import re
--- a/web/lib/django/contrib/markup/templatetags/markup.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/markup/templatetags/markup.py	Tue May 25 02:43:45 2010 +0200
@@ -3,15 +3,12 @@
 markup syntaxes to HTML; currently there is support for:
 
     * Textile, which requires the PyTextile library available at
-      http://dealmeida.net/projects/textile/
+      http://loopcore.com/python-textile/
 
     * Markdown, which requires the Python-markdown library from
       http://www.freewisdom.org/projects/python-markdown
 
     * ReStructuredText, which requires docutils from http://docutils.sf.net/
-
-In each case, if the required library is not installed, the filter will
-silently fail and return the un-marked-up text.
 """
 
 from django import template
@@ -26,7 +23,7 @@
         import textile
     except ImportError:
         if settings.DEBUG:
-            raise template.TemplateSyntaxError, "Error in {% textile %} filter: The Python textile library isn't installed."
+            raise template.TemplateSyntaxError("Error in {% textile %} filter: The Python textile library isn't installed.")
         return force_unicode(value)
     else:
         return mark_safe(force_unicode(textile.textile(smart_str(value), encoding='utf-8', output='utf-8')))
@@ -53,7 +50,7 @@
         import markdown
     except ImportError:
         if settings.DEBUG:
-            raise template.TemplateSyntaxError, "Error in {% markdown %} filter: The Python markdown library isn't installed."
+            raise template.TemplateSyntaxError("Error in {% markdown %} filter: The Python markdown library isn't installed.")
         return force_unicode(value)
     else:
         # markdown.version was first added in 1.6b. The only version of markdown
@@ -81,7 +78,7 @@
         from docutils.core import publish_parts
     except ImportError:
         if settings.DEBUG:
-            raise template.TemplateSyntaxError, "Error in {% restructuredtext %} filter: The Python docutils library isn't installed."
+            raise template.TemplateSyntaxError("Error in {% restructuredtext %} filter: The Python docutils library isn't installed.")
         return force_unicode(value)
     else:
         docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,2 @@
+from api import *
+from constants import *
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/api.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,114 @@
+from django.contrib.messages import constants
+from django.contrib.messages.storage import default_storage
+from django.utils.functional import lazy, memoize
+
+__all__ = (
+    'add_message', 'get_messages',
+    'get_level', 'set_level',
+    'debug', 'info', 'success', 'warning', 'error',
+)
+
+
+class MessageFailure(Exception):
+    pass
+
+
+def add_message(request, level, message, extra_tags='', fail_silently=False):
+    """
+    Attempts to add a message to the request using the 'messages' app, falling
+    back to the user's message_set if MessageMiddleware hasn't been enabled.
+    """
+    if hasattr(request, '_messages'):
+        return request._messages.add(level, message, extra_tags)
+    if hasattr(request, 'user') and request.user.is_authenticated():
+        return request.user.message_set.create(message=message)
+    if not fail_silently:
+        raise MessageFailure('Without the django.contrib.messages '
+                                'middleware, messages can only be added to '
+                                'authenticated users.')
+
+
+def get_messages(request):
+    """
+    Returns the message storage on the request if it exists, otherwise returns
+    user.message_set.all() as the old auth context processor did.
+    """
+    if hasattr(request, '_messages'):
+        return request._messages
+
+    def get_user():
+        if hasattr(request, 'user'):
+            return request.user
+        else:
+            from django.contrib.auth.models import AnonymousUser
+            return AnonymousUser()
+
+    return lazy(memoize(get_user().get_and_delete_messages, {}, 0), list)()
+
+
+def get_level(request):
+    """
+    Returns the minimum level of messages to be recorded.
+
+    The default level is the ``MESSAGE_LEVEL`` setting. If this is not found,
+    the ``INFO`` level is used.
+    """
+    if hasattr(request, '_messages'):
+        storage = request._messages
+    else:
+        storage = default_storage(request)
+    return storage.level
+
+
+def set_level(request, level):
+    """
+    Sets the minimum level of messages to be recorded, returning ``True`` if
+    the level was recorded successfully.
+
+    If set to ``None``, the default level will be used (see the ``get_level``
+    method).
+    """
+    if not hasattr(request, '_messages'):
+        return False
+    request._messages.level = level
+    return True
+
+
+def debug(request, message, extra_tags='', fail_silently=False):
+    """
+    Adds a message with the ``DEBUG`` level.
+    """
+    add_message(request, constants.DEBUG, message, extra_tags=extra_tags,
+                fail_silently=fail_silently)
+
+
+def info(request, message, extra_tags='', fail_silently=False):
+    """
+    Adds a message with the ``INFO`` level.
+    """
+    add_message(request, constants.INFO, message, extra_tags=extra_tags,
+                fail_silently=fail_silently)
+
+
+def success(request, message, extra_tags='', fail_silently=False):
+    """
+    Adds a message with the ``SUCCESS`` level.
+    """
+    add_message(request, constants.SUCCESS, message, extra_tags=extra_tags,
+                fail_silently=fail_silently)
+
+
+def warning(request, message, extra_tags='', fail_silently=False):
+    """
+    Adds a message with the ``WARNING`` level.
+    """
+    add_message(request, constants.WARNING, message, extra_tags=extra_tags,
+                fail_silently=fail_silently)
+
+
+def error(request, message, extra_tags='', fail_silently=False):
+    """
+    Adds a message with the ``ERROR`` level.
+    """
+    add_message(request, constants.ERROR, message, extra_tags=extra_tags,
+                fail_silently=fail_silently)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/constants.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,13 @@
+DEBUG = 10
+INFO = 20
+SUCCESS = 25
+WARNING = 30
+ERROR = 40
+
+DEFAULT_TAGS = {
+    DEBUG: 'debug',
+    INFO: 'info',
+    SUCCESS: 'success',
+    WARNING: 'warning',
+    ERROR: 'error',
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/context_processors.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,8 @@
+from django.contrib.messages.api import get_messages
+
+
+def messages(request):
+    """
+    Returns a lazy 'messages' context variable.
+    """
+    return {'messages': get_messages(request)}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/middleware.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,26 @@
+from django.conf import settings
+from django.contrib.messages.storage import default_storage
+
+
+class MessageMiddleware(object):
+    """
+    Middleware that handles temporary messages.
+    """
+
+    def process_request(self, request):
+        request._messages = default_storage(request)
+
+    def process_response(self, request, response):
+        """
+        Updates the storage backend (i.e., saves the messages).
+
+        If not all messages could not be stored and ``DEBUG`` is ``True``, a
+        ``ValueError`` is raised.
+        """
+        # A higher middleware layer may return a request which does not contain
+        # messages storage, so make no assumption that it will be there.
+        if hasattr(request, '_messages'):
+            unstored_messages = request._messages.update(response)
+            if unstored_messages and settings.DEBUG:
+                raise ValueError('Not all temporary messages could be stored.')
+        return response
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/models.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+# Models module required so tests are discovered.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/storage/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,31 @@
+from django.conf import settings
+from django.core.exceptions import ImproperlyConfigured
+from django.utils.importlib import import_module
+
+
+def get_storage(import_path):
+    """
+    Imports the message storage class described by import_path, where
+    import_path is the full Python path to the class.
+    """
+    try:
+        dot = import_path.rindex('.')
+    except ValueError:
+        raise ImproperlyConfigured("%s isn't a Python path." % import_path)
+    module, classname = import_path[:dot], import_path[dot + 1:]
+    try:
+        mod = import_module(module)
+    except ImportError, e:
+        raise ImproperlyConfigured('Error importing module %s: "%s"' %
+                                   (module, e))
+    try:
+        return getattr(mod, classname)
+    except AttributeError:
+        raise ImproperlyConfigured('Module "%s" does not define a "%s" '
+                                   'class.' % (module, classname))
+
+
+# Callable with the same interface as the storage classes i.e.  accepts a
+# 'request' object.  It is wrapped in a lambda to stop 'settings' being used at
+# the module level
+default_storage = lambda request: get_storage(settings.MESSAGE_STORAGE)(request)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/storage/base.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,181 @@
+from django.conf import settings
+from django.utils.encoding import force_unicode, StrAndUnicode
+from django.contrib.messages import constants, utils
+
+
+LEVEL_TAGS = utils.get_level_tags()
+
+
+class Message(StrAndUnicode):
+    """
+    Represents an actual message that can be stored in any of the supported
+    storage classes (typically session- or cookie-based) and rendered in a view
+    or template.
+    """
+
+    def __init__(self, level, message, extra_tags=None):
+        self.level = int(level)
+        self.message = message
+        self.extra_tags = extra_tags
+
+    def _prepare(self):
+        """
+        Prepares the message for serialization by forcing the ``message``
+        and ``extra_tags`` to unicode in case they are lazy translations.
+
+        Known "safe" types (None, int, etc.) are not converted (see Django's
+        ``force_unicode`` implementation for details).
+        """
+        self.message = force_unicode(self.message, strings_only=True)
+        self.extra_tags = force_unicode(self.extra_tags, strings_only=True)
+
+    def __eq__(self, other):
+        return isinstance(other, Message) and self.level == other.level and \
+                                              self.message == other.message
+
+    def __unicode__(self):
+        return force_unicode(self.message)
+
+    def _get_tags(self):
+        label_tag = force_unicode(LEVEL_TAGS.get(self.level, ''),
+                                  strings_only=True)
+        extra_tags = force_unicode(self.extra_tags, strings_only=True)
+        if extra_tags and label_tag:
+            return u' '.join([extra_tags, label_tag])
+        elif extra_tags:
+            return extra_tags
+        elif label_tag:
+            return label_tag
+        return ''
+    tags = property(_get_tags)
+
+
+class BaseStorage(object):
+    """
+    This is the base backend for temporary message storage.
+
+    This is not a complete class; to be a usable storage backend, it must be
+    subclassed and the two methods ``_get`` and ``_store`` overridden.
+    """
+
+    def __init__(self, request, *args, **kwargs):
+        self.request = request
+        self._queued_messages = []
+        self.used = False
+        self.added_new = False
+        super(BaseStorage, self).__init__(*args, **kwargs)
+
+    def __len__(self):
+        return len(self._loaded_messages) + len(self._queued_messages)
+
+    def __iter__(self):
+        self.used = True
+        if self._queued_messages:
+            self._loaded_messages.extend(self._queued_messages)
+            self._queued_messages = []
+        return iter(self._loaded_messages)
+
+    def __contains__(self, item):
+        return item in self._loaded_messages or item in self._queued_messages
+
+    @property
+    def _loaded_messages(self):
+        """
+        Returns a list of loaded messages, retrieving them first if they have
+        not been loaded yet.
+        """
+        if not hasattr(self, '_loaded_data'):
+            messages, all_retrieved = self._get()
+            self._loaded_data = messages or []
+        return self._loaded_data
+
+    def _get(self, *args, **kwargs):
+        """
+        Retrieves a list of stored messages. Returns a tuple of the messages
+        and a flag indicating whether or not all the messages originally
+        intended to be stored in this storage were, in fact, stored and
+        retrieved; e.g., ``(messages, all_retrieved)``.
+
+        **This method must be implemented by a subclass.**
+
+        If it is possible to tell if the backend was not used (as opposed to
+        just containing no messages) then ``None`` should be returned in
+        place of ``messages``.
+        """
+        raise NotImplementedError()
+
+    def _store(self, messages, response, *args, **kwargs):
+        """
+        Stores a list of messages, returning a list of any messages which could
+        not be stored.
+
+        One type of object must be able to be stored, ``Message``.
+
+        **This method must be implemented by a subclass.**
+        """
+        raise NotImplementedError()
+
+    def _prepare_messages(self, messages):
+        """
+        Prepares a list of messages for storage.
+        """
+        for message in messages:
+            message._prepare()
+
+    def update(self, response):
+        """
+        Stores all unread messages.
+
+        If the backend has yet to be iterated, previously stored messages will
+        be stored again. Otherwise, only messages added after the last
+        iteration will be stored.
+        """
+        self._prepare_messages(self._queued_messages)
+        if self.used:
+            return self._store(self._queued_messages, response)
+        elif self.added_new:
+            messages = self._loaded_messages + self._queued_messages
+            return self._store(messages, response)
+
+    def add(self, level, message, extra_tags=''):
+        """
+        Queues a message to be stored.
+
+        The message is only queued if it contained something and its level is
+        not less than the recording level (``self.level``).
+        """
+        if not message:
+            return
+        # Check that the message level is not less than the recording level.
+        level = int(level)
+        if level < self.level:
+            return
+        # Add the message.
+        self.added_new = True
+        message = Message(level, message, extra_tags=extra_tags)
+        self._queued_messages.append(message)
+
+    def _get_level(self):
+        """
+        Returns the minimum recorded level.
+
+        The default level is the ``MESSAGE_LEVEL`` setting. If this is
+        not found, the ``INFO`` level is used.
+        """
+        if not hasattr(self, '_level'):
+            self._level = getattr(settings, 'MESSAGE_LEVEL', constants.INFO)
+        return self._level
+
+    def _set_level(self, value=None):
+        """
+        Sets a custom minimum recorded level.
+
+        If set to ``None``, the default level will be used (see the
+        ``_get_level`` method).
+        """
+        if value is None and hasattr(self, '_level'):
+            del self._level
+        else:
+            self._level = int(value)
+
+    level = property(_get_level, _set_level, _set_level)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/storage/cookie.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,152 @@
+import hmac
+
+from django.conf import settings
+from django.contrib.messages import constants
+from django.contrib.messages.storage.base import BaseStorage, Message
+from django.http import CompatCookie
+from django.utils import simplejson as json
+from django.utils.hashcompat import sha_hmac
+
+
+class MessageEncoder(json.JSONEncoder):
+    """
+    Compactly serializes instances of the ``Message`` class as JSON.
+    """
+    message_key = '__json_message'
+
+    def default(self, obj):
+        if isinstance(obj, Message):
+            message = [self.message_key, obj.level, obj.message]
+            if obj.extra_tags:
+                message.append(obj.extra_tags)
+            return message
+        return super(MessageEncoder, self).default(obj)
+
+
+class MessageDecoder(json.JSONDecoder):
+    """
+    Decodes JSON that includes serialized ``Message`` instances.
+    """
+
+    def process_messages(self, obj):
+        if isinstance(obj, list) and obj:
+            if obj[0] == MessageEncoder.message_key:
+                return Message(*obj[1:])
+            return [self.process_messages(item) for item in obj]
+        if isinstance(obj, dict):
+            return dict([(key, self.process_messages(value))
+                         for key, value in obj.iteritems()])
+        return obj
+
+    def decode(self, s, **kwargs):
+        decoded = super(MessageDecoder, self).decode(s, **kwargs)
+        return self.process_messages(decoded)
+
+class CookieStorage(BaseStorage):
+    """
+    Stores messages in a cookie.
+    """
+    cookie_name = 'messages'
+    # We should be able to store 4K in a cookie, but Internet Explorer
+    # imposes 4K as the *total* limit for a domain.  To allow other
+    # cookies, we go for 3/4 of 4K.
+    max_cookie_size = 3072
+    not_finished = '__messagesnotfinished__'
+
+    def _get(self, *args, **kwargs):
+        """
+        Retrieves a list of messages from the messages cookie.  If the
+        not_finished sentinel value is found at the end of the message list,
+        remove it and return a result indicating that not all messages were
+        retrieved by this storage.
+        """
+        data = self.request.COOKIES.get(self.cookie_name)
+        messages = self._decode(data)
+        all_retrieved = not (messages and messages[-1] == self.not_finished)
+        if messages and not all_retrieved:
+            # remove the sentinel value
+            messages.pop()
+        return messages, all_retrieved
+
+    def _update_cookie(self, encoded_data, response):
+        """
+        Either sets the cookie with the encoded data if there is any data to
+        store, or deletes the cookie.
+        """
+        if encoded_data:
+            response.set_cookie(self.cookie_name, encoded_data)
+        else:
+            response.delete_cookie(self.cookie_name)
+
+    def _store(self, messages, response, remove_oldest=True, *args, **kwargs):
+        """
+        Stores the messages to a cookie, returning a list of any messages which
+        could not be stored.
+
+        If the encoded data is larger than ``max_cookie_size``, removes
+        messages until the data fits (these are the messages which are
+        returned), and add the not_finished sentinel value to indicate as much.
+        """
+        unstored_messages = []
+        encoded_data = self._encode(messages)
+        if self.max_cookie_size:
+            # data is going to be stored eventually by CompatCookie, which
+            # adds it's own overhead, which we must account for.
+            cookie = CompatCookie() # create outside the loop
+            def stored_length(val):
+                return len(cookie.value_encode(val)[1])
+
+            while encoded_data and stored_length(encoded_data) > self.max_cookie_size:
+                if remove_oldest:
+                    unstored_messages.append(messages.pop(0))
+                else:
+                    unstored_messages.insert(0, messages.pop())
+                encoded_data = self._encode(messages + [self.not_finished],
+                                            encode_empty=unstored_messages)
+        self._update_cookie(encoded_data, response)
+        return unstored_messages
+
+    def _hash(self, value):
+        """
+        Creates an HMAC/SHA1 hash based on the value and the project setting's
+        SECRET_KEY, modified to make it unique for the present purpose.
+        """
+        key = 'django.contrib.messages' + settings.SECRET_KEY
+        return hmac.new(key, value, sha_hmac).hexdigest()
+
+    def _encode(self, messages, encode_empty=False):
+        """
+        Returns an encoded version of the messages list which can be stored as
+        plain text.
+
+        Since the data will be retrieved from the client-side, the encoded data
+        also contains a hash to ensure that the data was not tampered with.
+        """
+        if messages or encode_empty:
+            encoder = MessageEncoder(separators=(',', ':'))
+            value = encoder.encode(messages)
+            return '%s$%s' % (self._hash(value), value)
+
+    def _decode(self, data):
+        """
+        Safely decodes a encoded text stream back into a list of messages.
+
+        If the encoded text stream contained an invalid hash or was in an
+        invalid format, ``None`` is returned.
+        """
+        if not data:
+            return None
+        bits = data.split('$', 1)
+        if len(bits) == 2:
+            hash, value = bits
+            if hash == self._hash(value):
+                try:
+                    # If we get here (and the JSON decode works), everything is
+                    # good. In any other case, drop back and return None.
+                    return json.loads(value, cls=MessageDecoder)
+                except ValueError:
+                    pass
+        # Mark the data as used (so it gets removed) since something was wrong
+        # with the data.
+        self.used = True
+        return None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/storage/fallback.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,54 @@
+from django.contrib.messages.storage.base import BaseStorage
+from django.contrib.messages.storage.cookie import CookieStorage
+from django.contrib.messages.storage.session import SessionStorage
+
+class FallbackStorage(BaseStorage):
+    """
+    Tries to store all messages in the first backend, storing any unstored
+    messages in each subsequent backend backend.
+    """
+    storage_classes = (CookieStorage, SessionStorage)
+
+    def __init__(self, *args, **kwargs):
+        super(FallbackStorage, self).__init__(*args, **kwargs)
+        self.storages = [storage_class(*args, **kwargs)
+                         for storage_class in self.storage_classes]
+        self._used_storages = set()
+
+    def _get(self, *args, **kwargs):
+        """
+        Gets a single list of messages from all storage backends.
+        """
+        all_messages = []
+        for storage in self.storages:
+            messages, all_retrieved = storage._get()
+            # If the backend hasn't been used, no more retrieval is necessary.
+            if messages is None:
+                break
+            if messages:
+                self._used_storages.add(storage)
+            all_messages.extend(messages)
+            # If this storage class contained all the messages, no further
+            # retrieval is necessary
+            if all_retrieved:
+                break
+        return all_messages, all_retrieved
+
+    def _store(self, messages, response, *args, **kwargs):
+        """
+        Stores the messages, returning any unstored messages after trying all
+        backends.
+
+        For each storage backend, any messages not stored are passed on to the
+        next backend.
+        """
+        for storage in self.storages:
+            if messages:
+                messages = storage._store(messages, response,
+                                          remove_oldest=False)
+            # Even if there are no more messages, continue iterating to ensure
+            # storages which contained messages are flushed.
+            elif storage in self._used_storages:
+                storage._store([], response)
+                self._used_storages.remove(storage)
+        return messages
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/storage/session.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,33 @@
+from django.contrib.messages.storage.base import BaseStorage
+
+
+class SessionStorage(BaseStorage):
+    """
+    Stores messages in the session (that is, django.contrib.sessions).
+    """
+    session_key = '_messages'
+
+    def __init__(self, request, *args, **kwargs):
+        assert hasattr(request, 'session'), "The session-based temporary "\
+            "message storage requires session middleware to be installed, "\
+            "and come before the message middleware in the "\
+            "MIDDLEWARE_CLASSES list."
+        super(SessionStorage, self).__init__(request, *args, **kwargs)
+
+    def _get(self, *args, **kwargs):
+        """
+        Retrieves a list of messages from the request's session.  This storage
+        always stores everything it is given, so return True for the
+        all_retrieved flag.
+        """
+        return self.request.session.get(self.session_key), True
+
+    def _store(self, messages, response, *args, **kwargs):
+        """
+        Stores a list of messages to the request's session.
+        """
+        if messages:
+            self.request.session[self.session_key] = messages
+        else:
+            self.request.session.pop(self.session_key, None)
+        return []
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/storage/user_messages.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,64 @@
+"""
+Storages used to assist in the deprecation of contrib.auth User messages.
+
+"""
+from django.contrib.messages import constants
+from django.contrib.messages.storage.base import BaseStorage, Message
+from django.contrib.auth.models import User
+from django.contrib.messages.storage.fallback import FallbackStorage
+
+
+class UserMessagesStorage(BaseStorage):
+    """
+    Retrieves messages from the User, using the legacy user.message_set API.
+
+    This storage is "read-only" insofar as it can only retrieve and delete
+    messages, not store them.
+    """
+    session_key = '_messages'
+
+    def _get_messages_queryset(self):
+        """
+        Returns the QuerySet containing all user messages (or ``None`` if
+        request.user is not a contrib.auth User).
+        """
+        user = getattr(self.request, 'user', None)
+        if isinstance(user, User):
+            return user._message_set.all()
+
+    def add(self, *args, **kwargs):
+        raise NotImplementedError('This message storage is read-only.')
+
+    def _get(self, *args, **kwargs):
+        """
+        Retrieves a list of messages assigned to the User.  This backend never
+        stores anything, so all_retrieved is assumed to be False.
+        """
+        queryset = self._get_messages_queryset()
+        if queryset is None:
+            # This is a read-only and optional storage, so to ensure other
+            # storages will also be read if used with FallbackStorage an empty
+            # list is returned rather than None.
+            return [], False
+        messages = []
+        for user_message in queryset:
+            messages.append(Message(constants.INFO, user_message.message))
+        return messages, False
+
+    def _store(self, messages, *args, **kwargs):
+        """
+        Removes any messages assigned to the User and returns the list of
+        messages (since no messages are stored in this read-only storage).
+        """
+        queryset = self._get_messages_queryset()
+        if queryset is not None:
+            queryset.delete()
+        return messages
+
+
+class LegacyFallbackStorage(FallbackStorage):
+    """
+    Works like ``FallbackStorage`` but also handles retrieving (and clearing)
+    contrib.auth User messages.
+    """
+    storage_classes = (UserMessagesStorage,) + FallbackStorage.storage_classes
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/tests/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,6 @@
+from django.contrib.messages.tests.cookie import CookieTest
+from django.contrib.messages.tests.fallback import FallbackTest
+from django.contrib.messages.tests.middleware import MiddlewareTest
+from django.contrib.messages.tests.session import SessionTest
+from django.contrib.messages.tests.user_messages import \
+                                           UserMessagesTest, LegacyFallbackTest
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/tests/base.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,402 @@
+from django import http
+from django.test import TestCase
+from django.conf import settings
+from django.utils.translation import ugettext_lazy
+from django.contrib.messages import constants, utils, get_level, set_level
+from django.contrib.messages.api import MessageFailure
+from django.contrib.messages.storage import default_storage, base
+from django.contrib.messages.storage.base import Message
+from django.core.urlresolvers import reverse
+from django.contrib.auth.models import User
+
+
+def add_level_messages(storage):
+    """
+    Adds 6 messages from different levels (including a custom one) to a storage
+    instance.
+    """
+    storage.add(constants.INFO, 'A generic info message')
+    storage.add(29, 'Some custom level')
+    storage.add(constants.DEBUG, 'A debugging message', extra_tags='extra-tag')
+    storage.add(constants.WARNING, 'A warning')
+    storage.add(constants.ERROR, 'An error')
+    storage.add(constants.SUCCESS, 'This was a triumph.')
+
+
+class BaseTest(TestCase):
+    storage_class = default_storage
+    restore_settings = ['MESSAGE_LEVEL', 'MESSAGE_TAGS']
+    urls = 'django.contrib.messages.tests.urls'
+    levels = {
+        'debug': constants.DEBUG,
+        'info': constants.INFO,
+        'success': constants.SUCCESS,
+        'warning': constants.WARNING,
+        'error': constants.ERROR,
+    }
+
+    def setUp(self):
+        self._remembered_settings = {}
+        for setting in self.restore_settings:
+            if hasattr(settings, setting):
+                self._remembered_settings[setting] = getattr(settings, setting)
+                delattr(settings._wrapped, setting)
+        # Backup these manually because we do not want them deleted.
+        self._middleware_classes = settings.MIDDLEWARE_CLASSES
+        self._template_context_processors = \
+           settings.TEMPLATE_CONTEXT_PROCESSORS
+        self._installed_apps = settings.INSTALLED_APPS
+        self._message_storage = settings.MESSAGE_STORAGE
+        settings.MESSAGE_STORAGE = '%s.%s' % (self.storage_class.__module__,
+                                              self.storage_class.__name__)
+
+    def tearDown(self):
+        for setting in self.restore_settings:
+            self.restore_setting(setting)
+        # Restore these manually (see above).
+        settings.MIDDLEWARE_CLASSES = self._middleware_classes
+        settings.TEMPLATE_CONTEXT_PROCESSORS = \
+           self._template_context_processors
+        settings.INSTALLED_APPS = self._installed_apps
+        settings.MESSAGE_STORAGE = self._message_storage
+
+    def restore_setting(self, setting):
+        if setting in self._remembered_settings:
+            value = self._remembered_settings.pop(setting)
+            setattr(settings, setting, value)
+        elif hasattr(settings, setting):
+            delattr(settings._wrapped, setting)
+
+    def get_request(self):
+        return http.HttpRequest()
+
+    def get_response(self):
+        return http.HttpResponse()
+
+    def get_storage(self, data=None):
+        """
+        Returns the storage backend, setting its loaded data to the ``data``
+        argument.
+
+        This method avoids the storage ``_get`` method from getting called so
+        that other parts of the storage backend can be tested independent of
+        the message retrieval logic.
+        """
+        storage = self.storage_class(self.get_request())
+        storage._loaded_data = data or []
+        return storage
+
+    def test_add(self):
+        storage = self.get_storage()
+        self.assertFalse(storage.added_new)
+        storage.add(constants.INFO, 'Test message 1')
+        self.assert_(storage.added_new)
+        storage.add(constants.INFO, 'Test message 2', extra_tags='tag')
+        self.assertEqual(len(storage), 2)
+
+    def test_add_lazy_translation(self):
+        storage = self.get_storage()
+        response = self.get_response()
+
+        storage.add(constants.INFO, ugettext_lazy('lazy message'))
+        storage.update(response)
+
+        storing = self.stored_messages_count(storage, response)
+        self.assertEqual(storing, 1)
+
+    def test_no_update(self):
+        storage = self.get_storage()
+        response = self.get_response()
+        storage.update(response)
+        storing = self.stored_messages_count(storage, response)
+        self.assertEqual(storing, 0)
+
+    def test_add_update(self):
+        storage = self.get_storage()
+        response = self.get_response()
+
+        storage.add(constants.INFO, 'Test message 1')
+        storage.add(constants.INFO, 'Test message 1', extra_tags='tag')
+        storage.update(response)
+
+        storing = self.stored_messages_count(storage, response)
+        self.assertEqual(storing, 2)
+
+    def test_existing_add_read_update(self):
+        storage = self.get_existing_storage()
+        response = self.get_response()
+
+        storage.add(constants.INFO, 'Test message 3')
+        list(storage)   # Simulates a read
+        storage.update(response)
+
+        storing = self.stored_messages_count(storage, response)
+        self.assertEqual(storing, 0)
+
+    def test_existing_read_add_update(self):
+        storage = self.get_existing_storage()
+        response = self.get_response()
+
+        list(storage)   # Simulates a read
+        storage.add(constants.INFO, 'Test message 3')
+        storage.update(response)
+
+        storing = self.stored_messages_count(storage, response)
+        self.assertEqual(storing, 1)
+
+    def test_full_request_response_cycle(self):
+        """
+        With the message middleware enabled, tests that messages are properly
+        stored and then retrieved across the full request/redirect/response
+        cycle.
+        """
+        settings.MESSAGE_LEVEL = constants.DEBUG
+        data = {
+            'messages': ['Test message %d' % x for x in xrange(10)],
+        }
+        show_url = reverse('django.contrib.messages.tests.urls.show')
+        for level in ('debug', 'info', 'success', 'warning', 'error'):
+            add_url = reverse('django.contrib.messages.tests.urls.add',
+                              args=(level,))
+            response = self.client.post(add_url, data, follow=True)
+            self.assertRedirects(response, show_url)
+            self.assertTrue('messages' in response.context)
+            messages = [Message(self.levels[level], msg) for msg in
+                                                         data['messages']]
+            self.assertEqual(list(response.context['messages']), messages)
+            for msg in data['messages']:
+                self.assertContains(response, msg)
+
+    def test_multiple_posts(self):
+        """
+        Tests that messages persist properly when multiple POSTs are made
+        before a GET.
+        """
+        settings.MESSAGE_LEVEL = constants.DEBUG
+        data = {
+            'messages': ['Test message %d' % x for x in xrange(10)],
+        }
+        show_url = reverse('django.contrib.messages.tests.urls.show')
+        messages = []
+        for level in ('debug', 'info', 'success', 'warning', 'error'):
+            messages.extend([Message(self.levels[level], msg) for msg in
+                                                             data['messages']])
+            add_url = reverse('django.contrib.messages.tests.urls.add',
+                              args=(level,))
+            self.client.post(add_url, data)
+        response = self.client.get(show_url)
+        self.assertTrue('messages' in response.context)
+        self.assertEqual(list(response.context['messages']), messages)
+        for msg in data['messages']:
+            self.assertContains(response, msg)
+
+    def test_middleware_disabled_auth_user(self):
+        """
+        Tests that the messages API successfully falls back to using
+        user.message_set to store messages directly when the middleware is
+        disabled.
+        """
+        settings.MESSAGE_LEVEL = constants.DEBUG
+        user = User.objects.create_user('test', 'test@example.com', 'test')
+        self.client.login(username='test', password='test')
+        settings.INSTALLED_APPS = list(settings.INSTALLED_APPS)
+        settings.INSTALLED_APPS.remove(
+            'django.contrib.messages',
+        )
+        settings.MIDDLEWARE_CLASSES = list(settings.MIDDLEWARE_CLASSES)
+        settings.MIDDLEWARE_CLASSES.remove(
+            'django.contrib.messages.middleware.MessageMiddleware',
+        )
+        settings.TEMPLATE_CONTEXT_PROCESSORS = \
+          list(settings.TEMPLATE_CONTEXT_PROCESSORS)
+        settings.TEMPLATE_CONTEXT_PROCESSORS.remove(
+            'django.contrib.messages.context_processors.messages',
+        )
+        data = {
+            'messages': ['Test message %d' % x for x in xrange(10)],
+        }
+        show_url = reverse('django.contrib.messages.tests.urls.show')
+        for level in ('debug', 'info', 'success', 'warning', 'error'):
+            add_url = reverse('django.contrib.messages.tests.urls.add',
+                              args=(level,))
+            response = self.client.post(add_url, data, follow=True)
+            self.assertRedirects(response, show_url)
+            self.assertTrue('messages' in response.context)
+            context_messages = list(response.context['messages'])
+            for msg in data['messages']:
+                self.assertTrue(msg in context_messages)
+                self.assertContains(response, msg)
+
+    def test_middleware_disabled_anon_user(self):
+        """
+        Tests that, when the middleware is disabled and a user is not logged
+        in, an exception is raised when one attempts to store a message.
+        """
+        settings.MESSAGE_LEVEL = constants.DEBUG
+        settings.INSTALLED_APPS = list(settings.INSTALLED_APPS)
+        settings.INSTALLED_APPS.remove(
+            'django.contrib.messages',
+        )
+        settings.MIDDLEWARE_CLASSES = list(settings.MIDDLEWARE_CLASSES)
+        settings.MIDDLEWARE_CLASSES.remove(
+            'django.contrib.messages.middleware.MessageMiddleware',
+        )
+        settings.TEMPLATE_CONTEXT_PROCESSORS = \
+          list(settings.TEMPLATE_CONTEXT_PROCESSORS)
+        settings.TEMPLATE_CONTEXT_PROCESSORS.remove(
+            'django.contrib.messages.context_processors.messages',
+        )
+        data = {
+            'messages': ['Test message %d' % x for x in xrange(10)],
+        }
+        show_url = reverse('django.contrib.messages.tests.urls.show')
+        for level in ('debug', 'info', 'success', 'warning', 'error'):
+            add_url = reverse('django.contrib.messages.tests.urls.add',
+                              args=(level,))
+            self.assertRaises(MessageFailure, self.client.post, add_url,
+                              data, follow=True)
+
+    def test_middleware_disabled_anon_user_fail_silently(self):
+        """
+        Tests that, when the middleware is disabled and a user is not logged
+        in, an exception is not raised if 'fail_silently' = True
+        """
+        settings.MESSAGE_LEVEL = constants.DEBUG
+        settings.INSTALLED_APPS = list(settings.INSTALLED_APPS)
+        settings.INSTALLED_APPS.remove(
+            'django.contrib.messages',
+        )
+        settings.MIDDLEWARE_CLASSES = list(settings.MIDDLEWARE_CLASSES)
+        settings.MIDDLEWARE_CLASSES.remove(
+            'django.contrib.messages.middleware.MessageMiddleware',
+        )
+        settings.TEMPLATE_CONTEXT_PROCESSORS = \
+          list(settings.TEMPLATE_CONTEXT_PROCESSORS)
+        settings.TEMPLATE_CONTEXT_PROCESSORS.remove(
+            'django.contrib.messages.context_processors.messages',
+        )
+        data = {
+            'messages': ['Test message %d' % x for x in xrange(10)],
+            'fail_silently': True,
+        }
+        show_url = reverse('django.contrib.messages.tests.urls.show')
+        for level in ('debug', 'info', 'success', 'warning', 'error'):
+            add_url = reverse('django.contrib.messages.tests.urls.add',
+                              args=(level,))
+            response = self.client.post(add_url, data, follow=True)
+            self.assertRedirects(response, show_url)
+            self.assertTrue('messages' in response.context)
+            self.assertEqual(list(response.context['messages']), [])
+
+    def stored_messages_count(self, storage, response):
+        """
+        Returns the number of messages being stored after a
+        ``storage.update()`` call.
+        """
+        raise NotImplementedError('This method must be set by a subclass.')
+
+    def test_get(self):
+        raise NotImplementedError('This method must be set by a subclass.')
+
+    def get_existing_storage(self):
+        return self.get_storage([Message(constants.INFO, 'Test message 1'),
+                                 Message(constants.INFO, 'Test message 2',
+                                              extra_tags='tag')])
+
+    def test_existing_read(self):
+        """
+        Tests that reading the existing storage doesn't cause the data to be
+        lost.
+        """
+        storage = self.get_existing_storage()
+        self.assertFalse(storage.used)
+        # After iterating the storage engine directly, the used flag is set.
+        data = list(storage)
+        self.assert_(storage.used)
+        # The data does not disappear because it has been iterated.
+        self.assertEqual(data, list(storage))
+
+    def test_existing_add(self):
+        storage = self.get_existing_storage()
+        self.assertFalse(storage.added_new)
+        storage.add(constants.INFO, 'Test message 3')
+        self.assert_(storage.added_new)
+
+    def test_default_level(self):
+        # get_level works even with no storage on the request.
+        request = self.get_request()
+        self.assertEqual(get_level(request), constants.INFO)
+
+        # get_level returns the default level if it hasn't been set.
+        storage = self.get_storage()
+        request._messages = storage
+        self.assertEqual(get_level(request), constants.INFO)
+
+        # Only messages of sufficient level get recorded.
+        add_level_messages(storage)
+        self.assertEqual(len(storage), 5)
+
+    def test_low_level(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+        request._messages = storage
+
+        self.assert_(set_level(request, 5))
+        self.assertEqual(get_level(request), 5)
+
+        add_level_messages(storage)
+        self.assertEqual(len(storage), 6)
+
+    def test_high_level(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+        request._messages = storage
+
+        self.assert_(set_level(request, 30))
+        self.assertEqual(get_level(request), 30)
+
+        add_level_messages(storage)
+        self.assertEqual(len(storage), 2)
+
+    def test_settings_level(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+
+        settings.MESSAGE_LEVEL = 29
+        self.assertEqual(get_level(request), 29)
+
+        add_level_messages(storage)
+        self.assertEqual(len(storage), 3)
+
+    def test_tags(self):
+        storage = self.get_storage()
+        storage.level = 0
+        add_level_messages(storage)
+        tags = [msg.tags for msg in storage]
+        self.assertEqual(tags,
+                         ['info', '', 'extra-tag debug', 'warning', 'error',
+                          'success'])
+
+    def test_custom_tags(self):
+        settings.MESSAGE_TAGS = {
+            constants.INFO: 'info',
+            constants.DEBUG: '',
+            constants.WARNING: '',
+            constants.ERROR: 'bad',
+            29: 'custom',
+        }
+        # LEVEL_TAGS is a constant defined in the
+        # django.contrib.messages.storage.base module, so after changing
+        # settings.MESSAGE_TAGS, we need to update that constant too.
+        base.LEVEL_TAGS = utils.get_level_tags()
+        try:
+            storage = self.get_storage()
+            storage.level = 0
+            add_level_messages(storage)
+            tags = [msg.tags for msg in storage]
+            self.assertEqual(tags,
+                         ['info', 'custom', 'extra-tag', '', 'bad', 'success'])
+        finally:
+            # Ensure the level tags constant is put back like we found it.
+            self.restore_setting('MESSAGE_TAGS')
+            base.LEVEL_TAGS = utils.get_level_tags()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/tests/cookie.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,106 @@
+from django.contrib.messages import constants
+from django.contrib.messages.tests.base import BaseTest
+from django.contrib.messages.storage.cookie import CookieStorage, \
+                                            MessageEncoder, MessageDecoder
+from django.contrib.messages.storage.base import Message
+from django.utils import simplejson as json
+
+
+def set_cookie_data(storage, messages, invalid=False, encode_empty=False):
+    """
+    Sets ``request.COOKIES`` with the encoded data and removes the storage
+    backend's loaded data cache.
+    """
+    encoded_data = storage._encode(messages, encode_empty=encode_empty)
+    if invalid:
+        # Truncate the first character so that the hash is invalid.
+        encoded_data = encoded_data[1:]
+    storage.request.COOKIES = {CookieStorage.cookie_name: encoded_data}
+    if hasattr(storage, '_loaded_data'):
+        del storage._loaded_data
+
+
+def stored_cookie_messages_count(storage, response):
+    """
+    Returns an integer containing the number of messages stored.
+    """
+    # Get a list of cookies, excluding ones with a max-age of 0 (because
+    # they have been marked for deletion).
+    cookie = response.cookies.get(storage.cookie_name)
+    if not cookie or cookie['max-age'] == 0:
+        return 0
+    data = storage._decode(cookie.value)
+    if not data:
+        return 0
+    if data[-1] == CookieStorage.not_finished:
+        data.pop()
+    return len(data)
+
+
+class CookieTest(BaseTest):
+    storage_class = CookieStorage
+
+    def stored_messages_count(self, storage, response):
+        return stored_cookie_messages_count(storage, response)
+
+    def test_get(self):
+        storage = self.storage_class(self.get_request())
+        # Set initial data.
+        example_messages = ['test', 'me']
+        set_cookie_data(storage, example_messages)
+        # Test that the message actually contains what we expect.
+        self.assertEqual(list(storage), example_messages)
+
+    def test_get_bad_cookie(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+        # Set initial (invalid) data.
+        example_messages = ['test', 'me']
+        set_cookie_data(storage, example_messages, invalid=True)
+        # Test that the message actually contains what we expect.
+        self.assertEqual(list(storage), [])
+
+    def test_max_cookie_length(self):
+        """
+        Tests that, if the data exceeds what is allowed in a cookie, older
+        messages are removed before saving (and returned by the ``update``
+        method).
+        """
+        storage = self.get_storage()
+        response = self.get_response()
+
+        # When storing as a cookie, the cookie has constant overhead of approx
+        # 54 chars, and each message has a constant overhead of about 37 chars
+        # and a variable overhead of zero in the best case. We aim for a message
+        # size which will fit 4 messages into the cookie, but not 5.
+        # See also FallbackTest.test_session_fallback
+        msg_size = int((CookieStorage.max_cookie_size - 54) / 4.5 - 37)
+        for i in range(5):
+            storage.add(constants.INFO, str(i) * msg_size)
+        unstored_messages = storage.update(response)
+
+        cookie_storing = self.stored_messages_count(storage, response)
+        self.assertEqual(cookie_storing, 4)
+
+        self.assertEqual(len(unstored_messages), 1)
+        self.assert_(unstored_messages[0].message == '0' * msg_size)
+
+    def test_json_encoder_decoder(self):
+        """
+        Tests that a complex nested data structure containing Message
+        instances is properly encoded/decoded by the custom JSON
+        encoder/decoder classes.
+        """
+        messages = [
+            {
+                'message': Message(constants.INFO, 'Test message'),
+                'message_list': [Message(constants.INFO, 'message %s') \
+                                 for x in xrange(5)] + [{'another-message': \
+                                 Message(constants.ERROR, 'error')}],
+            },
+            Message(constants.INFO, 'message %s'),
+        ]
+        encoder = MessageEncoder(separators=(',', ':'))
+        value = encoder.encode(messages)
+        decoded_messages = json.loads(value, cls=MessageDecoder)
+        self.assertEqual(messages, decoded_messages)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/tests/fallback.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,175 @@
+from django.contrib.messages import constants
+from django.contrib.messages.storage.fallback import FallbackStorage, \
+    CookieStorage
+from django.contrib.messages.tests.base import BaseTest
+from django.contrib.messages.tests.cookie import set_cookie_data, \
+    stored_cookie_messages_count
+from django.contrib.messages.tests.session import set_session_data, \
+    stored_session_messages_count
+
+
+class FallbackTest(BaseTest):
+    storage_class = FallbackStorage
+
+    def get_request(self):
+        self.session = {}
+        request = super(FallbackTest, self).get_request()
+        request.session = self.session
+        return request
+
+    def get_cookie_storage(self, storage):
+        return storage.storages[-2]
+
+    def get_session_storage(self, storage):
+        return storage.storages[-1]
+
+    def stored_cookie_messages_count(self, storage, response):
+        return stored_cookie_messages_count(self.get_cookie_storage(storage),
+                                            response)
+
+    def stored_session_messages_count(self, storage, response):
+        return stored_session_messages_count(self.get_session_storage(storage))
+
+    def stored_messages_count(self, storage, response):
+        """
+        Return the storage totals from both cookie and session backends.
+        """
+        total = (self.stored_cookie_messages_count(storage, response) +
+                 self.stored_session_messages_count(storage, response))
+        return total
+
+    def test_get(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+        cookie_storage = self.get_cookie_storage(storage)
+
+        # Set initial cookie data.
+        example_messages = [str(i) for i in range(5)]
+        set_cookie_data(cookie_storage, example_messages)
+
+        # Overwrite the _get method of the fallback storage to prove it is not
+        # used (it would cause a TypeError: 'NoneType' object is not callable).
+        self.get_session_storage(storage)._get = None
+
+        # Test that the message actually contains what we expect.
+        self.assertEqual(list(storage), example_messages)
+
+    def test_get_empty(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+
+        # Overwrite the _get method of the fallback storage to prove it is not
+        # used (it would cause a TypeError: 'NoneType' object is not callable).
+        self.get_session_storage(storage)._get = None
+
+        # Test that the message actually contains what we expect.
+        self.assertEqual(list(storage), [])
+
+    def test_get_fallback(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+        cookie_storage = self.get_cookie_storage(storage)
+        session_storage = self.get_session_storage(storage)
+
+        # Set initial cookie and session data.
+        example_messages = [str(i) for i in range(5)]
+        set_cookie_data(cookie_storage, example_messages[:4] +
+                        [CookieStorage.not_finished])
+        set_session_data(session_storage, example_messages[4:])
+
+        # Test that the message actually contains what we expect.
+        self.assertEqual(list(storage), example_messages)
+
+    def test_get_fallback_only(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+        cookie_storage = self.get_cookie_storage(storage)
+        session_storage = self.get_session_storage(storage)
+
+        # Set initial cookie and session data.
+        example_messages = [str(i) for i in range(5)]
+        set_cookie_data(cookie_storage, [CookieStorage.not_finished],
+                        encode_empty=True)
+        set_session_data(session_storage, example_messages)
+
+        # Test that the message actually contains what we expect.
+        self.assertEqual(list(storage), example_messages)
+
+    def test_flush_used_backends(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+        cookie_storage = self.get_cookie_storage(storage)
+        session_storage = self.get_session_storage(storage)
+
+        # Set initial cookie and session data.
+        set_cookie_data(cookie_storage, ['cookie', CookieStorage.not_finished])
+        set_session_data(session_storage, ['session'])
+
+        # When updating, previously used but no longer needed backends are
+        # flushed.
+        response = self.get_response()
+        list(storage)
+        storage.update(response)
+        session_storing = self.stored_session_messages_count(storage, response)
+        self.assertEqual(session_storing, 0)
+
+    def test_no_fallback(self):
+        """
+        Confirms that:
+
+        (1) A short number of messages whose data size doesn't exceed what is
+        allowed in a cookie will all be stored in the CookieBackend.
+
+        (2) If the CookieBackend can store all messages, the SessionBackend
+        won't be written to at all.
+        """
+        storage = self.get_storage()
+        response = self.get_response()
+
+        # Overwrite the _store method of the fallback storage to prove it isn't
+        # used (it would cause a TypeError: 'NoneType' object is not callable).
+        self.get_session_storage(storage)._store = None
+
+        for i in range(5):
+            storage.add(constants.INFO, str(i) * 100)
+        storage.update(response)
+
+        cookie_storing = self.stored_cookie_messages_count(storage, response)
+        self.assertEqual(cookie_storing, 5)
+        session_storing = self.stored_session_messages_count(storage, response)
+        self.assertEqual(session_storing, 0)
+
+    def test_session_fallback(self):
+        """
+        Confirms that, if the data exceeds what is allowed in a cookie,
+        messages which did not fit are stored in the SessionBackend.
+        """
+        storage = self.get_storage()
+        response = self.get_response()
+
+        # see comment in CookieText.test_cookie_max_length
+        msg_size = int((CookieStorage.max_cookie_size - 54) / 4.5 - 37)
+        for i in range(5):
+            storage.add(constants.INFO, str(i) * msg_size)
+        storage.update(response)
+
+        cookie_storing = self.stored_cookie_messages_count(storage, response)
+        self.assertEqual(cookie_storing, 4)
+        session_storing = self.stored_session_messages_count(storage, response)
+        self.assertEqual(session_storing, 1)
+
+    def test_session_fallback_only(self):
+        """
+        Confirms that large messages, none of which fit in a cookie, are stored
+        in the SessionBackend (and nothing is stored in the CookieBackend).
+        """
+        storage = self.get_storage()
+        response = self.get_response()
+
+        storage.add(constants.INFO, 'x' * 5000)
+        storage.update(response)
+
+        cookie_storing = self.stored_cookie_messages_count(storage, response)
+        self.assertEqual(cookie_storing, 0)
+        session_storing = self.stored_session_messages_count(storage, response)
+        self.assertEqual(session_storing, 1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/tests/middleware.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,18 @@
+import unittest
+from django import http
+from django.contrib.messages.middleware import MessageMiddleware
+
+
+class MiddlewareTest(unittest.TestCase):
+
+    def setUp(self):
+        self.middleware = MessageMiddleware()
+
+    def test_response_without_messages(self):
+        """
+        Makes sure that the response middleware is tolerant of messages not
+        existing on request.
+        """
+        request = http.HttpRequest()
+        response = http.HttpResponse()
+        self.middleware.process_response(request, response)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/tests/session.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,38 @@
+from django.contrib.messages.tests.base import BaseTest
+from django.contrib.messages.storage.session import SessionStorage
+
+
+def set_session_data(storage, messages):
+    """
+    Sets the messages into the backend request's session and remove the
+    backend's loaded data cache.
+    """
+    storage.request.session[storage.session_key] = messages
+    if hasattr(storage, '_loaded_data'):
+        del storage._loaded_data
+
+
+def stored_session_messages_count(storage):
+    data = storage.request.session.get(storage.session_key, [])
+    return len(data)
+
+
+class SessionTest(BaseTest):
+    storage_class = SessionStorage
+
+    def get_request(self):
+        self.session = {}
+        request = super(SessionTest, self).get_request()
+        request.session = self.session
+        return request
+
+    def stored_messages_count(self, storage, response):
+        return stored_session_messages_count(storage)
+
+    def test_get(self):
+        storage = self.storage_class(self.get_request())
+        # Set initial data.
+        example_messages = ['test', 'me']
+        set_session_data(storage, example_messages)
+        # Test that the message actually contains what we expect.
+        self.assertEqual(list(storage), example_messages)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/tests/urls.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,39 @@
+from django.conf.urls.defaults import *
+from django.contrib import messages
+from django.core.urlresolvers import reverse
+from django.http import HttpResponseRedirect, HttpResponse
+from django.shortcuts import render_to_response
+from django.template import RequestContext, Template
+
+
+def add(request, message_type):
+    # don't default to False here, because we want to test that it defaults
+    # to False if unspecified
+    fail_silently = request.POST.get('fail_silently', None)
+    for msg in request.POST.getlist('messages'):
+        if fail_silently is not None:
+            getattr(messages, message_type)(request, msg,
+                                            fail_silently=fail_silently)
+        else:
+            getattr(messages, message_type)(request, msg)
+    show_url = reverse('django.contrib.messages.tests.urls.show')
+    return HttpResponseRedirect(show_url)
+
+
+def show(request):
+    t = Template("""{% if messages %}
+<ul class="messages">
+    {% for message in messages %}
+    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>
+        {{ message }}
+    </li>
+    {% endfor %}
+</ul>
+{% endif %}""")
+    return HttpResponse(t.render(RequestContext(request)))
+
+
+urlpatterns = patterns('',
+    ('^add/(debug|info|success|warning|error)/$', add),
+    ('^show/$', show),
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/tests/user_messages.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,65 @@
+from django import http
+from django.contrib.auth.models import User
+from django.contrib.messages.storage.user_messages import UserMessagesStorage,\
+    LegacyFallbackStorage
+from django.contrib.messages.tests.cookie import set_cookie_data
+from django.contrib.messages.tests.fallback import FallbackTest
+from django.test import TestCase
+
+
+class UserMessagesTest(TestCase):
+
+    def setUp(self):
+        self.user = User.objects.create(username='tester')
+
+    def test_add(self):
+        storage = UserMessagesStorage(http.HttpRequest())
+        self.assertRaises(NotImplementedError, storage.add, 'Test message 1')
+
+    def test_get_anonymous(self):
+        # Ensure that the storage still works if no user is attached to the
+        # request.
+        storage = UserMessagesStorage(http.HttpRequest())
+        self.assertEqual(len(storage), 0)
+
+    def test_get(self):
+        storage = UserMessagesStorage(http.HttpRequest())
+        storage.request.user = self.user
+        self.user.message_set.create(message='test message')
+
+        self.assertEqual(len(storage), 1)
+        self.assertEqual(list(storage)[0].message, 'test message')
+
+
+class LegacyFallbackTest(FallbackTest, TestCase):
+    storage_class = LegacyFallbackStorage
+
+    def setUp(self):
+        super(LegacyFallbackTest, self).setUp()
+        self.user = User.objects.create(username='tester')
+
+    def get_request(self, *args, **kwargs):
+        request = super(LegacyFallbackTest, self).get_request(*args, **kwargs)
+        request.user = self.user
+        return request
+
+    def test_get_legacy_only(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+        self.user.message_set.create(message='user message')
+
+        # Test that the message actually contains what we expect.
+        self.assertEqual(len(storage), 1)
+        self.assertEqual(list(storage)[0].message, 'user message')
+
+    def test_get_legacy(self):
+        request = self.get_request()
+        storage = self.storage_class(request)
+        cookie_storage = self.get_cookie_storage(storage)
+        self.user.message_set.create(message='user message')
+        set_cookie_data(cookie_storage, ['cookie'])
+
+        # Test that the message actually contains what we expect.
+        self.assertEqual(len(storage), 2)
+        self.assertEqual(list(storage)[0].message, 'user message')
+        self.assertEqual(list(storage)[1], 'cookie')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/contrib/messages/utils.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,11 @@
+from django.conf import settings
+from django.contrib.messages import constants
+
+
+def get_level_tags():
+    """
+    Returns the message level tags.
+    """
+    level_tags = constants.DEFAULT_TAGS.copy()
+    level_tags.update(getattr(settings, 'MESSAGE_TAGS', {}))
+    return level_tags
--- a/web/lib/django/contrib/sessions/backends/db.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/sessions/backends/db.py	Tue May 25 02:43:45 2010 +0200
@@ -1,14 +1,18 @@
 import datetime
+from django.conf import settings
 from django.contrib.sessions.models import Session
 from django.contrib.sessions.backends.base import SessionBase, CreateError
 from django.core.exceptions import SuspiciousOperation
-from django.db import IntegrityError, transaction
+from django.db import IntegrityError, transaction, router
 from django.utils.encoding import force_unicode
 
 class SessionStore(SessionBase):
     """
     Implements database session store.
     """
+    def __init__(self, session_key=None):
+        super(SessionStore, self).__init__(session_key)
+
     def load(self):
         try:
             s = Session.objects.get(
@@ -53,12 +57,13 @@
             session_data = self.encode(self._get_session(no_load=must_create)),
             expire_date = self.get_expiry_date()
         )
-        sid = transaction.savepoint()
+        using = router.db_for_write(Session, instance=obj)
+        sid = transaction.savepoint(using=using)
         try:
-            obj.save(force_insert=must_create)
+            obj.save(force_insert=must_create, using=using)
         except IntegrityError:
             if must_create:
-                transaction.savepoint_rollback(sid)
+                transaction.savepoint_rollback(sid, using=using)
                 raise CreateError
             raise
 
--- a/web/lib/django/contrib/sessions/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/sessions/models.py	Tue May 25 02:43:45 2010 +0200
@@ -58,7 +58,7 @@
         pickled, tamper_check = encoded_data[:-32], encoded_data[-32:]
         if md5_constructor(pickled + settings.SECRET_KEY).hexdigest() != tamper_check:
             from django.core.exceptions import SuspiciousOperation
-            raise SuspiciousOperation, "User tampered with session cookie."
+            raise SuspiciousOperation("User tampered with session cookie.")
         try:
             return pickle.loads(pickled)
         # Unpickling can cause a variety of exceptions. If something happens,
--- a/web/lib/django/contrib/sites/management.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/sites/management.py	Tue May 25 02:43:45 2010 +0200
@@ -6,12 +6,12 @@
 from django.contrib.sites.models import Site
 from django.contrib.sites import models as site_app
 
-def create_default_site(app, created_models, verbosity, **kwargs):
+def create_default_site(app, created_models, verbosity, db, **kwargs):
     if Site in created_models:
         if verbosity >= 2:
             print "Creating example.com Site object"
         s = Site(domain="example.com", name="example.com")
-        s.save()
+        s.save(using=db)
     Site.objects.clear_cache()
 
 signals.post_syncdb.connect(create_default_site, sender=site_app)
--- a/web/lib/django/contrib/sites/managers.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/sites/managers.py	Tue May 25 02:43:45 2010 +0200
@@ -14,7 +14,7 @@
             try:
                 self.model._meta.get_field(self.__field_name)
             except FieldDoesNotExist:
-                raise ValueError, "%s couldn't find a field named %s in %s." % \
-                    (self.__class__.__name__, self.__field_name, self.model._meta.object_name)
+                raise ValueError("%s couldn't find a field named %s in %s." % \
+                    (self.__class__.__name__, self.__field_name, self.model._meta.object_name))
             self.__is_validated = True
         return super(CurrentSiteManager, self).get_query_set().filter(**{self.__field_name + '__id__exact': settings.SITE_ID})
--- a/web/lib/django/contrib/syndication/feeds.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/syndication/feeds.py	Tue May 25 02:43:45 2010 +0200
@@ -1,78 +1,22 @@
-from datetime import datetime, timedelta
+from django.contrib.syndication import views
+from django.core.exceptions import ObjectDoesNotExist
+import warnings
 
-from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
-from django.template import loader, Template, TemplateDoesNotExist
-from django.contrib.sites.models import Site, RequestSite
-from django.utils import feedgenerator
-from django.utils.tzinfo import FixedOffset
-from django.utils.encoding import smart_unicode, iri_to_uri
-from django.conf import settings         
-from django.template import RequestContext
+# This is part of the deprecated API
+from django.contrib.syndication.views import FeedDoesNotExist, add_domain
 
-def add_domain(domain, url):
-    if not (url.startswith('http://') or url.startswith('https://')):
-        # 'url' must already be ASCII and URL-quoted, so no need for encoding
-        # conversions here.
-        url = iri_to_uri(u'http://%s%s' % (domain, url))
-    return url
-
-class FeedDoesNotExist(ObjectDoesNotExist):
-    pass
+class Feed(views.Feed):
+    """Provided for backwards compatibility."""
+    def __init__(self, slug, request):
+        warnings.warn('The syndication feeds.Feed class is deprecated. Please '
+                      'use the new class based view API.',
+                      category=PendingDeprecationWarning)
 
-class Feed(object):
-    item_pubdate = None
-    item_enclosure_url = None
-    feed_type = feedgenerator.DefaultFeed
-    feed_url = None
-    title_template = None
-    description_template = None
-
-    def __init__(self, slug, request):
         self.slug = slug
         self.request = request
-        self.feed_url = self.feed_url or request.path
-        self.title_template_name = self.title_template or ('feeds/%s_title.html' % slug)
-        self.description_template_name = self.description_template or ('feeds/%s_description.html' % slug)
-
-    def item_link(self, item):
-        try:
-            return item.get_absolute_url()
-        except AttributeError:
-            raise ImproperlyConfigured, "Give your %s class a get_absolute_url() method, or define an item_link() method in your Feed class." % item.__class__.__name__
-
-    def __get_dynamic_attr(self, attname, obj, default=None):
-        try:
-            attr = getattr(self, attname)
-        except AttributeError:
-            return default
-        if callable(attr):
-            # Check func_code.co_argcount rather than try/excepting the
-            # function and catching the TypeError, because something inside
-            # the function may raise the TypeError. This technique is more
-            # accurate.
-            if hasattr(attr, 'func_code'):
-                argcount = attr.func_code.co_argcount
-            else:
-                argcount = attr.__call__.func_code.co_argcount
-            if argcount == 2: # one argument is 'self'
-                return attr(obj)
-            else:
-                return attr()
-        return attr
-
-    def feed_extra_kwargs(self, obj):
-        """
-        Returns an extra keyword arguments dictionary that is used when
-        initializing the feed generator.
-        """
-        return {}
-
-    def item_extra_kwargs(self, item):
-        """
-        Returns an extra keyword arguments dictionary that is used with
-        the `add_item` call of the feed generator.
-        """
-        return {}
+        self.feed_url = getattr(self, 'feed_url', None) or request.path
+        self.title_template = self.title_template or ('feeds/%s_title.html' % slug)
+        self.description_template = self.description_template or ('feeds/%s_description.html' % slug)
 
     def get_object(self, bits):
         return None
@@ -86,94 +30,9 @@
             bits = url.split('/')
         else:
             bits = []
-
         try:
             obj = self.get_object(bits)
         except ObjectDoesNotExist:
             raise FeedDoesNotExist
-
-        if Site._meta.installed:
-            current_site = Site.objects.get_current()
-        else:
-            current_site = RequestSite(self.request)
-        
-        link = self.__get_dynamic_attr('link', obj)
-        link = add_domain(current_site.domain, link)
-
-        feed = self.feed_type(
-            title = self.__get_dynamic_attr('title', obj),
-            subtitle = self.__get_dynamic_attr('subtitle', obj),
-            link = link,
-            description = self.__get_dynamic_attr('description', obj),
-            language = settings.LANGUAGE_CODE.decode(),
-            feed_url = add_domain(current_site.domain,
-                                  self.__get_dynamic_attr('feed_url', obj)),
-            author_name = self.__get_dynamic_attr('author_name', obj),
-            author_link = self.__get_dynamic_attr('author_link', obj),
-            author_email = self.__get_dynamic_attr('author_email', obj),
-            categories = self.__get_dynamic_attr('categories', obj),
-            feed_copyright = self.__get_dynamic_attr('feed_copyright', obj),
-            feed_guid = self.__get_dynamic_attr('feed_guid', obj),
-            ttl = self.__get_dynamic_attr('ttl', obj),
-            **self.feed_extra_kwargs(obj)
-        )
-
-        try:
-            title_tmp = loader.get_template(self.title_template_name)
-        except TemplateDoesNotExist:
-            title_tmp = Template('{{ obj }}')
-        try:
-            description_tmp = loader.get_template(self.description_template_name)
-        except TemplateDoesNotExist:
-            description_tmp = Template('{{ obj }}')
+        return super(Feed, self).get_feed(obj, self.request)
 
-        for item in self.__get_dynamic_attr('items', obj):
-            link = add_domain(current_site.domain, self.__get_dynamic_attr('item_link', item))
-            enc = None
-            enc_url = self.__get_dynamic_attr('item_enclosure_url', item)
-            if enc_url:
-                enc = feedgenerator.Enclosure(
-                    url = smart_unicode(enc_url),
-                    length = smart_unicode(self.__get_dynamic_attr('item_enclosure_length', item)),
-                    mime_type = smart_unicode(self.__get_dynamic_attr('item_enclosure_mime_type', item))
-                )
-            author_name = self.__get_dynamic_attr('item_author_name', item)
-            if author_name is not None:
-                author_email = self.__get_dynamic_attr('item_author_email', item)
-                author_link = self.__get_dynamic_attr('item_author_link', item)
-            else:
-                author_email = author_link = None
-
-            pubdate = self.__get_dynamic_attr('item_pubdate', item)
-            if pubdate and not pubdate.tzinfo:
-                now = datetime.now()
-                utcnow = datetime.utcnow()
-
-                # Must always subtract smaller time from larger time here.
-                if utcnow > now:
-                    sign = -1
-                    tzDifference = (utcnow - now)
-                else:
-                    sign = 1
-                    tzDifference = (now - utcnow)
-
-                # Round the timezone offset to the nearest half hour.
-                tzOffsetMinutes = sign * ((tzDifference.seconds / 60 + 15) / 30) * 30
-                tzOffset = timedelta(minutes=tzOffsetMinutes)
-                pubdate = pubdate.replace(tzinfo=FixedOffset(tzOffset))
-
-            feed.add_item(
-                title = title_tmp.render(RequestContext(self.request, {'obj': item, 'site': current_site})),
-                link = link,
-                description = description_tmp.render(RequestContext(self.request, {'obj': item, 'site': current_site})),
-                unique_id = self.__get_dynamic_attr('item_guid', item, link),
-                enclosure = enc,
-                pubdate = pubdate,
-                author_name = author_name,
-                author_email = author_email,
-                author_link = author_link,
-                categories = self.__get_dynamic_attr('item_categories', item),
-                item_copyright = self.__get_dynamic_attr('item_copyright', item),
-                **self.item_extra_kwargs(item)
-            )
-        return feed
--- a/web/lib/django/contrib/syndication/views.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/contrib/syndication/views.py	Tue May 25 02:43:45 2010 +0200
@@ -1,9 +1,192 @@
-from django.contrib.syndication import feeds
+import datetime
+from django.conf import settings
+from django.contrib.sites.models import Site, RequestSite
+from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist
 from django.http import HttpResponse, Http404
+from django.template import loader, Template, TemplateDoesNotExist, RequestContext
+from django.utils import feedgenerator, tzinfo
+from django.utils.encoding import force_unicode, iri_to_uri, smart_unicode
+from django.utils.html import escape
+
+def add_domain(domain, url):
+    if not (url.startswith('http://')
+            or url.startswith('https://')
+            or url.startswith('mailto:')):
+        # 'url' must already be ASCII and URL-quoted, so no need for encoding
+        # conversions here.
+        url = iri_to_uri(u'http://%s%s' % (domain, url))
+    return url
+
+class FeedDoesNotExist(ObjectDoesNotExist):
+    pass
+
+
+class Feed(object):
+    feed_type = feedgenerator.DefaultFeed
+    title_template = None
+    description_template = None
+
+    def __call__(self, request, *args, **kwargs):
+        try:
+            obj = self.get_object(request, *args, **kwargs)
+        except ObjectDoesNotExist:
+            raise Http404('Feed object does not exist.')
+        feedgen = self.get_feed(obj, request)
+        response = HttpResponse(mimetype=feedgen.mime_type)
+        feedgen.write(response, 'utf-8')
+        return response
+
+    def item_title(self, item):
+        # Titles should be double escaped by default (see #6533)
+        return escape(force_unicode(item))
+
+    def item_description(self, item):
+        return force_unicode(item)
+
+    def item_link(self, item):
+        try:
+            return item.get_absolute_url()
+        except AttributeError:
+            raise ImproperlyConfigured('Give your %s class a get_absolute_url() method, or define an item_link() method in your Feed class.' % item.__class__.__name__)
+
+    def __get_dynamic_attr(self, attname, obj, default=None):
+        try:
+            attr = getattr(self, attname)
+        except AttributeError:
+            return default
+        if callable(attr):
+            # Check func_code.co_argcount rather than try/excepting the
+            # function and catching the TypeError, because something inside
+            # the function may raise the TypeError. This technique is more
+            # accurate.
+            if hasattr(attr, 'func_code'):
+                argcount = attr.func_code.co_argcount
+            else:
+                argcount = attr.__call__.func_code.co_argcount
+            if argcount == 2: # one argument is 'self'
+                return attr(obj)
+            else:
+                return attr()
+        return attr
+
+    def feed_extra_kwargs(self, obj):
+        """
+        Returns an extra keyword arguments dictionary that is used when
+        initializing the feed generator.
+        """
+        return {}
+
+    def item_extra_kwargs(self, item):
+        """
+        Returns an extra keyword arguments dictionary that is used with
+        the `add_item` call of the feed generator.
+        """
+        return {}
+
+    def get_object(self, request, *args, **kwargs):
+        return None
+
+    def get_feed(self, obj, request):
+        """
+        Returns a feedgenerator.DefaultFeed object, fully populated, for
+        this feed. Raises FeedDoesNotExist for invalid parameters.
+        """
+        if Site._meta.installed:
+            current_site = Site.objects.get_current()
+        else:
+            current_site = RequestSite(request)
+
+        link = self.__get_dynamic_attr('link', obj)
+        link = add_domain(current_site.domain, link)
+
+        feed = self.feed_type(
+            title = self.__get_dynamic_attr('title', obj),
+            subtitle = self.__get_dynamic_attr('subtitle', obj),
+            link = link,
+            description = self.__get_dynamic_attr('description', obj),
+            language = settings.LANGUAGE_CODE.decode(),
+            feed_url = add_domain(current_site.domain,
+                    self.__get_dynamic_attr('feed_url', obj) or request.path),
+            author_name = self.__get_dynamic_attr('author_name', obj),
+            author_link = self.__get_dynamic_attr('author_link', obj),
+            author_email = self.__get_dynamic_attr('author_email', obj),
+            categories = self.__get_dynamic_attr('categories', obj),
+            feed_copyright = self.__get_dynamic_attr('feed_copyright', obj),
+            feed_guid = self.__get_dynamic_attr('feed_guid', obj),
+            ttl = self.__get_dynamic_attr('ttl', obj),
+            **self.feed_extra_kwargs(obj)
+        )
+
+        title_tmp = None
+        if self.title_template is not None:
+            try:
+                title_tmp = loader.get_template(self.title_template)
+            except TemplateDoesNotExist:
+                pass
+
+        description_tmp = None
+        if self.description_template is not None:
+            try:
+                description_tmp = loader.get_template(self.description_template)
+            except TemplateDoesNotExist:
+                pass
+
+        for item in self.__get_dynamic_attr('items', obj):
+            if title_tmp is not None:
+                title = title_tmp.render(RequestContext(request, {'obj': item, 'site': current_site}))
+            else:
+                title = self.__get_dynamic_attr('item_title', item)
+            if description_tmp is not None:
+                description = description_tmp.render(RequestContext(request, {'obj': item, 'site': current_site}))
+            else:
+                description = self.__get_dynamic_attr('item_description', item)
+            link = add_domain(current_site.domain, self.__get_dynamic_attr('item_link', item))
+            enc = None
+            enc_url = self.__get_dynamic_attr('item_enclosure_url', item)
+            if enc_url:
+                enc = feedgenerator.Enclosure(
+                    url = smart_unicode(enc_url),
+                    length = smart_unicode(self.__get_dynamic_attr('item_enclosure_length', item)),
+                    mime_type = smart_unicode(self.__get_dynamic_attr('item_enclosure_mime_type', item))
+                )
+            author_name = self.__get_dynamic_attr('item_author_name', item)
+            if author_name is not None:
+                author_email = self.__get_dynamic_attr('item_author_email', item)
+                author_link = self.__get_dynamic_attr('item_author_link', item)
+            else:
+                author_email = author_link = None
+
+            pubdate = self.__get_dynamic_attr('item_pubdate', item)
+            if pubdate and not pubdate.tzinfo:
+                ltz = tzinfo.LocalTimezone(pubdate)
+                pubdate = pubdate.replace(tzinfo=ltz)
+
+            feed.add_item(
+                title = title,
+                link = link,
+                description = description,
+                unique_id = self.__get_dynamic_attr('item_guid', item, link),
+                enclosure = enc,
+                pubdate = pubdate,
+                author_name = author_name,
+                author_email = author_email,
+                author_link = author_link,
+                categories = self.__get_dynamic_attr('item_categories', item),
+                item_copyright = self.__get_dynamic_attr('item_copyright', item),
+                **self.item_extra_kwargs(item)
+            )
+        return feed
+
 
 def feed(request, url, feed_dict=None):
+    """Provided for backwards compatibility."""
+    import warnings
+    warnings.warn('The syndication feed() view is deprecated. Please use the '
+                  'new class based view API.',
+                  category=PendingDeprecationWarning)
+
     if not feed_dict:
-        raise Http404, "No feeds are registered."
+        raise Http404("No feeds are registered.")
 
     try:
         slug, param = url.split('/', 1)
@@ -13,13 +196,14 @@
     try:
         f = feed_dict[slug]
     except KeyError:
-        raise Http404, "Slug %r isn't registered." % slug
+        raise Http404("Slug %r isn't registered." % slug)
 
     try:
         feedgen = f(slug, request).get_feed(param)
-    except feeds.FeedDoesNotExist:
-        raise Http404, "Invalid feed parameters. Slug %r is valid, but other parameters, or lack thereof, are not." % slug
+    except FeedDoesNotExist:
+        raise Http404("Invalid feed parameters. Slug %r is valid, but other parameters, or lack thereof, are not." % slug)
 
     response = HttpResponse(mimetype=feedgen.mime_type)
     feedgen.write(response, 'utf-8')
     return response
+
--- a/web/lib/django/core/cache/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/cache/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -39,10 +39,10 @@
     (scheme, host, params) tuple.
     """
     if backend_uri.find(':') == -1:
-        raise InvalidCacheBackendError, "Backend URI must start with scheme://"
+        raise InvalidCacheBackendError("Backend URI must start with scheme://")
     scheme, rest = backend_uri.split(':', 1)
     if not rest.startswith('//'):
-        raise InvalidCacheBackendError, "Backend URI must start with scheme://"
+        raise InvalidCacheBackendError("Backend URI must start with scheme://")
 
     host = rest[2:]
     qpos = rest.find('?')
--- a/web/lib/django/core/cache/backends/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/cache/backends/base.py	Tue May 25 02:43:45 2010 +0200
@@ -71,7 +71,7 @@
         ValueError exception.
         """
         if key not in self:
-            raise ValueError, "Key '%s' not found" % key
+            raise ValueError("Key '%s' not found" % key)
         new_value = self.get(key) + delta
         self.set(key, new_value)
         return new_value
@@ -91,3 +91,28 @@
         # so that it always has the same functionality as has_key(), even
         # if a subclass overrides it.
         return self.has_key(key)
+
+    def set_many(self, data, timeout=None):
+        """
+        Set a bunch of values in the cache at once from a dict of key/value
+        pairs.  For certain backends (memcached), this is much more efficient
+        than calling set() multiple times.
+
+        If timeout is given, that timeout will be used for the key; otherwise
+        the default cache timeout will be used.
+        """
+        for key, value in data.items():
+            self.set(key, value, timeout)
+
+    def delete_many(self, keys):
+        """
+        Set a bunch of values in the cache at once.  For certain backends
+        (memcached), this is much more efficient than calling delete() multiple
+        times.
+        """
+        for key in keys:
+            self.delete(key)
+
+    def clear(self):
+        """Remove *all* values from the cache at once."""
+        raise NotImplementedError
--- a/web/lib/django/core/cache/backends/db.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/cache/backends/db.py	Tue May 25 02:43:45 2010 +0200
@@ -12,7 +12,7 @@
 class CacheClass(BaseCache):
     def __init__(self, table, params):
         BaseCache.__init__(self, params)
-        self._table = table
+        self._table = connection.ops.quote_name(table)
         max_entries = params.get('max_entries', 300)
         try:
             self._max_entries = int(max_entries)
@@ -60,12 +60,14 @@
             result = cursor.fetchone()
             if result and (mode == 'set' or
                     (mode == 'add' and result[1] < now)):
-                cursor.execute("UPDATE %s SET value = %%s, expires = %%s WHERE cache_key = %%s" % self._table, [encoded, str(exp), key])
+                cursor.execute("UPDATE %s SET value = %%s, expires = %%s WHERE cache_key = %%s" % self._table,
+                               [encoded, connection.ops.value_to_db_datetime(exp), key])
             else:
-                cursor.execute("INSERT INTO %s (cache_key, value, expires) VALUES (%%s, %%s, %%s)" % self._table, [key, encoded, str(exp)])
+                cursor.execute("INSERT INTO %s (cache_key, value, expires) VALUES (%%s, %%s, %%s)" % self._table,
+                               [key, encoded, connection.ops.value_to_db_datetime(exp)])
         except DatabaseError:
             # To be threadsafe, updates/inserts are allowed to fail silently
-            transaction.rollback()
+            transaction.rollback_unless_managed()
             return False
         else:
             transaction.commit_unless_managed()
@@ -79,16 +81,22 @@
     def has_key(self, key):
         now = datetime.now().replace(microsecond=0)
         cursor = connection.cursor()
-        cursor.execute("SELECT cache_key FROM %s WHERE cache_key = %%s and expires > %%s" % self._table, [key, now])
+        cursor.execute("SELECT cache_key FROM %s WHERE cache_key = %%s and expires > %%s" % self._table,
+                       [key, connection.ops.value_to_db_datetime(now)])
         return cursor.fetchone() is not None
 
     def _cull(self, cursor, now):
         if self._cull_frequency == 0:
-            cursor.execute("DELETE FROM %s" % self._table)
+            self.clear()
         else:
-            cursor.execute("DELETE FROM %s WHERE expires < %%s" % self._table, [str(now)])
+            cursor.execute("DELETE FROM %s WHERE expires < %%s" % self._table,
+                           [connection.ops.value_to_db_datetime(now)])
             cursor.execute("SELECT COUNT(*) FROM %s" % self._table)
             num = cursor.fetchone()[0]
             if num > self._max_entries:
                 cursor.execute("SELECT cache_key FROM %s ORDER BY cache_key LIMIT 1 OFFSET %%s" % self._table, [num / self._cull_frequency])
                 cursor.execute("DELETE FROM %s WHERE cache_key < %%s" % self._table, [cursor.fetchone()[0]])
+
+    def clear(self):
+        cursor = connection.cursor()
+        cursor.execute('DELETE FROM %s' % self._table)
--- a/web/lib/django/core/cache/backends/dummy.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/cache/backends/dummy.py	Tue May 25 02:43:45 2010 +0200
@@ -23,3 +23,12 @@
 
     def has_key(self, *args, **kwargs):
         return False
+
+    def set_many(self, *args, **kwargs):
+        pass
+
+    def delete_many(self, *args, **kwargs):
+        pass
+
+    def clear(self):
+        pass
--- a/web/lib/django/core/cache/backends/filebased.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/cache/backends/filebased.py	Tue May 25 02:43:45 2010 +0200
@@ -2,6 +2,7 @@
 
 import os
 import time
+import shutil
 try:
     import cPickle as pickle
 except ImportError:
@@ -41,13 +42,15 @@
         fname = self._key_to_file(key)
         try:
             f = open(fname, 'rb')
-            exp = pickle.load(f)
-            now = time.time()
-            if exp < now:
+            try:
+                exp = pickle.load(f)
+                now = time.time()
+                if exp < now:
+                    self._delete(fname)
+                else:
+                    return pickle.load(f)
+            finally:
                 f.close()
-                self._delete(fname)
-            else:
-                return pickle.load(f)
         except (IOError, OSError, EOFError, pickle.PickleError):
             pass
         return default
@@ -66,9 +69,12 @@
                 os.makedirs(dirname)
 
             f = open(fname, 'wb')
-            now = time.time()
-            pickle.dump(now + timeout, f, pickle.HIGHEST_PROTOCOL)
-            pickle.dump(value, f, pickle.HIGHEST_PROTOCOL)
+            try:
+                now = time.time()
+                pickle.dump(now + timeout, f, pickle.HIGHEST_PROTOCOL)
+                pickle.dump(value, f, pickle.HIGHEST_PROTOCOL)
+            finally:
+                f.close()
         except (IOError, OSError):
             pass
 
@@ -92,14 +98,16 @@
         fname = self._key_to_file(key)
         try:
             f = open(fname, 'rb')
-            exp = pickle.load(f)
-            now = time.time()
-            if exp < now:
+            try:
+                exp = pickle.load(f)
+                now = time.time()
+                if exp < now:
+                    self._delete(fname)
+                    return False
+                else:
+                    return True
+            finally:
                 f.close()
-                self._delete(fname)
-                return False
-            else:
-                return True
         except (IOError, OSError, EOFError, pickle.PickleError):
             return False
 
@@ -129,7 +137,7 @@
         try:
             os.makedirs(self._dir)
         except OSError:
-            raise EnvironmentError, "Cache directory '%s' does not exist and could not be created'" % self._dir
+            raise EnvironmentError("Cache directory '%s' does not exist and could not be created'" % self._dir)
 
     def _key_to_file(self, key):
         """
@@ -150,3 +158,9 @@
             count += len(files)
         return count
     _num_entries = property(_get_num_entries)
+
+    def clear(self):
+        try:
+            shutil.rmtree(self._dir)
+        except (IOError, OSError):
+            pass
--- a/web/lib/django/core/cache/backends/locmem.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/cache/backends/locmem.py	Tue May 25 02:43:45 2010 +0200
@@ -77,7 +77,7 @@
 
     def set(self, key, value, timeout=None):
         self._lock.writer_enters()
-        # Python 2.3 and 2.4 don't allow combined try-except-finally blocks.
+        # Python 2.4 doesn't allow combined try-except-finally blocks.
         try:
             try:
                 self._set(key, pickle.dumps(value), timeout)
@@ -110,8 +110,7 @@
 
     def _cull(self):
         if self._cull_frequency == 0:
-            self._cache.clear()
-            self._expire_info.clear()
+            self.clear()
         else:
             doomed = [k for (i, k) in enumerate(self._cache) if i % self._cull_frequency == 0]
             for k in doomed:
@@ -133,3 +132,7 @@
             self._delete(key)
         finally:
             self._lock.writer_leaves()
+
+    def clear(self):
+        self._cache.clear()
+        self._expire_info.clear()
--- a/web/lib/django/core/cache/backends/memcached.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/cache/backends/memcached.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,17 @@
 "Memcached cache backend"
 
+import time
+
 from django.core.cache.backends.base import BaseCache, InvalidCacheBackendError
 from django.utils.encoding import smart_unicode, smart_str
 
 try:
     import cmemcache as memcache
+    import warnings
+    warnings.warn(
+        "Support for the 'cmemcache' library has been deprecated. Please use python-memcached instead.",
+        PendingDeprecationWarning
+    )
 except ImportError:
     try:
         import memcache
@@ -16,25 +23,35 @@
         BaseCache.__init__(self, params)
         self._cache = memcache.Client(server.split(';'))
 
+    def _get_memcache_timeout(self, timeout):
+        """
+        Memcached deals with long (> 30 days) timeouts in a special
+        way. Call this function to obtain a safe value for your timeout.
+        """
+        timeout = timeout or self.default_timeout
+        if timeout > 2592000: # 60*60*24*30, 30 days
+            # See http://code.google.com/p/memcached/wiki/FAQ
+            # "You can set expire times up to 30 days in the future. After that
+            # memcached interprets it as a date, and will expire the item after
+            # said date. This is a simple (but obscure) mechanic."
+            #
+            # This means that we have to switch to absolute timestamps.
+            timeout += int(time.time())
+        return timeout
+
     def add(self, key, value, timeout=0):
         if isinstance(value, unicode):
             value = value.encode('utf-8')
-        return self._cache.add(smart_str(key), value, timeout or self.default_timeout)
+        return self._cache.add(smart_str(key), value, self._get_memcache_timeout(timeout))
 
     def get(self, key, default=None):
         val = self._cache.get(smart_str(key))
         if val is None:
             return default
-        else:
-            if isinstance(val, basestring):
-                return smart_unicode(val)
-            else:
-                return val
+        return val
 
     def set(self, key, value, timeout=0):
-        if isinstance(value, unicode):
-            value = value.encode('utf-8')
-        self._cache.set(smart_str(key), value, timeout or self.default_timeout)
+        self._cache.set(smart_str(key), value, self._get_memcache_timeout(timeout))
 
     def delete(self, key):
         self._cache.delete(smart_str(key))
@@ -46,7 +63,42 @@
         self._cache.disconnect_all()
 
     def incr(self, key, delta=1):
-        return self._cache.incr(key, delta)
+        try:
+            val = self._cache.incr(key, delta)
+
+        # python-memcache responds to incr on non-existent keys by
+        # raising a ValueError. Cmemcache returns None. In both
+        # cases, we should raise a ValueError though.
+        except ValueError:
+            val = None
+        if val is None:
+            raise ValueError("Key '%s' not found" % key)
+
+        return val
 
     def decr(self, key, delta=1):
-        return self._cache.decr(key, delta)
+        try:
+            val = self._cache.decr(key, delta)
+
+        # python-memcache responds to decr on non-existent keys by
+        # raising a ValueError. Cmemcache returns None. In both
+        # cases, we should raise a ValueError though.
+        except ValueError:
+            val = None
+        if val is None:
+            raise ValueError("Key '%s' not found" % key)
+        return val
+
+    def set_many(self, data, timeout=0):
+        safe_data = {}
+        for key, value in data.items():
+            if isinstance(value, unicode):
+                value = value.encode('utf-8')
+            safe_data[smart_str(key)] = value
+        self._cache.set_multi(safe_data, self._get_memcache_timeout(timeout))
+
+    def delete_many(self, keys):
+        self._cache.delete_multi(map(smart_str, keys))
+
+    def clear(self):
+        self._cache.flush_all()
--- a/web/lib/django/core/context_processors.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/context_processors.py	Tue May 25 02:43:45 2010 +0200
@@ -8,25 +8,44 @@
 """
 
 from django.conf import settings
+from django.middleware.csrf import get_token
+from django.utils.functional import lazy
 
 def auth(request):
     """
-    Returns context variables required by apps that use Django's authentication
-    system.
+    DEPRECATED. This context processor is the old location, and has been moved
+    to `django.contrib.auth.context_processors`.
 
-    If there is no 'user' attribute in the request, uses AnonymousUser (from
-    django.contrib.auth).
+    This function still exists for backwards-compatibility; it will be removed
+    in Django 1.4.
     """
-    if hasattr(request, 'user'):
-        user = request.user
-    else:
-        from django.contrib.auth.models import AnonymousUser
-        user = AnonymousUser()
-    return {
-        'user': user,
-        'messages': user.get_and_delete_messages(),
-        'perms': PermWrapper(user),
-    }
+    import warnings
+    warnings.warn(
+        "The context processor at `django.core.context_processors.auth` is " \
+        "deprecated; use the path `django.contrib.auth.context_processors.auth` " \
+        "instead.",
+        PendingDeprecationWarning
+    )
+    from django.contrib.auth.context_processors import auth as auth_context_processor
+    return auth_context_processor(request)
+
+def csrf(request):
+    """
+    Context processor that provides a CSRF token, or the string 'NOTPROVIDED' if
+    it has not been provided by either a view decorator or the middleware
+    """
+    def _get_val():
+        token = get_token(request)
+        if token is None:
+            # In order to be able to provide debugging info in the
+            # case of misconfiguration, we use a sentinel value
+            # instead of returning an empty dict.
+            return 'NOTPROVIDED'
+        else:
+            return token
+    _get_val = lazy(_get_val, str)
+
+    return {'csrf_token': _get_val() }
 
 def debug(request):
     "Returns context variables helpful for debugging."
@@ -79,7 +98,7 @@
 
     def __getitem__(self, module_name):
         return PermLookupDict(self.user, module_name)
-        
+
     def __iter__(self):
         # I am large, I contain multitudes.
         raise TypeError("PermWrapper is not iterable.")
--- a/web/lib/django/core/exceptions.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/exceptions.py	Tue May 25 02:43:45 2010 +0200
@@ -32,6 +32,51 @@
     """Some kind of problem with a model field."""
     pass
 
+NON_FIELD_ERRORS = '__all__'
 class ValidationError(Exception):
     """An error while validating data."""
-    pass
+    def __init__(self, message, code=None, params=None):
+        import operator
+        from django.utils.encoding import force_unicode
+        """
+        ValidationError can be passed any object that can be printed (usually
+        a string), a list of objects or a dictionary.
+        """
+        if isinstance(message, dict):
+            self.message_dict = message
+            # Reduce each list of messages into a single list.
+            message = reduce(operator.add, message.values())
+
+        if isinstance(message, list):
+            self.messages = [force_unicode(msg) for msg in message]
+        else:
+            self.code = code
+            self.params = params
+            message = force_unicode(message)
+            self.messages = [message]
+
+    def __str__(self):
+        # This is needed because, without a __str__(), printing an exception
+        # instance would result in this:
+        # AttributeError: ValidationError instance has no attribute 'args'
+        # See http://www.python.org/doc/current/tut/node10.html#handling
+        if hasattr(self, 'message_dict'):
+            return repr(self.message_dict)
+        return repr(self.messages)
+
+    def __repr__(self):
+        if hasattr(self, 'message_dict'):
+            return 'ValidationError(%s)' % repr(self.message_dict)
+        return 'ValidationError(%s)' % repr(self.messages)
+
+    def update_error_dict(self, error_dict):
+        if hasattr(self, 'message_dict'):
+            if error_dict:
+                for k, v in self.message_dict.items():
+                    error_dict.setdefault(k, []).extend(v)
+            else:
+                error_dict = self.message_dict
+        else:
+            error_dict[NON_FIELD_ERRORS] = self.messages
+        return error_dict
+
--- a/web/lib/django/core/files/images.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/files/images.py	Tue May 25 02:43:45 2010 +0200
@@ -30,7 +30,12 @@
 
 def get_image_dimensions(file_or_path):
     """Returns the (width, height) of an image, given an open file or a path."""
-    from PIL import ImageFile as PILImageFile
+    # Try to import PIL in either of the two ways it can end up installed.
+    try:
+        from PIL import ImageFile as PILImageFile
+    except ImportError:
+        import ImageFile as PILImageFile
+        
     p = PILImageFile.Parser()
     close = False
     if hasattr(file_or_path, 'read'):
--- a/web/lib/django/core/files/storage.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/files/storage.py	Tue May 25 02:43:45 2010 +0200
@@ -1,12 +1,13 @@
 import os
 import errno
 import urlparse
+import itertools
 
 from django.conf import settings
 from django.core.exceptions import ImproperlyConfigured, SuspiciousOperation
 from django.core.files import locks, File
 from django.core.files.move import file_move_safe
-from django.utils.encoding import force_unicode, smart_str
+from django.utils.encoding import force_unicode
 from django.utils.functional import LazyObject
 from django.utils.importlib import import_module
 from django.utils.text import get_valid_filename
@@ -65,13 +66,14 @@
         """
         dir_name, file_name = os.path.split(name)
         file_root, file_ext = os.path.splitext(file_name)
-        # If the filename already exists, keep adding an underscore (before the
-        # file extension, if one exists) to the filename until the generated
+        # If the filename already exists, add an underscore and a number (before
+        # the file extension, if one exists) to the filename until the generated
         # filename doesn't exist.
+        count = itertools.count(1)
         while self.exists(name):
-            file_root += '_'
             # file_ext includes the dot.
-            name = os.path.join(dir_name, file_root + file_ext)
+            name = os.path.join(dir_name, "%s_%s%s" % (file_root, count.next(), file_ext))
+
         return name
 
     def path(self, name):
@@ -118,10 +120,6 @@
         """
         raise NotImplementedError()
 
-    # Needed by django.utils.functional.LazyObject (via DefaultStorage).
-    def get_all_members(self):
-        return self.__members__
-
 class FileSystemStorage(Storage):
     """
     Standard filesystem storage
@@ -212,7 +210,7 @@
             path = safe_join(self.location, name)
         except ValueError:
             raise SuspiciousOperation("Attempted access to '%s' denied." % name)
-        return smart_str(os.path.normpath(path))
+        return os.path.normpath(path)
 
     def size(self, name):
         return os.path.getsize(self.path(name))
--- a/web/lib/django/core/handlers/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/handlers/base.py	Tue May 25 02:43:45 2010 +0200
@@ -34,16 +34,16 @@
             try:
                 dot = middleware_path.rindex('.')
             except ValueError:
-                raise exceptions.ImproperlyConfigured, '%s isn\'t a middleware module' % middleware_path
+                raise exceptions.ImproperlyConfigured('%s isn\'t a middleware module' % middleware_path)
             mw_module, mw_classname = middleware_path[:dot], middleware_path[dot+1:]
             try:
                 mod = import_module(mw_module)
             except ImportError, e:
-                raise exceptions.ImproperlyConfigured, 'Error importing middleware %s: "%s"' % (mw_module, e)
+                raise exceptions.ImproperlyConfigured('Error importing middleware %s: "%s"' % (mw_module, e))
             try:
                 mw_class = getattr(mod, mw_classname)
             except AttributeError:
-                raise exceptions.ImproperlyConfigured, 'Middleware module "%s" does not define a "%s" class' % (mw_module, mw_classname)
+                raise exceptions.ImproperlyConfigured('Middleware module "%s" does not define a "%s" class' % (mw_module, mw_classname))
 
             try:
                 mw_instance = mw_class()
@@ -68,70 +68,82 @@
         from django.core import exceptions, urlresolvers
         from django.conf import settings
 
-        # Apply request middleware
-        for middleware_method in self._request_middleware:
-            response = middleware_method(request)
-            if response:
-                return response
+        try:
+            try:
+                # Setup default url resolver for this thread.
+                urlconf = settings.ROOT_URLCONF
+                urlresolvers.set_urlconf(urlconf)
+                resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
 
-        # Get urlconf from request object, if available.  Otherwise use default.
-        urlconf = getattr(request, "urlconf", settings.ROOT_URLCONF)
-
-        resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
-        try:
-            callback, callback_args, callback_kwargs = resolver.resolve(
-                    request.path_info)
+                # Apply request middleware
+                for middleware_method in self._request_middleware:
+                    response = middleware_method(request)
+                    if response:
+                        return response
 
-            # Apply view middleware
-            for middleware_method in self._view_middleware:
-                response = middleware_method(request, callback, callback_args, callback_kwargs)
-                if response:
-                    return response
+                if hasattr(request, "urlconf"):
+                    # Reset url resolver with a custom urlconf.
+                    urlconf = request.urlconf
+                    urlresolvers.set_urlconf(urlconf)
+                    resolver = urlresolvers.RegexURLResolver(r'^/', urlconf)
 
-            try:
-                response = callback(request, *callback_args, **callback_kwargs)
-            except Exception, e:
-                # If the view raised an exception, run it through exception
-                # middleware, and if the exception middleware returns a
-                # response, use that. Otherwise, reraise the exception.
-                for middleware_method in self._exception_middleware:
-                    response = middleware_method(request, e)
+                callback, callback_args, callback_kwargs = resolver.resolve(
+                        request.path_info)
+
+                # Apply view middleware
+                for middleware_method in self._view_middleware:
+                    response = middleware_method(request, callback, callback_args, callback_kwargs)
                     if response:
                         return response
-                raise
 
-            # Complain if the view returned None (a common error).
-            if response is None:
-                try:
-                    view_name = callback.func_name # If it's a function
-                except AttributeError:
-                    view_name = callback.__class__.__name__ + '.__call__' # If it's a class
-                raise ValueError, "The view %s.%s didn't return an HttpResponse object." % (callback.__module__, view_name)
-
-            return response
-        except http.Http404, e:
-            if settings.DEBUG:
-                from django.views import debug
-                return debug.technical_404_response(request, e)
-            else:
                 try:
-                    callback, param_dict = resolver.resolve404()
-                    return callback(request, **param_dict)
-                except:
+                    response = callback(request, *callback_args, **callback_kwargs)
+                except Exception, e:
+                    # If the view raised an exception, run it through exception
+                    # middleware, and if the exception middleware returns a
+                    # response, use that. Otherwise, reraise the exception.
+                    for middleware_method in self._exception_middleware:
+                        response = middleware_method(request, e)
+                        if response:
+                            return response
+                    raise
+
+                # Complain if the view returned None (a common error).
+                if response is None:
                     try:
-                        return self.handle_uncaught_exception(request, resolver, sys.exc_info())
-                    finally:
-                        receivers = signals.got_request_exception.send(sender=self.__class__, request=request)
-        except exceptions.PermissionDenied:
-            return http.HttpResponseForbidden('<h1>Permission denied</h1>')
-        except SystemExit:
-            # Allow sys.exit() to actually exit. See tickets #1023 and #4701
-            raise
-        except: # Handle everything else, including SuspiciousOperation, etc.
-            # Get the exception info now, in case another exception is thrown later.
-            exc_info = sys.exc_info()
-            receivers = signals.got_request_exception.send(sender=self.__class__, request=request)
-            return self.handle_uncaught_exception(request, resolver, exc_info)
+                        view_name = callback.func_name # If it's a function
+                    except AttributeError:
+                        view_name = callback.__class__.__name__ + '.__call__' # If it's a class
+                    raise ValueError("The view %s.%s didn't return an HttpResponse object." % (callback.__module__, view_name))
+
+                return response
+            except http.Http404, e:
+                if settings.DEBUG:
+                    from django.views import debug
+                    return debug.technical_404_response(request, e)
+                else:
+                    try:
+                        callback, param_dict = resolver.resolve404()
+                        return callback(request, **param_dict)
+                    except:
+                        try:
+                            return self.handle_uncaught_exception(request, resolver, sys.exc_info())
+                        finally:
+                            receivers = signals.got_request_exception.send(sender=self.__class__, request=request)
+            except exceptions.PermissionDenied:
+                return http.HttpResponseForbidden('<h1>Permission denied</h1>')
+            except SystemExit:
+                # Allow sys.exit() to actually exit. See tickets #1023 and #4701
+                raise
+            except: # Handle everything else, including SuspiciousOperation, etc.
+                # Get the exception info now, in case another exception is thrown later.
+                exc_info = sys.exc_info()
+                receivers = signals.got_request_exception.send(sender=self.__class__, request=request)
+                return self.handle_uncaught_exception(request, resolver, exc_info)
+        finally:
+            # Reset URLconf for this thread on the way out for complete
+            # isolation of request.urlconf
+            urlresolvers.set_urlconf(None)
 
     def handle_uncaught_exception(self, request, resolver, exc_info):
         """
@@ -161,6 +173,9 @@
             request_repr = "Request repr() unavailable"
         message = "%s\n\n%s" % (self._get_traceback(exc_info), request_repr)
         mail_admins(subject, message, fail_silently=True)
+        # If Http500 handler is not installed, re-raise last exception
+        if resolver.urlconf_module is None:
+            raise exc_info[1], None, exc_info[2]
         # Return an HttpResponse that displays a friendly error message.
         callback, param_dict = resolver.resolve500()
         return callback(request, **param_dict)
--- a/web/lib/django/core/mail.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,426 +0,0 @@
-"""
-Tools for sending email.
-"""
-
-import mimetypes
-import os
-import smtplib
-import socket
-import time
-import random
-from email import Charset, Encoders
-from email.MIMEText import MIMEText
-from email.MIMEMultipart import MIMEMultipart
-from email.MIMEBase import MIMEBase
-from email.Header import Header
-from email.Utils import formatdate, parseaddr, formataddr
-
-from django.conf import settings
-from django.utils.encoding import smart_str, force_unicode
-
-# Don't BASE64-encode UTF-8 messages so that we avoid unwanted attention from
-# some spam filters.
-Charset.add_charset('utf-8', Charset.SHORTEST, Charset.QP, 'utf-8')
-
-# Default MIME type to use on attachments (if it is not explicitly given
-# and cannot be guessed).
-DEFAULT_ATTACHMENT_MIME_TYPE = 'application/octet-stream'
-
-# Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of
-# seconds, which slows down the restart of the server.
-class CachedDnsName(object):
-    def __str__(self):
-        return self.get_fqdn()
-
-    def get_fqdn(self):
-        if not hasattr(self, '_fqdn'):
-            self._fqdn = socket.getfqdn()
-        return self._fqdn
-
-DNS_NAME = CachedDnsName()
-
-# Copied from Python standard library, with the following modifications:
-# * Used cached hostname for performance.
-# * Added try/except to support lack of getpid() in Jython (#5496).
-def make_msgid(idstring=None):
-    """Returns a string suitable for RFC 2822 compliant Message-ID, e.g:
-
-    <20020201195627.33539.96671@nightshade.la.mastaler.com>
-
-    Optional idstring if given is a string used to strengthen the
-    uniqueness of the message id.
-    """
-    timeval = time.time()
-    utcdate = time.strftime('%Y%m%d%H%M%S', time.gmtime(timeval))
-    try:
-        pid = os.getpid()
-    except AttributeError:
-        # No getpid() in Jython, for example.
-        pid = 1
-    randint = random.randrange(100000)
-    if idstring is None:
-        idstring = ''
-    else:
-        idstring = '.' + idstring
-    idhost = DNS_NAME
-    msgid = '<%s.%s.%s%s@%s>' % (utcdate, pid, randint, idstring, idhost)
-    return msgid
-
-class BadHeaderError(ValueError):
-    pass
-
-def forbid_multi_line_headers(name, val):
-    """Forbids multi-line headers, to prevent header injection."""
-    val = force_unicode(val)
-    if '\n' in val or '\r' in val:
-        raise BadHeaderError("Header values can't contain newlines (got %r for header %r)" % (val, name))
-    try:
-        val = val.encode('ascii')
-    except UnicodeEncodeError:
-        if name.lower() in ('to', 'from', 'cc'):
-            result = []
-            for item in val.split(', '):
-                nm, addr = parseaddr(item)
-                nm = str(Header(nm, settings.DEFAULT_CHARSET))
-                result.append(formataddr((nm, str(addr))))
-            val = ', '.join(result)
-        else:
-            val = Header(val, settings.DEFAULT_CHARSET)
-    else:
-        if name.lower() == 'subject':
-            val = Header(val)
-    return name, val
-
-class SafeMIMEText(MIMEText):
-    def __setitem__(self, name, val):
-        name, val = forbid_multi_line_headers(name, val)
-        MIMEText.__setitem__(self, name, val)
-
-class SafeMIMEMultipart(MIMEMultipart):
-    def __setitem__(self, name, val):
-        name, val = forbid_multi_line_headers(name, val)
-        MIMEMultipart.__setitem__(self, name, val)
-
-class SMTPConnection(object):
-    """
-    A wrapper that manages the SMTP network connection.
-    """
-
-    def __init__(self, host=None, port=None, username=None, password=None,
-                 use_tls=None, fail_silently=False):
-        self.host = host or settings.EMAIL_HOST
-        self.port = port or settings.EMAIL_PORT
-        self.username = username or settings.EMAIL_HOST_USER
-        self.password = password or settings.EMAIL_HOST_PASSWORD
-        self.use_tls = (use_tls is not None) and use_tls or settings.EMAIL_USE_TLS
-        self.fail_silently = fail_silently
-        self.connection = None
-
-    def open(self):
-        """
-        Ensures we have a connection to the email server. Returns whether or
-        not a new connection was required (True or False).
-        """
-        if self.connection:
-            # Nothing to do if the connection is already open.
-            return False
-        try:
-            # If local_hostname is not specified, socket.getfqdn() gets used.
-            # For performance, we use the cached FQDN for local_hostname.
-            self.connection = smtplib.SMTP(self.host, self.port,
-                                           local_hostname=DNS_NAME.get_fqdn())
-            if self.use_tls:
-                self.connection.ehlo()
-                self.connection.starttls()
-                self.connection.ehlo()
-            if self.username and self.password:
-                self.connection.login(self.username, self.password)
-            return True
-        except:
-            if not self.fail_silently:
-                raise
-
-    def close(self):
-        """Closes the connection to the email server."""
-        try:
-            try:
-                self.connection.quit()
-            except socket.sslerror:
-                # This happens when calling quit() on a TLS connection
-                # sometimes.
-                self.connection.close()
-            except:
-                if self.fail_silently:
-                    return
-                raise
-        finally:
-            self.connection = None
-
-    def send_messages(self, email_messages):
-        """
-        Sends one or more EmailMessage objects and returns the number of email
-        messages sent.
-        """
-        if not email_messages:
-            return
-        new_conn_created = self.open()
-        if not self.connection:
-            # We failed silently on open(). Trying to send would be pointless.
-            return
-        num_sent = 0
-        for message in email_messages:
-            sent = self._send(message)
-            if sent:
-                num_sent += 1
-        if new_conn_created:
-            self.close()
-        return num_sent
-
-    def _send(self, email_message):
-        """A helper method that does the actual sending."""
-        if not email_message.recipients():
-            return False
-        try:
-            self.connection.sendmail(email_message.from_email,
-                    email_message.recipients(),
-                    email_message.message().as_string())
-        except:
-            if not self.fail_silently:
-                raise
-            return False
-        return True
-
-class EmailMessage(object):
-    """
-    A container for email information.
-    """
-    content_subtype = 'plain'
-    mixed_subtype = 'mixed'
-    encoding = None     # None => use settings default
-
-    def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
-            connection=None, attachments=None, headers=None):
-        """
-        Initialize a single email message (which can be sent to multiple
-        recipients).
-
-        All strings used to create the message can be unicode strings (or UTF-8
-        bytestrings). The SafeMIMEText class will handle any necessary encoding
-        conversions.
-        """
-        if to:
-            assert not isinstance(to, basestring), '"to" argument must be a list or tuple'
-            self.to = list(to)
-        else:
-            self.to = []
-        if bcc:
-            assert not isinstance(bcc, basestring), '"bcc" argument must be a list or tuple'
-            self.bcc = list(bcc)
-        else:
-            self.bcc = []
-        self.from_email = from_email or settings.DEFAULT_FROM_EMAIL
-        self.subject = subject
-        self.body = body
-        self.attachments = attachments or []
-        self.extra_headers = headers or {}
-        self.connection = connection
-
-    def get_connection(self, fail_silently=False):
-        if not self.connection:
-            self.connection = SMTPConnection(fail_silently=fail_silently)
-        return self.connection
-
-    def message(self):
-        encoding = self.encoding or settings.DEFAULT_CHARSET
-        msg = SafeMIMEText(smart_str(self.body, settings.DEFAULT_CHARSET),
-                           self.content_subtype, encoding)
-        msg = self._create_message(msg)
-        msg['Subject'] = self.subject
-        msg['From'] = self.extra_headers.pop('From', self.from_email)
-        msg['To'] = ', '.join(self.to)
-
-        # Email header names are case-insensitive (RFC 2045), so we have to
-        # accommodate that when doing comparisons.
-        header_names = [key.lower() for key in self.extra_headers]
-        if 'date' not in header_names:
-            msg['Date'] = formatdate()
-        if 'message-id' not in header_names:
-            msg['Message-ID'] = make_msgid()
-        for name, value in self.extra_headers.items():
-            msg[name] = value
-        return msg
-
-    def recipients(self):
-        """
-        Returns a list of all recipients of the email (includes direct
-        addressees as well as Bcc entries).
-        """
-        return self.to + self.bcc
-
-    def send(self, fail_silently=False):
-        """Sends the email message."""
-        if not self.recipients():
-            # Don't bother creating the network connection if there's nobody to
-            # send to.
-            return 0
-        return self.get_connection(fail_silently).send_messages([self])
-
-    def attach(self, filename=None, content=None, mimetype=None):
-        """
-        Attaches a file with the given filename and content. The filename can
-        be omitted and the mimetype is guessed, if not provided.
-
-        If the first parameter is a MIMEBase subclass it is inserted directly
-        into the resulting message attachments.
-        """
-        if isinstance(filename, MIMEBase):
-            assert content == mimetype == None
-            self.attachments.append(filename)
-        else:
-            assert content is not None
-            self.attachments.append((filename, content, mimetype))
-
-    def attach_file(self, path, mimetype=None):
-        """Attaches a file from the filesystem."""
-        filename = os.path.basename(path)
-        content = open(path, 'rb').read()
-        self.attach(filename, content, mimetype)
-
-    def _create_message(self, msg):
-        return self._create_attachments(msg)
-
-    def _create_attachments(self, msg):
-        if self.attachments:
-            body_msg = msg
-            msg = SafeMIMEMultipart(_subtype=self.mixed_subtype)
-            if self.body:
-                msg.attach(body_msg)
-            for attachment in self.attachments:
-                if isinstance(attachment, MIMEBase):
-                    msg.attach(attachment)
-                else:
-                    msg.attach(self._create_attachment(*attachment))
-        return msg
-
-    def _create_mime_attachment(self, content, mimetype):
-        """
-        Converts the content, mimetype pair into a MIME attachment object.
-        """
-        basetype, subtype = mimetype.split('/', 1)
-        if basetype == 'text':
-            attachment = SafeMIMEText(smart_str(content,
-                settings.DEFAULT_CHARSET), subtype, settings.DEFAULT_CHARSET)
-        else:
-            # Encode non-text attachments with base64.
-            attachment = MIMEBase(basetype, subtype)
-            attachment.set_payload(content)
-            Encoders.encode_base64(attachment)
-        return attachment
-
-    def _create_attachment(self, filename, content, mimetype=None):
-        """
-        Converts the filename, content, mimetype triple into a MIME attachment
-        object.
-        """
-        if mimetype is None:
-            mimetype, _ = mimetypes.guess_type(filename)
-            if mimetype is None:
-                mimetype = DEFAULT_ATTACHMENT_MIME_TYPE
-        attachment = self._create_mime_attachment(content, mimetype)
-        if filename:
-            attachment.add_header('Content-Disposition', 'attachment',
-                                  filename=filename)
-        return attachment
-
-class EmailMultiAlternatives(EmailMessage):
-    """
-    A version of EmailMessage that makes it easy to send multipart/alternative
-    messages. For example, including text and HTML versions of the text is
-    made easier.
-    """
-    alternative_subtype = 'alternative'
-
-    def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
-            connection=None, attachments=None, headers=None, alternatives=None):
-        """
-        Initialize a single email message (which can be sent to multiple
-        recipients).
-
-        All strings used to create the message can be unicode strings (or UTF-8
-        bytestrings). The SafeMIMEText class will handle any necessary encoding
-        conversions.
-        """
-        super(EmailMultiAlternatives, self).__init__(subject, body, from_email, to, bcc, connection, attachments, headers)
-        self.alternatives=alternatives or []
-
-    def attach_alternative(self, content, mimetype):
-        """Attach an alternative content representation."""
-        assert content is not None
-        assert mimetype is not None
-        self.alternatives.append((content, mimetype))
-
-    def _create_message(self, msg):
-        return self._create_attachments(self._create_alternatives(msg))
-
-    def _create_alternatives(self, msg):
-        if self.alternatives:
-            body_msg = msg
-            msg = SafeMIMEMultipart(_subtype=self.alternative_subtype)
-            if self.body:
-                msg.attach(body_msg)
-            for alternative in self.alternatives:
-                msg.attach(self._create_mime_attachment(*alternative))
-        return msg
-
-def send_mail(subject, message, from_email, recipient_list,
-              fail_silently=False, auth_user=None, auth_password=None):
-    """
-    Easy wrapper for sending a single message to a recipient list. All members
-    of the recipient list will see the other recipients in the 'To' field.
-
-    If auth_user is None, the EMAIL_HOST_USER setting is used.
-    If auth_password is None, the EMAIL_HOST_PASSWORD setting is used.
-
-    Note: The API for this method is frozen. New code wanting to extend the
-    functionality should use the EmailMessage class directly.
-    """
-    connection = SMTPConnection(username=auth_user, password=auth_password,
-                                fail_silently=fail_silently)
-    return EmailMessage(subject, message, from_email, recipient_list,
-                        connection=connection).send()
-
-def send_mass_mail(datatuple, fail_silently=False, auth_user=None,
-                   auth_password=None):
-    """
-    Given a datatuple of (subject, message, from_email, recipient_list), sends
-    each message to each recipient list. Returns the number of e-mails sent.
-
-    If from_email is None, the DEFAULT_FROM_EMAIL setting is used.
-    If auth_user and auth_password are set, they're used to log in.
-    If auth_user is None, the EMAIL_HOST_USER setting is used.
-    If auth_password is None, the EMAIL_HOST_PASSWORD setting is used.
-
-    Note: The API for this method is frozen. New code wanting to extend the
-    functionality should use the EmailMessage class directly.
-    """
-    connection = SMTPConnection(username=auth_user, password=auth_password,
-                                fail_silently=fail_silently)
-    messages = [EmailMessage(subject, message, sender, recipient)
-                for subject, message, sender, recipient in datatuple]
-    return connection.send_messages(messages)
-
-def mail_admins(subject, message, fail_silently=False):
-    """Sends a message to the admins, as defined by the ADMINS setting."""
-    if not settings.ADMINS:
-        return
-    EmailMessage(settings.EMAIL_SUBJECT_PREFIX + subject, message,
-                 settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS]
-                 ).send(fail_silently=fail_silently)
-
-def mail_managers(subject, message, fail_silently=False):
-    """Sends a message to the managers, as defined by the MANAGERS setting."""
-    if not settings.MANAGERS:
-        return
-    EmailMessage(settings.EMAIL_SUBJECT_PREFIX + subject, message,
-                 settings.SERVER_EMAIL, [a[1] for a in settings.MANAGERS]
-                 ).send(fail_silently=fail_silently)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/mail/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,111 @@
+"""
+Tools for sending email.
+"""
+
+from django.conf import settings
+from django.core.exceptions import ImproperlyConfigured
+from django.utils.importlib import import_module
+
+# Imported for backwards compatibility, and for the sake
+# of a cleaner namespace. These symbols used to be in
+# django/core/mail.py before the introduction of email
+# backends and the subsequent reorganization (See #10355)
+from django.core.mail.utils import CachedDnsName, DNS_NAME
+from django.core.mail.message import \
+    EmailMessage, EmailMultiAlternatives, \
+    SafeMIMEText, SafeMIMEMultipart, \
+    DEFAULT_ATTACHMENT_MIME_TYPE, make_msgid, \
+    BadHeaderError, forbid_multi_line_headers
+from django.core.mail.backends.smtp import EmailBackend as _SMTPConnection
+
+def get_connection(backend=None, fail_silently=False, **kwds):
+    """Load an e-mail backend and return an instance of it.
+
+    If backend is None (default) settings.EMAIL_BACKEND is used.
+
+    Both fail_silently and other keyword arguments are used in the
+    constructor of the backend.
+    """
+    path = backend or settings.EMAIL_BACKEND
+    try:
+        mod_name, klass_name = path.rsplit('.', 1)
+        mod = import_module(mod_name)
+    except ImportError, e:
+        raise ImproperlyConfigured(('Error importing email backend module %s: "%s"'
+                                    % (mod_name, e)))
+    try:
+        klass = getattr(mod, klass_name)
+    except AttributeError:
+        raise ImproperlyConfigured(('Module "%s" does not define a '
+                                    '"%s" class' % (mod_name, klass_name)))
+    return klass(fail_silently=fail_silently, **kwds)
+
+
+def send_mail(subject, message, from_email, recipient_list,
+              fail_silently=False, auth_user=None, auth_password=None,
+              connection=None):
+    """
+    Easy wrapper for sending a single message to a recipient list. All members
+    of the recipient list will see the other recipients in the 'To' field.
+
+    If auth_user is None, the EMAIL_HOST_USER setting is used.
+    If auth_password is None, the EMAIL_HOST_PASSWORD setting is used.
+
+    Note: The API for this method is frozen. New code wanting to extend the
+    functionality should use the EmailMessage class directly.
+    """
+    connection = connection or get_connection(username=auth_user,
+                                    password=auth_password,
+                                    fail_silently=fail_silently)
+    return EmailMessage(subject, message, from_email, recipient_list,
+                        connection=connection).send()
+
+
+def send_mass_mail(datatuple, fail_silently=False, auth_user=None,
+                   auth_password=None, connection=None):
+    """
+    Given a datatuple of (subject, message, from_email, recipient_list), sends
+    each message to each recipient list. Returns the number of e-mails sent.
+
+    If from_email is None, the DEFAULT_FROM_EMAIL setting is used.
+    If auth_user and auth_password are set, they're used to log in.
+    If auth_user is None, the EMAIL_HOST_USER setting is used.
+    If auth_password is None, the EMAIL_HOST_PASSWORD setting is used.
+
+    Note: The API for this method is frozen. New code wanting to extend the
+    functionality should use the EmailMessage class directly.
+    """
+    connection = connection or get_connection(username=auth_user,
+                                    password=auth_password,
+                                    fail_silently=fail_silently)
+    messages = [EmailMessage(subject, message, sender, recipient)
+                for subject, message, sender, recipient in datatuple]
+    return connection.send_messages(messages)
+
+
+def mail_admins(subject, message, fail_silently=False, connection=None):
+    """Sends a message to the admins, as defined by the ADMINS setting."""
+    if not settings.ADMINS:
+        return
+    EmailMessage(settings.EMAIL_SUBJECT_PREFIX + subject, message,
+                 settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS],
+                 connection=connection).send(fail_silently=fail_silently)
+
+
+def mail_managers(subject, message, fail_silently=False, connection=None):
+    """Sends a message to the managers, as defined by the MANAGERS setting."""
+    if not settings.MANAGERS:
+        return
+    EmailMessage(settings.EMAIL_SUBJECT_PREFIX + subject, message,
+                 settings.SERVER_EMAIL, [a[1] for a in settings.MANAGERS],
+                 connection=connection).send(fail_silently=fail_silently)
+
+
+class SMTPConnection(_SMTPConnection):
+    def __init__(self, *args, **kwds):
+        import warnings
+        warnings.warn(
+            'mail.SMTPConnection is deprecated; use mail.get_connection() instead.',
+            PendingDeprecationWarning
+        )
+        super(SMTPConnection, self).__init__(*args, **kwds)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/mail/backends/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+# Mail backends shipped with Django.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/mail/backends/base.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,39 @@
+"""Base email backend class."""
+
+class BaseEmailBackend(object):
+    """
+    Base class for email backend implementations.
+
+    Subclasses must at least overwrite send_messages().
+    """
+    def __init__(self, fail_silently=False, **kwargs):
+        self.fail_silently = fail_silently
+
+    def open(self):
+        """Open a network connection.
+
+        This method can be overwritten by backend implementations to
+        open a network connection.
+
+        It's up to the backend implementation to track the status of
+        a network connection if it's needed by the backend.
+
+        This method can be called by applications to force a single
+        network connection to be used when sending mails. See the
+        send_messages() method of the SMTP backend for a reference
+        implementation.
+
+        The default implementation does nothing.
+        """
+        pass
+
+    def close(self):
+        """Close a network connection."""
+        pass
+
+    def send_messages(self, email_messages):
+        """
+        Sends one or more EmailMessage objects and returns the number of email
+        messages sent.
+        """
+        raise NotImplementedError
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/mail/backends/console.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,37 @@
+"""
+Email backend that writes messages to console instead of sending them.
+"""
+import sys
+import threading
+
+from django.core.mail.backends.base import BaseEmailBackend
+
+class EmailBackend(BaseEmailBackend):
+    def __init__(self, *args, **kwargs):
+        self.stream = kwargs.pop('stream', sys.stdout)
+        self._lock = threading.RLock()
+        super(EmailBackend, self).__init__(*args, **kwargs)
+
+    def send_messages(self, email_messages):
+        """Write all messages to the stream in a thread-safe way."""
+        if not email_messages:
+            return
+        self._lock.acquire()
+        try:
+            # The try-except is nested to allow for
+            # Python 2.4 support (Refs #12147)
+            try:
+                stream_created = self.open()
+                for message in email_messages:
+                    self.stream.write('%s\n' % message.message().as_string())
+                    self.stream.write('-'*79)
+                    self.stream.write('\n')
+                    self.stream.flush()  # flush after each message
+                if stream_created:
+                    self.close()
+            except:
+                if not self.fail_silently:
+                    raise
+        finally:
+            self._lock.release()
+        return len(email_messages)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/mail/backends/dummy.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,9 @@
+"""
+Dummy email backend that does nothing.
+"""
+
+from django.core.mail.backends.base import BaseEmailBackend
+
+class EmailBackend(BaseEmailBackend):
+    def send_messages(self, email_messages):
+        return len(email_messages)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/mail/backends/filebased.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,59 @@
+"""Email backend that writes messages to a file."""
+
+import datetime
+import os
+
+from django.conf import settings
+from django.core.exceptions import ImproperlyConfigured
+from django.core.mail.backends.console import EmailBackend as ConsoleEmailBackend
+
+class EmailBackend(ConsoleEmailBackend):
+    def __init__(self, *args, **kwargs):
+        self._fname = None
+        if 'file_path' in kwargs:
+            self.file_path = kwargs.pop('file_path')
+        else:
+            self.file_path = getattr(settings, 'EMAIL_FILE_PATH',None)
+        # Make sure self.file_path is a string.
+        if not isinstance(self.file_path, basestring):
+            raise ImproperlyConfigured('Path for saving emails is invalid: %r' % self.file_path)
+        self.file_path = os.path.abspath(self.file_path)
+        # Make sure that self.file_path is an directory if it exists.
+        if os.path.exists(self.file_path) and not os.path.isdir(self.file_path):
+            raise ImproperlyConfigured('Path for saving email messages exists, but is not a directory: %s' % self.file_path)
+        # Try to create it, if it not exists.
+        elif not os.path.exists(self.file_path):
+            try:
+                os.makedirs(self.file_path)
+            except OSError, err:
+                raise ImproperlyConfigured('Could not create directory for saving email messages: %s (%s)' % (self.file_path, err))
+        # Make sure that self.file_path is writable.
+        if not os.access(self.file_path, os.W_OK):
+            raise ImproperlyConfigured('Could not write to directory: %s' % self.file_path)
+        # Finally, call super().
+        # Since we're using the console-based backend as a base,
+        # force the stream to be None, so we don't default to stdout
+        kwargs['stream'] = None
+        super(EmailBackend, self).__init__(*args, **kwargs)
+
+    def _get_filename(self):
+        """Return a unique file name."""
+        if self._fname is None:
+            timestamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
+            fname = "%s-%s.log" % (timestamp, abs(id(self)))
+            self._fname = os.path.join(self.file_path, fname)
+        return self._fname
+
+    def open(self):
+        if self.stream is None:
+            self.stream = open(self._get_filename(), 'a')
+            return True
+        return False
+
+    def close(self):
+        try:
+            if self.stream is not None:
+                self.stream.close()
+        finally:
+            self.stream = None
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/mail/backends/locmem.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,24 @@
+"""
+Backend for test environment.
+"""
+
+from django.core import mail
+from django.core.mail.backends.base import BaseEmailBackend
+
+class EmailBackend(BaseEmailBackend):
+    """A email backend for use during test sessions.
+
+    The test connection stores email messages in a dummy outbox,
+    rather than sending them out on the wire.
+
+    The dummy outbox is accessible through the outbox instance attribute.
+    """
+    def __init__(self, *args, **kwargs):
+        super(EmailBackend, self).__init__(*args, **kwargs)
+        if not hasattr(mail, 'outbox'):
+            mail.outbox = []
+
+    def send_messages(self, messages):
+        """Redirect messages to the dummy outbox"""
+        mail.outbox.extend(messages)
+        return len(messages)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/mail/backends/smtp.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,106 @@
+"""SMTP email backend class."""
+
+import smtplib
+import socket
+import threading
+
+from django.conf import settings
+from django.core.mail.backends.base import BaseEmailBackend
+from django.core.mail.utils import DNS_NAME
+
+class EmailBackend(BaseEmailBackend):
+    """
+    A wrapper that manages the SMTP network connection.
+    """
+    def __init__(self, host=None, port=None, username=None, password=None,
+                 use_tls=None, fail_silently=False, **kwargs):
+        super(EmailBackend, self).__init__(fail_silently=fail_silently)
+        self.host = host or settings.EMAIL_HOST
+        self.port = port or settings.EMAIL_PORT
+        self.username = username or settings.EMAIL_HOST_USER
+        self.password = password or settings.EMAIL_HOST_PASSWORD
+        if use_tls is None:
+            self.use_tls = settings.EMAIL_USE_TLS
+        else:
+            self.use_tls = use_tls
+        self.connection = None
+        self._lock = threading.RLock()
+
+    def open(self):
+        """
+        Ensures we have a connection to the email server. Returns whether or
+        not a new connection was required (True or False).
+        """
+        if self.connection:
+            # Nothing to do if the connection is already open.
+            return False
+        try:
+            # If local_hostname is not specified, socket.getfqdn() gets used.
+            # For performance, we use the cached FQDN for local_hostname.
+            self.connection = smtplib.SMTP(self.host, self.port,
+                                           local_hostname=DNS_NAME.get_fqdn())
+            if self.use_tls:
+                self.connection.ehlo()
+                self.connection.starttls()
+                self.connection.ehlo()
+            if self.username and self.password:
+                self.connection.login(self.username, self.password)
+            return True
+        except:
+            if not self.fail_silently:
+                raise
+
+    def close(self):
+        """Closes the connection to the email server."""
+        try:
+            try:
+                self.connection.quit()
+            except socket.sslerror:
+                # This happens when calling quit() on a TLS connection
+                # sometimes.
+                self.connection.close()
+            except:
+                if self.fail_silently:
+                    return
+                raise
+        finally:
+            self.connection = None
+
+    def send_messages(self, email_messages):
+        """
+        Sends one or more EmailMessage objects and returns the number of email
+        messages sent.
+        """
+        if not email_messages:
+            return
+        self._lock.acquire()
+        try:
+            new_conn_created = self.open()
+            if not self.connection:
+                # We failed silently on open().
+                # Trying to send would be pointless.
+                return
+            num_sent = 0
+            for message in email_messages:
+                sent = self._send(message)
+                if sent:
+                    num_sent += 1
+            if new_conn_created:
+                self.close()
+        finally:
+            self._lock.release()
+        return num_sent
+
+    def _send(self, email_message):
+        """A helper method that does the actual sending."""
+        if not email_message.recipients():
+            return False
+        try:
+            self.connection.sendmail(email_message.from_email,
+                    email_message.recipients(),
+                    email_message.message().as_string())
+        except:
+            if not self.fail_silently:
+                raise
+            return False
+        return True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/mail/message.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,285 @@
+import mimetypes
+import os
+import random
+import time
+from email import Charset, Encoders
+from email.MIMEText import MIMEText
+from email.MIMEMultipart import MIMEMultipart
+from email.MIMEBase import MIMEBase
+from email.Header import Header
+from email.Utils import formatdate, getaddresses, formataddr
+
+from django.conf import settings
+from django.core.mail.utils import DNS_NAME
+from django.utils.encoding import smart_str, force_unicode
+
+# Don't BASE64-encode UTF-8 messages so that we avoid unwanted attention from
+# some spam filters.
+Charset.add_charset('utf-8', Charset.SHORTEST, Charset.QP, 'utf-8')
+
+# Default MIME type to use on attachments (if it is not explicitly given
+# and cannot be guessed).
+DEFAULT_ATTACHMENT_MIME_TYPE = 'application/octet-stream'
+
+
+class BadHeaderError(ValueError):
+    pass
+
+
+# Copied from Python standard library, with the following modifications:
+# * Used cached hostname for performance.
+# * Added try/except to support lack of getpid() in Jython (#5496).
+def make_msgid(idstring=None):
+    """Returns a string suitable for RFC 2822 compliant Message-ID, e.g:
+
+    <20020201195627.33539.96671@nightshade.la.mastaler.com>
+
+    Optional idstring if given is a string used to strengthen the
+    uniqueness of the message id.
+    """
+    timeval = time.time()
+    utcdate = time.strftime('%Y%m%d%H%M%S', time.gmtime(timeval))
+    try:
+        pid = os.getpid()
+    except AttributeError:
+        # No getpid() in Jython, for example.
+        pid = 1
+    randint = random.randrange(100000)
+    if idstring is None:
+        idstring = ''
+    else:
+        idstring = '.' + idstring
+    idhost = DNS_NAME
+    msgid = '<%s.%s.%s%s@%s>' % (utcdate, pid, randint, idstring, idhost)
+    return msgid
+
+
+def forbid_multi_line_headers(name, val, encoding):
+    """Forbids multi-line headers, to prevent header injection."""
+    encoding = encoding or settings.DEFAULT_CHARSET
+    val = force_unicode(val)
+    if '\n' in val or '\r' in val:
+        raise BadHeaderError("Header values can't contain newlines (got %r for header %r)" % (val, name))
+    try:
+        val = val.encode('ascii')
+    except UnicodeEncodeError:
+        if name.lower() in ('to', 'from', 'cc'):
+            result = []
+            for nm, addr in getaddresses((val,)):
+                nm = str(Header(nm.encode(encoding), encoding))
+                result.append(formataddr((nm, str(addr))))
+            val = ', '.join(result)
+        else:
+            val = Header(val.encode(encoding), encoding)
+    else:
+        if name.lower() == 'subject':
+            val = Header(val)
+    return name, val
+
+class SafeMIMEText(MIMEText):
+    
+    def __init__(self, text, subtype, charset):
+        self.encoding = charset
+        MIMEText.__init__(self, text, subtype, charset)
+    
+    def __setitem__(self, name, val):    
+        name, val = forbid_multi_line_headers(name, val, self.encoding)
+        MIMEText.__setitem__(self, name, val)
+
+class SafeMIMEMultipart(MIMEMultipart):
+    
+    def __init__(self, _subtype='mixed', boundary=None, _subparts=None, encoding=None, **_params):
+        self.encoding = encoding
+        MIMEMultipart.__init__(self, _subtype, boundary, _subparts, **_params)
+        
+    def __setitem__(self, name, val):
+        name, val = forbid_multi_line_headers(name, val, self.encoding)
+        MIMEMultipart.__setitem__(self, name, val)
+
+class EmailMessage(object):
+    """
+    A container for email information.
+    """
+    content_subtype = 'plain'
+    mixed_subtype = 'mixed'
+    encoding = None     # None => use settings default
+
+    def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
+                 connection=None, attachments=None, headers=None):
+        """
+        Initialize a single email message (which can be sent to multiple
+        recipients).
+
+        All strings used to create the message can be unicode strings
+        (or UTF-8 bytestrings). The SafeMIMEText class will handle any
+        necessary encoding conversions.
+        """
+        if to:
+            assert not isinstance(to, basestring), '"to" argument must be a list or tuple'
+            self.to = list(to)
+        else:
+            self.to = []
+        if bcc:
+            assert not isinstance(bcc, basestring), '"bcc" argument must be a list or tuple'
+            self.bcc = list(bcc)
+        else:
+            self.bcc = []
+        self.from_email = from_email or settings.DEFAULT_FROM_EMAIL
+        self.subject = subject
+        self.body = body
+        self.attachments = attachments or []
+        self.extra_headers = headers or {}
+        self.connection = connection
+
+    def get_connection(self, fail_silently=False):
+        from django.core.mail import get_connection
+        if not self.connection:
+            self.connection = get_connection(fail_silently=fail_silently)
+        return self.connection
+
+    def message(self):
+        encoding = self.encoding or settings.DEFAULT_CHARSET
+        msg = SafeMIMEText(smart_str(self.body, encoding),
+                           self.content_subtype, encoding)
+        msg = self._create_message(msg)
+        msg['Subject'] = self.subject
+        msg['From'] = self.extra_headers.get('From', self.from_email)
+        msg['To'] = ', '.join(self.to)
+
+        # Email header names are case-insensitive (RFC 2045), so we have to
+        # accommodate that when doing comparisons.
+        header_names = [key.lower() for key in self.extra_headers]
+        if 'date' not in header_names:
+            msg['Date'] = formatdate()
+        if 'message-id' not in header_names:
+            msg['Message-ID'] = make_msgid()
+        for name, value in self.extra_headers.items():
+            if name.lower() == 'from':  # From is already handled
+                continue
+            msg[name] = value
+        return msg
+
+    def recipients(self):
+        """
+        Returns a list of all recipients of the email (includes direct
+        addressees as well as Bcc entries).
+        """
+        return self.to + self.bcc
+
+    def send(self, fail_silently=False):
+        """Sends the email message."""
+        if not self.recipients():
+            # Don't bother creating the network connection if there's nobody to
+            # send to.
+            return 0
+        return self.get_connection(fail_silently).send_messages([self])
+
+    def attach(self, filename=None, content=None, mimetype=None):
+        """
+        Attaches a file with the given filename and content. The filename can
+        be omitted and the mimetype is guessed, if not provided.
+
+        If the first parameter is a MIMEBase subclass it is inserted directly
+        into the resulting message attachments.
+        """
+        if isinstance(filename, MIMEBase):
+            assert content == mimetype == None
+            self.attachments.append(filename)
+        else:
+            assert content is not None
+            self.attachments.append((filename, content, mimetype))
+
+    def attach_file(self, path, mimetype=None):
+        """Attaches a file from the filesystem."""
+        filename = os.path.basename(path)
+        content = open(path, 'rb').read()
+        self.attach(filename, content, mimetype)
+
+    def _create_message(self, msg):
+        return self._create_attachments(msg)
+
+    def _create_attachments(self, msg):
+        if self.attachments:
+            encoding = self.encoding or settings.DEFAULT_CHARSET
+            body_msg = msg
+            msg = SafeMIMEMultipart(_subtype=self.mixed_subtype, encoding=encoding)
+            if self.body:
+                msg.attach(body_msg)
+            for attachment in self.attachments:
+                if isinstance(attachment, MIMEBase):
+                    msg.attach(attachment)
+                else:
+                    msg.attach(self._create_attachment(*attachment))
+        return msg
+
+    def _create_mime_attachment(self, content, mimetype):
+        """
+        Converts the content, mimetype pair into a MIME attachment object.
+        """
+        basetype, subtype = mimetype.split('/', 1)
+        if basetype == 'text':
+            encoding = self.encoding or settings.DEFAULT_CHARSET
+            attachment = SafeMIMEText(smart_str(content, encoding), subtype, encoding)
+        else:
+            # Encode non-text attachments with base64.
+            attachment = MIMEBase(basetype, subtype)
+            attachment.set_payload(content)
+            Encoders.encode_base64(attachment)
+        return attachment
+
+    def _create_attachment(self, filename, content, mimetype=None):
+        """
+        Converts the filename, content, mimetype triple into a MIME attachment
+        object.
+        """
+        if mimetype is None:
+            mimetype, _ = mimetypes.guess_type(filename)
+            if mimetype is None:
+                mimetype = DEFAULT_ATTACHMENT_MIME_TYPE
+        attachment = self._create_mime_attachment(content, mimetype)
+        if filename:
+            attachment.add_header('Content-Disposition', 'attachment',
+                                  filename=filename)
+        return attachment
+
+
+class EmailMultiAlternatives(EmailMessage):
+    """
+    A version of EmailMessage that makes it easy to send multipart/alternative
+    messages. For example, including text and HTML versions of the text is
+    made easier.
+    """
+    alternative_subtype = 'alternative'
+
+    def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
+            connection=None, attachments=None, headers=None, alternatives=None):
+        """
+        Initialize a single email message (which can be sent to multiple
+        recipients).
+
+        All strings used to create the message can be unicode strings (or UTF-8
+        bytestrings). The SafeMIMEText class will handle any necessary encoding
+        conversions.
+        """
+        super(EmailMultiAlternatives, self).__init__(subject, body, from_email, to, bcc, connection, attachments, headers)
+        self.alternatives=alternatives or []
+
+    def attach_alternative(self, content, mimetype):
+        """Attach an alternative content representation."""
+        assert content is not None
+        assert mimetype is not None
+        self.alternatives.append((content, mimetype))
+
+    def _create_message(self, msg):
+        return self._create_attachments(self._create_alternatives(msg))
+
+    def _create_alternatives(self, msg):
+        encoding = self.encoding or settings.DEFAULT_CHARSET
+        if self.alternatives:
+            body_msg = msg
+            msg = SafeMIMEMultipart(_subtype=self.alternative_subtype, encoding=encoding)
+            if self.body:
+                msg.attach(body_msg)
+            for alternative in self.alternatives:
+                msg.attach(self._create_mime_attachment(*alternative))
+        return msg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/mail/utils.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,19 @@
+"""
+Email message and email sending related helper functions.
+"""
+
+import socket
+
+
+# Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of
+# seconds, which slows down the restart of the server.
+class CachedDnsName(object):
+    def __str__(self):
+        return self.get_fqdn()
+
+    def get_fqdn(self):
+        if not hasattr(self, '_fqdn'):
+            self._fqdn = socket.getfqdn()
+        return self._fqdn
+
+DNS_NAME = CachedDnsName()
--- a/web/lib/django/core/management/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -152,7 +152,7 @@
         else:
             klass = load_command_class(app_name, name)
     except KeyError:
-        raise CommandError, "Unknown command: %r" % name
+        raise CommandError("Unknown command: %r" % name)
 
     # Grab out a list of defaults from the options. optparse does this for us
     # when the script runs from the command line, but since call_command can
@@ -261,6 +261,82 @@
             sys.exit(1)
         return klass
 
+    def autocomplete(self):
+        """
+        Output completion suggestions for BASH.
+
+        The output of this function is passed to BASH's `COMREPLY` variable and
+        treated as completion suggestions. `COMREPLY` expects a space
+        separated string as the result.
+
+        The `COMP_WORDS` and `COMP_CWORD` BASH environment variables are used
+        to get information about the cli input. Please refer to the BASH
+        man-page for more information about this variables.
+
+        Subcommand options are saved as pairs. A pair consists of
+        the long option string (e.g. '--exclude') and a boolean
+        value indicating if the option requires arguments. When printing to
+        stdout, a equal sign is appended to options which require arguments.
+
+        Note: If debugging this function, it is recommended to write the debug
+        output in a separate file. Otherwise the debug output will be treated
+        and formatted as potential completion suggestions.
+        """
+        # Don't complete if user hasn't sourced bash_completion file.
+        if not os.environ.has_key('DJANGO_AUTO_COMPLETE'):
+            return
+
+        cwords = os.environ['COMP_WORDS'].split()[1:]
+        cword = int(os.environ['COMP_CWORD'])
+
+        try:
+            curr = cwords[cword-1]
+        except IndexError:
+            curr = ''
+
+        subcommands = get_commands().keys() + ['help']
+        options = [('--help', None)]
+
+        # subcommand
+        if cword == 1:
+            print ' '.join(sorted(filter(lambda x: x.startswith(curr), subcommands)))
+        # subcommand options
+        # special case: the 'help' subcommand has no options
+        elif cwords[0] in subcommands and cwords[0] != 'help':
+            subcommand_cls = self.fetch_command(cwords[0])
+            # special case: 'runfcgi' stores additional options as
+            # 'key=value' pairs
+            if cwords[0] == 'runfcgi':
+                from django.core.servers.fastcgi import FASTCGI_OPTIONS
+                options += [(k, 1) for k in FASTCGI_OPTIONS]
+            # special case: add the names of installed apps to options
+            elif cwords[0] in ('dumpdata', 'reset', 'sql', 'sqlall',
+                               'sqlclear', 'sqlcustom', 'sqlindexes',
+                               'sqlreset', 'sqlsequencereset', 'test'):
+                try:
+                    from django.conf import settings
+                    # Get the last part of the dotted path as the app name.
+                    options += [(a.split('.')[-1], 0) for a in settings.INSTALLED_APPS]
+                except ImportError:
+                    # Fail silently if DJANGO_SETTINGS_MODULE isn't set. The
+                    # user will find out once they execute the command.
+                    pass
+            options += [(s_opt.get_opt_string(), s_opt.nargs) for s_opt in
+                        subcommand_cls.option_list]
+            # filter out previously specified options from available options
+            prev_opts = [x.split('=')[0] for x in cwords[1:cword-1]]
+            options = filter(lambda (x, v): x not in prev_opts, options)
+
+            # filter options by current input
+            options = sorted([(k, v) for k, v in options if k.startswith(curr)])
+            for option in options:
+                opt_label = option[0]
+                # append '=' to options which require args
+                if option[1]:
+                    opt_label += '='
+                print opt_label
+        sys.exit(1)
+
     def execute(self):
         """
         Given the command-line arguments, this figures out which subcommand is
@@ -272,6 +348,7 @@
         parser = LaxOptionParser(usage="%prog subcommand [options] [args]",
                                  version=get_version(),
                                  option_list=BaseCommand.option_list)
+        self.autocomplete()
         try:
             options, args = parser.parse_args(self.argv)
             handle_default_options(options)
@@ -281,8 +358,7 @@
         try:
             subcommand = self.argv[1]
         except IndexError:
-            sys.stderr.write("Type '%s help' for usage.\n" % self.prog_name)
-            sys.exit(1)
+            subcommand = 'help' # Display help if no arguments were given.
 
         if subcommand == 'help':
             if len(args) > 2:
--- a/web/lib/django/core/management/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/base.py	Tue May 25 02:43:45 2010 +0200
@@ -11,11 +11,7 @@
 import django
 from django.core.exceptions import ImproperlyConfigured
 from django.core.management.color import color_style
-
-try:
-    set
-except NameError:
-    from sets import Set as set     # For Python 2.3
+from django.utils.encoding import smart_str
 
 class CommandError(Exception):
     """
@@ -28,7 +24,7 @@
     result, raising this exception (with a sensible description of the
     error) is the preferred way to indicate that something has gone
     wrong in the execution of a command.
-    
+
     """
     pass
 
@@ -37,7 +33,7 @@
     Include any default options that all commands should accept here
     so that ManagementUtility can handle them before searching for
     user commands.
-    
+
     """
     if options.settings:
         os.environ['DJANGO_SETTINGS_MODULE'] = options.settings
@@ -83,7 +79,7 @@
     specialized methods as needed.
 
     Several attributes affect behavior at various steps along the way:
-    
+
     ``args``
         A string listing the arguments accepted by the command,
         suitable for use in help messages; e.g., a command which takes
@@ -117,7 +113,7 @@
         rather than all applications' models, call
         ``self.validate(app)`` from ``handle()``, where ``app`` is the
         application's Python module.
-    
+
     """
     # Metadata about this command.
     option_list = (
@@ -147,7 +143,7 @@
         Return the Django version, which should be correct for all
         built-in Django commands. User-supplied commands should
         override this method.
-        
+
         """
         return django.get_version()
 
@@ -155,7 +151,7 @@
         """
         Return a brief description of how to use this command, by
         default from the attribute ``self.help``.
-        
+
         """
         usage = '%%prog %s [options] %s' % (subcommand, self.args)
         if self.help:
@@ -167,7 +163,7 @@
         """
         Create and return the ``OptionParser`` which will be used to
         parse the arguments to this command.
-        
+
         """
         return OptionParser(prog=prog_name,
                             usage=self.usage(subcommand),
@@ -178,7 +174,7 @@
         """
         Print the help message for this command, derived from
         ``self.usage()``.
-        
+
         """
         parser = self.create_parser(prog_name, subcommand)
         parser.print_help()
@@ -187,7 +183,7 @@
         """
         Set up any environment changes requested (e.g., Python path
         and Django settings), then run this command.
-        
+
         """
         parser = self.create_parser(argv[0], argv[1])
         options, args = parser.parse_args(argv[2:])
@@ -201,7 +197,7 @@
         ``self.requires_model_validation``). If the command raises a
         ``CommandError``, intercept it and print it sensibly to
         stderr.
-        
+
         """
         # Switch to English, because django-admin.py creates database content
         # like permissions, and those shouldn't contain any translations.
@@ -214,7 +210,7 @@
             except ImportError, e:
                 # If settings should be available, but aren't,
                 # raise the error and quit.
-                sys.stderr.write(self.style.ERROR(str('Error: %s\n' % e)))
+                sys.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e)))
                 sys.exit(1)
         try:
             if self.requires_model_validation:
@@ -230,15 +226,15 @@
                 if self.output_transaction:
                     print self.style.SQL_KEYWORD("COMMIT;")
         except CommandError, e:
-            sys.stderr.write(self.style.ERROR(str('Error: %s\n' % e)))
+            sys.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e)))
             sys.exit(1)
 
     def validate(self, app=None, display_num_errors=False):
         """
         Validates the given app, raising CommandError for any errors.
-        
+
         If app is None, then this will validate all installed apps.
-        
+
         """
         from django.core.management.validation import get_validation_errors
         try:
@@ -258,7 +254,7 @@
         """
         The actual logic of the command. Subclasses must implement
         this method.
-        
+
         """
         raise NotImplementedError()
 
@@ -269,7 +265,7 @@
 
     Rather than implementing ``handle()``, subclasses must implement
     ``handle_app()``, which will be called once for each application.
-    
+
     """
     args = '<appname appname ...>'
 
@@ -293,7 +289,7 @@
         Perform the command's actions for ``app``, which will be the
         Python module corresponding to an application name given on
         the command line.
-        
+
         """
         raise NotImplementedError()
 
@@ -308,7 +304,7 @@
 
     If the arguments should be names of installed applications, use
     ``AppCommand`` instead.
-    
+
     """
     args = '<label label ...>'
     label = 'label'
@@ -328,7 +324,7 @@
         """
         Perform the command's actions for ``label``, which will be the
         string as given on the command line.
-        
+
         """
         raise NotImplementedError()
 
@@ -341,7 +337,7 @@
     no arguments are passed to the command.
 
     Attempting to pass arguments will raise ``CommandError``.
-    
+
     """
     args = ''
 
@@ -353,7 +349,7 @@
     def handle_noargs(self, **options):
         """
         Perform this command's actions.
-        
+
         """
         raise NotImplementedError()
 
@@ -419,7 +415,7 @@
     """
     Make sure that the file is writeable. Useful if our source is
     read-only.
-    
+
     """
     import stat
     if sys.platform.startswith('java'):
--- a/web/lib/django/core/management/color.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/color.py	Tue May 25 02:43:45 2010 +0200
@@ -2,6 +2,7 @@
 Sets up the terminal color scheme.
 """
 
+import os
 import sys
 
 from django.utils import termcolors
@@ -21,16 +22,24 @@
 def color_style():
     """Returns a Style object with the Django color scheme."""
     if not supports_color():
-        return no_style()
-    class dummy: pass
-    style = dummy()
-    style.ERROR = termcolors.make_style(fg='red', opts=('bold',))
-    style.ERROR_OUTPUT = termcolors.make_style(fg='red', opts=('bold',))
-    style.NOTICE = termcolors.make_style(fg='red')
-    style.SQL_FIELD = termcolors.make_style(fg='green', opts=('bold',))
-    style.SQL_COLTYPE = termcolors.make_style(fg='green')
-    style.SQL_KEYWORD = termcolors.make_style(fg='yellow')
-    style.SQL_TABLE = termcolors.make_style(opts=('bold',))
+        style = no_style()
+    else:
+        DJANGO_COLORS = os.environ.get('DJANGO_COLORS', '')
+        color_settings = termcolors.parse_color_setting(DJANGO_COLORS)
+        if color_settings:
+            class dummy: pass
+            style = dummy()
+            # The nocolor palette has all available roles.
+            # Use that pallete as the basis for populating
+            # the palette as defined in the environment.
+            for role in termcolors.PALETTES[termcolors.NOCOLOR_PALETTE]:
+                format = color_settings.get(role,{})
+                setattr(style, role, termcolors.make_style(**format))
+            # For backwards compatibility,
+            # set style for ERROR_OUTPUT == ERROR
+            style.ERROR_OUTPUT = style.ERROR
+        else:
+            style = no_style()
     return style
 
 def no_style():
--- a/web/lib/django/core/management/commands/compilemessages.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/compilemessages.py	Tue May 25 02:43:45 2010 +0200
@@ -3,11 +3,6 @@
 from optparse import make_option
 from django.core.management.base import BaseCommand, CommandError
 
-try:
-    set
-except NameError:
-    from sets import Set as set     # For Python 2.3
-
 def compile_messages(locale=None):
     basedirs = [os.path.join('conf', 'locale'), 'locale']
     if os.environ.get('DJANGO_SETTINGS_MODULE'):
--- a/web/lib/django/core/management/commands/createcachetable.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/createcachetable.py	Tue May 25 02:43:45 2010 +0200
@@ -1,14 +1,25 @@
+from optparse import make_option
+
 from django.core.management.base import LabelCommand
+from django.db import connections, transaction, models, DEFAULT_DB_ALIAS
 
 class Command(LabelCommand):
     help = "Creates the table needed to use the SQL cache backend."
     args = "<tablename>"
     label = 'tablename'
 
+    option_list = LabelCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database onto '
+                'which the cache table will be installed. '
+                'Defaults to the "default" database.'),
+    )
+
     requires_model_validation = False
 
     def handle_label(self, tablename, **options):
-        from django.db import connection, transaction, models
+        alias = options.get('database', DEFAULT_DB_ALIAS)
+        connection = connections[alias]
         fields = (
             # "key" is a reserved word in MySQL, so use "cache_key" instead.
             models.CharField(name='cache_key', max_length=255, unique=True, primary_key=True),
@@ -19,7 +30,7 @@
         index_output = []
         qn = connection.ops.quote_name
         for f in fields:
-            field_output = [qn(f.name), f.db_type()]
+            field_output = [qn(f.name), f.db_type(connection=connection)]
             field_output.append("%sNULL" % (not f.null and "NOT " or ""))
             if f.primary_key:
                 field_output.append("PRIMARY KEY")
@@ -27,8 +38,8 @@
                 field_output.append("UNIQUE")
             if f.db_index:
                 unique = f.unique and "UNIQUE " or ""
-                index_output.append("CREATE %sINDEX %s_%s ON %s (%s);" % \
-                    (unique, tablename, f.name, qn(tablename),
+                index_output.append("CREATE %sINDEX %s ON %s (%s);" % \
+                    (unique, qn('%s_%s' % (tablename, f.name)), qn(tablename),
                     qn(f.name)))
             table_output.append(" ".join(field_output))
         full_statement = ["CREATE TABLE %s (" % qn(tablename)]
@@ -39,4 +50,4 @@
         curs.execute("\n".join(full_statement))
         for statement in index_output:
             curs.execute(statement)
-        transaction.commit_unless_managed()
+        transaction.commit_unless_managed(using=alias)
--- a/web/lib/django/core/management/commands/dbshell.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/dbshell.py	Tue May 25 02:43:45 2010 +0200
@@ -1,12 +1,22 @@
-from django.core.management.base import NoArgsCommand, CommandError
+from optparse import make_option
+
+from django.core.management.base import BaseCommand, CommandError
+from django.db import connections, DEFAULT_DB_ALIAS
 
-class Command(NoArgsCommand):
-    help = "Runs the command-line client for the current DATABASE_ENGINE."
+class Command(BaseCommand):
+    help = ("Runs the command-line client for specified database, or the "
+        "default database if none is provided.")
+
+    option_list = BaseCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database onto which to '
+                'open a shell.  Defaults to the "default" database.'),
+    )
 
     requires_model_validation = False
 
-    def handle_noargs(self, **options):
-        from django.db import connection
+    def handle(self, **options):
+        connection = connections[options.get('database', DEFAULT_DB_ALIAS)]
         try:
             connection.client.runshell()
         except OSError:
--- a/web/lib/django/core/management/commands/diffsettings.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/diffsettings.py	Tue May 25 02:43:45 2010 +0200
@@ -29,4 +29,4 @@
                 output.append("%s = %s  ###" % (key, user_settings[key]))
             elif user_settings[key] != default_settings[key]:
                 output.append("%s = %s" % (key, user_settings[key]))
-        print '\n'.join(output)
+        return '\n'.join(output)
--- a/web/lib/django/core/management/commands/dumpdata.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/dumpdata.py	Tue May 25 02:43:45 2010 +0200
@@ -1,6 +1,7 @@
 from django.core.exceptions import ImproperlyConfigured
 from django.core.management.base import BaseCommand, CommandError
 from django.core import serializers
+from django.db import connections, router, DEFAULT_DB_ALIAS
 from django.utils.datastructures import SortedDict
 
 from optparse import make_option
@@ -11,24 +12,32 @@
             help='Specifies the output serialization format for fixtures.'),
         make_option('--indent', default=None, dest='indent', type='int',
             help='Specifies the indent level to use when pretty-printing output'),
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a specific database to load '
+                'fixtures into. Defaults to the "default" database.'),
         make_option('-e', '--exclude', dest='exclude',action='append', default=[],
             help='App to exclude (use multiple --exclude to exclude multiple apps).'),
+        make_option('-n', '--natural', action='store_true', dest='use_natural_keys', default=False,
+            help='Use natural keys if they are available.'),
     )
     help = 'Output the contents of the database as a fixture of the given format.'
-    args = '[appname ...]'
+    args = '[appname appname.ModelName ...]'
 
     def handle(self, *app_labels, **options):
         from django.db.models import get_app, get_apps, get_models, get_model
 
         format = options.get('format','json')
         indent = options.get('indent',None)
+        using = options.get('database', DEFAULT_DB_ALIAS)
+        connection = connections[using]
         exclude = options.get('exclude',[])
         show_traceback = options.get('traceback', False)
+        use_natural_keys = options.get('use_natural_keys', False)
 
-        excluded_apps = [get_app(app_label) for app_label in exclude]
+        excluded_apps = set(get_app(app_label) for app_label in exclude)
 
         if len(app_labels) == 0:
-            app_list = SortedDict([(app, None) for app in get_apps() if app not in excluded_apps])
+            app_list = SortedDict((app, None) for app in get_apps() if app not in excluded_apps)
         else:
             app_list = SortedDict()
             for label in app_labels:
@@ -67,18 +76,91 @@
         except KeyError:
             raise CommandError("Unknown serialization format: %s" % format)
 
+        # Now collate the objects to be serialized.
         objects = []
-        for app, model_list in app_list.items():
-            if model_list is None:
-                model_list = get_models(app)
-
-            for model in model_list:
-                if not model._meta.proxy:
-                    objects.extend(model._default_manager.all())
+        for model in sort_dependencies(app_list.items()):
+            if not model._meta.proxy and router.allow_syncdb(using, model):
+                objects.extend(model._default_manager.using(using).all())
 
         try:
-            return serializers.serialize(format, objects, indent=indent)
+            return serializers.serialize(format, objects, indent=indent,
+                        use_natural_keys=use_natural_keys)
         except Exception, e:
             if show_traceback:
                 raise
             raise CommandError("Unable to serialize database: %s" % e)
+
+def sort_dependencies(app_list):
+    """Sort a list of app,modellist pairs into a single list of models.
+
+    The single list of models is sorted so that any model with a natural key
+    is serialized before a normal model, and any model with a natural key
+    dependency has it's dependencies serialized first.
+    """
+    from django.db.models import get_model, get_models
+    # Process the list of models, and get the list of dependencies
+    model_dependencies = []
+    models = set()
+    for app, model_list in app_list:
+        if model_list is None:
+            model_list = get_models(app)
+
+        for model in model_list:
+            models.add(model)
+            # Add any explicitly defined dependencies
+            if hasattr(model, 'natural_key'):
+                deps = getattr(model.natural_key, 'dependencies', [])
+                if deps:
+                    deps = [get_model(*d.split('.')) for d in deps]
+            else:
+                deps = []
+
+            # Now add a dependency for any FK or M2M relation with
+            # a model that defines a natural key
+            for field in model._meta.fields:
+                if hasattr(field.rel, 'to'):
+                    rel_model = field.rel.to
+                    if hasattr(rel_model, 'natural_key'):
+                        deps.append(rel_model)
+            for field in model._meta.many_to_many:
+                rel_model = field.rel.to
+                if hasattr(rel_model, 'natural_key'):
+                    deps.append(rel_model)
+            model_dependencies.append((model, deps))
+
+    model_dependencies.reverse()
+    # Now sort the models to ensure that dependencies are met. This
+    # is done by repeatedly iterating over the input list of models.
+    # If all the dependencies of a given model are in the final list,
+    # that model is promoted to the end of the final list. This process
+    # continues until the input list is empty, or we do a full iteration
+    # over the input models without promoting a model to the final list.
+    # If we do a full iteration without a promotion, that means there are
+    # circular dependencies in the list.
+    model_list = []
+    while model_dependencies:
+        skipped = []
+        changed = False
+        while model_dependencies:
+            model, deps = model_dependencies.pop()
+
+            # If all of the models in the dependency list are either already
+            # on the final model list, or not on the original serialization list,
+            # then we've found another model with all it's dependencies satisfied.
+            found = True
+            for candidate in ((d not in models or d in model_list) for d in deps):
+                if not candidate:
+                    found = False
+            if found:
+                model_list.append(model)
+                changed = True
+            else:
+                skipped.append((model, deps))
+        if not changed:
+            raise CommandError("Can't resolve dependencies for %s in serialized app list." %
+                ', '.join('%s.%s' % (model._meta.app_label, model._meta.object_name)
+                for model, deps in sorted(skipped, key=lambda obj: obj[0].__name__))
+            )
+        model_dependencies = skipped
+
+    return model_list
\ No newline at end of file
--- a/web/lib/django/core/management/commands/flush.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/flush.py	Tue May 25 02:43:45 2010 +0200
@@ -1,20 +1,28 @@
+from optparse import make_option
+
+from django.conf import settings
+from django.db import connections, transaction, models, DEFAULT_DB_ALIAS
+from django.core.management import call_command
 from django.core.management.base import NoArgsCommand, CommandError
 from django.core.management.color import no_style
+from django.core.management.sql import sql_flush, emit_post_sync_signal
 from django.utils.importlib import import_module
-from optparse import make_option
+
+
 
 class Command(NoArgsCommand):
     option_list = NoArgsCommand.option_list + (
         make_option('--noinput', action='store_false', dest='interactive', default=True,
             help='Tells Django to NOT prompt the user for input of any kind.'),
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to flush. '
+                'Defaults to the "default" database.'),
     )
     help = "Executes ``sqlflush`` on the current database."
 
     def handle_noargs(self, **options):
-        from django.conf import settings
-        from django.db import connection, transaction, models
-        from django.core.management.sql import sql_flush, emit_post_sync_signal
-
+        db = options.get('database', DEFAULT_DB_ALIAS)
+        connection = connections[db]
         verbosity = int(options.get('verbosity', 1))
         interactive = options.get('interactive')
 
@@ -28,7 +36,7 @@
             except ImportError:
                 pass
 
-        sql_list = sql_flush(self.style, only_django=True)
+        sql_list = sql_flush(self.style, connection, only_django=True)
 
         if interactive:
             confirm = raw_input("""You have requested a flush of the database.
@@ -36,7 +44,7 @@
 and return each table to the state it was in after syncdb.
 Are you sure you want to do this?
 
-    Type 'yes' to continue, or 'no' to cancel: """ % settings.DATABASE_NAME)
+    Type 'yes' to continue, or 'no' to cancel: """ % connection.settings_dict['NAME'])
         else:
             confirm = 'yes'
 
@@ -46,23 +54,24 @@
                 for sql in sql_list:
                     cursor.execute(sql)
             except Exception, e:
-                transaction.rollback_unless_managed()
+                transaction.rollback_unless_managed(using=db)
                 raise CommandError("""Database %s couldn't be flushed. Possible reasons:
-      * The database isn't running or isn't configured correctly.
-      * At least one of the expected database tables doesn't exist.
-      * The SQL was invalid.
-    Hint: Look at the output of 'django-admin.py sqlflush'. That's the SQL this command wasn't able to run.
-    The full error: %s""" % (settings.DATABASE_NAME, e))
-            transaction.commit_unless_managed()
+  * The database isn't running or isn't configured correctly.
+  * At least one of the expected database tables doesn't exist.
+  * The SQL was invalid.
+Hint: Look at the output of 'django-admin.py sqlflush'. That's the SQL this command wasn't able to run.
+The full error: %s""" % (connection.settings_dict['NAME'], e))
+            transaction.commit_unless_managed(using=db)
 
             # Emit the post sync signal. This allows individual
             # applications to respond as if the database had been
             # sync'd from scratch.
-            emit_post_sync_signal(models.get_models(), verbosity, interactive)
+            emit_post_sync_signal(models.get_models(), verbosity, interactive, db)
 
             # Reinstall the initial_data fixture.
-            from django.core.management import call_command
-            call_command('loaddata', 'initial_data', **options)
+            kwargs = options.copy()
+            kwargs['database'] = db
+            call_command('loaddata', 'initial_data', **kwargs)
 
         else:
             print "Flush cancelled."
--- a/web/lib/django/core/management/commands/inspectdb.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/inspectdb.py	Tue May 25 02:43:45 2010 +0200
@@ -1,20 +1,31 @@
+import keyword
+from optparse import make_option
+
 from django.core.management.base import NoArgsCommand, CommandError
+from django.db import connections, DEFAULT_DB_ALIAS
 
 class Command(NoArgsCommand):
     help = "Introspects the database tables in the given database and outputs a Django model module."
 
+    option_list = NoArgsCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to '
+                'introspect.  Defaults to using the "default" database.'),
+    )
+
     requires_model_validation = False
 
+    db_module = 'django.db'
+
     def handle_noargs(self, **options):
         try:
-            for line in self.handle_inspection():
+            for line in self.handle_inspection(options):
                 print line
         except NotImplementedError:
             raise CommandError("Database inspection isn't supported for the currently selected database backend.")
 
-    def handle_inspection(self):
-        from django.db import connection
-        import keyword
+    def handle_inspection(self, options):
+        connection = connections[options.get('database', DEFAULT_DB_ALIAS)]
 
         table2model = lambda table_name: table_name.title().replace('_', '').replace(' ', '').replace('-', '')
 
@@ -28,7 +39,7 @@
         yield "# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'"
         yield "# into your database."
         yield ''
-        yield 'from django.db import models'
+        yield 'from %s import models' % self.db_module
         yield ''
         for table_name in connection.introspection.get_table_list(cursor):
             yield 'class %s(models.Model):' % table2model(table_name)
@@ -72,25 +83,11 @@
                     else:
                         extra_params['db_column'] = column_name
                 else:
-                    try:
-                        field_type = connection.introspection.get_field_type(row[1], row)
-                    except KeyError:
-                        field_type = 'TextField'
-                        comment_notes.append('This field type is a guess.')
-
-                    # This is a hook for DATA_TYPES_REVERSE to return a tuple of
-                    # (field_type, extra_params_dict).
-                    if type(field_type) is tuple:
-                        field_type, new_params = field_type
-                        extra_params.update(new_params)
-
-                    # Add max_length for all CharFields.
-                    if field_type == 'CharField' and row[3]:
-                        extra_params['max_length'] = row[3]
-
-                    if field_type == 'DecimalField':
-                        extra_params['max_digits'] = row[4]
-                        extra_params['decimal_places'] = row[5]
+                    # Calling `get_field_type` to get the field type string and any
+                    # additional paramters and notes.
+                    field_type, field_params, field_notes = self.get_field_type(connection, table_name, row)
+                    extra_params.update(field_params)
+                    comment_notes.extend(field_notes)
 
                     # Add primary_key and unique, if necessary.
                     if column_name in indexes:
@@ -122,6 +119,46 @@
                 if comment_notes:
                     field_desc += ' # ' + ' '.join(comment_notes)
                 yield '    %s' % field_desc
-            yield '    class Meta:'
-            yield '        db_table = %r' % table_name
-            yield ''
+            for meta_line in self.get_meta(table_name):
+                yield meta_line
+
+    def get_field_type(self, connection, table_name, row):
+        """
+        Given the database connection, the table name, and the cursor row
+        description, this routine will return the given field type name, as
+        well as any additional keyword parameters and notes for the field.
+        """
+        field_params = {}
+        field_notes = []
+
+        try:
+            field_type = connection.introspection.get_field_type(row[1], row)
+        except KeyError:
+            field_type = 'TextField'
+            field_notes.append('This field type is a guess.')
+
+        # This is a hook for DATA_TYPES_REVERSE to return a tuple of
+        # (field_type, field_params_dict).
+        if type(field_type) is tuple:
+            field_type, new_params = field_type
+            field_params.update(new_params)
+
+        # Add max_length for all CharFields.
+        if field_type == 'CharField' and row[3]:
+            field_params['max_length'] = row[3]
+
+        if field_type == 'DecimalField':
+            field_params['max_digits'] = row[4]
+            field_params['decimal_places'] = row[5]
+
+        return field_type, field_params, field_notes
+
+    def get_meta(self, table_name):
+        """
+        Return a sequence comprising the lines of code necessary
+        to construct the inner Meta class for the model corresponding
+        to the given database table name.
+        """
+        return ['    class Meta:',
+                '        db_table = %r' % table_name,
+                '']
--- a/web/lib/django/core/management/commands/loaddata.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/loaddata.py	Tue May 25 02:43:45 2010 +0200
@@ -4,13 +4,13 @@
 import zipfile
 from optparse import make_option
 
+from django.conf import settings
+from django.core import serializers
 from django.core.management.base import BaseCommand
 from django.core.management.color import no_style
-
-try:
-    set
-except NameError:
-    from sets import Set as set   # Python 2.3 fallback
+from django.db import connections, router, transaction, DEFAULT_DB_ALIAS
+from django.db.models import get_apps
+from django.utils.itercompat import product
 
 try:
     import bz2
@@ -22,12 +22,16 @@
     help = 'Installs the named fixture(s) in the database.'
     args = "fixture [fixture ...]"
 
+    option_list = BaseCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a specific database to load '
+                'fixtures into. Defaults to the "default" database.'),
+    )
+
     def handle(self, *fixture_labels, **options):
-        from django.db.models import get_apps
-        from django.core import serializers
-        from django.db import connection, transaction
-        from django.conf import settings
+        using = options.get('database', DEFAULT_DB_ALIAS)
 
+        connection = connections[using]
         self.style = no_style()
 
         verbosity = int(options.get('verbosity', 1))
@@ -56,9 +60,9 @@
         # Start transaction management. All fixtures are installed in a
         # single transaction to ensure that all references are resolved.
         if commit:
-            transaction.commit_unless_managed()
-            transaction.enter_transaction_management()
-            transaction.managed(True)
+            transaction.commit_unless_managed(using=using)
+            transaction.enter_transaction_management(using=using)
+            transaction.managed(True, using=using)
 
         class SingleZipReader(zipfile.ZipFile):
             def __init__(self, *args, **kwargs):
@@ -76,7 +80,17 @@
         if has_bz2:
             compression_types['bz2'] = bz2.BZ2File
 
-        app_fixtures = [os.path.join(os.path.dirname(app.__file__), 'fixtures') for app in get_apps()]
+        app_module_paths = []
+        for app in get_apps():
+            if hasattr(app, '__path__'):
+                # It's a 'models/' subpackage
+                for path in app.__path__:
+                    app_module_paths.append(path)
+            else:
+                # It's a models.py module
+                app_module_paths.append(app.__file__)
+
+        app_fixtures = [os.path.join(os.path.dirname(path), 'fixtures') for path in app_module_paths]
         for fixture_label in fixture_labels:
             parts = fixture_label.split('.')
 
@@ -103,8 +117,8 @@
                 sys.stderr.write(
                     self.style.ERROR("Problem installing fixture '%s': %s is not a known serialization format." %
                         (fixture_name, format)))
-                transaction.rollback()
-                transaction.leave_transaction_management()
+                transaction.rollback(using=using)
+                transaction.leave_transaction_management(using=using)
                 return
 
             if os.path.isabs(fixture_name):
@@ -117,73 +131,75 @@
                     print "Checking %s for fixtures..." % humanize(fixture_dir)
 
                 label_found = False
-                for format in formats:
-                    for compression_format in compression_formats:
-                        if compression_format: 
-                            file_name = '.'.join([fixture_name, format, 
-                                                  compression_format])
-                        else: 
-                            file_name = '.'.join([fixture_name, format])
-                    
-                        if verbosity > 1:
-                            print "Trying %s for %s fixture '%s'..." % \
-                                (humanize(fixture_dir), file_name, fixture_name)
-                        full_path = os.path.join(fixture_dir, file_name)
-                        open_method = compression_types[compression_format]                                
-                        try: 
-                            fixture = open_method(full_path, 'r')
-                            if label_found:
-                                fixture.close()
-                                print self.style.ERROR("Multiple fixtures named '%s' in %s. Aborting." %
-                                    (fixture_name, humanize(fixture_dir)))
-                                transaction.rollback()
-                                transaction.leave_transaction_management()
-                                return
-                            else:
-                                fixture_count += 1
-                                objects_in_fixture = 0
-                                if verbosity > 0:
-                                    print "Installing %s fixture '%s' from %s." % \
-                                        (format, fixture_name, humanize(fixture_dir))
-                                try:
-                                    objects = serializers.deserialize(format, fixture)
-                                    for obj in objects:
+                for combo in product([using, None], formats, compression_formats):
+                    database, format, compression_format = combo
+                    file_name = '.'.join(
+                        p for p in [
+                            fixture_name, database, format, compression_format
+                        ]
+                        if p
+                    )
+
+                    if verbosity > 1:
+                        print "Trying %s for %s fixture '%s'..." % \
+                            (humanize(fixture_dir), file_name, fixture_name)
+                    full_path = os.path.join(fixture_dir, file_name)
+                    open_method = compression_types[compression_format]
+                    try:
+                        fixture = open_method(full_path, 'r')
+                        if label_found:
+                            fixture.close()
+                            print self.style.ERROR("Multiple fixtures named '%s' in %s. Aborting." %
+                                (fixture_name, humanize(fixture_dir)))
+                            transaction.rollback(using=using)
+                            transaction.leave_transaction_management(using=using)
+                            return
+                        else:
+                            fixture_count += 1
+                            objects_in_fixture = 0
+                            if verbosity > 0:
+                                print "Installing %s fixture '%s' from %s." % \
+                                    (format, fixture_name, humanize(fixture_dir))
+                            try:
+                                objects = serializers.deserialize(format, fixture, using=using)
+                                for obj in objects:
+                                    if router.allow_syncdb(using, obj.object.__class__):
                                         objects_in_fixture += 1
                                         models.add(obj.object.__class__)
-                                        obj.save()
-                                    object_count += objects_in_fixture
-                                    label_found = True
-                                except (SystemExit, KeyboardInterrupt):
-                                    raise
-                                except Exception:
-                                    import traceback
-                                    fixture.close()
-                                    transaction.rollback()
-                                    transaction.leave_transaction_management()
-                                    if show_traceback:
-                                        traceback.print_exc()
-                                    else:
-                                        sys.stderr.write(
-                                            self.style.ERROR("Problem installing fixture '%s': %s\n" %
-                                                 (full_path, ''.join(traceback.format_exception(sys.exc_type, 
-                                                     sys.exc_value, sys.exc_traceback))))) 
-                                    return
+                                        obj.save(using=using)
+                                object_count += objects_in_fixture
+                                label_found = True
+                            except (SystemExit, KeyboardInterrupt):
+                                raise
+                            except Exception:
+                                import traceback
                                 fixture.close()
-
-                                # If the fixture we loaded contains 0 objects, assume that an
-                                # error was encountered during fixture loading.
-                                if objects_in_fixture == 0:
+                                transaction.rollback(using=using)
+                                transaction.leave_transaction_management(using=using)
+                                if show_traceback:
+                                    traceback.print_exc()
+                                else:
                                     sys.stderr.write(
-                                        self.style.ERROR("No fixture data found for '%s'. (File format may be invalid.)" %
-                                            (fixture_name)))
-                                    transaction.rollback()
-                                    transaction.leave_transaction_management()
-                                    return
+                                        self.style.ERROR("Problem installing fixture '%s': %s\n" %
+                                             (full_path, ''.join(traceback.format_exception(sys.exc_type,
+                                                 sys.exc_value, sys.exc_traceback)))))
+                                return
+                            fixture.close()
 
-                        except Exception, e:
-                            if verbosity > 1:
-                                print "No %s fixture '%s' in %s." % \
-                                    (format, fixture_name, humanize(fixture_dir))
+                            # If the fixture we loaded contains 0 objects, assume that an
+                            # error was encountered during fixture loading.
+                            if objects_in_fixture == 0:
+                                sys.stderr.write(
+                                    self.style.ERROR("No fixture data found for '%s'. (File format may be invalid.)" %
+                                        (fixture_name)))
+                                transaction.rollback(using=using)
+                                transaction.leave_transaction_management(using=using)
+                                return
+
+                    except Exception, e:
+                        if verbosity > 1:
+                            print "No %s fixture '%s' in %s." % \
+                                (format, fixture_name, humanize(fixture_dir))
 
         # If we found even one object in a fixture, we need to reset the
         # database sequences.
@@ -196,11 +212,11 @@
                     cursor.execute(line)
 
         if commit:
-            transaction.commit()
-            transaction.leave_transaction_management()
+            transaction.commit(using=using)
+            transaction.leave_transaction_management(using=using)
 
         if object_count == 0:
-            if verbosity > 1:
+            if verbosity > 0:
                 print "No fixtures found."
         else:
             if verbosity > 0:
--- a/web/lib/django/core/management/commands/makemessages.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/makemessages.py	Tue May 25 02:43:45 2010 +0200
@@ -1,23 +1,17 @@
+import fnmatch
+import glob
+import os
 import re
-import os
 import sys
-import glob
-import warnings
 from itertools import dropwhile
 from optparse import make_option
+from subprocess import PIPE, Popen
 
 from django.core.management.base import CommandError, BaseCommand
-
-try:
-    set
-except NameError:
-    from sets import Set as set     # For Python 2.3
+from django.utils.text import get_text_list
 
-# Intentionally silence DeprecationWarnings about os.popen3 in Python 2.6. It's
-# still sensible for us to use it, since subprocess didn't exist in 2.3.
-warnings.filterwarnings('ignore', category=DeprecationWarning, message=r'os\.popen3')
-
-pythonize_re = re.compile(r'\n\s*//')
+pythonize_re = re.compile(r'(?:^|\n)\s*//')
+plural_forms_re = re.compile(r'^(?P<value>"Plural-Forms.+?\\n")\s*$', re.MULTILINE | re.DOTALL)
 
 def handle_extensions(extensions=('html',)):
     """
@@ -44,7 +38,84 @@
     # trick xgettext to parse them as Python files)
     return set([x for x in ext_list if x != '.py'])
 
-def make_messages(locale=None, domain='django', verbosity='1', all=False, extensions=None):
+def _popen(cmd):
+    """
+    Friendly wrapper around Popen for Windows
+    """
+    p = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE, close_fds=os.name != 'nt', universal_newlines=True)
+    return p.communicate()
+
+def walk(root, topdown=True, onerror=None, followlinks=False):
+    """
+    A version of os.walk that can follow symlinks for Python < 2.6
+    """
+    for dirpath, dirnames, filenames in os.walk(root, topdown, onerror):
+        yield (dirpath, dirnames, filenames)
+        if followlinks:
+            for d in dirnames:
+                p = os.path.join(dirpath, d)
+                if os.path.islink(p):
+                    for link_dirpath, link_dirnames, link_filenames in walk(p):
+                        yield (link_dirpath, link_dirnames, link_filenames)
+
+def is_ignored(path, ignore_patterns):
+    """
+    Helper function to check if the given path should be ignored or not.
+    """
+    for pattern in ignore_patterns:
+        if fnmatch.fnmatchcase(path, pattern):
+            return True
+    return False
+
+def find_files(root, ignore_patterns, verbosity, symlinks=False):
+    """
+    Helper function to get all files in the given root.
+    """
+    all_files = []
+    for (dirpath, dirnames, filenames) in walk(".", followlinks=symlinks):
+        for f in filenames:
+            norm_filepath = os.path.normpath(os.path.join(dirpath, f))
+            if is_ignored(norm_filepath, ignore_patterns):
+                if verbosity > 1:
+                    sys.stdout.write('ignoring file %s in %s\n' % (f, dirpath))
+            else:
+                all_files.extend([(dirpath, f)])
+    all_files.sort()
+    return all_files
+
+def copy_plural_forms(msgs, locale, domain, verbosity):
+    """
+    Copies plural forms header contents from a Django catalog of locale to
+    the msgs string, inserting it at the right place. msgs should be the
+    contents of a newly created .po file.
+    """
+    import django
+    django_dir = os.path.normpath(os.path.join(os.path.dirname(django.__file__)))
+    if domain == 'djangojs':
+        domains = ('djangojs', 'django')
+    else:
+        domains = ('django',)
+    for domain in domains:
+        django_po = os.path.join(django_dir, 'conf', 'locale', locale, 'LC_MESSAGES', '%s.po' % domain)
+        if os.path.exists(django_po):
+            m = plural_forms_re.search(open(django_po, 'rU').read())
+            if m:
+                if verbosity > 1:
+                    sys.stderr.write("copying plural forms: %s\n" % m.group('value'))
+                lines = []
+                seen = False
+                for line in msgs.split('\n'):
+                    if not line and not seen:
+                        line = '%s\n' % m.group('value')
+                        seen = True
+                    lines.append(line)
+                msgs = '\n'.join(lines)
+                break
+    return msgs
+
+
+def make_messages(locale=None, domain='django', verbosity='1', all=False,
+        extensions=None, symlinks=False, ignore_patterns=[]):
     """
     Uses the locale directory from the Django SVN tree or an application/
     project to process all
@@ -58,8 +129,10 @@
 
     from django.utils.translation import templatize
 
+    invoked_for_django = False
     if os.path.isdir(os.path.join('conf', 'locale')):
         localedir = os.path.abspath(os.path.join('conf', 'locale'))
+        invoked_for_django = True
     elif os.path.isdir('locale'):
         localedir = os.path.abspath('locale')
     else:
@@ -76,29 +149,21 @@
             message = "usage: make-messages.py -l <language>\n   or: make-messages.py -a\n"
         raise CommandError(message)
 
-    # xgettext versions prior to 0.15 assumed Python source files were encoded
-    # in iso-8859-1, and produce utf-8 output.  In the case where xgettext is
-    # given utf-8 input (required for Django files with non-ASCII characters),
-    # this results in a utf-8 re-encoding of the original utf-8 that needs to be
-    # undone to restore the original utf-8.  So we check the xgettext version
-    # here once and set a flag to remember if a utf-8 decoding needs to be done
-    # on xgettext's output for Python files.  We default to assuming this isn't
-    # necessary if we run into any trouble determining the version.
-    xgettext_reencodes_utf8 = False
-    (stdin, stdout, stderr) = os.popen3('xgettext --version', 't')
-    match = re.search(r'(?P<major>\d+)\.(?P<minor>\d+)', stdout.read())
+    # We require gettext version 0.15 or newer.
+    output = _popen('xgettext --version')[0]
+    match = re.search(r'(?P<major>\d+)\.(?P<minor>\d+)', output)
     if match:
         xversion = (int(match.group('major')), int(match.group('minor')))
         if xversion < (0, 15):
-            xgettext_reencodes_utf8 = True
- 
+            raise CommandError("Django internationalization requires GNU gettext 0.15 or newer. You are using version %s, please upgrade your gettext toolset." % match.group())
+
     languages = []
     if locale is not None:
         languages.append(locale)
     elif all:
-        locale_dirs = filter(os.path.isdir, glob.glob('%s/*' % localedir)) 
+        locale_dirs = filter(os.path.isdir, glob.glob('%s/*' % localedir))
         languages = [os.path.basename(l) for l in locale_dirs]
-    
+
     for locale in languages:
         if verbosity > 0:
             print "processing language", locale
@@ -112,23 +177,21 @@
         if os.path.exists(potfile):
             os.unlink(potfile)
 
-        all_files = []
-        for (dirpath, dirnames, filenames) in os.walk("."):
-            all_files.extend([(dirpath, f) for f in filenames])
-        all_files.sort()
-        for dirpath, file in all_files:
+        for dirpath, file in find_files(".", ignore_patterns, verbosity, symlinks=symlinks):
             file_base, file_ext = os.path.splitext(file)
-            if domain == 'djangojs' and file_ext == '.js':
+            if domain == 'djangojs' and file_ext in extensions:
                 if verbosity > 1:
                     sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
                 src = open(os.path.join(dirpath, file), "rU").read()
                 src = pythonize_re.sub('\n#', src)
                 thefile = '%s.py' % file
-                open(os.path.join(dirpath, thefile), "w").write(src)
+                f = open(os.path.join(dirpath, thefile), "w")
+                try:
+                    f.write(src)
+                finally:
+                    f.close()
                 cmd = 'xgettext -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (domain, os.path.join(dirpath, thefile))
-                (stdin, stdout, stderr) = os.popen3(cmd, 't')
-                msgs = stdout.read()
-                errors = stderr.read()
+                msgs, errors = _popen(cmd)
                 if errors:
                     raise CommandError("errors happened while running xgettext on %s\n%s" % (file, errors))
                 old = '#: '+os.path.join(dirpath, thefile)[2:]
@@ -140,7 +203,11 @@
                 else:
                     msgs = msgs.replace('charset=CHARSET', 'charset=UTF-8')
                 if msgs:
-                    open(potfile, 'ab').write(msgs)
+                    f = open(potfile, 'ab')
+                    try:
+                        f.write(msgs)
+                    finally:
+                        f.close()
                 os.unlink(os.path.join(dirpath, thefile))
             elif domain == 'django' and (file_ext == '.py' or file_ext in extensions):
                 thefile = file
@@ -148,7 +215,11 @@
                     src = open(os.path.join(dirpath, file), "rU").read()
                     thefile = '%s.py' % file
                     try:
-                        open(os.path.join(dirpath, thefile), "w").write(templatize(src))
+                        f = open(os.path.join(dirpath, thefile), "w")
+                        try:
+                            f.write(templatize(src))
+                        finally:
+                            f.close()
                     except SyntaxError, msg:
                         msg = "%s (file: %s)" % (msg, os.path.join(dirpath, file))
                         raise SyntaxError(msg)
@@ -156,15 +227,10 @@
                     sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
                 cmd = 'xgettext -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --keyword=ugettext_noop --keyword=ugettext_lazy --keyword=ungettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (
                     domain, os.path.join(dirpath, thefile))
-                (stdin, stdout, stderr) = os.popen3(cmd, 't')
-                msgs = stdout.read()
-                errors = stderr.read()
+                msgs, errors = _popen(cmd)
                 if errors:
                     raise CommandError("errors happened while running xgettext on %s\n%s" % (file, errors))
 
-                if xgettext_reencodes_utf8:
-                    msgs = msgs.decode('utf-8').encode('iso-8859-1')
-
                 if thefile != file:
                     old = '#: '+os.path.join(dirpath, thefile)[2:]
                     new = '#: '+os.path.join(dirpath, file)[2:]
@@ -175,24 +241,34 @@
                 else:
                     msgs = msgs.replace('charset=CHARSET', 'charset=UTF-8')
                 if msgs:
-                    open(potfile, 'ab').write(msgs)
+                    f = open(potfile, 'ab')
+                    try:
+                        f.write(msgs)
+                    finally:
+                        f.close()
                 if thefile != file:
                     os.unlink(os.path.join(dirpath, thefile))
 
         if os.path.exists(potfile):
-            (stdin, stdout, stderr) = os.popen3('msguniq --to-code=utf-8 "%s"' % potfile, 't')
-            msgs = stdout.read()
-            errors = stderr.read()
+            msgs, errors = _popen('msguniq --to-code=utf-8 "%s"' % potfile)
             if errors:
                 raise CommandError("errors happened while running msguniq\n%s" % errors)
-            open(potfile, 'w').write(msgs)
+            f = open(potfile, 'w')
+            try:
+                f.write(msgs)
+            finally:
+                f.close()
             if os.path.exists(pofile):
-                (stdin, stdout, stderr) = os.popen3('msgmerge -q "%s" "%s"' % (pofile, potfile), 't')
-                msgs = stdout.read()
-                errors = stderr.read()
+                msgs, errors = _popen('msgmerge -q "%s" "%s"' % (pofile, potfile))
                 if errors:
                     raise CommandError("errors happened while running msgmerge\n%s" % errors)
-            open(pofile, 'wb').write(msgs)
+            elif not invoked_for_django:
+                msgs = copy_plural_forms(msgs, locale, domain, verbosity)
+            f = open(pofile, 'wb')
+            try:
+                f.write(msgs)
+            finally:
+                f.close()
             os.unlink(potfile)
 
 
@@ -207,6 +283,12 @@
         make_option('--extension', '-e', dest='extensions',
             help='The file extension(s) to examine (default: ".html", separate multiple extensions with commas, or use -e multiple times)',
             action='append'),
+        make_option('--symlinks', '-s', action='store_true', dest='symlinks',
+            default=False, help='Follows symlinks to directories when examining source code and templates for translation strings.'),
+        make_option('--ignore', '-i', action='append', dest='ignore_patterns',
+            default=[], metavar='PATTERN', help='Ignore files or directories matching this glob-style pattern. Use multiple times to ignore more.'),
+        make_option('--no-default-ignore', action='store_false', dest='use_default_ignore_patterns',
+            default=True, help="Don't ignore the common glob-style patterns 'CVS', '.*' and '*~'."),
     )
     help = "Runs over the entire source tree of the current directory and pulls out all strings marked for translation. It creates (or updates) a message file in the conf/locale (in the django tree) or locale (for project and application) directory."
 
@@ -221,14 +303,19 @@
         domain = options.get('domain')
         verbosity = int(options.get('verbosity'))
         process_all = options.get('all')
-        extensions = options.get('extensions') or ['html']
+        extensions = options.get('extensions')
+        symlinks = options.get('symlinks')
+        ignore_patterns = options.get('ignore_patterns')
+        if options.get('use_default_ignore_patterns'):
+            ignore_patterns += ['CVS', '.*', '*~']
+        ignore_patterns = list(set(ignore_patterns))
 
         if domain == 'djangojs':
-            extensions = []
+            extensions = handle_extensions(extensions or ['js'])
         else:
-            extensions = handle_extensions(extensions)
+            extensions = handle_extensions(extensions or ['html'])
 
-        if '.js' in extensions:
-            raise CommandError("JavaScript files should be examined by using the special 'djangojs' domain only.")
+        if verbosity > 1:
+            sys.stdout.write('examining files with the extensions: %s\n' % get_text_list(list(extensions), 'and'))
 
-        make_messages(locale, domain, verbosity, process_all, extensions)
+        make_messages(locale, domain, verbosity, process_all, extensions, symlinks, ignore_patterns)
--- a/web/lib/django/core/management/commands/reset.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/reset.py	Tue May 25 02:43:45 2010 +0200
@@ -1,11 +1,18 @@
+from optparse import make_option
+
+from django.conf import settings
 from django.core.management.base import AppCommand, CommandError
 from django.core.management.color import no_style
-from optparse import make_option
+from django.core.management.sql import sql_reset
+from django.db import connections, transaction, DEFAULT_DB_ALIAS
 
 class Command(AppCommand):
     option_list = AppCommand.option_list + (
         make_option('--noinput', action='store_false', dest='interactive', default=True,
             help='Tells Django to NOT prompt the user for input of any kind.'),
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to reset. '
+                'Defaults to the "default" database.'),
     )
     help = "Executes ``sqlreset`` for the given app(s) in the current database."
     args = '[appname ...]'
@@ -13,15 +20,13 @@
     output_transaction = True
 
     def handle_app(self, app, **options):
-        from django.db import connection, transaction
-        from django.conf import settings
-        from django.core.management.sql import sql_reset
+        using = options.get('database', DEFAULT_DB_ALIAS)
+        connection = connections[using]
 
         app_name = app.__name__.split('.')[-2]
-
         self.style = no_style()
 
-        sql_list = sql_reset(app, self.style)
+        sql_list = sql_reset(app, self.style, connection)
 
         if options.get('interactive'):
             confirm = raw_input("""
@@ -30,7 +35,7 @@
 the "%s" application in the database "%s".
 Are you sure you want to do this?
 
-Type 'yes' to continue, or 'no' to cancel: """ % (app_name, settings.DATABASE_NAME))
+Type 'yes' to continue, or 'no' to cancel: """ % (app_name, connection.settings_dict['NAME']))
         else:
             confirm = 'yes'
 
--- a/web/lib/django/core/management/commands/sql.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/sql.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,19 @@
+from optparse import make_option
+
 from django.core.management.base import AppCommand
+from django.core.management.sql import sql_create
+from django.db import connections, DEFAULT_DB_ALIAS
 
 class Command(AppCommand):
     help = "Prints the CREATE TABLE SQL statements for the given app name(s)."
 
+    option_list = AppCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
+                'SQL for.  Defaults to the "default" database.'),
+    )
+
     output_transaction = True
 
     def handle_app(self, app, **options):
-        from django.core.management.sql import sql_create
-        return u'\n'.join(sql_create(app, self.style)).encode('utf-8')
+        return u'\n'.join(sql_create(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
--- a/web/lib/django/core/management/commands/sqlall.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/sqlall.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,19 @@
+from optparse import make_option
+
 from django.core.management.base import AppCommand
+from django.core.management.sql import sql_all
+from django.db import connections, DEFAULT_DB_ALIAS
 
 class Command(AppCommand):
     help = "Prints the CREATE TABLE, custom SQL and CREATE INDEX SQL statements for the given model module name(s)."
 
+    option_list = AppCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
+                'SQL for.  Defaults to the "default" database.'),
+    )
+
     output_transaction = True
 
     def handle_app(self, app, **options):
-        from django.core.management.sql import sql_all
-        return u'\n'.join(sql_all(app, self.style)).encode('utf-8')
+        return u'\n'.join(sql_all(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
--- a/web/lib/django/core/management/commands/sqlclear.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/sqlclear.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,19 @@
+from optparse import make_option
+
 from django.core.management.base import AppCommand
+from django.core.management.sql import sql_delete
+from django.db import connections, DEFAULT_DB_ALIAS
 
 class Command(AppCommand):
     help = "Prints the DROP TABLE SQL statements for the given app name(s)."
 
+    option_list = AppCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
+                'SQL for.  Defaults to the "default" database.'),
+    )
+
     output_transaction = True
 
     def handle_app(self, app, **options):
-        from django.core.management.sql import sql_delete
-        return u'\n'.join(sql_delete(app, self.style)).encode('utf-8')
+        return u'\n'.join(sql_delete(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
--- a/web/lib/django/core/management/commands/sqlcustom.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/sqlcustom.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,19 @@
+from optparse import make_option
+
 from django.core.management.base import AppCommand
+from django.core.management.sql import sql_custom
+from django.db import connections, DEFAULT_DB_ALIAS
 
 class Command(AppCommand):
     help = "Prints the custom table modifying SQL statements for the given app name(s)."
 
+    option_list = AppCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
+                'SQL for.  Defaults to the "default" database.'),
+    )
+
     output_transaction = True
 
     def handle_app(self, app, **options):
-        from django.core.management.sql import sql_custom
-        return u'\n'.join(sql_custom(app, self.style)).encode('utf-8')
+        return u'\n'.join(sql_custom(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
--- a/web/lib/django/core/management/commands/sqlflush.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/sqlflush.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,19 @@
+from optparse import make_option
+
 from django.core.management.base import NoArgsCommand
+from django.core.management.sql import sql_flush
+from django.db import connections, DEFAULT_DB_ALIAS
 
 class Command(NoArgsCommand):
     help = "Returns a list of the SQL statements required to return all tables in the database to the state they were in just after they were installed."
 
+    option_list = NoArgsCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
+                'SQL for.  Defaults to the "default" database.'),
+    )
+
     output_transaction = True
 
     def handle_noargs(self, **options):
-        from django.core.management.sql import sql_flush
-        return u'\n'.join(sql_flush(self.style, only_django=True)).encode('utf-8')
+        return u'\n'.join(sql_flush(self.style, connections[options.get('database', DEFAULT_DB_ALIAS)], only_django=True)).encode('utf-8')
--- a/web/lib/django/core/management/commands/sqlindexes.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/sqlindexes.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,20 @@
+from optparse import make_option
+
 from django.core.management.base import AppCommand
+from django.core.management.sql import sql_indexes
+from django.db import connections, DEFAULT_DB_ALIAS
 
 class Command(AppCommand):
     help = "Prints the CREATE INDEX SQL statements for the given model module name(s)."
 
+    option_list = AppCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
+                'SQL for.  Defaults to the "default" database.'),
+
+    )
+
     output_transaction = True
 
     def handle_app(self, app, **options):
-        from django.core.management.sql import sql_indexes
-        return u'\n'.join(sql_indexes(app, self.style)).encode('utf-8')
+        return u'\n'.join(sql_indexes(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
--- a/web/lib/django/core/management/commands/sqlreset.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/sqlreset.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,20 @@
+from optparse import make_option
+
 from django.core.management.base import AppCommand
+from django.core.management.sql import sql_reset
+from django.db import connections, DEFAULT_DB_ALIAS
 
 class Command(AppCommand):
     help = "Prints the DROP TABLE SQL, then the CREATE TABLE SQL, for the given app name(s)."
 
+    option_list = AppCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
+                'SQL for.  Defaults to the "default" database.'),
+
+    )
+
     output_transaction = True
 
     def handle_app(self, app, **options):
-        from django.core.management.sql import sql_reset
-        return u'\n'.join(sql_reset(app, self.style)).encode('utf-8')
+        return u'\n'.join(sql_reset(app, self.style, connections[options.get('database', DEFAULT_DB_ALIAS)])).encode('utf-8')
--- a/web/lib/django/core/management/commands/sqlsequencereset.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/sqlsequencereset.py	Tue May 25 02:43:45 2010 +0200
@@ -1,9 +1,20 @@
+from optparse import make_option
+
 from django.core.management.base import AppCommand
+from django.db import connections, models, DEFAULT_DB_ALIAS
 
 class Command(AppCommand):
     help = 'Prints the SQL statements for resetting sequences for the given app name(s).'
+
+    option_list = AppCommand.option_list + (
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to print the '
+                'SQL for.  Defaults to the "default" database.'),
+
+    )
+
     output_transaction = True
 
     def handle_app(self, app, **options):
-        from django.db import connection, models
-        return u'\n'.join(connection.ops.sequence_reset_sql(self.style, models.get_models(app))).encode('utf-8')
+        connection = connections[options.get('database', DEFAULT_DB_ALIAS)]
+        return u'\n'.join(connection.ops.sequence_reset_sql(self.style, models.get_models(app, include_auto_created=True))).encode('utf-8')
--- a/web/lib/django/core/management/commands/syncdb.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/syncdb.py	Tue May 25 02:43:45 2010 +0200
@@ -1,25 +1,26 @@
-from django.core.management.base import NoArgsCommand
-from django.core.management.color import no_style
-from django.utils.importlib import import_module
 from optparse import make_option
 import sys
 
-try:
-    set
-except NameError:
-    from sets import Set as set   # Python 2.3 fallback
+from django.conf import settings
+from django.core.management.base import NoArgsCommand
+from django.core.management.color import no_style
+from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
+from django.db import connections, router, transaction, models, DEFAULT_DB_ALIAS
+from django.utils.datastructures import SortedDict
+from django.utils.importlib import import_module
+
 
 class Command(NoArgsCommand):
     option_list = NoArgsCommand.option_list + (
         make_option('--noinput', action='store_false', dest='interactive', default=True,
             help='Tells Django to NOT prompt the user for input of any kind.'),
+        make_option('--database', action='store', dest='database',
+            default=DEFAULT_DB_ALIAS, help='Nominates a database to synchronize. '
+                'Defaults to the "default" database.'),
     )
     help = "Create the database tables for all apps in INSTALLED_APPS whose tables haven't already been created."
 
     def handle_noargs(self, **options):
-        from django.db import connection, transaction, models
-        from django.conf import settings
-        from django.core.management.sql import custom_sql_for_model, emit_post_sync_signal
 
         verbosity = int(options.get('verbosity', 1))
         interactive = options.get('interactive')
@@ -46,6 +47,8 @@
                 if not msg.startswith('No module named') or 'management' not in msg:
                     raise
 
+        db = options.get('database', DEFAULT_DB_ALIAS)
+        connection = connections[db]
         cursor = connection.cursor()
 
         # Get a list of already installed *models* so that references work right.
@@ -54,16 +57,30 @@
         created_models = set()
         pending_references = {}
 
+        # Build the manifest of apps and models that are to be synchronized
+        all_models = [
+            (app.__name__.split('.')[-2],
+                [m for m in models.get_models(app, include_auto_created=True)
+                if router.allow_syncdb(db, m)])
+            for app in models.get_apps()
+        ]
+        def model_installed(model):
+            opts = model._meta
+            converter = connection.introspection.table_name_converter
+            return not ((converter(opts.db_table) in tables) or
+                (opts.auto_created and converter(opts.auto_created._meta.db_table) in tables))
+
+        manifest = SortedDict(
+            (app_name, filter(model_installed, model_list))
+            for app_name, model_list in all_models
+        )
+
         # Create the tables for each model
-        for app in models.get_apps():
-            app_name = app.__name__.split('.')[-2]
-            model_list = models.get_models(app)
+        for app_name, model_list in manifest.items():
             for model in model_list:
                 # Create the model's database table, if it doesn't already exist.
                 if verbosity >= 2:
                     print "Processing %s.%s model" % (app_name, model._meta.object_name)
-                if connection.introspection.table_name_converter(model._meta.db_table) in tables:
-                    continue
                 sql, references = connection.creation.sql_create_model(model, self.style, seen_models)
                 seen_models.add(model)
                 created_models.add(model)
@@ -78,36 +95,22 @@
                     cursor.execute(statement)
                 tables.append(connection.introspection.table_name_converter(model._meta.db_table))
 
-        # Create the m2m tables. This must be done after all tables have been created
-        # to ensure that all referred tables will exist.
-        for app in models.get_apps():
-            app_name = app.__name__.split('.')[-2]
-            model_list = models.get_models(app)
-            for model in model_list:
-                if model in created_models:
-                    sql = connection.creation.sql_for_many_to_many(model, self.style)
-                    if sql:
-                        if verbosity >= 2:
-                            print "Creating many-to-many tables for %s.%s model" % (app_name, model._meta.object_name)
-                        for statement in sql:
-                            cursor.execute(statement)
 
-        transaction.commit_unless_managed()
+        transaction.commit_unless_managed(using=db)
 
         # Send the post_syncdb signal, so individual apps can do whatever they need
         # to do at this point.
-        emit_post_sync_signal(created_models, verbosity, interactive)
+        emit_post_sync_signal(created_models, verbosity, interactive, db)
 
         # The connection may have been closed by a syncdb handler.
         cursor = connection.cursor()
 
         # Install custom SQL for the app (but only if this
         # is a model we've just created)
-        for app in models.get_apps():
-            app_name = app.__name__.split('.')[-2]
-            for model in models.get_models(app):
+        for app_name, model_list in manifest.items():
+            for model in model_list:
                 if model in created_models:
-                    custom_sql = custom_sql_for_model(model, self.style)
+                    custom_sql = custom_sql_for_model(model, self.style, connection)
                     if custom_sql:
                         if verbosity >= 1:
                             print "Installing custom SQL for %s.%s model" % (app_name, model._meta.object_name)
@@ -120,16 +123,16 @@
                             if show_traceback:
                                 import traceback
                                 traceback.print_exc()
-                            transaction.rollback_unless_managed()
+                            transaction.rollback_unless_managed(using=db)
                         else:
-                            transaction.commit_unless_managed()
+                            transaction.commit_unless_managed(using=db)
                     else:
                         if verbosity >= 2:
                             print "No custom SQL for %s.%s model" % (app_name, model._meta.object_name)
+
         # Install SQL indicies for all newly created models
-        for app in models.get_apps():
-            app_name = app.__name__.split('.')[-2]
-            for model in models.get_models(app):
+        for app_name, model_list in manifest.items():
+            for model in model_list:
                 if model in created_models:
                     index_sql = connection.creation.sql_indexes_for_model(model, self.style)
                     if index_sql:
@@ -141,10 +144,9 @@
                         except Exception, e:
                             sys.stderr.write("Failed to install index for %s.%s model: %s\n" % \
                                                 (app_name, model._meta.object_name, e))
-                            transaction.rollback_unless_managed()
+                            transaction.rollback_unless_managed(using=db)
                         else:
-                            transaction.commit_unless_managed()
+                            transaction.commit_unless_managed(using=db)
 
-        # Install the 'initial_data' fixture, using format discovery
         from django.core.management import call_command
-        call_command('loaddata', 'initial_data', verbosity=verbosity)
+        call_command('loaddata', 'initial_data', verbosity=verbosity, database=db)
--- a/web/lib/django/core/management/commands/test.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/commands/test.py	Tue May 25 02:43:45 2010 +0200
@@ -6,6 +6,8 @@
     option_list = BaseCommand.option_list + (
         make_option('--noinput', action='store_false', dest='interactive', default=True,
             help='Tells Django to NOT prompt the user for input of any kind.'),
+        make_option('--failfast', action='store_true', dest='failfast', default=False,
+            help='Tells Django to stop running the test suite after first failed test.')
     )
     help = 'Runs the test suite for the specified applications, or the entire site if no apps are specified.'
     args = '[appname ...]'
@@ -18,8 +20,21 @@
 
         verbosity = int(options.get('verbosity', 1))
         interactive = options.get('interactive', True)
-        test_runner = get_runner(settings)
+        failfast = options.get('failfast', False)
+        TestRunner = get_runner(settings)
 
-        failures = test_runner(test_labels, verbosity=verbosity, interactive=interactive)
+        if hasattr(TestRunner, 'func_name'):
+            # Pre 1.2 test runners were just functions,
+            # and did not support the 'failfast' option.
+            import warnings
+            warnings.warn(
+                'Function-based test runners are deprecated. Test runners should be classes with a run_tests() method.',
+                PendingDeprecationWarning
+            )
+            failures = TestRunner(test_labels, verbosity=verbosity, interactive=interactive)
+        else:
+            test_runner = TestRunner(verbosity=verbosity, interactive=interactive, failfast=failfast)
+            failures = test_runner.run_tests(test_labels)
+
         if failures:
-            sys.exit(failures)
+            sys.exit(bool(failures))
--- a/web/lib/django/core/management/sql.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/sql.py	Tue May 25 02:43:45 2010 +0200
@@ -1,29 +1,30 @@
-from django.core.management.base import CommandError
 import os
 import re
 
-try:
-    set
-except NameError:
-    from sets import Set as set   # Python 2.3 fallback
+from django.conf import settings
+from django.contrib.contenttypes import generic
+from django.core.management.base import CommandError
+from django.dispatch import dispatcher
+from django.db import models
+from django.db.models import get_models
+from django.db.backends.util import truncate_name
 
-def sql_create(app, style):
+def sql_create(app, style, connection):
     "Returns a list of the CREATE TABLE SQL statements for the given app."
-    from django.db import connection, models
-    from django.conf import settings
 
-    if settings.DATABASE_ENGINE == 'dummy':
+    if connection.settings_dict['ENGINE'] == 'django.db.backends.dummy':
         # This must be the "dummy" database backend, which means the user
-        # hasn't set DATABASE_ENGINE.
+        # hasn't set ENGINE for the databse.
         raise CommandError("Django doesn't know which syntax to use for your SQL statements,\n" +
-            "because you haven't specified the DATABASE_ENGINE setting.\n" +
-            "Edit your settings file and change DATABASE_ENGINE to something like 'postgresql' or 'mysql'.")
+            "because you haven't specified the ENGINE setting for the database.\n" +
+            "Edit your settings file and change DATBASES['default']['ENGINE'] to something like\n" +
+            "'django.db.backends.postgresql' or 'django.db.backends.mysql'")
 
     # Get installed models, so we generate REFERENCES right.
     # We trim models from the current app so that the sqlreset command does not
     # generate invalid SQL (leaving models out of known_models is harmless, so
     # we can be conservative).
-    app_models = models.get_models(app)
+    app_models = models.get_models(app, include_auto_created=True)
     final_output = []
     tables = connection.introspection.table_names()
     known_models = set([model for model in connection.introspection.installed_models(tables) if model not in app_models])
@@ -40,10 +41,6 @@
         # Keep track of the fact that we've created the table for this model.
         known_models.add(model)
 
-    # Create the many-to-many join tables.
-    for model in app_models:
-        final_output.extend(connection.creation.sql_for_many_to_many(model, style))
-
     # Handle references to tables that are from other apps
     # but don't exist physically.
     not_installed_models = set(pending_references.keys())
@@ -58,11 +55,8 @@
 
     return final_output
 
-def sql_delete(app, style):
+def sql_delete(app, style, connection):
     "Returns a list of the DROP TABLE SQL statements for the given app."
-    from django.db import connection, models
-    from django.db.backends.util import truncate_name
-    from django.contrib.contenttypes import generic
 
     # This should work even if a connection isn't available
     try:
@@ -82,7 +76,7 @@
     to_delete = set()
 
     references_to_delete = {}
-    app_models = models.get_models(app)
+    app_models = models.get_models(app, include_auto_created=True)
     for model in app_models:
         if cursor and connection.introspection.table_name_converter(model._meta.db_table) in table_names:
             # The table exists, so it needs to be dropped
@@ -97,13 +91,6 @@
         if connection.introspection.table_name_converter(model._meta.db_table) in table_names:
             output.extend(connection.creation.sql_destroy_model(model, references_to_delete, style))
 
-    # Output DROP TABLE statements for many-to-many tables.
-    for model in app_models:
-        opts = model._meta
-        for f in opts.local_many_to_many:
-            if cursor and connection.introspection.table_name_converter(f.m2m_db_table()) in table_names:
-                output.extend(connection.creation.sql_destroy_many_to_many(model, f, style))
-
     # Close database connection explicitly, in case this output is being piped
     # directly into a database client, to avoid locking issues.
     if cursor:
@@ -112,18 +99,17 @@
 
     return output[::-1] # Reverse it, to deal with table dependencies.
 
-def sql_reset(app, style):
+def sql_reset(app, style, connection):
     "Returns a list of the DROP TABLE SQL, then the CREATE TABLE SQL, for the given module."
-    return sql_delete(app, style) + sql_all(app, style)
+    return sql_delete(app, style, connection) + sql_all(app, style, connection)
 
-def sql_flush(style, only_django=False):
+def sql_flush(style, connection, only_django=False):
     """
     Returns a list of the SQL statements used to flush the database.
 
     If only_django is True, then only table names that have associated Django
     models and are in INSTALLED_APPS will be included.
     """
-    from django.db import connection
     if only_django:
         tables = connection.introspection.django_table_names(only_existing=True)
     else:
@@ -131,53 +117,49 @@
     statements = connection.ops.sql_flush(style, tables, connection.introspection.sequence_list())
     return statements
 
-def sql_custom(app, style):
+def sql_custom(app, style, connection):
     "Returns a list of the custom table modifying SQL statements for the given app."
-    from django.db.models import get_models
     output = []
 
     app_models = get_models(app)
     app_dir = os.path.normpath(os.path.join(os.path.dirname(app.__file__), 'sql'))
 
     for model in app_models:
-        output.extend(custom_sql_for_model(model, style))
+        output.extend(custom_sql_for_model(model, style, connection))
 
     return output
 
-def sql_indexes(app, style):
+def sql_indexes(app, style, connection):
     "Returns a list of the CREATE INDEX SQL statements for all models in the given app."
-    from django.db import connection, models
     output = []
     for model in models.get_models(app):
         output.extend(connection.creation.sql_indexes_for_model(model, style))
     return output
 
-def sql_all(app, style):
+def sql_all(app, style, connection):
     "Returns a list of CREATE TABLE SQL, initial-data inserts, and CREATE INDEX SQL for the given module."
-    return sql_create(app, style) + sql_custom(app, style) + sql_indexes(app, style)
+    return sql_create(app, style, connection) + sql_custom(app, style, connection) + sql_indexes(app, style, connection)
 
-def custom_sql_for_model(model, style):
-    from django.db import models
-    from django.conf import settings
-
+def custom_sql_for_model(model, style, connection):
     opts = model._meta
     app_dir = os.path.normpath(os.path.join(os.path.dirname(models.get_app(model._meta.app_label).__file__), 'sql'))
     output = []
 
     # Post-creation SQL should come before any initial SQL data is loaded.
-    # However, this should not be done for fields that are part of a a parent
-    # model (via model inheritance).
-    nm = opts.init_name_map()
-    post_sql_fields = [f for f in opts.local_fields if hasattr(f, 'post_create_sql')]
-    for f in post_sql_fields:
-        output.extend(f.post_create_sql(style, model._meta.db_table))
+    # However, this should not be done for models that are unmanaged or
+    # for fields that are part of a parent model (via model inheritance).
+    if opts.managed:
+        post_sql_fields = [f for f in opts.local_fields if hasattr(f, 'post_create_sql')]
+        for f in post_sql_fields:
+            output.extend(f.post_create_sql(style, model._meta.db_table))
 
     # Some backends can't execute more than one SQL statement at a time,
     # so split into separate statements.
     statements = re.compile(r";[ \t]*$", re.M)
 
     # Find custom SQL, if it's available.
-    sql_files = [os.path.join(app_dir, "%s.%s.sql" % (opts.object_name.lower(), settings.DATABASE_ENGINE)),
+    backend_name = connection.settings_dict['ENGINE'].split('.')[-1]
+    sql_files = [os.path.join(app_dir, "%s.%s.sql" % (opts.object_name.lower(), backend_name)),
                  os.path.join(app_dir, "%s.sql" % opts.object_name.lower())]
     for sql_file in sql_files:
         if os.path.exists(sql_file):
@@ -192,9 +174,7 @@
     return output
 
 
-def emit_post_sync_signal(created_models, verbosity, interactive):
-    from django.db import models
-    from django.dispatch import dispatcher
+def emit_post_sync_signal(created_models, verbosity, interactive, db):
     # Emit the post_sync signal for every application.
     for app in models.get_apps():
         app_name = app.__name__.split('.')[-2]
@@ -202,4 +182,4 @@
             print "Running post-sync handlers for application", app_name
         models.signals.post_syncdb.send(sender=app, app=app,
             created_models=created_models, verbosity=verbosity,
-            interactive=interactive)
+            interactive=interactive, db=db)
--- a/web/lib/django/core/management/validation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/management/validation.py	Tue May 25 02:43:45 2010 +0200
@@ -37,20 +37,39 @@
                 e.add(opts, '"%s": You can\'t use "id" as a field name, because each model automatically gets an "id" field if none of the fields have primary_key=True. You need to either remove/rename your "id" field or add primary_key=True to a field.' % f.name)
             if f.name.endswith('_'):
                 e.add(opts, '"%s": Field names cannot end with underscores, because this would lead to ambiguous queryset filters.' % f.name)
-            if isinstance(f, models.CharField) and f.max_length in (None, 0):
-                e.add(opts, '"%s": CharFields require a "max_length" attribute.' % f.name)
+            if isinstance(f, models.CharField):
+                try:
+                    max_length = int(f.max_length)
+                    if max_length <= 0:
+                        e.add(opts, '"%s": CharFields require a "max_length" attribute that is a positive integer.' % f.name)
+                except (ValueError, TypeError):
+                    e.add(opts, '"%s": CharFields require a "max_length" attribute that is a positive integer.' % f.name)
             if isinstance(f, models.DecimalField):
-                if f.decimal_places is None:
-                    e.add(opts, '"%s": DecimalFields require a "decimal_places" attribute.' % f.name)
-                if f.max_digits is None:
-                    e.add(opts, '"%s": DecimalFields require a "max_digits" attribute.' % f.name)
+                decimalp_msg ='"%s": DecimalFields require a "decimal_places" attribute that is a non-negative integer.'
+                try:
+                    decimal_places = int(f.decimal_places)
+                    if decimal_places < 0:
+                        e.add(opts, decimalp_msg % f.name)
+                except (ValueError, TypeError):
+                    e.add(opts, decimalp_msg % f.name)
+                mdigits_msg = '"%s": DecimalFields require a "max_digits" attribute that is a positive integer.'
+                try:
+                    max_digits = int(f.max_digits)
+                    if max_digits <= 0:
+                        e.add(opts,  mdigits_msg % f.name)
+                except (ValueError, TypeError):
+                    e.add(opts, mdigits_msg % f.name)
             if isinstance(f, models.FileField) and not f.upload_to:
                 e.add(opts, '"%s": FileFields require an "upload_to" attribute.' % f.name)
             if isinstance(f, models.ImageField):
+                # Try to import PIL in either of the two ways it can end up installed.
                 try:
                     from PIL import Image
                 except ImportError:
-                    e.add(opts, '"%s": To use ImageFields, you need to install the Python Imaging Library. Get it at http://www.pythonware.com/products/pil/ .' % f.name)
+                    try:
+                        import Image
+                    except ImportError:
+                        e.add(opts, '"%s": To use ImageFields, you need to install the Python Imaging Library. Get it at http://www.pythonware.com/products/pil/ .' % f.name)
             if isinstance(f, models.BooleanField) and getattr(f, 'null', False):
                 e.add(opts, '"%s": BooleanFields do not accept null values. Use a NullBooleanField instead.' % f.name)
             if f.choices:
@@ -58,7 +77,7 @@
                     e.add(opts, '"%s": "choices" should be iterable (e.g., a tuple or list).' % f.name)
                 else:
                     for c in f.choices:
-                        if not type(c) in (tuple, list) or len(c) != 2:
+                        if not isinstance(c, (list, tuple)) or len(c) != 2:
                             e.add(opts, '"%s": "choices" should be a sequence of two-tuples.' % f.name)
             if f.db_index not in (None, True, False):
                 e.add(opts, '"%s": "db_index" should be either None, True or False.' % f.name)
@@ -76,30 +95,35 @@
                 if isinstance(f.rel.to, (str, unicode)):
                     continue
 
+                # Make sure the related field specified by a ForeignKey is unique
+                if not f.rel.to._meta.get_field(f.rel.field_name).unique:
+                    e.add(opts, "Field '%s' under model '%s' must have a unique=True constraint." % (f.rel.field_name, f.rel.to.__name__))
+
                 rel_opts = f.rel.to._meta
                 rel_name = RelatedObject(f.rel.to, cls, f).get_accessor_name()
                 rel_query_name = f.related_query_name()
-                for r in rel_opts.fields:
-                    if r.name == rel_name:
-                        e.add(opts, "Accessor for field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
-                    if r.name == rel_query_name:
-                        e.add(opts, "Reverse query name for field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
-                for r in rel_opts.local_many_to_many:
-                    if r.name == rel_name:
-                        e.add(opts, "Accessor for field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
-                    if r.name == rel_query_name:
-                        e.add(opts, "Reverse query name for field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
-                for r in rel_opts.get_all_related_many_to_many_objects():
-                    if r.get_accessor_name() == rel_name:
-                        e.add(opts, "Accessor for field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
-                    if r.get_accessor_name() == rel_query_name:
-                        e.add(opts, "Reverse query name for field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
-                for r in rel_opts.get_all_related_objects():
-                    if r.field is not f:
+                if not f.rel.is_hidden():
+                    for r in rel_opts.fields:
+                        if r.name == rel_name:
+                            e.add(opts, "Accessor for field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
+                        if r.name == rel_query_name:
+                            e.add(opts, "Reverse query name for field '%s' clashes with field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
+                    for r in rel_opts.local_many_to_many:
+                        if r.name == rel_name:
+                            e.add(opts, "Accessor for field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
+                        if r.name == rel_query_name:
+                            e.add(opts, "Reverse query name for field '%s' clashes with m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.name, f.name))
+                    for r in rel_opts.get_all_related_many_to_many_objects():
                         if r.get_accessor_name() == rel_name:
-                            e.add(opts, "Accessor for field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
+                            e.add(opts, "Accessor for field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
                         if r.get_accessor_name() == rel_query_name:
-                            e.add(opts, "Reverse query name for field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
+                            e.add(opts, "Reverse query name for field '%s' clashes with related m2m field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
+                    for r in rel_opts.get_all_related_objects():
+                        if r.field is not f:
+                            if r.get_accessor_name() == rel_name:
+                                e.add(opts, "Accessor for field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
+                            if r.get_accessor_name() == rel_query_name:
+                                e.add(opts, "Reverse query name for field '%s' clashes with related field '%s.%s'. Add a related_name argument to the definition for '%s'." % (f.name, rel_opts.object_name, r.get_accessor_name(), f.name))
 
         seen_intermediary_signatures = []
         for i, f in enumerate(opts.local_many_to_many):
@@ -117,48 +141,81 @@
             if f.unique:
                 e.add(opts, "ManyToManyFields cannot be unique.  Remove the unique argument on '%s'." % f.name)
 
-            if getattr(f.rel, 'through', None) is not None:
-                if hasattr(f.rel, 'through_model'):
-                    from_model, to_model = cls, f.rel.to
-                    if from_model == to_model and f.rel.symmetrical:
-                        e.add(opts, "Many-to-many fields with intermediate tables cannot be symmetrical.")
-                    seen_from, seen_to, seen_self = False, False, 0
-                    for inter_field in f.rel.through_model._meta.fields:
-                        rel_to = getattr(inter_field.rel, 'to', None)
-                        if from_model == to_model: # relation to self
-                            if rel_to == from_model:
-                                seen_self += 1
-                            if seen_self > 2:
-                                e.add(opts, "Intermediary model %s has more than two foreign keys to %s, which is ambiguous and is not permitted." % (f.rel.through_model._meta.object_name, from_model._meta.object_name))
-                        else:
-                            if rel_to == from_model:
-                                if seen_from:
-                                    e.add(opts, "Intermediary model %s has more than one foreign key to %s, which is ambiguous and is not permitted." % (f.rel.through_model._meta.object_name, from_model._meta.object_name))
-                                else:
-                                    seen_from = True
-                            elif rel_to == to_model:
-                                if seen_to:
-                                    e.add(opts, "Intermediary model %s has more than one foreign key to %s, which is ambiguous and is not permitted." % (f.rel.through_model._meta.object_name, rel_to._meta.object_name))
-                                else:
-                                    seen_to = True
-                    if f.rel.through_model not in models.get_models():
-                        e.add(opts, "'%s' specifies an m2m relation through model %s, which has not been installed." % (f.name, f.rel.through))
-                    signature = (f.rel.to, cls, f.rel.through_model)
-                    if signature in seen_intermediary_signatures:
-                        e.add(opts, "The model %s has two manually-defined m2m relations through the model %s, which is not permitted. Please consider using an extra field on your intermediary model instead." % (cls._meta.object_name, f.rel.through_model._meta.object_name))
+            if f.rel.through is not None and not isinstance(f.rel.through, basestring):
+                from_model, to_model = cls, f.rel.to
+                if from_model == to_model and f.rel.symmetrical and not f.rel.through._meta.auto_created:
+                    e.add(opts, "Many-to-many fields with intermediate tables cannot be symmetrical.")
+                seen_from, seen_to, seen_self = False, False, 0
+                for inter_field in f.rel.through._meta.fields:
+                    rel_to = getattr(inter_field.rel, 'to', None)
+                    if from_model == to_model: # relation to self
+                        if rel_to == from_model:
+                            seen_self += 1
+                        if seen_self > 2:
+                            e.add(opts, "Intermediary model %s has more than "
+                                "two foreign keys to %s, which is ambiguous "
+                                "and is not permitted." % (
+                                    f.rel.through._meta.object_name,
+                                    from_model._meta.object_name
+                                )
+                            )
                     else:
-                        seen_intermediary_signatures.append(signature)
+                        if rel_to == from_model:
+                            if seen_from:
+                                e.add(opts, "Intermediary model %s has more "
+                                    "than one foreign key to %s, which is "
+                                    "ambiguous and is not permitted." % (
+                                        f.rel.through._meta.object_name,
+                                         from_model._meta.object_name
+                                     )
+                                 )
+                            else:
+                                seen_from = True
+                        elif rel_to == to_model:
+                            if seen_to:
+                                e.add(opts, "Intermediary model %s has more "
+                                    "than one foreign key to %s, which is "
+                                    "ambiguous and is not permitted." % (
+                                        f.rel.through._meta.object_name,
+                                        rel_to._meta.object_name
+                                    )
+                                )
+                            else:
+                                seen_to = True
+                if f.rel.through not in models.get_models(include_auto_created=True):
+                    e.add(opts, "'%s' specifies an m2m relation through model "
+                        "%s, which has not been installed." % (f.name, f.rel.through)
+                    )
+                signature = (f.rel.to, cls, f.rel.through)
+                if signature in seen_intermediary_signatures:
+                    e.add(opts, "The model %s has two manually-defined m2m "
+                        "relations through the model %s, which is not "
+                        "permitted. Please consider using an extra field on "
+                        "your intermediary model instead." % (
+                            cls._meta.object_name,
+                            f.rel.through._meta.object_name
+                        )
+                    )
+                else:
+                    seen_intermediary_signatures.append(signature)
+                if not f.rel.through._meta.auto_created:
                     seen_related_fk, seen_this_fk = False, False
-                    for field in f.rel.through_model._meta.fields:
+                    for field in f.rel.through._meta.fields:
                         if field.rel:
                             if not seen_related_fk and field.rel.to == f.rel.to:
                                 seen_related_fk = True
                             elif field.rel.to == cls:
                                 seen_this_fk = True
                     if not seen_related_fk or not seen_this_fk:
-                        e.add(opts, "'%s' has a manually-defined m2m relation through model %s, which does not have foreign keys to %s and %s" % (f.name, f.rel.through, f.rel.to._meta.object_name, cls._meta.object_name))
-                else:
-                    e.add(opts, "'%s' specifies an m2m relation through model %s, which has not been installed" % (f.name, f.rel.through))
+                        e.add(opts, "'%s' is a manually-defined m2m relation "
+                            "through model %s, which does not have foreign keys "
+                            "to %s and %s" % (f.name, f.rel.through._meta.object_name,
+                                f.rel.to._meta.object_name, cls._meta.object_name)
+                        )
+            elif isinstance(f.rel.through, basestring):
+                e.add(opts, "'%s' specifies an m2m relation through model %s, "
+                    "which has not been installed" % (f.name, f.rel.through)
+                )
 
             rel_opts = f.rel.to._meta
             rel_name = RelatedObject(f.rel.to, cls, f).get_accessor_name()
--- a/web/lib/django/core/serializers/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/serializers/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -36,14 +36,14 @@
 _serializers = {}
 
 def register_serializer(format, serializer_module, serializers=None):
-    """"Register a new serializer. 
-    
+    """"Register a new serializer.
+
     ``serializer_module`` should be the fully qualified module name
     for the serializer.
-    
+
     If ``serializers`` is provided, the registration will be added
     to the provided dictionary.
-    
+
     If ``serializers`` is not provided, the registration will be made
     directly into the global register of serializers. Adding serializers
     directly is not a thread-safe operation.
@@ -53,7 +53,7 @@
         _serializers[format] = module
     else:
         serializers[format] = module
-        
+
 def unregister_serializer(format):
     "Unregister a given serializer. This is not a thread-safe operation."
     del _serializers[format]
@@ -87,7 +87,7 @@
     s.serialize(queryset, **options)
     return s.getvalue()
 
-def deserialize(format, stream_or_string):
+def deserialize(format, stream_or_string, **options):
     """
     Deserialize a stream or a string. Returns an iterator that yields ``(obj,
     m2m_relation_dict)``, where ``obj`` is a instantiated -- but *unsaved* --
@@ -95,7 +95,7 @@
     list_of_related_objects}``.
     """
     d = get_deserializer(format)
-    return d(stream_or_string)
+    return d(stream_or_string, **options)
 
 def _load_serializers():
     """
--- a/web/lib/django/core/serializers/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/serializers/base.py	Tue May 25 02:43:45 2010 +0200
@@ -33,6 +33,7 @@
 
         self.stream = options.get("stream", StringIO())
         self.selected_fields = options.get("fields")
+        self.use_natural_keys = options.get("use_natural_keys", False)
 
         self.start_serialization()
         for obj in queryset:
@@ -152,15 +153,16 @@
         self.m2m_data = m2m_data
 
     def __repr__(self):
-        return "<DeserializedObject: %s>" % smart_str(self.object)
+        return "<DeserializedObject: %s.%s(pk=%s)>" % (
+            self.object._meta.app_label, self.object._meta.object_name, self.object.pk)
 
-    def save(self, save_m2m=True):
+    def save(self, save_m2m=True, using=None):
         # Call save on the Model baseclass directly. This bypasses any
         # model-defined save. The save is also forced to be raw.
         # This ensures that the data that is deserialized is literally
         # what came from the file, not post-processed by pre_save/save
         # methods.
-        models.Model.save_base(self.object, raw=True)
+        models.Model.save_base(self.object, using=using, raw=True)
         if self.m2m_data and save_m2m:
             for accessor_name, object_list in self.m2m_data.items():
                 setattr(self.object, accessor_name, object_list)
--- a/web/lib/django/core/serializers/json.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/serializers/json.py	Tue May 25 02:43:45 2010 +0200
@@ -3,6 +3,7 @@
 """
 
 import datetime
+import decimal
 from StringIO import StringIO
 
 from django.core.serializers.python import Serializer as PythonSerializer
@@ -10,11 +11,6 @@
 from django.utils import datetime_safe
 from django.utils import simplejson
 
-try:
-    import decimal
-except ImportError:
-    from django.utils import _decimal as decimal    # Python 2.3 fallback
-
 class Serializer(PythonSerializer):
     """
     Convert a queryset to JSON.
@@ -24,6 +20,7 @@
     def end_serialization(self):
         self.options.pop('stream', None)
         self.options.pop('fields', None)
+        self.options.pop('use_natural_keys', None)
         simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)
 
     def getvalue(self):
@@ -38,7 +35,7 @@
         stream = StringIO(stream_or_string)
     else:
         stream = stream_or_string
-    for obj in PythonDeserializer(simplejson.load(stream)):
+    for obj in PythonDeserializer(simplejson.load(stream), **options):
         yield obj
 
 class DjangoJSONEncoder(simplejson.JSONEncoder):
--- a/web/lib/django/core/serializers/python.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/serializers/python.py	Tue May 25 02:43:45 2010 +0200
@@ -6,7 +6,7 @@
 
 from django.conf import settings
 from django.core.serializers import base
-from django.db import models
+from django.db import models, DEFAULT_DB_ALIAS
 from django.utils.encoding import smart_unicode, is_protected_type
 
 class Serializer(base.Serializer):
@@ -47,17 +47,24 @@
     def handle_fk_field(self, obj, field):
         related = getattr(obj, field.name)
         if related is not None:
-            if field.rel.field_name == related._meta.pk.name:
-                # Related to remote object via primary key
-                related = related._get_pk_val()
+            if self.use_natural_keys and hasattr(related, 'natural_key'):
+                related = related.natural_key()
             else:
-                # Related to remote object via other field
-                related = getattr(related, field.rel.field_name)
-        self._current[field.name] = smart_unicode(related, strings_only=True)
+                if field.rel.field_name == related._meta.pk.name:
+                    # Related to remote object via primary key
+                    related = related._get_pk_val()
+                else:
+                    # Related to remote object via other field
+                    related = smart_unicode(getattr(related, field.rel.field_name), strings_only=True)
+        self._current[field.name] = related
 
     def handle_m2m_field(self, obj, field):
-        if field.creates_table:
-            self._current[field.name] = [smart_unicode(related._get_pk_val(), strings_only=True)
+        if field.rel.through._meta.auto_created:
+            if self.use_natural_keys and hasattr(field.rel.to, 'natural_key'):
+                m2m_value = lambda value: value.natural_key()
+            else:
+                m2m_value = lambda value: smart_unicode(value._get_pk_val(), strings_only=True)
+            self._current[field.name] = [m2m_value(related)
                                for related in getattr(obj, field.name).iterator()]
 
     def getvalue(self):
@@ -70,6 +77,7 @@
     It's expected that you pass the Python objects themselves (instead of a
     stream or a string) to the constructor
     """
+    db = options.pop('using', DEFAULT_DB_ALIAS)
     models.get_apps()
     for d in object_list:
         # Look up the model and starting build a dict of data for it.
@@ -86,13 +94,32 @@
 
             # Handle M2M relations
             if field.rel and isinstance(field.rel, models.ManyToManyRel):
-                m2m_convert = field.rel.to._meta.pk.to_python
-                m2m_data[field.name] = [m2m_convert(smart_unicode(pk)) for pk in field_value]
+                if hasattr(field.rel.to._default_manager, 'get_by_natural_key'):
+                    def m2m_convert(value):
+                        if hasattr(value, '__iter__'):
+                            return field.rel.to._default_manager.db_manager(db).get_by_natural_key(*value).pk
+                        else:
+                            return smart_unicode(field.rel.to._meta.pk.to_python(value))
+                else:
+                    m2m_convert = lambda v: smart_unicode(field.rel.to._meta.pk.to_python(v))
+                m2m_data[field.name] = [m2m_convert(pk) for pk in field_value]
 
             # Handle FK fields
             elif field.rel and isinstance(field.rel, models.ManyToOneRel):
                 if field_value is not None:
-                    data[field.attname] = field.rel.to._meta.get_field(field.rel.field_name).to_python(field_value)
+                    if hasattr(field.rel.to._default_manager, 'get_by_natural_key'):
+                        if hasattr(field_value, '__iter__'):
+                            obj = field.rel.to._default_manager.db_manager(db).get_by_natural_key(*field_value)
+                            value = getattr(obj, field.rel.field_name)
+                            # If this is a natural foreign key to an object that
+                            # has a FK/O2O as the foreign key, use the FK value
+                            if field.rel.to._meta.pk.rel:
+                                value = value.pk
+                        else:
+                            value = field.rel.to._meta.get_field(field.rel.field_name).to_python(field_value)
+                        data[field.attname] = value
+                    else:
+                        data[field.attname] = field.rel.to._meta.get_field(field.rel.field_name).to_python(field_value)
                 else:
                     data[field.attname] = None
 
--- a/web/lib/django/core/serializers/pyyaml.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/serializers/pyyaml.py	Tue May 25 02:43:45 2010 +0200
@@ -5,13 +5,9 @@
 """
 
 from StringIO import StringIO
+import decimal
 import yaml
 
-try:
-    import decimal
-except ImportError:
-    from django.utils import _decimal as decimal # Python 2.3 fallback
-
 from django.db import models
 from django.core.serializers.python import Serializer as PythonSerializer
 from django.core.serializers.python import Deserializer as PythonDeserializer
@@ -26,9 +22,9 @@
     """
     Convert a queryset to YAML.
     """
-    
+
     internal_use_only = False
-    
+
     def handle_field(self, obj, field):
         # A nasty special case: base YAML doesn't support serialization of time
         # types (as opposed to dates or datetimes, which it does support). Since
@@ -40,10 +36,11 @@
             self._current[field.name] = str(getattr(obj, field.name))
         else:
             super(Serializer, self).handle_field(obj, field)
-    
+
     def end_serialization(self):
         self.options.pop('stream', None)
         self.options.pop('fields', None)
+        self.options.pop('use_natural_keys', None)
         yaml.dump(self.objects, self.stream, Dumper=DjangoSafeDumper, **self.options)
 
     def getvalue(self):
@@ -57,6 +54,6 @@
         stream = StringIO(stream_or_string)
     else:
         stream = stream_or_string
-    for obj in PythonDeserializer(yaml.load(stream)):
+    for obj in PythonDeserializer(yaml.load(stream), **options):
         yield obj
 
--- a/web/lib/django/core/serializers/xml_serializer.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/serializers/xml_serializer.py	Tue May 25 02:43:45 2010 +0200
@@ -4,7 +4,7 @@
 
 from django.conf import settings
 from django.core.serializers import base
-from django.db import models
+from django.db import models, DEFAULT_DB_ALIAS
 from django.utils.xmlutils import SimplerXMLGenerator
 from django.utils.encoding import smart_unicode
 from xml.dom import pulldom
@@ -81,13 +81,22 @@
         self._start_relational_field(field)
         related = getattr(obj, field.name)
         if related is not None:
-            if field.rel.field_name == related._meta.pk.name:
-                # Related to remote object via primary key
-                related = related._get_pk_val()
+            if self.use_natural_keys and hasattr(related, 'natural_key'):
+                # If related object has a natural key, use it
+                related = related.natural_key()
+                # Iterable natural keys are rolled out as subelements
+                for key_value in related:
+                    self.xml.startElement("natural", {})
+                    self.xml.characters(smart_unicode(key_value))
+                    self.xml.endElement("natural")
             else:
-                # Related to remote object via other field
-                related = getattr(related, field.rel.field_name)
-            self.xml.characters(smart_unicode(related))
+                if field.rel.field_name == related._meta.pk.name:
+                    # Related to remote object via primary key
+                    related = related._get_pk_val()
+                else:
+                    # Related to remote object via other field
+                    related = getattr(related, field.rel.field_name)
+                self.xml.characters(smart_unicode(related))
         else:
             self.xml.addQuickElement("None")
         self.xml.endElement("field")
@@ -98,10 +107,27 @@
         serialized as references to the object's PK (i.e. the related *data*
         is not dumped, just the relation).
         """
-        if field.creates_table:
+        if field.rel.through._meta.auto_created:
             self._start_relational_field(field)
+            if self.use_natural_keys and hasattr(field.rel.to, 'natural_key'):
+                # If the objects in the m2m have a natural key, use it
+                def handle_m2m(value):
+                    natural = value.natural_key()
+                    # Iterable natural keys are rolled out as subelements
+                    self.xml.startElement("object", {})
+                    for key_value in natural:
+                        self.xml.startElement("natural", {})
+                        self.xml.characters(smart_unicode(key_value))
+                        self.xml.endElement("natural")
+                    self.xml.endElement("object")
+            else:
+                def handle_m2m(value):
+                    self.xml.addQuickElement("object", attrs={
+                        'pk' : smart_unicode(value._get_pk_val())
+                    })
             for relobj in getattr(obj, field.name).iterator():
-                self.xml.addQuickElement("object", attrs={"pk" : smart_unicode(relobj._get_pk_val())})
+                handle_m2m(relobj)
+
             self.xml.endElement("field")
 
     def _start_relational_field(self, field):
@@ -123,6 +149,7 @@
     def __init__(self, stream_or_string, **options):
         super(Deserializer, self).__init__(stream_or_string, **options)
         self.event_stream = pulldom.parse(self.stream)
+        self.db = options.pop('using', DEFAULT_DB_ALIAS)
 
     def next(self):
         for event, node in self.event_stream:
@@ -187,16 +214,44 @@
         if node.getElementsByTagName('None'):
             return None
         else:
-            return field.rel.to._meta.get_field(field.rel.field_name).to_python(
-                       getInnerText(node).strip())
+            if hasattr(field.rel.to._default_manager, 'get_by_natural_key'):
+                keys = node.getElementsByTagName('natural')
+                if keys:
+                    # If there are 'natural' subelements, it must be a natural key
+                    field_value = [getInnerText(k).strip() for k in keys]
+                    obj = field.rel.to._default_manager.db_manager(self.db).get_by_natural_key(*field_value)
+                    obj_pk = getattr(obj, field.rel.field_name)
+                    # If this is a natural foreign key to an object that
+                    # has a FK/O2O as the foreign key, use the FK value
+                    if field.rel.to._meta.pk.rel:
+                        obj_pk = obj_pk.pk
+                else:
+                    # Otherwise, treat like a normal PK
+                    field_value = getInnerText(node).strip()
+                    obj_pk = field.rel.to._meta.get_field(field.rel.field_name).to_python(field_value)
+                return obj_pk
+            else:
+                field_value = getInnerText(node).strip()
+                return field.rel.to._meta.get_field(field.rel.field_name).to_python(field_value)
 
     def _handle_m2m_field_node(self, node, field):
         """
         Handle a <field> node for a ManyToManyField.
         """
-        return [field.rel.to._meta.pk.to_python(
-                    c.getAttribute("pk"))
-                    for c in node.getElementsByTagName("object")]
+        if hasattr(field.rel.to._default_manager, 'get_by_natural_key'):
+            def m2m_convert(n):
+                keys = n.getElementsByTagName('natural')
+                if keys:
+                    # If there are 'natural' subelements, it must be a natural key
+                    field_value = [getInnerText(k).strip() for k in keys]
+                    obj_pk = field.rel.to._default_manager.db_manager(self.db).get_by_natural_key(*field_value).pk
+                else:
+                    # Otherwise, treat like a normal PK value.
+                    obj_pk = field.rel.to._meta.pk.to_python(n.getAttribute('pk'))
+                return obj_pk
+        else:
+            m2m_convert = lambda n: field.rel.to._meta.pk.to_python(n.getAttribute('pk'))
+        return [m2m_convert(c) for c in node.getElementsByTagName("object")]
 
     def _get_model_from_node(self, node, attr):
         """
@@ -233,4 +288,3 @@
         else:
            pass
     return u"".join(inner_text)
-
--- a/web/lib/django/core/servers/basehttp.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/servers/basehttp.py	Tue May 25 02:43:45 2010 +0200
@@ -15,6 +15,7 @@
 import sys
 import urllib
 
+from django.core.management.color import color_style
 from django.utils.http import http_date
 from django.utils._os import safe_join
 
@@ -529,7 +530,7 @@
         try:
             HTTPServer.server_bind(self)
         except Exception, e:
-            raise WSGIServerException, e
+            raise WSGIServerException(e)
         self.setup_environ()
 
     def setup_environ(self):
@@ -557,6 +558,7 @@
         # We set self.path to avoid crashes in log_message() on unsupported
         # requests (like "OPTIONS").
         self.path = ''
+        self.style = color_style()
         BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
 
     def get_environ(self):
@@ -608,7 +610,28 @@
         # Don't bother logging requests for admin images or the favicon.
         if self.path.startswith(self.admin_media_prefix) or self.path == '/favicon.ico':
             return
-        sys.stderr.write("[%s] %s\n" % (self.log_date_time_string(), format % args))
+
+        msg = "[%s] %s\n" % (self.log_date_time_string(), format % args)
+
+        # Utilize terminal colors, if available
+        if args[1][0] == '2':
+            # Put 2XX first, since it should be the common case
+            msg = self.style.HTTP_SUCCESS(msg)
+        elif args[1][0] == '1':
+            msg = self.style.HTTP_INFO(msg)
+        elif args[1] == '304':
+            msg = self.style.HTTP_NOT_MODIFIED(msg)
+        elif args[1][0] == '3':
+            msg = self.style.HTTP_REDIRECT(msg)
+        elif args[1] == '404':
+            msg = self.style.HTTP_NOT_FOUND(msg)
+        elif args[1][0] == '4':
+            msg = self.style.HTTP_BAD_REQUEST(msg)
+        else:
+            # Any 5XX, or any other response
+            msg = self.style.HTTP_SERVER_ERROR(msg)
+
+        sys.stderr.write(msg)
 
 class AdminMediaHandler(object):
     """
--- a/web/lib/django/core/urlresolvers.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/urlresolvers.py	Tue May 25 02:43:45 2010 +0200
@@ -10,6 +10,7 @@
 import re
 
 from django.http import Http404
+from django.conf import settings
 from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
 from django.utils.datastructures import MultiValueDict
 from django.utils.encoding import iri_to_uri, force_unicode, smart_str
@@ -18,12 +19,6 @@
 from django.utils.regex_helper import normalize
 from django.utils.thread_support import currentThread
 
-try:
-    reversed
-except NameError:
-    from django.utils.itercompat import reversed     # Python 2.3 fallback
-    from sets import Set as set
-
 _resolver_cache = {} # Maps URLconf modules to RegexURLResolver instances.
 _callable_cache = {} # Maps view and url pattern names to their view functions.
 
@@ -32,6 +27,9 @@
 # be empty.
 _prefixes = {}
 
+# Overridden URLconfs for each thread are stored here.
+_urlconfs = {}
+
 class Resolver404(Http404):
     pass
 
@@ -131,10 +129,10 @@
             self._callback = get_callable(self._callback_str)
         except ImportError, e:
             mod_name, _ = get_mod_func(self._callback_str)
-            raise ViewDoesNotExist, "Could not import %s. Error was: %s" % (mod_name, str(e))
+            raise ViewDoesNotExist("Could not import %s. Error was: %s" % (mod_name, str(e)))
         except AttributeError, e:
             mod_name, func_name = get_mod_func(self._callback_str)
-            raise ViewDoesNotExist, "Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e))
+            raise ViewDoesNotExist("Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e)))
         return self._callback
     callback = property(_get_callback)
 
@@ -230,8 +228,8 @@
                             sub_match_dict[smart_str(k)] = v
                         return sub_match[0], sub_match[1], sub_match_dict
                     tried.append(pattern.regex.pattern)
-            raise Resolver404, {'tried': tried, 'path': new_path}
-        raise Resolver404, {'path' : path}
+            raise Resolver404({'tried': tried, 'path': new_path})
+        raise Resolver404({'path' : path})
 
     def _get_urlconf_module(self):
         try:
@@ -246,18 +244,16 @@
         try:
             iter(patterns)
         except TypeError:
-            raise ImproperlyConfigured("The included urlconf %s doesn't have any "
-                "patterns in it" % self.urlconf_name)
+            raise ImproperlyConfigured("The included urlconf %s doesn't have any patterns in it" % self.urlconf_name)
         return patterns
     url_patterns = property(_get_url_patterns)
 
     def _resolve_special(self, view_type):
         callback = getattr(self.urlconf_module, 'handler%s' % view_type)
-        mod_name, func_name = get_mod_func(callback)
         try:
-            return getattr(import_module(mod_name), func_name), {}
+            return get_callable(callback), {}
         except (ImportError, AttributeError), e:
-            raise ViewDoesNotExist, "Tried %s. Error was: %s" % (callback, str(e))
+            raise ViewDoesNotExist("Tried %s. Error was: %s" % (callback, str(e)))
 
     def resolve404(self):
         return self._resolve_special('404')
@@ -300,9 +296,13 @@
                 "arguments '%s' not found." % (lookup_view_s, args, kwargs))
 
 def resolve(path, urlconf=None):
+    if urlconf is None:
+        urlconf = get_urlconf()
     return get_resolver(urlconf).resolve(path)
 
 def reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None):
+    if urlconf is None:
+        urlconf = get_urlconf()
     resolver = get_resolver(urlconf)
     args = args or []
     kwargs = kwargs or {}
@@ -371,3 +371,25 @@
     """
     return _prefixes.get(currentThread(), u'/')
 
+def set_urlconf(urlconf_name):
+    """
+    Sets the URLconf for the current thread (overriding the default one in
+    settings). Set to None to revert back to the default.
+    """
+    thread = currentThread()
+    if urlconf_name:
+        _urlconfs[thread] = urlconf_name
+    else:
+        # faster than wrapping in a try/except
+        if thread in _urlconfs:
+            del _urlconfs[thread]
+
+def get_urlconf(default=None):
+    """
+    Returns the root URLconf to use for the current thread if it has been
+    changed from the default one.
+    """
+    thread = currentThread()
+    if thread in _urlconfs:
+        return _urlconfs[thread]
+    return default
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/core/validators.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,172 @@
+import re
+import urlparse
+
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+from django.utils.encoding import smart_unicode
+
+# These values, if given to validate(), will trigger the self.required check.
+EMPTY_VALUES = (None, '', [], (), {})
+
+try:
+    from django.conf import settings
+    URL_VALIDATOR_USER_AGENT = settings.URL_VALIDATOR_USER_AGENT
+except ImportError:
+    # It's OK if Django settings aren't configured.
+    URL_VALIDATOR_USER_AGENT = 'Django (http://www.djangoproject.com/)'
+
+class RegexValidator(object):
+    regex = ''
+    message = _(u'Enter a valid value.')
+    code = 'invalid'
+
+    def __init__(self, regex=None, message=None, code=None):
+        if regex is not None:
+            self.regex = regex
+        if message is not None:
+            self.message = message
+        if code is not None:
+            self.code = code
+
+        if isinstance(self.regex, basestring):
+            self.regex = re.compile(regex)
+
+    def __call__(self, value):
+        """
+        Validates that the input matches the regular expression.
+        """
+        if not self.regex.search(smart_unicode(value)):
+            raise ValidationError(self.message, code=self.code)
+
+class URLValidator(RegexValidator):
+    regex = re.compile(
+        r'^https?://' # http:// or https://
+        r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' #domain...
+        r'localhost|' #localhost...
+        r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
+        r'(?::\d+)?' # optional port
+        r'(?:/?|[/?]\S+)$', re.IGNORECASE)
+
+    def __init__(self, verify_exists=False, validator_user_agent=URL_VALIDATOR_USER_AGENT):
+        super(URLValidator, self).__init__()
+        self.verify_exists = verify_exists
+        self.user_agent = validator_user_agent
+
+    def __call__(self, value):
+        try:
+            super(URLValidator, self).__call__(value)
+        except ValidationError, e:
+            # Trivial case failed. Try for possible IDN domain
+            if value:
+                value = smart_unicode(value)
+                scheme, netloc, path, query, fragment = urlparse.urlsplit(value)
+                try:
+                    netloc = netloc.encode('idna') # IDN -> ACE
+                except UnicodeError: # invalid domain part
+                    raise e
+                url = urlparse.urlunsplit((scheme, netloc, path, query, fragment))
+                super(URLValidator, self).__call__(url)
+            else:
+                raise
+        else:
+            url = value
+
+        if self.verify_exists:
+            import urllib2
+            headers = {
+                "Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
+                "Accept-Language": "en-us,en;q=0.5",
+                "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
+                "Connection": "close",
+                "User-Agent": self.user_agent,
+            }
+            try:
+                req = urllib2.Request(url, None, headers)
+                u = urllib2.urlopen(req)
+            except ValueError:
+                raise ValidationError(_(u'Enter a valid URL.'), code='invalid')
+            except: # urllib2.URLError, httplib.InvalidURL, etc.
+                raise ValidationError(_(u'This URL appears to be a broken link.'), code='invalid_link')
+
+
+def validate_integer(value):
+    try:
+        int(value)
+    except (ValueError, TypeError), e:
+        raise ValidationError('')
+
+class EmailValidator(RegexValidator):
+
+    def __call__(self, value):
+        try:
+            super(EmailValidator, self).__call__(value)
+        except ValidationError, e:
+            # Trivial case failed. Try for possible IDN domain-part
+            if value and u'@' in value:
+                parts = value.split(u'@')
+                domain_part = parts[-1]
+                try:
+                    parts[-1] = parts[-1].encode('idna')
+                except UnicodeError:
+                    raise e
+                super(EmailValidator, self).__call__(u'@'.join(parts))
+            else:
+                raise
+
+email_re = re.compile(
+    r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*"  # dot-atom
+    r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string
+    r')@(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?$', re.IGNORECASE)  # domain
+validate_email = EmailValidator(email_re, _(u'Enter a valid e-mail address.'), 'invalid')
+
+slug_re = re.compile(r'^[-\w]+$')
+validate_slug = RegexValidator(slug_re, _(u"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."), 'invalid')
+
+ipv4_re = re.compile(r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$')
+validate_ipv4_address = RegexValidator(ipv4_re, _(u'Enter a valid IPv4 address.'), 'invalid')
+
+comma_separated_int_list_re = re.compile('^[\d,]+$')
+validate_comma_separated_integer_list = RegexValidator(comma_separated_int_list_re, _(u'Enter only digits separated by commas.'), 'invalid')
+
+
+class BaseValidator(object):
+    compare = lambda self, a, b: a is not b
+    clean   = lambda self, x: x
+    message = _(u'Ensure this value is %(limit_value)s (it is %(show_value)s).')
+    code = 'limit_value'
+
+    def __init__(self, limit_value):
+        self.limit_value = limit_value
+
+    def __call__(self, value):
+        cleaned = self.clean(value)
+        params = {'limit_value': self.limit_value, 'show_value': cleaned}
+        if self.compare(cleaned, self.limit_value):
+            raise ValidationError(
+                self.message % params,
+                code=self.code,
+                params=params,
+            )
+
+class MaxValueValidator(BaseValidator):
+    compare = lambda self, a, b: a > b
+    message = _(u'Ensure this value is less than or equal to %(limit_value)s.')
+    code = 'max_value'
+
+class MinValueValidator(BaseValidator):
+    compare = lambda self, a, b: a < b
+    message = _(u'Ensure this value is greater than or equal to %(limit_value)s.')
+    code = 'min_value'
+
+class MinLengthValidator(BaseValidator):
+    compare = lambda self, a, b: a < b
+    clean   = lambda self, x: len(x)
+    message = _(u'Ensure this value has at least %(limit_value)d characters (it has %(show_value)d).')
+    code = 'min_length'
+
+class MaxLengthValidator(BaseValidator):
+    compare = lambda self, a, b: a > b
+    clean   = lambda self, x: len(x)
+    message = _(u'Ensure this value has at most %(limit_value)d characters (it has %(show_value)d).')
+    code = 'max_length'
+
--- a/web/lib/django/core/xheaders.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/core/xheaders.py	Tue May 25 02:43:45 2010 +0200
@@ -18,7 +18,7 @@
     """
     from django.conf import settings
     if (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS
-            or (hasattr(request, 'user') and request.user.is_authenticated()
+            or (hasattr(request, 'user') and request.user.is_active
                 and request.user.is_staff)):
         response['X-Object-Type'] = "%s.%s" % (model._meta.app_label, model._meta.object_name.lower())
         response['X-Object-Id'] = str(object_id)
--- a/web/lib/django/db/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,44 +1,67 @@
-import os
 from django.conf import settings
 from django.core import signals
 from django.core.exceptions import ImproperlyConfigured
+from django.db.utils import ConnectionHandler, ConnectionRouter, load_backend, DEFAULT_DB_ALIAS, \
+                            DatabaseError, IntegrityError
 from django.utils.functional import curry
-from django.utils.importlib import import_module
+
+__all__ = ('backend', 'connection', 'connections', 'router', 'DatabaseError',
+    'IntegrityError', 'DEFAULT_DB_ALIAS')
+
 
-__all__ = ('backend', 'connection', 'DatabaseError', 'IntegrityError')
+# For backwards compatibility - Port any old database settings over to
+# the new values.
+if not settings.DATABASES:
+    import warnings
+    warnings.warn(
+        "settings.DATABASE_* is deprecated; use settings.DATABASES instead.",
+        PendingDeprecationWarning
+    )
 
-if not settings.DATABASE_ENGINE:
-    settings.DATABASE_ENGINE = 'dummy'
+    settings.DATABASES[DEFAULT_DB_ALIAS] = {
+        'ENGINE': settings.DATABASE_ENGINE,
+        'HOST': settings.DATABASE_HOST,
+        'NAME': settings.DATABASE_NAME,
+        'OPTIONS': settings.DATABASE_OPTIONS,
+        'PASSWORD': settings.DATABASE_PASSWORD,
+        'PORT': settings.DATABASE_PORT,
+        'USER': settings.DATABASE_USER,
+        'TEST_CHARSET': settings.TEST_DATABASE_CHARSET,
+        'TEST_COLLATION': settings.TEST_DATABASE_COLLATION,
+        'TEST_NAME': settings.TEST_DATABASE_NAME,
+    }
 
-def load_backend(backend_name):
-    try:
-        # Most of the time, the database backend will be one of the official
-        # backends that ships with Django, so look there first.
-        return import_module('.base', 'django.db.backends.%s' % backend_name)
-    except ImportError, e:
-        # If the import failed, we might be looking for a database backend
-        # distributed external to Django. So we'll try that next.
-        try:
-            return import_module('.base', backend_name)
-        except ImportError, e_user:
-            # The database backend wasn't found. Display a helpful error message
-            # listing all possible (built-in) database backends.
-            backend_dir = os.path.join(__path__[0], 'backends')
-            try:
-                available_backends = [f for f in os.listdir(backend_dir)
-                        if os.path.isdir(os.path.join(backend_dir, f))
-                        and not f.startswith('.')]
-            except EnvironmentError:
-                available_backends = []
-            available_backends.sort()
-            if backend_name not in available_backends:
-                error_msg = "%r isn't an available database backend. Available options are: %s\nError was: %s" % \
-                    (backend_name, ", ".join(map(repr, available_backends)), e_user)
-                raise ImproperlyConfigured(error_msg)
+if DEFAULT_DB_ALIAS not in settings.DATABASES:
+    raise ImproperlyConfigured("You must default a '%s' database" % DEFAULT_DB_ALIAS)
+
+for alias, database in settings.DATABASES.items():
+    if database['ENGINE'] in ("postgresql", "postgresql_psycopg2", "sqlite3", "mysql", "oracle"):
+        import warnings
+        if 'django.contrib.gis' in settings.INSTALLED_APPS:
+            warnings.warn(
+                "django.contrib.gis is now implemented as a full database backend. "
+                "Modify ENGINE in the %s database configuration to select "
+                "a backend from 'django.contrib.gis.db.backends'" % alias,
+                PendingDeprecationWarning
+            )
+            if database['ENGINE'] == 'postgresql_psycopg2':
+                full_engine = 'django.contrib.gis.db.backends.postgis'
+            elif database['ENGINE'] == 'sqlite3':
+                full_engine = 'django.contrib.gis.db.backends.spatialite'
             else:
-                raise # If there's some other error, this must be an error in Django itself.
+                full_engine = 'django.contrib.gis.db.backends.%s' % database['ENGINE']
+        else:
+            warnings.warn(
+                "Short names for ENGINE in database configurations are deprecated. "
+                "Prepend %s.ENGINE with 'django.db.backends.'" % alias,
+                PendingDeprecationWarning
+            )
+            full_engine = "django.db.backends.%s" % database['ENGINE']
+        database['ENGINE'] = full_engine
 
-backend = load_backend(settings.DATABASE_ENGINE)
+connections = ConnectionHandler(settings.DATABASES)
+
+router = ConnectionRouter(settings.DATABASE_ROUTERS)
 
 # `connection`, `DatabaseError` and `IntegrityError` are convenient aliases
 # for backend bits.
@@ -47,36 +70,32 @@
 # we manually create the dictionary from the settings, passing only the
 # settings that the database backends care about. Note that TIME_ZONE is used
 # by the PostgreSQL backends.
-connection = backend.DatabaseWrapper({
-    'DATABASE_HOST': settings.DATABASE_HOST,
-    'DATABASE_NAME': settings.DATABASE_NAME,
-    'DATABASE_OPTIONS': settings.DATABASE_OPTIONS,
-    'DATABASE_PASSWORD': settings.DATABASE_PASSWORD,
-    'DATABASE_PORT': settings.DATABASE_PORT,
-    'DATABASE_USER': settings.DATABASE_USER,
-    'TIME_ZONE': settings.TIME_ZONE,
-})
-DatabaseError = backend.DatabaseError
-IntegrityError = backend.IntegrityError
+# we load all these up for backwards compatibility, you should use
+# connections['default'] instead.
+connection = connections[DEFAULT_DB_ALIAS]
+backend = load_backend(connection.settings_dict['ENGINE'])
 
 # Register an event that closes the database connection
 # when a Django request is finished.
 def close_connection(**kwargs):
-    connection.close()
+    for conn in connections.all():
+        conn.close()
 signals.request_finished.connect(close_connection)
 
 # Register an event that resets connection.queries
 # when a Django request is started.
 def reset_queries(**kwargs):
-    connection.queries = []
+    for conn in connections.all():
+        conn.queries = []
 signals.request_started.connect(reset_queries)
 
-# Register an event that rolls back the connection
+# Register an event that rolls back the connections
 # when a Django request has an exception.
 def _rollback_on_exception(**kwargs):
     from django.db import transaction
-    try:
-        transaction.rollback_unless_managed()
-    except DatabaseError:
-        pass
+    for conn in connections:
+        try:
+            transaction.rollback_unless_managed(using=conn)
+        except DatabaseError:
+            pass
 signals.got_request_exception.connect(_rollback_on_exception)
--- a/web/lib/django/db/backends/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,37 +1,31 @@
-try:
-    # Only exists in Python 2.4+
-    from threading import local
-except ImportError:
-    # Import copy of _thread_local.py from Python 2.4
-    from django.utils._threading_local import local
-try:
-    set
-except NameError:
-    # Python 2.3 compat
-    from sets import Set as set
+import decimal
+from threading import local
 
-try:
-    import decimal
-except ImportError:
-    # Python 2.3 fallback
-    from django.utils import _decimal as decimal
-
+from django.db import DEFAULT_DB_ALIAS
 from django.db.backends import util
 from django.utils import datetime_safe
+from django.utils.importlib import import_module
 
 class BaseDatabaseWrapper(local):
     """
     Represents a database connection.
     """
     ops = None
-    def __init__(self, settings_dict):
+
+    def __init__(self, settings_dict, alias=DEFAULT_DB_ALIAS):
         # `settings_dict` should be a dictionary containing keys such as
-        # DATABASE_NAME, DATABASE_USER, etc. It's called `settings_dict`
-        # instead of `settings` to disambiguate it from Django settings
-        # modules.
+        # NAME, USER, etc. It's called `settings_dict` instead of `settings`
+        # to disambiguate it from Django settings modules.
         self.connection = None
         self.queries = []
         self.settings_dict = settings_dict
+        self.alias = alias
+
+    def __eq__(self, other):
+        return self.settings_dict == other.settings_dict
+
+    def __ne__(self, other):
+        return not self == other
 
     def _commit(self):
         if self.connection is not None:
@@ -91,7 +85,6 @@
     # True if django.db.backend.utils.typecast_timestamp is used on values
     # returned from dates() calls.
     needs_datetime_string_cast = True
-    uses_custom_query_class = False
     empty_fetchmany_value = []
     update_can_self_select = True
     interprets_empty_strings_as_nulls = False
@@ -102,6 +95,7 @@
     # If True, don't use integer foreign keys referring to, e.g., positive
     # integer primary keys.
     related_fields_match_type = False
+    allow_sliced_subqueries = True
 
 class BaseDatabaseOperations(object):
     """
@@ -109,6 +103,11 @@
     a backend performs ordering or calculates the ID of a recently-inserted
     row.
     """
+    compiler_module = "django.db.models.sql.compiler"
+
+    def __init__(self):
+        self._cache = {}
+
     def autoinc_sql(self, table, column):
         """
         Returns any SQL needed to support auto-incrementing primary keys, or
@@ -208,7 +207,7 @@
         from django.utils.encoding import smart_unicode, force_unicode
 
         # Convert params to contain Unicode values.
-        to_unicode = lambda s: force_unicode(s, strings_only=True)
+        to_unicode = lambda s: force_unicode(s, strings_only=True, errors='replace')
         if isinstance(params, (list, tuple)):
             u_params = tuple([to_unicode(val) for val in params])
         else:
@@ -271,14 +270,17 @@
         """
         pass
 
-    def query_class(self, DefaultQueryClass):
+    def compiler(self, compiler_name):
+        """
+        Returns the SQLCompiler class corresponding to the given name,
+        in the namespace corresponding to the `compiler_module` attribute
+        on this backend.
         """
-        Given the default Query class, returns a custom Query class
-        to use for this backend. Returns None if a custom Query isn't used.
-        See also BaseDatabaseFeatures.uses_custom_query_class, which regulates
-        whether this method is called at all.
-        """
-        return None
+        if compiler_name not in self._cache:
+            self._cache[compiler_name] = getattr(
+                import_module(self.compiler_module), compiler_name
+            )
+        return self._cache[compiler_name]
 
     def quote_name(self, name):
         """
@@ -498,12 +500,14 @@
         If only_existing is True, the resulting list will only include the tables
         that actually exist in the database.
         """
-        from django.db import models
+        from django.db import models, router
         tables = set()
         for app in models.get_apps():
             for model in models.get_models(app):
                 if not model._meta.managed:
                     continue
+                if not router.allow_syncdb(self.connection.alias, model):
+                    continue
                 tables.add(model._meta.db_table)
                 tables.update([f.m2m_db_table() for f in model._meta.local_many_to_many])
         if only_existing:
@@ -512,18 +516,19 @@
 
     def installed_models(self, tables):
         "Returns a set of all models represented by the provided list of table names."
-        from django.db import models
+        from django.db import models, router
         all_models = []
         for app in models.get_apps():
             for model in models.get_models(app):
-                all_models.append(model)
+                if router.allow_syncdb(self.connection.alias, model):
+                    all_models.append(model)
         return set([m for m in all_models
             if self.table_name_converter(m._meta.db_table) in map(self.table_name_converter, tables)
         ])
 
     def sequence_list(self):
         "Returns a list of information about all DB sequences for all models in all apps."
-        from django.db import models
+        from django.db import models, router
 
         apps = models.get_apps()
         sequence_list = []
@@ -532,6 +537,8 @@
             for model in models.get_models(app):
                 if not model._meta.managed:
                     continue
+                if not router.allow_syncdb(self.connection.alias, model):
+                    continue
                 for f in model._meta.local_fields:
                     if isinstance(f, models.AutoField):
                         sequence_list.append({'table': model._meta.db_table, 'column': f.column})
@@ -565,6 +572,9 @@
     """
     This class encapsualtes all backend-specific model validation.
     """
+    def __init__(self, connection):
+        self.connection = connection
+
     def validate_field(self, errors, opts, f):
         "By default, there is no backend-specific validation"
         pass
--- a/web/lib/django/db/backends/creation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/creation.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,5 @@
 import sys
 import time
-try:
-    set
-except NameError:
-    # Python 2.3 compat
-    from sets import Set as set
 
 from django.conf import settings
 from django.core.management import call_command
@@ -47,7 +42,7 @@
         pending_references = {}
         qn = self.connection.ops.quote_name
         for f in opts.local_fields:
-            col_type = f.db_type()
+            col_type = f.db_type(connection=self.connection)
             tablespace = f.db_tablespace or opts.db_tablespace
             if col_type is None:
                 # Skip ManyToManyFields, because they're not represented as
@@ -73,9 +68,6 @@
                 else:
                     field_output.extend(ref_output)
             table_output.append(' '.join(field_output))
-        if opts.order_with_respect_to:
-            table_output.append(style.SQL_FIELD(qn('_order')) + ' ' + \
-                style.SQL_COLTYPE(models.IntegerField().db_type()))
         for field_constraints in opts.unique_together:
             table_output.append(style.SQL_KEYWORD('UNIQUE') + ' (%s)' % \
                 ", ".join([style.SQL_FIELD(qn(opts.get_field(f).column)) for f in field_constraints]))
@@ -145,6 +137,12 @@
 
     def sql_for_many_to_many(self, model, style):
         "Return the CREATE TABLE statments for all the many-to-many tables defined on a model"
+        import warnings
+        warnings.warn(
+            'Database creation API for m2m tables has been deprecated. M2M models are now automatically generated',
+            PendingDeprecationWarning
+        )
+
         output = []
         for f in model._meta.local_many_to_many:
             if model._meta.managed or f.rel.to._meta.managed:
@@ -153,11 +151,17 @@
 
     def sql_for_many_to_many_field(self, model, f, style):
         "Return the CREATE TABLE statements for a single m2m field"
+        import warnings
+        warnings.warn(
+            'Database creation API for m2m tables has been deprecated. M2M models are now automatically generated',
+            PendingDeprecationWarning
+        )
+
         from django.db import models
         from django.db.backends.util import truncate_name
 
         output = []
-        if f.creates_table:
+        if f.auto_created:
             opts = model._meta
             qn = self.connection.ops.quote_name
             tablespace = f.db_tablespace or opts.db_tablespace
@@ -173,7 +177,7 @@
                 style.SQL_TABLE(qn(f.m2m_db_table())) + ' (']
             table_output.append('    %s %s %s%s,' %
                 (style.SQL_FIELD(qn('id')),
-                style.SQL_COLTYPE(models.AutoField(primary_key=True).db_type()),
+                style.SQL_COLTYPE(models.AutoField(primary_key=True).db_type(connection=self.connection)),
                 style.SQL_KEYWORD('NOT NULL PRIMARY KEY'),
                 tablespace_sql))
 
@@ -210,6 +214,12 @@
 
     def sql_for_inline_many_to_many_references(self, model, field, style):
         "Create the references to other tables required by a many-to-many table"
+        import warnings
+        warnings.warn(
+            'Database creation API for m2m tables has been deprecated. M2M models are now automatically generated',
+            PendingDeprecationWarning
+        )
+
         from django.db import models
         opts = model._meta
         qn = self.connection.ops.quote_name
@@ -217,14 +227,14 @@
         table_output = [
             '    %s %s %s %s (%s)%s,' %
                 (style.SQL_FIELD(qn(field.m2m_column_name())),
-                style.SQL_COLTYPE(models.ForeignKey(model).db_type()),
+                style.SQL_COLTYPE(models.ForeignKey(model).db_type(connection=self.connection)),
                 style.SQL_KEYWORD('NOT NULL REFERENCES'),
                 style.SQL_TABLE(qn(opts.db_table)),
                 style.SQL_FIELD(qn(opts.pk.column)),
                 self.connection.ops.deferrable_sql()),
             '    %s %s %s %s (%s)%s,' %
                 (style.SQL_FIELD(qn(field.m2m_reverse_name())),
-                style.SQL_COLTYPE(models.ForeignKey(field.rel.to).db_type()),
+                style.SQL_COLTYPE(models.ForeignKey(field.rel.to).db_type(connection=self.connection)),
                 style.SQL_KEYWORD('NOT NULL REFERENCES'),
                 style.SQL_TABLE(qn(field.rel.to._meta.db_table)),
                 style.SQL_FIELD(qn(field.rel.to._meta.pk.column)),
@@ -245,6 +255,8 @@
 
     def sql_indexes_for_field(self, model, f, style):
         "Return the CREATE INDEX SQL statements for a single model field"
+        from django.db.backends.util import truncate_name
+
         if f.db_index and not f.unique:
             qn = self.connection.ops.quote_name
             tablespace = f.db_tablespace or model._meta.db_tablespace
@@ -256,8 +268,9 @@
                     tablespace_sql = ''
             else:
                 tablespace_sql = ''
+            i_name = '%s_%s' % (model._meta.db_table, self._digest(f.column))
             output = [style.SQL_KEYWORD('CREATE INDEX') + ' ' +
-                style.SQL_TABLE(qn('%s_%s' % (model._meta.db_table, f.column))) + ' ' +
+                style.SQL_TABLE(qn(truncate_name(i_name, self.connection.ops.max_name_length()))) + ' ' +
                 style.SQL_KEYWORD('ON') + ' ' +
                 style.SQL_TABLE(qn(model._meta.db_table)) + ' ' +
                 "(%s)" % style.SQL_FIELD(qn(f.column)) +
@@ -300,15 +313,21 @@
                 (style.SQL_KEYWORD('ALTER TABLE'),
                 style.SQL_TABLE(qn(table)),
                 style.SQL_KEYWORD(self.connection.ops.drop_foreignkey_sql()),
-                style.SQL_FIELD(truncate_name(r_name, self.connection.ops.max_name_length()))))
+                style.SQL_FIELD(qn(truncate_name(r_name, self.connection.ops.max_name_length())))))
         del references_to_delete[model]
         return output
 
     def sql_destroy_many_to_many(self, model, f, style):
         "Returns the DROP TABLE statements for a single m2m field"
+        import warnings
+        warnings.warn(
+            'Database creation API for m2m tables has been deprecated. M2M models are now automatically generated',
+            PendingDeprecationWarning
+        )
+
         qn = self.connection.ops.quote_name
         output = []
-        if f.creates_table:
+        if f.auto_created:
             output.append("%s %s;" % (style.SQL_KEYWORD('DROP TABLE'),
                 style.SQL_TABLE(qn(f.m2m_db_table()))))
             ds = self.connection.ops.drop_sequence_sql("%s_%s" % (model._meta.db_table, f.column))
@@ -322,18 +341,16 @@
         database already exists. Returns the name of the test database created.
         """
         if verbosity >= 1:
-            print "Creating test database..."
+            print "Creating test database '%s'..." % self.connection.alias
 
         test_database_name = self._create_test_db(verbosity, autoclobber)
 
         self.connection.close()
-        settings.DATABASE_NAME = test_database_name
-        self.connection.settings_dict["DATABASE_NAME"] = test_database_name
+        self.connection.settings_dict["NAME"] = test_database_name
         can_rollback = self._rollback_works()
-        settings.DATABASE_SUPPORTS_TRANSACTIONS = can_rollback
-        self.connection.settings_dict["DATABASE_SUPPORTS_TRANSACTIONS"] = can_rollback
+        self.connection.settings_dict["SUPPORTS_TRANSACTIONS"] = can_rollback
 
-        call_command('syncdb', verbosity=verbosity, interactive=False)
+        call_command('syncdb', verbosity=verbosity, interactive=False, database=self.connection.alias)
 
         if settings.CACHE_BACKEND.startswith('db://'):
             from django.core.cache import parse_backend_uri
@@ -350,10 +367,10 @@
         "Internal implementation - creates the test db tables."
         suffix = self.sql_table_creation_suffix()
 
-        if settings.TEST_DATABASE_NAME:
-            test_database_name = settings.TEST_DATABASE_NAME
+        if self.connection.settings_dict['TEST_NAME']:
+            test_database_name = self.connection.settings_dict['TEST_NAME']
         else:
-            test_database_name = TEST_DATABASE_PREFIX + settings.DATABASE_NAME
+            test_database_name = TEST_DATABASE_PREFIX + self.connection.settings_dict['NAME']
 
         qn = self.connection.ops.quote_name
 
@@ -403,11 +420,10 @@
         database already exists. Returns the name of the test database created.
         """
         if verbosity >= 1:
-            print "Destroying test database..."
+            print "Destroying test database '%s'..." % self.connection.alias
         self.connection.close()
-        test_database_name = settings.DATABASE_NAME
-        settings.DATABASE_NAME = old_database_name
-        self.connection.settings_dict["DATABASE_NAME"] = old_database_name
+        test_database_name = self.connection.settings_dict['NAME']
+        self.connection.settings_dict['NAME'] = old_database_name
 
         self._destroy_test_db(test_database_name, verbosity)
 
@@ -436,4 +452,3 @@
     def sql_table_creation_suffix(self):
         "SQL to append to the end of the test table creation statements"
         return ''
-
--- a/web/lib/django/db/backends/dummy/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/dummy/base.py	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,7 @@
 """
 Dummy database backend for Django.
 
-Django uses this if the DATABASE_ENGINE setting is empty (None or empty string).
+Django uses this if the database ENGINE setting is empty (None or empty string).
 
 Each of these API functions, except connection.close(), raises
 ImproperlyConfigured.
@@ -12,7 +12,7 @@
 from django.db.backends.creation import BaseDatabaseCreation
 
 def complain(*args, **kwargs):
-    raise ImproperlyConfigured, "You haven't set the DATABASE_ENGINE setting yet."
+    raise ImproperlyConfigured("You haven't set the database ENGINE setting yet.")
 
 def ignore(*args, **kwargs):
     pass
@@ -41,13 +41,16 @@
     _commit = complain
     _rollback = ignore
 
-    def __init__(self, *args, **kwargs):
+    def __init__(self, settings_dict, alias, *args, **kwargs):
         self.features = BaseDatabaseFeatures()
         self.ops = DatabaseOperations()
         self.client = DatabaseClient(self)
         self.creation = BaseDatabaseCreation(self)
         self.introspection = DatabaseIntrospection(self)
-        self.validation = BaseDatabaseValidation()
+        self.validation = BaseDatabaseValidation(self)
+
+        self.settings_dict = settings_dict
+        self.alias = alias
 
     def close(self):
         pass
--- a/web/lib/django/db/backends/mysql/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/mysql/base.py	Tue May 25 02:43:45 2010 +0200
@@ -5,6 +5,7 @@
 """
 
 import re
+import sys
 
 try:
     import MySQLdb as Database
@@ -24,6 +25,7 @@
 from MySQLdb.converters import conversions
 from MySQLdb.constants import FIELD_TYPE, FLAG, CLIENT
 
+from django.db import utils
 from django.db.backends import *
 from django.db.backends.signals import connection_created
 from django.db.backends.mysql.client import DatabaseClient
@@ -82,22 +84,30 @@
     def execute(self, query, args=None):
         try:
             return self.cursor.execute(query, args)
+        except Database.IntegrityError, e:
+            raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
         except Database.OperationalError, e:
             # Map some error codes to IntegrityError, since they seem to be
             # misclassified and Django would prefer the more logical place.
             if e[0] in self.codes_for_integrityerror:
-                raise Database.IntegrityError(tuple(e))
+                raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
             raise
+        except Database.DatabaseError, e:
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
 
     def executemany(self, query, args):
         try:
             return self.cursor.executemany(query, args)
+        except Database.IntegrityError, e:
+            raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
         except Database.OperationalError, e:
             # Map some error codes to IntegrityError, since they seem to be
             # misclassified and Django would prefer the more logical place.
             if e[0] in self.codes_for_integrityerror:
-                raise Database.IntegrityError(tuple(e))
+                raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
             raise
+        except Database.DatabaseError, e:
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
 
     def __getattr__(self, attr):
         if attr in self.__dict__:
@@ -113,8 +123,11 @@
     update_can_self_select = False
     allows_group_by_pk = True
     related_fields_match_type = True
+    allow_sliced_subqueries = False
 
 class DatabaseOperations(BaseDatabaseOperations):
+    compiler_module = "django.db.backends.mysql.compiler"
+
     def date_extract_sql(self, lookup_type, field_name):
         # http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html
         if lookup_type == 'week_day':
@@ -214,6 +227,9 @@
         second = '%s-12-31 23:59:59.99'
         return [first % value, second % value]
 
+    def max_name_length(self):
+        return 64
+
 class DatabaseWrapper(BaseDatabaseWrapper):
 
     operators = {
@@ -242,7 +258,7 @@
         self.client = DatabaseClient(self)
         self.creation = DatabaseCreation(self)
         self.introspection = DatabaseIntrospection(self)
-        self.validation = DatabaseValidation()
+        self.validation = DatabaseValidation(self)
 
     def _valid_connection(self):
         if self.connection is not None:
@@ -262,22 +278,22 @@
                 'use_unicode': True,
             }
             settings_dict = self.settings_dict
-            if settings_dict['DATABASE_USER']:
-                kwargs['user'] = settings_dict['DATABASE_USER']
-            if settings_dict['DATABASE_NAME']:
-                kwargs['db'] = settings_dict['DATABASE_NAME']
-            if settings_dict['DATABASE_PASSWORD']:
-                kwargs['passwd'] = settings_dict['DATABASE_PASSWORD']
-            if settings_dict['DATABASE_HOST'].startswith('/'):
-                kwargs['unix_socket'] = settings_dict['DATABASE_HOST']
-            elif settings_dict['DATABASE_HOST']:
-                kwargs['host'] = settings_dict['DATABASE_HOST']
-            if settings_dict['DATABASE_PORT']:
-                kwargs['port'] = int(settings_dict['DATABASE_PORT'])
+            if settings_dict['USER']:
+                kwargs['user'] = settings_dict['USER']
+            if settings_dict['NAME']:
+                kwargs['db'] = settings_dict['NAME']
+            if settings_dict['PASSWORD']:
+                kwargs['passwd'] = settings_dict['PASSWORD']
+            if settings_dict['HOST'].startswith('/'):
+                kwargs['unix_socket'] = settings_dict['HOST']
+            elif settings_dict['HOST']:
+                kwargs['host'] = settings_dict['HOST']
+            if settings_dict['PORT']:
+                kwargs['port'] = int(settings_dict['PORT'])
             # We need the number of potentially affected rows after an
             # "UPDATE", not the number of changed rows.
             kwargs['client_flag'] = CLIENT.FOUND_ROWS
-            kwargs.update(settings_dict['DATABASE_OPTIONS'])
+            kwargs.update(settings_dict['OPTIONS'])
             self.connection = Database.connect(**kwargs)
             self.connection.encoders[SafeUnicode] = self.connection.encoders[unicode]
             self.connection.encoders[SafeString] = self.connection.encoders[str]
--- a/web/lib/django/db/backends/mysql/client.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/mysql/client.py	Tue May 25 02:43:45 2010 +0200
@@ -9,12 +9,12 @@
     def runshell(self):
         settings_dict = self.connection.settings_dict
         args = [self.executable_name]
-        db = settings_dict['DATABASE_OPTIONS'].get('db', settings_dict['DATABASE_NAME'])
-        user = settings_dict['DATABASE_OPTIONS'].get('user', settings_dict['DATABASE_USER'])
-        passwd = settings_dict['DATABASE_OPTIONS'].get('passwd', settings_dict['DATABASE_PASSWORD'])
-        host = settings_dict['DATABASE_OPTIONS'].get('host', settings_dict['DATABASE_HOST'])
-        port = settings_dict['DATABASE_OPTIONS'].get('port', settings_dict['DATABASE_PORT'])
-        defaults_file = settings_dict['DATABASE_OPTIONS'].get('read_default_file')
+        db = settings_dict['OPTIONS'].get('db', settings_dict['NAME'])
+        user = settings_dict['OPTIONS'].get('user', settings_dict['USER'])
+        passwd = settings_dict['OPTIONS'].get('passwd', settings_dict['PASSWORD'])
+        host = settings_dict['OPTIONS'].get('host', settings_dict['HOST'])
+        port = settings_dict['OPTIONS'].get('port', settings_dict['PORT'])
+        defaults_file = settings_dict['OPTIONS'].get('read_default_file')
         # Seems to be no good way to set sql_mode with CLI.
 
         if defaults_file:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/db/backends/mysql/compiler.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,27 @@
+from django.db.models.sql import compiler
+
+class SQLCompiler(compiler.SQLCompiler):
+    def resolve_columns(self, row, fields=()):
+        values = []
+        index_extra_select = len(self.query.extra_select.keys())
+        for value, field in map(None, row[index_extra_select:], fields):
+            if (field and field.get_internal_type() in ("BooleanField", "NullBooleanField") and
+                value in (0, 1)):
+                value = bool(value)
+            values.append(value)
+        return row[:index_extra_select] + tuple(values)
+
+class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler):
+    pass
+
+class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler):
+    pass
+
+class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler):
+    pass
+
+class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler):
+    pass
+
+class SQLDateCompiler(compiler.SQLDateCompiler, SQLCompiler):
+    pass
--- a/web/lib/django/db/backends/mysql/creation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/mysql/creation.py	Tue May 25 02:43:45 2010 +0200
@@ -1,4 +1,3 @@
-from django.conf import settings
 from django.db.backends.creation import BaseDatabaseCreation
 
 class DatabaseCreation(BaseDatabaseCreation):
@@ -18,6 +17,7 @@
         'FilePathField':     'varchar(%(max_length)s)',
         'FloatField':        'double precision',
         'IntegerField':      'integer',
+        'BigIntegerField':   'bigint',
         'IPAddressField':    'char(15)',
         'NullBooleanField':  'bool',
         'OneToOneField':     'integer',
@@ -31,29 +31,29 @@
 
     def sql_table_creation_suffix(self):
         suffix = []
-        if settings.TEST_DATABASE_CHARSET:
-            suffix.append('CHARACTER SET %s' % settings.TEST_DATABASE_CHARSET)
-        if settings.TEST_DATABASE_COLLATION:
-            suffix.append('COLLATE %s' % settings.TEST_DATABASE_COLLATION)
+        if self.connection.settings_dict['TEST_CHARSET']:
+            suffix.append('CHARACTER SET %s' % self.connection.settings_dict['TEST_CHARSET'])
+        if self.connection.settings_dict['TEST_COLLATION']:
+            suffix.append('COLLATE %s' % self.connection.settings_dict['TEST_COLLATION'])
         return ' '.join(suffix)
 
     def sql_for_inline_foreign_key_references(self, field, known_models, style):
         "All inline references are pending under MySQL"
         return [], True
-        
+
     def sql_for_inline_many_to_many_references(self, model, field, style):
         from django.db import models
         opts = model._meta
         qn = self.connection.ops.quote_name
-        
+
         table_output = [
             '    %s %s %s,' %
                 (style.SQL_FIELD(qn(field.m2m_column_name())),
-                style.SQL_COLTYPE(models.ForeignKey(model).db_type()),
+                style.SQL_COLTYPE(models.ForeignKey(model).db_type(connection=self.connection)),
                 style.SQL_KEYWORD('NOT NULL')),
             '    %s %s %s,' %
             (style.SQL_FIELD(qn(field.m2m_reverse_name())),
-            style.SQL_COLTYPE(models.ForeignKey(field.rel.to).db_type()),
+            style.SQL_COLTYPE(models.ForeignKey(field.rel.to).db_type(connection=self.connection)),
             style.SQL_KEYWORD('NOT NULL'))
         ]
         deferred = [
@@ -63,4 +63,3 @@
                 field.rel.to._meta.db_table, field.rel.to._meta.pk.column)
             ]
         return table_output, deferred
-        
\ No newline at end of file
--- a/web/lib/django/db/backends/mysql/introspection.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/mysql/introspection.py	Tue May 25 02:43:45 2010 +0200
@@ -17,7 +17,7 @@
         FIELD_TYPE.FLOAT: 'FloatField',
         FIELD_TYPE.INT24: 'IntegerField',
         FIELD_TYPE.LONG: 'IntegerField',
-        FIELD_TYPE.LONGLONG: 'IntegerField',
+        FIELD_TYPE.LONGLONG: 'BigIntegerField',
         FIELD_TYPE.SHORT: 'IntegerField',
         FIELD_TYPE.STRING: 'CharField',
         FIELD_TYPE.TIMESTAMP: 'DateTimeField',
--- a/web/lib/django/db/backends/mysql/validation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/mysql/validation.py	Tue May 25 02:43:45 2010 +0200
@@ -11,8 +11,7 @@
           characters if they have a unique index on them.
         """
         from django.db import models
-        from django.db import connection
-        db_version = connection.get_server_version()
+        db_version = self.connection.get_server_version()
         varchar_fields = (models.CharField, models.CommaSeparatedIntegerField,
                 models.SlugField)
         if isinstance(f, varchar_fields) and f.max_length > 255:
@@ -25,4 +24,3 @@
 
             if msg:
                 errors.add(opts, msg % {'name': f.name, 'cls': f.__class__.__name__, 'version': '.'.join([str(n) for n in db_version[:3]])})
-
--- a/web/lib/django/db/backends/oracle/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/oracle/base.py	Tue May 25 02:43:45 2010 +0200
@@ -4,13 +4,12 @@
 Requires cx_Oracle: http://cx-oracle.sourceforge.net/
 """
 
+
+import datetime
 import os
-import datetime
+import sys
 import time
-try:
-    from decimal import Decimal
-except ImportError:
-    from django.utils._decimal import Decimal
+from decimal import Decimal
 
 # Oracle takes client-side character set encoding from the environment.
 os.environ['NLS_LANG'] = '.UTF8'
@@ -24,9 +23,9 @@
     from django.core.exceptions import ImproperlyConfigured
     raise ImproperlyConfigured("Error loading cx_Oracle module: %s" % e)
 
+from django.db import utils
 from django.db.backends import *
 from django.db.backends.signals import connection_created
-from django.db.backends.oracle import query
 from django.db.backends.oracle.client import DatabaseClient
 from django.db.backends.oracle.creation import DatabaseCreation
 from django.db.backends.oracle.introspection import DatabaseIntrospection
@@ -47,13 +46,14 @@
 class DatabaseFeatures(BaseDatabaseFeatures):
     empty_fetchmany_value = ()
     needs_datetime_string_cast = False
-    uses_custom_query_class = True
     interprets_empty_strings_as_nulls = True
     uses_savepoints = True
     can_return_id_from_insert = True
+    allow_sliced_subqueries = False
 
 
 class DatabaseOperations(BaseDatabaseOperations):
+    compiler_module = "django.db.backends.oracle.compiler"
 
     def autoinc_sql(self, table, column):
         # To simulate auto-incrementing primary keys in Oracle, we have to
@@ -102,6 +102,54 @@
             sql = "TRUNC(%s, '%s')" % (field_name, lookup_type)
         return sql
 
+    def convert_values(self, value, field):
+        if isinstance(value, Database.LOB):
+            value = value.read()
+            if field and field.get_internal_type() == 'TextField':
+                value = force_unicode(value)
+
+        # Oracle stores empty strings as null. We need to undo this in
+        # order to adhere to the Django convention of using the empty
+        # string instead of null, but only if the field accepts the
+        # empty string.
+        if value is None and field and field.empty_strings_allowed:
+            value = u''
+        # Convert 1 or 0 to True or False
+        elif value in (1, 0) and field and field.get_internal_type() in ('BooleanField', 'NullBooleanField'):
+            value = bool(value)
+        # Force floats to the correct type
+        elif value is not None and field and field.get_internal_type() == 'FloatField':
+            value = float(value)
+        # Convert floats to decimals
+        elif value is not None and field and field.get_internal_type() == 'DecimalField':
+            value = util.typecast_decimal(field.format_number(value))
+        # cx_Oracle always returns datetime.datetime objects for
+        # DATE and TIMESTAMP columns, but Django wants to see a
+        # python datetime.date, .time, or .datetime.  We use the type
+        # of the Field to determine which to cast to, but it's not
+        # always available.
+        # As a workaround, we cast to date if all the time-related
+        # values are 0, or to time if the date is 1/1/1900.
+        # This could be cleaned a bit by adding a method to the Field
+        # classes to normalize values from the database (the to_python
+        # method is used for validation and isn't what we want here).
+        elif isinstance(value, Database.Timestamp):
+            # In Python 2.3, the cx_Oracle driver returns its own
+            # Timestamp object that we must convert to a datetime class.
+            if not isinstance(value, datetime.datetime):
+                value = datetime.datetime(value.year, value.month,
+                        value.day, value.hour, value.minute, value.second,
+                        value.fsecond)
+            if field and field.get_internal_type() == 'DateTimeField':
+                pass
+            elif field and field.get_internal_type() == 'DateField':
+                value = value.date()
+            elif field and field.get_internal_type() == 'TimeField' or (value.year == 1900 and value.month == value.day == 1):
+                value = value.time()
+            elif value.hour == value.minute == value.second == value.microsecond == 0:
+                value = value.date()
+        return value
+
     def datetime_cast_sql(self):
         return "TO_TIMESTAMP(%s, 'YYYY-MM-DD HH24:MI:SS.FF')"
 
@@ -141,9 +189,6 @@
             return u''
         return force_unicode(value.read())
 
-    def query_class(self, DefaultQueryClass):
-        return query.query_class(DefaultQueryClass, Database)
-
     def quote_name(self, name):
         # SQL92 requires delimited (quoted) names to be case-sensitive.  When
         # not quoted, Oracle has case-insensitive behavior for identifiers, but
@@ -270,16 +315,16 @@
     operators = {
         'exact': '= %s',
         'iexact': '= UPPER(%s)',
-        'contains': "LIKEC %s ESCAPE '\\'",
-        'icontains': "LIKEC UPPER(%s) ESCAPE '\\'",
+        'contains': "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
+        'icontains': "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
         'gt': '> %s',
         'gte': '>= %s',
         'lt': '< %s',
         'lte': '<= %s',
-        'startswith': "LIKEC %s ESCAPE '\\'",
-        'endswith': "LIKEC %s ESCAPE '\\'",
-        'istartswith': "LIKEC UPPER(%s) ESCAPE '\\'",
-        'iendswith': "LIKEC UPPER(%s) ESCAPE '\\'",
+        'startswith': "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
+        'endswith': "LIKE TRANSLATE(%s USING NCHAR_CS) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
+        'istartswith': "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
+        'iendswith': "LIKE UPPER(TRANSLATE(%s USING NCHAR_CS)) ESCAPE TRANSLATE('\\' USING NCHAR_CS)",
     }
     oracle_version = None
 
@@ -291,29 +336,29 @@
         self.client = DatabaseClient(self)
         self.creation = DatabaseCreation(self)
         self.introspection = DatabaseIntrospection(self)
-        self.validation = BaseDatabaseValidation()
+        self.validation = BaseDatabaseValidation(self)
 
     def _valid_connection(self):
         return self.connection is not None
 
     def _connect_string(self):
         settings_dict = self.settings_dict
-        if len(settings_dict['DATABASE_HOST'].strip()) == 0:
-            settings_dict['DATABASE_HOST'] = 'localhost'
-        if len(settings_dict['DATABASE_PORT'].strip()) != 0:
-            dsn = Database.makedsn(settings_dict['DATABASE_HOST'],
-                                   int(settings_dict['DATABASE_PORT']),
-                                   settings_dict['DATABASE_NAME'])
+        if len(settings_dict['HOST'].strip()) == 0:
+            settings_dict['HOST'] = 'localhost'
+        if len(settings_dict['PORT'].strip()) != 0:
+            dsn = Database.makedsn(settings_dict['HOST'],
+                                   int(settings_dict['PORT']),
+                                   settings_dict['NAME'])
         else:
-            dsn = settings_dict['DATABASE_NAME']
-        return "%s/%s@%s" % (settings_dict['DATABASE_USER'],
-                             settings_dict['DATABASE_PASSWORD'], dsn)
+            dsn = settings_dict['NAME']
+        return "%s/%s@%s" % (settings_dict['USER'],
+                             settings_dict['PASSWORD'], dsn)
 
     def _cursor(self):
         cursor = None
         if not self._valid_connection():
             conn_string = convert_unicode(self._connect_string())
-            self.connection = Database.connect(conn_string, **self.settings_dict['DATABASE_OPTIONS'])
+            self.connection = Database.connect(conn_string, **self.settings_dict['OPTIONS'])
             cursor = FormatStylePlaceholderCursor(self.connection)
             # Set oracle date to ansi date format.  This only needs to execute
             # once when we create a new connection. We also set the Territory
@@ -375,6 +420,30 @@
             self.input_size = None
 
 
+class VariableWrapper(object):
+    """
+    An adapter class for cursor variables that prevents the wrapped object
+    from being converted into a string when used to instanciate an OracleParam.
+    This can be used generally for any other object that should be passed into
+    Cursor.execute as-is.
+    """
+
+    def __init__(self, var):
+        self.var = var
+
+    def bind_parameter(self, cursor):
+        return self.var
+
+    def __getattr__(self, key):
+        return getattr(self.var, key)
+
+    def __setattr__(self, key, value):
+        if key == 'var':
+            self.__dict__[key] = value
+        else:
+            setattr(self.var, key, value)
+
+
 class InsertIdVar(object):
     """
     A late-binding cursor variable that can be passed to Cursor.execute
@@ -383,7 +452,7 @@
     """
 
     def bind_parameter(self, cursor):
-        param = cursor.var(Database.NUMBER)
+        param = cursor.cursor.var(Database.NUMBER)
         cursor._insert_id_var = param
         return param
 
@@ -436,11 +505,13 @@
         self._guess_input_sizes([params])
         try:
             return self.cursor.execute(query, self._param_generator(params))
-        except DatabaseError, e:
+        except Database.IntegrityError, e:
+            raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
+        except Database.DatabaseError, e:
             # cx_Oracle <= 4.4.0 wrongly raises a DatabaseError for ORA-01400.
-            if e.args[0].code == 1400 and not isinstance(e, IntegrityError):
-                e = IntegrityError(e.args[0])
-            raise e
+            if hasattr(e.args[0], 'code') and e.args[0].code == 1400 and not isinstance(e, IntegrityError):
+                raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
 
     def executemany(self, query, params=None):
         try:
@@ -460,67 +531,35 @@
         try:
             return self.cursor.executemany(query,
                                 [self._param_generator(p) for p in formatted])
-        except DatabaseError, e:
+        except Database.IntegrityError, e:
+            raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
+        except Database.DatabaseError, e:
             # cx_Oracle <= 4.4.0 wrongly raises a DatabaseError for ORA-01400.
-            if e.args[0].code == 1400 and not isinstance(e, IntegrityError):
-                e = IntegrityError(e.args[0])
-            raise e
+            if hasattr(e.args[0], 'code') and e.args[0].code == 1400 and not isinstance(e, IntegrityError):
+                raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
 
     def fetchone(self):
         row = self.cursor.fetchone()
         if row is None:
             return row
-        return self._rowfactory(row)
+        return _rowfactory(row, self.cursor)
 
     def fetchmany(self, size=None):
         if size is None:
             size = self.arraysize
-        return tuple([self._rowfactory(r)
+        return tuple([_rowfactory(r, self.cursor)
                       for r in self.cursor.fetchmany(size)])
 
     def fetchall(self):
-        return tuple([self._rowfactory(r)
+        return tuple([_rowfactory(r, self.cursor)
                       for r in self.cursor.fetchall()])
 
-    def _rowfactory(self, row):
-        # Cast numeric values as the appropriate Python type based upon the
-        # cursor description, and convert strings to unicode.
-        casted = []
-        for value, desc in zip(row, self.cursor.description):
-            if value is not None and desc[1] is Database.NUMBER:
-                precision, scale = desc[4:6]
-                if scale == -127:
-                    if precision == 0:
-                        # NUMBER column: decimal-precision floating point
-                        # This will normally be an integer from a sequence,
-                        # but it could be a decimal value.
-                        if '.' in value:
-                            value = Decimal(value)
-                        else:
-                            value = int(value)
-                    else:
-                        # FLOAT column: binary-precision floating point.
-                        # This comes from FloatField columns.
-                        value = float(value)
-                elif precision > 0:
-                    # NUMBER(p,s) column: decimal-precision fixed point.
-                    # This comes from IntField and DecimalField columns.
-                    if scale == 0:
-                        value = int(value)
-                    else:
-                        value = Decimal(value)
-                elif '.' in value:
-                    # No type information. This normally comes from a
-                    # mathematical expression in the SELECT list. Guess int
-                    # or Decimal based on whether it has a decimal point.
-                    value = Decimal(value)
-                else:
-                    value = int(value)
-            elif desc[1] in (Database.STRING, Database.FIXED_CHAR,
-                             Database.LONG_STRING):
-                value = to_unicode(value)
-            casted.append(value)
-        return tuple(casted)
+    def var(self, *args):
+        return VariableWrapper(self.cursor.var(*args))
+
+    def arrayvar(self, *args):
+        return VariableWrapper(self.cursor.arrayvar(*args))
 
     def __getattr__(self, attr):
         if attr in self.__dict__:
@@ -529,7 +568,63 @@
             return getattr(self.cursor, attr)
 
     def __iter__(self):
-        return iter(self.cursor)
+        return CursorIterator(self.cursor)
+
+
+class CursorIterator(object):
+
+    """Cursor iterator wrapper that invokes our custom row factory."""
+
+    def __init__(self, cursor):
+        self.cursor = cursor
+        self.iter = iter(cursor)
+
+    def __iter__(self):
+        return self
+
+    def next(self):
+        return _rowfactory(self.iter.next(), self.cursor)
+
+
+def _rowfactory(row, cursor):
+    # Cast numeric values as the appropriate Python type based upon the
+    # cursor description, and convert strings to unicode.
+    casted = []
+    for value, desc in zip(row, cursor.description):
+        if value is not None and desc[1] is Database.NUMBER:
+            precision, scale = desc[4:6]
+            if scale == -127:
+                if precision == 0:
+                    # NUMBER column: decimal-precision floating point
+                    # This will normally be an integer from a sequence,
+                    # but it could be a decimal value.
+                    if '.' in value:
+                        value = Decimal(value)
+                    else:
+                        value = int(value)
+                else:
+                    # FLOAT column: binary-precision floating point.
+                    # This comes from FloatField columns.
+                    value = float(value)
+            elif precision > 0:
+                # NUMBER(p,s) column: decimal-precision fixed point.
+                # This comes from IntField and DecimalField columns.
+                if scale == 0:
+                    value = int(value)
+                else:
+                    value = Decimal(value)
+            elif '.' in value:
+                # No type information. This normally comes from a
+                # mathematical expression in the SELECT list. Guess int
+                # or Decimal based on whether it has a decimal point.
+                value = Decimal(value)
+            else:
+                value = int(value)
+        elif desc[1] in (Database.STRING, Database.FIXED_CHAR,
+                         Database.LONG_STRING):
+            value = to_unicode(value)
+        casted.append(value)
+    return tuple(casted)
 
 
 def to_unicode(s):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/db/backends/oracle/compiler.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,66 @@
+from django.db.models.sql import compiler
+
+
+class SQLCompiler(compiler.SQLCompiler):
+    def resolve_columns(self, row, fields=()):
+        # If this query has limit/offset information, then we expect the
+        # first column to be an extra "_RN" column that we need to throw
+        # away.
+        if self.query.high_mark is not None or self.query.low_mark:
+            rn_offset = 1
+        else:
+            rn_offset = 0
+        index_start = rn_offset + len(self.query.extra_select.keys())
+        values = [self.query.convert_values(v, None, connection=self.connection)
+                  for v in row[rn_offset:index_start]]
+        for value, field in map(None, row[index_start:], fields):
+            values.append(self.query.convert_values(value, field, connection=self.connection))
+        return tuple(values)
+
+    def as_sql(self, with_limits=True, with_col_aliases=False):
+        """
+        Creates the SQL for this query. Returns the SQL string and list
+        of parameters.  This is overriden from the original Query class
+        to handle the additional SQL Oracle requires to emulate LIMIT
+        and OFFSET.
+
+        If 'with_limits' is False, any limit/offset information is not
+        included in the query.
+        """
+
+        # The `do_offset` flag indicates whether we need to construct
+        # the SQL needed to use limit/offset with Oracle.
+        do_offset = with_limits and (self.query.high_mark is not None
+                                     or self.query.low_mark)
+        if not do_offset:
+            sql, params = super(SQLCompiler, self).as_sql(with_limits=False,
+                    with_col_aliases=with_col_aliases)
+        else:
+            sql, params = super(SQLCompiler, self).as_sql(with_limits=False,
+                                                    with_col_aliases=True)
+
+            # Wrap the base query in an outer SELECT * with boundaries on
+            # the "_RN" column.  This is the canonical way to emulate LIMIT
+            # and OFFSET on Oracle.
+            high_where = ''
+            if self.query.high_mark is not None:
+                high_where = 'WHERE ROWNUM <= %d' % (self.query.high_mark,)
+            sql = 'SELECT * FROM (SELECT ROWNUM AS "_RN", "_SUB".* FROM (%s) "_SUB" %s) WHERE "_RN" > %d' % (sql, high_where, self.query.low_mark)
+
+        return sql, params
+
+
+class SQLInsertCompiler(compiler.SQLInsertCompiler, SQLCompiler):
+    pass
+
+class SQLDeleteCompiler(compiler.SQLDeleteCompiler, SQLCompiler):
+    pass
+
+class SQLUpdateCompiler(compiler.SQLUpdateCompiler, SQLCompiler):
+    pass
+
+class SQLAggregateCompiler(compiler.SQLAggregateCompiler, SQLCompiler):
+    pass
+
+class SQLDateCompiler(compiler.SQLDateCompiler, SQLCompiler):
+    pass
--- a/web/lib/django/db/backends/oracle/creation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/oracle/creation.py	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,4 @@
 import sys, time
-from django.conf import settings
 from django.core import management
 from django.db.backends.creation import BaseDatabaseCreation
 
@@ -27,6 +26,7 @@
         'FilePathField':                'NVARCHAR2(%(max_length)s)',
         'FloatField':                   'DOUBLE PRECISION',
         'IntegerField':                 'NUMBER(11)',
+        'BigIntegerField':              'NUMBER(19)',
         'IPAddressField':               'VARCHAR2(15)',
         'NullBooleanField':             'NUMBER(1) CHECK ((%(qn_column)s IN (0,1)) OR (%(qn_column)s IS NULL))',
         'OneToOneField':                'NUMBER(11)',
@@ -42,25 +42,25 @@
     remember = {}
 
     def _create_test_db(self, verbosity=1, autoclobber=False):
-        TEST_DATABASE_NAME = self._test_database_name(settings)
-        TEST_DATABASE_USER = self._test_database_user(settings)
-        TEST_DATABASE_PASSWD = self._test_database_passwd(settings)
-        TEST_DATABASE_TBLSPACE = self._test_database_tblspace(settings)
-        TEST_DATABASE_TBLSPACE_TMP = self._test_database_tblspace_tmp(settings)
+        TEST_NAME = self._test_database_name()
+        TEST_USER = self._test_database_user()
+        TEST_PASSWD = self._test_database_passwd()
+        TEST_TBLSPACE = self._test_database_tblspace()
+        TEST_TBLSPACE_TMP = self._test_database_tblspace_tmp()
 
         parameters = {
-            'dbname': TEST_DATABASE_NAME,
-            'user': TEST_DATABASE_USER,
-            'password': TEST_DATABASE_PASSWD,
-            'tblspace': TEST_DATABASE_TBLSPACE,
-            'tblspace_temp': TEST_DATABASE_TBLSPACE_TMP,
+            'dbname': TEST_NAME,
+            'user': TEST_USER,
+            'password': TEST_PASSWD,
+            'tblspace': TEST_TBLSPACE,
+            'tblspace_temp': TEST_TBLSPACE_TMP,
         }
 
-        self.remember['user'] = settings.DATABASE_USER
-        self.remember['passwd'] = settings.DATABASE_PASSWORD
+        self.remember['user'] = self.connection.settings_dict['USER']
+        self.remember['passwd'] = self.connection.settings_dict['PASSWORD']
 
         cursor = self.connection.cursor()
-        if self._test_database_create(settings):
+        if self._test_database_create():
             if verbosity >= 1:
                 print 'Creating test database...'
             try:
@@ -68,7 +68,7 @@
             except Exception, e:
                 sys.stderr.write("Got an error creating the test database: %s\n" % e)
                 if not autoclobber:
-                    confirm = raw_input("It appears the test database, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % TEST_DATABASE_NAME)
+                    confirm = raw_input("It appears the test database, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % TEST_NAME)
                 if autoclobber or confirm == 'yes':
                     try:
                         if verbosity >= 1:
@@ -84,7 +84,7 @@
                     print "Tests cancelled."
                     sys.exit(1)
 
-        if self._test_user_create(settings):
+        if self._test_user_create():
             if verbosity >= 1:
                 print "Creating test user..."
             try:
@@ -92,7 +92,7 @@
             except Exception, e:
                 sys.stderr.write("Got an error creating the test user: %s\n" % e)
                 if not autoclobber:
-                    confirm = raw_input("It appears the test user, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % TEST_DATABASE_USER)
+                    confirm = raw_input("It appears the test user, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % TEST_USER)
                 if autoclobber or confirm == 'yes':
                     try:
                         if verbosity >= 1:
@@ -108,43 +108,43 @@
                     print "Tests cancelled."
                     sys.exit(1)
 
-        settings.TEST_DATABASE_USER = settings.DATABASE_USER = self.connection.settings_dict["DATABASE_USER"] = TEST_DATABASE_USER
-        settings.DATABASE_PASSWORD = self.connection.settings_dict["DATABASE_PASSWORD"] = TEST_DATABASE_PASSWD
+        self.connection.settings_dict['TEST_USER'] = self.connection.settings_dict["USER"] = TEST_USER
+        self.connection.settings_dict["PASSWORD"] = TEST_PASSWD
 
-        return settings.DATABASE_NAME
+        return self.connection.settings_dict['NAME']
 
     def _destroy_test_db(self, test_database_name, verbosity=1):
         """
         Destroy a test database, prompting the user for confirmation if the
         database already exists. Returns the name of the test database created.
         """
-        TEST_DATABASE_NAME = self._test_database_name(settings)
-        TEST_DATABASE_USER = self._test_database_user(settings)
-        TEST_DATABASE_PASSWD = self._test_database_passwd(settings)
-        TEST_DATABASE_TBLSPACE = self._test_database_tblspace(settings)
-        TEST_DATABASE_TBLSPACE_TMP = self._test_database_tblspace_tmp(settings)
+        TEST_NAME = self._test_database_name()
+        TEST_USER = self._test_database_user()
+        TEST_PASSWD = self._test_database_passwd()
+        TEST_TBLSPACE = self._test_database_tblspace()
+        TEST_TBLSPACE_TMP = self._test_database_tblspace_tmp()
 
-        settings.DATABASE_USER = self.connection.settings_dict["DATABASE_USER"] = self.remember['user']
-        settings.DATABASE_PASSWORD = self.connection.settings_dict["DATABASE_PASSWORD"] = self.remember['passwd']
+        self.connection.settings_dict["USER"] = self.remember['user']
+        self.connection.settings_dict["PASSWORD"] = self.remember['passwd']
 
         parameters = {
-            'dbname': TEST_DATABASE_NAME,
-            'user': TEST_DATABASE_USER,
-            'password': TEST_DATABASE_PASSWD,
-            'tblspace': TEST_DATABASE_TBLSPACE,
-            'tblspace_temp': TEST_DATABASE_TBLSPACE_TMP,
+            'dbname': TEST_NAME,
+            'user': TEST_USER,
+            'password': TEST_PASSWD,
+            'tblspace': TEST_TBLSPACE,
+            'tblspace_temp': TEST_TBLSPACE_TMP,
         }
 
-        self.remember['user'] = settings.DATABASE_USER
-        self.remember['passwd'] = settings.DATABASE_PASSWORD
+        self.remember['user'] = self.connection.settings_dict['USER']
+        self.remember['passwd'] = self.connection.settings_dict['PASSWORD']
 
         cursor = self.connection.cursor()
         time.sleep(1) # To avoid "database is being accessed by other users" errors.
-        if self._test_user_create(settings):
+        if self._test_user_create():
             if verbosity >= 1:
                 print 'Destroying test user...'
             self._destroy_test_user(cursor, parameters, verbosity)
-        if self._test_database_create(settings):
+        if self._test_database_create():
             if verbosity >= 1:
                 print 'Destroying test database tables...'
             self._execute_test_db_destruction(cursor, parameters, verbosity)
@@ -207,83 +207,83 @@
                 sys.stderr.write("Failed (%s)\n" % (err))
                 raise
 
-    def _test_database_name(self, settings):
-        name = TEST_DATABASE_PREFIX + settings.DATABASE_NAME
-        try:
-            if settings.TEST_DATABASE_NAME:
-                name = settings.TEST_DATABASE_NAME
-        except AttributeError:
-            pass
-        except:
-            raise
-        return name
-
-    def _test_database_create(self, settings):
-        name = True
+    def _test_database_name(self):
+        name = TEST_DATABASE_PREFIX + self.connection.settings_dict['NAME']
         try:
-            if settings.TEST_DATABASE_CREATE:
-                name = True
-            else:
-                name = False
-        except AttributeError:
-            pass
-        except:
-            raise
-        return name
-
-    def _test_user_create(self, settings):
-        name = True
-        try:
-            if settings.TEST_USER_CREATE:
-                name = True
-            else:
-                name = False
+            if self.connection.settings_dict['TEST_NAME']:
+                name = self.connection.settings_dict['TEST_NAME']
         except AttributeError:
             pass
         except:
             raise
         return name
 
-    def _test_database_user(self, settings):
-        name = TEST_DATABASE_PREFIX + settings.DATABASE_USER
+    def _test_database_create(self):
+        name = True
         try:
-            if settings.TEST_DATABASE_USER:
-                name = settings.TEST_DATABASE_USER
-        except AttributeError:
+            if self.connection.settings_dict['TEST_CREATE']:
+                name = True
+            else:
+                name = False
+        except KeyError:
             pass
         except:
             raise
         return name
 
-    def _test_database_passwd(self, settings):
-        name = PASSWORD
+    def _test_user_create(self):
+        name = True
         try:
-            if settings.TEST_DATABASE_PASSWD:
-                name = settings.TEST_DATABASE_PASSWD
-        except AttributeError:
+            if self.connection.settings_dict['TEST_USER_CREATE']:
+                name = True
+            else:
+                name = False
+        except KeyError:
             pass
         except:
             raise
         return name
 
-    def _test_database_tblspace(self, settings):
-        name = TEST_DATABASE_PREFIX + settings.DATABASE_NAME
+    def _test_database_user(self):
+        name = TEST_DATABASE_PREFIX + self.connection.settings_dict['USER']
         try:
-            if settings.TEST_DATABASE_TBLSPACE:
-                name = settings.TEST_DATABASE_TBLSPACE
-        except AttributeError:
+            if self.connection.settings_dict['TEST_USER']:
+                name = self.connection.settings_dict['TEST_USER']
+        except KeyError:
+            pass
+        except:
+            raise
+        return name
+
+    def _test_database_passwd(self):
+        name = PASSWORD
+        try:
+            if self.connection.settings_dict['TEST_PASSWD']:
+                name = self.connection.settings_dict['TEST_PASSWD']
+        except KeyError:
             pass
         except:
             raise
         return name
 
-    def _test_database_tblspace_tmp(self, settings):
-        name = TEST_DATABASE_PREFIX + settings.DATABASE_NAME + '_temp'
+    def _test_database_tblspace(self):
+        name = TEST_DATABASE_PREFIX + self.connection.settings_dict['NAME']
         try:
-            if settings.TEST_DATABASE_TBLSPACE_TMP:
-                name = settings.TEST_DATABASE_TBLSPACE_TMP
-        except AttributeError:
+            if self.connection.settings_dict['TEST_TBLSPACE']:
+                name = self.connection.settings_dict['TEST_TBLSPACE']
+        except KeyError:
             pass
         except:
             raise
         return name
+
+    def _test_database_tblspace_tmp(self):
+        name = TEST_DATABASE_PREFIX + self.connection.settings_dict['NAME'] + '_temp'
+        try:
+            if self.connection.settings_dict['TEST_TBLSPACE_TMP']:
+                name = self.connection.settings_dict['TEST_TBLSPACE_TMP']
+        except KeyError:
+            pass
+        except:
+            raise
+        return name
--- a/web/lib/django/db/backends/oracle/introspection.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/oracle/introspection.py	Tue May 25 02:43:45 2010 +0200
@@ -29,7 +29,10 @@
     def get_field_type(self, data_type, description):
         # If it's a NUMBER with scale == 0, consider it an IntegerField
         if data_type == cx_Oracle.NUMBER and description[5] == 0:
-            return 'IntegerField'
+            if description[4] > 11:
+                return 'BigIntegerField'
+            else:
+                return 'IntegerField'
         else:
             return super(DatabaseIntrospection, self).get_field_type(
                 data_type, description)
--- a/web/lib/django/db/backends/oracle/query.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-"""
-Custom Query class for Oracle.
-Derives from: django.db.models.sql.query.Query
-"""
-
-import datetime
-
-from django.db.backends import util
-from django.utils.encoding import force_unicode
-
-# Cache. Maps default query class to new Oracle query class.
-_classes = {}
-
-def query_class(QueryClass, Database):
-    """
-    Returns a custom django.db.models.sql.query.Query subclass that is
-    appropriate for Oracle.
-
-    The 'Database' module (cx_Oracle) is passed in here so that all the setup
-    required to import it only needs to be done by the calling module.
-    """
-    global _classes
-    try:
-        return _classes[QueryClass]
-    except KeyError:
-        pass
-
-    class OracleQuery(QueryClass):
-        def __reduce__(self):
-            """
-            Enable pickling for this class (normal pickling handling doesn't
-            work as Python can only pickle module-level classes by default).
-            """
-            if hasattr(QueryClass, '__getstate__'):
-                assert hasattr(QueryClass, '__setstate__')
-                data = self.__getstate__()
-            else:
-                data = self.__dict__
-            return (unpickle_query_class, (QueryClass,), data)
-
-        def resolve_columns(self, row, fields=()):
-            # If this query has limit/offset information, then we expect the
-            # first column to be an extra "_RN" column that we need to throw
-            # away.
-            if self.high_mark is not None or self.low_mark:
-                rn_offset = 1
-            else:
-                rn_offset = 0
-            index_start = rn_offset + len(self.extra_select.keys())
-            values = [self.convert_values(v, None)
-                      for v in row[rn_offset:index_start]]
-            for value, field in map(None, row[index_start:], fields):
-                values.append(self.convert_values(value, field))
-            return tuple(values)
-
-        def convert_values(self, value, field):
-            if isinstance(value, Database.LOB):
-                value = value.read()
-                if field and field.get_internal_type() == 'TextField':
-                    value = force_unicode(value)
-
-            # Oracle stores empty strings as null. We need to undo this in
-            # order to adhere to the Django convention of using the empty
-            # string instead of null, but only if the field accepts the
-            # empty string.
-            if value is None and field and field.empty_strings_allowed:
-                value = u''
-            # Convert 1 or 0 to True or False
-            elif value in (1, 0) and field and field.get_internal_type() in ('BooleanField', 'NullBooleanField'):
-                value = bool(value)
-            # Force floats to the correct type
-            elif value is not None and field and field.get_internal_type() == 'FloatField':
-                value = float(value)
-            # Convert floats to decimals
-            elif value is not None and field and field.get_internal_type() == 'DecimalField':
-                value = util.typecast_decimal(field.format_number(value))
-            # cx_Oracle always returns datetime.datetime objects for
-            # DATE and TIMESTAMP columns, but Django wants to see a
-            # python datetime.date, .time, or .datetime.  We use the type
-            # of the Field to determine which to cast to, but it's not
-            # always available.
-            # As a workaround, we cast to date if all the time-related
-            # values are 0, or to time if the date is 1/1/1900.
-            # This could be cleaned a bit by adding a method to the Field
-            # classes to normalize values from the database (the to_python
-            # method is used for validation and isn't what we want here).
-            elif isinstance(value, Database.Timestamp):
-                # In Python 2.3, the cx_Oracle driver returns its own
-                # Timestamp object that we must convert to a datetime class.
-                if not isinstance(value, datetime.datetime):
-                    value = datetime.datetime(value.year, value.month,
-                            value.day, value.hour, value.minute, value.second,
-                            value.fsecond)
-                if field and field.get_internal_type() == 'DateTimeField':
-                    pass
-                elif field and field.get_internal_type() == 'DateField':
-                    value = value.date()
-                elif field and field.get_internal_type() == 'TimeField' or (value.year == 1900 and value.month == value.day == 1):
-                    value = value.time()
-                elif value.hour == value.minute == value.second == value.microsecond == 0:
-                    value = value.date()
-            return value
-
-        def as_sql(self, with_limits=True, with_col_aliases=False):
-            """
-            Creates the SQL for this query. Returns the SQL string and list
-            of parameters.  This is overriden from the original Query class
-            to handle the additional SQL Oracle requires to emulate LIMIT
-            and OFFSET.
-
-            If 'with_limits' is False, any limit/offset information is not
-            included in the query.
-            """
-
-            # The `do_offset` flag indicates whether we need to construct
-            # the SQL needed to use limit/offset with Oracle.
-            do_offset = with_limits and (self.high_mark is not None
-                                         or self.low_mark)
-            if not do_offset:
-                sql, params = super(OracleQuery, self).as_sql(with_limits=False,
-                        with_col_aliases=with_col_aliases)
-            else:
-                sql, params = super(OracleQuery, self).as_sql(with_limits=False,
-                                                        with_col_aliases=True)
-
-                # Wrap the base query in an outer SELECT * with boundaries on
-                # the "_RN" column.  This is the canonical way to emulate LIMIT
-                # and OFFSET on Oracle.
-                high_where = ''
-                if self.high_mark is not None:
-                    high_where = 'WHERE ROWNUM <= %d' % (self.high_mark,)
-                sql = 'SELECT * FROM (SELECT ROWNUM AS "_RN", "_SUB".* FROM (%s) "_SUB" %s) WHERE "_RN" > %d' % (sql, high_where, self.low_mark)
-
-            return sql, params
-
-    _classes[QueryClass] = OracleQuery
-    return OracleQuery
-
-def unpickle_query_class(QueryClass):
-    """
-    Utility function, called by Python's unpickling machinery, that handles
-    unpickling of Oracle Query subclasses.
-    """
-    # XXX: Would be nice to not have any dependency on cx_Oracle here. Since
-    # modules can't be pickled, we need a way to know to load the right module.
-    import cx_Oracle
-
-    klass = query_class(QueryClass, cx_Oracle)
-    return klass.__new__(klass)
-unpickle_query_class.__safe_for_unpickling__ = True
--- a/web/lib/django/db/backends/postgresql/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/postgresql/base.py	Tue May 25 02:43:45 2010 +0200
@@ -4,6 +4,9 @@
 Requires psycopg 1: http://initd.org/projects/psycopg1
 """
 
+import sys
+
+from django.db import utils
 from django.db.backends import *
 from django.db.backends.signals import connection_created
 from django.db.backends.postgresql.client import DatabaseClient
@@ -50,11 +53,21 @@
             return tuple([smart_str(p, self.charset, True) for p in params])
 
     def execute(self, sql, params=()):
-        return self.cursor.execute(smart_str(sql, self.charset), self.format_params(params))
+        try:
+            return self.cursor.execute(smart_str(sql, self.charset), self.format_params(params))
+        except Database.IntegrityError, e:
+            raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
+        except Database.DatabaseError, e:
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
 
     def executemany(self, sql, param_list):
-        new_param_list = [self.format_params(params) for params in param_list]
-        return self.cursor.executemany(sql, new_param_list)
+        try:
+            new_param_list = [self.format_params(params) for params in param_list]
+            return self.cursor.executemany(sql, new_param_list)
+        except Database.IntegrityError, e:
+            raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
+        except Database.DatabaseError, e:
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
 
     def __getattr__(self, attr):
         if attr in self.__dict__:
@@ -63,7 +76,7 @@
             return getattr(self.cursor, attr)
 
     def __iter__(self):
-        return iter(self.cursor)
+        return iter(self.cursor.fetchall())
 
 class DatabaseFeatures(BaseDatabaseFeatures):
     uses_savepoints = True
@@ -89,44 +102,52 @@
     def __init__(self, *args, **kwargs):
         super(DatabaseWrapper, self).__init__(*args, **kwargs)
 
+        import warnings
+        warnings.warn(
+            'The "postgresql" backend has been deprecated. Use "postgresql_psycopg2" instead.',
+            PendingDeprecationWarning
+        )
+
         self.features = DatabaseFeatures()
-        self.ops = DatabaseOperations()
+        self.ops = DatabaseOperations(self)
         self.client = DatabaseClient(self)
         self.creation = DatabaseCreation(self)
         self.introspection = DatabaseIntrospection(self)
-        self.validation = BaseDatabaseValidation()
+        self.validation = BaseDatabaseValidation(self)
 
     def _cursor(self):
+        new_connection = False
         set_tz = False
         settings_dict = self.settings_dict
         if self.connection is None:
-            set_tz = True
-            if settings_dict['DATABASE_NAME'] == '':
+            new_connection = True
+            set_tz = settings_dict.get('TIME_ZONE')
+            if settings_dict['NAME'] == '':
                 from django.core.exceptions import ImproperlyConfigured
-                raise ImproperlyConfigured("You need to specify DATABASE_NAME in your Django settings file.")
-            conn_string = "dbname=%s" % settings_dict['DATABASE_NAME']
-            if settings_dict['DATABASE_USER']:
-                conn_string = "user=%s %s" % (settings_dict['DATABASE_USER'], conn_string)
-            if settings_dict['DATABASE_PASSWORD']:
-                conn_string += " password='%s'" % settings_dict['DATABASE_PASSWORD']
-            if settings_dict['DATABASE_HOST']:
-                conn_string += " host=%s" % settings_dict['DATABASE_HOST']
-            if settings_dict['DATABASE_PORT']:
-                conn_string += " port=%s" % settings_dict['DATABASE_PORT']
-            self.connection = Database.connect(conn_string, **settings_dict['DATABASE_OPTIONS'])
+                raise ImproperlyConfigured("You need to specify NAME in your Django settings file.")
+            conn_string = "dbname=%s" % settings_dict['NAME']
+            if settings_dict['USER']:
+                conn_string = "user=%s %s" % (settings_dict['USER'], conn_string)
+            if settings_dict['PASSWORD']:
+                conn_string += " password='%s'" % settings_dict['PASSWORD']
+            if settings_dict['HOST']:
+                conn_string += " host=%s" % settings_dict['HOST']
+            if settings_dict['PORT']:
+                conn_string += " port=%s" % settings_dict['PORT']
+            self.connection = Database.connect(conn_string, **settings_dict['OPTIONS'])
             self.connection.set_isolation_level(1) # make transactions transparent to all cursors
             connection_created.send(sender=self.__class__)
         cursor = self.connection.cursor()
-        if set_tz:
-            cursor.execute("SET TIME ZONE %s", [settings_dict['TIME_ZONE']])
+        if new_connection:
+            if set_tz:
+                cursor.execute("SET TIME ZONE %s", [settings_dict['TIME_ZONE']])
             if not hasattr(self, '_version'):
                 self.__class__._version = get_version(cursor)
             if self._version[0:2] < (8, 0):
                 # No savepoint support for earlier version of PostgreSQL.
                 self.features.uses_savepoints = False
-        cursor.execute("SET client_encoding to 'UNICODE'")
-        cursor = UnicodeCursorWrapper(cursor, 'utf-8')
-        return cursor
+            cursor.execute("SET client_encoding to 'UNICODE'")
+        return UnicodeCursorWrapper(cursor, 'utf-8')
 
 def typecast_string(s):
     """
@@ -142,7 +163,7 @@
 try:
     Database.register_type(Database.new_type((1082,), "DATE", util.typecast_date))
 except AttributeError:
-    raise Exception("You appear to be using psycopg version 2. Set your DATABASE_ENGINE to 'postgresql_psycopg2' instead of 'postgresql'.")
+    raise Exception("You appear to be using psycopg version 2. Set your DATABASES.ENGINE to 'postgresql_psycopg2' instead of 'postgresql'.")
 Database.register_type(Database.new_type((1083,1266), "TIME", util.typecast_time))
 Database.register_type(Database.new_type((1114,1184), "TIMESTAMP", util.typecast_timestamp))
 Database.register_type(Database.new_type((16,), "BOOLEAN", util.typecast_boolean))
--- a/web/lib/django/db/backends/postgresql/client.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/postgresql/client.py	Tue May 25 02:43:45 2010 +0200
@@ -9,13 +9,13 @@
     def runshell(self):
         settings_dict = self.connection.settings_dict
         args = [self.executable_name]
-        if settings_dict['DATABASE_USER']:
-            args += ["-U", settings_dict['DATABASE_USER']]
-        if settings_dict['DATABASE_HOST']:
-            args.extend(["-h", settings_dict['DATABASE_HOST']])
-        if settings_dict['DATABASE_PORT']:
-            args.extend(["-p", str(settings_dict['DATABASE_PORT'])])
-        args += [settings_dict['DATABASE_NAME']]
+        if settings_dict['USER']:
+            args += ["-U", settings_dict['USER']]
+        if settings_dict['HOST']:
+            args.extend(["-h", settings_dict['HOST']])
+        if settings_dict['PORT']:
+            args.extend(["-p", str(settings_dict['PORT'])])
+        args += [settings_dict['NAME']]
         if os.name == 'nt':
             sys.exit(os.system(" ".join(args)))
         else:
--- a/web/lib/django/db/backends/postgresql/creation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/postgresql/creation.py	Tue May 25 02:43:45 2010 +0200
@@ -1,4 +1,3 @@
-from django.conf import settings
 from django.db.backends.creation import BaseDatabaseCreation
 
 class DatabaseCreation(BaseDatabaseCreation):
@@ -18,6 +17,7 @@
         'FilePathField':     'varchar(%(max_length)s)',
         'FloatField':        'double precision',
         'IntegerField':      'integer',
+        'BigIntegerField':   'bigint',
         'IPAddressField':    'inet',
         'NullBooleanField':  'boolean',
         'OneToOneField':     'integer',
@@ -30,7 +30,46 @@
     }
 
     def sql_table_creation_suffix(self):
-        assert settings.TEST_DATABASE_COLLATION is None, "PostgreSQL does not support collation setting at database creation time."
-        if settings.TEST_DATABASE_CHARSET:
-            return "WITH ENCODING '%s'" % settings.TEST_DATABASE_CHARSET
+        assert self.connection.settings_dict['TEST_COLLATION'] is None, "PostgreSQL does not support collation setting at database creation time."
+        if self.connection.settings_dict['TEST_CHARSET']:
+            return "WITH ENCODING '%s'" % self.connection.settings_dict['TEST_CHARSET']
         return ''
+
+    def sql_indexes_for_field(self, model, f, style):
+        if f.db_index and not f.unique:
+            qn = self.connection.ops.quote_name
+            db_table = model._meta.db_table
+            tablespace = f.db_tablespace or model._meta.db_tablespace
+            if tablespace:
+                sql = self.connection.ops.tablespace_sql(tablespace)
+                if sql:
+                    tablespace_sql = ' ' + sql
+                else:
+                    tablespace_sql = ''
+            else:
+                tablespace_sql = ''
+
+            def get_index_sql(index_name, opclass=''):
+                return (style.SQL_KEYWORD('CREATE INDEX') + ' ' +
+                        style.SQL_TABLE(qn(index_name)) + ' ' +
+                        style.SQL_KEYWORD('ON') + ' ' +
+                        style.SQL_TABLE(qn(db_table)) + ' ' +
+                        "(%s%s)" % (style.SQL_FIELD(qn(f.column)), opclass) +
+                        "%s;" % tablespace_sql)
+
+            output = [get_index_sql('%s_%s' % (db_table, f.column))]
+
+            # Fields with database column types of `varchar` and `text` need
+            # a second index that specifies their operator class, which is
+            # needed when performing correct LIKE queries outside the
+            # C locale. See #12234.
+            db_type = f.db_type()
+            if db_type.startswith('varchar'):
+                output.append(get_index_sql('%s_%s_like' % (db_table, f.column),
+                                            ' varchar_pattern_ops'))
+            elif db_type.startswith('text'):
+                output.append(get_index_sql('%s_%s_like' % (db_table, f.column),
+                                            ' text_pattern_ops'))
+        else:
+            output = []
+        return output
--- a/web/lib/django/db/backends/postgresql/introspection.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/postgresql/introspection.py	Tue May 25 02:43:45 2010 +0200
@@ -4,6 +4,7 @@
     # Maps type codes to Django Field types.
     data_types_reverse = {
         16: 'BooleanField',
+        20: 'BigIntegerField',
         21: 'SmallIntegerField',
         23: 'IntegerField',
         25: 'TextField',
--- a/web/lib/django/db/backends/postgresql/operations.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/postgresql/operations.py	Tue May 25 02:43:45 2010 +0200
@@ -6,14 +6,15 @@
 # used by both the 'postgresql' and 'postgresql_psycopg2' backends.
 
 class DatabaseOperations(BaseDatabaseOperations):
-    def __init__(self):
+    def __init__(self, connection):
+        super(DatabaseOperations, self).__init__()
         self._postgres_version = None
+        self.connection = connection
 
     def _get_postgres_version(self):
         if self._postgres_version is None:
-            from django.db import connection
             from django.db.backends.postgresql.version import get_version
-            cursor = connection.cursor()
+            cursor = self.connection.cursor()
             self._postgres_version = get_version(cursor)
         return self._postgres_version
     postgres_version = property(_get_postgres_version)
@@ -162,3 +163,17 @@
             if self.postgres_version[0:2] == (8,2):
                 if self.postgres_version[2] is None or self.postgres_version[2] <= 4:
                     raise NotImplementedError('PostgreSQL 8.2 to 8.2.4 is known to have a faulty implementation of %s. Please upgrade your version of PostgreSQL.' % aggregate.sql_function)
+
+    def max_name_length(self):
+        """
+        Returns the maximum length of an identifier.
+
+        Note that the maximum length of an identifier is 63 by default, but can
+        be changed by recompiling PostgreSQL after editing the NAMEDATALEN
+        macro in src/include/pg_config_manual.h .
+
+        This implementation simply returns 63, but can easily be overridden by a
+        custom database backend that inherits most of its behavior from this one.
+        """
+
+        return 63
--- a/web/lib/django/db/backends/postgresql_psycopg2/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/postgresql_psycopg2/base.py	Tue May 25 02:43:45 2010 +0200
@@ -4,7 +4,9 @@
 Requires psycopg 2: http://initd.org/projects/psycopg2
 """
 
-from django.conf import settings
+import sys
+
+from django.db import utils
 from django.db.backends import *
 from django.db.backends.signals import connection_created
 from django.db.backends.postgresql.operations import DatabaseOperations as PostgresqlDatabaseOperations
@@ -28,6 +30,40 @@
 psycopg2.extensions.register_adapter(SafeString, psycopg2.extensions.QuotedString)
 psycopg2.extensions.register_adapter(SafeUnicode, psycopg2.extensions.QuotedString)
 
+class CursorWrapper(object):
+    """
+    A thin wrapper around psycopg2's normal cursor class so that we can catch
+    particular exception instances and reraise them with the right types.
+    """
+
+    def __init__(self, cursor):
+        self.cursor = cursor
+
+    def execute(self, query, args=None):
+        try:
+            return self.cursor.execute(query, args)
+        except Database.IntegrityError, e:
+            raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
+        except Database.DatabaseError, e:
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
+
+    def executemany(self, query, args):
+        try:
+            return self.cursor.executemany(query, args)
+        except Database.IntegrityError, e:
+            raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
+        except Database.DatabaseError, e:
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
+
+    def __getattr__(self, attr):
+        if attr in self.__dict__:
+            return self.__dict__[attr]
+        else:
+            return getattr(self.cursor, attr)
+
+    def __iter__(self):
+        return iter(self.cursor)
+
 class DatabaseFeatures(BaseDatabaseFeatures):
     needs_datetime_string_cast = False
     can_return_id_from_insert = False
@@ -64,45 +100,48 @@
         super(DatabaseWrapper, self).__init__(*args, **kwargs)
 
         self.features = DatabaseFeatures()
-        autocommit = self.settings_dict["DATABASE_OPTIONS"].get('autocommit', False)
+        autocommit = self.settings_dict["OPTIONS"].get('autocommit', False)
         self.features.uses_autocommit = autocommit
         self._set_isolation_level(int(not autocommit))
-        self.ops = DatabaseOperations()
+        self.ops = DatabaseOperations(self)
         self.client = DatabaseClient(self)
         self.creation = DatabaseCreation(self)
         self.introspection = DatabaseIntrospection(self)
-        self.validation = BaseDatabaseValidation()
+        self.validation = BaseDatabaseValidation(self)
 
     def _cursor(self):
+        new_connection = False
         set_tz = False
         settings_dict = self.settings_dict
         if self.connection is None:
-            set_tz = True
-            if settings_dict['DATABASE_NAME'] == '':
+            new_connection = True
+            set_tz = settings_dict.get('TIME_ZONE')
+            if settings_dict['NAME'] == '':
                 from django.core.exceptions import ImproperlyConfigured
-                raise ImproperlyConfigured("You need to specify DATABASE_NAME in your Django settings file.")
+                raise ImproperlyConfigured("You need to specify NAME in your Django settings file.")
             conn_params = {
-                'database': settings_dict['DATABASE_NAME'],
+                'database': settings_dict['NAME'],
             }
-            conn_params.update(settings_dict['DATABASE_OPTIONS'])
+            conn_params.update(settings_dict['OPTIONS'])
             if 'autocommit' in conn_params:
                 del conn_params['autocommit']
-            if settings_dict['DATABASE_USER']:
-                conn_params['user'] = settings_dict['DATABASE_USER']
-            if settings_dict['DATABASE_PASSWORD']:
-                conn_params['password'] = settings_dict['DATABASE_PASSWORD']
-            if settings_dict['DATABASE_HOST']:
-                conn_params['host'] = settings_dict['DATABASE_HOST']
-            if settings_dict['DATABASE_PORT']:
-                conn_params['port'] = settings_dict['DATABASE_PORT']
+            if settings_dict['USER']:
+                conn_params['user'] = settings_dict['USER']
+            if settings_dict['PASSWORD']:
+                conn_params['password'] = settings_dict['PASSWORD']
+            if settings_dict['HOST']:
+                conn_params['host'] = settings_dict['HOST']
+            if settings_dict['PORT']:
+                conn_params['port'] = settings_dict['PORT']
             self.connection = Database.connect(**conn_params)
             self.connection.set_client_encoding('UTF8')
             self.connection.set_isolation_level(self.isolation_level)
             connection_created.send(sender=self.__class__)
         cursor = self.connection.cursor()
         cursor.tzinfo_factory = None
-        if set_tz:
-            cursor.execute("SET TIME ZONE %s", [settings_dict['TIME_ZONE']])
+        if new_connection:
+            if set_tz:
+                cursor.execute("SET TIME ZONE %s", [settings_dict['TIME_ZONE']])
             if not hasattr(self, '_version'):
                 self.__class__._version = get_version(cursor)
             if self._version[0:2] < (8, 0):
@@ -119,7 +158,7 @@
                     # versions that support it, but, right now, that's hard to
                     # do without breaking other things (#10509).
                     self.features.can_return_id_from_insert = True
-        return cursor
+        return CursorWrapper(cursor)
 
     def _enter_transaction_management(self, managed):
         """
@@ -150,4 +189,3 @@
         finally:
             self.isolation_level = level
             self.features.uses_savepoints = bool(level)
-
--- a/web/lib/django/db/backends/sqlite3/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/sqlite3/base.py	Tue May 25 02:43:45 2010 +0200
@@ -1,12 +1,16 @@
 """
 SQLite3 backend for django.
 
-Python 2.3 and 2.4 require pysqlite2 (http://pysqlite.org/).
+Python 2.4 requires pysqlite2 (http://pysqlite.org/).
 
 Python 2.5 and later can use a pysqlite2 module or the sqlite3 module in the
 standard library.
 """
 
+import re
+import sys
+
+from django.db import utils
 from django.db.backends import *
 from django.db.backends.signals import connection_created
 from django.db.backends.sqlite3.client import DatabaseClient
@@ -27,12 +31,8 @@
         exc = e1
     else:
         module = 'either pysqlite2 or sqlite3 modules (tried in that order)'
-    raise ImproperlyConfigured, "Error loading %s: %s" % (module, exc)
+    raise ImproperlyConfigured("Error loading %s: %s" % (module, exc))
 
-try:
-    import decimal
-except ImportError:
-    from django.utils import _decimal as decimal # for Python 2.3
 
 DatabaseError = Database.DatabaseError
 IntegrityError = Database.IntegrityError
@@ -64,13 +64,17 @@
 class DatabaseOperations(BaseDatabaseOperations):
     def date_extract_sql(self, lookup_type, field_name):
         # sqlite doesn't support extract, so we fake it with the user-defined
-        # function django_extract that's registered in connect().
-        return 'django_extract("%s", %s)' % (lookup_type.lower(), field_name)
+        # function django_extract that's registered in connect(). Note that
+        # single quotes are used because this is a string (and could otherwise
+        # cause a collision with a field name).
+        return "django_extract('%s', %s)" % (lookup_type.lower(), field_name)
 
     def date_trunc_sql(self, lookup_type, field_name):
         # sqlite doesn't support DATE_TRUNC, so we fake it with a user-defined
-        # function django_date_trunc that's registered in connect().
-        return 'django_date_trunc("%s", %s)' % (lookup_type.lower(), field_name)
+        # function django_date_trunc that's registered in connect(). Note that
+        # single quotes are used because this is a string (and could otherwise
+        # cause a collision with a field name).
+        return "django_date_trunc('%s', %s)" % (lookup_type.lower(), field_name)
 
     def drop_foreignkey_sql(self):
         return ""
@@ -154,19 +158,19 @@
         self.client = DatabaseClient(self)
         self.creation = DatabaseCreation(self)
         self.introspection = DatabaseIntrospection(self)
-        self.validation = BaseDatabaseValidation()
+        self.validation = BaseDatabaseValidation(self)
 
     def _cursor(self):
         if self.connection is None:
             settings_dict = self.settings_dict
-            if not settings_dict['DATABASE_NAME']:
+            if not settings_dict['NAME']:
                 from django.core.exceptions import ImproperlyConfigured
-                raise ImproperlyConfigured, "Please fill out DATABASE_NAME in the settings module before using the database."
+                raise ImproperlyConfigured("Please fill out the database NAME in the settings module before using the database.")
             kwargs = {
-                'database': settings_dict['DATABASE_NAME'],
+                'database': settings_dict['NAME'],
                 'detect_types': Database.PARSE_DECLTYPES | Database.PARSE_COLNAMES,
             }
-            kwargs.update(settings_dict['DATABASE_OPTIONS'])
+            kwargs.update(settings_dict['OPTIONS'])
             self.connection = Database.connect(**kwargs)
             # Register extract, date_trunc, and regexp functions.
             self.connection.create_function("django_extract", 2, _sqlite_extract)
@@ -179,9 +183,11 @@
         # If database is in memory, closing the connection destroys the
         # database. To prevent accidental data loss, ignore close requests on
         # an in-memory db.
-        if self.settings_dict['DATABASE_NAME'] != ":memory:":
+        if self.settings_dict['NAME'] != ":memory:":
             BaseDatabaseWrapper.close(self)
 
+FORMAT_QMARK_REGEX = re.compile(r'(?![^%])%s')
+
 class SQLiteCursorWrapper(Database.Cursor):
     """
     Django uses "format" style placeholders, but pysqlite2 uses "qmark" style.
@@ -189,19 +195,25 @@
     you'll need to use "%%s".
     """
     def execute(self, query, params=()):
-        query = self.convert_query(query, len(params))
-        return Database.Cursor.execute(self, query, params)
+        query = self.convert_query(query)
+        try:
+            return Database.Cursor.execute(self, query, params)
+        except Database.IntegrityError, e:
+            raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
+        except Database.DatabaseError, e:
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
 
     def executemany(self, query, param_list):
+        query = self.convert_query(query)
         try:
-          query = self.convert_query(query, len(param_list[0]))
-          return Database.Cursor.executemany(self, query, param_list)
-        except (IndexError,TypeError):
-          # No parameter list provided
-          return None
+            return Database.Cursor.executemany(self, query, param_list)
+        except Database.IntegrityError, e:
+            raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
+        except Database.DatabaseError, e:
+            raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]
 
-    def convert_query(self, query, num_params):
-        return query % tuple("?" * num_params)
+    def convert_query(self, query):
+        return FORMAT_QMARK_REGEX.sub('?', query).replace('%%','%')
 
 def _sqlite_extract(lookup_type, dt):
     if dt is None:
--- a/web/lib/django/db/backends/sqlite3/client.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/sqlite3/client.py	Tue May 25 02:43:45 2010 +0200
@@ -8,7 +8,7 @@
 
     def runshell(self):
         args = [self.executable_name,
-                self.connection.settings_dict['DATABASE_NAME']]
+                self.connection.settings_dict['NAME']]
         if os.name == 'nt':
             sys.exit(os.system(" ".join(args)))
         else:
--- a/web/lib/django/db/backends/sqlite3/creation.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/sqlite3/creation.py	Tue May 25 02:43:45 2010 +0200
@@ -1,6 +1,5 @@
 import os
 import sys
-from django.conf import settings
 from django.db.backends.creation import BaseDatabaseCreation
 
 class DatabaseCreation(BaseDatabaseCreation):
@@ -19,6 +18,7 @@
         'FilePathField':                'varchar(%(max_length)s)',
         'FloatField':                   'real',
         'IntegerField':                 'integer',
+        'BigIntegerField':              'bigint',
         'IPAddressField':               'char(15)',
         'NullBooleanField':             'bool',
         'OneToOneField':                'integer',
@@ -29,7 +29,7 @@
         'TextField':                    'text',
         'TimeField':                    'time',
     }
-    
+
     def sql_for_pending_references(self, model, style, pending_references):
         "SQLite3 doesn't support constraints"
         return []
@@ -37,10 +37,10 @@
     def sql_remove_table_constraints(self, model, references_to_delete, style):
         "SQLite3 doesn't support constraints"
         return []
-        
+
     def _create_test_db(self, verbosity, autoclobber):
-        if settings.TEST_DATABASE_NAME and settings.TEST_DATABASE_NAME != ":memory:":
-            test_database_name = settings.TEST_DATABASE_NAME
+        test_database_name = self.connection.settings_dict['TEST_NAME']
+        if test_database_name and test_database_name != ":memory:":
             # Erase the old test database
             if verbosity >= 1:
                 print "Destroying old test database..."
@@ -63,7 +63,7 @@
         else:
             test_database_name = ":memory:"
         return test_database_name
-        
+
     def _destroy_test_db(self, test_database_name, verbosity):
         if test_database_name and test_database_name != ":memory:":
             # Remove the SQLite database file
--- a/web/lib/django/db/backends/sqlite3/introspection.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/sqlite3/introspection.py	Tue May 25 02:43:45 2010 +0200
@@ -16,6 +16,7 @@
         'smallinteger': 'SmallIntegerField',
         'int': 'IntegerField',
         'integer': 'IntegerField',
+        'bigint': 'BigIntegerField',
         'integer unsigned': 'PositiveIntegerField',
         'decimal': 'DecimalField',
         'real': 'FloatField',
@@ -65,7 +66,7 @@
         relations = {}
 
         # Schema for this table
-        cursor.execute("SELECT sql FROM sqlite_master WHERE tbl_name = %s", [table_name])
+        cursor.execute("SELECT sql FROM sqlite_master WHERE tbl_name = %s AND type = %s", [table_name, "table"])
         results = cursor.fetchone()[0].strip()
         results = results[results.index('(')+1:results.rindex(')')]
 
--- a/web/lib/django/db/backends/util.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/backends/util.py	Tue May 25 02:43:45 2010 +0200
@@ -1,13 +1,9 @@
 import datetime
+import decimal
 from time import time
 
 from django.utils.hashcompat import md5_constructor
 
-try:
-    import decimal
-except ImportError:
-    from django.utils import _decimal as decimal    # for Python 2.3
-
 class CursorDebugWrapper(object):
     def __init__(self, cursor, db):
         self.cursor = cursor
--- a/web/lib/django/db/models/aggregates.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/aggregates.py	Tue May 25 02:43:45 2010 +0200
@@ -43,9 +43,6 @@
         """
         klass = getattr(query.aggregates_module, self.name)
         aggregate = klass(col, source=source, is_summary=is_summary, **self.extra)
-        # Validate that the backend has a fully supported, correct
-        # implementation of this aggregate
-        query.connection.ops.check_aggregate_support(aggregate)
         query.aggregates[alias] = aggregate
 
 class Avg(Aggregate):
--- a/web/lib/django/db/models/base.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/base.py	Tue May 25 02:43:45 2010 +0200
@@ -1,28 +1,25 @@
-import copy
 import types
 import sys
 import os
 from itertools import izip
-try:
-    set
-except NameError:
-    from sets import Set as set     # Python 2.3 fallback.
-
 import django.db.models.manager     # Imported to register signal handler.
-from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, FieldError
+from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned, FieldError, ValidationError, NON_FIELD_ERRORS
+from django.core import validators
 from django.db.models.fields import AutoField, FieldDoesNotExist
 from django.db.models.fields.related import OneToOneRel, ManyToOneRel, OneToOneField
 from django.db.models.query import delete_objects, Q
 from django.db.models.query_utils import CollectedObjects, DeferredAttribute
 from django.db.models.options import Options
-from django.db import connection, transaction, DatabaseError
+from django.db import connections, router, transaction, DatabaseError, DEFAULT_DB_ALIAS
 from django.db.models import signals
 from django.db.models.loading import register_models, get_model
-from django.utils.functional import curry
+from django.utils.translation import ugettext_lazy as _
+import django.utils.copycompat as copy
+from django.utils.functional import curry, update_wrapper
 from django.utils.encoding import smart_str, force_unicode, smart_unicode
+from django.utils.text import get_text_list, capfirst
 from django.conf import settings
 
-
 class ModelBase(type):
     """
     Metaclass for all models.
@@ -55,10 +52,14 @@
 
         new_class.add_to_class('_meta', Options(meta, **kwargs))
         if not abstract:
-            new_class.add_to_class('DoesNotExist',
-                    subclass_exception('DoesNotExist', ObjectDoesNotExist, module))
-            new_class.add_to_class('MultipleObjectsReturned',
-                    subclass_exception('MultipleObjectsReturned', MultipleObjectsReturned, module))
+            new_class.add_to_class('DoesNotExist', subclass_exception('DoesNotExist',
+                    tuple(x.DoesNotExist
+                            for x in parents if hasattr(x, '_meta') and not x._meta.abstract)
+                                    or (ObjectDoesNotExist,), module))
+            new_class.add_to_class('MultipleObjectsReturned', subclass_exception('MultipleObjectsReturned',
+                    tuple(x.MultipleObjectsReturned
+                            for x in parents if hasattr(x, '_meta') and not x._meta.abstract)
+                                    or (MultipleObjectsReturned,), module))
             if base_meta and not base_meta.abstract:
                 # Non-abstract child classes inherit some attributes from their
                 # non-abstract parent (unless an ABC comes before it in the
@@ -114,8 +115,7 @@
                     raise TypeError("Proxy model '%s' has no non-abstract model base class." % name)
             if (new_class._meta.local_fields or
                     new_class._meta.local_many_to_many):
-                raise FieldError("Proxy model '%s' contains model fields."
-                        % name)
+                raise FieldError("Proxy model '%s' contains model fields." % name)
             while base._meta.proxy:
                 base = base._meta.proxy_for_model
             new_class._meta.setup_proxy(base)
@@ -232,10 +232,17 @@
             cls.__doc__ = "%s(%s)" % (cls.__name__, ", ".join([f.attname for f in opts.fields]))
 
         if hasattr(cls, 'get_absolute_url'):
-            cls.get_absolute_url = curry(get_absolute_url, opts, cls.get_absolute_url)
+            cls.get_absolute_url = update_wrapper(curry(get_absolute_url, opts, cls.get_absolute_url),
+                                                  cls.get_absolute_url)
 
         signals.class_prepared.send(sender=cls)
 
+class ModelState(object):
+    """
+    A class for storing instance state
+    """
+    def __init__(self, db=None):
+        self.db = db
 
 class Model(object):
     __metaclass__ = ModelBase
@@ -244,6 +251,9 @@
     def __init__(self, *args, **kwargs):
         signals.pre_init.send(sender=self.__class__, args=args, kwargs=kwargs)
 
+        # Set up the storage for instance state
+        self._state = ModelState()
+
         # There is a rather weird disparity here; if kwargs, it's set, then args
         # overrides it. It should be one or the other; don't duplicate the work
         # The reason for the kwargs check is that standard iterator passes in by
@@ -300,7 +310,14 @@
                         if rel_obj is None and field.null:
                             val = None
                 else:
-                    val = kwargs.pop(field.attname, field.get_default())
+                    try:
+                        val = kwargs.pop(field.attname)
+                    except KeyError:
+                        # This is done with an exception rather than the
+                        # default argument on pop because we don't want
+                        # get_default() to be evaluated, and then not used.
+                        # Refs #12057.
+                        val = field.get_default()
             else:
                 val = field.get_default()
             if is_related_object:
@@ -320,7 +337,7 @@
                 except AttributeError:
                     pass
             if kwargs:
-                raise TypeError, "'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]
+                raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0])
         signals.post_init.send(sender=self.__class__, instance=self)
 
     def __repr__(self):
@@ -352,21 +369,30 @@
         only module-level classes can be pickled by the default path.
         """
         data = self.__dict__
-        if not self._deferred:
-            return (self.__class__, (), data)
+        model = self.__class__
+        # The obvious thing to do here is to invoke super().__reduce__()
+        # for the non-deferred case. Don't do that.
+        # On Python 2.4, there is something wierd with __reduce__,
+        # and as a result, the super call will cause an infinite recursion.
+        # See #10547 and #12121.
         defers = []
         pk_val = None
-        for field in self._meta.fields:
-            if isinstance(self.__class__.__dict__.get(field.attname),
-                    DeferredAttribute):
-                defers.append(field.attname)
-                if pk_val is None:
-                    # The pk_val and model values are the same for all
-                    # DeferredAttribute classes, so we only need to do this
-                    # once.
-                    obj = self.__class__.__dict__[field.attname]
-                    model = obj.model_ref()
-        return (model_unpickle, (model, defers), data)
+        if self._deferred:
+            from django.db.models.query_utils import deferred_class_factory
+            factory = deferred_class_factory
+            for field in self._meta.fields:
+                if isinstance(self.__class__.__dict__.get(field.attname),
+                        DeferredAttribute):
+                    defers.append(field.attname)
+                    if pk_val is None:
+                        # The pk_val and model values are the same for all
+                        # DeferredAttribute classes, so we only need to do this
+                        # once.
+                        obj = self.__class__.__dict__[field.attname]
+                        model = obj.model_ref()
+        else:
+            factory = simple_class_factory
+        return (model_unpickle, (model, defers, factory), data)
 
     def _get_pk_val(self, meta=None):
         if not meta:
@@ -395,7 +421,7 @@
             return getattr(self, field_name)
         return getattr(self, field.attname)
 
-    def save(self, force_insert=False, force_update=False):
+    def save(self, force_insert=False, force_update=False, using=None):
         """
         Saves the current instance. Override this in a subclass if you want to
         control the saving process.
@@ -405,20 +431,21 @@
         non-SQL backends), respectively. Normally, they should not be set.
         """
         if force_insert and force_update:
-            raise ValueError("Cannot force both insert and updating in "
-                    "model saving.")
-        self.save_base(force_insert=force_insert, force_update=force_update)
+            raise ValueError("Cannot force both insert and updating in model saving.")
+        self.save_base(using=using, force_insert=force_insert, force_update=force_update)
 
     save.alters_data = True
 
-    def save_base(self, raw=False, cls=None, origin=None,
-            force_insert=False, force_update=False):
+    def save_base(self, raw=False, cls=None, origin=None, force_insert=False,
+            force_update=False, using=None):
         """
         Does the heavy-lifting involved in saving. Subclasses shouldn't need to
         override this method. It's separate from save() in order to hide the
         need for overrides of save() to pass around internal-only parameters
         ('raw', 'cls', and 'origin').
         """
+        using = using or router.db_for_write(self.__class__, instance=self)
+        connection = connections[using]
         assert not (force_insert and force_update)
         if cls is None:
             cls = self.__class__
@@ -428,7 +455,7 @@
         else:
             meta = cls._meta
 
-        if origin:
+        if origin and not meta.auto_created:
             signals.pre_save.send(sender=origin, instance=self, raw=raw)
 
         # If we are in a raw save, save the object exactly as presented.
@@ -449,7 +476,7 @@
                 if field and getattr(self, parent._meta.pk.attname) is None and getattr(self, field.attname) is not None:
                     setattr(self, parent._meta.pk.attname, getattr(self, field.attname))
 
-                self.save_base(cls=parent, origin=org)
+                self.save_base(cls=parent, origin=org, using=using)
 
                 if field:
                     setattr(self, field.attname, self._get_pk_val(parent._meta))
@@ -467,41 +494,51 @@
             if pk_set:
                 # Determine whether a record with the primary key already exists.
                 if (force_update or (not force_insert and
-                        manager.filter(pk=pk_val).extra(select={'a': 1}).values('a').order_by())):
+                        manager.using(using).filter(pk=pk_val).exists())):
                     # It does already exist, so do an UPDATE.
                     if force_update or non_pks:
                         values = [(f, None, (raw and getattr(self, f.attname) or f.pre_save(self, False))) for f in non_pks]
-                        rows = manager.filter(pk=pk_val)._update(values)
+                        rows = manager.using(using).filter(pk=pk_val)._update(values)
                         if force_update and not rows:
                             raise DatabaseError("Forced update did not affect any rows.")
                 else:
                     record_exists = False
             if not pk_set or not record_exists:
+                if meta.order_with_respect_to:
+                    # If this is a model with an order_with_respect_to
+                    # autopopulate the _order field
+                    field = meta.order_with_respect_to
+                    order_value = manager.using(using).filter(**{field.name: getattr(self, field.attname)}).count()
+                    setattr(self, '_order', order_value)
+
                 if not pk_set:
                     if force_update:
                         raise ValueError("Cannot force an update in save() with no primary key.")
-                    values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True))) for f in meta.local_fields if not isinstance(f, AutoField)]
+                    values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True), connection=connection))
+                        for f in meta.local_fields if not isinstance(f, AutoField)]
                 else:
-                    values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True))) for f in meta.local_fields]
+                    values = [(f, f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, True), connection=connection))
+                        for f in meta.local_fields]
 
-                if meta.order_with_respect_to:
-                    field = meta.order_with_respect_to
-                    values.append((meta.get_field_by_name('_order')[0], manager.filter(**{field.name: getattr(self, field.attname)}).count()))
                 record_exists = False
 
                 update_pk = bool(meta.has_auto_field and not pk_set)
                 if values:
                     # Create a new record.
-                    result = manager._insert(values, return_id=update_pk)
+                    result = manager._insert(values, return_id=update_pk, using=using)
                 else:
                     # Create a new record with defaults for everything.
-                    result = manager._insert([(meta.pk, connection.ops.pk_default_value())], return_id=update_pk, raw_values=True)
+                    result = manager._insert([(meta.pk, connection.ops.pk_default_value())], return_id=update_pk, raw_values=True, using=using)
 
                 if update_pk:
                     setattr(self, meta.pk.attname, result)
-            transaction.commit_unless_managed()
+            transaction.commit_unless_managed(using=using)
 
-        if origin:
+        # Store the database on which the object was saved
+        self._state.db = using
+
+        # Signal that the save is complete
+        if origin and not meta.auto_created:
             signals.post_save.send(sender=origin, instance=self,
                 created=(not record_exists), raw=raw)
 
@@ -517,18 +554,19 @@
              (model_class, {pk_val: obj, pk_val: obj, ...}), ...]
         """
         pk_val = self._get_pk_val()
-        if seen_objs.add(self.__class__, pk_val, self, parent, nullable):
+        if seen_objs.add(self.__class__, pk_val, self,
+                         type(parent), parent, nullable):
             return
 
         for related in self._meta.get_all_related_objects():
             rel_opts_name = related.get_accessor_name()
-            if isinstance(related.field.rel, OneToOneRel):
+            if not related.field.rel.multiple:
                 try:
                     sub_obj = getattr(self, rel_opts_name)
                 except ObjectDoesNotExist:
                     pass
                 else:
-                    sub_obj._collect_sub_objects(seen_objs, self.__class__, related.field.null)
+                    sub_obj._collect_sub_objects(seen_objs, self, related.field.null)
             else:
                 # To make sure we can access all elements, we can't use the
                 # normal manager on the related object. So we work directly
@@ -538,10 +576,39 @@
                         rel_descriptor = cls.__dict__[rel_opts_name]
                         break
                 else:
-                    raise AssertionError("Should never get here.")
+                    # in the case of a hidden fkey just skip it, it'll get
+                    # processed as an m2m
+                    if not related.field.rel.is_hidden():
+                        raise AssertionError("Should never get here.")
+                    else:
+                        continue
                 delete_qs = rel_descriptor.delete_manager(self).all()
                 for sub_obj in delete_qs:
-                    sub_obj._collect_sub_objects(seen_objs, self.__class__, related.field.null)
+                    sub_obj._collect_sub_objects(seen_objs, self, related.field.null)
+
+        for related in self._meta.get_all_related_many_to_many_objects():
+            if related.field.rel.through:
+                opts = related.field.rel.through._meta
+                reverse_field_name = related.field.m2m_reverse_field_name()
+                nullable = opts.get_field(reverse_field_name).null
+                filters = {reverse_field_name: self}
+                for sub_obj in related.field.rel.through._base_manager.filter(**filters):
+                    sub_obj._collect_sub_objects(seen_objs, self, nullable)
+
+        for f in self._meta.many_to_many:
+            if f.rel.through:
+                opts = f.rel.through._meta
+                field_name = f.m2m_field_name()
+                nullable = opts.get_field(field_name).null
+                filters = {field_name: self}
+                for sub_obj in f.rel.through._base_manager.filter(**filters):
+                    sub_obj._collect_sub_objects(seen_objs, self, nullable)
+            else:
+                # m2m-ish but with no through table? GenericRelation: cascade delete
+                for sub_obj in f.value_from_object(self).all():
+                    # Generic relations not enforced by db constraints, thus we can set
+                    # nullable=True, order does not matter
+                    sub_obj._collect_sub_objects(seen_objs, self, True)
 
         # Handle any ancestors (for the model-inheritance case). We do this by
         # traversing to the most remote parent classes -- those with no parents
@@ -558,7 +625,9 @@
             # delete it and all its descendents.
             parent_obj._collect_sub_objects(seen_objs)
 
-    def delete(self):
+    def delete(self, using=None):
+        using = using or router.db_for_write(self.__class__, instance=self)
+        connection = connections[using]
         assert self._get_pk_val() is not None, "%s object can't be deleted because its %s attribute is set to None." % (self._meta.object_name, self._meta.pk.attname)
 
         # Find all the objects than need to be deleted.
@@ -566,7 +635,7 @@
         self._collect_sub_objects(seen_objs)
 
         # Actually delete the objects.
-        delete_objects(seen_objs)
+        delete_objects(seen_objs, using)
 
     delete.alters_data = True
 
@@ -580,32 +649,262 @@
         param = smart_str(getattr(self, field.attname))
         q = Q(**{'%s__%s' % (field.name, op): param})
         q = q|Q(**{field.name: param, 'pk__%s' % op: self.pk})
-        qs = self.__class__._default_manager.filter(**kwargs).filter(q).order_by('%s%s' % (order, field.name), '%spk' % order)
+        qs = self.__class__._default_manager.using(self._state.db).filter(**kwargs).filter(q).order_by('%s%s' % (order, field.name), '%spk' % order)
         try:
             return qs[0]
         except IndexError:
-            raise self.DoesNotExist, "%s matching query does not exist." % self.__class__._meta.object_name
+            raise self.DoesNotExist("%s matching query does not exist." % self.__class__._meta.object_name)
 
     def _get_next_or_previous_in_order(self, is_next):
         cachename = "__%s_order_cache" % is_next
         if not hasattr(self, cachename):
-            qn = connection.ops.quote_name
-            op = is_next and '>' or '<'
+            op = is_next and 'gt' or 'lt'
             order = not is_next and '-_order' or '_order'
             order_field = self._meta.order_with_respect_to
-            # FIXME: When querysets support nested queries, this can be turned
-            # into a pure queryset operation.
-            where = ['%s %s (SELECT %s FROM %s WHERE %s=%%s)' % \
-                (qn('_order'), op, qn('_order'),
-                qn(self._meta.db_table), qn(self._meta.pk.column))]
-            params = [self.pk]
-            obj = self._default_manager.filter(**{order_field.name: getattr(self, order_field.attname)}).extra(where=where, params=params).order_by(order)[:1].get()
+            obj = self._default_manager.filter(**{
+                order_field.name: getattr(self, order_field.attname)
+            }).filter(**{
+                '_order__%s' % op: self._default_manager.values('_order').filter(**{
+                    self._meta.pk.name: self.pk
+                })
+            }).order_by(order)[:1].get()
             setattr(self, cachename, obj)
         return getattr(self, cachename)
 
     def prepare_database_save(self, unused):
         return self.pk
 
+    def clean(self):
+        """
+        Hook for doing any extra model-wide validation after clean() has been
+        called on every field by self.clean_fields. Any ValidationError raised
+        by this method will not be associated with a particular field; it will
+        have a special-case association with the field defined by NON_FIELD_ERRORS.
+        """
+        pass
+
+    def validate_unique(self, exclude=None):
+        """
+        Checks unique constraints on the model and raises ``ValidationError``
+        if any failed.
+        """
+        unique_checks, date_checks = self._get_unique_checks(exclude=exclude)
+
+        errors = self._perform_unique_checks(unique_checks)
+        date_errors = self._perform_date_checks(date_checks)
+
+        for k, v in date_errors.items():
+            errors.setdefault(k, []).extend(v)
+
+        if errors:
+            raise ValidationError(errors)
+
+    def _get_unique_checks(self, exclude=None):
+        """
+        Gather a list of checks to perform. Since validate_unique could be
+        called from a ModelForm, some fields may have been excluded; we can't
+        perform a unique check on a model that is missing fields involved
+        in that check.
+        Fields that did not validate should also be exluded, but they need
+        to be passed in via the exclude argument.
+        """
+        if exclude is None:
+            exclude = []
+        unique_checks = []
+
+        unique_togethers = [(self.__class__, self._meta.unique_together)]
+        for parent_class in self._meta.parents.keys():
+            if parent_class._meta.unique_together:
+                unique_togethers.append((parent_class, parent_class._meta.unique_together))
+
+        for model_class, unique_together in unique_togethers:
+            for check in unique_together:
+                for name in check:
+                    # If this is an excluded field, don't add this check.
+                    if name in exclude:
+                        break
+                else:
+                    unique_checks.append((model_class, tuple(check)))
+
+        # These are checks for the unique_for_<date/year/month>.
+        date_checks = []
+
+        # Gather a list of checks for fields declared as unique and add them to
+        # the list of checks.
+
+        fields_with_class = [(self.__class__, self._meta.local_fields)]
+        for parent_class in self._meta.parents.keys():
+            fields_with_class.append((parent_class, parent_class._meta.local_fields))
+
+        for model_class, fields in fields_with_class:
+            for f in fields:
+                name = f.name
+                if name in exclude:
+                    continue
+                if f.unique:
+                    unique_checks.append((model_class, (name,)))
+                if f.unique_for_date:
+                    date_checks.append((model_class, 'date', name, f.unique_for_date))
+                if f.unique_for_year:
+                    date_checks.append((model_class, 'year', name, f.unique_for_year))
+                if f.unique_for_month:
+                    date_checks.append((model_class, 'month', name, f.unique_for_month))
+        return unique_checks, date_checks
+
+    def _perform_unique_checks(self, unique_checks):
+        errors = {}
+
+        for model_class, unique_check in unique_checks:
+            # Try to look up an existing object with the same values as this
+            # object's values for all the unique field.
+
+            lookup_kwargs = {}
+            for field_name in unique_check:
+                f = self._meta.get_field(field_name)
+                lookup_value = getattr(self, f.attname)
+                if lookup_value is None:
+                    # no value, skip the lookup
+                    continue
+                if f.primary_key and not getattr(self, '_adding', False):
+                    # no need to check for unique primary key when editing
+                    continue
+                lookup_kwargs[str(field_name)] = lookup_value
+
+            # some fields were skipped, no reason to do the check
+            if len(unique_check) != len(lookup_kwargs.keys()):
+                continue
+
+            qs = model_class._default_manager.filter(**lookup_kwargs)
+
+            # Exclude the current object from the query if we are editing an
+            # instance (as opposed to creating a new one)
+            if not getattr(self, '_adding', False) and self.pk is not None:
+                qs = qs.exclude(pk=self.pk)
+
+            if qs.exists():
+                if len(unique_check) == 1:
+                    key = unique_check[0]
+                else:
+                    key = NON_FIELD_ERRORS
+                errors.setdefault(key, []).append(self.unique_error_message(model_class, unique_check))
+
+        return errors
+
+    def _perform_date_checks(self, date_checks):
+        errors = {}
+        for model_class, lookup_type, field, unique_for in date_checks:
+            lookup_kwargs = {}
+            # there's a ticket to add a date lookup, we can remove this special
+            # case if that makes it's way in
+            date = getattr(self, unique_for)
+            if lookup_type == 'date':
+                lookup_kwargs['%s__day' % unique_for] = date.day
+                lookup_kwargs['%s__month' % unique_for] = date.month
+                lookup_kwargs['%s__year' % unique_for] = date.year
+            else:
+                lookup_kwargs['%s__%s' % (unique_for, lookup_type)] = getattr(date, lookup_type)
+            lookup_kwargs[field] = getattr(self, field)
+
+            qs = model_class._default_manager.filter(**lookup_kwargs)
+            # Exclude the current object from the query if we are editing an
+            # instance (as opposed to creating a new one)
+            if not getattr(self, '_adding', False) and self.pk is not None:
+                qs = qs.exclude(pk=self.pk)
+
+            if qs.exists():
+                errors.setdefault(field, []).append(
+                    self.date_error_message(lookup_type, field, unique_for)
+                )
+        return errors
+
+    def date_error_message(self, lookup_type, field, unique_for):
+        opts = self._meta
+        return _(u"%(field_name)s must be unique for %(date_field)s %(lookup)s.") % {
+            'field_name': unicode(capfirst(opts.get_field(field).verbose_name)),
+            'date_field': unicode(capfirst(opts.get_field(unique_for).verbose_name)),
+            'lookup': lookup_type,
+        }
+
+    def unique_error_message(self, model_class, unique_check):
+        opts = model_class._meta
+        model_name = capfirst(opts.verbose_name)
+
+        # A unique field
+        if len(unique_check) == 1:
+            field_name = unique_check[0]
+            field_label = capfirst(opts.get_field(field_name).verbose_name)
+            # Insert the error into the error dict, very sneaky
+            return _(u"%(model_name)s with this %(field_label)s already exists.") %  {
+                'model_name': unicode(model_name),
+                'field_label': unicode(field_label)
+            }
+        # unique_together
+        else:
+            field_labels = map(lambda f: capfirst(opts.get_field(f).verbose_name), unique_check)
+            field_labels = get_text_list(field_labels, _('and'))
+            return _(u"%(model_name)s with this %(field_label)s already exists.") %  {
+                'model_name': unicode(model_name),
+                'field_label': unicode(field_labels)
+            }
+
+    def full_clean(self, exclude=None):
+        """
+        Calls clean_fields, clean, and validate_unique, on the model,
+        and raises a ``ValidationError`` for any errors that occured.
+        """
+        errors = {}
+        if exclude is None:
+            exclude = []
+
+        try:
+            self.clean_fields(exclude=exclude)
+        except ValidationError, e:
+            errors = e.update_error_dict(errors)
+
+        # Form.clean() is run even if other validation fails, so do the
+        # same with Model.clean() for consistency.
+        try:
+            self.clean()
+        except ValidationError, e:
+            errors = e.update_error_dict(errors)
+
+        # Run unique checks, but only for fields that passed validation.
+        for name in errors.keys():
+            if name != NON_FIELD_ERRORS and name not in exclude:
+                exclude.append(name)
+        try:
+            self.validate_unique(exclude=exclude)
+        except ValidationError, e:
+            errors = e.update_error_dict(errors)
+
+        if errors:
+            raise ValidationError(errors)
+
+    def clean_fields(self, exclude=None):
+        """
+        Cleans all fields and raises a ValidationError containing message_dict
+        of all validation errors if any occur.
+        """
+        if exclude is None:
+            exclude = []
+
+        errors = {}
+        for f in self._meta.fields:
+            if f.name in exclude:
+                continue
+            # Skip validation for empty fields with blank=True. The developer
+            # is responsible for making sure they have a valid value.
+            raw_value = getattr(self, f.attname)
+            if f.blank and raw_value in validators.EMPTY_VALUES:
+                continue
+            try:
+                setattr(self, f.attname, f.clean(raw_value, self))
+            except ValidationError, e:
+                errors[f.name] = e.messages
+
+        if errors:
+            raise ValidationError(errors)
+
 
 ############################################
 # HELPER FUNCTIONS (CURRIED MODEL METHODS) #
@@ -613,14 +912,16 @@
 
 # ORDERING METHODS #########################
 
-def method_set_order(ordered_obj, self, id_list):
+def method_set_order(ordered_obj, self, id_list, using=None):
+    if using is None:
+        using = DEFAULT_DB_ALIAS
     rel_val = getattr(self, ordered_obj._meta.order_with_respect_to.rel.field_name)
     order_name = ordered_obj._meta.order_with_respect_to.name
     # FIXME: It would be nice if there was an "update many" version of update
     # for situations like this.
     for i, j in enumerate(id_list):
         ordered_obj.objects.filter(**{'pk': j, order_name: rel_val}).update(_order=i)
-    transaction.commit_unless_managed()
+    transaction.commit_unless_managed(using=using)
 
 
 def method_get_order(ordered_obj, self):
@@ -646,19 +947,27 @@
 class Empty(object):
     pass
 
-def model_unpickle(model, attrs):
+def simple_class_factory(model, attrs):
+    """Used to unpickle Models without deferred fields.
+
+    We need to do this the hard way, rather than just using
+    the default __reduce__ implementation, because of a
+    __deepcopy__ problem in Python 2.4
+    """
+    return model
+
+def model_unpickle(model, attrs, factory):
     """
     Used to unpickle Model subclasses with deferred fields.
     """
-    from django.db.models.query_utils import deferred_class_factory
-    cls = deferred_class_factory(model, attrs)
+    cls = factory(model, attrs)
     return cls.__new__(cls)
 model_unpickle.__safe_for_unpickle__ = True
 
 if sys.version_info < (2, 5):
     # Prior to Python 2.5, Exception was an old-style class
-    def subclass_exception(name, parent, unused):
-        return types.ClassType(name, (parent,), {})
+    def subclass_exception(name, parents, unused):
+        return types.ClassType(name, parents, {})
 else:
-    def subclass_exception(name, parent, module):
-        return type(name, (parent,), {'__module__': module})
+    def subclass_exception(name, parents, module):
+        return type(name, parents, {'__module__': module})
--- a/web/lib/django/db/models/expressions.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/expressions.py	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,7 @@
-from copy import deepcopy
 from datetime import datetime
 
 from django.utils import tree
+from django.utils.copycompat import deepcopy
 
 class ExpressionNode(tree.Node):
     """
@@ -41,8 +41,8 @@
     def prepare(self, evaluator, query, allow_joins):
         return evaluator.prepare_node(self, query, allow_joins)
 
-    def evaluate(self, evaluator, qn):
-        return evaluator.evaluate_node(self, qn)
+    def evaluate(self, evaluator, qn, connection):
+        return evaluator.evaluate_node(self, qn, connection)
 
     #############
     # OPERATORS #
@@ -109,5 +109,5 @@
     def prepare(self, evaluator, query, allow_joins):
         return evaluator.prepare_leaf(self, query, allow_joins)
 
-    def evaluate(self, evaluator, qn):
-        return evaluator.evaluate_leaf(self, qn)
+    def evaluate(self, evaluator, qn, connection):
+        return evaluator.evaluate_leaf(self, qn, connection)
--- a/web/lib/django/db/models/fields/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/fields/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,25 +1,22 @@
-import copy
 import datetime
-import os
+import decimal
 import re
 import time
-try:
-    import decimal
-except ImportError:
-    from django.utils import _decimal as decimal    # for Python 2.3
+import math
+from itertools import tee
+
+import django.utils.copycompat as copy
 
 from django.db import connection
-from django.db.models import signals
+from django.db.models.fields.subclassing import LegacyConnection
 from django.db.models.query_utils import QueryWrapper
-from django.dispatch import dispatcher
 from django.conf import settings
 from django import forms
-from django.core import exceptions
+from django.core import exceptions, validators
 from django.utils.datastructures import DictWrapper
 from django.utils.functional import curry
-from django.utils.itercompat import tee
 from django.utils.text import capfirst
-from django.utils.translation import ugettext_lazy, ugettext as _
+from django.utils.translation import ugettext_lazy as _
 from django.utils.encoding import smart_unicode, force_unicode, smart_str
 from django.utils import datetime_safe
 
@@ -49,6 +46,9 @@
 #     getattr(obj, opts.pk.attname)
 
 class Field(object):
+    """Base class for all field types"""
+    __metaclass__ = LegacyConnection
+
     # Designates whether empty strings fundamentally are allowed at the
     # database level.
     empty_strings_allowed = True
@@ -58,13 +58,27 @@
     # creates, creation_counter is used for all user-specified fields.
     creation_counter = 0
     auto_creation_counter = -1
+    default_validators = [] # Default set of validators
+    default_error_messages = {
+        'invalid_choice': _(u'Value %r is not a valid choice.'),
+        'null': _(u'This field cannot be null.'),
+        'blank': _(u'This field cannot be blank.'),
+    }
+
+    # Generic field type description, usually overriden by subclasses
+    def _description(self):
+        return _(u'Field of type: %(field_type)s') % {
+            'field_type': self.__class__.__name__
+        }
+    description = property(_description)
 
     def __init__(self, verbose_name=None, name=None, primary_key=False,
             max_length=None, unique=False, blank=False, null=False,
             db_index=False, rel=None, default=NOT_PROVIDED, editable=True,
             serialize=True, unique_for_date=None, unique_for_month=None,
             unique_for_year=None, choices=None, help_text='', db_column=None,
-            db_tablespace=None, auto_created=False):
+            db_tablespace=None, auto_created=False, validators=[],
+            error_messages=None):
         self.name = name
         self.verbose_name = verbose_name
         self.primary_key = primary_key
@@ -97,6 +111,14 @@
             self.creation_counter = Field.creation_counter
             Field.creation_counter += 1
 
+        self.validators = self.default_validators + validators
+
+        messages = {}
+        for c in reversed(self.__class__.__mro__):
+            messages.update(getattr(c, 'default_error_messages', {}))
+        messages.update(error_messages or {})
+        self.error_messages = messages
+
     def __cmp__(self, other):
         # This is needed because bisect does not take a comparison function.
         return cmp(self.creation_counter, other.creation_counter)
@@ -118,10 +140,65 @@
         """
         return value
 
-    def db_type(self):
+    def run_validators(self, value):
+        if value in validators.EMPTY_VALUES:
+            return
+
+        errors = []
+        for v in self.validators:
+            try:
+                v(value)
+            except exceptions.ValidationError, e:
+                if hasattr(e, 'code') and e.code in self.error_messages:
+                    message = self.error_messages[e.code]
+                    if e.params:
+                        message = message % e.params
+                    errors.append(message)
+                else:
+                    errors.extend(e.messages)
+        if errors:
+            raise exceptions.ValidationError(errors)
+
+    def validate(self, value, model_instance):
+        """
+        Validates value and throws ValidationError. Subclasses should override
+        this to provide validation logic.
         """
-        Returns the database column data type for this field, taking into
-        account the DATABASE_ENGINE setting.
+        if not self.editable:
+            # Skip validation for non-editable fields.
+            return
+        if self._choices and value:
+            for option_key, option_value in self.choices:
+                if isinstance(option_value, (list, tuple)):
+                    # This is an optgroup, so look inside the group for options.
+                    for optgroup_key, optgroup_value in option_value:
+                        if value == optgroup_key:
+                            return
+                elif value == option_key:
+                    return
+            raise exceptions.ValidationError(self.error_messages['invalid_choice'] % value)
+
+        if value is None and not self.null:
+            raise exceptions.ValidationError(self.error_messages['null'])
+
+        if not self.blank and value in validators.EMPTY_VALUES:
+            raise exceptions.ValidationError(self.error_messages['blank'])
+
+    def clean(self, value, model_instance):
+        """
+        Convert the value's type and run validation. Validation errors from to_python
+        and validate are propagated. The correct value is returned if no error is
+        raised.
+        """
+        value = self.to_python(value)
+        self.validate(value, model_instance)
+        self.run_validators(value)
+        return value
+
+    def db_type(self, connection):
+        """
+        Returns the database column data type for this field, for the provided
+        connection.
         """
         # The default implementation of this method looks at the
         # backend-specific DATA_TYPES dictionary, looking up the field by its
@@ -156,6 +233,7 @@
 
     def contribute_to_class(self, cls, name):
         self.set_attributes_from_name(name)
+        self.model = cls
         cls._meta.add_field(self)
         if self.choices:
             setattr(cls, 'get_%s_display' % self.name, curry(cls._get_FIELD_display, field=self))
@@ -178,21 +256,56 @@
         "Returns field's value just before saving."
         return getattr(model_instance, self.attname)
 
-    def get_db_prep_value(self, value):
+    def get_prep_value(self, value):
+        "Perform preliminary non-db specific value checks and conversions."
+        return value
+
+    def get_db_prep_value(self, value, connection, prepared=False):
         """Returns field's value prepared for interacting with the database
         backend.
 
         Used by the default implementations of ``get_db_prep_save``and
         `get_db_prep_lookup```
         """
+        if not prepared:
+            value = self.get_prep_value(value)
         return value
 
-    def get_db_prep_save(self, value):
+    def get_db_prep_save(self, value, connection):
         "Returns field's value prepared for saving into a database."
-        return self.get_db_prep_value(value)
+        return self.get_db_prep_value(value, connection=connection, prepared=False)
+
+    def get_prep_lookup(self, lookup_type, value):
+        "Perform preliminary non-db specific lookup checks and conversions"
+        if hasattr(value, 'prepare'):
+            return value.prepare()
+        if hasattr(value, '_prepare'):
+            return value._prepare()
 
-    def get_db_prep_lookup(self, lookup_type, value):
+        if lookup_type in (
+                'regex', 'iregex', 'month', 'day', 'week_day', 'search',
+                'contains', 'icontains', 'iexact', 'startswith', 'istartswith',
+                'endswith', 'iendswith', 'isnull'
+            ):
+            return value
+        elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte'):
+            return self.get_prep_value(value)
+        elif lookup_type in ('range', 'in'):
+            return [self.get_prep_value(v) for v in value]
+        elif lookup_type == 'year':
+            try:
+                return int(value)
+            except ValueError:
+                raise ValueError("The __year lookup type requires an integer argument")
+
+        raise TypeError("Field has invalid lookup: %s" % lookup_type)
+
+    def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False):
         "Returns field's value prepared for database lookup."
+        if not prepared:
+            value = self.get_prep_lookup(lookup_type, value)
+        if hasattr(value, 'get_compiler'):
+            value = value.get_compiler(connection=connection)
         if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'):
             # If the value has a relabel_aliases method, it will need to
             # be invoked before the final SQL is evaluated
@@ -201,15 +314,15 @@
             if hasattr(value, 'as_sql'):
                 sql, params = value.as_sql()
             else:
-                sql, params = value._as_sql()
+                sql, params = value._as_sql(connection=connection)
             return QueryWrapper(('(%s)' % sql), params)
 
         if lookup_type in ('regex', 'iregex', 'month', 'day', 'week_day', 'search'):
             return [value]
         elif lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte'):
-            return [self.get_db_prep_value(value)]
+            return [self.get_db_prep_value(value, connection=connection, prepared=prepared)]
         elif lookup_type in ('range', 'in'):
-            return [self.get_db_prep_value(v) for v in value]
+            return [self.get_db_prep_value(v, connection=connection, prepared=prepared) for v in value]
         elif lookup_type in ('contains', 'icontains'):
             return ["%%%s%%" % connection.ops.prep_for_like_query(value)]
         elif lookup_type == 'iexact':
@@ -221,18 +334,11 @@
         elif lookup_type == 'isnull':
             return []
         elif lookup_type == 'year':
-            try:
-                value = int(value)
-            except ValueError:
-                raise ValueError("The __year lookup type requires an integer argument")
-
             if self.get_internal_type() == 'DateField':
                 return connection.ops.year_lookup_bounds_for_date_field(value)
             else:
                 return connection.ops.year_lookup_bounds(value)
 
-        raise TypeError("Field has invalid lookup: %s" % lookup_type)
-
     def has_default(self):
         "Returns a boolean of whether this field has a default value."
         return self.default is not NOT_PROVIDED
@@ -272,7 +378,7 @@
         return first_choice + list(self.flatchoices)
 
     def _get_val_from_obj(self, obj):
-        if obj:
+        if obj is not None:
             return getattr(obj, self.attname)
         else:
             return self.get_default()
@@ -299,7 +405,7 @@
         """Flattened version of choices tuple."""
         flat = []
         for choice, value in self.choices:
-            if type(value) in (list, tuple):
+            if isinstance(value, (list, tuple)):
                 flat.extend(value)
             else:
                 flat.append((choice,value))
@@ -313,9 +419,11 @@
         "Returns a django.forms.Field instance for this database Field."
         defaults = {'required': not self.blank, 'label': capfirst(self.verbose_name), 'help_text': self.help_text}
         if self.has_default():
-            defaults['initial'] = self.get_default()
             if callable(self.default):
+                defaults['initial'] = self.default
                 defaults['show_hidden_initial'] = True
+            else:
+                defaults['initial'] = self.get_default()
         if self.choices:
             # Fields with choices get special treatment.
             include_blank = self.blank or not (self.has_default() or 'initial' in kwargs)
@@ -330,7 +438,7 @@
             for k in kwargs.keys():
                 if k not in ('coerce', 'empty_value', 'choices', 'required',
                              'widget', 'label', 'initial', 'help_text',
-                             'error_messages'):
+                             'error_messages', 'show_hidden_initial'):
                     del kwargs[k]
         defaults.update(kwargs)
         return form_class(**defaults)
@@ -340,7 +448,12 @@
         return getattr(obj, self.attname)
 
 class AutoField(Field):
+    description = _("Integer")
+
     empty_strings_allowed = False
+    default_error_messages = {
+        'invalid': _(u'This value must be an integer.'),
+    }
     def __init__(self, *args, **kwargs):
         assert kwargs.get('primary_key', False) is True, "%ss must have primary_key=True." % self.__class__.__name__
         kwargs['blank'] = True
@@ -352,10 +465,12 @@
         try:
             return int(value)
         except (TypeError, ValueError):
-            raise exceptions.ValidationError(
-                _("This value must be an integer."))
+            raise exceptions.ValidationError(self.error_messages['invalid'])
 
-    def get_db_prep_value(self, value):
+    def validate(self, value, model_instance):
+        pass
+
+    def get_prep_value(self, value):
         if value is None:
             return None
         return int(value)
@@ -371,6 +486,10 @@
 
 class BooleanField(Field):
     empty_strings_allowed = False
+    default_error_messages = {
+        'invalid': _(u'This value must be either True or False.'),
+    }
+    description = _("Boolean (Either True or False)")
     def __init__(self, *args, **kwargs):
         kwargs['blank'] = True
         if 'default' not in kwargs and not kwargs.get('null'):
@@ -381,22 +500,26 @@
         return "BooleanField"
 
     def to_python(self, value):
-        if value in (True, False): return value
-        if value in ('t', 'True', '1'): return True
-        if value in ('f', 'False', '0'): return False
-        raise exceptions.ValidationError(
-            _("This value must be either True or False."))
+        if value in (True, False):
+            # if value is 1 or 0 than it's equal to True or False, but we want
+            # to return a true bool for semantic reasons.
+            return bool(value)
+        if value in ('t', 'True', '1'):
+            return True
+        if value in ('f', 'False', '0'):
+            return False
+        raise exceptions.ValidationError(self.error_messages['invalid'])
 
-    def get_db_prep_lookup(self, lookup_type, value):
+    def get_prep_lookup(self, lookup_type, value):
         # Special-case handling for filters coming from a web request (e.g. the
         # admin interface). Only works for scalar values (not lists). If you're
         # passing in a list, you might as well make things the right type when
         # constructing the list.
         if value in ('1', '0'):
             value = bool(int(value))
-        return super(BooleanField, self).get_db_prep_lookup(lookup_type, value)
+        return super(BooleanField, self).get_prep_lookup(lookup_type, value)
 
-    def get_db_prep_value(self, value):
+    def get_prep_value(self, value):
         if value is None:
             return None
         return bool(value)
@@ -413,32 +536,38 @@
         return super(BooleanField, self).formfield(**defaults)
 
 class CharField(Field):
+    description = _("String (up to %(max_length)s)")
+
+    def __init__(self, *args, **kwargs):
+        super(CharField, self).__init__(*args, **kwargs)
+        self.validators.append(validators.MaxLengthValidator(self.max_length))
+
     def get_internal_type(self):
         return "CharField"
 
     def to_python(self, value):
-        if isinstance(value, basestring):
+        if isinstance(value, basestring) or value is None:
             return value
-        if value is None:
-            if self.null:
-                return value
-            else:
-                raise exceptions.ValidationError(
-                    ugettext_lazy("This field cannot be null."))
         return smart_unicode(value)
 
+    def get_prep_value(self, value):
+        return self.to_python(value)
+
     def formfield(self, **kwargs):
+        # Passing max_length to forms.CharField means that the value's length
+        # will be validated twice. This is considered acceptable since we want
+        # the value in the form field (to pass into widget for example).
         defaults = {'max_length': self.max_length}
         defaults.update(kwargs)
         return super(CharField, self).formfield(**defaults)
 
 # TODO: Maybe move this into contrib, because it's specialized.
 class CommaSeparatedIntegerField(CharField):
+    default_validators = [validators.validate_comma_separated_integer_list]
+    description = _("Comma-separated integers")
+
     def formfield(self, **kwargs):
         defaults = {
-            'form_class': forms.RegexField,
-            'regex': '^[\d,]+$',
-            'max_length': self.max_length,
             'error_messages': {
                 'invalid': _(u'Enter only digits separated by commas.'),
             }
@@ -449,7 +578,13 @@
 ansi_date_re = re.compile(r'^\d{4}-\d{1,2}-\d{1,2}$')
 
 class DateField(Field):
+    description = _("Date (without time)")
+
     empty_strings_allowed = False
+    default_error_messages = {
+        'invalid': _('Enter a valid date in YYYY-MM-DD format.'),
+        'invalid_date': _('Invalid date: %s'),
+    }
     def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs):
         self.auto_now, self.auto_now_add = auto_now, auto_now_add
         #HACKs : auto_now_add/auto_now should be done as a default or a pre_save.
@@ -470,8 +605,7 @@
             return value
 
         if not ansi_date_re.search(value):
-            raise exceptions.ValidationError(
-                _('Enter a valid date in YYYY-MM-DD format.'))
+            raise exceptions.ValidationError(self.error_messages['invalid'])
         # Now that we have the date string in YYYY-MM-DD format, check to make
         # sure it's a valid date.
         # We could use time.strptime here and catch errors, but datetime.date
@@ -480,7 +614,7 @@
         try:
             return datetime.date(year, month, day)
         except ValueError, e:
-            msg = _('Invalid date: %s') % _(str(e))
+            msg = self.error_messages['invalid_date'] % _(str(e))
             raise exceptions.ValidationError(msg)
 
     def pre_save(self, model_instance, add):
@@ -499,16 +633,21 @@
             setattr(cls, 'get_previous_by_%s' % self.name,
                 curry(cls._get_next_or_previous_by_FIELD, field=self, is_next=False))
 
-    def get_db_prep_lookup(self, lookup_type, value):
+    def get_prep_lookup(self, lookup_type, value):
         # For "__month", "__day", and "__week_day" lookups, convert the value
         # to an int so the database backend always sees a consistent type.
         if lookup_type in ('month', 'day', 'week_day'):
-            return [int(value)]
-        return super(DateField, self).get_db_prep_lookup(lookup_type, value)
+            return int(value)
+        return super(DateField, self).get_prep_lookup(lookup_type, value)
+
+    def get_prep_value(self, value):
+        return self.to_python(value)
 
-    def get_db_prep_value(self, value):
+    def get_db_prep_value(self, value, connection, prepared=False):
         # Casts dates into the format expected by the backend
-        return connection.ops.value_to_db_date(self.to_python(value))
+        if not prepared:
+            value = self.get_prep_value(value)
+        return connection.ops.value_to_db_date(value)
 
     def value_to_string(self, obj):
         val = self._get_val_from_obj(obj)
@@ -524,6 +663,11 @@
         return super(DateField, self).formfield(**defaults)
 
 class DateTimeField(DateField):
+    default_error_messages = {
+        'invalid': _(u'Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format.'),
+    }
+    description = _("Date (with time)")
+
     def get_internal_type(self):
         return "DateTimeField"
 
@@ -543,8 +687,7 @@
                 value, usecs = value.split('.')
                 usecs = int(usecs)
             except ValueError:
-                raise exceptions.ValidationError(
-                    _('Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format.'))
+                raise exceptions.ValidationError(self.error_messages['invalid'])
         else:
             usecs = 0
         kwargs = {'microsecond': usecs}
@@ -561,12 +704,16 @@
                     return datetime.datetime(*time.strptime(value, '%Y-%m-%d')[:3],
                                              **kwargs)
                 except ValueError:
-                    raise exceptions.ValidationError(
-                        _('Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format.'))
+                    raise exceptions.ValidationError(self.error_messages['invalid'])
+
+    def get_prep_value(self, value):
+        return self.to_python(value)
 
-    def get_db_prep_value(self, value):
+    def get_db_prep_value(self, value, connection, prepared=False):
         # Casts dates into the format expected by the backend
-        return connection.ops.value_to_db_datetime(self.to_python(value))
+        if not prepared:
+            value = self.get_prep_value(value)
+        return connection.ops.value_to_db_datetime(value)
 
     def value_to_string(self, obj):
         val = self._get_val_from_obj(obj)
@@ -584,6 +731,11 @@
 
 class DecimalField(Field):
     empty_strings_allowed = False
+    default_error_messages = {
+        'invalid': _(u'This value must be a decimal number.'),
+    }
+    description = _("Decimal number")
+
     def __init__(self, verbose_name=None, name=None, max_digits=None, decimal_places=None, **kwargs):
         self.max_digits, self.decimal_places = max_digits, decimal_places
         Field.__init__(self, verbose_name, name, **kwargs)
@@ -597,8 +749,7 @@
         try:
             return decimal.Decimal(value)
         except decimal.InvalidOperation:
-            raise exceptions.ValidationError(
-                _("This value must be a decimal number."))
+            raise exceptions.ValidationError(self.error_messages['invalid'])
 
     def _format(self, value):
         if isinstance(value, basestring) or value is None:
@@ -620,11 +771,11 @@
         from django.db.backends import util
         return util.format_number(value, self.max_digits, self.decimal_places)
 
-    def get_db_prep_save(self, value):
+    def get_db_prep_save(self, value, connection):
         return connection.ops.value_to_db_decimal(self.to_python(value),
                 self.max_digits, self.decimal_places)
 
-    def get_db_prep_value(self, value):
+    def get_prep_value(self, value):
         return self.to_python(value)
 
     def formfield(self, **kwargs):
@@ -637,16 +788,16 @@
         return super(DecimalField, self).formfield(**defaults)
 
 class EmailField(CharField):
+    default_validators = [validators.validate_email]
+    description = _("E-mail address")
+
     def __init__(self, *args, **kwargs):
         kwargs['max_length'] = kwargs.get('max_length', 75)
         CharField.__init__(self, *args, **kwargs)
 
-    def formfield(self, **kwargs):
-        defaults = {'form_class': forms.EmailField}
-        defaults.update(kwargs)
-        return super(EmailField, self).formfield(**defaults)
+class FilePathField(Field):
+    description = _("File path")
 
-class FilePathField(Field):
     def __init__(self, verbose_name=None, name=None, path='', match=None, recursive=False, **kwargs):
         self.path, self.match, self.recursive = path, match, recursive
         kwargs['max_length'] = kwargs.get('max_length', 100)
@@ -667,8 +818,12 @@
 
 class FloatField(Field):
     empty_strings_allowed = False
+    default_error_messages = {
+        'invalid': _("This value must be a float."),
+    }
+    description = _("Floating point number")
 
-    def get_db_prep_value(self, value):
+    def get_prep_value(self, value):
         if value is None:
             return None
         return float(value)
@@ -682,8 +837,7 @@
         try:
             return float(value)
         except (TypeError, ValueError):
-            raise exceptions.ValidationError(
-                _("This value must be a float."))
+            raise exceptions.ValidationError(self.error_messages['invalid'])
 
     def formfield(self, **kwargs):
         defaults = {'form_class': forms.FloatField}
@@ -692,11 +846,22 @@
 
 class IntegerField(Field):
     empty_strings_allowed = False
-    def get_db_prep_value(self, value):
+    default_error_messages = {
+        'invalid': _("This value must be an integer."),
+    }
+    description = _("Integer")
+
+    def get_prep_value(self, value):
         if value is None:
             return None
         return int(value)
 
+    def get_prep_lookup(self, lookup_type, value):
+        if (lookup_type == 'gte' or lookup_type == 'lt') \
+           and isinstance(value, float):
+                value = math.ceil(value)
+        return super(IntegerField, self).get_prep_lookup(lookup_type, value)
+
     def get_internal_type(self):
         return "IntegerField"
 
@@ -706,16 +871,29 @@
         try:
             return int(value)
         except (TypeError, ValueError):
-            raise exceptions.ValidationError(
-                _("This value must be an integer."))
+            raise exceptions.ValidationError(self.error_messages['invalid'])
 
     def formfield(self, **kwargs):
         defaults = {'form_class': forms.IntegerField}
         defaults.update(kwargs)
         return super(IntegerField, self).formfield(**defaults)
 
+class BigIntegerField(IntegerField):
+    empty_strings_allowed = False
+    description = _("Big (8 byte) integer")
+    MAX_BIGINT = 9223372036854775807
+    def get_internal_type(self):
+        return "BigIntegerField"
+
+    def formfield(self, **kwargs):
+        defaults = {'min_value': -BigIntegerField.MAX_BIGINT - 1,
+                    'max_value': BigIntegerField.MAX_BIGINT}
+        defaults.update(kwargs)
+        return super(BigIntegerField, self).formfield(**defaults)
+
 class IPAddressField(Field):
     empty_strings_allowed = False
+    description = _("IP address")
     def __init__(self, *args, **kwargs):
         kwargs['max_length'] = 15
         Field.__init__(self, *args, **kwargs)
@@ -730,31 +908,42 @@
 
 class NullBooleanField(Field):
     empty_strings_allowed = False
+    default_error_messages = {
+        'invalid': _("This value must be either None, True or False."),
+    }
+    description = _("Boolean (Either True, False or None)")
+
     def __init__(self, *args, **kwargs):
         kwargs['null'] = True
+        kwargs['blank'] = True
         Field.__init__(self, *args, **kwargs)
 
     def get_internal_type(self):
         return "NullBooleanField"
 
     def to_python(self, value):
-        if value in (None, True, False): return value
-        if value in ('None',): return None
-        if value in ('t', 'True', '1'): return True
-        if value in ('f', 'False', '0'): return False
-        raise exceptions.ValidationError(
-            _("This value must be either None, True or False."))
+        if value is None:
+            return None
+        if value in (True, False):
+            return bool(value)
+        if value in ('None',):
+            return None
+        if value in ('t', 'True', '1'):
+            return True
+        if value in ('f', 'False', '0'):
+            return False
+        raise exceptions.ValidationError(self.error_messages['invalid'])
 
-    def get_db_prep_lookup(self, lookup_type, value):
+    def get_prep_lookup(self, lookup_type, value):
         # Special-case handling for filters coming from a web request (e.g. the
         # admin interface). Only works for scalar values (not lists). If you're
         # passing in a list, you might as well make things the right type when
         # constructing the list.
         if value in ('1', '0'):
             value = bool(int(value))
-        return super(NullBooleanField, self).get_db_prep_lookup(lookup_type, value)
+        return super(NullBooleanField, self).get_prep_lookup(lookup_type, value)
 
-    def get_db_prep_value(self, value):
+    def get_prep_value(self, value):
         if value is None:
             return None
         return bool(value)
@@ -769,6 +958,8 @@
         return super(NullBooleanField, self).formfield(**defaults)
 
 class PositiveIntegerField(IntegerField):
+    description = _("Integer")
+
     def get_internal_type(self):
         return "PositiveIntegerField"
 
@@ -778,6 +969,7 @@
         return super(PositiveIntegerField, self).formfield(**defaults)
 
 class PositiveSmallIntegerField(IntegerField):
+    description = _("Integer")
     def get_internal_type(self):
         return "PositiveSmallIntegerField"
 
@@ -787,6 +979,7 @@
         return super(PositiveSmallIntegerField, self).formfield(**defaults)
 
 class SlugField(CharField):
+    description = _("String (up to %(max_length)s)")
     def __init__(self, *args, **kwargs):
         kwargs['max_length'] = kwargs.get('max_length', 50)
         # Set db_index=True unless it's been set manually.
@@ -803,20 +996,34 @@
         return super(SlugField, self).formfield(**defaults)
 
 class SmallIntegerField(IntegerField):
+    description = _("Integer")
+
     def get_internal_type(self):
         return "SmallIntegerField"
 
 class TextField(Field):
+    description = _("Text")
+
     def get_internal_type(self):
         return "TextField"
 
+    def get_prep_value(self, value):
+        if isinstance(value, basestring) or value is None:
+            return value
+        return smart_unicode(value)
+
     def formfield(self, **kwargs):
         defaults = {'widget': forms.Textarea}
         defaults.update(kwargs)
         return super(TextField, self).formfield(**defaults)
 
 class TimeField(Field):
+    description = _("Time")
+
     empty_strings_allowed = False
+    default_error_messages = {
+        'invalid': _('Enter a valid time in HH:MM[:ss[.uuuuuu]] format.'),
+    }
     def __init__(self, verbose_name=None, name=None, auto_now=False, auto_now_add=False, **kwargs):
         self.auto_now, self.auto_now_add = auto_now, auto_now_add
         if auto_now or auto_now_add:
@@ -835,7 +1042,7 @@
             # Not usually a good idea to pass in a datetime here (it loses
             # information), but this can be a side-effect of interacting with a
             # database backend (e.g. Oracle), so we'll be accommodating.
-            return value.time
+            return value.time()
 
         # Attempt to parse a datetime:
         value = smart_str(value)
@@ -845,8 +1052,7 @@
                 value, usecs = value.split('.')
                 usecs = int(usecs)
             except ValueError:
-                raise exceptions.ValidationError(
-                    _('Enter a valid time in HH:MM[:ss[.uuuuuu]] format.'))
+                raise exceptions.ValidationError(self.error_messages['invalid'])
         else:
             usecs = 0
         kwargs = {'microsecond': usecs}
@@ -859,8 +1065,7 @@
                 return datetime.time(*time.strptime(value, '%H:%M')[3:5],
                                          **kwargs)
             except ValueError:
-                raise exceptions.ValidationError(
-                    _('Enter a valid time in HH:MM[:ss[.uuuuuu]] format.'))
+                raise exceptions.ValidationError(self.error_messages['invalid'])
 
     def pre_save(self, model_instance, add):
         if self.auto_now or (self.auto_now_add and add):
@@ -870,9 +1075,14 @@
         else:
             return super(TimeField, self).pre_save(model_instance, add)
 
-    def get_db_prep_value(self, value):
+    def get_prep_value(self, value):
+        return self.to_python(value)
+
+    def get_db_prep_value(self, value, connection, prepared=False):
         # Casts times into the format expected by the backend
-        return connection.ops.value_to_db_time(self.to_python(value))
+        if not prepared:
+            value = self.get_prep_value(value)
+        return connection.ops.value_to_db_time(value)
 
     def value_to_string(self, obj):
         val = self._get_val_from_obj(obj)
@@ -888,17 +1098,17 @@
         return super(TimeField, self).formfield(**defaults)
 
 class URLField(CharField):
+    description = _("URL")
+
     def __init__(self, verbose_name=None, name=None, verify_exists=True, **kwargs):
         kwargs['max_length'] = kwargs.get('max_length', 200)
-        self.verify_exists = verify_exists
         CharField.__init__(self, verbose_name, name, **kwargs)
-
-    def formfield(self, **kwargs):
-        defaults = {'form_class': forms.URLField, 'verify_exists': self.verify_exists}
-        defaults.update(kwargs)
-        return super(URLField, self).formfield(**defaults)
+        self.validators.append(validators.URLValidator(verify_exists=verify_exists))
 
 class XMLField(TextField):
+    description = _("XML text")
+
     def __init__(self, verbose_name=None, name=None, schema_path=None, **kwargs):
         self.schema_path = schema_path
         Field.__init__(self, verbose_name, name, **kwargs)
+
--- a/web/lib/django/db/models/fields/files.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/fields/files.py	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,8 @@
-import copy
 import datetime
 import os
 
+import django.utils.copycompat as copy
+
 from django.conf import settings
 from django.db.models.fields import Field
 from django.core.files.base import File, ContentFile
@@ -216,6 +217,8 @@
     # The descriptor to use for accessing the attribute off of the class.
     descriptor_class = FileDescriptor
 
+    description = ugettext_lazy("File path")
+
     def __init__(self, verbose_name=None, name=None, upload_to='', storage=None, **kwargs):
         for arg in ('primary_key', 'unique'):
             if arg in kwargs:
@@ -232,12 +235,12 @@
     def get_internal_type(self):
         return "FileField"
 
-    def get_db_prep_lookup(self, lookup_type, value):
+    def get_prep_lookup(self, lookup_type, value):
         if hasattr(value, 'name'):
             value = value.name
-        return super(FileField, self).get_db_prep_lookup(lookup_type, value)
+        return super(FileField, self).get_prep_lookup(lookup_type, value)
 
-    def get_db_prep_value(self, value):
+    def get_prep_value(self, value):
         "Returns field's value prepared for saving into a database."
         # Need to convert File objects provided via a form to unicode for database insertion
         if value is None:
@@ -325,6 +328,7 @@
 class ImageField(FileField):
     attr_class = ImageFieldFile
     descriptor_class = ImageFileDescriptor
+    description = ugettext_lazy("File path")
 
     def __init__(self, verbose_name=None, name=None, width_field=None, height_field=None, **kwargs):
         self.width_field, self.height_field = width_field, height_field
--- a/web/lib/django/db/models/fields/proxy.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/fields/proxy.py	Tue May 25 02:43:45 2010 +0200
@@ -10,7 +10,8 @@
     A proxy for the _order database field that is used when
     Meta.order_with_respect_to is specified.
     """
-    name = '_order'
-    attname = '_order'
-    column = '_order'
 
+    def __init__(self, *args, **kwargs):
+        kwargs['name'] = '_order'
+        kwargs['editable'] = False
+        super(OrderWrt, self).__init__(*args, **kwargs)
--- a/web/lib/django/db/models/fields/related.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/fields/related.py	Tue May 25 02:43:45 2010 +0200
@@ -1,20 +1,18 @@
-from django.db import connection, transaction
+from django.conf import settings
+from django.db import connection, router, transaction
 from django.db.backends import util
 from django.db.models import signals, get_model
-from django.db.models.fields import AutoField, Field, IntegerField, PositiveIntegerField, PositiveSmallIntegerField, FieldDoesNotExist
+from django.db.models.fields import (AutoField, Field, IntegerField,
+    PositiveIntegerField, PositiveSmallIntegerField, FieldDoesNotExist)
 from django.db.models.related import RelatedObject
 from django.db.models.query import QuerySet
 from django.db.models.query_utils import QueryWrapper
 from django.utils.encoding import smart_unicode
-from django.utils.translation import ugettext_lazy, string_concat, ungettext, ugettext as _
+from django.utils.translation import ugettext_lazy as _, string_concat, ungettext, ugettext
 from django.utils.functional import curry
 from django.core import exceptions
 from django import forms
 
-try:
-    set
-except NameError:
-    from sets import Set as set   # Python 2.3 fallback
 
 RECURSIVE_RELATIONSHIP_CONSTANT = 'self'
 
@@ -58,6 +56,10 @@
             # If we can't split, assume a model in current app
             app_label = cls._meta.app_label
             model_name = relation
+        except AttributeError:
+            # If it doesn't have a split it's actually a model class
+            app_label = relation._meta.app_label
+            model_name = relation._meta.object_name
 
     # Try to look up the related model, and if it's already loaded resolve the
     # string right away. If get_model returns None, it means that the related
@@ -86,17 +88,20 @@
     def contribute_to_class(self, cls, name):
         sup = super(RelatedField, self)
 
-        # Add an accessor to allow easy determination of the related query path for this field
-        self.related_query_name = curry(self._get_related_query_name, cls._meta)
+        # Store the opts for related_query_name()
+        self.opts = cls._meta
 
         if hasattr(sup, 'contribute_to_class'):
             sup.contribute_to_class(cls, name)
 
         if not cls._meta.abstract and self.rel.related_name:
-            self.rel.related_name = self.rel.related_name % {'class': cls.__name__.lower()}
+            self.rel.related_name = self.rel.related_name % {
+                    'class': cls.__name__.lower(),
+                    'app_label': cls._meta.app_label.lower(),
+                }
 
         other = self.rel.to
-        if isinstance(other, basestring):
+        if isinstance(other, basestring) or other._meta.pk is None:
             def resolve_related_class(field, model, cls):
                 field.rel.to = model
                 field.do_related_class(model, cls)
@@ -116,31 +121,28 @@
         if not cls._meta.abstract:
             self.contribute_to_related_class(other, self.related)
 
-    def get_db_prep_lookup(self, lookup_type, value):
-        # If we are doing a lookup on a Related Field, we must be
-        # comparing object instances. The value should be the PK of value,
-        # not value itself.
-        def pk_trace(value):
-            # Value may be a primary key, or an object held in a relation.
-            # If it is an object, then we need to get the primary key value for
-            # that object. In certain conditions (especially one-to-one relations),
-            # the primary key may itself be an object - so we need to keep drilling
-            # down until we hit a value that can be used for a comparison.
-            v, field = value, None
-            try:
-                while True:
-                    v, field = getattr(v, v._meta.pk.name), v._meta.pk
-            except AttributeError:
-                pass
+    def get_prep_lookup(self, lookup_type, value):
+        if hasattr(value, 'prepare'):
+            return value.prepare()
+        if hasattr(value, '_prepare'):
+            return value._prepare()
+        # FIXME: lt and gt are explicitly allowed to make
+        # get_(next/prev)_by_date work; other lookups are not allowed since that
+        # gets messy pretty quick. This is a good candidate for some refactoring
+        # in the future.
+        if lookup_type in ['exact', 'gt', 'lt', 'gte', 'lte']:
+            return self._pk_trace(value, 'get_prep_lookup', lookup_type)
+        if lookup_type in ('range', 'in'):
+            return [self._pk_trace(v, 'get_prep_lookup', lookup_type) for v in value]
+        elif lookup_type == 'isnull':
+            return []
+        raise TypeError("Related Field has invalid lookup: %s" % lookup_type)
 
-            if field:
-                if lookup_type in ('range', 'in'):
-                    v = [v]
-                v = field.get_db_prep_lookup(lookup_type, v)
-                if isinstance(v, list):
-                    v = v[0]
-            return v
-
+    def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False):
+        if not prepared:
+            value = self.get_prep_lookup(lookup_type, value)
+        if hasattr(value, 'get_compiler'):
+            value = value.get_compiler(connection=connection)
         if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'):
             # If the value has a relabel_aliases method, it will need to
             # be invoked before the final SQL is evaluated
@@ -149,27 +151,59 @@
             if hasattr(value, 'as_sql'):
                 sql, params = value.as_sql()
             else:
-                sql, params = value._as_sql()
+                sql, params = value._as_sql(connection=connection)
             return QueryWrapper(('(%s)' % sql), params)
 
-        # FIXME: lt and gt are explicitally allowed to make
+        # FIXME: lt and gt are explicitly allowed to make
         # get_(next/prev)_by_date work; other lookups are not allowed since that
         # gets messy pretty quick. This is a good candidate for some refactoring
         # in the future.
         if lookup_type in ['exact', 'gt', 'lt', 'gte', 'lte']:
-            return [pk_trace(value)]
+            return [self._pk_trace(value, 'get_db_prep_lookup', lookup_type,
+                            connection=connection, prepared=prepared)]
         if lookup_type in ('range', 'in'):
-            return [pk_trace(v) for v in value]
+            return [self._pk_trace(v, 'get_db_prep_lookup', lookup_type,
+                            connection=connection, prepared=prepared)
+                    for v in value]
         elif lookup_type == 'isnull':
             return []
-        raise TypeError, "Related Field has invalid lookup: %s" % lookup_type
+        raise TypeError("Related Field has invalid lookup: %s" % lookup_type)
 
-    def _get_related_query_name(self, opts):
+    def _pk_trace(self, value, prep_func, lookup_type, **kwargs):
+        # Value may be a primary key, or an object held in a relation.
+        # If it is an object, then we need to get the primary key value for
+        # that object. In certain conditions (especially one-to-one relations),
+        # the primary key may itself be an object - so we need to keep drilling
+        # down until we hit a value that can be used for a comparison.
+        v = value
+        try:
+            while True:
+                v = getattr(v, v._meta.pk.name)
+        except AttributeError:
+            pass
+        except exceptions.ObjectDoesNotExist:
+            v = None
+
+        field = self
+        while field.rel:
+            if hasattr(field.rel, 'field_name'):
+                field = field.rel.to._meta.get_field(field.rel.field_name)
+            else:
+                field = field.rel.to._meta.pk
+
+        if lookup_type in ('range', 'in'):
+            v = [v]
+        v = getattr(field, prep_func)(lookup_type, v, **kwargs)
+        if isinstance(v, list):
+            v = v[0]
+        return v
+
+    def related_query_name(self):
         # This method defines the name that can be used to identify this
         # related object in a table-spanning query. It uses the lower-cased
         # object_name by default, but this can be overridden with the
         # "related_name" option.
-        return self.rel.related_name or opts.object_name.lower()
+        return self.rel.related_name or self.opts.object_name.lower()
 
 class SingleRelatedObjectDescriptor(object):
     # This class provides the functionality that makes the related-object
@@ -179,7 +213,7 @@
     # SingleRelatedObjectDescriptor instance.
     def __init__(self, related):
         self.related = related
-        self.cache_name = '_%s_cache' % related.get_accessor_name()
+        self.cache_name = related.get_cache_name()
 
     def __get__(self, instance, instance_type=None):
         if instance is None:
@@ -188,13 +222,14 @@
             return getattr(instance, self.cache_name)
         except AttributeError:
             params = {'%s__pk' % self.related.field.name: instance._get_pk_val()}
-            rel_obj = self.related.model._base_manager.get(**params)
+            db = router.db_for_read(self.related.model, instance=instance)
+            rel_obj = self.related.model._base_manager.using(db).get(**params)
             setattr(instance, self.cache_name, rel_obj)
             return rel_obj
 
     def __set__(self, instance, value):
         if instance is None:
-            raise AttributeError, "%s must be accessed via instance" % self.related.opts.object_name
+            raise AttributeError("%s must be accessed via instance" % self.related.opts.object_name)
 
         # The similarity of the code below to the code in
         # ReverseSingleRelatedObjectDescriptor is annoying, but there's a bunch
@@ -209,6 +244,15 @@
             raise ValueError('Cannot assign "%r": "%s.%s" must be a "%s" instance.' %
                                 (value, instance._meta.object_name,
                                  self.related.get_accessor_name(), self.related.opts.object_name))
+        elif value is not None:
+            if instance._state.db is None:
+                instance._state.db = router.db_for_write(instance.__class__, instance=value)
+            elif value._state.db is None:
+                value._state.db = router.db_for_write(value.__class__, instance=instance)
+            elif value._state.db is not None and instance._state.db is not None:
+                if not router.allow_relation(value, instance):
+                    raise ValueError('Cannot assign "%r": instance is on database "%s", value is on database "%s"' %
+                                        (value, instance._state.db, value._state.db))
 
         # Set the value of the related field to the value of the related object's related field
         setattr(value, self.related.field.attname, getattr(instance, self.related.field.rel.get_related_field().attname))
@@ -251,16 +295,17 @@
             # If the related manager indicates that it should be used for
             # related fields, respect that.
             rel_mgr = self.field.rel.to._default_manager
+            db = router.db_for_read(self.field.rel.to, instance=instance)
             if getattr(rel_mgr, 'use_for_related_fields', False):
-                rel_obj = rel_mgr.get(**params)
+                rel_obj = rel_mgr.using(db).get(**params)
             else:
-                rel_obj = QuerySet(self.field.rel.to).get(**params)
+                rel_obj = QuerySet(self.field.rel.to).using(db).get(**params)
             setattr(instance, cache_name, rel_obj)
             return rel_obj
 
     def __set__(self, instance, value):
         if instance is None:
-            raise AttributeError, "%s must be accessed via instance" % self._field.name
+            raise AttributeError("%s must be accessed via instance" % self._field.name)
 
         # If null=True, we can assign null here, but otherwise the value needs
         # to be an instance of the related class.
@@ -271,6 +316,15 @@
             raise ValueError('Cannot assign "%r": "%s.%s" must be a "%s" instance.' %
                                 (value, instance._meta.object_name,
                                  self.field.name, self.field.rel.to._meta.object_name))
+        elif value is not None:
+            if instance._state.db is None:
+                instance._state.db = router.db_for_write(instance.__class__, instance=value)
+            elif value._state.db is None:
+                value._state.db = router.db_for_write(value.__class__, instance=instance)
+            elif value._state.db is not None and instance._state.db is not None:
+                if not router.allow_relation(value, instance):
+                    raise ValueError('Cannot assign "%r": instance is on database "%s", value is on database "%s"' %
+                                        (value, instance._state.db, value._state.db))
 
         # If we're setting the value of a OneToOneField to None, we need to clear
         # out the cache on any old related object. Otherwise, deleting the
@@ -289,7 +343,7 @@
             # cache. This cache also might not exist if the related object
             # hasn't been accessed yet.
             if related:
-                cache_name = '_%s_cache' % self.field.related.get_accessor_name()
+                cache_name = self.field.related.get_cache_name()
                 try:
                     delattr(related, cache_name)
                 except AttributeError:
@@ -325,7 +379,7 @@
 
     def __set__(self, instance, value):
         if instance is None:
-            raise AttributeError, "Manager must be accessed via instance"
+            raise AttributeError("Manager must be accessed via instance")
 
         manager = self.__get__(instance)
         # If the foreign key can support nulls, then completely clear the related set.
@@ -352,26 +406,29 @@
 
         class RelatedManager(superclass):
             def get_query_set(self):
-                return superclass.get_query_set(self).filter(**(self.core_filters))
+                db = self._db or router.db_for_read(rel_model, instance=instance)
+                return superclass.get_query_set(self).using(db).filter(**(self.core_filters))
 
             def add(self, *objs):
                 for obj in objs:
                     if not isinstance(obj, self.model):
-                        raise TypeError, "'%s' instance expected" % self.model._meta.object_name
+                        raise TypeError("'%s' instance expected" % self.model._meta.object_name)
                     setattr(obj, rel_field.name, instance)
                     obj.save()
             add.alters_data = True
 
             def create(self, **kwargs):
                 kwargs.update({rel_field.name: instance})
-                return super(RelatedManager, self).create(**kwargs)
+                db = router.db_for_write(rel_model, instance=instance)
+                return super(RelatedManager, self).using(db).create(**kwargs)
             create.alters_data = True
 
             def get_or_create(self, **kwargs):
                 # Update kwargs with the related object that this
                 # ForeignRelatedObjectsDescriptor knows about.
                 kwargs.update({rel_field.name: instance})
-                return super(RelatedManager, self).get_or_create(**kwargs)
+                db = router.db_for_write(rel_model, instance=instance)
+                return super(RelatedManager, self).using(db).get_or_create(**kwargs)
             get_or_create.alters_data = True
 
             # remove() and clear() are only provided if the ForeignKey can have a value of null.
@@ -384,7 +441,7 @@
                             setattr(obj, rel_field.name, None)
                             obj.save()
                         else:
-                            raise rel_field.rel.to.DoesNotExist, "%r is not related to %r." % (obj, instance)
+                            raise rel_field.rel.to.DoesNotExist("%r is not related to %r." % (obj, instance))
                 remove.alters_data = True
 
                 def clear(self):
@@ -401,68 +458,74 @@
 
         return manager
 
-def create_many_related_manager(superclass, through=False):
+def create_many_related_manager(superclass, rel=False):
     """Creates a manager that subclasses 'superclass' (which is a Manager)
     and adds behavior for many-to-many related objects."""
+    through = rel.through
     class ManyRelatedManager(superclass):
         def __init__(self, model=None, core_filters=None, instance=None, symmetrical=None,
-                join_table=None, source_col_name=None, target_col_name=None):
+                join_table=None, source_field_name=None, target_field_name=None,
+                reverse=False):
             super(ManyRelatedManager, self).__init__()
             self.core_filters = core_filters
             self.model = model
             self.symmetrical = symmetrical
             self.instance = instance
-            self.join_table = join_table
-            self.source_col_name = source_col_name
-            self.target_col_name = target_col_name
+            self.source_field_name = source_field_name
+            self.target_field_name = target_field_name
             self.through = through
-            self._pk_val = self.instance._get_pk_val()
+            self._pk_val = self.instance.pk
+            self.reverse = reverse
             if self._pk_val is None:
                 raise ValueError("%r instance needs to have a primary key value before a many-to-many relationship can be used." % instance.__class__.__name__)
 
         def get_query_set(self):
-            return superclass.get_query_set(self)._next_is_sticky().filter(**(self.core_filters))
+            db = self._db or router.db_for_read(self.instance.__class__, instance=self.instance)
+            return superclass.get_query_set(self).using(db)._next_is_sticky().filter(**(self.core_filters))
 
         # If the ManyToMany relation has an intermediary model,
         # the add and remove methods do not exist.
-        if through is None:
+        if rel.through._meta.auto_created:
             def add(self, *objs):
-                self._add_items(self.source_col_name, self.target_col_name, *objs)
+                self._add_items(self.source_field_name, self.target_field_name, *objs)
 
                 # If this is a symmetrical m2m relation to self, add the mirror entry in the m2m table
                 if self.symmetrical:
-                    self._add_items(self.target_col_name, self.source_col_name, *objs)
+                    self._add_items(self.target_field_name, self.source_field_name, *objs)
             add.alters_data = True
 
             def remove(self, *objs):
-                self._remove_items(self.source_col_name, self.target_col_name, *objs)
+                self._remove_items(self.source_field_name, self.target_field_name, *objs)
 
                 # If this is a symmetrical m2m relation to self, remove the mirror entry in the m2m table
                 if self.symmetrical:
-                    self._remove_items(self.target_col_name, self.source_col_name, *objs)
+                    self._remove_items(self.target_field_name, self.source_field_name, *objs)
             remove.alters_data = True
 
         def clear(self):
-            self._clear_items(self.source_col_name)
+            self._clear_items(self.source_field_name)
 
             # If this is a symmetrical m2m relation to self, clear the mirror entry in the m2m table
             if self.symmetrical:
-                self._clear_items(self.target_col_name)
+                self._clear_items(self.target_field_name)
         clear.alters_data = True
 
         def create(self, **kwargs):
             # This check needs to be done here, since we can't later remove this
             # from the method lookup table, as we do with add and remove.
-            if through is not None:
-                raise AttributeError, "Cannot use create() on a ManyToManyField which specifies an intermediary model. Use %s's Manager instead." % through
-            new_obj = super(ManyRelatedManager, self).create(**kwargs)
+            if not rel.through._meta.auto_created:
+                opts = through._meta
+                raise AttributeError("Cannot use create() on a ManyToManyField which specifies an intermediary model. Use %s.%s's Manager instead." % (opts.app_label, opts.object_name))
+            db = router.db_for_write(self.instance.__class__, instance=self.instance)
+            new_obj = super(ManyRelatedManager, self).using(db).create(**kwargs)
             self.add(new_obj)
             return new_obj
         create.alters_data = True
 
         def get_or_create(self, **kwargs):
+            db = router.db_for_write(self.instance.__class__, instance=self.instance)
             obj, created = \
-                    super(ManyRelatedManager, self).get_or_create(**kwargs)
+                super(ManyRelatedManager, self).using(db).get_or_create(**kwargs)
             # We only need to add() if created because if we got an object back
             # from get() then the relationship already exists.
             if created:
@@ -470,41 +533,54 @@
             return obj, created
         get_or_create.alters_data = True
 
-        def _add_items(self, source_col_name, target_col_name, *objs):
+        def _add_items(self, source_field_name, target_field_name, *objs):
             # join_table: name of the m2m link table
-            # source_col_name: the PK colname in join_table for the source object
-            # target_col_name: the PK colname in join_table for the target object
+            # source_field_name: the PK fieldname in join_table for the source object
+            # target_field_name: the PK fieldname in join_table for the target object
             # *objs - objects to add. Either object instances, or primary keys of object instances.
 
             # If there aren't any objects, there is nothing to do.
+            from django.db.models import Model
             if objs:
-                from django.db.models.base import Model
-                # Check that all the objects are of the right type
                 new_ids = set()
                 for obj in objs:
                     if isinstance(obj, self.model):
-                        new_ids.add(obj._get_pk_val())
+                        if not router.allow_relation(obj, self.instance):
+                           raise ValueError('Cannot add "%r": instance is on database "%s", value is on database "%s"' %
+                                               (obj, self.instance._state.db, obj._state.db))
+                        new_ids.add(obj.pk)
                     elif isinstance(obj, Model):
-                        raise TypeError, "'%s' instance expected" % self.model._meta.object_name
+                        raise TypeError("'%s' instance expected" % self.model._meta.object_name)
                     else:
                         new_ids.add(obj)
-                # Add the newly created or already existing objects to the join table.
-                # First find out which items are already added, to avoid adding them twice
-                cursor = connection.cursor()
-                cursor.execute("SELECT %s FROM %s WHERE %s = %%s AND %s IN (%s)" % \
-                    (target_col_name, self.join_table, source_col_name,
-                    target_col_name, ",".join(['%s'] * len(new_ids))),
-                    [self._pk_val] + list(new_ids))
-                existing_ids = set([row[0] for row in cursor.fetchall()])
+                db = router.db_for_write(self.through.__class__, instance=self.instance)
+                vals = self.through._default_manager.using(db).values_list(target_field_name, flat=True)
+                vals = vals.filter(**{
+                    source_field_name: self._pk_val,
+                    '%s__in' % target_field_name: new_ids,
+                })
+                new_ids = new_ids - set(vals)
 
+                if self.reverse or source_field_name == self.source_field_name:
+                    # Don't send the signal when we are inserting the
+                    # duplicate data row for symmetrical reverse entries.
+                    signals.m2m_changed.send(sender=rel.through, action='pre_add',
+                        instance=self.instance, reverse=self.reverse,
+                        model=self.model, pk_set=new_ids)
                 # Add the ones that aren't there already
-                for obj_id in (new_ids - existing_ids):
-                    cursor.execute("INSERT INTO %s (%s, %s) VALUES (%%s, %%s)" % \
-                        (self.join_table, source_col_name, target_col_name),
-                        [self._pk_val, obj_id])
-                transaction.commit_unless_managed()
+                for obj_id in new_ids:
+                    self.through._default_manager.using(db).create(**{
+                        '%s_id' % source_field_name: self._pk_val,
+                        '%s_id' % target_field_name: obj_id,
+                    })
+                if self.reverse or source_field_name == self.source_field_name:
+                    # Don't send the signal when we are inserting the
+                    # duplicate data row for symmetrical reverse entries.
+                    signals.m2m_changed.send(sender=rel.through, action='post_add',
+                        instance=self.instance, reverse=self.reverse,
+                        model=self.model, pk_set=new_ids)
 
-        def _remove_items(self, source_col_name, target_col_name, *objs):
+        def _remove_items(self, source_field_name, target_field_name, *objs):
             # source_col_name: the PK colname in join_table for the source object
             # target_col_name: the PK colname in join_table for the target object
             # *objs - objects to remove
@@ -515,24 +591,46 @@
                 old_ids = set()
                 for obj in objs:
                     if isinstance(obj, self.model):
-                        old_ids.add(obj._get_pk_val())
+                        old_ids.add(obj.pk)
                     else:
                         old_ids.add(obj)
+                if self.reverse or source_field_name == self.source_field_name:
+                    # Don't send the signal when we are deleting the
+                    # duplicate data row for symmetrical reverse entries.
+                    signals.m2m_changed.send(sender=rel.through, action="pre_remove",
+                        instance=self.instance, reverse=self.reverse,
+                        model=self.model, pk_set=old_ids)
                 # Remove the specified objects from the join table
-                cursor = connection.cursor()
-                cursor.execute("DELETE FROM %s WHERE %s = %%s AND %s IN (%s)" % \
-                    (self.join_table, source_col_name,
-                    target_col_name, ",".join(['%s'] * len(old_ids))),
-                    [self._pk_val] + list(old_ids))
-                transaction.commit_unless_managed()
+                db = router.db_for_write(self.through.__class__, instance=self.instance)
+                self.through._default_manager.using(db).filter(**{
+                    source_field_name: self._pk_val,
+                    '%s__in' % target_field_name: old_ids
+                }).delete()
+                if self.reverse or source_field_name == self.source_field_name:
+                    # Don't send the signal when we are deleting the
+                    # duplicate data row for symmetrical reverse entries.
+                    signals.m2m_changed.send(sender=rel.through, action="post_remove",
+                        instance=self.instance, reverse=self.reverse,
+                        model=self.model, pk_set=old_ids)
 
-        def _clear_items(self, source_col_name):
+        def _clear_items(self, source_field_name):
             # source_col_name: the PK colname in join_table for the source object
-            cursor = connection.cursor()
-            cursor.execute("DELETE FROM %s WHERE %s = %%s" % \
-                (self.join_table, source_col_name),
-                [self._pk_val])
-            transaction.commit_unless_managed()
+            if self.reverse or source_field_name == self.source_field_name:
+                # Don't send the signal when we are clearing the
+                # duplicate data rows for symmetrical reverse entries.
+                signals.m2m_changed.send(sender=rel.through, action="pre_clear",
+                    instance=self.instance, reverse=self.reverse,
+                    model=self.model, pk_set=None)
+            db = router.db_for_write(self.through.__class__, instance=self.instance)
+            self.through._default_manager.using(db).filter(**{
+                source_field_name: self._pk_val
+            }).delete()
+            if self.reverse or source_field_name == self.source_field_name:
+                # Don't send the signal when we are clearing the
+                # duplicate data rows for symmetrical reverse entries.
+                signals.m2m_changed.send(sender=rel.through, action="post_clear",
+                    instance=self.instance, reverse=self.reverse,
+                    model=self.model, pk_set=None)
 
     return ManyRelatedManager
 
@@ -554,33 +652,33 @@
         # model's default manager.
         rel_model = self.related.model
         superclass = rel_model._default_manager.__class__
-        RelatedManager = create_many_related_manager(superclass, self.related.field.rel.through)
+        RelatedManager = create_many_related_manager(superclass, self.related.field.rel)
 
-        qn = connection.ops.quote_name
         manager = RelatedManager(
             model=rel_model,
             core_filters={'%s__pk' % self.related.field.name: instance._get_pk_val()},
             instance=instance,
             symmetrical=False,
-            join_table=qn(self.related.field.m2m_db_table()),
-            source_col_name=qn(self.related.field.m2m_reverse_name()),
-            target_col_name=qn(self.related.field.m2m_column_name())
+            source_field_name=self.related.field.m2m_reverse_field_name(),
+            target_field_name=self.related.field.m2m_field_name(),
+            reverse=True
         )
 
         return manager
 
     def __set__(self, instance, value):
         if instance is None:
-            raise AttributeError, "Manager must be accessed via instance"
+            raise AttributeError("Manager must be accessed via instance")
 
-        through = getattr(self.related.field.rel, 'through', None)
-        if through is not None:
-            raise AttributeError, "Cannot set values on a ManyToManyField which specifies an intermediary model. Use %s's Manager instead." % through
+        if not self.related.field.rel.through._meta.auto_created:
+            opts = self.related.field.rel.through._meta
+            raise AttributeError("Cannot set values on a ManyToManyField which specifies an intermediary model. Use %s.%s's Manager instead." % (opts.app_label, opts.object_name))
 
         manager = self.__get__(instance)
         manager.clear()
         manager.add(*value)
 
+
 class ReverseManyRelatedObjectsDescriptor(object):
     # This class provides the functionality that makes the related-object
     # managers available as attributes on a model class, for fields that have
@@ -591,6 +689,13 @@
     def __init__(self, m2m_field):
         self.field = m2m_field
 
+    def _through(self):
+        # through is provided so that you have easy access to the through
+        # model (Book.authors.through) for inlines, etc. This is done as
+        # a property to ensure that the fully resolved value is returned.
+        return self.field.rel.through
+    through = property(_through)
+
     def __get__(self, instance, instance_type=None):
         if instance is None:
             return self
@@ -599,28 +704,27 @@
         # model's default manager.
         rel_model=self.field.rel.to
         superclass = rel_model._default_manager.__class__
-        RelatedManager = create_many_related_manager(superclass, self.field.rel.through)
+        RelatedManager = create_many_related_manager(superclass, self.field.rel)
 
-        qn = connection.ops.quote_name
         manager = RelatedManager(
             model=rel_model,
             core_filters={'%s__pk' % self.field.related_query_name(): instance._get_pk_val()},
             instance=instance,
-            symmetrical=(self.field.rel.symmetrical and isinstance(instance, rel_model)),
-            join_table=qn(self.field.m2m_db_table()),
-            source_col_name=qn(self.field.m2m_column_name()),
-            target_col_name=qn(self.field.m2m_reverse_name())
+            symmetrical=self.field.rel.symmetrical,
+            source_field_name=self.field.m2m_field_name(),
+            target_field_name=self.field.m2m_reverse_field_name(),
+            reverse=False
         )
 
         return manager
 
     def __set__(self, instance, value):
         if instance is None:
-            raise AttributeError, "Manager must be accessed via instance"
+            raise AttributeError("Manager must be accessed via instance")
 
-        through = getattr(self.field.rel, 'through', None)
-        if through is not None:
-            raise AttributeError, "Cannot set values on a ManyToManyField which specifies an intermediary model.  Use %s's Manager instead." % through
+        if not self.field.rel.through._meta.auto_created:
+            opts = self.field.rel.through._meta
+            raise AttributeError("Cannot set values on a ManyToManyField which specifies an intermediary model.  Use %s.%s's Manager instead." % (opts.app_label, opts.object_name))
 
         manager = self.__get__(instance)
         manager.clear()
@@ -642,6 +746,10 @@
         self.multiple = True
         self.parent_link = parent_link
 
+    def is_hidden(self):
+        "Should the related object be hidden?"
+        return self.related_name and self.related_name[-1] == '+'
+
     def get_related_field(self):
         """
         Returns the Field in the 'to' object to which this relationship is
@@ -673,6 +781,10 @@
         self.multiple = True
         self.through = through
 
+    def is_hidden(self):
+        "Should the related object be hidden?"
+        return self.related_name and self.related_name[-1] == '+'
+
     def get_related_field(self):
         """
         Returns the field in the to' object to which this relationship is tied
@@ -683,6 +795,10 @@
 
 class ForeignKey(RelatedField, Field):
     empty_strings_allowed = False
+    default_error_messages = {
+        'invalid': _('Model %(model)s with pk %(pk)r does not exist.')
+    }
+    description = _("Foreign Key (type determined by related field)")
     def __init__(self, to, to_field=None, rel_class=ManyToOneRel, **kwargs):
         try:
             to_name = to._meta.object_name.lower()
@@ -690,7 +806,10 @@
             assert isinstance(to, basestring), "%s(%r) is invalid. First parameter to ForeignKey must be either a model, a model name, or the string %r" % (self.__class__.__name__, to, RECURSIVE_RELATIONSHIP_CONSTANT)
         else:
             assert not to._meta.abstract, "%s cannot define a relation with abstract class %s" % (self.__class__.__name__, to._meta.object_name)
-            to_field = to_field or to._meta.pk.name
+            # For backwards compatibility purposes, we need to *try* and set
+            # the to_field during FK construction. It won't be guaranteed to
+            # be correct until contribute_to_class is called. Refs #12190.
+            to_field = to_field or (to._meta.pk and to._meta.pk.name)
         kwargs['verbose_name'] = kwargs.get('verbose_name', None)
 
         kwargs['rel'] = rel_class(to, to_field,
@@ -702,6 +821,19 @@
 
         self.db_index = True
 
+    def validate(self, value, model_instance):
+        if self.rel.parent_link:
+            return
+        super(ForeignKey, self).validate(value, model_instance)
+        if value is None:
+            return
+
+        qs = self.rel.to._default_manager.filter(**{self.rel.field_name:value})
+        qs = qs.complex_filter(self.rel.limit_choices_to)
+        if not qs.exists():
+            raise exceptions.ValidationError(self.error_messages['invalid'] % {
+                'model': self.rel.to._meta.verbose_name, 'pk': value})
+
     def get_attname(self):
         return '%s_id' % self.name
 
@@ -715,11 +847,12 @@
             return getattr(field_default, self.rel.get_related_field().attname)
         return field_default
 
-    def get_db_prep_save(self, value):
+    def get_db_prep_save(self, value, connection):
         if value == '' or value == None:
             return None
         else:
-            return self.rel.get_related_field().get_db_prep_save(value)
+            return self.rel.get_related_field().get_db_prep_save(value,
+                connection=connection)
 
     def value_to_string(self, obj):
         if not obj:
@@ -743,19 +876,24 @@
         cls._meta.duplicate_targets[self.column] = (target, "o2m")
 
     def contribute_to_related_class(self, cls, related):
-        setattr(cls, related.get_accessor_name(), ForeignRelatedObjectsDescriptor(related))
+        # Internal FK's - i.e., those with a related name ending with '+' -
+        # don't get a related descriptor.
+        if not self.rel.is_hidden():
+            setattr(cls, related.get_accessor_name(), ForeignRelatedObjectsDescriptor(related))
+        if self.rel.field_name is None:
+            self.rel.field_name = cls._meta.pk.name
 
     def formfield(self, **kwargs):
+        db = kwargs.pop('using', None)
         defaults = {
             'form_class': forms.ModelChoiceField,
-            'queryset': self.rel.to._default_manager.complex_filter(
-                                                    self.rel.limit_choices_to),
+            'queryset': self.rel.to._default_manager.using(db).complex_filter(self.rel.limit_choices_to),
             'to_field_name': self.rel.field_name,
         }
         defaults.update(kwargs)
         return super(ForeignKey, self).formfield(**defaults)
 
-    def db_type(self):
+    def db_type(self, connection):
         # The database column type of a ForeignKey is the column type
         # of the field to which it points. An exception is if the ForeignKey
         # points to an AutoField/PositiveIntegerField/PositiveSmallIntegerField,
@@ -767,8 +905,8 @@
                 (not connection.features.related_fields_match_type and
                 isinstance(rel_field, (PositiveIntegerField,
                                        PositiveSmallIntegerField)))):
-            return IntegerField().db_type()
-        return rel_field.db_type()
+            return IntegerField().db_type(connection=connection)
+        return rel_field.db_type(connection=connection)
 
 class OneToOneField(ForeignKey):
     """
@@ -777,6 +915,7 @@
     always returns the object pointed to (since there will only ever be one),
     rather than returning a list.
     """
+    description = _("One-to-one relationship")
     def __init__(self, to, to_field=None, **kwargs):
         kwargs['unique'] = True
         super(OneToOneField, self).__init__(to, to_field, OneToOneRel, **kwargs)
@@ -790,7 +929,55 @@
             return None
         return super(OneToOneField, self).formfield(**kwargs)
 
+    def save_form_data(self, instance, data):
+        if isinstance(data, self.rel.to):
+            setattr(instance, self.name, data)
+        else:
+            setattr(instance, self.attname, data)
+
+def create_many_to_many_intermediary_model(field, klass):
+    from django.db import models
+    managed = True
+    if isinstance(field.rel.to, basestring) and field.rel.to != RECURSIVE_RELATIONSHIP_CONSTANT:
+        to_model = field.rel.to
+        to = to_model.split('.')[-1]
+        def set_managed(field, model, cls):
+            field.rel.through._meta.managed = model._meta.managed or cls._meta.managed
+        add_lazy_relation(klass, field, to_model, set_managed)
+    elif isinstance(field.rel.to, basestring):
+        to = klass._meta.object_name
+        to_model = klass
+        managed = klass._meta.managed
+    else:
+        to = field.rel.to._meta.object_name
+        to_model = field.rel.to
+        managed = klass._meta.managed or to_model._meta.managed
+    name = '%s_%s' % (klass._meta.object_name, field.name)
+    if field.rel.to == RECURSIVE_RELATIONSHIP_CONSTANT or to == klass._meta.object_name:
+        from_ = 'from_%s' % to.lower()
+        to = 'to_%s' % to.lower()
+    else:
+        from_ = klass._meta.object_name.lower()
+        to = to.lower()
+    meta = type('Meta', (object,), {
+        'db_table': field._get_m2m_db_table(klass._meta),
+        'managed': managed,
+        'auto_created': klass,
+        'app_label': klass._meta.app_label,
+        'unique_together': (from_, to),
+        'verbose_name': '%(from)s-%(to)s relationship' % {'from': from_, 'to': to},
+        'verbose_name_plural': '%(from)s-%(to)s relationships' % {'from': from_, 'to': to},
+    })
+    # Construct and return the new class.
+    return type(name, (models.Model,), {
+        'Meta': meta,
+        '__module__': klass.__module__,
+        from_: models.ForeignKey(klass, related_name='%s+' % name),
+        to: models.ForeignKey(to_model, related_name='%s+' % name)
+    })
+
 class ManyToManyField(RelatedField, Field):
+    description = _("Many-to-many relationship")
     def __init__(self, to, **kwargs):
         try:
             assert not to._meta.abstract, "%s cannot define a relation with abstract class %s" % (self.__class__.__name__, to._meta.object_name)
@@ -801,19 +988,16 @@
         kwargs['rel'] = ManyToManyRel(to,
             related_name=kwargs.pop('related_name', None),
             limit_choices_to=kwargs.pop('limit_choices_to', None),
-            symmetrical=kwargs.pop('symmetrical', True),
+            symmetrical=kwargs.pop('symmetrical', to==RECURSIVE_RELATIONSHIP_CONSTANT),
             through=kwargs.pop('through', None))
 
         self.db_table = kwargs.pop('db_table', None)
         if kwargs['rel'].through is not None:
-            self.creates_table = False
             assert self.db_table is None, "Cannot specify a db_table if an intermediary model is used."
-        else:
-            self.creates_table = True
 
         Field.__init__(self, **kwargs)
 
-        msg = ugettext_lazy('Hold down "Control", or "Command" on a Mac, to select more than one.')
+        msg = _('Hold down "Control", or "Command" on a Mac, to select more than one.')
         self.help_text = string_concat(self.help_text, ' ', msg)
 
     def get_choices_default(self):
@@ -822,62 +1006,45 @@
     def _get_m2m_db_table(self, opts):
         "Function that can be curried to provide the m2m table name for this relation"
         if self.rel.through is not None:
-            return self.rel.through_model._meta.db_table
+            return self.rel.through._meta.db_table
         elif self.db_table:
             return self.db_table
         else:
             return util.truncate_name('%s_%s' % (opts.db_table, self.name),
                                       connection.ops.max_name_length())
 
-    def _get_m2m_column_name(self, related):
-        "Function that can be curried to provide the source column name for the m2m table"
-        try:
-            return self._m2m_column_name_cache
-        except:
-            if self.rel.through is not None:
-                for f in self.rel.through_model._meta.fields:
-                    if hasattr(f,'rel') and f.rel and f.rel.to == related.model:
-                        self._m2m_column_name_cache = f.column
-                        break
-            # If this is an m2m relation to self, avoid the inevitable name clash
-            elif related.model == related.parent_model:
-                self._m2m_column_name_cache = 'from_' + related.model._meta.object_name.lower() + '_id'
-            else:
-                self._m2m_column_name_cache = related.model._meta.object_name.lower() + '_id'
-
-            # Return the newly cached value
-            return self._m2m_column_name_cache
+    def _get_m2m_attr(self, related, attr):
+        "Function that can be curried to provide the source accessor or DB column name for the m2m table"
+        cache_attr = '_m2m_%s_cache' % attr
+        if hasattr(self, cache_attr):
+            return getattr(self, cache_attr)
+        for f in self.rel.through._meta.fields:
+            if hasattr(f,'rel') and f.rel and f.rel.to == related.model:
+                setattr(self, cache_attr, getattr(f, attr))
+                return getattr(self, cache_attr)
 
-    def _get_m2m_reverse_name(self, related):
-        "Function that can be curried to provide the related column name for the m2m table"
-        try:
-            return self._m2m_reverse_name_cache
-        except:
-            if self.rel.through is not None:
-                found = False
-                for f in self.rel.through_model._meta.fields:
-                    if hasattr(f,'rel') and f.rel and f.rel.to == related.parent_model:
-                        if related.model == related.parent_model:
-                            # If this is an m2m-intermediate to self,
-                            # the first foreign key you find will be
-                            # the source column. Keep searching for
-                            # the second foreign key.
-                            if found:
-                                self._m2m_reverse_name_cache = f.column
-                                break
-                            else:
-                                found = True
-                        else:
-                            self._m2m_reverse_name_cache = f.column
-                            break
-            # If this is an m2m relation to self, avoid the inevitable name clash
-            elif related.model == related.parent_model:
-                self._m2m_reverse_name_cache = 'to_' + related.parent_model._meta.object_name.lower() + '_id'
-            else:
-                self._m2m_reverse_name_cache = related.parent_model._meta.object_name.lower() + '_id'
-
-            # Return the newly cached value
-            return self._m2m_reverse_name_cache
+    def _get_m2m_reverse_attr(self, related, attr):
+        "Function that can be curried to provide the related accessor or DB column name for the m2m table"
+        cache_attr = '_m2m_reverse_%s_cache' % attr
+        if hasattr(self, cache_attr):
+            return getattr(self, cache_attr)
+        found = False
+        for f in self.rel.through._meta.fields:
+            if hasattr(f,'rel') and f.rel and f.rel.to == related.parent_model:
+                if related.model == related.parent_model:
+                    # If this is an m2m-intermediate to self,
+                    # the first foreign key you find will be
+                    # the source column. Keep searching for
+                    # the second foreign key.
+                    if found:
+                        setattr(self, cache_attr, getattr(f, attr))
+                        break
+                    else:
+                        found = True
+                else:
+                    setattr(self, cache_attr, getattr(f, attr))
+                    break
+        return getattr(self, cache_attr)
 
     def isValidIDList(self, field_data, all_data):
         "Validates that the value is a valid list of foreign keys"
@@ -919,10 +1086,17 @@
         # specify *what* on my non-reversible relation?!"), so we set it up
         # automatically. The funky name reduces the chance of an accidental
         # clash.
-        if self.rel.symmetrical and self.rel.to == "self" and self.rel.related_name is None:
+        if self.rel.symmetrical and (self.rel.to == "self" or self.rel.to == cls._meta.object_name):
             self.rel.related_name = "%s_rel_+" % name
 
         super(ManyToManyField, self).contribute_to_class(cls, name)
+
+        # The intermediate m2m model is not auto created if:
+        #  1) There is a manually specified intermediate, or
+        #  2) The class owning the m2m field is abstract.
+        if not self.rel.through and not cls._meta.abstract:
+            self.rel.through = create_many_to_many_intermediary_model(self, cls)
+
         # Add the descriptor for the m2m relation
         setattr(cls, self.name, ReverseManyRelatedObjectsDescriptor(self))
 
@@ -933,11 +1107,8 @@
         # work correctly.
         if isinstance(self.rel.through, basestring):
             def resolve_through_model(field, model, cls):
-                field.rel.through_model = model
+                field.rel.through = model
             add_lazy_relation(cls, self, self.rel.through, resolve_through_model)
-        elif self.rel.through:
-            self.rel.through_model = self.rel.through
-            self.rel.through = self.rel.through._meta.object_name
 
         if isinstance(self.rel.to, basestring):
             target = self.rel.to
@@ -946,15 +1117,17 @@
         cls._meta.duplicate_targets[self.column] = (target, "m2m")
 
     def contribute_to_related_class(self, cls, related):
-        # m2m relations to self do not have a ManyRelatedObjectsDescriptor,
-        # as it would be redundant - unless the field is non-symmetrical.
-        if related.model != related.parent_model or not self.rel.symmetrical:
-            # Add the descriptor for the m2m relation
+        # Internal M2Ms (i.e., those with a related name ending with '+')
+        # don't get a related descriptor.
+        if not self.rel.is_hidden():
             setattr(cls, related.get_accessor_name(), ManyRelatedObjectsDescriptor(related))
 
         # Set up the accessors for the column names on the m2m table
-        self.m2m_column_name = curry(self._get_m2m_column_name, related)
-        self.m2m_reverse_name = curry(self._get_m2m_reverse_name, related)
+        self.m2m_column_name = curry(self._get_m2m_attr, related, 'column')
+        self.m2m_reverse_name = curry(self._get_m2m_reverse_attr, related, 'column')
+
+        self.m2m_field_name = curry(self._get_m2m_attr, related, 'name')
+        self.m2m_reverse_field_name = curry(self._get_m2m_reverse_attr, related, 'name')
 
     def set_attributes_from_rel(self):
         pass
@@ -967,7 +1140,11 @@
         setattr(instance, self.attname, data)
 
     def formfield(self, **kwargs):
-        defaults = {'form_class': forms.ModelMultipleChoiceField, 'queryset': self.rel.to._default_manager.complex_filter(self.rel.limit_choices_to)}
+        db = kwargs.pop('using', None)
+        defaults = {
+            'form_class': forms.ModelMultipleChoiceField,
+            'queryset': self.rel.to._default_manager.using(db).complex_filter(self.rel.limit_choices_to)
+        }
         defaults.update(kwargs)
         # If initial is passed in, it's a list of related objects, but the
         # MultipleChoiceField takes a list of IDs.
@@ -978,7 +1155,7 @@
             defaults['initial'] = [i._get_pk_val() for i in initial]
         return super(ManyToManyField, self).formfield(**defaults)
 
-    def db_type(self):
+    def db_type(self, connection):
         # A ManyToManyField is not represented by a single column,
         # so return None.
         return None
--- a/web/lib/django/db/models/fields/subclassing.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/fields/subclassing.py	Tue May 25 02:43:45 2010 +0200
@@ -1,11 +1,77 @@
 """
-Convenience routines for creating non-trivial Field subclasses.
+Convenience routines for creating non-trivial Field subclasses, as well as
+backwards compatibility utilities.
 
 Add SubfieldBase as the __metaclass__ for your Field subclass, implement
 to_python() and the other necessary methods and everything will work seamlessly.
 """
 
-class SubfieldBase(type):
+from inspect import getargspec
+from warnings import warn
+
+def call_with_connection(func):
+    arg_names, varargs, varkwargs, defaults = getargspec(func)
+    updated = ('connection' in arg_names or varkwargs)
+    if not updated:
+        warn("A Field class whose %s method hasn't been updated to take a "
+            "`connection` argument." % func.__name__,
+            PendingDeprecationWarning, stacklevel=2)
+
+    def inner(*args, **kwargs):
+        if 'connection' not in kwargs:
+            from django.db import connection
+            kwargs['connection'] = connection
+            warn("%s has been called without providing a connection argument. " %
+                func.__name__, PendingDeprecationWarning,
+                stacklevel=1)
+        if updated:
+            return func(*args, **kwargs)
+        if 'connection' in kwargs:
+            del kwargs['connection']
+        return func(*args, **kwargs)
+    return inner
+
+def call_with_connection_and_prepared(func):
+    arg_names, varargs, varkwargs, defaults = getargspec(func)
+    updated = (
+        ('connection' in arg_names or varkwargs) and
+        ('prepared' in arg_names or varkwargs)
+    )
+    if not updated:
+        warn("A Field class whose %s method hasn't been updated to take "
+            "`connection` and `prepared` arguments." % func.__name__,
+            PendingDeprecationWarning, stacklevel=2)
+
+    def inner(*args, **kwargs):
+        if 'connection' not in kwargs:
+            from django.db import connection
+            kwargs['connection'] = connection
+            warn("%s has been called without providing a connection argument. " %
+                func.__name__, PendingDeprecationWarning,
+                stacklevel=1)
+        if updated:
+            return func(*args, **kwargs)
+        if 'connection' in kwargs:
+            del kwargs['connection']
+        if 'prepared' in kwargs:
+            del kwargs['prepared']
+        return func(*args, **kwargs)
+    return inner
+
+class LegacyConnection(type):
+    """
+    A metaclass to normalize arguments give to the get_db_prep_* and db_type
+    methods on fields.
+    """
+    def __new__(cls, names, bases, attrs):
+        new_cls = super(LegacyConnection, cls).__new__(cls, names, bases, attrs)
+        for attr in ('db_type', 'get_db_prep_save'):
+            setattr(new_cls, attr, call_with_connection(getattr(new_cls, attr)))
+        for attr in ('get_db_prep_lookup', 'get_db_prep_value'):
+            setattr(new_cls, attr, call_with_connection_and_prepared(getattr(new_cls, attr)))
+        return new_cls
+
+class SubfieldBase(LegacyConnection):
     """
     A metaclass for custom Field subclasses. This ensures the model's attribute
     has the descriptor protocol attached to it.
@@ -26,7 +92,7 @@
     def __get__(self, obj, type=None):
         if obj is None:
             raise AttributeError('Can only be accessed via an instance.')
-        return obj.__dict__[self.field.name]        
+        return obj.__dict__[self.field.name]
 
     def __set__(self, obj, value):
         obj.__dict__[self.field.name] = self.field.to_python(value)
--- a/web/lib/django/db/models/loading.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/loading.py	Tue May 25 02:43:45 2010 +0200
@@ -4,7 +4,9 @@
 from django.core.exceptions import ImproperlyConfigured
 from django.utils.datastructures import SortedDict
 from django.utils.importlib import import_module
+from django.utils.module_loading import module_has_submodule
 
+import imp
 import sys
 import os
 import threading
@@ -35,6 +37,7 @@
         postponed = [],
         nesting_level = 0,
         write_lock = threading.RLock(),
+        _get_models_cache = {},
     )
 
     def __init__(self):
@@ -70,17 +73,29 @@
         """
         self.handled[app_name] = None
         self.nesting_level += 1
+        app_module = import_module(app_name)
         try:
             models = import_module('.models', app_name)
         except ImportError:
             self.nesting_level -= 1
-            if can_postpone:
-                # Either the app has no models, or the package is still being
-                # imported by Python and the model module isn't available yet.
-                # We will check again once all the recursion has finished (in
-                # populate).
-                self.postponed.append(app_name)
-            return None
+            # If the app doesn't have a models module, we can just ignore the
+            # ImportError and return no models for it.
+            if not module_has_submodule(app_module, 'models'):
+                return None
+            # But if the app does have a models module, we need to figure out
+            # whether to suppress or propagate the error. If can_postpone is
+            # True then it may be that the package is still being imported by
+            # Python and the models module isn't available yet. So we add the
+            # app to the postponed list and we'll try it again after all the
+            # recursion has finished (in populate). If can_postpone is False
+            # then it's time to raise the ImportError.
+            else:
+                if can_postpone:
+                    self.postponed.append(app_name)
+                    return None
+                else:
+                    raise
+
         self.nesting_level -= 1
         if models not in self.app_store:
             self.app_store[models] = len(self.app_store)
@@ -122,7 +137,7 @@
                             return None
                     else:
                         return mod
-            raise ImproperlyConfigured, "App with label %s could not be found" % app_label
+            raise ImproperlyConfigured("App with label %s could not be found" % app_label)
         finally:
             self.write_lock.release()
 
@@ -131,19 +146,38 @@
         self._populate()
         return self.app_errors
 
-    def get_models(self, app_mod=None):
+    def get_models(self, app_mod=None, include_auto_created=False, include_deferred=False):
         """
         Given a module containing models, returns a list of the models.
         Otherwise returns a list of all installed models.
+
+        By default, auto-created models (i.e., m2m models without an
+        explicit intermediate table) are not included. However, if you
+        specify include_auto_created=True, they will be.
+
+        By default, models created to satisfy deferred attribute
+        queries are *not* included in the list of models. However, if
+        you specify include_deferred, they will be.
         """
+        cache_key = (app_mod, include_auto_created, include_deferred)
+        try:
+            return self._get_models_cache[cache_key]
+        except KeyError:
+            pass
         self._populate()
         if app_mod:
-            return self.app_models.get(app_mod.__name__.split('.')[-2], SortedDict()).values()
+            app_list = [self.app_models.get(app_mod.__name__.split('.')[-2], SortedDict())]
         else:
-            model_list = []
-            for app_entry in self.app_models.itervalues():
-                model_list.extend(app_entry.values())
-            return model_list
+            app_list = self.app_models.itervalues()
+        model_list = []
+        for app in app_list:
+            model_list.extend(
+                model for model in app.values()
+                if ((not model._deferred or include_deferred)
+                    and (not model._meta.auto_created or include_auto_created))
+            )
+        self._get_models_cache[cache_key] = model_list
+        return model_list
 
     def get_model(self, app_label, model_name, seed_cache=True):
         """
@@ -177,6 +211,7 @@
                 if os.path.splitext(fname1)[0] == os.path.splitext(fname2)[0]:
                     continue
             model_dict[model_name] = model
+        self._get_models_cache.clear()
 
 cache = AppCache()
 
--- a/web/lib/django/db/models/manager.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/manager.py	Tue May 25 02:43:45 2010 +0200
@@ -1,9 +1,11 @@
-import copy
-
-from django.db.models.query import QuerySet, EmptyQuerySet, insert_query
+from django.utils import copycompat as copy
+from django.conf import settings
+from django.db import router
+from django.db.models.query import QuerySet, EmptyQuerySet, insert_query, RawQuerySet
 from django.db.models import signals
 from django.db.models.fields import FieldDoesNotExist
 
+
 def ensure_default_manager(sender, **kwargs):
     """
     Ensures that a Model subclass contains a default manager  and sets the
@@ -18,7 +20,7 @@
         # Create the default manager, if needed.
         try:
             cls._meta.get_field('objects')
-            raise ValueError, "Model %s must specify a custom Manager, because it has a field named 'objects'" % cls.__name__
+            raise ValueError("Model %s must specify a custom Manager, because it has a field named 'objects'" % cls.__name__)
         except FieldDoesNotExist:
             pass
         cls.add_to_class('objects', Manager())
@@ -50,6 +52,7 @@
         self._set_creation_counter()
         self.model = None
         self._inherited = False
+        self._db = None
 
     def contribute_to_class(self, model, name):
         # TODO: Use weakref because of possible memory leak / circular reference.
@@ -85,18 +88,27 @@
         mgr._inherited = True
         return mgr
 
+    def db_manager(self, using):
+        obj = copy.copy(self)
+        obj._db = using
+        return obj
+
+    @property
+    def db(self):
+        return self._db or router.db_for_read(self.model)
+
     #######################
     # PROXIES TO QUERYSET #
     #######################
 
     def get_empty_query_set(self):
-        return EmptyQuerySet(self.model)
+        return EmptyQuerySet(self.model, using=self._db)
 
     def get_query_set(self):
         """Returns a new QuerySet object.  Subclasses can override this method
         to easily customize the behavior of the Manager.
         """
-        return QuerySet(self.model)
+        return QuerySet(self.model, using=self._db)
 
     def none(self):
         return self.get_empty_query_set()
@@ -173,12 +185,21 @@
     def only(self, *args, **kwargs):
         return self.get_query_set().only(*args, **kwargs)
 
+    def using(self, *args, **kwargs):
+        return self.get_query_set().using(*args, **kwargs)
+
+    def exists(self, *args, **kwargs):
+        return self.get_query_set().exists(*args, **kwargs)
+
     def _insert(self, values, **kwargs):
         return insert_query(self.model, values, **kwargs)
 
     def _update(self, values, **kwargs):
         return self.get_query_set()._update(values, **kwargs)
 
+    def raw(self, raw_query, params=None, *args, **kwargs):
+        return RawQuerySet(raw_query=raw_query, model=self.model, params=params, using=self._db, *args, **kwargs)
+
 class ManagerDescriptor(object):
     # This class ensures managers aren't accessible via model instances.
     # For example, Poll.objects works, but poll_obj.objects raises AttributeError.
@@ -187,7 +208,7 @@
 
     def __get__(self, instance, type=None):
         if instance != None:
-            raise AttributeError, "Manager isn't accessible via %s instances" % type.__name__
+            raise AttributeError("Manager isn't accessible via %s instances" % type.__name__)
         return self.manager
 
 class EmptyManager(Manager):
--- a/web/lib/django/db/models/options.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/options.py	Tue May 25 02:43:45 2010 +0200
@@ -1,9 +1,5 @@
 import re
 from bisect import bisect
-try:
-    set
-except NameError:
-    from sets import Set as set     # Python 2.3 fallback
 
 from django.conf import settings
 from django.db.models.related import RelatedObject
@@ -21,7 +17,7 @@
 DEFAULT_NAMES = ('verbose_name', 'db_table', 'ordering',
                  'unique_together', 'permissions', 'get_latest_by',
                  'order_with_respect_to', 'app_label', 'db_tablespace',
-                 'abstract', 'managed', 'proxy')
+                 'abstract', 'managed', 'proxy', 'auto_created')
 
 class Options(object):
     def __init__(self, meta, app_label=None):
@@ -47,6 +43,7 @@
         self.proxy_for_model = None
         self.parents = SortedDict()
         self.duplicate_targets = {}
+        self.auto_created = False
 
         # To handle various inheritance situations, we need to track where
         # managers came from (concrete or abstract base classes).
@@ -93,7 +90,7 @@
 
             # Any leftover attributes must be invalid.
             if meta_attrs != {}:
-                raise TypeError, "'class Meta' got invalid attribute(s): %s" % ','.join(meta_attrs.keys())
+                raise TypeError("'class Meta' got invalid attribute(s): %s" % ','.join(meta_attrs.keys()))
         else:
             self.verbose_name_plural = string_concat(self.verbose_name, 's')
         del self.meta
@@ -103,11 +100,11 @@
             self.db_table = "%s_%s" % (self.app_label, self.module_name)
             self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
 
-
     def _prepare(self, model):
         if self.order_with_respect_to:
             self.order_with_respect_to = self.get_field(self.order_with_respect_to)
             self.ordering = ('_order',)
+            model.add_to_class('_order', OrderWrt())
         else:
             self.order_with_respect_to = None
 
@@ -273,7 +270,7 @@
         for f in to_search:
             if f.name == name:
                 return f
-        raise FieldDoesNotExist, '%s has no field named %r' % (self.object_name, name)
+        raise FieldDoesNotExist('%s has no field named %r' % (self.object_name, name))
 
     def get_field_by_name(self, name):
         """
@@ -329,8 +326,6 @@
             cache[f.name] = (f, model, True, True)
         for f, model in self.get_fields_with_model():
             cache[f.name] = (f, model, True, False)
-        if self.order_with_respect_to:
-            cache['_order'] = OrderWrt(), None, True, False
         if app_cache_ready():
             self._name_map = cache
         return cache
@@ -487,4 +482,3 @@
         Returns the index of the primary key field in the self.fields list.
         """
         return self.fields.index(self.pk)
-
--- a/web/lib/django/db/models/query.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/query.py	Tue May 25 02:43:45 2010 +0200
@@ -2,19 +2,15 @@
 The main QuerySet implementation. This provides the public API for the ORM.
 """
 
-try:
-    set
-except NameError:
-    from sets import Set as set     # Python 2.3 fallback
+from copy import deepcopy
+from itertools import izip
 
-from copy import deepcopy
-
-from django.db import connection, transaction, IntegrityError
+from django.db import connections, router, transaction, IntegrityError
 from django.db.models.aggregates import Aggregate
 from django.db.models.fields import DateField
-from django.db.models.query_utils import Q, select_related_descend, CollectedObjects, CyclicDependency, deferred_class_factory
+from django.db.models.query_utils import Q, select_related_descend, CollectedObjects, CyclicDependency, deferred_class_factory, InvalidQuery
 from django.db.models import signals, sql
-
+from django.utils.copycompat import deepcopy
 
 # Used to control how many objects are worked with at once in some cases (e.g.
 # when deleting objects).
@@ -31,12 +27,15 @@
     """
     Represents a lazy database lookup for a set of objects.
     """
-    def __init__(self, model=None, query=None):
+    def __init__(self, model=None, query=None, using=None):
         self.model = model
-        self.query = query or sql.Query(self.model, connection)
+        # EmptyQuerySet instantiates QuerySet with model as None
+        self._db = using
+        self.query = query or sql.Query(self.model)
         self._result_cache = None
         self._iter = None
         self._sticky_filter = False
+        self._for_write = False
 
     ########################
     # PYTHON MAGIC METHODS #
@@ -46,11 +45,12 @@
         """
         Deep copy of a QuerySet doesn't populate the cache
         """
-        obj_dict = deepcopy(self.__dict__, memo)
-        obj_dict['_iter'] = None
-
         obj = self.__class__()
-        obj.__dict__.update(obj_dict)
+        for k,v in self.__dict__.items():
+            if k in ('_iter','_result_cache'):
+                obj.__dict__[k] = None
+            else:
+                obj.__dict__[k] = deepcopy(v, memo)
         return obj
 
     def __getstate__(self):
@@ -114,6 +114,36 @@
             return False
         return True
 
+    def __contains__(self, val):
+        # The 'in' operator works without this method, due to __iter__. This
+        # implementation exists only to shortcut the creation of Model
+        # instances, by bailing out early if we find a matching element.
+        pos = 0
+        if self._result_cache is not None:
+            if val in self._result_cache:
+                return True
+            elif self._iter is None:
+                # iterator is exhausted, so we have our answer
+                return False
+            # remember not to check these again:
+            pos = len(self._result_cache)
+        else:
+            # We need to start filling the result cache out. The following
+            # ensures that self._iter is not None and self._result_cache is not
+            # None
+            it = iter(self)
+
+        # Carry on, one result at a time.
+        while True:
+            if len(self._result_cache) <= pos:
+                self._fill_cache(num=1)
+            if self._iter is None:
+                # we ran out of items
+                return False
+            if self._result_cache[pos] == val:
+                return True
+            pos += 1
+
     def __getitem__(self, k):
         """
         Retrieves an item or slice from the set of results.
@@ -158,7 +188,7 @@
             qs.query.set_limits(k, k + 1)
             return list(qs)[0]
         except self.model.DoesNotExist, e:
-            raise IndexError, e.args
+            raise IndexError(e.args)
 
     def __and__(self, other):
         self._merge_sanity_check(other)
@@ -235,10 +265,11 @@
                     init_list.append(field.attname)
             model_cls = deferred_class_factory(self.model, skip)
 
-        for row in self.query.results_iter():
+        compiler = self.query.get_compiler(using=self.db)
+        for row in compiler.results_iter():
             if fill_cache:
                 obj, _ = get_cached_row(self.model, row,
-                            index_start, max_depth,
+                            index_start, using=self.db, max_depth=max_depth,
                             requested=requested, offset=len(aggregate_select),
                             only_load=only_load)
             else:
@@ -250,6 +281,9 @@
                     # Omit aggregates in object creation.
                     obj = self.model(*row[index_start:aggregate_start])
 
+                # Store the source database of the object
+                obj._state.db = self.db
+
             for i, k in enumerate(extra_select):
                 setattr(obj, k, row[i])
 
@@ -264,7 +298,7 @@
         Returns a dictionary containing the calculations (aggregation)
         over the current queryset
 
-        If args is present the expression is passed as a kwarg ussing
+        If args is present the expression is passed as a kwarg using
         the Aggregate object's default alias.
         """
         for arg in args:
@@ -276,7 +310,7 @@
             query.add_aggregate(aggregate_expr, self.model, alias,
                 is_summary=True)
 
-        return query.get_aggregation()
+        return query.get_aggregation(using=self.db)
 
     def count(self):
         """
@@ -289,7 +323,7 @@
         if self._result_cache is not None and not self._iter:
             return len(self._result_cache)
 
-        return self.query.get_count()
+        return self.query.get_count(using=self.db)
 
     def get(self, *args, **kwargs):
         """
@@ -297,6 +331,8 @@
         keyword arguments.
         """
         clone = self.filter(*args, **kwargs)
+        if self.query.can_filter():
+            clone = clone.order_by()
         num = len(clone)
         if num == 1:
             return clone._result_cache[0]
@@ -312,7 +348,8 @@
         and returning the created object.
         """
         obj = self.model(**kwargs)
-        obj.save(force_insert=True)
+        self._for_write = True
+        obj.save(force_insert=True, using=self.db)
         return obj
 
     def get_or_create(self, **kwargs):
@@ -325,18 +362,19 @@
                 'get_or_create() must be passed at least one keyword argument'
         defaults = kwargs.pop('defaults', {})
         try:
+            self._for_write = True
             return self.get(**kwargs), False
         except self.model.DoesNotExist:
             try:
                 params = dict([(k, v) for k, v in kwargs.items() if '__' not in k])
                 params.update(defaults)
                 obj = self.model(**params)
-                sid = transaction.savepoint()
-                obj.save(force_insert=True)
-                transaction.savepoint_commit(sid)
+                sid = transaction.savepoint(using=self.db)
+                obj.save(force_insert=True, using=self.db)
+                transaction.savepoint_commit(sid, using=self.db)
                 return obj, True
             except IntegrityError, e:
-                transaction.savepoint_rollback(sid)
+                transaction.savepoint_rollback(sid, using=self.db)
                 try:
                     return self.get(**kwargs), False
                 except self.model.DoesNotExist:
@@ -363,7 +401,7 @@
         """
         assert self.query.can_filter(), \
                 "Cannot use 'limit' or 'offset' with in_bulk"
-        assert isinstance(id_list, (tuple,  list)), \
+        assert isinstance(id_list, (tuple,  list, set, frozenset)), \
                 "in_bulk() must be provided with a list of IDs."
         if not id_list:
             return {}
@@ -380,6 +418,11 @@
 
         del_query = self._clone()
 
+        # The delete is actually 2 queries - one to find related objects,
+        # and one to delete. Make sure that the discovery of related
+        # objects is performed on the same database as the deletion.
+        del_query._for_write = True
+
         # Disable non-supported fields.
         del_query.query.select_related = False
         del_query.query.clear_ordering()
@@ -387,16 +430,19 @@
         # Delete objects in chunks to prevent the list of related objects from
         # becoming too long.
         seen_objs = None
+        del_itr = iter(del_query)
         while 1:
-            # Collect all the objects to be deleted in this chunk, and all the
+            # Collect a chunk of objects to be deleted, and then all the
             # objects that are related to the objects that are to be deleted.
+            # The chunking *isn't* done by slicing the del_query because we
+            # need to maintain the query cache on del_query (see #12328)
             seen_objs = CollectedObjects(seen_objs)
-            for object in del_query[:CHUNK_SIZE]:
-                object._collect_sub_objects(seen_objs)
+            for i, obj in izip(xrange(CHUNK_SIZE), del_itr):
+                obj._collect_sub_objects(seen_objs)
 
             if not seen_objs:
                 break
-            delete_objects(seen_objs)
+            delete_objects(seen_objs, del_query.db)
 
         # Clear the result cache, in case this QuerySet gets reused.
         self._result_cache = None
@@ -409,22 +455,23 @@
         """
         assert self.query.can_filter(), \
                 "Cannot update a query once a slice has been taken."
+        self._for_write = True
         query = self.query.clone(sql.UpdateQuery)
         query.add_update_values(kwargs)
-        if not transaction.is_managed():
-            transaction.enter_transaction_management()
+        if not transaction.is_managed(using=self.db):
+            transaction.enter_transaction_management(using=self.db)
             forced_managed = True
         else:
             forced_managed = False
         try:
-            rows = query.execute_sql(None)
+            rows = query.get_compiler(self.db).execute_sql(None)
             if forced_managed:
-                transaction.commit()
+                transaction.commit(using=self.db)
             else:
-                transaction.commit_unless_managed()
+                transaction.commit_unless_managed(using=self.db)
         finally:
             if forced_managed:
-                transaction.leave_transaction_management()
+                transaction.leave_transaction_management(using=self.db)
         self._result_cache = None
         return rows
     update.alters_data = True
@@ -441,9 +488,14 @@
         query = self.query.clone(sql.UpdateQuery)
         query.add_update_fields(values)
         self._result_cache = None
-        return query.execute_sql(None)
+        return query.get_compiler(self.db).execute_sql(None)
     _update.alters_data = True
 
+    def exists(self):
+        if self._result_cache is None:
+            return self.query.has_results(using=self.db)
+        return bool(self._result_cache)
+
     ##################################################
     # PUBLIC METHODS THAT RETURN A QUERYSET SUBCLASS #
     ##################################################
@@ -648,6 +700,14 @@
         clone.query.add_immediate_loading(fields)
         return clone
 
+    def using(self, alias):
+        """
+        Selects which database this QuerySet should excecute it's query against.
+        """
+        clone = self._clone()
+        clone._db = alias
+        return clone
+
     ###################################
     # PUBLIC INTROSPECTION ATTRIBUTES #
     ###################################
@@ -665,6 +725,13 @@
             return False
     ordered = property(ordered)
 
+    @property
+    def db(self):
+        "Return the database that will be used if this query is executed now"
+        if self._for_write:
+            return self._db or router.db_for_write(self.model)
+        return self._db or router.db_for_read(self.model)
+
     ###################
     # PRIVATE METHODS #
     ###################
@@ -675,7 +742,8 @@
         query = self.query.clone()
         if self._sticky_filter:
             query.filter_is_sticky = True
-        c = klass(model=self.model, query=query)
+        c = klass(model=self.model, query=query, using=self._db)
+        c._for_write = self._for_write
         c.__dict__.update(kwargs)
         if setup and hasattr(c, '_setup_query'):
             c._setup_query()
@@ -725,12 +793,17 @@
             self.query.add_fields(field_names, False)
             self.query.set_group_by()
 
-    def _as_sql(self):
+    def _prepare(self):
+        return self
+
+    def _as_sql(self, connection):
         """
         Returns the internal query's SQL and parameters (as a tuple).
         """
         obj = self.values("pk")
-        return obj.query.as_nested_sql()
+        if obj._db is None or connection == connections[obj._db]:
+            return obj.query.get_compiler(connection=connection).as_nested_sql()
+        raise ValueError("Can't do subqueries with queries on different DBs.")
 
     # When used as part of a nested query, a queryset will never be an "always
     # empty" result.
@@ -753,7 +826,7 @@
 
         names = extra_names + field_names + aggregate_names
 
-        for row in self.query.results_iter():
+        for row in self.query.get_compiler(self.db).results_iter():
             yield dict(zip(names, row))
 
     def _setup_query(self):
@@ -836,7 +909,7 @@
 
         super(ValuesQuerySet, self)._setup_aggregate_query(aggregates)
 
-    def _as_sql(self):
+    def _as_sql(self, connection):
         """
         For ValueQuerySet (and subclasses like ValuesListQuerySet), they can
         only be used as nested queries if they're already set up to select only
@@ -848,15 +921,30 @@
                 (not self._fields and len(self.model._meta.fields) > 1)):
             raise TypeError('Cannot use a multi-field %s as a filter value.'
                     % self.__class__.__name__)
-        return self._clone().query.as_nested_sql()
+
+        obj = self._clone()
+        if obj._db is None or connection == connections[obj._db]:
+            return obj.query.get_compiler(connection=connection).as_nested_sql()
+        raise ValueError("Can't do subqueries with queries on different DBs.")
+
+    def _prepare(self):
+        """
+        Validates that we aren't trying to do a query like
+        value__in=qs.values('value1', 'value2'), which isn't valid.
+        """
+        if ((self._fields and len(self._fields) > 1) or
+                (not self._fields and len(self.model._meta.fields) > 1)):
+            raise TypeError('Cannot use a multi-field %s as a filter value.'
+                    % self.__class__.__name__)
+        return self
 
 class ValuesListQuerySet(ValuesQuerySet):
     def iterator(self):
         if self.flat and len(self._fields) == 1:
-            for row in self.query.results_iter():
+            for row in self.query.get_compiler(self.db).results_iter():
                 yield row[0]
         elif not self.query.extra_select and not self.query.aggregate_select:
-            for row in self.query.results_iter():
+            for row in self.query.get_compiler(self.db).results_iter():
                 yield tuple(row)
         else:
             # When extra(select=...) or an annotation is involved, the extra
@@ -871,11 +959,12 @@
             # If a field list has been specified, use it. Otherwise, use the
             # full list of fields, including extras and aggregates.
             if self._fields:
-                fields = self._fields
+                fields = list(self._fields) + filter(lambda f: f not in self._fields,
+                                                     aggregate_names)
             else:
                 fields = names
 
-            for row in self.query.results_iter():
+            for row in self.query.get_compiler(self.db).results_iter():
                 data = dict(zip(names, row))
                 yield tuple([data[f] for f in fields])
 
@@ -887,7 +976,7 @@
 
 class DateQuerySet(QuerySet):
     def iterator(self):
-        return self.query.results_iter()
+        return self.query.get_compiler(self.db).results_iter()
 
     def _setup_query(self):
         """
@@ -916,8 +1005,8 @@
 
 
 class EmptyQuerySet(QuerySet):
-    def __init__(self, model=None, query=None):
-        super(EmptyQuerySet, self).__init__(model, query)
+    def __init__(self, model=None, query=None, using=None):
+        super(EmptyQuerySet, self).__init__(model, query, using)
         self._result_cache = []
 
     def __and__(self, other):
@@ -942,35 +1031,158 @@
         # (it raises StopIteration immediately).
         yield iter([]).next()
 
+    def all(self):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def filter(self, *args, **kwargs):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def exclude(self, *args, **kwargs):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def complex_filter(self, filter_obj):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def select_related(self, *fields, **kwargs):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def annotate(self, *args, **kwargs):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def order_by(self, *field_names):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def distinct(self, true_or_false=True):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def extra(self, select=None, where=None, params=None, tables=None,
+              order_by=None, select_params=None):
+        """
+        Always returns EmptyQuerySet.
+        """
+        assert self.query.can_filter(), \
+                "Cannot change a query once a slice has been taken"
+        return self
+
+    def reverse(self):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def defer(self, *fields):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def only(self, *fields):
+        """
+        Always returns EmptyQuerySet.
+        """
+        return self
+
+    def update(self, **kwargs):
+        """
+        Don't update anything.
+        """
+        return 0
+
     # EmptyQuerySet is always an empty result in where-clauses (and similar
     # situations).
     value_annotation = False
 
 
-def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0,
-                   requested=None, offset=0, only_load=None):
+def get_cached_row(klass, row, index_start, using, max_depth=0, cur_depth=0,
+                   requested=None, offset=0, only_load=None, local_only=False):
     """
     Helper function that recursively returns an object with the specified
     related attributes already populated.
+
+    This method may be called recursively to populate deep select_related()
+    clauses.
+
+    Arguments:
+     * klass - the class to retrieve (and instantiate)
+     * row - the row of data returned by the database cursor
+     * index_start - the index of the row at which data for this
+       object is known to start
+     * using - the database alias on which the query is being executed.
+     * max_depth - the maximum depth to which a select_related()
+       relationship should be explored.
+     * cur_depth - the current depth in the select_related() tree.
+       Used in recursive calls to determin if we should dig deeper.
+     * requested - A dictionary describing the select_related() tree
+       that is to be retrieved. keys are field names; values are
+       dictionaries describing the keys on that related object that
+       are themselves to be select_related().
+     * offset - the number of additional fields that are known to
+       exist in `row` for `klass`. This usually means the number of
+       annotated results on `klass`.
+     * only_load - if the query has had only() or defer() applied,
+       this is the list of field names that will be returned. If None,
+       the full field list for `klass` can be assumed.
+     * local_only - Only populate local fields. This is used when building
+       following reverse select-related relations
     """
     if max_depth and requested is None and cur_depth > max_depth:
         # We've recursed deeply enough; stop now.
         return None
 
     restricted = requested is not None
-    load_fields = only_load and only_load.get(klass) or None
+    if only_load:
+        load_fields = only_load.get(klass)
+        # When we create the object, we will also be creating populating
+        # all the parent classes, so traverse the parent classes looking
+        # for fields that must be included on load.
+        for parent in klass._meta.get_parent_list():
+            fields = only_load.get(parent)
+            if fields:
+                load_fields.update(fields)
+    else:
+        load_fields = None
     if load_fields:
         # Handle deferred fields.
         skip = set()
         init_list = []
-        pk_val = row[index_start + klass._meta.pk_index()]
-        for field in klass._meta.fields:
+        # Build the list of fields that *haven't* been requested
+        for field, model in klass._meta.get_fields_with_model():
             if field.name not in load_fields:
                 skip.add(field.name)
+            elif local_only and model is not None:
+                continue
             else:
                 init_list.append(field.attname)
+        # Retrieve all the requested fields
         field_count = len(init_list)
         fields = row[index_start : index_start + field_count]
+        # If all the select_related columns are None, then the related
+        # object must be non-existent - set the relation to None.
+        # Otherwise, construct the related object.
         if fields == (None,) * field_count:
             obj = None
         elif skip:
@@ -978,15 +1190,30 @@
             obj = klass(**dict(zip(init_list, fields)))
         else:
             obj = klass(*fields)
+
     else:
-        field_count = len(klass._meta.fields)
+        # Load all fields on klass
+        if local_only:
+            field_names = [f.attname for f in klass._meta.local_fields]
+        else:
+            field_names = [f.attname for f in klass._meta.fields]
+        field_count = len(field_names)
         fields = row[index_start : index_start + field_count]
+        # If all the select_related columns are None, then the related
+        # object must be non-existent - set the relation to None.
+        # Otherwise, construct the related object.
         if fields == (None,) * field_count:
             obj = None
         else:
-            obj = klass(*fields)
+            obj = klass(**dict(zip(field_names, fields)))
+
+    # If an object was retrieved, set the database state.
+    if obj:
+        obj._state.db = using
 
     index_end = index_start + field_count + offset
+    # Iterate over each related object, populating any
+    # select_related() fields
     for f in klass._meta.fields:
         if not select_related_descend(f, restricted, requested):
             continue
@@ -994,21 +1221,74 @@
             next = requested[f.name]
         else:
             next = None
-        cached_row = get_cached_row(f.rel.to, row, index_end, max_depth,
-                cur_depth+1, next)
+        # Recursively retrieve the data for the related object
+        cached_row = get_cached_row(f.rel.to, row, index_end, using,
+                max_depth, cur_depth+1, next, only_load=only_load)
+        # If the recursive descent found an object, populate the
+        # descriptor caches relevant to the object
         if cached_row:
             rel_obj, index_end = cached_row
             if obj is not None:
+                # If the base object exists, populate the
+                # descriptor cache
                 setattr(obj, f.get_cache_name(), rel_obj)
+            if f.unique and rel_obj is not None:
+                # If the field is unique, populate the
+                # reverse descriptor cache on the related object
+                setattr(rel_obj, f.related.get_cache_name(), obj)
+
+    # Now do the same, but for reverse related objects.
+    # Only handle the restricted case - i.e., don't do a depth
+    # descent into reverse relations unless explicitly requested
+    if restricted:
+        related_fields = [
+            (o.field, o.model)
+            for o in klass._meta.get_all_related_objects()
+            if o.field.unique
+        ]
+        for f, model in related_fields:
+            if not select_related_descend(f, restricted, requested, reverse=True):
+                continue
+            next = requested[f.related_query_name()]
+            # Recursively retrieve the data for the related object
+            cached_row = get_cached_row(model, row, index_end, using,
+                max_depth, cur_depth+1, next, only_load=only_load, local_only=True)
+            # If the recursive descent found an object, populate the
+            # descriptor caches relevant to the object
+            if cached_row:
+                rel_obj, index_end = cached_row
+                if obj is not None:
+                    # If the field is unique, populate the
+                    # reverse descriptor cache
+                    setattr(obj, f.related.get_cache_name(), rel_obj)
+                if rel_obj is not None:
+                    # If the related object exists, populate
+                    # the descriptor cache.
+                    setattr(rel_obj, f.get_cache_name(), obj)
+                    # Now populate all the non-local field values
+                    # on the related object
+                    for rel_field,rel_model in rel_obj._meta.get_fields_with_model():
+                        if rel_model is not None:
+                            setattr(rel_obj, rel_field.attname, getattr(obj, rel_field.attname))
+                            # populate the field cache for any related object
+                            # that has already been retrieved
+                            if rel_field.rel:
+                                try:
+                                    cached_obj = getattr(obj, rel_field.get_cache_name())
+                                    setattr(rel_obj, rel_field.get_cache_name(), cached_obj)
+                                except AttributeError:
+                                    # Related object hasn't been cached yet
+                                    pass
     return obj, index_end
 
-def delete_objects(seen_objs):
+def delete_objects(seen_objs, using):
     """
     Iterate through a list of seen classes, and remove any instances that are
     referred to.
     """
-    if not transaction.is_managed():
-        transaction.enter_transaction_management()
+    connection = connections[using]
+    if not transaction.is_managed(using=using):
+        transaction.enter_transaction_management(using=using)
         forced_managed = True
     else:
         forced_managed = False
@@ -1030,22 +1310,20 @@
 
             # Pre-notify all instances to be deleted.
             for pk_val, instance in items:
-                signals.pre_delete.send(sender=cls, instance=instance)
+                if not cls._meta.auto_created:
+                    signals.pre_delete.send(sender=cls, instance=instance)
 
             pk_list = [pk for pk,instance in items]
-            del_query = sql.DeleteQuery(cls, connection)
-            del_query.delete_batch_related(pk_list)
 
-            update_query = sql.UpdateQuery(cls, connection)
+            update_query = sql.UpdateQuery(cls)
             for field, model in cls._meta.get_fields_with_model():
                 if (field.rel and field.null and field.rel.to in seen_objs and
                         filter(lambda f: f.column == field.rel.get_related_field().column,
                         field.rel.to._meta.fields)):
                     if model:
-                        sql.UpdateQuery(model, connection).clear_related(field,
-                                pk_list)
+                        sql.UpdateQuery(model).clear_related(field, pk_list, using=using)
                     else:
-                        update_query.clear_related(field, pk_list)
+                        update_query.clear_related(field, pk_list, using=using)
 
         # Now delete the actual data.
         for cls in ordered_classes:
@@ -1053,8 +1331,8 @@
             items.reverse()
 
             pk_list = [pk for pk,instance in items]
-            del_query = sql.DeleteQuery(cls, connection)
-            del_query.delete_batch(pk_list)
+            del_query = sql.DeleteQuery(cls)
+            del_query.delete_batch(pk_list, using=using)
 
             # Last cleanup; set NULLs where there once was a reference to the
             # object, NULL the primary key of the found objects, and perform
@@ -1064,24 +1342,138 @@
                     if field.rel and field.null and field.rel.to in seen_objs:
                         setattr(instance, field.attname, None)
 
-                signals.post_delete.send(sender=cls, instance=instance)
+                if not cls._meta.auto_created:
+                    signals.post_delete.send(sender=cls, instance=instance)
                 setattr(instance, cls._meta.pk.attname, None)
 
         if forced_managed:
-            transaction.commit()
+            transaction.commit(using=using)
         else:
-            transaction.commit_unless_managed()
+            transaction.commit_unless_managed(using=using)
     finally:
         if forced_managed:
-            transaction.leave_transaction_management()
+            transaction.leave_transaction_management(using=using)
+
+class RawQuerySet(object):
+    """
+    Provides an iterator which converts the results of raw SQL queries into
+    annotated model instances.
+    """
+    def __init__(self, raw_query, model=None, query=None, params=None,
+        translations=None, using=None):
+        self.raw_query = raw_query
+        self.model = model
+        self._db = using
+        self.query = query or sql.RawQuery(sql=raw_query, using=self.db, params=params)
+        self.params = params or ()
+        self.translations = translations or {}
+
+    def __iter__(self):
+        for row in self.query:
+            yield self.transform_results(row)
+
+    def __repr__(self):
+        return "<RawQuerySet: %r>" % (self.raw_query % self.params)
+
+    def __getitem__(self, k):
+        return list(self)[k]
+
+    @property
+    def db(self):
+        "Return the database that will be used if this query is executed now"
+        return self._db or router.db_for_read(self.model)
+
+    def using(self, alias):
+        """
+        Selects which database this Raw QuerySet should excecute it's query against.
+        """
+        return RawQuerySet(self.raw_query, model=self.model,
+                query=self.query.clone(using=alias),
+                params=self.params, translations=self.translations,
+                using=alias)
+
+    @property
+    def columns(self):
+        """
+        A list of model field names in the order they'll appear in the
+        query results.
+        """
+        if not hasattr(self, '_columns'):
+            self._columns = self.query.get_columns()
+
+            # Adjust any column names which don't match field names
+            for (query_name, model_name) in self.translations.items():
+                try:
+                    index = self._columns.index(query_name)
+                    self._columns[index] = model_name
+                except ValueError:
+                    # Ignore translations for non-existant column names
+                    pass
 
+        return self._columns
 
-def insert_query(model, values, return_id=False, raw_values=False):
+    @property
+    def model_fields(self):
+        """
+        A dict mapping column names to model field names.
+        """
+        if not hasattr(self, '_model_fields'):
+            converter = connections[self.db].introspection.table_name_converter
+            self._model_fields = {}
+            for field in self.model._meta.fields:
+                name, column = field.get_attname_column()
+                self._model_fields[converter(column)] = field
+        return self._model_fields
+
+    def transform_results(self, values):
+        model_init_kwargs = {}
+        annotations = ()
+
+        # Perform database backend type resolution
+        connection = connections[self.db]
+        compiler = connection.ops.compiler('SQLCompiler')(self.query, connection, self.db)
+        if hasattr(compiler, 'resolve_columns'):
+            fields = [self.model_fields.get(c,None) for c in self.columns]
+            values = compiler.resolve_columns(values, fields)
+
+        # Associate fields to values
+        for pos, value in enumerate(values):
+            column = self.columns[pos]
+
+            # Separate properties from annotations
+            if column in self.model_fields.keys():
+                model_init_kwargs[self.model_fields[column].attname] = value
+            else:
+                annotations += (column, value),
+
+        # Construct model instance and apply annotations
+        skip = set()
+        for field in self.model._meta.fields:
+            if field.attname not in model_init_kwargs.keys():
+                skip.add(field.attname)
+
+        if skip:
+            if self.model._meta.pk.attname in skip:
+                raise InvalidQuery('Raw query must include the primary key')
+            model_cls = deferred_class_factory(self.model, skip)
+        else:
+            model_cls = self.model
+
+        instance = model_cls(**model_init_kwargs)
+
+        for field, value in annotations:
+            setattr(instance, field, value)
+
+        instance._state.db = self.query.using
+
+        return instance
+
+def insert_query(model, values, return_id=False, raw_values=False, using=None):
     """
     Inserts a new record for the given model. This provides an interface to
     the InsertQuery class and is how Model.save() is implemented. It is not
     part of the public API.
     """
-    query = sql.InsertQuery(model, connection)
+    query = sql.InsertQuery(model)
     query.insert_values(values, raw_values)
-    return query.execute_sql(return_id)
+    return query.get_compiler(using=using).execute_sql(return_id)
--- a/web/lib/django/db/models/query_utils.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/query_utils.py	Tue May 25 02:43:45 2010 +0200
@@ -7,16 +7,11 @@
 """
 
 import weakref
-from copy import deepcopy
+from django.utils.copycompat import deepcopy
 
 from django.utils import tree
 from django.utils.datastructures import SortedDict
 
-try:
-    sorted
-except NameError:
-    from django.utils.itercompat import sorted  # For Python 2.3.
-
 
 class CyclicDependency(Exception):
     """
@@ -25,6 +20,13 @@
     """
     pass
 
+class InvalidQuery(Exception):
+    """
+    The query passed to raw isn't a safe query to use with raw.
+    """
+    pass
+
+
 class CollectedObjects(object):
     """
     A container that stores keys and lists of values along with remembering the
@@ -48,7 +50,7 @@
         else:
             self.blocked = {}
 
-    def add(self, model, pk, obj, parent_model, nullable=False):
+    def add(self, model, pk, obj, parent_model, parent_obj=None, nullable=False):
         """
         Adds an item to the container.
 
@@ -58,6 +60,8 @@
         * obj - the object itself.
         * parent_model - the model of the parent object that this object was
           reached through.
+        * parent_obj - the parent object this object was reached
+          through (not used here, but needed in the API for use elsewhere)
         * nullable - should be True if this relation is nullable.
 
         Returns True if the item already existed in the structure and
@@ -132,7 +136,7 @@
     def __init__(self, sql, params):
         self.data = sql, params
 
-    def as_sql(self, qn=None):
+    def as_sql(self, qn=None, connection=None):
         return self.data
 
 class Q(tree.Node):
@@ -151,7 +155,8 @@
     def _combine(self, other, conn):
         if not isinstance(other, Q):
             raise TypeError(other)
-        obj = deepcopy(self)
+        obj = type(self)()
+        obj.add(self, conn)
         obj.add(other, conn)
         return obj
 
@@ -162,7 +167,8 @@
         return self._combine(other, self.AND)
 
     def __invert__(self):
-        obj = deepcopy(self)
+        obj = type(self)()
+        obj.add(self, self.AND)
         obj.negate()
         return obj
 
@@ -181,11 +187,29 @@
         Retrieves and caches the value from the datastore on the first lookup.
         Returns the cached value.
         """
+        from django.db.models.fields import FieldDoesNotExist
+
         assert instance is not None
         cls = self.model_ref()
         data = instance.__dict__
         if data.get(self.field_name, self) is self:
-            data[self.field_name] = cls._base_manager.filter(pk=instance.pk).values_list(self.field_name, flat=True).get()
+            # self.field_name is the attname of the field, but only() takes the
+            # actual name, so we need to translate it here.
+            try:
+                cls._meta.get_field_by_name(self.field_name)
+                name = self.field_name
+            except FieldDoesNotExist:
+                name = [f.name for f in cls._meta.fields
+                    if f.attname == self.field_name][0]
+            # We use only() instead of values() here because we want the
+            # various data coersion methods (to_python(), etc.) to be called
+            # here.
+            val = getattr(
+                cls._base_manager.filter(pk=instance.pk).only(name).using(
+                    instance._state.db).get(),
+                self.field_name
+            )
+            data[self.field_name] = val
         return data[self.field_name]
 
     def __set__(self, instance, value):
@@ -195,19 +219,29 @@
         """
         instance.__dict__[self.field_name] = value
 
-def select_related_descend(field, restricted, requested):
+def select_related_descend(field, restricted, requested, reverse=False):
     """
     Returns True if this field should be used to descend deeper for
     select_related() purposes. Used by both the query construction code
     (sql.query.fill_related_selections()) and the model instance creation code
     (query.get_cached_row()).
+
+    Arguments:
+     * field - the field to be checked
+     * restricted - a boolean field, indicating if the field list has been
+       manually restricted using a requested clause)
+     * requested - The select_related() dictionary.
+     * reverse - boolean, True if we are checking a reverse select related
     """
     if not field.rel:
         return False
-    if field.rel.parent_link:
+    if field.rel.parent_link and not reverse:
         return False
-    if restricted and field.name not in requested:
-        return False
+    if restricted:
+        if reverse and field.related_query_name() not in requested:
+            return False
+        if not reverse and field.name not in requested:
+            return False
     if not restricted and field.null:
         return False
     return True
--- a/web/lib/django/db/models/related.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/related.py	Tue May 25 02:43:45 2010 +0200
@@ -18,9 +18,10 @@
         self.name = '%s:%s' % (self.opts.app_label, self.opts.module_name)
         self.var_name = self.opts.object_name.lower()
 
-    def get_db_prep_lookup(self, lookup_type, value):
+    def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False):
         # Defer to the actual field definition for db prep
-        return self.field.get_db_prep_lookup(lookup_type, value)
+        return self.field.get_db_prep_lookup(lookup_type, value,
+                        connection=connection, prepared=prepared)
 
     def editable_fields(self):
         "Get the fields in this class that should be edited inline."
@@ -44,3 +45,6 @@
             return self.field.rel.related_name or (self.opts.object_name.lower() + '_set')
         else:
             return self.field.rel.related_name or (self.opts.object_name.lower())
+
+    def get_cache_name(self):
+        return "_%s_cache" % self.get_accessor_name()
--- a/web/lib/django/db/models/signals.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/signals.py	Tue May 25 02:43:45 2010 +0200
@@ -12,3 +12,5 @@
 post_delete = Signal(providing_args=["instance"])
 
 post_syncdb = Signal(providing_args=["class", "app", "created_models", "verbosity", "interactive"])
+
+m2m_changed = Signal(providing_args=["action", "instance", "reverse", "model", "pk_set"])
--- a/web/lib/django/db/models/sql/aggregates.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/sql/aggregates.py	Tue May 25 02:43:45 2010 +0200
@@ -72,15 +72,13 @@
         if isinstance(self.col, (list, tuple)):
             self.col = (change_map.get(self.col[0], self.col[0]), self.col[1])
 
-    def as_sql(self, quote_func=None):
+    def as_sql(self, qn, connection):
         "Return the aggregate, rendered as SQL."
-        if not quote_func:
-            quote_func = lambda x: x
 
         if hasattr(self.col, 'as_sql'):
-            field_name = self.col.as_sql(quote_func)
+            field_name = self.col.as_sql(qn, connection)
         elif isinstance(self.col, (list, tuple)):
-            field_name = '.'.join([quote_func(c) for c in self.col])
+            field_name = '.'.join([qn(c) for c in self.col])
         else:
             field_name = self.col
 
@@ -127,4 +125,3 @@
     def __init__(self, col, sample=False, **extra):
         super(Variance, self).__init__(col, **extra)
         self.sql_function = sample and 'VAR_SAMP' or 'VAR_POP'
-
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/db/models/sql/compiler.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,974 @@
+from django.core.exceptions import FieldError
+from django.db import connections
+from django.db.backends.util import truncate_name
+from django.db.models.sql.constants import *
+from django.db.models.sql.datastructures import EmptyResultSet
+from django.db.models.sql.expressions import SQLEvaluator
+from django.db.models.sql.query import get_proxied_model, get_order_dir, \
+     select_related_descend, Query
+
+class SQLCompiler(object):
+    def __init__(self, query, connection, using):
+        self.query = query
+        self.connection = connection
+        self.using = using
+        self.quote_cache = {}
+
+    def pre_sql_setup(self):
+        """
+        Does any necessary class setup immediately prior to producing SQL. This
+        is for things that can't necessarily be done in __init__ because we
+        might not have all the pieces in place at that time.
+        """
+        if not self.query.tables:
+            self.query.join((None, self.query.model._meta.db_table, None, None))
+        if (not self.query.select and self.query.default_cols and not
+                self.query.included_inherited_models):
+            self.query.setup_inherited_models()
+        if self.query.select_related and not self.query.related_select_cols:
+            self.fill_related_selections()
+
+    def quote_name_unless_alias(self, name):
+        """
+        A wrapper around connection.ops.quote_name that doesn't quote aliases
+        for table names. This avoids problems with some SQL dialects that treat
+        quoted strings specially (e.g. PostgreSQL).
+        """
+        if name in self.quote_cache:
+            return self.quote_cache[name]
+        if ((name in self.query.alias_map and name not in self.query.table_map) or
+                name in self.query.extra_select):
+            self.quote_cache[name] = name
+            return name
+        r = self.connection.ops.quote_name(name)
+        self.quote_cache[name] = r
+        return r
+
+    def as_sql(self, with_limits=True, with_col_aliases=False):
+        """
+        Creates the SQL for this query. Returns the SQL string and list of
+        parameters.
+
+        If 'with_limits' is False, any limit/offset information is not included
+        in the query.
+        """
+        self.pre_sql_setup()
+        out_cols = self.get_columns(with_col_aliases)
+        ordering, ordering_group_by = self.get_ordering()
+
+        # This must come after 'select' and 'ordering' -- see docstring of
+        # get_from_clause() for details.
+        from_, f_params = self.get_from_clause()
+
+        qn = self.quote_name_unless_alias
+
+        where, w_params = self.query.where.as_sql(qn=qn, connection=self.connection)
+        having, h_params = self.query.having.as_sql(qn=qn, connection=self.connection)
+        params = []
+        for val in self.query.extra_select.itervalues():
+            params.extend(val[1])
+
+        result = ['SELECT']
+        if self.query.distinct:
+            result.append('DISTINCT')
+        result.append(', '.join(out_cols + self.query.ordering_aliases))
+
+        result.append('FROM')
+        result.extend(from_)
+        params.extend(f_params)
+
+        if where:
+            result.append('WHERE %s' % where)
+            params.extend(w_params)
+
+        grouping, gb_params = self.get_grouping()
+        if grouping:
+            if ordering:
+                # If the backend can't group by PK (i.e., any database
+                # other than MySQL), then any fields mentioned in the
+                # ordering clause needs to be in the group by clause.
+                if not self.connection.features.allows_group_by_pk:
+                    for col, col_params in ordering_group_by:
+                        if col not in grouping:
+                            grouping.append(str(col))
+                            gb_params.extend(col_params)
+            else:
+                ordering = self.connection.ops.force_no_ordering()
+            result.append('GROUP BY %s' % ', '.join(grouping))
+            params.extend(gb_params)
+
+        if having:
+            result.append('HAVING %s' % having)
+            params.extend(h_params)
+
+        if ordering:
+            result.append('ORDER BY %s' % ', '.join(ordering))
+
+        if with_limits:
+            if self.query.high_mark is not None:
+                result.append('LIMIT %d' % (self.query.high_mark - self.query.low_mark))
+            if self.query.low_mark:
+                if self.query.high_mark is None:
+                    val = self.connection.ops.no_limit_value()
+                    if val:
+                        result.append('LIMIT %d' % val)
+                result.append('OFFSET %d' % self.query.low_mark)
+
+        return ' '.join(result), tuple(params)
+
+    def as_nested_sql(self):
+        """
+        Perform the same functionality as the as_sql() method, returning an
+        SQL string and parameters. However, the alias prefixes are bumped
+        beforehand (in a copy -- the current query isn't changed), and any
+        ordering is removed if the query is unsliced.
+
+        Used when nesting this query inside another.
+        """
+        obj = self.query.clone()
+        if obj.low_mark == 0 and obj.high_mark is None:
+            # If there is no slicing in use, then we can safely drop all ordering
+            obj.clear_ordering(True)
+        obj.bump_prefix()
+        return obj.get_compiler(connection=self.connection).as_sql()
+
+    def get_columns(self, with_aliases=False):
+        """
+        Returns the list of columns to use in the select statement. If no
+        columns have been specified, returns all columns relating to fields in
+        the model.
+
+        If 'with_aliases' is true, any column names that are duplicated
+        (without the table names) are given unique aliases. This is needed in
+        some cases to avoid ambiguity with nested queries.
+        """
+        qn = self.quote_name_unless_alias
+        qn2 = self.connection.ops.quote_name
+        result = ['(%s) AS %s' % (col[0], qn2(alias)) for alias, col in self.query.extra_select.iteritems()]
+        aliases = set(self.query.extra_select.keys())
+        if with_aliases:
+            col_aliases = aliases.copy()
+        else:
+            col_aliases = set()
+        if self.query.select:
+            only_load = self.deferred_to_columns()
+            for col in self.query.select:
+                if isinstance(col, (list, tuple)):
+                    alias, column = col
+                    table = self.query.alias_map[alias][TABLE_NAME]
+                    if table in only_load and col not in only_load[table]:
+                        continue
+                    r = '%s.%s' % (qn(alias), qn(column))
+                    if with_aliases:
+                        if col[1] in col_aliases:
+                            c_alias = 'Col%d' % len(col_aliases)
+                            result.append('%s AS %s' % (r, c_alias))
+                            aliases.add(c_alias)
+                            col_aliases.add(c_alias)
+                        else:
+                            result.append('%s AS %s' % (r, qn2(col[1])))
+                            aliases.add(r)
+                            col_aliases.add(col[1])
+                    else:
+                        result.append(r)
+                        aliases.add(r)
+                        col_aliases.add(col[1])
+                else:
+                    result.append(col.as_sql(qn, self.connection))
+
+                    if hasattr(col, 'alias'):
+                        aliases.add(col.alias)
+                        col_aliases.add(col.alias)
+
+        elif self.query.default_cols:
+            cols, new_aliases = self.get_default_columns(with_aliases,
+                    col_aliases)
+            result.extend(cols)
+            aliases.update(new_aliases)
+
+        max_name_length = self.connection.ops.max_name_length()
+        result.extend([
+            '%s%s' % (
+                aggregate.as_sql(qn, self.connection),
+                alias is not None
+                    and ' AS %s' % qn(truncate_name(alias, max_name_length))
+                    or ''
+            )
+            for alias, aggregate in self.query.aggregate_select.items()
+        ])
+
+        for table, col in self.query.related_select_cols:
+            r = '%s.%s' % (qn(table), qn(col))
+            if with_aliases and col in col_aliases:
+                c_alias = 'Col%d' % len(col_aliases)
+                result.append('%s AS %s' % (r, c_alias))
+                aliases.add(c_alias)
+                col_aliases.add(c_alias)
+            else:
+                result.append(r)
+                aliases.add(r)
+                col_aliases.add(col)
+
+        self._select_aliases = aliases
+        return result
+
+    def get_default_columns(self, with_aliases=False, col_aliases=None,
+            start_alias=None, opts=None, as_pairs=False, local_only=False):
+        """
+        Computes the default columns for selecting every field in the base
+        model. Will sometimes be called to pull in related models (e.g. via
+        select_related), in which case "opts" and "start_alias" will be given
+        to provide a starting point for the traversal.
+
+        Returns a list of strings, quoted appropriately for use in SQL
+        directly, as well as a set of aliases used in the select statement (if
+        'as_pairs' is True, returns a list of (alias, col_name) pairs instead
+        of strings as the first component and None as the second component).
+        """
+        result = []
+        if opts is None:
+            opts = self.query.model._meta
+        qn = self.quote_name_unless_alias
+        qn2 = self.connection.ops.quote_name
+        aliases = set()
+        only_load = self.deferred_to_columns()
+        # Skip all proxy to the root proxied model
+        proxied_model = get_proxied_model(opts)
+
+        if start_alias:
+            seen = {None: start_alias}
+        for field, model in opts.get_fields_with_model():
+            if local_only and model is not None:
+                continue
+            if start_alias:
+                try:
+                    alias = seen[model]
+                except KeyError:
+                    if model is proxied_model:
+                        alias = start_alias
+                    else:
+                        link_field = opts.get_ancestor_link(model)
+                        alias = self.query.join((start_alias, model._meta.db_table,
+                                link_field.column, model._meta.pk.column))
+                    seen[model] = alias
+            else:
+                # If we're starting from the base model of the queryset, the
+                # aliases will have already been set up in pre_sql_setup(), so
+                # we can save time here.
+                alias = self.query.included_inherited_models[model]
+            table = self.query.alias_map[alias][TABLE_NAME]
+            if table in only_load and field.column not in only_load[table]:
+                continue
+            if as_pairs:
+                result.append((alias, field.column))
+                aliases.add(alias)
+                continue
+            if with_aliases and field.column in col_aliases:
+                c_alias = 'Col%d' % len(col_aliases)
+                result.append('%s.%s AS %s' % (qn(alias),
+                    qn2(field.column), c_alias))
+                col_aliases.add(c_alias)
+                aliases.add(c_alias)
+            else:
+                r = '%s.%s' % (qn(alias), qn2(field.column))
+                result.append(r)
+                aliases.add(r)
+                if with_aliases:
+                    col_aliases.add(field.column)
+        return result, aliases
+
+    def get_ordering(self):
+        """
+        Returns a tuple containing a list representing the SQL elements in the
+        "order by" clause, and the list of SQL elements that need to be added
+        to the GROUP BY clause as a result of the ordering.
+
+        Also sets the ordering_aliases attribute on this instance to a list of
+        extra aliases needed in the select.
+
+        Determining the ordering SQL can change the tables we need to include,
+        so this should be run *before* get_from_clause().
+        """
+        if self.query.extra_order_by:
+            ordering = self.query.extra_order_by
+        elif not self.query.default_ordering:
+            ordering = self.query.order_by
+        else:
+            ordering = self.query.order_by or self.query.model._meta.ordering
+        qn = self.quote_name_unless_alias
+        qn2 = self.connection.ops.quote_name
+        distinct = self.query.distinct
+        select_aliases = self._select_aliases
+        result = []
+        group_by = []
+        ordering_aliases = []
+        if self.query.standard_ordering:
+            asc, desc = ORDER_DIR['ASC']
+        else:
+            asc, desc = ORDER_DIR['DESC']
+
+        # It's possible, due to model inheritance, that normal usage might try
+        # to include the same field more than once in the ordering. We track
+        # the table/column pairs we use and discard any after the first use.
+        processed_pairs = set()
+
+        for field in ordering:
+            if field == '?':
+                result.append(self.connection.ops.random_function_sql())
+                continue
+            if isinstance(field, int):
+                if field < 0:
+                    order = desc
+                    field = -field
+                else:
+                    order = asc
+                result.append('%s %s' % (field, order))
+                group_by.append((field, []))
+                continue
+            col, order = get_order_dir(field, asc)
+            if col in self.query.aggregate_select:
+                result.append('%s %s' % (col, order))
+                continue
+            if '.' in field:
+                # This came in through an extra(order_by=...) addition. Pass it
+                # on verbatim.
+                table, col = col.split('.', 1)
+                if (table, col) not in processed_pairs:
+                    elt = '%s.%s' % (qn(table), col)
+                    processed_pairs.add((table, col))
+                    if not distinct or elt in select_aliases:
+                        result.append('%s %s' % (elt, order))
+                        group_by.append((elt, []))
+            elif get_order_dir(field)[0] not in self.query.extra_select:
+                # 'col' is of the form 'field' or 'field1__field2' or
+                # '-field1__field2__field', etc.
+                for table, col, order in self.find_ordering_name(field,
+                        self.query.model._meta, default_order=asc):
+                    if (table, col) not in processed_pairs:
+                        elt = '%s.%s' % (qn(table), qn2(col))
+                        processed_pairs.add((table, col))
+                        if distinct and elt not in select_aliases:
+                            ordering_aliases.append(elt)
+                        result.append('%s %s' % (elt, order))
+                        group_by.append((elt, []))
+            else:
+                elt = qn2(col)
+                if distinct and col not in select_aliases:
+                    ordering_aliases.append(elt)
+                result.append('%s %s' % (elt, order))
+                group_by.append(self.query.extra_select[col])
+        self.query.ordering_aliases = ordering_aliases
+        return result, group_by
+
+    def find_ordering_name(self, name, opts, alias=None, default_order='ASC',
+            already_seen=None):
+        """
+        Returns the table alias (the name might be ambiguous, the alias will
+        not be) and column name for ordering by the given 'name' parameter.
+        The 'name' is of the form 'field1__field2__...__fieldN'.
+        """
+        name, order = get_order_dir(name, default_order)
+        pieces = name.split(LOOKUP_SEP)
+        if not alias:
+            alias = self.query.get_initial_alias()
+        field, target, opts, joins, last, extra = self.query.setup_joins(pieces,
+                opts, alias, False)
+        alias = joins[-1]
+        col = target.column
+        if not field.rel:
+            # To avoid inadvertent trimming of a necessary alias, use the
+            # refcount to show that we are referencing a non-relation field on
+            # the model.
+            self.query.ref_alias(alias)
+
+        # Must use left outer joins for nullable fields and their relations.
+        self.query.promote_alias_chain(joins,
+            self.query.alias_map[joins[0]][JOIN_TYPE] == self.query.LOUTER)
+
+        # If we get to this point and the field is a relation to another model,
+        # append the default ordering for that model.
+        if field.rel and len(joins) > 1 and opts.ordering:
+            # Firstly, avoid infinite loops.
+            if not already_seen:
+                already_seen = set()
+            join_tuple = tuple([self.query.alias_map[j][TABLE_NAME] for j in joins])
+            if join_tuple in already_seen:
+                raise FieldError('Infinite loop caused by ordering.')
+            already_seen.add(join_tuple)
+
+            results = []
+            for item in opts.ordering:
+                results.extend(self.find_ordering_name(item, opts, alias,
+                        order, already_seen))
+            return results
+
+        if alias:
+            # We have to do the same "final join" optimisation as in
+            # add_filter, since the final column might not otherwise be part of
+            # the select set (so we can't order on it).
+            while 1:
+                join = self.query.alias_map[alias]
+                if col != join[RHS_JOIN_COL]:
+                    break
+                self.query.unref_alias(alias)
+                alias = join[LHS_ALIAS]
+                col = join[LHS_JOIN_COL]
+        return [(alias, col, order)]
+
+    def get_from_clause(self):
+        """
+        Returns a list of strings that are joined together to go after the
+        "FROM" part of the query, as well as a list any extra parameters that
+        need to be included. Sub-classes, can override this to create a
+        from-clause via a "select".
+
+        This should only be called after any SQL construction methods that
+        might change the tables we need. This means the select columns and
+        ordering must be done first.
+        """
+        result = []
+        qn = self.quote_name_unless_alias
+        qn2 = self.connection.ops.quote_name
+        first = True
+        for alias in self.query.tables:
+            if not self.query.alias_refcount[alias]:
+                continue
+            try:
+                name, alias, join_type, lhs, lhs_col, col, nullable = self.query.alias_map[alias]
+            except KeyError:
+                # Extra tables can end up in self.tables, but not in the
+                # alias_map if they aren't in a join. That's OK. We skip them.
+                continue
+            alias_str = (alias != name and ' %s' % alias or '')
+            if join_type and not first:
+                result.append('%s %s%s ON (%s.%s = %s.%s)'
+                        % (join_type, qn(name), alias_str, qn(lhs),
+                           qn2(lhs_col), qn(alias), qn2(col)))
+            else:
+                connector = not first and ', ' or ''
+                result.append('%s%s%s' % (connector, qn(name), alias_str))
+            first = False
+        for t in self.query.extra_tables:
+            alias, unused = self.query.table_alias(t)
+            # Only add the alias if it's not already present (the table_alias()
+            # calls increments the refcount, so an alias refcount of one means
+            # this is the only reference.
+            if alias not in self.query.alias_map or self.query.alias_refcount[alias] == 1:
+                connector = not first and ', ' or ''
+                result.append('%s%s' % (connector, qn(alias)))
+                first = False
+        return result, []
+
+    def get_grouping(self):
+        """
+        Returns a tuple representing the SQL elements in the "group by" clause.
+        """
+        qn = self.quote_name_unless_alias
+        result, params = [], []
+        if self.query.group_by is not None:
+            if len(self.query.model._meta.fields) == len(self.query.select) and \
+                self.connection.features.allows_group_by_pk:
+                self.query.group_by = [(self.query.model._meta.db_table, self.query.model._meta.pk.column)]
+
+            group_by = self.query.group_by or []
+
+            extra_selects = []
+            for extra_select, extra_params in self.query.extra_select.itervalues():
+                extra_selects.append(extra_select)
+                params.extend(extra_params)
+            for col in group_by + self.query.related_select_cols + extra_selects:
+                if isinstance(col, (list, tuple)):
+                    result.append('%s.%s' % (qn(col[0]), qn(col[1])))
+                elif hasattr(col, 'as_sql'):
+                    result.append(col.as_sql(qn))
+                else:
+                    result.append('(%s)' % str(col))
+        return result, params
+
+    def fill_related_selections(self, opts=None, root_alias=None, cur_depth=1,
+            used=None, requested=None, restricted=None, nullable=None,
+            dupe_set=None, avoid_set=None):
+        """
+        Fill in the information needed for a select_related query. The current
+        depth is measured as the number of connections away from the root model
+        (for example, cur_depth=1 means we are looking at models with direct
+        connections to the root model).
+        """
+        if not restricted and self.query.max_depth and cur_depth > self.query.max_depth:
+            # We've recursed far enough; bail out.
+            return
+
+        if not opts:
+            opts = self.query.get_meta()
+            root_alias = self.query.get_initial_alias()
+            self.query.related_select_cols = []
+            self.query.related_select_fields = []
+        if not used:
+            used = set()
+        if dupe_set is None:
+            dupe_set = set()
+        if avoid_set is None:
+            avoid_set = set()
+        orig_dupe_set = dupe_set
+
+        # Setup for the case when only particular related fields should be
+        # included in the related selection.
+        if requested is None:
+            if isinstance(self.query.select_related, dict):
+                requested = self.query.select_related
+                restricted = True
+            else:
+                restricted = False
+
+        for f, model in opts.get_fields_with_model():
+            if not select_related_descend(f, restricted, requested):
+                continue
+            # The "avoid" set is aliases we want to avoid just for this
+            # particular branch of the recursion. They aren't permanently
+            # forbidden from reuse in the related selection tables (which is
+            # what "used" specifies).
+            avoid = avoid_set.copy()
+            dupe_set = orig_dupe_set.copy()
+            table = f.rel.to._meta.db_table
+            promote = nullable or f.null
+            if model:
+                int_opts = opts
+                alias = root_alias
+                alias_chain = []
+                for int_model in opts.get_base_chain(model):
+                    # Proxy model have elements in base chain
+                    # with no parents, assign the new options
+                    # object and skip to the next base in that
+                    # case
+                    if not int_opts.parents[int_model]:
+                        int_opts = int_model._meta
+                        continue
+                    lhs_col = int_opts.parents[int_model].column
+                    dedupe = lhs_col in opts.duplicate_targets
+                    if dedupe:
+                        avoid.update(self.query.dupe_avoidance.get((id(opts), lhs_col),
+                                ()))
+                        dupe_set.add((opts, lhs_col))
+                    int_opts = int_model._meta
+                    alias = self.query.join((alias, int_opts.db_table, lhs_col,
+                            int_opts.pk.column), exclusions=used,
+                            promote=promote)
+                    alias_chain.append(alias)
+                    for (dupe_opts, dupe_col) in dupe_set:
+                        self.query.update_dupe_avoidance(dupe_opts, dupe_col, alias)
+                if self.query.alias_map[root_alias][JOIN_TYPE] == self.query.LOUTER:
+                    self.query.promote_alias_chain(alias_chain, True)
+            else:
+                alias = root_alias
+
+            dedupe = f.column in opts.duplicate_targets
+            if dupe_set or dedupe:
+                avoid.update(self.query.dupe_avoidance.get((id(opts), f.column), ()))
+                if dedupe:
+                    dupe_set.add((opts, f.column))
+
+            alias = self.query.join((alias, table, f.column,
+                    f.rel.get_related_field().column),
+                    exclusions=used.union(avoid), promote=promote)
+            used.add(alias)
+            columns, aliases = self.get_default_columns(start_alias=alias,
+                    opts=f.rel.to._meta, as_pairs=True)
+            self.query.related_select_cols.extend(columns)
+            if self.query.alias_map[alias][JOIN_TYPE] == self.query.LOUTER:
+                self.query.promote_alias_chain(aliases, True)
+            self.query.related_select_fields.extend(f.rel.to._meta.fields)
+            if restricted:
+                next = requested.get(f.name, {})
+            else:
+                next = False
+            new_nullable = f.null or promote
+            for dupe_opts, dupe_col in dupe_set:
+                self.query.update_dupe_avoidance(dupe_opts, dupe_col, alias)
+            self.fill_related_selections(f.rel.to._meta, alias, cur_depth + 1,
+                    used, next, restricted, new_nullable, dupe_set, avoid)
+
+        if restricted:
+            related_fields = [
+                (o.field, o.model)
+                for o in opts.get_all_related_objects()
+                if o.field.unique
+            ]
+            for f, model in related_fields:
+                if not select_related_descend(f, restricted, requested, reverse=True):
+                    continue
+                # The "avoid" set is aliases we want to avoid just for this
+                # particular branch of the recursion. They aren't permanently
+                # forbidden from reuse in the related selection tables (which is
+                # what "used" specifies).
+                avoid = avoid_set.copy()
+                dupe_set = orig_dupe_set.copy()
+                table = model._meta.db_table
+
+                int_opts = opts
+                alias = root_alias
+                alias_chain = []
+                chain = opts.get_base_chain(f.rel.to)
+                if chain is not None:
+                    for int_model in chain:
+                        # Proxy model have elements in base chain
+                        # with no parents, assign the new options
+                        # object and skip to the next base in that
+                        # case
+                        if not int_opts.parents[int_model]:
+                            int_opts = int_model._meta
+                            continue
+                        lhs_col = int_opts.parents[int_model].column
+                        dedupe = lhs_col in opts.duplicate_targets
+                        if dedupe:
+                            avoid.update((self.query.dupe_avoidance.get(id(opts), lhs_col),
+                                ()))
+                            dupe_set.add((opts, lhs_col))
+                        int_opts = int_model._meta
+                        alias = self.query.join(
+                            (alias, int_opts.db_table, lhs_col, int_opts.pk.column),
+                            exclusions=used, promote=True, reuse=used
+                        )
+                        alias_chain.append(alias)
+                        for dupe_opts, dupe_col in dupe_set:
+                            self.query.update_dupe_avoidance(dupe_opts, dupe_col, alias)
+                    dedupe = f.column in opts.duplicate_targets
+                    if dupe_set or dedupe:
+                        avoid.update(self.query.dupe_avoidance.get((id(opts), f.column), ()))
+                        if dedupe:
+                            dupe_set.add((opts, f.column))
+                alias = self.query.join(
+                    (alias, table, f.rel.get_related_field().column, f.column),
+                    exclusions=used.union(avoid),
+                    promote=True
+                )
+                used.add(alias)
+                columns, aliases = self.get_default_columns(start_alias=alias,
+                    opts=model._meta, as_pairs=True, local_only=True)
+                self.query.related_select_cols.extend(columns)
+                self.query.related_select_fields.extend(model._meta.fields)
+
+                next = requested.get(f.related_query_name(), {})
+                new_nullable = f.null or None
+
+                self.fill_related_selections(model._meta, table, cur_depth+1,
+                    used, next, restricted, new_nullable)
+
+    def deferred_to_columns(self):
+        """
+        Converts the self.deferred_loading data structure to mapping of table
+        names to sets of column names which are to be loaded. Returns the
+        dictionary.
+        """
+        columns = {}
+        self.query.deferred_to_data(columns, self.query.deferred_to_columns_cb)
+        return columns
+
+    def results_iter(self):
+        """
+        Returns an iterator over the results from executing this query.
+        """
+        resolve_columns = hasattr(self, 'resolve_columns')
+        fields = None
+        for rows in self.execute_sql(MULTI):
+            for row in rows:
+                if resolve_columns:
+                    if fields is None:
+                        # We only set this up here because
+                        # related_select_fields isn't populated until
+                        # execute_sql() has been called.
+                        if self.query.select_fields:
+                            fields = self.query.select_fields + self.query.related_select_fields
+                        else:
+                            fields = self.query.model._meta.fields
+                        # If the field was deferred, exclude it from being passed
+                        # into `resolve_columns` because it wasn't selected.
+                        only_load = self.deferred_to_columns()
+                        if only_load:
+                            db_table = self.query.model._meta.db_table
+                            fields = [f for f in fields if db_table in only_load and
+                                      f.column in only_load[db_table]]
+                    row = self.resolve_columns(row, fields)
+
+                if self.query.aggregate_select:
+                    aggregate_start = len(self.query.extra_select.keys()) + len(self.query.select)
+                    aggregate_end = aggregate_start + len(self.query.aggregate_select)
+                    row = tuple(row[:aggregate_start]) + tuple([
+                        self.query.resolve_aggregate(value, aggregate, self.connection)
+                        for (alias, aggregate), value
+                        in zip(self.query.aggregate_select.items(), row[aggregate_start:aggregate_end])
+                    ]) + tuple(row[aggregate_end:])
+
+                yield row
+
+    def execute_sql(self, result_type=MULTI):
+        """
+        Run the query against the database and returns the result(s). The
+        return value is a single data item if result_type is SINGLE, or an
+        iterator over the results if the result_type is MULTI.
+
+        result_type is either MULTI (use fetchmany() to retrieve all rows),
+        SINGLE (only retrieve a single row), or None. In this last case, the
+        cursor is returned if any query is executed, since it's used by
+        subclasses such as InsertQuery). It's possible, however, that no query
+        is needed, as the filters describe an empty set. In that case, None is
+        returned, to avoid any unnecessary database interaction.
+        """
+        try:
+            sql, params = self.as_sql()
+            if not sql:
+                raise EmptyResultSet
+        except EmptyResultSet:
+            if result_type == MULTI:
+                return empty_iter()
+            else:
+                return
+
+        cursor = self.connection.cursor()
+        cursor.execute(sql, params)
+
+        if not result_type:
+            return cursor
+        if result_type == SINGLE:
+            if self.query.ordering_aliases:
+                return cursor.fetchone()[:-len(self.query.ordering_aliases)]
+            return cursor.fetchone()
+
+        # The MULTI case.
+        if self.query.ordering_aliases:
+            result = order_modified_iter(cursor, len(self.query.ordering_aliases),
+                    self.connection.features.empty_fetchmany_value)
+        else:
+            result = iter((lambda: cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)),
+                    self.connection.features.empty_fetchmany_value)
+        if not self.connection.features.can_use_chunked_reads:
+            # If we are using non-chunked reads, we return the same data
+            # structure as normally, but ensure it is all read into memory
+            # before going any further.
+            return list(result)
+        return result
+
+
+class SQLInsertCompiler(SQLCompiler):
+    def placeholder(self, field, val):
+        if field is None:
+            # A field value of None means the value is raw.
+            return val
+        elif hasattr(field, 'get_placeholder'):
+            # Some fields (e.g. geo fields) need special munging before
+            # they can be inserted.
+            return field.get_placeholder(val, self.connection)
+        else:
+            # Return the common case for the placeholder
+            return '%s'
+
+    def as_sql(self):
+        # We don't need quote_name_unless_alias() here, since these are all
+        # going to be column names (so we can avoid the extra overhead).
+        qn = self.connection.ops.quote_name
+        opts = self.query.model._meta
+        result = ['INSERT INTO %s' % qn(opts.db_table)]
+        result.append('(%s)' % ', '.join([qn(c) for c in self.query.columns]))
+        values = [self.placeholder(*v) for v in self.query.values]
+        result.append('VALUES (%s)' % ', '.join(values))
+        params = self.query.params
+        if self.return_id and self.connection.features.can_return_id_from_insert:
+            col = "%s.%s" % (qn(opts.db_table), qn(opts.pk.column))
+            r_fmt, r_params = self.connection.ops.return_insert_id()
+            result.append(r_fmt % col)
+            params = params + r_params
+        return ' '.join(result), params
+
+    def execute_sql(self, return_id=False):
+        self.return_id = return_id
+        cursor = super(SQLInsertCompiler, self).execute_sql(None)
+        if not (return_id and cursor):
+            return
+        if self.connection.features.can_return_id_from_insert:
+            return self.connection.ops.fetch_returned_insert_id(cursor)
+        return self.connection.ops.last_insert_id(cursor,
+                self.query.model._meta.db_table, self.query.model._meta.pk.column)
+
+
+class SQLDeleteCompiler(SQLCompiler):
+    def as_sql(self):
+        """
+        Creates the SQL for this query. Returns the SQL string and list of
+        parameters.
+        """
+        assert len(self.query.tables) == 1, \
+                "Can only delete from one table at a time."
+        qn = self.quote_name_unless_alias
+        result = ['DELETE FROM %s' % qn(self.query.tables[0])]
+        where, params = self.query.where.as_sql(qn=qn, connection=self.connection)
+        result.append('WHERE %s' % where)
+        return ' '.join(result), tuple(params)
+
+class SQLUpdateCompiler(SQLCompiler):
+    def as_sql(self):
+        """
+        Creates the SQL for this query. Returns the SQL string and list of
+        parameters.
+        """
+        from django.db.models.base import Model
+
+        self.pre_sql_setup()
+        if not self.query.values:
+            return '', ()
+        table = self.query.tables[0]
+        qn = self.quote_name_unless_alias
+        result = ['UPDATE %s' % qn(table)]
+        result.append('SET')
+        values, update_params = [], []
+        for field, model, val in self.query.values:
+            if hasattr(val, 'prepare_database_save'):
+                val = val.prepare_database_save(field)
+            else:
+                val = field.get_db_prep_save(val, connection=self.connection)
+
+            # Getting the placeholder for the field.
+            if hasattr(field, 'get_placeholder'):
+                placeholder = field.get_placeholder(val, self.connection)
+            else:
+                placeholder = '%s'
+
+            if hasattr(val, 'evaluate'):
+                val = SQLEvaluator(val, self.query, allow_joins=False)
+            name = field.column
+            if hasattr(val, 'as_sql'):
+                sql, params = val.as_sql(qn, self.connection)
+                values.append('%s = %s' % (qn(name), sql))
+                update_params.extend(params)
+            elif val is not None:
+                values.append('%s = %s' % (qn(name), placeholder))
+                update_params.append(val)
+            else:
+                values.append('%s = NULL' % qn(name))
+        if not values:
+            return '', ()
+        result.append(', '.join(values))
+        where, params = self.query.where.as_sql(qn=qn, connection=self.connection)
+        if where:
+            result.append('WHERE %s' % where)
+        return ' '.join(result), tuple(update_params + params)
+
+    def execute_sql(self, result_type):
+        """
+        Execute the specified update. Returns the number of rows affected by
+        the primary update query. The "primary update query" is the first
+        non-empty query that is executed. Row counts for any subsequent,
+        related queries are not available.
+        """
+        cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
+        rows = cursor and cursor.rowcount or 0
+        is_empty = cursor is None
+        del cursor
+        for query in self.query.get_related_updates():
+            aux_rows = query.get_compiler(self.using).execute_sql(result_type)
+            if is_empty:
+                rows = aux_rows
+                is_empty = False
+        return rows
+
+    def pre_sql_setup(self):
+        """
+        If the update depends on results from other tables, we need to do some
+        munging of the "where" conditions to match the format required for
+        (portable) SQL updates. That is done here.
+
+        Further, if we are going to be running multiple updates, we pull out
+        the id values to update at this point so that they don't change as a
+        result of the progressive updates.
+        """
+        self.query.select_related = False
+        self.query.clear_ordering(True)
+        super(SQLUpdateCompiler, self).pre_sql_setup()
+        count = self.query.count_active_tables()
+        if not self.query.related_updates and count == 1:
+            return
+
+        # We need to use a sub-select in the where clause to filter on things
+        # from other tables.
+        query = self.query.clone(klass=Query)
+        query.bump_prefix()
+        query.extra = {}
+        query.select = []
+        query.add_fields([query.model._meta.pk.name])
+        must_pre_select = count > 1 and not self.connection.features.update_can_self_select
+
+        # Now we adjust the current query: reset the where clause and get rid
+        # of all the tables we don't need (since they're in the sub-select).
+        self.query.where = self.query.where_class()
+        if self.query.related_updates or must_pre_select:
+            # Either we're using the idents in multiple update queries (so
+            # don't want them to change), or the db backend doesn't support
+            # selecting from the updating table (e.g. MySQL).
+            idents = []
+            for rows in query.get_compiler(self.using).execute_sql(MULTI):
+                idents.extend([r[0] for r in rows])
+            self.query.add_filter(('pk__in', idents))
+            self.query.related_ids = idents
+        else:
+            # The fast path. Filters and updates in one query.
+            self.query.add_filter(('pk__in', query))
+        for alias in self.query.tables[1:]:
+            self.query.alias_refcount[alias] = 0
+
+class SQLAggregateCompiler(SQLCompiler):
+    def as_sql(self, qn=None):
+        """
+        Creates the SQL for this query. Returns the SQL string and list of
+        parameters.
+        """
+        if qn is None:
+            qn = self.quote_name_unless_alias
+        sql = ('SELECT %s FROM (%s) subquery' % (
+            ', '.join([
+                aggregate.as_sql(qn, self.connection)
+                for aggregate in self.query.aggregate_select.values()
+            ]),
+            self.query.subquery)
+        )
+        params = self.query.sub_params
+        return (sql, params)
+
+class SQLDateCompiler(SQLCompiler):
+    def results_iter(self):
+        """
+        Returns an iterator over the results from executing this query.
+        """
+        resolve_columns = hasattr(self, 'resolve_columns')
+        if resolve_columns:
+            from django.db.models.fields import DateTimeField
+            fields = [DateTimeField()]
+        else:
+            from django.db.backends.util import typecast_timestamp
+            needs_string_cast = self.connection.features.needs_datetime_string_cast
+
+        offset = len(self.query.extra_select)
+        for rows in self.execute_sql(MULTI):
+            for row in rows:
+                date = row[offset]
+                if resolve_columns:
+                    date = self.resolve_columns(row, fields)[offset]
+                elif needs_string_cast:
+                    date = typecast_timestamp(str(date))
+                yield date
+
+
+def empty_iter():
+    """
+    Returns an iterator containing no results.
+    """
+    yield iter([]).next()
+
+
+def order_modified_iter(cursor, trim, sentinel):
+    """
+    Yields blocks of rows from a cursor. We use this iterator in the special
+    case when extra output columns have been added to support ordering
+    requirements. We must trim those extra columns before anything else can use
+    the results, since they're only needed to make the SQL valid.
+    """
+    for rows in iter((lambda: cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)),
+            sentinel):
+        yield [r[:-trim] for r in rows]
--- a/web/lib/django/db/models/sql/datastructures.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/sql/datastructures.py	Tue May 25 02:43:45 2010 +0200
@@ -29,22 +29,18 @@
     """
     Add a date selection column.
     """
-    def __init__(self, col, lookup_type, date_sql_func):
+    def __init__(self, col, lookup_type):
         self.col = col
         self.lookup_type = lookup_type
-        self.date_sql_func = date_sql_func
 
     def relabel_aliases(self, change_map):
         c = self.col
         if isinstance(c, (list, tuple)):
             self.col = (change_map.get(c[0], c[0]), c[1])
 
-    def as_sql(self, quote_func=None):
-        if not quote_func:
-            quote_func = lambda x: x
+    def as_sql(self, qn, connection):
         if isinstance(self.col, (list, tuple)):
-            col = '%s.%s' % tuple([quote_func(c) for c in self.col])
+            col = '%s.%s' % tuple([qn(c) for c in self.col])
         else:
             col = self.col
-        return self.date_sql_func(self.lookup_type, col)
-
+        return connection.ops.date_trunc_sql(self.lookup_type, col)
--- a/web/lib/django/db/models/sql/expressions.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/sql/expressions.py	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,4 @@
 from django.core.exceptions import FieldError
-from django.db import connection
 from django.db.models.fields import FieldDoesNotExist
 from django.db.models.sql.constants import LOOKUP_SEP
 
@@ -12,8 +11,11 @@
         self.contains_aggregate = False
         self.expression.prepare(self, query, allow_joins)
 
-    def as_sql(self, qn=None):
-        return self.expression.evaluate(self, qn)
+    def prepare(self):
+        return self
+
+    def as_sql(self, qn, connection):
+        return self.expression.evaluate(self, qn, connection)
 
     def relabel_aliases(self, change_map):
         for node, col in self.cols.items():
@@ -54,15 +56,12 @@
     # Vistor methods for final expression evaluation #
     ##################################################
 
-    def evaluate_node(self, node, qn):
-        if not qn:
-            qn = connection.ops.quote_name
-
+    def evaluate_node(self, node, qn, connection):
         expressions = []
         expression_params = []
         for child in node.children:
             if hasattr(child, 'evaluate'):
-                sql, params = child.evaluate(self, qn)
+                sql, params = child.evaluate(self, qn, connection)
             else:
                 sql, params = '%s', (child,)
 
@@ -77,12 +76,9 @@
 
         return connection.ops.combine_expression(node.connector, expressions), expression_params
 
-    def evaluate_leaf(self, node, qn):
-        if not qn:
-            qn = connection.ops.quote_name
-
+    def evaluate_leaf(self, node, qn, connection):
         col = self.cols[node]
         if hasattr(col, 'as_sql'):
-            return col.as_sql(qn), ()
+            return col.as_sql(qn, connection), ()
         else:
             return '%s.%s' % (qn(col[0]), qn(col[1])), ()
--- a/web/lib/django/db/models/sql/query.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/sql/query.py	Tue May 25 02:43:45 2010 +0200
@@ -7,31 +7,87 @@
 all about the internals of models in order to get the information it needs.
 """
 
-from copy import deepcopy
-
+from django.utils.copycompat import deepcopy
 from django.utils.tree import Node
 from django.utils.datastructures import SortedDict
 from django.utils.encoding import force_unicode
-from django.db.backends.util import truncate_name
-from django.db import connection
+from django.db import connections, DEFAULT_DB_ALIAS
 from django.db.models import signals
 from django.db.models.fields import FieldDoesNotExist
-from django.db.models.query_utils import select_related_descend
+from django.db.models.query_utils import select_related_descend, InvalidQuery
 from django.db.models.sql import aggregates as base_aggregates_module
+from django.db.models.sql.constants import *
+from django.db.models.sql.datastructures import EmptyResultSet, Empty, MultiJoin
 from django.db.models.sql.expressions import SQLEvaluator
-from django.db.models.sql.where import WhereNode, Constraint, EverythingNode, AND, OR
+from django.db.models.sql.where import (WhereNode, Constraint, EverythingNode,
+    ExtraWhere, AND, OR)
 from django.core.exceptions import FieldError
-from datastructures import EmptyResultSet, Empty, MultiJoin
-from constants import *
+
+__all__ = ['Query', 'RawQuery']
+
+class RawQuery(object):
+    """
+    A single raw SQL query
+    """
+
+    def __init__(self, sql, using, params=None):
+        self.validate_sql(sql)
+        self.params = params or ()
+        self.sql = sql
+        self.using = using
+        self.cursor = None
+
+        # Mirror some properties of a normal query so that
+        # the compiler can be used to process results.
+        self.low_mark, self.high_mark = 0, None  # Used for offset/limit
+        self.extra_select = {}
+        self.aggregate_select = {}
+
+    def clone(self, using):
+        return RawQuery(self.sql, using, params=self.params)
+
+    def convert_values(self, value, field, connection):
+        """Convert the database-returned value into a type that is consistent
+        across database backends.
 
-try:
-    set
-except NameError:
-    from sets import Set as set     # Python 2.3 fallback
+        By default, this defers to the underlying backend operations, but
+        it can be overridden by Query classes for specific backends.
+        """
+        return connection.ops.convert_values(value, field)
+
+    def get_columns(self):
+        if self.cursor is None:
+            self._execute_query()
+        converter = connections[self.using].introspection.table_name_converter
+        return [converter(column_meta[0])
+                for column_meta in self.cursor.description]
+
+    def validate_sql(self, sql):
+        if not sql.lower().strip().startswith('select'):
+            raise InvalidQuery('Raw queries are limited to SELECT queries. Use '
+                               'connection.cursor directly for other types of queries.')
 
-__all__ = ['Query', 'BaseQuery']
+    def __iter__(self):
+        # Always execute a new query for a new iterator.
+        # This could be optimized with a cache at the expense of RAM.
+        self._execute_query()
+        if not connections[self.using].features.can_use_chunked_reads:
+            # If the database can't use chunked reads we need to make sure we
+            # evaluate the entire query up front.
+            result = list(self.cursor)
+        else:
+            result = self.cursor
+        return iter(result)
 
-class BaseQuery(object):
+    def __repr__(self):
+        return "<RawQuery: %r>" % (self.sql % self.params)
+
+    def _execute_query(self):
+        self.cursor = connections[self.using].cursor()
+        self.cursor.execute(self.sql, self.params)
+
+
+class Query(object):
     """
     A single SQL query.
     """
@@ -44,9 +100,10 @@
     query_terms = QUERY_TERMS
     aggregates_module = base_aggregates_module
 
-    def __init__(self, model, connection, where=WhereNode):
+    compiler = 'SQLCompiler'
+
+    def __init__(self, model, where=WhereNode):
         self.model = model
-        self.connection = connection
         self.alias_refcount = {}
         self.alias_map = {}     # Maps alias to join information
         self.table_map = {}     # Maps table names to list of aliases.
@@ -93,8 +150,6 @@
         self._extra_select_cache = None
 
         self.extra_tables = ()
-        self.extra_where = ()
-        self.extra_params = ()
         self.extra_order_by = ()
 
         # A tuple that is a set of model field names and either True, if these
@@ -110,11 +165,11 @@
         Parameter values won't necessarily be quoted correctly, since that is
         done by the database interface at execution time.
         """
-        sql, params = self.as_sql()
+        sql, params = self.get_compiler(DEFAULT_DB_ALIAS).as_sql()
         return sql % params
 
     def __deepcopy__(self, memo):
-        result= self.clone()
+        result = self.clone(memo=memo)
         memo[id(self)] = result
         return result
 
@@ -125,7 +180,6 @@
         obj_dict = self.__dict__.copy()
         obj_dict['related_select_fields'] = []
         obj_dict['related_select_cols'] = []
-        del obj_dict['connection']
 
         # Fields can't be pickled, so if a field list has been
         # specified, we pickle the list of field names instead.
@@ -147,10 +201,21 @@
         ]
 
         self.__dict__.update(obj_dict)
-        # XXX: Need a better solution for this when multi-db stuff is
-        # supported. It's the only class-reference to the module-level
-        # connection variable.
-        self.connection = connection
+
+    def prepare(self):
+        return self
+
+    def get_compiler(self, using=None, connection=None):
+        if using is None and connection is None:
+            raise ValueError("Need either using or connection")
+        if using:
+            connection = connections[using]
+
+        # Check that the compiler will be able to execute the query
+        for alias, aggregate in self.aggregate_select.items():
+            connection.ops.check_aggregate_support(aggregate)
+
+        return connection.ops.compiler(self.compiler)(self, connection, using)
 
     def get_meta(self):
         """
@@ -160,23 +225,7 @@
         """
         return self.model._meta
 
-    def quote_name_unless_alias(self, name):
-        """
-        A wrapper around connection.ops.quote_name that doesn't quote aliases
-        for table names. This avoids problems with some SQL dialects that treat
-        quoted strings specially (e.g. PostgreSQL).
-        """
-        if name in self.quote_cache:
-            return self.quote_cache[name]
-        if ((name in self.alias_map and name not in self.table_map) or
-                name in self.extra_select):
-            self.quote_cache[name] = name
-            return name
-        r = self.connection.ops.quote_name(name)
-        self.quote_cache[name] = r
-        return r
-
-    def clone(self, klass=None, **kwargs):
+    def clone(self, klass=None, memo=None, **kwargs):
         """
         Creates a copy of the current instance. The 'kwargs' parameter can be
         used by clients to update attributes after copying has taken place.
@@ -184,7 +233,6 @@
         obj = Empty()
         obj.__class__ = klass or self.__class__
         obj.model = self.model
-        obj.connection = self.connection
         obj.alias_refcount = self.alias_refcount.copy()
         obj.alias_map = self.alias_map.copy()
         obj.table_map = self.table_map.copy()
@@ -201,27 +249,29 @@
         obj.dupe_avoidance = self.dupe_avoidance.copy()
         obj.select = self.select[:]
         obj.tables = self.tables[:]
-        obj.where = deepcopy(self.where)
+        obj.where = deepcopy(self.where, memo=memo)
         obj.where_class = self.where_class
         if self.group_by is None:
             obj.group_by = None
         else:
             obj.group_by = self.group_by[:]
-        obj.having = deepcopy(self.having)
+        obj.having = deepcopy(self.having, memo=memo)
         obj.order_by = self.order_by[:]
         obj.low_mark, obj.high_mark = self.low_mark, self.high_mark
         obj.distinct = self.distinct
         obj.select_related = self.select_related
         obj.related_select_cols = []
-        obj.aggregates = deepcopy(self.aggregates)
+        obj.aggregates = deepcopy(self.aggregates, memo=memo)
         if self.aggregate_select_mask is None:
             obj.aggregate_select_mask = None
         else:
             obj.aggregate_select_mask = self.aggregate_select_mask.copy()
-        if self._aggregate_select_cache is None:
-            obj._aggregate_select_cache = None
-        else:
-            obj._aggregate_select_cache = self._aggregate_select_cache.copy()
+        # _aggregate_select_cache cannot be copied, as doing so breaks the
+        # (necessary) state in which both aggregates and
+        # _aggregate_select_cache point to the same underlying objects.
+        # It will get re-populated in the cloned queryset the next time it's
+        # used.
+        obj._aggregate_select_cache = None
         obj.max_depth = self.max_depth
         obj.extra = self.extra.copy()
         if self.extra_select_mask is None:
@@ -233,10 +283,8 @@
         else:
             obj._extra_select_cache = self._extra_select_cache.copy()
         obj.extra_tables = self.extra_tables
-        obj.extra_where = self.extra_where
-        obj.extra_params = self.extra_params
         obj.extra_order_by = self.extra_order_by
-        obj.deferred_loading = deepcopy(self.deferred_loading)
+        obj.deferred_loading = deepcopy(self.deferred_loading, memo=memo)
         if self.filter_is_sticky and self.used_aliases:
             obj.used_aliases = self.used_aliases.copy()
         else:
@@ -247,16 +295,16 @@
             obj._setup_query()
         return obj
 
-    def convert_values(self, value, field):
+    def convert_values(self, value, field, connection):
         """Convert the database-returned value into a type that is consistent
         across database backends.
 
         By default, this defers to the underlying backend operations, but
         it can be overridden by Query classes for specific backends.
         """
-        return self.connection.ops.convert_values(value, field)
+        return connection.ops.convert_values(value, field)
 
-    def resolve_aggregate(self, value, aggregate):
+    def resolve_aggregate(self, value, aggregate, connection):
         """Resolve the value of aggregates returned by the database to
         consistent (and reasonable) types.
 
@@ -276,39 +324,9 @@
             return float(value)
         else:
             # Return value depends on the type of the field being processed.
-            return self.convert_values(value, aggregate.field)
+            return self.convert_values(value, aggregate.field, connection)
 
-    def results_iter(self):
-        """
-        Returns an iterator over the results from executing this query.
-        """
-        resolve_columns = hasattr(self, 'resolve_columns')
-        fields = None
-        for rows in self.execute_sql(MULTI):
-            for row in rows:
-                if resolve_columns:
-                    if fields is None:
-                        # We only set this up here because
-                        # related_select_fields isn't populated until
-                        # execute_sql() has been called.
-                        if self.select_fields:
-                            fields = self.select_fields + self.related_select_fields
-                        else:
-                            fields = self.model._meta.fields
-                    row = self.resolve_columns(row, fields)
-
-                if self.aggregate_select:
-                    aggregate_start = len(self.extra_select.keys()) + len(self.select)
-                    aggregate_end = aggregate_start + len(self.aggregate_select)
-                    row = tuple(row[:aggregate_start]) + tuple([
-                        self.resolve_aggregate(value, aggregate)
-                        for (alias, aggregate), value
-                        in zip(self.aggregate_select.items(), row[aggregate_start:aggregate_end])
-                    ]) + tuple(row[aggregate_end:])
-
-                yield row
-
-    def get_aggregation(self):
+    def get_aggregation(self, using):
         """
         Returns the dictionary with the values of the existing aggregations.
         """
@@ -320,7 +338,7 @@
         # over the subquery instead.
         if self.group_by is not None:
             from subqueries import AggregateQuery
-            query = AggregateQuery(self.model, self.connection)
+            query = AggregateQuery(self.model)
 
             obj = self.clone()
 
@@ -331,7 +349,7 @@
                     query.aggregate_select[alias] = aggregate
                     del obj.aggregate_select[alias]
 
-            query.add_subquery(obj)
+            query.add_subquery(obj, using)
         else:
             query = self
             self.select = []
@@ -345,17 +363,17 @@
         query.related_select_cols = []
         query.related_select_fields = []
 
-        result = query.execute_sql(SINGLE)
+        result = query.get_compiler(using).execute_sql(SINGLE)
         if result is None:
             result = [None for q in query.aggregate_select.items()]
 
         return dict([
-            (alias, self.resolve_aggregate(val, aggregate))
+            (alias, self.resolve_aggregate(val, aggregate, connection=connections[using]))
             for (alias, aggregate), val
             in zip(query.aggregate_select.items(), result)
         ])
 
-    def get_count(self):
+    def get_count(self, using):
         """
         Performs a COUNT() query using the current filter constraints.
         """
@@ -369,11 +387,11 @@
             subquery.clear_ordering(True)
             subquery.clear_limits()
 
-            obj = AggregateQuery(obj.model, obj.connection)
-            obj.add_subquery(subquery)
+            obj = AggregateQuery(obj.model)
+            obj.add_subquery(subquery, using=using)
 
         obj.add_count_column()
-        number = obj.get_aggregation()[None]
+        number = obj.get_aggregation(using=using)[None]
 
         # Apply offset and limit constraints manually, since using LIMIT/OFFSET
         # in SQL (in variants that provide them) doesn't change the COUNT
@@ -384,97 +402,19 @@
 
         return number
 
-    def as_sql(self, with_limits=True, with_col_aliases=False):
-        """
-        Creates the SQL for this query. Returns the SQL string and list of
-        parameters.
-
-        If 'with_limits' is False, any limit/offset information is not included
-        in the query.
-        """
-        self.pre_sql_setup()
-        out_cols = self.get_columns(with_col_aliases)
-        ordering, ordering_group_by = self.get_ordering()
-
-        # This must come after 'select' and 'ordering' -- see docstring of
-        # get_from_clause() for details.
-        from_, f_params = self.get_from_clause()
-
-        qn = self.quote_name_unless_alias
-        where, w_params = self.where.as_sql(qn=qn)
-        having, h_params = self.having.as_sql(qn=qn)
-        params = []
-        for val in self.extra_select.itervalues():
-            params.extend(val[1])
-
-        result = ['SELECT']
-        if self.distinct:
-            result.append('DISTINCT')
-        result.append(', '.join(out_cols + self.ordering_aliases))
-
-        result.append('FROM')
-        result.extend(from_)
-        params.extend(f_params)
-
-        if where:
-            result.append('WHERE %s' % where)
-            params.extend(w_params)
-        if self.extra_where:
-            if not where:
-                result.append('WHERE')
-            else:
-                result.append('AND')
-            result.append(' AND '.join(self.extra_where))
-
-        grouping, gb_params = self.get_grouping()
-        if grouping:
-            if ordering:
-                # If the backend can't group by PK (i.e., any database
-                # other than MySQL), then any fields mentioned in the
-                # ordering clause needs to be in the group by clause.
-                if not self.connection.features.allows_group_by_pk:
-                    for col, col_params in ordering_group_by:
-                        if col not in grouping:
-                            grouping.append(str(col))
-                            gb_params.extend(col_params)
-            else:
-                ordering = self.connection.ops.force_no_ordering()
-            result.append('GROUP BY %s' % ', '.join(grouping))
-            params.extend(gb_params)
-
-        if having:
-            result.append('HAVING %s' % having)
-            params.extend(h_params)
-
-        if ordering:
-            result.append('ORDER BY %s' % ', '.join(ordering))
-
-        if with_limits:
-            if self.high_mark is not None:
-                result.append('LIMIT %d' % (self.high_mark - self.low_mark))
-            if self.low_mark:
-                if self.high_mark is None:
-                    val = self.connection.ops.no_limit_value()
-                    if val:
-                        result.append('LIMIT %d' % val)
-                result.append('OFFSET %d' % self.low_mark)
-
-        params.extend(self.extra_params)
-        return ' '.join(result), tuple(params)
-
-    def as_nested_sql(self):
-        """
-        Perform the same functionality as the as_sql() method, returning an
-        SQL string and parameters. However, the alias prefixes are bumped
-        beforehand (in a copy -- the current query isn't changed) and any
-        ordering is removed.
-
-        Used when nesting this query inside another.
-        """
-        obj = self.clone()
-        obj.clear_ordering(True)
-        obj.bump_prefix()
-        return obj.as_sql()
+    def has_results(self, using):
+        q = self.clone()
+        q.add_extra({'a': 1}, None, None, None, None, None)
+        q.select = []
+        q.select_fields = []
+        q.default_cols = False
+        q.select_related = False
+        q.set_extra_mask(('a',))
+        q.set_aggregate_mask(())
+        q.clear_ordering(True)
+        q.set_limits(high=1)
+        compiler = q.get_compiler(using=using)
+        return bool(compiler.execute_sql(SINGLE))
 
     def combine(self, rhs, connector):
         """
@@ -554,9 +494,6 @@
             if self.extra and rhs.extra:
                 raise ValueError("When merging querysets using 'or', you "
                         "cannot have extra(select=...) on both sides.")
-            if self.extra_where and rhs.extra_where:
-                raise ValueError("When merging querysets using 'or', you "
-                        "cannot have extra(where=...) on both sides.")
         self.extra.update(rhs.extra)
         extra_select_mask = set()
         if self.extra_select_mask is not None:
@@ -566,28 +503,12 @@
         if extra_select_mask:
             self.set_extra_mask(extra_select_mask)
         self.extra_tables += rhs.extra_tables
-        self.extra_where += rhs.extra_where
-        self.extra_params += rhs.extra_params
 
         # Ordering uses the 'rhs' ordering, unless it has none, in which case
         # the current ordering is used.
         self.order_by = rhs.order_by and rhs.order_by[:] or self.order_by
         self.extra_order_by = rhs.extra_order_by or self.extra_order_by
 
-    def pre_sql_setup(self):
-        """
-        Does any necessary class setup immediately prior to producing SQL. This
-        is for things that can't necessarily be done in __init__ because we
-        might not have all the pieces in place at that time.
-        """
-        if not self.tables:
-            self.join((None, self.model._meta.db_table, None, None))
-        if (not self.select and self.default_cols and not
-                self.included_inherited_models):
-            self.setup_inherited_models()
-        if self.select_related and not self.related_select_cols:
-            self.fill_related_selections()
-
     def deferred_to_data(self, target, callback):
         """
         Converts the self.deferred_loading data structure to an alternate data
@@ -635,10 +556,10 @@
             # models.
             workset = {}
             for model, values in seen.iteritems():
-                for field in model._meta.local_fields:
+                for field, m in model._meta.get_fields_with_model():
                     if field in values:
                         continue
-                    add_to_dict(workset, model, field)
+                    add_to_dict(workset, m or model, field)
             for model, values in must_include.iteritems():
                 # If we haven't included a model in workset, we don't add the
                 # corresponding must_include fields for that model, since an
@@ -666,15 +587,6 @@
             for model, values in seen.iteritems():
                 callback(target, model, values)
 
-    def deferred_to_columns(self):
-        """
-        Converts the self.deferred_loading data structure to mapping of table
-        names to sets of column names which are to be loaded. Returns the
-        dictionary.
-        """
-        columns = {}
-        self.deferred_to_data(columns, self.deferred_to_columns_cb)
-        return columns
 
     def deferred_to_columns_cb(self, target, model, fields):
         """
@@ -687,349 +599,6 @@
         for field in fields:
             target[table].add(field.column)
 
-    def get_columns(self, with_aliases=False):
-        """
-        Returns the list of columns to use in the select statement. If no
-        columns have been specified, returns all columns relating to fields in
-        the model.
-
-        If 'with_aliases' is true, any column names that are duplicated
-        (without the table names) are given unique aliases. This is needed in
-        some cases to avoid ambiguity with nested queries.
-        """
-        qn = self.quote_name_unless_alias
-        qn2 = self.connection.ops.quote_name
-        result = ['(%s) AS %s' % (col[0], qn2(alias)) for alias, col in self.extra_select.iteritems()]
-        aliases = set(self.extra_select.keys())
-        if with_aliases:
-            col_aliases = aliases.copy()
-        else:
-            col_aliases = set()
-        if self.select:
-            only_load = self.deferred_to_columns()
-            for col in self.select:
-                if isinstance(col, (list, tuple)):
-                    alias, column = col
-                    table = self.alias_map[alias][TABLE_NAME]
-                    if table in only_load and col not in only_load[table]:
-                        continue
-                    r = '%s.%s' % (qn(alias), qn(column))
-                    if with_aliases:
-                        if col[1] in col_aliases:
-                            c_alias = 'Col%d' % len(col_aliases)
-                            result.append('%s AS %s' % (r, c_alias))
-                            aliases.add(c_alias)
-                            col_aliases.add(c_alias)
-                        else:
-                            result.append('%s AS %s' % (r, qn2(col[1])))
-                            aliases.add(r)
-                            col_aliases.add(col[1])
-                    else:
-                        result.append(r)
-                        aliases.add(r)
-                        col_aliases.add(col[1])
-                else:
-                    result.append(col.as_sql(quote_func=qn))
-
-                    if hasattr(col, 'alias'):
-                        aliases.add(col.alias)
-                        col_aliases.add(col.alias)
-
-        elif self.default_cols:
-            cols, new_aliases = self.get_default_columns(with_aliases,
-                    col_aliases)
-            result.extend(cols)
-            aliases.update(new_aliases)
-
-        result.extend([
-            '%s%s' % (
-                aggregate.as_sql(quote_func=qn),
-                alias is not None and ' AS %s' % qn(alias) or ''
-            )
-            for alias, aggregate in self.aggregate_select.items()
-        ])
-
-        for table, col in self.related_select_cols:
-            r = '%s.%s' % (qn(table), qn(col))
-            if with_aliases and col in col_aliases:
-                c_alias = 'Col%d' % len(col_aliases)
-                result.append('%s AS %s' % (r, c_alias))
-                aliases.add(c_alias)
-                col_aliases.add(c_alias)
-            else:
-                result.append(r)
-                aliases.add(r)
-                col_aliases.add(col)
-
-        self._select_aliases = aliases
-        return result
-
-    def get_default_columns(self, with_aliases=False, col_aliases=None,
-            start_alias=None, opts=None, as_pairs=False):
-        """
-        Computes the default columns for selecting every field in the base
-        model. Will sometimes be called to pull in related models (e.g. via
-        select_related), in which case "opts" and "start_alias" will be given
-        to provide a starting point for the traversal.
-
-        Returns a list of strings, quoted appropriately for use in SQL
-        directly, as well as a set of aliases used in the select statement (if
-        'as_pairs' is True, returns a list of (alias, col_name) pairs instead
-        of strings as the first component and None as the second component).
-        """
-        result = []
-        if opts is None:
-            opts = self.model._meta
-        qn = self.quote_name_unless_alias
-        qn2 = self.connection.ops.quote_name
-        aliases = set()
-        only_load = self.deferred_to_columns()
-        # Skip all proxy to the root proxied model
-        proxied_model = get_proxied_model(opts)
-
-        if start_alias:
-            seen = {None: start_alias}
-        for field, model in opts.get_fields_with_model():
-            if start_alias:
-                try:
-                    alias = seen[model]
-                except KeyError:
-                    if model is proxied_model:
-                        alias = start_alias
-                    else:
-                        link_field = opts.get_ancestor_link(model)
-                        alias = self.join((start_alias, model._meta.db_table,
-                                link_field.column, model._meta.pk.column))
-                    seen[model] = alias
-            else:
-                # If we're starting from the base model of the queryset, the
-                # aliases will have already been set up in pre_sql_setup(), so
-                # we can save time here.
-                alias = self.included_inherited_models[model]
-            table = self.alias_map[alias][TABLE_NAME]
-            if table in only_load and field.column not in only_load[table]:
-                continue
-            if as_pairs:
-                result.append((alias, field.column))
-                aliases.add(alias)
-                continue
-            if with_aliases and field.column in col_aliases:
-                c_alias = 'Col%d' % len(col_aliases)
-                result.append('%s.%s AS %s' % (qn(alias),
-                    qn2(field.column), c_alias))
-                col_aliases.add(c_alias)
-                aliases.add(c_alias)
-            else:
-                r = '%s.%s' % (qn(alias), qn2(field.column))
-                result.append(r)
-                aliases.add(r)
-                if with_aliases:
-                    col_aliases.add(field.column)
-        return result, aliases
-
-    def get_from_clause(self):
-        """
-        Returns a list of strings that are joined together to go after the
-        "FROM" part of the query, as well as a list any extra parameters that
-        need to be included. Sub-classes, can override this to create a
-        from-clause via a "select".
-
-        This should only be called after any SQL construction methods that
-        might change the tables we need. This means the select columns and
-        ordering must be done first.
-        """
-        result = []
-        qn = self.quote_name_unless_alias
-        qn2 = self.connection.ops.quote_name
-        first = True
-        for alias in self.tables:
-            if not self.alias_refcount[alias]:
-                continue
-            try:
-                name, alias, join_type, lhs, lhs_col, col, nullable = self.alias_map[alias]
-            except KeyError:
-                # Extra tables can end up in self.tables, but not in the
-                # alias_map if they aren't in a join. That's OK. We skip them.
-                continue
-            alias_str = (alias != name and ' %s' % alias or '')
-            if join_type and not first:
-                result.append('%s %s%s ON (%s.%s = %s.%s)'
-                        % (join_type, qn(name), alias_str, qn(lhs),
-                           qn2(lhs_col), qn(alias), qn2(col)))
-            else:
-                connector = not first and ', ' or ''
-                result.append('%s%s%s' % (connector, qn(name), alias_str))
-            first = False
-        for t in self.extra_tables:
-            alias, unused = self.table_alias(t)
-            # Only add the alias if it's not already present (the table_alias()
-            # calls increments the refcount, so an alias refcount of one means
-            # this is the only reference.
-            if alias not in self.alias_map or self.alias_refcount[alias] == 1:
-                connector = not first and ', ' or ''
-                result.append('%s%s' % (connector, qn(alias)))
-                first = False
-        return result, []
-
-    def get_grouping(self):
-        """
-        Returns a tuple representing the SQL elements in the "group by" clause.
-        """
-        qn = self.quote_name_unless_alias
-        result, params = [], []
-        if self.group_by is not None:
-            group_by = self.group_by or []
-
-            extra_selects = []
-            for extra_select, extra_params in self.extra_select.itervalues():
-                extra_selects.append(extra_select)
-                params.extend(extra_params)
-            for col in group_by + self.related_select_cols + extra_selects:
-                if isinstance(col, (list, tuple)):
-                    result.append('%s.%s' % (qn(col[0]), qn(col[1])))
-                elif hasattr(col, 'as_sql'):
-                    result.append(col.as_sql(qn))
-                else:
-                    result.append(str(col))
-        return result, params
-
-    def get_ordering(self):
-        """
-        Returns a tuple containing a list representing the SQL elements in the
-        "order by" clause, and the list of SQL elements that need to be added
-        to the GROUP BY clause as a result of the ordering.
-
-        Also sets the ordering_aliases attribute on this instance to a list of
-        extra aliases needed in the select.
-
-        Determining the ordering SQL can change the tables we need to include,
-        so this should be run *before* get_from_clause().
-        """
-        if self.extra_order_by:
-            ordering = self.extra_order_by
-        elif not self.default_ordering:
-            ordering = self.order_by
-        else:
-            ordering = self.order_by or self.model._meta.ordering
-        qn = self.quote_name_unless_alias
-        qn2 = self.connection.ops.quote_name
-        distinct = self.distinct
-        select_aliases = self._select_aliases
-        result = []
-        group_by = []
-        ordering_aliases = []
-        if self.standard_ordering:
-            asc, desc = ORDER_DIR['ASC']
-        else:
-            asc, desc = ORDER_DIR['DESC']
-
-        # It's possible, due to model inheritance, that normal usage might try
-        # to include the same field more than once in the ordering. We track
-        # the table/column pairs we use and discard any after the first use.
-        processed_pairs = set()
-
-        for field in ordering:
-            if field == '?':
-                result.append(self.connection.ops.random_function_sql())
-                continue
-            if isinstance(field, int):
-                if field < 0:
-                    order = desc
-                    field = -field
-                else:
-                    order = asc
-                result.append('%s %s' % (field, order))
-                group_by.append((field, []))
-                continue
-            col, order = get_order_dir(field, asc)
-            if col in self.aggregate_select:
-                result.append('%s %s' % (col, order))
-                continue
-            if '.' in field:
-                # This came in through an extra(order_by=...) addition. Pass it
-                # on verbatim.
-                table, col = col.split('.', 1)
-                if (table, col) not in processed_pairs:
-                    elt = '%s.%s' % (qn(table), col)
-                    processed_pairs.add((table, col))
-                    if not distinct or elt in select_aliases:
-                        result.append('%s %s' % (elt, order))
-                        group_by.append((elt, []))
-            elif get_order_dir(field)[0] not in self.extra_select:
-                # 'col' is of the form 'field' or 'field1__field2' or
-                # '-field1__field2__field', etc.
-                for table, col, order in self.find_ordering_name(field,
-                        self.model._meta, default_order=asc):
-                    if (table, col) not in processed_pairs:
-                        elt = '%s.%s' % (qn(table), qn2(col))
-                        processed_pairs.add((table, col))
-                        if distinct and elt not in select_aliases:
-                            ordering_aliases.append(elt)
-                        result.append('%s %s' % (elt, order))
-                        group_by.append((elt, []))
-            else:
-                elt = qn2(col)
-                if distinct and col not in select_aliases:
-                    ordering_aliases.append(elt)
-                result.append('%s %s' % (elt, order))
-                group_by.append(self.extra_select[col])
-        self.ordering_aliases = ordering_aliases
-        return result, group_by
-
-    def find_ordering_name(self, name, opts, alias=None, default_order='ASC',
-            already_seen=None):
-        """
-        Returns the table alias (the name might be ambiguous, the alias will
-        not be) and column name for ordering by the given 'name' parameter.
-        The 'name' is of the form 'field1__field2__...__fieldN'.
-        """
-        name, order = get_order_dir(name, default_order)
-        pieces = name.split(LOOKUP_SEP)
-        if not alias:
-            alias = self.get_initial_alias()
-        field, target, opts, joins, last, extra = self.setup_joins(pieces,
-                opts, alias, False)
-        alias = joins[-1]
-        col = target.column
-        if not field.rel:
-            # To avoid inadvertent trimming of a necessary alias, use the
-            # refcount to show that we are referencing a non-relation field on
-            # the model.
-            self.ref_alias(alias)
-
-        # Must use left outer joins for nullable fields and their relations.
-        self.promote_alias_chain(joins,
-                self.alias_map[joins[0]][JOIN_TYPE] == self.LOUTER)
-
-        # If we get to this point and the field is a relation to another model,
-        # append the default ordering for that model.
-        if field.rel and len(joins) > 1 and opts.ordering:
-            # Firstly, avoid infinite loops.
-            if not already_seen:
-                already_seen = set()
-            join_tuple = tuple([self.alias_map[j][TABLE_NAME] for j in joins])
-            if join_tuple in already_seen:
-                raise FieldError('Infinite loop caused by ordering.')
-            already_seen.add(join_tuple)
-
-            results = []
-            for item in opts.ordering:
-                results.extend(self.find_ordering_name(item, opts, alias,
-                        order, already_seen))
-            return results
-
-        if alias:
-            # We have to do the same "final join" optimisation as in
-            # add_filter, since the final column might not otherwise be part of
-            # the select set (so we can't order on it).
-            while 1:
-                join = self.alias_map[alias]
-                if col != join[RHS_JOIN_COL]:
-                    break
-                self.unref_alias(alias)
-                alias = join[LHS_ALIAS]
-                col = join[LHS_JOIN_COL]
-        return [(alias, col, order)]
 
     def table_alias(self, table_name, create=False):
         """
@@ -1333,113 +902,6 @@
                 self.unref_alias(alias)
         self.included_inherited_models = {}
 
-    def fill_related_selections(self, opts=None, root_alias=None, cur_depth=1,
-            used=None, requested=None, restricted=None, nullable=None,
-            dupe_set=None, avoid_set=None):
-        """
-        Fill in the information needed for a select_related query. The current
-        depth is measured as the number of connections away from the root model
-        (for example, cur_depth=1 means we are looking at models with direct
-        connections to the root model).
-        """
-        if not restricted and self.max_depth and cur_depth > self.max_depth:
-            # We've recursed far enough; bail out.
-            return
-
-        if not opts:
-            opts = self.get_meta()
-            root_alias = self.get_initial_alias()
-            self.related_select_cols = []
-            self.related_select_fields = []
-        if not used:
-            used = set()
-        if dupe_set is None:
-            dupe_set = set()
-        if avoid_set is None:
-            avoid_set = set()
-        orig_dupe_set = dupe_set
-
-        # Setup for the case when only particular related fields should be
-        # included in the related selection.
-        if requested is None and restricted is not False:
-            if isinstance(self.select_related, dict):
-                requested = self.select_related
-                restricted = True
-            else:
-                restricted = False
-
-        for f, model in opts.get_fields_with_model():
-            if not select_related_descend(f, restricted, requested):
-                continue
-            # The "avoid" set is aliases we want to avoid just for this
-            # particular branch of the recursion. They aren't permanently
-            # forbidden from reuse in the related selection tables (which is
-            # what "used" specifies).
-            avoid = avoid_set.copy()
-            dupe_set = orig_dupe_set.copy()
-            table = f.rel.to._meta.db_table
-            if nullable or f.null:
-                promote = True
-            else:
-                promote = False
-            if model:
-                int_opts = opts
-                alias = root_alias
-                alias_chain = []
-                for int_model in opts.get_base_chain(model):
-                    # Proxy model have elements in base chain
-                    # with no parents, assign the new options
-                    # object and skip to the next base in that
-                    # case
-                    if not int_opts.parents[int_model]:
-                        int_opts = int_model._meta
-                        continue
-                    lhs_col = int_opts.parents[int_model].column
-                    dedupe = lhs_col in opts.duplicate_targets
-                    if dedupe:
-                        avoid.update(self.dupe_avoidance.get(id(opts), lhs_col),
-                                ())
-                        dupe_set.add((opts, lhs_col))
-                    int_opts = int_model._meta
-                    alias = self.join((alias, int_opts.db_table, lhs_col,
-                            int_opts.pk.column), exclusions=used,
-                            promote=promote)
-                    alias_chain.append(alias)
-                    for (dupe_opts, dupe_col) in dupe_set:
-                        self.update_dupe_avoidance(dupe_opts, dupe_col, alias)
-                if self.alias_map[root_alias][JOIN_TYPE] == self.LOUTER:
-                    self.promote_alias_chain(alias_chain, True)
-            else:
-                alias = root_alias
-
-            dedupe = f.column in opts.duplicate_targets
-            if dupe_set or dedupe:
-                avoid.update(self.dupe_avoidance.get((id(opts), f.column), ()))
-                if dedupe:
-                    dupe_set.add((opts, f.column))
-
-            alias = self.join((alias, table, f.column,
-                    f.rel.get_related_field().column),
-                    exclusions=used.union(avoid), promote=promote)
-            used.add(alias)
-            columns, aliases = self.get_default_columns(start_alias=alias,
-                    opts=f.rel.to._meta, as_pairs=True)
-            self.related_select_cols.extend(columns)
-            if self.alias_map[alias][JOIN_TYPE] == self.LOUTER:
-                self.promote_alias_chain(aliases, True)
-            self.related_select_fields.extend(f.rel.to._meta.fields)
-            if restricted:
-                next = requested.get(f.name, {})
-            else:
-                next = False
-            if f.null is not None:
-                new_nullable = f.null
-            else:
-                new_nullable = None
-            for dupe_opts, dupe_col in dupe_set:
-                self.update_dupe_avoidance(dupe_opts, dupe_col, alias)
-            self.fill_related_selections(f.rel.to._meta, alias, cur_depth + 1,
-                    used, next, restricted, new_nullable, dupe_set, avoid)
 
     def add_aggregate(self, aggregate, model, alias, is_summary):
         """
@@ -1488,7 +950,6 @@
             col = field_name
 
         # Add the aggregate to the query
-        alias = truncate_name(alias, self.connection.ops.max_name_length())
         aggregate.add_to_query(self, alias, col=col, source=source, is_summary=is_summary)
 
     def add_filter(self, filter_expr, connector=AND, negate=False, trim=False,
@@ -1539,10 +1000,6 @@
                 raise ValueError("Cannot use None as a query value")
             lookup_type = 'isnull'
             value = True
-        elif (value == '' and lookup_type == 'exact' and
-              connection.features.interprets_empty_strings_as_nulls):
-            lookup_type = 'isnull'
-            value = True
         elif callable(value):
             value = value()
         elif hasattr(value, 'evaluate'):
@@ -1666,13 +1123,13 @@
             for child in q_object.children:
                 if connector == OR:
                     refcounts_before = self.alias_refcount.copy()
+                self.where.start_subtree(connector)
                 if isinstance(child, Node):
-                    self.where.start_subtree(connector)
                     self.add_q(child, used_aliases)
-                    self.where.end_subtree()
                 else:
                     self.add_filter(child, connector, q_object.negated,
                             can_reuse=used_aliases)
+                self.where.end_subtree()
                 if connector == OR:
                     # Aliases that were newly added or not used at all need to
                     # be promoted to outer joins if they are nullable relations.
@@ -1960,7 +1417,7 @@
         original exclude filter (filter_expr) and the portion up to the first
         N-to-many relation field.
         """
-        query = Query(self.model, self.connection)
+        query = Query(self.model)
         query.add_filter(filter_expr, can_reuse=can_reuse)
         query.bump_prefix()
         query.clear_ordering(True)
@@ -2099,11 +1556,6 @@
         will be made automatically.
         """
         self.group_by = []
-        if self.connection.features.allows_group_by_pk:
-            if len(self.select) == len(self.model._meta.fields):
-                self.group_by.append((self.model._meta.db_table,
-                                      self.model._meta.pk.column))
-                return
 
         for sel in self.select:
             self.group_by.append(sel)
@@ -2182,10 +1634,8 @@
                 select_pairs[name] = (entry, entry_params)
             # This is order preserving, since self.extra_select is a SortedDict.
             self.extra.update(select_pairs)
-        if where:
-            self.extra_where += tuple(where)
-        if params:
-            self.extra_params += tuple(params)
+        if where or params:
+            self.where.add(ExtraWhere(where, params), AND)
         if tables:
             self.extra_tables += tuple(tables)
         if order_by:
@@ -2343,58 +1793,6 @@
         self.select = [(select_alias, select_col)]
         self.remove_inherited_models()
 
-    def execute_sql(self, result_type=MULTI):
-        """
-        Run the query against the database and returns the result(s). The
-        return value is a single data item if result_type is SINGLE, or an
-        iterator over the results if the result_type is MULTI.
-
-        result_type is either MULTI (use fetchmany() to retrieve all rows),
-        SINGLE (only retrieve a single row), or None. In this last case, the
-        cursor is returned if any query is executed, since it's used by
-        subclasses such as InsertQuery). It's possible, however, that no query
-        is needed, as the filters describe an empty set. In that case, None is
-        returned, to avoid any unnecessary database interaction.
-        """
-        try:
-            sql, params = self.as_sql()
-            if not sql:
-                raise EmptyResultSet
-        except EmptyResultSet:
-            if result_type == MULTI:
-                return empty_iter()
-            else:
-                return
-        cursor = self.connection.cursor()
-        cursor.execute(sql, params)
-
-        if not result_type:
-            return cursor
-        if result_type == SINGLE:
-            if self.ordering_aliases:
-                return cursor.fetchone()[:-len(self.ordering_aliases)]
-            return cursor.fetchone()
-
-        # The MULTI case.
-        if self.ordering_aliases:
-            result = order_modified_iter(cursor, len(self.ordering_aliases),
-                    self.connection.features.empty_fetchmany_value)
-        else:
-            result = iter((lambda: cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)),
-                    self.connection.features.empty_fetchmany_value)
-        if not self.connection.features.can_use_chunked_reads:
-            # If we are using non-chunked reads, we return the same data
-            # structure as normally, but ensure it is all read into memory
-            # before going any further.
-            return list(result)
-        return result
-
-# Use the backend's custom Query class if it defines one. Otherwise, use the
-# default.
-if connection.features.uses_custom_query_class:
-    Query = connection.ops.query_class(BaseQuery)
-else:
-    Query = BaseQuery
 
 def get_order_dir(field, default='ASC'):
     """
@@ -2409,22 +1807,6 @@
         return field[1:], dirn[1]
     return field, dirn[0]
 
-def empty_iter():
-    """
-    Returns an iterator containing no results.
-    """
-    yield iter([]).next()
-
-def order_modified_iter(cursor, trim, sentinel):
-    """
-    Yields blocks of rows from a cursor. We use this iterator in the special
-    case when extra output columns have been added to support ordering
-    requirements. We must trim those extra columns before anything else can use
-    the results, since they're only needed to make the SQL valid.
-    """
-    for rows in iter((lambda: cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE)),
-            sentinel):
-        yield [r[:-trim] for r in rows]
 
 def setup_join_cache(sender, **kwargs):
     """
--- a/web/lib/django/db/models/sql/subqueries.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/sql/subqueries.py	Tue May 25 02:43:45 2010 +0200
@@ -3,6 +3,7 @@
 """
 
 from django.core.exceptions import FieldError
+from django.db import connections
 from django.db.models.sql.constants import *
 from django.db.models.sql.datastructures import Date
 from django.db.models.sql.expressions import SQLEvaluator
@@ -17,65 +18,17 @@
     Delete queries are done through this class, since they are more constrained
     than general queries.
     """
-    def as_sql(self):
-        """
-        Creates the SQL for this query. Returns the SQL string and list of
-        parameters.
-        """
-        assert len(self.tables) == 1, \
-                "Can only delete from one table at a time."
-        result = ['DELETE FROM %s' % self.quote_name_unless_alias(self.tables[0])]
-        where, params = self.where.as_sql()
-        result.append('WHERE %s' % where)
-        return ' '.join(result), tuple(params)
 
-    def do_query(self, table, where):
+    compiler = 'SQLDeleteCompiler'
+
+    def do_query(self, table, where, using):
         self.tables = [table]
         self.where = where
-        self.execute_sql(None)
+        self.get_compiler(using).execute_sql(None)
 
-    def delete_batch_related(self, pk_list):
-        """
-        Set up and execute delete queries for all the objects related to the
-        primary key values in pk_list. To delete the objects themselves, use
-        the delete_batch() method.
-
-        More than one physical query may be executed if there are a
-        lot of values in pk_list.
+    def delete_batch(self, pk_list, using):
         """
-        from django.contrib.contenttypes import generic
-        cls = self.model
-        for related in cls._meta.get_all_related_many_to_many_objects():
-            if not isinstance(related.field, generic.GenericRelation):
-                for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
-                    where = self.where_class()
-                    where.add((Constraint(None,
-                            related.field.m2m_reverse_name(), related.field),
-                            'in',
-                            pk_list[offset : offset+GET_ITERATOR_CHUNK_SIZE]),
-                            AND)
-                    self.do_query(related.field.m2m_db_table(), where)
-
-        for f in cls._meta.many_to_many:
-            w1 = self.where_class()
-            if isinstance(f, generic.GenericRelation):
-                from django.contrib.contenttypes.models import ContentType
-                field = f.rel.to._meta.get_field(f.content_type_field_name)
-                w1.add((Constraint(None, field.column, field), 'exact',
-                        ContentType.objects.get_for_model(cls).id), AND)
-            for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE):
-                where = self.where_class()
-                where.add((Constraint(None, f.m2m_column_name(), f), 'in',
-                        pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]),
-                        AND)
-                if w1:
-                    where.add(w1, AND)
-                self.do_query(f.m2m_db_table(), where)
-
-    def delete_batch(self, pk_list):
-        """
-        Set up and execute delete queries for all the objects in pk_list. This
-        should be called after delete_batch_related(), if necessary.
+        Set up and execute delete queries for all the objects in pk_list.
 
         More than one physical query may be executed if there are a
         lot of values in pk_list.
@@ -85,12 +38,15 @@
             field = self.model._meta.pk
             where.add((Constraint(None, field.column, field), 'in',
                     pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]), AND)
-            self.do_query(self.model._meta.db_table, where)
+            self.do_query(self.model._meta.db_table, where, using=using)
 
 class UpdateQuery(Query):
     """
     Represents an "update" SQL query.
     """
+
+    compiler = 'SQLUpdateCompiler'
+
     def __init__(self, *args, **kwargs):
         super(UpdateQuery, self).__init__(*args, **kwargs)
         self._setup_query()
@@ -110,98 +66,8 @@
         return super(UpdateQuery, self).clone(klass,
                 related_updates=self.related_updates.copy(), **kwargs)
 
-    def execute_sql(self, result_type=None):
-        """
-        Execute the specified update. Returns the number of rows affected by
-        the primary update query. The "primary update query" is the first
-        non-empty query that is executed. Row counts for any subsequent,
-        related queries are not available.
-        """
-        cursor = super(UpdateQuery, self).execute_sql(result_type)
-        rows = cursor and cursor.rowcount or 0
-        is_empty = cursor is None
-        del cursor
-        for query in self.get_related_updates():
-            aux_rows = query.execute_sql(result_type)
-            if is_empty:
-                rows = aux_rows
-                is_empty = False
-        return rows
 
-    def as_sql(self):
-        """
-        Creates the SQL for this query. Returns the SQL string and list of
-        parameters.
-        """
-        self.pre_sql_setup()
-        if not self.values:
-            return '', ()
-        table = self.tables[0]
-        qn = self.quote_name_unless_alias
-        result = ['UPDATE %s' % qn(table)]
-        result.append('SET')
-        values, update_params = [], []
-        for name, val, placeholder in self.values:
-            if hasattr(val, 'as_sql'):
-                sql, params = val.as_sql(qn)
-                values.append('%s = %s' % (qn(name), sql))
-                update_params.extend(params)
-            elif val is not None:
-                values.append('%s = %s' % (qn(name), placeholder))
-                update_params.append(val)
-            else:
-                values.append('%s = NULL' % qn(name))
-        result.append(', '.join(values))
-        where, params = self.where.as_sql()
-        if where:
-            result.append('WHERE %s' % where)
-        return ' '.join(result), tuple(update_params + params)
-
-    def pre_sql_setup(self):
-        """
-        If the update depends on results from other tables, we need to do some
-        munging of the "where" conditions to match the format required for
-        (portable) SQL updates. That is done here.
-
-        Further, if we are going to be running multiple updates, we pull out
-        the id values to update at this point so that they don't change as a
-        result of the progressive updates.
-        """
-        self.select_related = False
-        self.clear_ordering(True)
-        super(UpdateQuery, self).pre_sql_setup()
-        count = self.count_active_tables()
-        if not self.related_updates and count == 1:
-            return
-
-        # We need to use a sub-select in the where clause to filter on things
-        # from other tables.
-        query = self.clone(klass=Query)
-        query.bump_prefix()
-        query.extra = {}
-        query.select = []
-        query.add_fields([query.model._meta.pk.name])
-        must_pre_select = count > 1 and not self.connection.features.update_can_self_select
-
-        # Now we adjust the current query: reset the where clause and get rid
-        # of all the tables we don't need (since they're in the sub-select).
-        self.where = self.where_class()
-        if self.related_updates or must_pre_select:
-            # Either we're using the idents in multiple update queries (so
-            # don't want them to change), or the db backend doesn't support
-            # selecting from the updating table (e.g. MySQL).
-            idents = []
-            for rows in query.execute_sql(MULTI):
-                idents.extend([r[0] for r in rows])
-            self.add_filter(('pk__in', idents))
-            self.related_ids = idents
-        else:
-            # The fast path. Filters and updates in one query.
-            self.add_filter(('pk__in', query))
-        for alias in self.tables[1:]:
-            self.alias_refcount[alias] = 0
-
-    def clear_related(self, related_field, pk_list):
+    def clear_related(self, related_field, pk_list, using):
         """
         Set up and execute an update query that clears related entries for the
         keys in pk_list.
@@ -214,8 +80,8 @@
             self.where.add((Constraint(None, f.column, f), 'in',
                     pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]),
                     AND)
-            self.values = [(related_field.column, None, '%s')]
-            self.execute_sql(None)
+            self.values = [(related_field, None, None)]
+            self.get_compiler(using).execute_sql(None)
 
     def add_update_values(self, values):
         """
@@ -228,6 +94,9 @@
             field, model, direct, m2m = self.model._meta.get_field_by_name(name)
             if not direct or m2m:
                 raise FieldError('Cannot update model field %r (only non-relations and foreign keys permitted).' % field)
+            if model:
+                self.add_related_update(model, field, val)
+                continue
             values_seq.append((field, model, val))
         return self.add_update_fields(values_seq)
 
@@ -237,36 +106,18 @@
         Used by add_update_values() as well as the "fast" update path when
         saving models.
         """
-        from django.db.models.base import Model
-        for field, model, val in values_seq:
-            if hasattr(val, 'prepare_database_save'):
-                val = val.prepare_database_save(field)
-            else:
-                val = field.get_db_prep_save(val)
+        self.values.extend(values_seq)
 
-            # Getting the placeholder for the field.
-            if hasattr(field, 'get_placeholder'):
-                placeholder = field.get_placeholder(val)
-            else:
-                placeholder = '%s'
-
-            if hasattr(val, 'evaluate'):
-                val = SQLEvaluator(val, self, allow_joins=False)
-            if model:
-                self.add_related_update(model, field.column, val, placeholder)
-            else:
-                self.values.append((field.column, val, placeholder))
-
-    def add_related_update(self, model, column, value, placeholder):
+    def add_related_update(self, model, field, value):
         """
         Adds (name, value) to an update query for an ancestor model.
 
         Updates are coalesced so that we only run one update query per ancestor.
         """
         try:
-            self.related_updates[model].append((column, value, placeholder))
+            self.related_updates[model].append((field, None, value))
         except KeyError:
-            self.related_updates[model] = [(column, value, placeholder)]
+            self.related_updates[model] = [(field, None, value)]
 
     def get_related_updates(self):
         """
@@ -278,53 +129,31 @@
             return []
         result = []
         for model, values in self.related_updates.iteritems():
-            query = UpdateQuery(model, self.connection)
+            query = UpdateQuery(model)
             query.values = values
-            if self.related_ids:
+            if self.related_ids is not None:
                 query.add_filter(('pk__in', self.related_ids))
             result.append(query)
         return result
 
 class InsertQuery(Query):
+    compiler = 'SQLInsertCompiler'
+
     def __init__(self, *args, **kwargs):
         super(InsertQuery, self).__init__(*args, **kwargs)
         self.columns = []
         self.values = []
         self.params = ()
-        self.return_id = False
 
     def clone(self, klass=None, **kwargs):
-        extras = {'columns': self.columns[:], 'values': self.values[:],
-                  'params': self.params, 'return_id': self.return_id}
+        extras = {
+            'columns': self.columns[:],
+            'values': self.values[:],
+            'params': self.params
+        }
         extras.update(kwargs)
         return super(InsertQuery, self).clone(klass, **extras)
 
-    def as_sql(self):
-        # We don't need quote_name_unless_alias() here, since these are all
-        # going to be column names (so we can avoid the extra overhead).
-        qn = self.connection.ops.quote_name
-        opts = self.model._meta
-        result = ['INSERT INTO %s' % qn(opts.db_table)]
-        result.append('(%s)' % ', '.join([qn(c) for c in self.columns]))
-        result.append('VALUES (%s)' % ', '.join(self.values))
-        params = self.params
-        if self.return_id and self.connection.features.can_return_id_from_insert:
-            col = "%s.%s" % (qn(opts.db_table), qn(opts.pk.column))
-            r_fmt, r_params = self.connection.ops.return_insert_id()
-            result.append(r_fmt % col)
-            params = params + r_params
-        return ' '.join(result), params
-
-    def execute_sql(self, return_id=False):
-        self.return_id = return_id
-        cursor = super(InsertQuery, self).execute_sql(None)
-        if not (return_id and cursor):
-            return
-        if self.connection.features.can_return_id_from_insert:
-            return self.connection.ops.fetch_returned_insert_id(cursor)
-        return self.connection.ops.last_insert_id(cursor,
-                self.model._meta.db_table, self.model._meta.pk.column)
-
     def insert_values(self, insert_values, raw_values=False):
         """
         Set up the insert query from the 'insert_values' dictionary. The
@@ -337,17 +166,11 @@
         """
         placeholders, values = [], []
         for field, val in insert_values:
-            if hasattr(field, 'get_placeholder'):
-                # Some fields (e.g. geo fields) need special munging before
-                # they can be inserted.
-                placeholders.append(field.get_placeholder(val))
-            else:
-                placeholders.append('%s')
-
+            placeholders.append((field, val))
             self.columns.append(field.column)
             values.append(val)
         if raw_values:
-            self.values.extend(values)
+            self.values.extend([(None, v) for v in values])
         else:
             self.params += tuple(values)
             self.values.extend(placeholders)
@@ -358,44 +181,8 @@
     date field. This requires some special handling when converting the results
     back to Python objects, so we put it in a separate class.
     """
-    def __getstate__(self):
-        """
-        Special DateQuery-specific pickle handling.
-        """
-        for elt in self.select:
-            if isinstance(elt, Date):
-                # Eliminate a method reference that can't be pickled. The
-                # __setstate__ method restores this.
-                elt.date_sql_func = None
-        return super(DateQuery, self).__getstate__()
 
-    def __setstate__(self, obj_dict):
-        super(DateQuery, self).__setstate__(obj_dict)
-        for elt in self.select:
-            if isinstance(elt, Date):
-                self.date_sql_func = self.connection.ops.date_trunc_sql
-
-    def results_iter(self):
-        """
-        Returns an iterator over the results from executing this query.
-        """
-        resolve_columns = hasattr(self, 'resolve_columns')
-        if resolve_columns:
-            from django.db.models.fields import DateTimeField
-            fields = [DateTimeField()]
-        else:
-            from django.db.backends.util import typecast_timestamp
-            needs_string_cast = self.connection.features.needs_datetime_string_cast
-
-        offset = len(self.extra_select)
-        for rows in self.execute_sql(MULTI):
-            for row in rows:
-                date = row[offset]
-                if resolve_columns:
-                    date = self.resolve_columns(row, fields)[offset]
-                elif needs_string_cast:
-                    date = typecast_timestamp(str(date))
-                yield date
+    compiler = 'SQLDateCompiler'
 
     def add_date_select(self, field, lookup_type, order='ASC'):
         """
@@ -404,12 +191,11 @@
         result = self.setup_joins([field.name], self.get_meta(),
                 self.get_initial_alias(), False)
         alias = result[3][-1]
-        select = Date((alias, field.column), lookup_type,
-                self.connection.ops.date_trunc_sql)
+        select = Date((alias, field.column), lookup_type)
         self.select = [select]
         self.select_fields = [None]
         self.select_related = False # See #7097.
-        self.extra = {}
+        self.set_extra_mask([])
         self.distinct = True
         self.order_by = order == 'ASC' and [1] or [-1]
 
@@ -418,20 +204,8 @@
     An AggregateQuery takes another query as a parameter to the FROM
     clause and only selects the elements in the provided list.
     """
-    def add_subquery(self, query):
-        self.subquery, self.sub_params = query.as_sql(with_col_aliases=True)
+
+    compiler = 'SQLAggregateCompiler'
 
-    def as_sql(self, quote_func=None):
-        """
-        Creates the SQL for this query. Returns the SQL string and list of
-        parameters.
-        """
-        sql = ('SELECT %s FROM (%s) subquery' % (
-            ', '.join([
-                aggregate.as_sql()
-                for aggregate in self.aggregate_select.values()
-            ]),
-            self.subquery)
-        )
-        params = self.sub_params
-        return (sql, params)
+    def add_subquery(self, query, using):
+        self.subquery, self.sub_params = query.get_compiler(using).as_sql(with_col_aliases=True)
--- a/web/lib/django/db/models/sql/where.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/models/sql/where.py	Tue May 25 02:43:45 2010 +0200
@@ -4,7 +4,6 @@
 import datetime
 
 from django.utils import tree
-from django.db import connection
 from django.db.models.fields import Field
 from django.db.models.query_utils import QueryWrapper
 from datastructures import EmptyResultSet, FullResultSet
@@ -51,18 +50,6 @@
             # Consume any generators immediately, so that we can determine
             # emptiness and transform any non-empty values correctly.
             value = list(value)
-        if hasattr(obj, "process"):
-            try:
-                obj, params = obj.process(lookup_type, value)
-            except (EmptyShortCircuit, EmptyResultSet):
-                # There are situations where we want to short-circuit any
-                # comparisons and make sure that nothing is returned. One
-                # example is when checking for a NULL pk value, or the
-                # equivalent.
-                super(WhereNode, self).add(NothingNode(), connector)
-                return
-        else:
-            params = Field().get_db_prep_lookup(lookup_type, value)
 
         # The "annotation" parameter is used to pass auxilliary information
         # about the value(s) to the query construction. Specifically, datetime
@@ -75,10 +62,16 @@
         else:
             annotation = bool(value)
 
-        super(WhereNode, self).add((obj, lookup_type, annotation, params),
+        if hasattr(obj, "prepare"):
+            value = obj.prepare(lookup_type, value)
+            super(WhereNode, self).add((obj, lookup_type, annotation, value),
+                connector)
+            return
+
+        super(WhereNode, self).add((obj, lookup_type, annotation, value),
                 connector)
 
-    def as_sql(self, qn=None):
+    def as_sql(self, qn, connection):
         """
         Returns the SQL version of the where clause and the value to be
         substituted in. Returns None, None if this node is empty.
@@ -87,8 +80,6 @@
         (generally not needed except by the internal implementation for
         recursion).
         """
-        if not qn:
-            qn = connection.ops.quote_name
         if not self.children:
             return None, []
         result = []
@@ -97,10 +88,10 @@
         for child in self.children:
             try:
                 if hasattr(child, 'as_sql'):
-                    sql, params = child.as_sql(qn=qn)
+                    sql, params = child.as_sql(qn=qn, connection=connection)
                 else:
                     # A leaf node in the tree.
-                    sql, params = self.make_atom(child, qn)
+                    sql, params = self.make_atom(child, qn, connection)
 
             except EmptyResultSet:
                 if self.connector == AND and not self.negated:
@@ -136,7 +127,7 @@
                 sql_string = '(%s)' % sql_string
         return sql_string, result_params
 
-    def make_atom(self, child, qn):
+    def make_atom(self, child, qn, connection):
         """
         Turn a tuple (table_alias, column_name, db_type, lookup_type,
         value_annot, params) into valid SQL.
@@ -144,13 +135,21 @@
         Returns the string for the SQL fragment and the parameters to use for
         it.
         """
-        lvalue, lookup_type, value_annot, params = child
+        lvalue, lookup_type, value_annot, params_or_value = child
+        if hasattr(lvalue, 'process'):
+            try:
+                lvalue, params = lvalue.process(lookup_type, params_or_value, connection)
+            except EmptyShortCircuit:
+                raise EmptyResultSet
+        else:
+            params = Field().get_db_prep_lookup(lookup_type, params_or_value,
+                connection=connection, prepared=True)
         if isinstance(lvalue, tuple):
             # A direct database column lookup.
-            field_sql = self.sql_for_columns(lvalue, qn)
+            field_sql = self.sql_for_columns(lvalue, qn, connection)
         else:
             # A smart object with an as_sql() method.
-            field_sql = lvalue.as_sql(quote_func=qn)
+            field_sql = lvalue.as_sql(qn, connection)
 
         if value_annot is datetime.datetime:
             cast_sql = connection.ops.datetime_cast_sql()
@@ -158,11 +157,16 @@
             cast_sql = '%s'
 
         if hasattr(params, 'as_sql'):
-            extra, params = params.as_sql(qn)
+            extra, params = params.as_sql(qn, connection)
             cast_sql = ''
         else:
             extra = ''
 
+        if (len(params) == 1 and params[0] == '' and lookup_type == 'exact'
+            and connection.features.interprets_empty_strings_as_nulls):
+            lookup_type = 'isnull'
+            value_annot = True
+
         if lookup_type in connection.operators:
             format = "%s %%s %%s" % (connection.ops.lookup_cast(lookup_type),)
             return (format % (field_sql,
@@ -191,7 +195,7 @@
 
         raise TypeError('Invalid lookup_type: %r' % lookup_type)
 
-    def sql_for_columns(self, data, qn):
+    def sql_for_columns(self, data, qn, connection):
         """
         Returns the SQL fragment used for the left-hand side of a column
         constraint (for example, the "T1.foo" portion in the clause
@@ -216,7 +220,7 @@
                 child.relabel_aliases(change_map)
             elif isinstance(child, tree.Node):
                 self.relabel_aliases(change_map, child)
-            else:
+            elif isinstance(child, (list, tuple)):
                 if isinstance(child[0], (list, tuple)):
                     elt = list(child[0])
                     if elt[0] in change_map:
@@ -233,7 +237,8 @@
     """
     A node that matches everything.
     """
-    def as_sql(self, qn=None):
+
+    def as_sql(self, qn=None, connection=None):
         raise FullResultSet
 
     def relabel_aliases(self, change_map, node=None):
@@ -243,12 +248,20 @@
     """
     A node that matches nothing.
     """
-    def as_sql(self, qn=None):
+    def as_sql(self, qn=None, connection=None):
         raise EmptyResultSet
 
     def relabel_aliases(self, change_map, node=None):
         return
 
+class ExtraWhere(object):
+    def __init__(self, sqls, params):
+        self.sqls = sqls
+        self.params = params
+
+    def as_sql(self, qn=None, connection=None):
+        return " AND ".join(self.sqls), tuple(self.params or ())
+
 class Constraint(object):
     """
     An object that can be passed to WhereNode.add() and knows how to
@@ -257,7 +270,36 @@
     def __init__(self, alias, col, field):
         self.alias, self.col, self.field = alias, col, field
 
-    def process(self, lookup_type, value):
+    def __getstate__(self):
+        """Save the state of the Constraint for pickling.
+
+        Fields aren't necessarily pickleable, because they can have
+        callable default values. So, instead of pickling the field
+        store a reference so we can restore it manually
+        """
+        obj_dict = self.__dict__.copy()
+        if self.field:
+            obj_dict['model'] = self.field.model
+            obj_dict['field_name'] = self.field.name
+        del obj_dict['field']
+        return obj_dict
+
+    def __setstate__(self, data):
+        """Restore the constraint """
+        model = data.pop('model', None)
+        field_name = data.pop('field_name', None)
+        self.__dict__.update(data)
+        if model is not None:
+            self.field = model._meta.get_field(field_name)
+        else:
+            self.field = None
+
+    def prepare(self, lookup_type, value):
+        if self.field:
+            return self.field.get_prep_lookup(lookup_type, value)
+        return value
+
+    def process(self, lookup_type, value, connection):
         """
         Returns a tuple of data suitable for inclusion in a WhereNode
         instance.
@@ -266,16 +308,21 @@
         from django.db.models.base import ObjectDoesNotExist
         try:
             if self.field:
-                params = self.field.get_db_prep_lookup(lookup_type, value)
-                db_type = self.field.db_type()
+                params = self.field.get_db_prep_lookup(lookup_type, value,
+                    connection=connection, prepared=True)
+                db_type = self.field.db_type(connection=connection)
             else:
                 # This branch is used at times when we add a comparison to NULL
                 # (we don't really want to waste time looking up the associated
                 # field object at the calling location).
-                params = Field().get_db_prep_lookup(lookup_type, value)
+                params = Field().get_db_prep_lookup(lookup_type, value,
+                    connection=connection, prepared=True)
                 db_type = None
         except ObjectDoesNotExist:
             raise EmptyShortCircuit
 
         return (self.alias, self.col, db_type), params
 
+    def relabel_aliases(self, change_map):
+        if self.alias in change_map:
+            self.alias = change_map[self.alias]
--- a/web/lib/django/db/transaction.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/db/transaction.py	Tue May 25 02:43:45 2010 +0200
@@ -19,8 +19,8 @@
 try:
     from functools import wraps
 except ImportError:
-    from django.utils.functional import wraps  # Python 2.3, 2.4 fallback.
-from django.db import connection
+    from django.utils.functional import wraps  # Python 2.4 fallback.
+from django.db import connections, DEFAULT_DB_ALIAS
 from django.conf import settings
 
 class TransactionManagementError(Exception):
@@ -30,17 +30,20 @@
     """
     pass
 
-# The states are dictionaries of lists. The key to the dict is the current
-# thread and the list is handled as a stack of values.
+# The states are dictionaries of dictionaries of lists. The key to the outer
+# dict is the current thread, and the key to the inner dictionary is the
+# connection alias and the list is handled as a stack of values.
 state = {}
 savepoint_state = {}
 
 # The dirty flag is set by *_unless_managed functions to denote that the
 # code under transaction management has changed things to require a
 # database commit.
+# This is a dictionary mapping thread to a dictionary mapping connection
+# alias to a boolean.
 dirty = {}
 
-def enter_transaction_management(managed=True):
+def enter_transaction_management(managed=True, using=None):
     """
     Enters transaction management for a running thread. It must be balanced with
     the appropriate leave_transaction_management call, since the actual state is
@@ -50,220 +53,299 @@
     from the settings, if there is no surrounding block (dirty is always false
     when no current block is running).
     """
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    connection = connections[using]
     thread_ident = thread.get_ident()
-    if thread_ident in state and state[thread_ident]:
-        state[thread_ident].append(state[thread_ident][-1])
+    if thread_ident in state and state[thread_ident].get(using):
+        state[thread_ident][using].append(state[thread_ident][using][-1])
     else:
-        state[thread_ident] = []
-        state[thread_ident].append(settings.TRANSACTIONS_MANAGED)
-    if thread_ident not in dirty:
-        dirty[thread_ident] = False
+        state.setdefault(thread_ident, {})
+        state[thread_ident][using] = [settings.TRANSACTIONS_MANAGED]
+    if thread_ident not in dirty or using not in dirty[thread_ident]:
+        dirty.setdefault(thread_ident, {})
+        dirty[thread_ident][using] = False
     connection._enter_transaction_management(managed)
 
-def leave_transaction_management():
+def leave_transaction_management(using=None):
     """
     Leaves transaction management for a running thread. A dirty flag is carried
     over to the surrounding block, as a commit will commit all changes, even
     those from outside. (Commits are on connection level.)
     """
-    connection._leave_transaction_management(is_managed())
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    connection = connections[using]
+    connection._leave_transaction_management(is_managed(using=using))
     thread_ident = thread.get_ident()
-    if thread_ident in state and state[thread_ident]:
-        del state[thread_ident][-1]
+    if thread_ident in state and state[thread_ident].get(using):
+        del state[thread_ident][using][-1]
     else:
         raise TransactionManagementError("This code isn't under transaction management")
-    if dirty.get(thread_ident, False):
-        rollback()
+    if dirty.get(thread_ident, {}).get(using, False):
+        rollback(using=using)
         raise TransactionManagementError("Transaction managed block ended with pending COMMIT/ROLLBACK")
-    dirty[thread_ident] = False
+    dirty[thread_ident][using] = False
 
-def is_dirty():
+def is_dirty(using=None):
     """
     Returns True if the current transaction requires a commit for changes to
     happen.
     """
-    return dirty.get(thread.get_ident(), False)
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    return dirty.get(thread.get_ident(), {}).get(using, False)
 
-def set_dirty():
+def set_dirty(using=None):
     """
     Sets a dirty flag for the current thread and code streak. This can be used
     to decide in a managed block of code to decide whether there are open
     changes waiting for commit.
     """
+    if using is None:
+        using = DEFAULT_DB_ALIAS
     thread_ident = thread.get_ident()
-    if thread_ident in dirty:
-        dirty[thread_ident] = True
+    if thread_ident in dirty and using in dirty[thread_ident]:
+        dirty[thread_ident][using] = True
     else:
         raise TransactionManagementError("This code isn't under transaction management")
 
-def set_clean():
+def set_clean(using=None):
     """
     Resets a dirty flag for the current thread and code streak. This can be used
     to decide in a managed block of code to decide whether a commit or rollback
     should happen.
     """
+    if using is None:
+        using = DEFAULT_DB_ALIAS
     thread_ident = thread.get_ident()
-    if thread_ident in dirty:
-        dirty[thread_ident] = False
+    if thread_ident in dirty and using in dirty[thread_ident]:
+        dirty[thread_ident][using] = False
     else:
         raise TransactionManagementError("This code isn't under transaction management")
-    clean_savepoints()
+    clean_savepoints(using=using)
 
-def clean_savepoints():
+def clean_savepoints(using=None):
+    if using is None:
+        using = DEFAULT_DB_ALIAS
     thread_ident = thread.get_ident()
-    if thread_ident in savepoint_state:
-        del savepoint_state[thread_ident]
+    if thread_ident in savepoint_state and using in savepoint_state[thread_ident]:
+        del savepoint_state[thread_ident][using]
 
-def is_managed():
+def is_managed(using=None):
     """
     Checks whether the transaction manager is in manual or in auto state.
     """
+    if using is None:
+        using = DEFAULT_DB_ALIAS
     thread_ident = thread.get_ident()
-    if thread_ident in state:
-        if state[thread_ident]:
-            return state[thread_ident][-1]
+    if thread_ident in state and using in state[thread_ident]:
+        if state[thread_ident][using]:
+            return state[thread_ident][using][-1]
     return settings.TRANSACTIONS_MANAGED
 
-def managed(flag=True):
+def managed(flag=True, using=None):
     """
     Puts the transaction manager into a manual state: managed transactions have
     to be committed explicitly by the user. If you switch off transaction
     management and there is a pending commit/rollback, the data will be
     commited.
     """
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    connection = connections[using]
     thread_ident = thread.get_ident()
-    top = state.get(thread_ident, None)
+    top = state.get(thread_ident, {}).get(using, None)
     if top:
         top[-1] = flag
-        if not flag and is_dirty():
+        if not flag and is_dirty(using=using):
             connection._commit()
-            set_clean()
+            set_clean(using=using)
     else:
         raise TransactionManagementError("This code isn't under transaction management")
 
-def commit_unless_managed():
+def commit_unless_managed(using=None):
     """
     Commits changes if the system is not in managed transaction mode.
     """
-    if not is_managed():
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    connection = connections[using]
+    if not is_managed(using=using):
         connection._commit()
-        clean_savepoints()
+        clean_savepoints(using=using)
     else:
-        set_dirty()
+        set_dirty(using=using)
 
-def rollback_unless_managed():
+def rollback_unless_managed(using=None):
     """
     Rolls back changes if the system is not in managed transaction mode.
     """
-    if not is_managed():
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    connection = connections[using]
+    if not is_managed(using=using):
         connection._rollback()
     else:
-        set_dirty()
+        set_dirty(using=using)
 
-def commit():
+def commit(using=None):
     """
     Does the commit itself and resets the dirty flag.
     """
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    connection = connections[using]
     connection._commit()
-    set_clean()
+    set_clean(using=using)
 
-def rollback():
+def rollback(using=None):
     """
     This function does the rollback itself and resets the dirty flag.
     """
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    connection = connections[using]
     connection._rollback()
-    set_clean()
+    set_clean(using=using)
 
-def savepoint():
+def savepoint(using=None):
     """
     Creates a savepoint (if supported and required by the backend) inside the
     current transaction. Returns an identifier for the savepoint that will be
     used for the subsequent rollback or commit.
     """
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    connection = connections[using]
     thread_ident = thread.get_ident()
-    if thread_ident in savepoint_state:
-        savepoint_state[thread_ident].append(None)
+    if thread_ident in savepoint_state and using in savepoint_state[thread_ident]:
+        savepoint_state[thread_ident][using].append(None)
     else:
-        savepoint_state[thread_ident] = [None]
+        savepoint_state.setdefault(thread_ident, {})
+        savepoint_state[thread_ident][using] = [None]
     tid = str(thread_ident).replace('-', '')
-    sid = "s%s_x%d" % (tid, len(savepoint_state[thread_ident]))
+    sid = "s%s_x%d" % (tid, len(savepoint_state[thread_ident][using]))
     connection._savepoint(sid)
     return sid
 
-def savepoint_rollback(sid):
+def savepoint_rollback(sid, using=None):
     """
     Rolls back the most recent savepoint (if one exists). Does nothing if
     savepoints are not supported.
     """
-    if thread.get_ident() in savepoint_state:
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    connection = connections[using]
+    thread_ident = thread.get_ident()
+    if thread_ident in savepoint_state and using in savepoint_state[thread_ident]:
         connection._savepoint_rollback(sid)
 
-def savepoint_commit(sid):
+def savepoint_commit(sid, using=None):
     """
     Commits the most recent savepoint (if one exists). Does nothing if
     savepoints are not supported.
     """
-    if thread.get_ident() in savepoint_state:
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    connection = connections[using]
+    thread_ident = thread.get_ident()
+    if thread_ident in savepoint_state and using in savepoint_state[thread_ident]:
         connection._savepoint_commit(sid)
 
 ##############
 # DECORATORS #
 ##############
 
-def autocommit(func):
+def autocommit(using=None):
     """
     Decorator that activates commit on save. This is Django's default behavior;
     this decorator is useful if you globally activated transaction management in
     your settings file and want the default behavior in some view functions.
     """
-    def _autocommit(*args, **kw):
-        try:
-            enter_transaction_management(managed=False)
-            managed(False)
-            return func(*args, **kw)
-        finally:
-            leave_transaction_management()
-    return wraps(func)(_autocommit)
+    def inner_autocommit(func, db=None):
+        def _autocommit(*args, **kw):
+            try:
+                enter_transaction_management(managed=False, using=db)
+                managed(False, using=db)
+                return func(*args, **kw)
+            finally:
+                leave_transaction_management(using=db)
+        return wraps(func)(_autocommit)
 
-def commit_on_success(func):
+    # Note that although the first argument is *called* `using`, it
+    # may actually be a function; @autocommit and @autocommit('foo')
+    # are both allowed forms.
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    if callable(using):
+        return inner_autocommit(using, DEFAULT_DB_ALIAS)
+    return lambda func: inner_autocommit(func,  using)
+
+
+def commit_on_success(using=None):
     """
     This decorator activates commit on response. This way, if the view function
     runs successfully, a commit is made; if the viewfunc produces an exception,
     a rollback is made. This is one of the most common ways to do transaction
     control in web apps.
     """
-    def _commit_on_success(*args, **kw):
-        try:
-            enter_transaction_management()
-            managed(True)
+    def inner_commit_on_success(func, db=None):
+        def _commit_on_success(*args, **kw):
             try:
-                res = func(*args, **kw)
-            except:
-                # All exceptions must be handled here (even string ones).
-                if is_dirty():
-                    rollback()
-                raise
-            else:
-                if is_dirty():
-                    commit()
-            return res
-        finally:
-            leave_transaction_management()
-    return wraps(func)(_commit_on_success)
+                enter_transaction_management(using=db)
+                managed(True, using=db)
+                try:
+                    res = func(*args, **kw)
+                except:
+                    # All exceptions must be handled here (even string ones).
+                    if is_dirty(using=db):
+                        rollback(using=db)
+                    raise
+                else:
+                    if is_dirty(using=db):
+                        try:
+                            commit(using=db)
+                        except:
+                            rollback(using=db)
+                            raise
+                return res
+            finally:
+                leave_transaction_management(using=db)
+        return wraps(func)(_commit_on_success)
 
-def commit_manually(func):
+    # Note that although the first argument is *called* `using`, it
+    # may actually be a function; @autocommit and @autocommit('foo')
+    # are both allowed forms.
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    if callable(using):
+        return inner_commit_on_success(using, DEFAULT_DB_ALIAS)
+    return lambda func: inner_commit_on_success(func, using)
+
+def commit_manually(using=None):
     """
     Decorator that activates manual transaction control. It just disables
     automatic transaction control and doesn't do any commit/rollback of its
     own -- it's up to the user to call the commit and rollback functions
     themselves.
     """
-    def _commit_manually(*args, **kw):
-        try:
-            enter_transaction_management()
-            managed(True)
-            return func(*args, **kw)
-        finally:
-            leave_transaction_management()
+    def inner_commit_manually(func, db=None):
+        def _commit_manually(*args, **kw):
+            try:
+                enter_transaction_management(using=db)
+                managed(True, using=db)
+                return func(*args, **kw)
+            finally:
+                leave_transaction_management(using=db)
 
-    return wraps(func)(_commit_manually)
+        return wraps(func)(_commit_manually)
+
+    # Note that although the first argument is *called* `using`, it
+    # may actually be a function; @autocommit and @autocommit('foo')
+    # are both allowed forms.
+    if using is None:
+        using = DEFAULT_DB_ALIAS
+    if callable(using):
+        return inner_commit_manually(using, DEFAULT_DB_ALIAS)
+    return lambda func: inner_commit_manually(func, using)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/db/utils.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,161 @@
+import inspect
+import os
+
+from django.conf import settings
+from django.core.exceptions import ImproperlyConfigured
+from django.utils.importlib import import_module
+
+DEFAULT_DB_ALIAS = 'default'
+
+# Define some exceptions that mirror the PEP249 interface.
+# We will rethrow any backend-specific errors using these
+# common wrappers
+class DatabaseError(Exception):
+    pass
+
+class IntegrityError(DatabaseError):
+    pass
+
+
+def load_backend(backend_name):
+    try:
+        module = import_module('.base', 'django.db.backends.%s' % backend_name)
+        import warnings
+        warnings.warn(
+            "Short names for DATABASE_ENGINE are deprecated; prepend with 'django.db.backends.'",
+            PendingDeprecationWarning
+        )
+        return module
+    except ImportError, e:
+        # Look for a fully qualified database backend name
+        try:
+            return import_module('.base', backend_name)
+        except ImportError, e_user:
+            # The database backend wasn't found. Display a helpful error message
+            # listing all possible (built-in) database backends.
+            backend_dir = os.path.join(os.path.dirname(__file__), 'backends')
+            try:
+                available_backends = [f for f in os.listdir(backend_dir)
+                        if os.path.isdir(os.path.join(backend_dir, f))
+                        and not f.startswith('.')]
+            except EnvironmentError:
+                available_backends = []
+            available_backends.sort()
+            if backend_name not in available_backends:
+                error_msg = ("%r isn't an available database backend. \n" +
+                    "Try using django.db.backends.XXX, where XXX is one of:\n    %s\n" +
+                    "Error was: %s") % \
+                    (backend_name, ", ".join(map(repr, available_backends)), e_user)
+                raise ImproperlyConfigured(error_msg)
+            else:
+                raise # If there's some other error, this must be an error in Django itself.
+
+
+class ConnectionDoesNotExist(Exception):
+    pass
+
+
+class ConnectionHandler(object):
+    def __init__(self, databases):
+        self.databases = databases
+        self._connections = {}
+
+    def ensure_defaults(self, alias):
+        """
+        Puts the defaults into the settings dictionary for a given connection
+        where no settings is provided.
+        """
+        try:
+            conn = self.databases[alias]
+        except KeyError:
+            raise ConnectionDoesNotExist("The connection %s doesn't exist" % alias)
+
+        conn.setdefault('ENGINE', 'django.db.backends.dummy')
+        if conn['ENGINE'] == 'django.db.backends.' or not conn['ENGINE']:
+            conn['ENGINE'] = 'django.db.backends.dummy'
+        conn.setdefault('OPTIONS', {})
+        conn.setdefault('TEST_CHARSET', None)
+        conn.setdefault('TEST_COLLATION', None)
+        conn.setdefault('TEST_NAME', None)
+        conn.setdefault('TEST_MIRROR', None)
+        conn.setdefault('TIME_ZONE', settings.TIME_ZONE)
+        for setting in ('NAME', 'USER', 'PASSWORD', 'HOST', 'PORT'):
+            conn.setdefault(setting, '')
+
+    def __getitem__(self, alias):
+        if alias in self._connections:
+            return self._connections[alias]
+
+        self.ensure_defaults(alias)
+        db = self.databases[alias]
+        backend = load_backend(db['ENGINE'])
+        conn = backend.DatabaseWrapper(db, alias)
+        self._connections[alias] = conn
+        return conn
+
+    def __iter__(self):
+        return iter(self.databases)
+
+    def all(self):
+        return [self[alias] for alias in self]
+
+
+class ConnectionRouter(object):
+    def __init__(self, routers):
+        self.routers = []
+        for r in routers:
+            if isinstance(r, basestring):
+                try:
+                    module_name, klass_name = r.rsplit('.', 1)
+                    module = import_module(module_name)
+                except ImportError, e:
+                    raise ImproperlyConfigured('Error importing database router %s: "%s"' % (klass_name, e))
+                try:
+                    router = getattr(module, klass_name)()
+                except AttributeError:
+                    raise ImproperlyConfigured('Module "%s" does not define a database router name "%s"' % (module, klass_name))
+            else:
+                router = r
+            self.routers.append(router)
+
+    def _router_func(action):
+        def _route_db(self, model, **hints):
+            chosen_db = None
+            for router in self.routers:
+                try:
+                    chosen_db = getattr(router, action)(model, **hints)
+                    if chosen_db:
+                        return chosen_db
+                except AttributeError:
+                    # If the router doesn't have a method, skip to the next one.
+                    pass
+            try:
+                return hints['instance']._state.db or DEFAULT_DB_ALIAS
+            except KeyError:
+                return DEFAULT_DB_ALIAS
+        return _route_db
+
+    db_for_read = _router_func('db_for_read')
+    db_for_write = _router_func('db_for_write')
+
+    def allow_relation(self, obj1, obj2, **hints):
+        for router in self.routers:
+            try:
+                allow = router.allow_relation(obj1, obj2, **hints)
+                if allow is not None:
+                    return allow
+            except AttributeError:
+                # If the router doesn't have a method, skip to the next one.
+                pass
+        return obj1._state.db == obj2._state.db
+
+    def allow_syncdb(self, db, model):
+        for router in self.routers:
+            try:
+                allow = router.allow_syncdb(db, model)
+                if allow is not None:
+                    return allow
+            except AttributeError:
+                # If the router doesn't have a method, skip to the next one.
+                pass
+        return True
--- a/web/lib/django/dispatch/dispatcher.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/dispatch/dispatcher.py	Tue May 25 02:43:45 2010 +0200
@@ -1,8 +1,4 @@
 import weakref
-try:
-    set
-except NameError:
-    from sets import Set as set # Python 2.3 fallback
 
 from django.dispatch import saferef
 
--- a/web/lib/django/forms/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/forms/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -10,7 +10,7 @@
     "This form field requires foo.js" and form.js_includes()
 """
 
-from util import ValidationError
+from django.core.exceptions import ValidationError
 from widgets import *
 from fields import *
 from forms import *
--- a/web/lib/django/forms/extras/widgets.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/forms/extras/widgets.py	Tue May 25 02:43:45 2010 +0200
@@ -2,12 +2,15 @@
 Extra HTML Widget classes
 """
 
+import time
 import datetime
 import re
 
 from django.forms.widgets import Widget, Select
 from django.utils.dates import MONTHS
 from django.utils.safestring import mark_safe
+from django.utils.formats import get_format
+from django.conf import settings
 
 __all__ = ('SelectDateWidget',)
 
@@ -41,42 +44,42 @@
         except AttributeError:
             year_val = month_val = day_val = None
             if isinstance(value, basestring):
-                match = RE_DATE.match(value)
-                if match:
-                    year_val, month_val, day_val = [int(v) for v in match.groups()]
-
-        output = []
-
-        if 'id' in self.attrs:
-            id_ = self.attrs['id']
-        else:
-            id_ = 'id_%s' % name
+                if settings.USE_L10N:
+                    try:
+                        input_format = get_format('DATE_INPUT_FORMATS')[0]
+                        # Python 2.4 compatibility:
+                        #     v = datetime.datetime.strptime(value, input_format)
+                        # would be clearer, but datetime.strptime was added in 
+                        # Python 2.5
+                        v = datetime.datetime(*(time.strptime(value, input_format)[0:6]))
+                        year_val, month_val, day_val = v.year, v.month, v.day
+                    except ValueError:
+                        pass
+                else:
+                    match = RE_DATE.match(value)
+                    if match:
+                        year_val, month_val, day_val = [int(v) for v in match.groups()]
+        choices = [(i, i) for i in self.years]
+        year_html = self.create_select(name, self.year_field, value, year_val, choices)
+        choices = MONTHS.items()
+        month_html = self.create_select(name, self.month_field, value, month_val, choices)
+        choices = [(i, i) for i in range(1, 32)]
+        day_html = self.create_select(name, self.day_field, value, day_val,  choices)
 
-        month_choices = MONTHS.items()
-        if not (self.required and value):
-            month_choices.append(self.none_value)
-        month_choices.sort()
-        local_attrs = self.build_attrs(id=self.month_field % id_)
-        s = Select(choices=month_choices)
-        select_html = s.render(self.month_field % name, month_val, local_attrs)
-        output.append(select_html)
-
-        day_choices = [(i, i) for i in range(1, 32)]
-        if not (self.required and value):
-            day_choices.insert(0, self.none_value)
-        local_attrs['id'] = self.day_field % id_
-        s = Select(choices=day_choices)
-        select_html = s.render(self.day_field % name, day_val, local_attrs)
-        output.append(select_html)
-
-        year_choices = [(i, i) for i in self.years]
-        if not (self.required and value):
-            year_choices.insert(0, self.none_value)
-        local_attrs['id'] = self.year_field % id_
-        s = Select(choices=year_choices)
-        select_html = s.render(self.year_field % name, year_val, local_attrs)
-        output.append(select_html)
-
+        format = get_format('DATE_FORMAT')
+        escaped = False
+        output = []
+        for char in format:
+            if escaped:
+                escaped = False
+            elif char == '\\':
+                escaped = True
+            elif char in 'Yy':
+                output.append(year_html)
+            elif char in 'bFMmNn':
+                output.append(month_html)
+            elif char in 'dj':
+                output.append(day_html)
         return mark_safe(u'\n'.join(output))
 
     def id_for_label(self, id_):
@@ -90,5 +93,27 @@
         if y == m == d == "0":
             return None
         if y and m and d:
-            return '%s-%s-%s' % (y, m, d)
+            if settings.USE_L10N:
+                input_format = get_format('DATE_INPUT_FORMATS')[0]
+                try:
+                    date_value = datetime.date(int(y), int(m), int(d))
+                except ValueError:
+                    pass
+                else:
+                    return date_value.strftime(input_format)
+            else:
+                return '%s-%s-%s' % (y, m, d)
         return data.get(name, None)
+
+    def create_select(self, name, field, value, val, choices):
+        if 'id' in self.attrs:
+            id_ = self.attrs['id']
+        else:
+            id_ = 'id_%s' % name
+        if not (self.required and val):
+            choices.insert(0, self.none_value)
+        local_attrs = self.build_attrs(id=field % id_)
+        s = Select(choices=choices)
+        select_html = s.render(field % name, val, local_attrs)
+        return select_html
+
--- a/web/lib/django/forms/fields.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/forms/fields.py	Tue May 25 02:43:45 2010 +0200
@@ -2,33 +2,33 @@
 Field classes.
 """
 
-import copy
 import datetime
 import os
 import re
 import time
 import urlparse
+import warnings
+from decimal import Decimal, DecimalException
 try:
     from cStringIO import StringIO
 except ImportError:
     from StringIO import StringIO
 
-# Python 2.3 fallbacks
-try:
-    from decimal import Decimal, DecimalException
-except ImportError:
-    from django.utils._decimal import Decimal, DecimalException
-try:
-    set
-except NameError:
-    from sets import Set as set
-
-import django.core.exceptions
+from django.core.exceptions import ValidationError
+from django.core import validators
+import django.utils.copycompat as copy
+from django.utils import formats
 from django.utils.translation import ugettext_lazy as _
 from django.utils.encoding import smart_unicode, smart_str
+from django.utils.functional import lazy
 
-from util import ErrorList, ValidationError
-from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, DateInput, DateTimeInput, TimeInput, SplitDateTimeWidget, SplitHiddenDateTimeWidget
+# Provide this import for backwards compatibility.
+from django.core.validators import EMPTY_VALUES
+
+from util import ErrorList
+from widgets import TextInput, PasswordInput, HiddenInput, MultipleHiddenInput, \
+        FileInput, CheckboxInput, Select, NullBooleanSelect, SelectMultiple, \
+        DateInput, DateTimeInput, TimeInput, SplitDateTimeWidget, SplitHiddenDateTimeWidget
 
 __all__ = (
     'Field', 'CharField', 'IntegerField',
@@ -42,13 +42,25 @@
     'TypedChoiceField'
 )
 
-# These values, if given to to_python(), will trigger the self.required check.
-EMPTY_VALUES = (None, '')
+def en_format(name):
+    """
+    Helper function to stay backward compatible.
+    """
+    from django.conf.locale.en import formats
+    warnings.warn(
+        "`django.forms.fields.DEFAULT_%s` is deprecated; use `django.utils.formats.get_format('%s')` instead." % (name, name),
+        PendingDeprecationWarning
+    )
+    return getattr(formats, name)
 
+DEFAULT_DATE_INPUT_FORMATS = lazy(lambda: en_format('DATE_INPUT_FORMATS'), tuple, list)()
+DEFAULT_TIME_INPUT_FORMATS = lazy(lambda: en_format('TIME_INPUT_FORMATS'), tuple, list)()
+DEFAULT_DATETIME_INPUT_FORMATS = lazy(lambda: en_format('DATETIME_INPUT_FORMATS'), tuple, list)()
 
 class Field(object):
     widget = TextInput # Default widget to use when rendering this type of Field.
     hidden_widget = HiddenInput # Default widget to use when rendering this as "hidden".
+    default_validators = [] # Default set of validators
     default_error_messages = {
         'required': _(u'This field is required.'),
         'invalid': _(u'Enter a valid value.'),
@@ -58,7 +70,8 @@
     creation_counter = 0
 
     def __init__(self, required=True, widget=None, label=None, initial=None,
-                 help_text=None, error_messages=None, show_hidden_initial=False):
+                 help_text=None, error_messages=None, show_hidden_initial=False,
+                 validators=[], localize=False):
         # required -- Boolean that specifies whether the field is required.
         #             True by default.
         # widget -- A Widget class, or instance of a Widget class, that should
@@ -72,8 +85,12 @@
         # initial -- A value to use in this Field's initial display. This value
         #            is *not* used as a fallback if data isn't given.
         # help_text -- An optional string to use as "help text" for this Field.
+        # error_messages -- An optional dictionary to override the default
+        #                   messages that the field will raise.
         # show_hidden_initial -- Boolean that specifies if it is needed to render a
         #                        hidden widget with initial value after widget.
+        # validators -- List of addtional validators to use
+        # localize -- Boolean that specifies if the field should be localized.
         if label is not None:
             label = smart_unicode(label)
         self.required, self.label, self.initial = required, label, initial
@@ -86,6 +103,9 @@
         if isinstance(widget, type):
             widget = widget()
 
+        # Trigger the localization machinery if needed.
+        self.localize = localize
+
         # Hook into self.widget_attrs() for any Field-specific HTML attributes.
         extra_attrs = self.widget_attrs(widget)
         if extra_attrs:
@@ -97,16 +117,42 @@
         self.creation_counter = Field.creation_counter
         Field.creation_counter += 1
 
-        def set_class_error_messages(messages, klass):
-            for base_class in klass.__bases__:
-                set_class_error_messages(messages, base_class)
-            messages.update(getattr(klass, 'default_error_messages', {}))
-
         messages = {}
-        set_class_error_messages(messages, self.__class__)
+        for c in reversed(self.__class__.__mro__):
+            messages.update(getattr(c, 'default_error_messages', {}))
         messages.update(error_messages or {})
         self.error_messages = messages
 
+        self.validators = self.default_validators + validators
+
+    def localize_value(self, value):
+        return formats.localize_input(value)
+
+    def to_python(self, value):
+        return value
+
+    def validate(self, value):
+        if value in validators.EMPTY_VALUES and self.required:
+            raise ValidationError(self.error_messages['required'])
+
+    def run_validators(self, value):
+        if value in validators.EMPTY_VALUES:
+            return
+        errors = []
+        for v in self.validators:
+            try:
+                v(value)
+            except ValidationError, e:
+                if hasattr(e, 'code') and e.code in self.error_messages:
+                    message = self.error_messages[e.code]
+                    if e.params:
+                        message = message % e.params
+                    errors.append(message)
+                else:
+                    errors.extend(e.messages)
+        if errors:
+            raise ValidationError(errors)
+
     def clean(self, value):
         """
         Validates the given value and returns its "cleaned" value as an
@@ -114,8 +160,9 @@
 
         Raises ValidationError for any errors.
         """
-        if self.required and value in EMPTY_VALUES:
-            raise ValidationError(self.error_messages['required'])
+        value = self.to_python(value)
+        self.validate(value)
+        self.run_validators(value)
         return value
 
     def widget_attrs(self, widget):
@@ -133,27 +180,19 @@
         return result
 
 class CharField(Field):
-    default_error_messages = {
-        'max_length': _(u'Ensure this value has at most %(max)d characters (it has %(length)d).'),
-        'min_length': _(u'Ensure this value has at least %(min)d characters (it has %(length)d).'),
-    }
-
     def __init__(self, max_length=None, min_length=None, *args, **kwargs):
         self.max_length, self.min_length = max_length, min_length
         super(CharField, self).__init__(*args, **kwargs)
+        if min_length is not None:
+            self.validators.append(validators.MinLengthValidator(min_length))
+        if max_length is not None:
+            self.validators.append(validators.MaxLengthValidator(max_length))
 
-    def clean(self, value):
-        "Validates max_length and min_length. Returns a Unicode object."
-        super(CharField, self).clean(value)
-        if value in EMPTY_VALUES:
+    def to_python(self, value):
+        "Returns a Unicode object."
+        if value in validators.EMPTY_VALUES:
             return u''
-        value = smart_unicode(value)
-        value_length = len(value)
-        if self.max_length is not None and value_length > self.max_length:
-            raise ValidationError(self.error_messages['max_length'] % {'max': self.max_length, 'length': value_length})
-        if self.min_length is not None and value_length < self.min_length:
-            raise ValidationError(self.error_messages['min_length'] % {'min': self.min_length, 'length': value_length})
-        return value
+        return smart_unicode(value)
 
     def widget_attrs(self, widget):
         if self.max_length is not None and isinstance(widget, (TextInput, PasswordInput)):
@@ -163,92 +202,101 @@
 class IntegerField(Field):
     default_error_messages = {
         'invalid': _(u'Enter a whole number.'),
-        'max_value': _(u'Ensure this value is less than or equal to %s.'),
-        'min_value': _(u'Ensure this value is greater than or equal to %s.'),
+        'max_value': _(u'Ensure this value is less than or equal to %(limit_value)s.'),
+        'min_value': _(u'Ensure this value is greater than or equal to %(limit_value)s.'),
     }
 
     def __init__(self, max_value=None, min_value=None, *args, **kwargs):
-        self.max_value, self.min_value = max_value, min_value
         super(IntegerField, self).__init__(*args, **kwargs)
 
-    def clean(self, value):
+        if max_value is not None:
+            self.validators.append(validators.MaxValueValidator(max_value))
+        if min_value is not None:
+            self.validators.append(validators.MinValueValidator(min_value))
+
+    def to_python(self, value):
         """
         Validates that int() can be called on the input. Returns the result
         of int(). Returns None for empty values.
         """
-        super(IntegerField, self).clean(value)
-        if value in EMPTY_VALUES:
+        value = super(IntegerField, self).to_python(value)
+        if value in validators.EMPTY_VALUES:
             return None
+        if self.localize:
+            value = formats.sanitize_separators(value)
         try:
             value = int(str(value))
         except (ValueError, TypeError):
             raise ValidationError(self.error_messages['invalid'])
-        if self.max_value is not None and value > self.max_value:
-            raise ValidationError(self.error_messages['max_value'] % self.max_value)
-        if self.min_value is not None and value < self.min_value:
-            raise ValidationError(self.error_messages['min_value'] % self.min_value)
         return value
 
-class FloatField(Field):
+class FloatField(IntegerField):
     default_error_messages = {
         'invalid': _(u'Enter a number.'),
-        'max_value': _(u'Ensure this value is less than or equal to %s.'),
-        'min_value': _(u'Ensure this value is greater than or equal to %s.'),
     }
 
-    def __init__(self, max_value=None, min_value=None, *args, **kwargs):
-        self.max_value, self.min_value = max_value, min_value
-        Field.__init__(self, *args, **kwargs)
-
-    def clean(self, value):
+    def to_python(self, value):
+        """
+        Validates that float() can be called on the input. Returns the result
+        of float(). Returns None for empty values.
         """
-        Validates that float() can be called on the input. Returns a float.
-        Returns None for empty values.
-        """
-        super(FloatField, self).clean(value)
-        if not self.required and value in EMPTY_VALUES:
+        value = super(IntegerField, self).to_python(value)
+        if value in validators.EMPTY_VALUES:
             return None
+        if self.localize:
+            value = formats.sanitize_separators(value)
         try:
             value = float(value)
         except (ValueError, TypeError):
             raise ValidationError(self.error_messages['invalid'])
-        if self.max_value is not None and value > self.max_value:
-            raise ValidationError(self.error_messages['max_value'] % self.max_value)
-        if self.min_value is not None and value < self.min_value:
-            raise ValidationError(self.error_messages['min_value'] % self.min_value)
         return value
 
 class DecimalField(Field):
     default_error_messages = {
         'invalid': _(u'Enter a number.'),
-        'max_value': _(u'Ensure this value is less than or equal to %s.'),
-        'min_value': _(u'Ensure this value is greater than or equal to %s.'),
+        'max_value': _(u'Ensure this value is less than or equal to %(limit_value)s.'),
+        'min_value': _(u'Ensure this value is greater than or equal to %(limit_value)s.'),
         'max_digits': _('Ensure that there are no more than %s digits in total.'),
         'max_decimal_places': _('Ensure that there are no more than %s decimal places.'),
         'max_whole_digits': _('Ensure that there are no more than %s digits before the decimal point.')
     }
 
     def __init__(self, max_value=None, min_value=None, max_digits=None, decimal_places=None, *args, **kwargs):
-        self.max_value, self.min_value = max_value, min_value
         self.max_digits, self.decimal_places = max_digits, decimal_places
         Field.__init__(self, *args, **kwargs)
 
-    def clean(self, value):
+        if max_value is not None:
+            self.validators.append(validators.MaxValueValidator(max_value))
+        if min_value is not None:
+            self.validators.append(validators.MinValueValidator(min_value))
+
+    def to_python(self, value):
         """
         Validates that the input is a decimal number. Returns a Decimal
         instance. Returns None for empty values. Ensures that there are no more
         than max_digits in the number, and no more than decimal_places digits
         after the decimal point.
         """
-        super(DecimalField, self).clean(value)
-        if not self.required and value in EMPTY_VALUES:
+        if value in validators.EMPTY_VALUES:
             return None
+        if self.localize:
+            value = formats.sanitize_separators(value)
         value = smart_str(value).strip()
         try:
             value = Decimal(value)
         except DecimalException:
             raise ValidationError(self.error_messages['invalid'])
+        return value
 
+    def validate(self, value):
+        super(DecimalField, self).validate(value)
+        if value in validators.EMPTY_VALUES:
+            return
+        # Check for NaN, Inf and -Inf values. We can't compare directly for NaN,
+        # since it is never equal to itself. However, NaN is the only value that
+        # isn't equal to itself, so we can use this to identify NaN
+        if value != value or value == Decimal("Inf") or value == Decimal("-Inf"):
+            raise ValidationError(self.error_messages['invalid'])
         sign, digittuple, exponent = value.as_tuple()
         decimals = abs(exponent)
         # digittuple doesn't include any leading zeros.
@@ -261,10 +309,6 @@
             digits = decimals
         whole_digits = digits - decimals
 
-        if self.max_value is not None and value > self.max_value:
-            raise ValidationError(self.error_messages['max_value'] % self.max_value)
-        if self.min_value is not None and value < self.min_value:
-            raise ValidationError(self.error_messages['min_value'] % self.min_value)
         if self.max_digits is not None and digits > self.max_digits:
             raise ValidationError(self.error_messages['max_digits'] % self.max_digits)
         if self.decimal_places is not None and decimals > self.decimal_places:
@@ -273,14 +317,6 @@
             raise ValidationError(self.error_messages['max_whole_digits'] % (self.max_digits - self.decimal_places))
         return value
 
-DEFAULT_DATE_INPUT_FORMATS = (
-    '%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
-    '%b %d %Y', '%b %d, %Y',            # 'Oct 25 2006', 'Oct 25, 2006'
-    '%d %b %Y', '%d %b, %Y',            # '25 Oct 2006', '25 Oct, 2006'
-    '%B %d %Y', '%B %d, %Y',            # 'October 25 2006', 'October 25, 2006'
-    '%d %B %Y', '%d %B, %Y',            # '25 October 2006', '25 October, 2006'
-)
-
 class DateField(Field):
     widget = DateInput
     default_error_messages = {
@@ -289,32 +325,26 @@
 
     def __init__(self, input_formats=None, *args, **kwargs):
         super(DateField, self).__init__(*args, **kwargs)
-        self.input_formats = input_formats or DEFAULT_DATE_INPUT_FORMATS
+        self.input_formats = input_formats
 
-    def clean(self, value):
+    def to_python(self, value):
         """
         Validates that the input can be converted to a date. Returns a Python
         datetime.date object.
         """
-        super(DateField, self).clean(value)
-        if value in EMPTY_VALUES:
+        if value in validators.EMPTY_VALUES:
             return None
         if isinstance(value, datetime.datetime):
             return value.date()
         if isinstance(value, datetime.date):
             return value
-        for format in self.input_formats:
+        for format in self.input_formats or formats.get_format('DATE_INPUT_FORMATS'):
             try:
                 return datetime.date(*time.strptime(value, format)[:3])
             except ValueError:
                 continue
         raise ValidationError(self.error_messages['invalid'])
 
-DEFAULT_TIME_INPUT_FORMATS = (
-    '%H:%M:%S',     # '14:30:59'
-    '%H:%M',        # '14:30'
-)
-
 class TimeField(Field):
     widget = TimeInput
     default_error_messages = {
@@ -323,37 +353,24 @@
 
     def __init__(self, input_formats=None, *args, **kwargs):
         super(TimeField, self).__init__(*args, **kwargs)
-        self.input_formats = input_formats or DEFAULT_TIME_INPUT_FORMATS
+        self.input_formats = input_formats
 
-    def clean(self, value):
+    def to_python(self, value):
         """
         Validates that the input can be converted to a time. Returns a Python
         datetime.time object.
         """
-        super(TimeField, self).clean(value)
-        if value in EMPTY_VALUES:
+        if value in validators.EMPTY_VALUES:
             return None
         if isinstance(value, datetime.time):
             return value
-        for format in self.input_formats:
+        for format in self.input_formats or formats.get_format('TIME_INPUT_FORMATS'):
             try:
                 return datetime.time(*time.strptime(value, format)[3:6])
             except ValueError:
                 continue
         raise ValidationError(self.error_messages['invalid'])
 
-DEFAULT_DATETIME_INPUT_FORMATS = (
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%Y-%m-%d',              # '2006-10-25'
-    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
-    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
-    '%m/%d/%Y',              # '10/25/2006'
-    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
-    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
-    '%m/%d/%y',              # '10/25/06'
-)
-
 class DateTimeField(Field):
     widget = DateTimeInput
     default_error_messages = {
@@ -362,15 +379,14 @@
 
     def __init__(self, input_formats=None, *args, **kwargs):
         super(DateTimeField, self).__init__(*args, **kwargs)
-        self.input_formats = input_formats or DEFAULT_DATETIME_INPUT_FORMATS
+        self.input_formats = input_formats
 
-    def clean(self, value):
+    def to_python(self, value):
         """
         Validates that the input can be converted to a datetime. Returns a
         Python datetime.datetime object.
         """
-        super(DateTimeField, self).clean(value)
-        if value in EMPTY_VALUES:
+        if value in validators.EMPTY_VALUES:
             return None
         if isinstance(value, datetime.datetime):
             return value
@@ -382,7 +398,7 @@
             if len(value) != 2:
                 raise ValidationError(self.error_messages['invalid'])
             value = '%s %s' % tuple(value)
-        for format in self.input_formats:
+        for format in self.input_formats or formats.get_format('DATETIME_INPUT_FORMATS'):
             try:
                 return datetime.datetime(*time.strptime(value, format)[:6])
             except ValueError:
@@ -405,40 +421,13 @@
         if isinstance(regex, basestring):
             regex = re.compile(regex)
         self.regex = regex
+        self.validators.append(validators.RegexValidator(regex=regex))
 
-    def clean(self, value):
-        """
-        Validates that the input matches the regular expression. Returns a
-        Unicode object.
-        """
-        value = super(RegexField, self).clean(value)
-        if value == u'':
-            return value
-        if not self.regex.search(value):
-            raise ValidationError(self.error_messages['invalid'])
-        return value
-
-email_re = re.compile(
-    r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*"  # dot-atom
-    r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string
-    r')@(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?$', re.IGNORECASE)  # domain
-
-class EmailField(RegexField):
+class EmailField(CharField):
     default_error_messages = {
         'invalid': _(u'Enter a valid e-mail address.'),
     }
-
-    def __init__(self, max_length=None, min_length=None, *args, **kwargs):
-        RegexField.__init__(self, email_re, max_length, min_length, *args,
-                            **kwargs)
-
-try:
-    from django.conf import settings
-    URL_VALIDATOR_USER_AGENT = settings.URL_VALIDATOR_USER_AGENT
-except ImportError:
-    # It's OK if Django settings aren't configured.
-    URL_VALIDATOR_USER_AGENT = 'Django (http://www.djangoproject.com/)'
-
+    default_validators = [validators.validate_email]
 
 class FileField(Field):
     widget = FileInput
@@ -453,12 +442,9 @@
         self.max_length = kwargs.pop('max_length', None)
         super(FileField, self).__init__(*args, **kwargs)
 
-    def clean(self, data, initial=None):
-        super(FileField, self).clean(initial or data)
-        if not self.required and data in EMPTY_VALUES:
+    def to_python(self, data):
+        if data in validators.EMPTY_VALUES:
             return None
-        elif not data and initial:
-            return initial
 
         # UploadedFile objects should have name and size attributes.
         try:
@@ -477,22 +463,30 @@
 
         return data
 
+    def clean(self, data, initial=None):
+        if not data and initial:
+            return initial
+        return super(FileField, self).clean(data)
+
 class ImageField(FileField):
     default_error_messages = {
         'invalid_image': _(u"Upload a valid image. The file you uploaded was either not an image or a corrupted image."),
     }
 
-    def clean(self, data, initial=None):
+    def to_python(self, data):
         """
         Checks that the file-upload field data contains a valid image (GIF, JPG,
         PNG, possibly others -- whatever the Python Imaging Library supports).
         """
-        f = super(ImageField, self).clean(data, initial)
+        f = super(ImageField, self).to_python(data)
         if f is None:
             return None
-        elif not data and initial:
-            return initial
-        from PIL import Image
+
+        # Try to import PIL in either of the two ways it can end up installed.
+        try:
+            from PIL import Image
+        except ImportError:
+            import Image
 
         # We need to get a file object for PIL. We might have a path or we might
         # have to read the data into memory.
@@ -530,59 +524,34 @@
             f.seek(0)
         return f
 
-url_re = re.compile(
-    r'^https?://' # http:// or https://
-    r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' #domain...
-    r'localhost|' #localhost...
-    r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
-    r'(?::\d+)?' # optional port
-    r'(?:/?|/\S+)$', re.IGNORECASE)
-
-class URLField(RegexField):
+class URLField(CharField):
     default_error_messages = {
         'invalid': _(u'Enter a valid URL.'),
         'invalid_link': _(u'This URL appears to be a broken link.'),
     }
 
     def __init__(self, max_length=None, min_length=None, verify_exists=False,
-            validator_user_agent=URL_VALIDATOR_USER_AGENT, *args, **kwargs):
-        super(URLField, self).__init__(url_re, max_length, min_length, *args,
+            validator_user_agent=validators.URL_VALIDATOR_USER_AGENT, *args, **kwargs):
+        super(URLField, self).__init__(max_length, min_length, *args,
                                        **kwargs)
-        self.verify_exists = verify_exists
-        self.user_agent = validator_user_agent
+        self.validators.append(validators.URLValidator(verify_exists=verify_exists, validator_user_agent=validator_user_agent))
 
-    def clean(self, value):
-        # If no URL scheme given, assume http://
-        if value and '://' not in value:
-            value = u'http://%s' % value
-        # If no URL path given, assume /
-        if value and not urlparse.urlsplit(value)[2]:
-            value += '/'
-        value = super(URLField, self).clean(value)
-        if value == u'':
-            return value
-        if self.verify_exists:
-            import urllib2
-            headers = {
-                "Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5",
-                "Accept-Language": "en-us,en;q=0.5",
-                "Accept-Charset": "ISO-8859-1,utf-8;q=0.7,*;q=0.7",
-                "Connection": "close",
-                "User-Agent": self.user_agent,
-            }
-            try:
-                req = urllib2.Request(value, None, headers)
-                u = urllib2.urlopen(req)
-            except ValueError:
-                raise ValidationError(self.error_messages['invalid'])
-            except: # urllib2.URLError, httplib.InvalidURL, etc.
-                raise ValidationError(self.error_messages['invalid_link'])
-        return value
+    def to_python(self, value):
+        if value:
+            if '://' not in value:
+                # If no URL scheme given, assume http://
+                value = u'http://%s' % value
+            url_fields = list(urlparse.urlsplit(value))
+            if not url_fields[2]:
+                # the path portion may need to be added before query params
+                url_fields[2] = '/'
+                value = urlparse.urlunsplit(url_fields)
+        return super(URLField, self).to_python(value)
 
 class BooleanField(Field):
     widget = CheckboxInput
 
-    def clean(self, value):
+    def to_python(self, value):
         """Returns a Python boolean object."""
         # Explicitly check for the string 'False', which is what a hidden field
         # will submit for False. Also check for '0', since this is what
@@ -592,7 +561,7 @@
             value = False
         else:
             value = bool(value)
-        super(BooleanField, self).clean(value)
+        value = super(BooleanField, self).to_python(value)
         if not value and self.required:
             raise ValidationError(self.error_messages['required'])
         return value
@@ -604,7 +573,7 @@
     """
     widget = NullBooleanSelect
 
-    def clean(self, value):
+    def to_python(self, value):
         """
         Explicitly checks for the string 'True' and 'False', which is what a
         hidden field will submit for True and False, and for '1' and '0', which
@@ -618,6 +587,9 @@
         else:
             return None
 
+    def validate(self, value):
+        pass
+
 class ChoiceField(Field):
     widget = Select
     default_error_messages = {
@@ -626,8 +598,8 @@
 
     def __init__(self, choices=(), required=True, widget=None, label=None,
                  initial=None, help_text=None, *args, **kwargs):
-        super(ChoiceField, self).__init__(required, widget, label, initial,
-                                          help_text, *args, **kwargs)
+        super(ChoiceField, self).__init__(required=required, widget=widget, label=label,
+                                        initial=initial, help_text=help_text, *args, **kwargs)
         self.choices = choices
 
     def _get_choices(self):
@@ -641,24 +613,24 @@
 
     choices = property(_get_choices, _set_choices)
 
-    def clean(self, value):
+    def to_python(self, value):
+        "Returns a Unicode object."
+        if value in validators.EMPTY_VALUES:
+            return u''
+        return smart_unicode(value)
+
+    def validate(self, value):
         """
         Validates that the input is in self.choices.
         """
-        value = super(ChoiceField, self).clean(value)
-        if value in EMPTY_VALUES:
-            value = u''
-        value = smart_unicode(value)
-        if value == u'':
-            return value
-        if not self.valid_value(value):
+        super(ChoiceField, self).validate(value)
+        if value and not self.valid_value(value):
             raise ValidationError(self.error_messages['invalid_choice'] % {'value': value})
-        return value
 
     def valid_value(self, value):
         "Check to see if the provided value is a valid choice"
         for k, v in self.choices:
-            if type(v) in (tuple, list):
+            if isinstance(v, (list, tuple)):
                 # This is an optgroup, so look inside the group for options
                 for k2, v2 in v:
                     if value == smart_unicode(k2):
@@ -674,27 +646,24 @@
         self.empty_value = kwargs.pop('empty_value', '')
         super(TypedChoiceField, self).__init__(*args, **kwargs)
 
-    def clean(self, value):
+    def to_python(self, value):
         """
         Validate that the value is in self.choices and can be coerced to the
         right type.
         """
-        value = super(TypedChoiceField, self).clean(value)
-        if value == self.empty_value or value in EMPTY_VALUES:
+        value = super(TypedChoiceField, self).to_python(value)
+        super(TypedChoiceField, self).validate(value)
+        if value == self.empty_value or value in validators.EMPTY_VALUES:
             return self.empty_value
-
-        # Hack alert: This field is purpose-made to use with Field.to_python as
-        # a coercion function so that ModelForms with choices work. However,
-        # Django's Field.to_python raises
-        # django.core.exceptions.ValidationError, which is a *different*
-        # exception than django.forms.util.ValidationError. So we need to catch
-        # both.
         try:
             value = self.coerce(value)
-        except (ValueError, TypeError, django.core.exceptions.ValidationError):
+        except (ValueError, TypeError, ValidationError):
             raise ValidationError(self.error_messages['invalid_choice'] % {'value': value})
         return value
 
+    def validate(self, value):
+        pass
+
 class MultipleChoiceField(ChoiceField):
     hidden_widget = MultipleHiddenInput
     widget = SelectMultiple
@@ -703,22 +672,23 @@
         'invalid_list': _(u'Enter a list of values.'),
     }
 
-    def clean(self, value):
+    def to_python(self, value):
+        if not value:
+            return []
+        elif not isinstance(value, (list, tuple)):
+            raise ValidationError(self.error_messages['invalid_list'])
+        return [smart_unicode(val) for val in value]
+
+    def validate(self, value):
         """
         Validates that the input is a list or tuple.
         """
         if self.required and not value:
             raise ValidationError(self.error_messages['required'])
-        elif not self.required and not value:
-            return []
-        if not isinstance(value, (list, tuple)):
-            raise ValidationError(self.error_messages['invalid_list'])
-        new_value = [smart_unicode(val) for val in value]
         # Validate that each value in the value list is in self.choices.
-        for val in new_value:
+        for val in value:
             if not self.valid_value(val):
                 raise ValidationError(self.error_messages['invalid_choice'] % {'value': val})
-        return new_value
 
 class ComboField(Field):
     """
@@ -773,6 +743,9 @@
             f.required = False
         self.fields = fields
 
+    def validate(self, value):
+        pass
+
     def clean(self, value):
         """
         Validates every value in the given list. A value is validated against
@@ -785,7 +758,7 @@
         clean_data = []
         errors = ErrorList()
         if not value or isinstance(value, (list, tuple)):
-            if not value or not [v for v in value if v not in EMPTY_VALUES]:
+            if not value or not [v for v in value if v not in validators.EMPTY_VALUES]:
                 if self.required:
                     raise ValidationError(self.error_messages['required'])
                 else:
@@ -797,7 +770,7 @@
                 field_value = value[i]
             except IndexError:
                 field_value = None
-            if self.required and field_value in EMPTY_VALUES:
+            if self.required and field_value in validators.EMPTY_VALUES:
                 raise ValidationError(self.error_messages['required'])
             try:
                 clean_data.append(field.clean(field_value))
@@ -808,7 +781,10 @@
                 errors.extend(e.messages)
         if errors:
             raise ValidationError(errors)
-        return self.compress(clean_data)
+
+        out = self.compress(clean_data)
+        self.validate(out)
+        return out
 
     def compress(self, data_list):
         """
@@ -877,30 +853,24 @@
         if data_list:
             # Raise a validation error if time or date is empty
             # (possible if SplitDateTimeField has required=False).
-            if data_list[0] in EMPTY_VALUES:
+            if data_list[0] in validators.EMPTY_VALUES:
                 raise ValidationError(self.error_messages['invalid_date'])
-            if data_list[1] in EMPTY_VALUES:
+            if data_list[1] in validators.EMPTY_VALUES:
                 raise ValidationError(self.error_messages['invalid_time'])
             return datetime.datetime.combine(*data_list)
         return None
 
-ipv4_re = re.compile(r'^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$')
 
-class IPAddressField(RegexField):
+class IPAddressField(CharField):
     default_error_messages = {
         'invalid': _(u'Enter a valid IPv4 address.'),
     }
-
-    def __init__(self, *args, **kwargs):
-        super(IPAddressField, self).__init__(ipv4_re, *args, **kwargs)
+    default_validators = [validators.validate_ipv4_address]
 
-slug_re = re.compile(r'^[-\w]+$')
 
-class SlugField(RegexField):
+class SlugField(CharField):
     default_error_messages = {
         'invalid': _(u"Enter a valid 'slug' consisting of letters, numbers,"
                      u" underscores or hyphens."),
     }
-
-    def __init__(self, *args, **kwargs):
-        super(SlugField, self).__init__(slug_re, *args, **kwargs)
+    default_validators = [validators.validate_slug]
--- a/web/lib/django/forms/forms.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/forms/forms.py	Tue May 25 02:43:45 2010 +0200
@@ -2,8 +2,8 @@
 Form classes
 """
 
-from copy import deepcopy
-
+from django.core.exceptions import ValidationError
+from django.utils.copycompat import deepcopy
 from django.utils.datastructures import SortedDict
 from django.utils.html import conditional_escape
 from django.utils.encoding import StrAndUnicode, smart_unicode, force_unicode
@@ -11,16 +11,17 @@
 
 from fields import Field, FileField
 from widgets import Media, media_property, TextInput, Textarea
-from util import flatatt, ErrorDict, ErrorList, ValidationError
+from util import flatatt, ErrorDict, ErrorList
 
 __all__ = ('BaseForm', 'Form')
 
 NON_FIELD_ERRORS = '__all__'
 
 def pretty_name(name):
-    "Converts 'first_name' to 'First name'"
-    name = name[0].upper() + name[1:]
-    return name.replace('_', ' ')
+    """Converts 'first_name' to 'First name'""" 
+    if not name: 
+        return u'' 
+    return name.replace('_', ' ').capitalize() 
 
 def get_declared_fields(bases, attrs, with_base_fields=True):
     """
@@ -138,7 +139,9 @@
         "Helper function for outputting HTML. Used by as_table(), as_ul(), as_p()."
         top_errors = self.non_field_errors() # Errors that should be displayed above all fields.
         output, hidden_fields = [], []
+
         for name, field in self.fields.items():
+            html_class_attr = ''
             bf = BoundField(self, field, name)
             bf_errors = self.error_class([conditional_escape(error) for error in bf.errors]) # Escape and cache in local variable.
             if bf.is_hidden:
@@ -146,8 +149,15 @@
                     top_errors.extend([u'(Hidden field %s) %s' % (name, force_unicode(e)) for e in bf_errors])
                 hidden_fields.append(unicode(bf))
             else:
+                # Create a 'class="..."' atribute if the row should have any
+                # CSS classes applied.
+                css_classes = bf.css_classes()
+                if css_classes:
+                    html_class_attr = ' class="%s"' % css_classes
+
                 if errors_on_separate_row and bf_errors:
                     output.append(error_row % force_unicode(bf_errors))
+
                 if bf.label:
                     label = conditional_escape(force_unicode(bf.label))
                     # Only add the suffix if the label does not end in
@@ -158,13 +168,23 @@
                     label = bf.label_tag(label) or ''
                 else:
                     label = ''
+
                 if field.help_text:
                     help_text = help_text_html % force_unicode(field.help_text)
                 else:
                     help_text = u''
-                output.append(normal_row % {'errors': force_unicode(bf_errors), 'label': force_unicode(label), 'field': unicode(bf), 'help_text': help_text})
+
+                output.append(normal_row % {
+                    'errors': force_unicode(bf_errors),
+                    'label': force_unicode(label),
+                    'field': unicode(bf),
+                    'help_text': help_text,
+                    'html_class_attr': html_class_attr
+                })
+
         if top_errors:
             output.insert(0, error_row % force_unicode(top_errors))
+
         if hidden_fields: # Insert any hidden fields in the last row.
             str_hidden = u''.join(hidden_fields)
             if output:
@@ -176,7 +196,9 @@
                     # that users write): if there are only top errors, we may
                     # not be able to conscript the last row for our purposes,
                     # so insert a new, empty row.
-                    last_row = normal_row % {'errors': '', 'label': '', 'field': '', 'help_text': ''}
+                    last_row = (normal_row % {'errors': '', 'label': '',
+                                              'field': '', 'help_text':'',
+                                              'html_class_attr': html_class_attr})
                     output.append(last_row)
                 output[-1] = last_row[:-len(row_ender)] + str_hidden + row_ender
             else:
@@ -187,15 +209,30 @@
 
     def as_table(self):
         "Returns this form rendered as HTML <tr>s -- excluding the <table></table>."
-        return self._html_output(u'<tr><th>%(label)s</th><td>%(errors)s%(field)s%(help_text)s</td></tr>', u'<tr><td colspan="2">%s</td></tr>', '</td></tr>', u'<br />%s', False)
+        return self._html_output(
+            normal_row = u'<tr%(html_class_attr)s><th>%(label)s</th><td>%(errors)s%(field)s%(help_text)s</td></tr>',
+            error_row = u'<tr><td colspan="2">%s</td></tr>',
+            row_ender = u'</td></tr>',
+            help_text_html = u'<br />%s',
+            errors_on_separate_row = False)
 
     def as_ul(self):
         "Returns this form rendered as HTML <li>s -- excluding the <ul></ul>."
-        return self._html_output(u'<li>%(errors)s%(label)s %(field)s%(help_text)s</li>', u'<li>%s</li>', '</li>', u' %s', False)
+        return self._html_output(
+            normal_row = u'<li%(html_class_attr)s>%(errors)s%(label)s %(field)s%(help_text)s</li>',
+            error_row = u'<li>%s</li>',
+            row_ender = '</li>',
+            help_text_html = u' %s',
+            errors_on_separate_row = False)
 
     def as_p(self):
         "Returns this form rendered as HTML <p>s."
-        return self._html_output(u'<p>%(label)s %(field)s%(help_text)s</p>', u'%s', '</p>', u' %s', True)
+        return self._html_output(
+            normal_row = u'<p%(html_class_attr)s>%(label)s %(field)s%(help_text)s</p>',
+            error_row = u'%s',
+            row_ender = '</p>',
+            help_text_html = u' %s',
+            errors_on_separate_row = True)
 
     def non_field_errors(self):
         """
@@ -227,6 +264,13 @@
         # changed from the initial data, short circuit any validation.
         if self.empty_permitted and not self.has_changed():
             return
+        self._clean_fields()
+        self._clean_form()
+        self._post_clean()
+        if self._errors:
+            delattr(self, 'cleaned_data')
+
+    def _clean_fields(self):
         for name, field in self.fields.items():
             # value_from_datadict() gets the data from the data dictionaries.
             # Each widget type knows how to retrieve its own data, because some
@@ -246,12 +290,19 @@
                 self._errors[name] = self.error_class(e.messages)
                 if name in self.cleaned_data:
                     del self.cleaned_data[name]
+
+    def _clean_form(self):
         try:
             self.cleaned_data = self.clean()
         except ValidationError, e:
             self._errors[NON_FIELD_ERRORS] = self.error_class(e.messages)
-        if self._errors:
-            delattr(self, 'cleaned_data')
+
+    def _post_clean(self):
+        """
+        An internal hook for performing additional cleaning after form cleaning
+        is complete. Used for model validation in model forms.
+        """
+        pass
 
     def clean(self):
         """
@@ -343,6 +394,7 @@
         self.name = name
         self.html_name = form.add_prefix(name)
         self.html_initial_name = form.add_initial_prefix(name)
+        self.html_initial_id = form.add_initial_prefix(self.auto_id)
         if self.field.label is None:
             self.label = pretty_name(name)
         else:
@@ -374,7 +426,10 @@
         attrs = attrs or {}
         auto_id = self.auto_id
         if auto_id and 'id' not in attrs and 'id' not in widget.attrs:
-            attrs['id'] = auto_id
+            if not only_initial:
+                attrs['id'] = auto_id
+            else:
+                attrs['id'] = self.html_initial_id
         if not self.form.is_bound:
             data = self.form.initial.get(self.name, self.field.initial)
             if callable(data):
@@ -388,6 +443,8 @@
             name = self.html_name
         else:
             name = self.html_initial_name
+        if self.field.localize:
+            data = self.field.localize_value(data)
         return widget.render(name, data, attrs=attrs)
 
     def as_text(self, attrs=None, **kwargs):
@@ -429,6 +486,19 @@
             contents = u'<label for="%s"%s>%s</label>' % (widget.id_for_label(id_), attrs, unicode(contents))
         return mark_safe(contents)
 
+    def css_classes(self, extra_classes=None):
+        """
+        Returns a string of space-separated CSS classes for this field.
+        """
+        if hasattr(extra_classes, 'split'):
+            extra_classes = extra_classes.split()
+        extra_classes = set(extra_classes or [])
+        if self.errors and hasattr(self.form, 'error_css_class'):
+            extra_classes.add(self.form.error_css_class)
+        if self.field.required and hasattr(self.form, 'required_css_class'):
+            extra_classes.add(self.form.required_css_class)
+        return ' '.join(extra_classes)
+
     def _is_hidden(self):
         "Returns True if this BoundField's widget is hidden."
         return self.field.widget.is_hidden
--- a/web/lib/django/forms/formsets.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/forms/formsets.py	Tue May 25 02:43:45 2010 +0200
@@ -1,16 +1,18 @@
 from forms import Form
+from django.core.exceptions import ValidationError
 from django.utils.encoding import StrAndUnicode
 from django.utils.safestring import mark_safe
 from django.utils.translation import ugettext as _
 from fields import IntegerField, BooleanField
 from widgets import Media, HiddenInput
-from util import ErrorList, ErrorDict, ValidationError
+from util import ErrorList
 
 __all__ = ('BaseFormSet', 'all_valid')
 
 # special field names
 TOTAL_FORM_COUNT = 'TOTAL_FORMS'
 INITIAL_FORM_COUNT = 'INITIAL_FORMS'
+MAX_NUM_FORM_COUNT = 'MAX_NUM_FORMS'
 ORDERING_FIELD_NAME = 'ORDER'
 DELETION_FIELD_NAME = 'DELETE'
 
@@ -23,6 +25,7 @@
     def __init__(self, *args, **kwargs):
         self.base_fields[TOTAL_FORM_COUNT] = IntegerField(widget=HiddenInput)
         self.base_fields[INITIAL_FORM_COUNT] = IntegerField(widget=HiddenInput)
+        self.base_fields[MAX_NUM_FORM_COUNT] = IntegerField(required=False, widget=HiddenInput)
         super(ManagementForm, self).__init__(*args, **kwargs)
 
 class BaseFormSet(StrAndUnicode):
@@ -55,7 +58,8 @@
         else:
             form = ManagementForm(auto_id=self.auto_id, prefix=self.prefix, initial={
                 TOTAL_FORM_COUNT: self.total_form_count(),
-                INITIAL_FORM_COUNT: self.initial_form_count()
+                INITIAL_FORM_COUNT: self.initial_form_count(),
+                MAX_NUM_FORM_COUNT: self.max_num
             })
         return form
     management_form = property(_management_form)
@@ -65,8 +69,13 @@
         if self.data or self.files:
             return self.management_form.cleaned_data[TOTAL_FORM_COUNT]
         else:
-            total_forms = self.initial_form_count() + self.extra
-            if total_forms > self.max_num > 0:
+            initial_forms = self.initial_form_count()
+            total_forms = initial_forms + self.extra
+            # Allow all existing related objects/inlines to be displayed,
+            # but don't allow extra beyond max_num.
+            if initial_forms > self.max_num >= 0:
+                total_forms = initial_forms
+            elif total_forms > self.max_num >= 0:
                 total_forms = self.max_num
         return total_forms
 
@@ -77,7 +86,7 @@
         else:
             # Use the length of the inital data if it's there, 0 otherwise.
             initial_forms = self.initial and len(self.initial) or 0
-            if initial_forms > self.max_num > 0:
+            if initial_forms > self.max_num >= 0:
                 initial_forms = self.max_num
         return initial_forms
 
@@ -118,6 +127,21 @@
         return self.forms[self.initial_form_count():]
     extra_forms = property(_get_extra_forms)
 
+    def _get_empty_form(self, **kwargs):
+        defaults = {
+            'auto_id': self.auto_id,
+            'prefix': self.add_prefix('__prefix__'),
+            'empty_permitted': True,
+        }
+        if self.data or self.files:
+            defaults['data'] = self.data
+            defaults['files'] = self.files
+        defaults.update(kwargs)
+        form = self.form(**defaults)
+        self.add_fields(form, None)
+        return form
+    empty_form = property(_get_empty_form)
+
     # Maybe this should just go away?
     def _get_cleaned_data(self):
         """
@@ -144,7 +168,7 @@
                 # if this is an extra form and hasn't changed, don't consider it
                 if i >= self.initial_form_count() and not form.has_changed():
                     continue
-                if form.cleaned_data[DELETION_FIELD_NAME]:
+                if self._should_delete_form(form):
                     self._deleted_form_indexes.append(i)
         return [self.forms[i] for i in self._deleted_form_indexes]
     deleted_forms = property(_get_deleted_forms)
@@ -168,7 +192,7 @@
                 if i >= self.initial_form_count() and not form.has_changed():
                     continue
                 # don't add data marked for deletion to self.ordered_data
-                if self.can_delete and form.cleaned_data[DELETION_FIELD_NAME]:
+                if self.can_delete and self._should_delete_form(form):
                     continue
                 self._ordering.append((i, form.cleaned_data[ORDERING_FIELD_NAME]))
             # After we're done populating self._ordering, sort it.
@@ -212,6 +236,15 @@
         return self._errors
     errors = property(_get_errors)
 
+    def _should_delete_form(self, form):
+        # The way we lookup the value of the deletion field here takes
+        # more code than we'd like, but the form's cleaned_data will
+        # not exist if the form is invalid.
+        field = form.fields[DELETION_FIELD_NAME]
+        raw_value = form._raw_value(DELETION_FIELD_NAME)
+        should_delete = field.clean(raw_value)
+        return should_delete
+
     def is_valid(self):
         """
         Returns True if form.errors is empty for every form in self.forms.
@@ -224,13 +257,7 @@
         for i in range(0, self.total_form_count()):
             form = self.forms[i]
             if self.can_delete:
-                # The way we lookup the value of the deletion field here takes
-                # more code than we'd like, but the form's cleaned_data will
-                # not exist if the form is invalid.
-                field = form.fields[DELETION_FIELD_NAME]
-                raw_value = form._raw_value(DELETION_FIELD_NAME)
-                should_delete = field.clean(raw_value)
-                if should_delete:
+                if self._should_delete_form(form):
                     # This form is going to be deleted so any of its errors
                     # should not cause the entire formset to be invalid.
                     continue
@@ -252,7 +279,7 @@
         try:
             self.clean()
         except ValidationError, e:
-            self._non_form_errors = e.messages
+            self._non_form_errors = self.error_class(e.messages)
 
     def clean(self):
         """
@@ -267,7 +294,7 @@
         """A hook for adding extra fields on to each form instance."""
         if self.can_order:
             # Only pre-fill the ordering field for initial forms.
-            if index < self.initial_form_count():
+            if index is not None and index < self.initial_form_count():
                 form.fields[ORDERING_FIELD_NAME] = IntegerField(label=_(u'Order'), initial=index+1, required=False)
             else:
                 form.fields[ORDERING_FIELD_NAME] = IntegerField(label=_(u'Order'), required=False)
@@ -302,7 +329,7 @@
         return mark_safe(u'\n'.join([unicode(self.management_form), forms]))
 
 def formset_factory(form, formset=BaseFormSet, extra=1, can_order=False,
-                    can_delete=False, max_num=0):
+                    can_delete=False, max_num=None):
     """Return a FormSet for the given form class."""
     attrs = {'form': form, 'extra': extra,
              'can_order': can_order, 'can_delete': can_delete,
--- a/web/lib/django/forms/models.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/forms/models.py	Tue May 25 02:43:45 2010 +0200
@@ -3,43 +3,36 @@
 and database field objects.
 """
 
+from django.db import connections
 from django.utils.encoding import smart_unicode, force_unicode
 from django.utils.datastructures import SortedDict
 from django.utils.text import get_text_list, capfirst
 from django.utils.translation import ugettext_lazy as _, ugettext
 
-from util import ValidationError, ErrorList
-from forms import BaseForm, get_declared_fields, NON_FIELD_ERRORS
-from fields import Field, ChoiceField, IntegerField, EMPTY_VALUES
-from widgets import Select, SelectMultiple, HiddenInput, MultipleHiddenInput
+from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
+from django.core.validators import EMPTY_VALUES
+from util import ErrorList
+from forms import BaseForm, get_declared_fields
+from fields import Field, ChoiceField
+from widgets import SelectMultiple, HiddenInput, MultipleHiddenInput
 from widgets import media_property
 from formsets import BaseFormSet, formset_factory, DELETION_FIELD_NAME
 
-try:
-    set
-except NameError:
-    from sets import Set as set     # Python 2.3 fallback
-
 __all__ = (
     'ModelForm', 'BaseModelForm', 'model_to_dict', 'fields_for_model',
     'save_instance', 'form_for_fields', 'ModelChoiceField',
     'ModelMultipleChoiceField',
 )
 
-
-def save_instance(form, instance, fields=None, fail_message='saved',
-                  commit=True, exclude=None):
+def construct_instance(form, instance, fields=None, exclude=None):
     """
-    Saves bound Form ``form``'s cleaned_data into model instance ``instance``.
-
-    If commit=True, then the changes to ``instance`` will be saved to the
-    database. Returns ``instance``.
+    Constructs and returns a model instance from the bound ``form``'s
+    ``cleaned_data``, but does not save the returned instance to the
+    database.
     """
     from django.db import models
     opts = instance._meta
-    if form.errors:
-        raise ValueError("The %s could not be %s because the data didn't"
-                         " validate." % (opts.object_name, fail_message))
+
     cleaned_data = form.cleaned_data
     file_field_list = []
     for f in opts.fields:
@@ -50,10 +43,6 @@
             continue
         if exclude and f.name in exclude:
             continue
-        # OneToOneField doesn't allow assignment of None. Guard against that
-        # instead of allowing it and throwing an error.
-        if isinstance(f, models.OneToOneField) and cleaned_data[f.name] is None:
-            continue
         # Defer saving file-type fields until after the other fields, so a
         # callable upload_to can use the values from other fields.
         if isinstance(f, models.FileField):
@@ -64,9 +53,28 @@
     for f in file_field_list:
         f.save_form_data(instance, cleaned_data[f.name])
 
+    return instance
+
+def save_instance(form, instance, fields=None, fail_message='saved',
+                  commit=True, exclude=None, construct=True):
+    """
+    Saves bound Form ``form``'s cleaned_data into model instance ``instance``.
+
+    If commit=True, then the changes to ``instance`` will be saved to the
+    database. Returns ``instance``.
+
+    If construct=False, assume ``instance`` has already been constructed and
+    just needs to be saved.
+    """
+    if construct:
+        instance = construct_instance(form, instance, fields, exclude)
+    opts = instance._meta
+    if form.errors:
+        raise ValueError("The %s could not be %s because the data didn't"
+                         " validate." % (opts.object_name, fail_message))
+
     # Wrap up the saving of m2m data as a function.
     def save_m2m():
-        opts = instance._meta
         cleaned_data = form.cleaned_data
         for f in opts.many_to_many:
             if fields and f.name not in fields:
@@ -119,7 +127,7 @@
     the ``fields`` argument.
     """
     # avoid a circular import
-    from django.db.models.fields.related import ManyToManyField, OneToOneField
+    from django.db.models.fields.related import ManyToManyField
     opts = instance._meta
     data = {}
     for f in opts.fields + opts.many_to_many:
@@ -142,7 +150,7 @@
             data[f.name] = f.value_from_object(instance)
     return data
 
-def fields_for_model(model, fields=None, exclude=None, formfield_callback=lambda f: f.formfield()):
+def fields_for_model(model, fields=None, exclude=None, widgets=None, formfield_callback=lambda f, **kwargs: f.formfield(**kwargs)):
     """
     Returns a ``SortedDict`` containing form fields for the given model.
 
@@ -154,6 +162,7 @@
     in the ``fields`` argument.
     """
     field_list = []
+    ignored = []
     opts = model._meta
     for f in opts.fields + opts.many_to_many:
         if not f.editable:
@@ -162,12 +171,21 @@
             continue
         if exclude and f.name in exclude:
             continue
-        formfield = formfield_callback(f)
+        if widgets and f.name in widgets:
+            kwargs = {'widget': widgets[f.name]}
+        else:
+            kwargs = {}
+        formfield = formfield_callback(f, **kwargs)
         if formfield:
             field_list.append((f.name, formfield))
+        else:
+            ignored.append(f.name)
     field_dict = SortedDict(field_list)
     if fields:
-        field_dict = SortedDict([(f, field_dict.get(f)) for f in fields if (not exclude) or (exclude and f not in exclude)])
+        field_dict = SortedDict(
+            [(f, field_dict.get(f)) for f in fields
+                if ((not exclude) or (exclude and f not in exclude)) and (f not in ignored)]
+        )
     return field_dict
 
 class ModelFormOptions(object):
@@ -175,12 +193,13 @@
         self.model = getattr(options, 'model', None)
         self.fields = getattr(options, 'fields', None)
         self.exclude = getattr(options, 'exclude', None)
+        self.widgets = getattr(options, 'widgets', None)
 
 
 class ModelFormMetaclass(type):
     def __new__(cls, name, bases, attrs):
         formfield_callback = attrs.pop('formfield_callback',
-                lambda f: f.formfield())
+                lambda f, **kwargs: f.formfield(**kwargs))
         try:
             parents = [b for b in bases if issubclass(b, ModelForm)]
         except NameError:
@@ -198,7 +217,7 @@
         if opts.model:
             # If a model is defined, extract form fields from it.
             fields = fields_for_model(opts.model, opts.fields,
-                                      opts.exclude, formfield_callback)
+                                      opts.exclude, opts.widgets, formfield_callback)
             # Override default model fields with any custom declared ones
             # (plus, include all the other declared fields).
             fields.update(declared_fields)
@@ -214,182 +233,127 @@
                  empty_permitted=False, instance=None):
         opts = self._meta
         if instance is None:
+            if opts.model is None:
+                raise ValueError('ModelForm has no model class specified.')
             # if we didn't get an instance, instantiate a new one
             self.instance = opts.model()
             object_data = {}
+            self.instance._adding = True
         else:
             self.instance = instance
+            self.instance._adding = False
             object_data = model_to_dict(instance, opts.fields, opts.exclude)
         # if initial was provided, it should override the values from instance
         if initial is not None:
             object_data.update(initial)
+        # self._validate_unique will be set to True by BaseModelForm.clean().
+        # It is False by default so overriding self.clean() and failing to call
+        # super will stop validate_unique from being called.
+        self._validate_unique = False
         super(BaseModelForm, self).__init__(data, files, auto_id, prefix, object_data,
                                             error_class, label_suffix, empty_permitted)
 
+    def _update_errors(self, message_dict):
+        for k, v in message_dict.items():
+            if k != NON_FIELD_ERRORS:
+                self._errors.setdefault(k, self.error_class()).extend(v)
+                # Remove the data from the cleaned_data dict since it was invalid
+                if k in self.cleaned_data:
+                    del self.cleaned_data[k]
+        if NON_FIELD_ERRORS in message_dict:
+            messages = message_dict[NON_FIELD_ERRORS]
+            self._errors.setdefault(NON_FIELD_ERRORS, self.error_class()).extend(messages)
+
+    def _get_validation_exclusions(self):
+        """
+        For backwards-compatibility, several types of fields need to be
+        excluded from model validation. See the following tickets for
+        details: #12507, #12521, #12553
+        """
+        exclude = []
+        # Build up a list of fields that should be excluded from model field
+        # validation and unique checks.
+        for f in self.instance._meta.fields:
+            field = f.name
+            # Exclude fields that aren't on the form. The developer may be
+            # adding these values to the model after form validation.
+            if field not in self.fields:
+                exclude.append(f.name)
+
+            # Don't perform model validation on fields that were defined
+            # manually on the form and excluded via the ModelForm's Meta
+            # class. See #12901.
+            elif self._meta.fields and field not in self._meta.fields:
+                exclude.append(f.name)
+            elif self._meta.exclude and field in self._meta.exclude:
+                exclude.append(f.name)
+
+            # Exclude fields that failed form validation. There's no need for
+            # the model fields to validate them as well.
+            elif field in self._errors.keys():
+                exclude.append(f.name)
+
+            # Exclude empty fields that are not required by the form, if the
+            # underlying model field is required. This keeps the model field
+            # from raising a required error. Note: don't exclude the field from
+            # validaton if the model field allows blanks. If it does, the blank
+            # value may be included in a unique check, so cannot be excluded
+            # from validation.
+            else:
+                form_field = self.fields[field]
+                field_value = self.cleaned_data.get(field, None)
+                if not f.blank and not form_field.required and field_value in EMPTY_VALUES:
+                    exclude.append(f.name)
+        return exclude
+
     def clean(self):
-        self.validate_unique()
+        self._validate_unique = True
         return self.cleaned_data
 
+    def _post_clean(self):
+        opts = self._meta
+        # Update the model instance with self.cleaned_data.
+        self.instance = construct_instance(self, self.instance, opts.fields, opts.exclude)
+
+        exclude = self._get_validation_exclusions()
+
+        # Foreign Keys being used to represent inline relationships
+        # are excluded from basic field value validation. This is for two
+        # reasons: firstly, the value may not be supplied (#12507; the
+        # case of providing new values to the admin); secondly the
+        # object being referred to may not yet fully exist (#12749).
+        # However, these fields *must* be included in uniqueness checks,
+        # so this can't be part of _get_validation_exclusions().
+        for f_name, field in self.fields.items():
+            if isinstance(field, InlineForeignKeyField):
+                exclude.append(f_name)
+
+        # Clean the model instance's fields.
+        try:
+            self.instance.clean_fields(exclude=exclude)
+        except ValidationError, e:
+            self._update_errors(e.message_dict)
+
+        # Call the model instance's clean method.
+        try:
+            self.instance.clean()
+        except ValidationError, e:
+            self._update_errors({NON_FIELD_ERRORS: e.messages})
+
+        # Validate uniqueness if needed.
+        if self._validate_unique:
+            self.validate_unique()
+
     def validate_unique(self):
-        unique_checks, date_checks = self._get_unique_checks()
-        form_errors = []
-        bad_fields = set()
-
-        field_errors, global_errors = self._perform_unique_checks(unique_checks)
-        bad_fields.union(field_errors)
-        form_errors.extend(global_errors)
-
-        field_errors, global_errors = self._perform_date_checks(date_checks)
-        bad_fields.union(field_errors)
-        form_errors.extend(global_errors)
-
-        for field_name in bad_fields:
-            del self.cleaned_data[field_name]
-        if form_errors:
-            # Raise the unique together errors since they are considered
-            # form-wide.
-            raise ValidationError(form_errors)
-
-    def _get_unique_checks(self):
-        from django.db.models.fields import FieldDoesNotExist, Field as ModelField
-
-        # Gather a list of checks to perform. We only perform unique checks
-        # for fields present and not None in cleaned_data.  Since this is a
-        # ModelForm, some fields may have been excluded; we can't perform a unique
-        # check on a form that is missing fields involved in that check.  It also does
-        # not make sense to check data that didn't validate, and since NULL does not
-        # equal NULL in SQL we should not do any unique checking for NULL values.
-        unique_checks = []
-        # these are checks for the unique_for_<date/year/month>
-        date_checks = []
-        for check in self.instance._meta.unique_together[:]:
-            fields_on_form = [field for field in check if self.cleaned_data.get(field) is not None]
-            if len(fields_on_form) == len(check):
-                unique_checks.append(check)
-
-        # Gather a list of checks for fields declared as unique and add them to
-        # the list of checks. Again, skip empty fields and any that did not validate.
-        for name in self.fields:
-            try:
-                f = self.instance._meta.get_field_by_name(name)[0]
-            except FieldDoesNotExist:
-                # This is an extra field that's not on the ModelForm, ignore it
-                continue
-            if not isinstance(f, ModelField):
-                # This is an extra field that happens to have a name that matches,
-                # for example, a related object accessor for this model.  So
-                # get_field_by_name found it, but it is not a Field so do not proceed
-                # to use it as if it were.
-                continue
-            if self.cleaned_data.get(name) is None:
-                continue
-            if f.unique:
-                unique_checks.append((name,))
-            if f.unique_for_date and self.cleaned_data.get(f.unique_for_date) is not None:
-                date_checks.append(('date', name, f.unique_for_date))
-            if f.unique_for_year and self.cleaned_data.get(f.unique_for_year) is not None:
-                date_checks.append(('year', name, f.unique_for_year))
-            if f.unique_for_month and self.cleaned_data.get(f.unique_for_month) is not None:
-                date_checks.append(('month', name, f.unique_for_month))
-        return unique_checks, date_checks
-
-
-    def _perform_unique_checks(self, unique_checks):
-        bad_fields = set()
-        form_errors = []
-
-        for unique_check in unique_checks:
-            # Try to look up an existing object with the same values as this
-            # object's values for all the unique field.
-
-            lookup_kwargs = {}
-            for field_name in unique_check:
-                lookup_value = self.cleaned_data[field_name]
-                # ModelChoiceField will return an object instance rather than
-                # a raw primary key value, so convert it to a pk value before
-                # using it in a lookup.
-                if isinstance(self.fields[field_name], ModelChoiceField):
-                    lookup_value =  lookup_value.pk
-                lookup_kwargs[str(field_name)] = lookup_value
-
-            qs = self.instance.__class__._default_manager.filter(**lookup_kwargs)
-
-            # Exclude the current object from the query if we are editing an
-            # instance (as opposed to creating a new one)
-            if self.instance.pk is not None:
-                qs = qs.exclude(pk=self.instance.pk)
-
-            # This cute trick with extra/values is the most efficient way to
-            # tell if a particular query returns any results.
-            if qs.extra(select={'a': 1}).values('a').order_by():
-                if len(unique_check) == 1:
-                    self._errors[unique_check[0]] = ErrorList([self.unique_error_message(unique_check)])
-                else:
-                    form_errors.append(self.unique_error_message(unique_check))
-
-                # Mark these fields as needing to be removed from cleaned data
-                # later.
-                for field_name in unique_check:
-                    bad_fields.add(field_name)
-        return bad_fields, form_errors
-
-    def _perform_date_checks(self, date_checks):
-        bad_fields = set()
-        for lookup_type, field, unique_for in date_checks:
-            lookup_kwargs = {}
-            # there's a ticket to add a date lookup, we can remove this special
-            # case if that makes it's way in
-            if lookup_type == 'date':
-                date = self.cleaned_data[unique_for]
-                lookup_kwargs['%s__day' % unique_for] = date.day
-                lookup_kwargs['%s__month' % unique_for] = date.month
-                lookup_kwargs['%s__year' % unique_for] = date.year
-            else:
-                lookup_kwargs['%s__%s' % (unique_for, lookup_type)] = getattr(self.cleaned_data[unique_for], lookup_type)
-            lookup_kwargs[field] = self.cleaned_data[field]
-
-            qs = self.instance.__class__._default_manager.filter(**lookup_kwargs)
-            # Exclude the current object from the query if we are editing an
-            # instance (as opposed to creating a new one)
-            if self.instance.pk is not None:
-                qs = qs.exclude(pk=self.instance.pk)
-
-            # This cute trick with extra/values is the most efficient way to
-            # tell if a particular query returns any results.
-            if qs.extra(select={'a': 1}).values('a').order_by():
-                self._errors[field] = ErrorList([
-                    self.date_error_message(lookup_type, field, unique_for)
-                ])
-                bad_fields.add(field)
-        return bad_fields, []
-
-    def date_error_message(self, lookup_type, field, unique_for):
-        return _(u"%(field_name)s must be unique for %(date_field)s %(lookup)s.") % {
-            'field_name': unicode(self.fields[field].label),
-            'date_field': unicode(self.fields[unique_for].label),
-            'lookup': lookup_type,
-        }
-
-    def unique_error_message(self, unique_check):
-        model_name = capfirst(self.instance._meta.verbose_name)
-
-        # A unique field
-        if len(unique_check) == 1:
-            field_name = unique_check[0]
-            field_label = self.fields[field_name].label
-            # Insert the error into the error dict, very sneaky
-            return _(u"%(model_name)s with this %(field_label)s already exists.") %  {
-                'model_name': unicode(model_name),
-                'field_label': unicode(field_label)
-            }
-        # unique_together
-        else:
-            field_labels = [self.fields[field_name].label for field_name in unique_check]
-            field_labels = get_text_list(field_labels, _('and'))
-            return _(u"%(model_name)s with this %(field_label)s already exists.") %  {
-                'model_name': unicode(model_name),
-                'field_label': unicode(field_labels)
-            }
+        """
+        Calls the instance's validate_unique() method and updates the form's
+        validation errors if any were raised.
+        """
+        exclude = self._get_validation_exclusions()
+        try:
+            self.instance.validate_unique(exclude=exclude)
+        except ValidationError, e:
+            self._update_errors(e.message_dict)
 
     def save(self, commit=True):
         """
@@ -404,7 +368,7 @@
         else:
             fail_message = 'changed'
         return save_instance(self, self.instance, self._meta.fields,
-                             fail_message, commit, exclude=self._meta.exclude)
+                             fail_message, commit, construct=False)
 
     save.alters_data = True
 
@@ -474,7 +438,8 @@
             pk_key = "%s-%s" % (self.add_prefix(i), self.model._meta.pk.name)
             pk = self.data[pk_key]
             pk_field = self.model._meta.pk
-            pk = pk_field.get_db_prep_lookup('exact', pk)
+            pk = pk_field.get_db_prep_lookup('exact', pk,
+                connection=connections[self.get_queryset().db])
             if isinstance(pk, list):
                 pk = pk[0]
             kwargs['instance'] = self._existing_object(pk)
@@ -495,10 +460,10 @@
             if not qs.ordered:
                 qs = qs.order_by(self.model._meta.pk.name)
 
-            if self.max_num > 0:
-                self._queryset = qs[:self.max_num]
-            else:
-                self._queryset = qs
+            # Removed queryset limiting here. As per discussion re: #13023
+            # on django-dev, max_num should not prevent existing
+            # related objects/inlines from being displayed.
+            self._queryset = qs
         return self._queryset
 
     def save_new(self, form, commit=True):
@@ -525,17 +490,20 @@
         self.validate_unique()
 
     def validate_unique(self):
-        # Iterate over the forms so that we can find one with potentially valid
-        # data from which to extract the error checks
+        # Collect unique_checks and date_checks to run from all the forms.
+        all_unique_checks = set()
+        all_date_checks = set()
         for form in self.forms:
-            if hasattr(form, 'cleaned_data'):
-                break
-        else:
-            return
-        unique_checks, date_checks = form._get_unique_checks()
+            if not hasattr(form, 'cleaned_data'):
+                continue
+            exclude = form._get_validation_exclusions()
+            unique_checks, date_checks = form.instance._get_unique_checks(exclude=exclude)
+            all_unique_checks = all_unique_checks.union(set(unique_checks))
+            all_date_checks = all_date_checks.union(set(date_checks))
+
         errors = []
         # Do each of the unique checks (unique and unique_together)
-        for unique_check in unique_checks:
+        for uclass, unique_check in all_unique_checks:
             seen_data = set()
             for form in self.forms:
                 # if the form doesn't have cleaned_data then we ignore it,
@@ -557,9 +525,9 @@
                     # mark the data as seen
                     seen_data.add(row_data)
         # iterate over each of the date checks now
-        for date_check in date_checks:
+        for date_check in all_date_checks:
             seen_data = set()
-            lookup, field, unique_for = date_check
+            uclass, lookup, field, unique_for = date_check
             for form in self.forms:
                 # if the form doesn't have cleaned_data then we ignore it,
                 # it's already invalid
@@ -603,9 +571,9 @@
     def get_date_error_message(self, date_check):
         return ugettext("Please correct the duplicate data for %(field_name)s "
             "which must be unique for the %(lookup)s in %(date_field)s.") % {
-            'field_name': date_check[1],
-            'date_field': date_check[2],
-            'lookup': unicode(date_check[0]),
+            'field_name': date_check[2],
+            'date_field': date_check[3],
+            'lookup': unicode(date_check[1]),
         }
 
     def get_form_error(self):
@@ -676,20 +644,24 @@
                 pk_value = form.instance.pk
             else:
                 try:
-                    pk_value = self.get_queryset()[index].pk
+                    if index is not None:
+                        pk_value = self.get_queryset()[index].pk
+                    else:
+                        pk_value = None
                 except IndexError:
                     pk_value = None
             if isinstance(pk, OneToOneField) or isinstance(pk, ForeignKey):
                 qs = pk.rel.to._default_manager.get_query_set()
             else:
                 qs = self.model._default_manager.get_query_set()
+            qs = qs.using(form.instance._state.db)
             form.fields[self._pk_field.name] = ModelChoiceField(qs, initial=pk_value, required=False, widget=HiddenInput)
         super(BaseModelFormSet, self).add_fields(form, index)
 
 def modelformset_factory(model, form=ModelForm, formfield_callback=lambda f: f.formfield(),
                          formset=BaseModelFormSet,
                          extra=1, can_delete=False, can_order=False,
-                         max_num=0, fields=None, exclude=None):
+                         max_num=None, fields=None, exclude=None):
     """
     Returns a FormSet class for the given Django model class.
     """
@@ -706,10 +678,10 @@
 class BaseInlineFormSet(BaseModelFormSet):
     """A formset for child objects related to a parent."""
     def __init__(self, data=None, files=None, instance=None,
-                 save_as_new=False, prefix=None):
+                 save_as_new=False, prefix=None, queryset=None):
         from django.db.models.fields.related import RelatedObject
         if instance is None:
-            self.instance = self.model()
+            self.instance = self.fk.rel.to()
         else:
             self.instance = instance
         self.save_as_new = save_as_new
@@ -719,7 +691,9 @@
             backlink_value = self.instance
         else:
             backlink_value = getattr(self.instance, self.fk.rel.field_name)
-        qs = self.model._default_manager.filter(**{self.fk.name: backlink_value})
+        if queryset is None:
+            queryset = self.model._default_manager
+        qs = queryset.filter(**{self.fk.name: backlink_value})
         super(BaseInlineFormSet, self).__init__(data, files, prefix=prefix,
                                                 queryset=qs)
 
@@ -742,12 +716,15 @@
 
             # Remove the foreign key from the form's data
             form.data[form.add_prefix(self.fk.name)] = None
+
+        # Set the fk value here so that the form can do it's validation.
+        setattr(form.instance, self.fk.get_attname(), self.instance.pk)
         return form
 
     #@classmethod
     def get_default_prefix(cls):
         from django.db.models.fields.related import RelatedObject
-        return RelatedObject(cls.fk.rel.to, cls.model, cls.fk).get_accessor_name()
+        return RelatedObject(cls.fk.rel.to, cls.model, cls.fk).get_accessor_name().replace('+','')
     get_default_prefix = classmethod(get_default_prefix)
 
     def save_new(self, form, commit=True):
@@ -766,21 +743,32 @@
     def add_fields(self, form, index):
         super(BaseInlineFormSet, self).add_fields(form, index)
         if self._pk_field == self.fk:
-            form.fields[self._pk_field.name] = InlineForeignKeyField(self.instance, pk_field=True)
+            name = self._pk_field.name
+            kwargs = {'pk_field': True}
         else:
             # The foreign key field might not be on the form, so we poke at the
             # Model field to get the label, since we need that for error messages.
+            name = self.fk.name
             kwargs = {
-                'label': getattr(form.fields.get(self.fk.name), 'label', capfirst(self.fk.verbose_name))
+                'label': getattr(form.fields.get(name), 'label', capfirst(self.fk.verbose_name))
             }
             if self.fk.rel.field_name != self.fk.rel.to._meta.pk.name:
                 kwargs['to_field'] = self.fk.rel.field_name
-            form.fields[self.fk.name] = InlineForeignKeyField(self.instance, **kwargs)
+
+        form.fields[name] = InlineForeignKeyField(self.instance, **kwargs)
+
+        # Add the generated field to form._meta.fields if it's defined to make
+        # sure validation isn't skipped on that field.
+        if form._meta.fields:
+            if isinstance(form._meta.fields, tuple):
+                form._meta.fields = list(form._meta.fields)
+            form._meta.fields.append(self.fk.name)
 
     def get_unique_error_message(self, unique_check):
         unique_check = [field for field in unique_check if field != self.fk.name]
         return super(BaseInlineFormSet, self).get_unique_error_message(unique_check)
 
+
 def _get_foreign_key(parent_model, model, fk_name=None, can_fail=False):
     """
     Finds and returns the ForeignKey from model to parent if there is one
@@ -824,7 +812,7 @@
 def inlineformset_factory(parent_model, model, form=ModelForm,
                           formset=BaseInlineFormSet, fk_name=None,
                           fields=None, exclude=None,
-                          extra=3, can_order=False, can_delete=True, max_num=0,
+                          extra=3, can_order=False, can_delete=True, max_num=None,
                           formfield_callback=lambda f: f.formfield()):
     """
     Returns an ``InlineFormSet`` for the given kwargs.
@@ -914,6 +902,9 @@
             for obj in self.queryset.all():
                 yield self.choice(obj)
 
+    def __len__(self):
+        return len(self.queryset)
+
     def choice(self, obj):
         if self.field.to_field_name:
             key = obj.serializable_value(self.field.to_field_name)
@@ -948,6 +939,12 @@
         self.choice_cache = None
         self.to_field_name = to_field_name
 
+    def __deepcopy__(self, memo):
+        result = super(ChoiceField, self).__deepcopy__(memo)
+        # Need to force a new ModelChoiceIterator to be created, bug #11183
+        result.queryset = result.queryset
+        return result
+
     def _get_queryset(self):
         return self._queryset
 
@@ -984,8 +981,7 @@
 
     choices = property(_get_choices, ChoiceField._set_choices)
 
-    def clean(self, value):
-        Field.clean(self, value)
+    def to_python(self, value):
         if value in EMPTY_VALUES:
             return None
         try:
@@ -995,6 +991,9 @@
             raise ValidationError(self.error_messages['invalid_choice'])
         return value
 
+    def validate(self, value):
+        return Field.validate(self, value)
+
 class ModelMultipleChoiceField(ModelChoiceField):
     """A MultipleChoiceField whose choices are a model QuerySet."""
     widget = SelectMultiple
--- a/web/lib/django/forms/util.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/forms/util.py	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,11 @@
 from django.utils.html import conditional_escape
-from django.utils.encoding import smart_unicode, StrAndUnicode, force_unicode
+from django.utils.encoding import StrAndUnicode, force_unicode
 from django.utils.safestring import mark_safe
 
+# Import ValidationError so that it can be imported from this
+# module to maintain backwards compatibility.
+from django.core.exceptions import ValidationError
+
 def flatatt(attrs):
     """
     Convert a dictionary of attributes to a single string.
@@ -48,21 +52,3 @@
     def __repr__(self):
         return repr([force_unicode(e) for e in self])
 
-class ValidationError(Exception):
-    def __init__(self, message):
-        """
-        ValidationError can be passed any object that can be printed (usually
-        a string) or a list of objects.
-        """
-        if isinstance(message, list):
-            self.messages = ErrorList([smart_unicode(msg) for msg in message])
-        else:
-            message = smart_unicode(message)
-            self.messages = ErrorList([message])
-
-    def __str__(self):
-        # This is needed because, without a __str__(), printing an exception
-        # instance would result in this:
-        # AttributeError: ValidationError instance has no attribute 'args'
-        # See http://www.python.org/doc/current/tut/node10.html#handling
-        return repr(self.messages)
--- a/web/lib/django/forms/widgets.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/forms/widgets.py	Tue May 25 02:43:45 2010 +0200
@@ -2,12 +2,7 @@
 HTML Widget classes
 """
 
-try:
-    set
-except NameError:
-    from sets import Set as set   # Python 2.3 fallback
-
-import copy
+import django.utils.copycompat as copy
 from itertools import chain
 from django.conf import settings
 from django.utils.datastructures import MultiValueDict, MergeDict
@@ -15,8 +10,9 @@
 from django.utils.translation import ugettext
 from django.utils.encoding import StrAndUnicode, force_unicode
 from django.utils.safestring import mark_safe
-from django.utils import datetime_safe
-from datetime import time
+from django.utils import formats
+import time
+import datetime
 from util import flatatt
 from urlparse import urljoin
 
@@ -46,7 +42,7 @@
 
         # Any leftover attributes must be invalid.
         # if media_attrs != {}:
-        #     raise TypeError, "'class Media' has invalid attribute(s): %s" % ','.join(media_attrs.keys())
+        #     raise TypeError("'class Media' has invalid attribute(s): %s" % ','.join(media_attrs.keys()))
 
     def __unicode__(self):
         return self.render()
@@ -80,12 +76,16 @@
 
     def add_js(self, data):
         if data:
-            self._js.extend([path for path in data if path not in self._js])
+            for path in data:
+                if path not in self._js:
+                    self._js.append(path)
 
     def add_css(self, data):
         if data:
             for medium, paths in data.items():
-                self._css.setdefault(medium, []).extend([path for path in paths if path not in self._css[medium]])
+                for path in paths:
+                    if not self._css.get(medium) or path not in self._css[medium]:
+                        self._css.setdefault(medium, []).append(path)
 
     def __add__(self, other):
         combined = Media()
@@ -247,9 +247,16 @@
     def render(self, name, value, attrs=None, choices=()):
         if value is None: value = []
         final_attrs = self.build_attrs(attrs, type=self.input_type, name=name)
-        return mark_safe(u'\n'.join([(u'<input%s />' %
-            flatatt(dict(value=force_unicode(v), **final_attrs)))
-            for v in value]))
+        id_ = final_attrs.get('id', None)
+        inputs = []
+        for i, v in enumerate(value):
+            input_attrs = dict(value=force_unicode(v), **final_attrs)
+            if id_:
+                # An ID attribute was given. Add a numeric index as a suffix
+                # so that the inputs don't all have the same ID attribute.
+                input_attrs['id'] = '%s_%s' % (id_, i)
+            inputs.append(u'<input%s />' % flatatt(input_attrs))
+        return mark_safe(u'\n'.join(inputs))
 
     def value_from_datadict(self, data, files, name):
         if isinstance(data, (MultiValueDict, MergeDict)):
@@ -288,7 +295,7 @@
 
 class DateInput(Input):
     input_type = 'text'
-    format = '%Y-%m-%d'     # '2006-10-25'
+    format = None
 
     def __init__(self, attrs=None, format=None):
         super(DateInput, self).__init__(attrs)
@@ -299,8 +306,7 @@
         if value is None:
             return ''
         elif hasattr(value, 'strftime'):
-            value = datetime_safe.new_date(value)
-            return value.strftime(self.format)
+            return formats.localize_input(value, self.format)
         return value
 
     def render(self, name, value, attrs=None):
@@ -308,11 +314,19 @@
         return super(DateInput, self).render(name, value, attrs)
 
     def _has_changed(self, initial, data):
+        # If our field has show_hidden_initial=True, initial will be a string
+        # formatted by HiddenInput using formats.localize_input, which is not
+        # necessarily the format used for this widget. Attempt to convert it.
+        try:
+            input_format = formats.get_format('DATE_INPUT_FORMATS')[0]
+            initial = datetime.date(*time.strptime(initial, input_format)[:3])
+        except (TypeError, ValueError):
+            pass
         return super(DateInput, self)._has_changed(self._format_value(initial), data)
 
 class DateTimeInput(Input):
     input_type = 'text'
-    format = '%Y-%m-%d %H:%M:%S'     # '2006-10-25 14:30:59'
+    format = None
 
     def __init__(self, attrs=None, format=None):
         super(DateTimeInput, self).__init__(attrs)
@@ -323,8 +337,7 @@
         if value is None:
             return ''
         elif hasattr(value, 'strftime'):
-            value = datetime_safe.new_datetime(value)
-            return value.strftime(self.format)
+            return formats.localize_input(value, self.format)
         return value
 
     def render(self, name, value, attrs=None):
@@ -332,11 +345,19 @@
         return super(DateTimeInput, self).render(name, value, attrs)
 
     def _has_changed(self, initial, data):
+        # If our field has show_hidden_initial=True, initial will be a string
+        # formatted by HiddenInput using formats.localize_input, which is not
+        # necessarily the format used for this widget. Attempt to convert it.
+        try:
+            input_format = formats.get_format('DATETIME_INPUT_FORMATS')[0]
+            initial = datetime.datetime(*time.strptime(initial, input_format)[:6])
+        except (TypeError, ValueError):
+            pass
         return super(DateTimeInput, self)._has_changed(self._format_value(initial), data)
 
 class TimeInput(Input):
     input_type = 'text'
-    format = '%H:%M:%S'     # '14:30:59'
+    format = None
 
     def __init__(self, attrs=None, format=None):
         super(TimeInput, self).__init__(attrs)
@@ -347,7 +368,7 @@
         if value is None:
             return ''
         elif hasattr(value, 'strftime'):
-            return value.strftime(self.format)
+            return formats.localize_input(value, self.format)
         return value
 
     def render(self, name, value, attrs=None):
@@ -355,6 +376,14 @@
         return super(TimeInput, self).render(name, value, attrs)
 
     def _has_changed(self, initial, data):
+        # If our field has show_hidden_initial=True, initial will be a string
+        # formatted by HiddenInput using formats.localize_input, which is not
+        # necessarily the format used for this  widget. Attempt to convert it.
+        try:
+            input_format = formats.get_format('TIME_INPUT_FORMATS')[0]
+            initial = datetime.time(*time.strptime(initial, input_format)[3:6])
+        except (TypeError, ValueError):
+            pass
         return super(TimeInput, self)._has_changed(self._format_value(initial), data)
 
 class CheckboxInput(Widget):
@@ -382,7 +411,12 @@
             # A missing value means False because HTML form submission does not
             # send results for unselected checkboxes.
             return False
-        return super(CheckboxInput, self).value_from_datadict(data, files, name)
+        value = data.get(name)
+        # Translate true and false strings to boolean values.
+        values =  {'true': True, 'false': False}
+        if isinstance(value, basestring):
+            value = values.get(value.lower(), value)
+        return value
 
     def _has_changed(self, initial, data):
         # Sometimes data or initial could be None or u'' which should be the
@@ -404,7 +438,7 @@
         options = self.render_options(choices, [value])
         if options:
             output.append(options)
-        output.append('</select>')
+        output.append(u'</select>')
         return mark_safe(u'\n'.join(output))
 
     def render_options(self, choices, selected_choices):
@@ -452,9 +486,13 @@
                 False: False}.get(value, None)
 
     def _has_changed(self, initial, data):
-        # Sometimes data or initial could be None or u'' which should be the
-        # same thing as False.
-        return bool(initial) != bool(data)
+        # For a NullBooleanSelect, None (unknown) and False (No)
+        # are not the same
+        if initial is not None:
+            initial = bool(initial)
+        if data is not None:
+            data = bool(data)
+        return initial != data
 
 class SelectMultiple(Select):
     def render(self, name, value, attrs=None, choices=()):
@@ -700,6 +738,11 @@
         return media
     media = property(_get_media)
 
+    def __deepcopy__(self, memo):
+        obj = super(MultiWidget, self).__deepcopy__(memo)
+        obj.widgets = copy.deepcopy(self.widgets)
+        return obj
+
 class SplitDateTimeWidget(MultiWidget):
     """
     A Widget that splits datetime input into two <input type="text"> boxes.
@@ -725,6 +768,10 @@
     """
     A Widget that splits datetime input into two <input type="hidden"> inputs.
     """
-    def __init__(self, attrs=None):
-        widgets = (HiddenInput(attrs=attrs), HiddenInput(attrs=attrs))
-        super(SplitDateTimeWidget, self).__init__(widgets, attrs)
+    is_hidden = True
+
+    def __init__(self, attrs=None, date_format=None, time_format=None):
+        super(SplitHiddenDateTimeWidget, self).__init__(attrs, date_format, time_format)
+        for widget in self.widgets:
+            widget.input_type = 'hidden'
+            widget.is_hidden = True
--- a/web/lib/django/http/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/http/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,6 +1,6 @@
 import os
 import re
-from Cookie import SimpleCookie, CookieError
+from Cookie import BaseCookie, SimpleCookie, CookieError
 from pprint import pformat
 from urllib import urlencode
 from urlparse import urljoin
@@ -183,7 +183,7 @@
         return result
 
     def __deepcopy__(self, memo):
-        import copy
+        import django.utils.copycompat as copy
         result = self.__class__('', mutable=True)
         memo[id(self)] = result
         for key, value in dict.items(self):
@@ -248,16 +248,46 @@
             output.extend([urlencode({k: smart_str(v, self.encoding)}) for v in list_])
         return '&'.join(output)
 
+class CompatCookie(SimpleCookie):
+    """
+    Cookie class that handles some issues with browser compatibility.
+    """
+    def value_encode(self, val):
+        # Some browsers do not support quoted-string from RFC 2109,
+        # including some versions of Safari and Internet Explorer.
+        # These browsers split on ';', and some versions of Safari
+        # are known to split on ', '. Therefore, we encode ';' and ','
+
+        # SimpleCookie already does the hard work of encoding and decoding.
+        # It uses octal sequences like '\\012' for newline etc.
+        # and non-ASCII chars.  We just make use of this mechanism, to
+        # avoid introducing two encoding schemes which would be confusing
+        # and especially awkward for javascript.
+
+        # NB, contrary to Python docs, value_encode returns a tuple containing
+        # (real val, encoded_val)
+        val, encoded = super(CompatCookie, self).value_encode(val)
+
+        encoded = encoded.replace(";", "\\073").replace(",","\\054")
+        # If encoded now contains any quoted chars, we need double quotes
+        # around the whole string.
+        if "\\" in encoded and not encoded.startswith('"'):
+            encoded = '"' + encoded + '"'
+
+        return val, encoded
+
 def parse_cookie(cookie):
     if cookie == '':
         return {}
-    try:
-        c = SimpleCookie()
-        c.load(cookie)
-    except CookieError:
-        # Invalid cookie
-        return {}
-
+    if not isinstance(cookie, BaseCookie):
+        try:
+            c = CompatCookie()
+            c.load(cookie)
+        except CookieError:
+            # Invalid cookie
+            return {}
+    else:
+        c = cookie
     cookiedict = {}
     for key in c.keys():
         cookiedict[key] = c.get(key).value
@@ -286,7 +316,7 @@
         else:
             self._container = [content]
             self._is_string = True
-        self.cookies = SimpleCookie()
+        self.cookies = CompatCookie()
         if status:
             self.status_code = status
 
@@ -404,14 +434,14 @@
 
     def __init__(self, redirect_to):
         HttpResponse.__init__(self)
-        self['Location'] = redirect_to
+        self['Location'] = iri_to_uri(redirect_to)
 
 class HttpResponsePermanentRedirect(HttpResponse):
     status_code = 301
 
     def __init__(self, redirect_to):
         HttpResponse.__init__(self)
-        self['Location'] = redirect_to
+        self['Location'] = iri_to_uri(redirect_to)
 
 class HttpResponseNotModified(HttpResponse):
     status_code = 304
--- a/web/lib/django/middleware/common.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/middleware/common.py	Tue May 25 02:43:45 2010 +0200
@@ -53,8 +53,9 @@
         # Append a slash if APPEND_SLASH is set and the URL doesn't have a
         # trailing slash and there is no pattern for the current path
         if settings.APPEND_SLASH and (not old_url[1].endswith('/')):
-            if (not _is_valid_path(request.path_info) and
-                    _is_valid_path("%s/" % request.path_info)):
+            urlconf = getattr(request, 'urlconf', None)
+            if (not _is_valid_path(request.path_info, urlconf) and
+                    _is_valid_path("%s/" % request.path_info, urlconf)):
                 new_url[1] = new_url[1] + '/'
                 if settings.DEBUG and request.method == 'POST':
                     raise RuntimeError, (""
@@ -130,7 +131,7 @@
     # Different subdomains are treated as different domains.
     return referer is not None and re.match("^https?://%s/" % re.escape(domain), referer)
 
-def _is_valid_path(path):
+def _is_valid_path(path, urlconf=None):
     """
     Returns True if the given path resolves against the default URL resolver,
     False otherwise.
@@ -139,7 +140,7 @@
     easier, avoiding unnecessarily indented try...except blocks.
     """
     try:
-        urlresolvers.resolve(path)
+        urlresolvers.resolve(path, urlconf)
         return True
     except urlresolvers.Resolver404:
         return False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/middleware/csrf.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,265 @@
+"""
+Cross Site Request Forgery Middleware.
+
+This module provides a middleware that implements protection
+against request forgeries from other sites.
+"""
+
+import itertools
+import re
+import random
+
+from django.conf import settings
+from django.core.urlresolvers import get_callable
+from django.utils.cache import patch_vary_headers
+from django.utils.hashcompat import md5_constructor
+from django.utils.safestring import mark_safe
+
+_POST_FORM_RE = \
+    re.compile(r'(<form\W[^>]*\bmethod\s*=\s*(\'|"|)POST(\'|"|)\b[^>]*>)', re.IGNORECASE)
+
+_HTML_TYPES = ('text/html', 'application/xhtml+xml')
+
+# Use the system (hardware-based) random number generator if it exists.
+if hasattr(random, 'SystemRandom'):
+    randrange = random.SystemRandom().randrange
+else:
+    randrange = random.randrange
+_MAX_CSRF_KEY = 18446744073709551616L     # 2 << 63
+
+def _get_failure_view():
+    """
+    Returns the view to be used for CSRF rejections
+    """
+    return get_callable(settings.CSRF_FAILURE_VIEW)
+
+def _get_new_csrf_key():
+    return md5_constructor("%s%s"
+                % (randrange(0, _MAX_CSRF_KEY), settings.SECRET_KEY)).hexdigest()
+
+def _make_legacy_session_token(session_id):
+    return md5_constructor(settings.SECRET_KEY + session_id).hexdigest()
+
+def get_token(request):
+    """
+    Returns the the CSRF token required for a POST form.
+
+    A side effect of calling this function is to make the the csrf_protect
+    decorator and the CsrfViewMiddleware add a CSRF cookie and a 'Vary: Cookie'
+    header to the outgoing response.  For this reason, you may need to use this
+    function lazily, as is done by the csrf context processor.
+    """
+    request.META["CSRF_COOKIE_USED"] = True
+    return request.META.get("CSRF_COOKIE", None)
+
+class CsrfViewMiddleware(object):
+    """
+    Middleware that requires a present and correct csrfmiddlewaretoken
+    for POST requests that have a CSRF cookie, and sets an outgoing
+    CSRF cookie.
+
+    This middleware should be used in conjunction with the csrf_token template
+    tag.
+    """
+    def process_view(self, request, callback, callback_args, callback_kwargs):
+        if getattr(callback, 'csrf_exempt', False):
+            return None
+
+        if getattr(request, 'csrf_processing_done', False):
+            return None
+
+        reject = lambda s: _get_failure_view()(request, reason=s)
+        def accept():
+            # Avoid checking the request twice by adding a custom attribute to
+            # request.  This will be relevant when both decorator and middleware
+            # are used.
+            request.csrf_processing_done = True
+            return None
+
+        # If the user doesn't have a CSRF cookie, generate one and store it in the
+        # request, so it's available to the view.  We'll store it in a cookie when
+        # we reach the response.
+        try:
+            request.META["CSRF_COOKIE"] = request.COOKIES[settings.CSRF_COOKIE_NAME]
+            cookie_is_new = False
+        except KeyError:
+            # No cookie, so create one.  This will be sent with the next
+            # response.
+            request.META["CSRF_COOKIE"] = _get_new_csrf_key()
+            # Set a flag to allow us to fall back and allow the session id in
+            # place of a CSRF cookie for this request only.
+            cookie_is_new = True
+
+        if request.method == 'POST':
+            if getattr(request, '_dont_enforce_csrf_checks', False):
+                # Mechanism to turn off CSRF checks for test suite.  It comes after
+                # the creation of CSRF cookies, so that everything else continues to
+                # work exactly the same (e.g. cookies are sent etc), but before the
+                # any branches that call reject()
+                return accept()
+
+            if request.is_ajax():
+                # .is_ajax() is based on the presence of X-Requested-With.  In
+                # the context of a browser, this can only be sent if using
+                # XmlHttpRequest.  Browsers implement careful policies for
+                # XmlHttpRequest:
+                #
+                #  * Normally, only same-domain requests are allowed.
+                #
+                #  * Some browsers (e.g. Firefox 3.5 and later) relax this
+                #    carefully:
+                #
+                #    * if it is a 'simple' GET or POST request (which can
+                #      include no custom headers), it is allowed to be cross
+                #      domain.  These requests will not be recognized as AJAX.
+                #
+                #    * if a 'preflight' check with the server confirms that the
+                #      server is expecting and allows the request, cross domain
+                #      requests even with custom headers are allowed. These
+                #      requests will be recognized as AJAX, but can only get
+                #      through when the developer has specifically opted in to
+                #      allowing the cross-domain POST request.
+                #
+                # So in all cases, it is safe to allow these requests through.
+                return accept()
+
+            if request.is_secure():
+                # Strict referer checking for HTTPS
+                referer = request.META.get('HTTP_REFERER')
+                if referer is None:
+                    return reject("Referer checking failed - no Referer.")
+
+                # The following check ensures that the referer is HTTPS,
+                # the domains match and the ports match.  This might be too strict.
+                good_referer = 'https://%s/' % request.get_host()
+                if not referer.startswith(good_referer):
+                    return reject("Referer checking failed - %s does not match %s." %
+                                  (referer, good_referer))
+
+            # If the user didn't already have a CSRF cookie, then fall back to
+            # the Django 1.1 method (hash of session ID), so a request is not
+            # rejected if the form was sent to the user before upgrading to the
+            # Django 1.2 method (session independent nonce)
+            if cookie_is_new:
+                try:
+                    session_id = request.COOKIES[settings.SESSION_COOKIE_NAME]
+                    csrf_token = _make_legacy_session_token(session_id)
+                except KeyError:
+                    # No CSRF cookie and no session cookie. For POST requests,
+                    # we insist on a CSRF cookie, and in this way we can avoid
+                    # all CSRF attacks, including login CSRF.
+                    return reject("No CSRF or session cookie.")
+            else:
+                csrf_token = request.META["CSRF_COOKIE"]
+
+            # check incoming token
+            request_csrf_token = request.POST.get('csrfmiddlewaretoken', None)
+            if request_csrf_token != csrf_token:
+                if cookie_is_new:
+                    # probably a problem setting the CSRF cookie
+                    return reject("CSRF cookie not set.")
+                else:
+                    return reject("CSRF token missing or incorrect.")
+
+        return accept()
+
+    def process_response(self, request, response):
+        if getattr(response, 'csrf_processing_done', False):
+            return response
+
+        # If CSRF_COOKIE is unset, then CsrfViewMiddleware.process_view was
+        # never called, probaby because a request middleware returned a response
+        # (for example, contrib.auth redirecting to a login page).
+        if request.META.get("CSRF_COOKIE") is None:
+            return response
+
+        if not request.META.get("CSRF_COOKIE_USED", False):
+            return response
+
+        # Set the CSRF cookie even if it's already set, so we renew the expiry timer.
+        response.set_cookie(settings.CSRF_COOKIE_NAME,
+                request.META["CSRF_COOKIE"], max_age = 60 * 60 * 24 * 7 * 52,
+                domain=settings.CSRF_COOKIE_DOMAIN)
+        # Content varies with the CSRF cookie, so set the Vary header.
+        patch_vary_headers(response, ('Cookie',))
+        response.csrf_processing_done = True
+        return response
+
+class CsrfResponseMiddleware(object):
+    """
+    DEPRECATED
+    Middleware that post-processes a response to add a csrfmiddlewaretoken.
+
+    This exists for backwards compatibility and as an interim measure until
+    applications are converted to using use the csrf_token template tag
+    instead. It will be removed in Django 1.4.
+    """
+    def __init__(self):
+        import warnings
+        warnings.warn(
+            "CsrfResponseMiddleware and CsrfMiddleware are deprecated; use CsrfViewMiddleware and the template tag instead (see CSRF documentation).",
+            PendingDeprecationWarning
+        )
+
+    def process_response(self, request, response):
+        if getattr(response, 'csrf_exempt', False):
+            return response
+
+        if response['Content-Type'].split(';')[0] in _HTML_TYPES:
+            csrf_token = get_token(request)
+            # If csrf_token is None, we have no token for this request, which probably
+            # means that this is a response from a request middleware.
+            if csrf_token is None:
+                return response
+
+            # ensure we don't add the 'id' attribute twice (HTML validity)
+            idattributes = itertools.chain(("id='csrfmiddlewaretoken'",),
+                                           itertools.repeat(''))
+            def add_csrf_field(match):
+                """Returns the matched <form> tag plus the added <input> element"""
+                return mark_safe(match.group() + "<div style='display:none;'>" + \
+                "<input type='hidden' " + idattributes.next() + \
+                " name='csrfmiddlewaretoken' value='" + csrf_token + \
+                "' /></div>")
+
+            # Modify any POST forms
+            response.content, n = _POST_FORM_RE.subn(add_csrf_field, response.content)
+            if n > 0:
+                # Content varies with the CSRF cookie, so set the Vary header.
+                patch_vary_headers(response, ('Cookie',))
+
+                # Since the content has been modified, any Etag will now be
+                # incorrect.  We could recalculate, but only if we assume that
+                # the Etag was set by CommonMiddleware. The safest thing is just
+                # to delete. See bug #9163
+                del response['ETag']
+        return response
+
+class CsrfMiddleware(object):
+    """
+    Django middleware that adds protection against Cross Site
+    Request Forgeries by adding hidden form fields to POST forms and
+    checking requests for the correct value.
+
+    CsrfMiddleware uses two middleware, CsrfViewMiddleware and
+    CsrfResponseMiddleware, which can be used independently.  It is recommended
+    to use only CsrfViewMiddleware and use the csrf_token template tag in
+    templates for inserting the token.
+    """
+    # We can't just inherit from CsrfViewMiddleware and CsrfResponseMiddleware
+    # because both have process_response methods.
+    def __init__(self):
+        self.response_middleware = CsrfResponseMiddleware()
+        self.view_middleware = CsrfViewMiddleware()
+
+    def process_response(self, request, resp):
+        # We must do the response post-processing first, because that calls
+        # get_token(), which triggers a flag saying that the CSRF cookie needs
+        # to be sent (done in CsrfViewMiddleware.process_response)
+        resp2 = self.response_middleware.process_response(request, resp)
+        return self.view_middleware.process_response(request, resp2)
+
+    def process_view(self, request, callback, callback_args, callback_kwargs):
+        return self.view_middleware.process_view(request, callback, callback_args,
+                                                 callback_kwargs)
+
--- a/web/lib/django/middleware/doc.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/middleware/doc.py	Tue May 25 02:43:45 2010 +0200
@@ -12,7 +12,8 @@
         indicating the view function.  This is used by the documentation module
         to lookup the view function for an arbitrary page.
         """
-        if request.method == 'HEAD' and (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS or (request.user.is_authenticated() and request.user.is_staff)):
+        if request.method == 'HEAD' and (request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS or
+                                         (request.user.is_active and request.user.is_staff)):
             response = http.HttpResponse()
             response['X-View'] = "%s.%s" % (view_func.__module__, view_func.__name__)
             return response
--- a/web/lib/django/shortcuts/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/shortcuts/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -49,6 +49,9 @@
     try:
         return redirect_class(urlresolvers.reverse(to, args=args, kwargs=kwargs))
     except urlresolvers.NoReverseMatch:
+        # If this is a callable, re-raise.
+        if callable(to):
+            raise
         # If this doesn't "feel" like a URL, re-raise.
         if '/' not in to and '.' not in to:
             raise
--- a/web/lib/django/template/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/template/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -48,6 +48,7 @@
 >>> t.render(c)
 u'<html></html>'
 """
+import imp
 import re
 from inspect import getargspec
 
@@ -56,11 +57,13 @@
 from django.utils.importlib import import_module
 from django.utils.itercompat import is_iterable
 from django.utils.functional import curry, Promise
-from django.utils.text import smart_split, unescape_string_literal
+from django.utils.text import smart_split, unescape_string_literal, get_text_list
 from django.utils.encoding import smart_unicode, force_unicode, smart_str
 from django.utils.translation import ugettext as _
 from django.utils.safestring import SafeData, EscapeData, mark_safe, mark_for_escaping
+from django.utils.formats import localize
 from django.utils.html import escape
+from django.utils.module_loading import module_has_submodule
 
 __all__ = ('Template', 'Context', 'RequestContext', 'compile_string')
 
@@ -86,7 +89,7 @@
 
 # what to report as the origin for templates that come from non-loader sources
 # (e.g. strings)
-UNKNOWN_SOURCE="&lt;unknown source&gt;"
+UNKNOWN_SOURCE = '<unknown source>'
 
 # match a variable or block tag and capture the entire tag, including start/end delimiters
 tag_re = re.compile('(%s.*?%s|%s.*?%s|%s.*?%s)' % (re.escape(BLOCK_TAG_START), re.escape(BLOCK_TAG_END),
@@ -103,20 +106,7 @@
 invalid_var_format_string = None
 
 class TemplateSyntaxError(Exception):
-    def __str__(self):
-        try:
-            import cStringIO as StringIO
-        except ImportError:
-            import StringIO
-        output = StringIO.StringIO()
-        output.write(Exception.__str__(self))
-        # Check if we wrapped an exception and print that too.
-        if hasattr(self, 'exc_info'):
-            import traceback
-            output.write('\n\nOriginal ')
-            e = self.exc_info
-            traceback.print_exception(e[0], e[1], e[2], 500, output)
-        return output.getvalue()
+    pass
 
 class TemplateDoesNotExist(Exception):
     pass
@@ -173,9 +163,16 @@
             for subnode in node:
                 yield subnode
 
+    def _render(self, context):
+        return self.nodelist.render(context)
+
     def render(self, context):
         "Display stage -- can be called many times"
-        return self.nodelist.render(context)
+        context.render_context.push()
+        try:
+            return self._render(context)
+        finally:
+            context.render_context.pop()
 
 def compile_string(template_string, origin):
     "Compiles template_string into NodeList ready for rendering"
@@ -280,7 +277,7 @@
                 try:
                     compile_func = self.tags[command]
                 except KeyError:
-                    self.invalid_block_tag(token, command)
+                    self.invalid_block_tag(token, command, parse_until)
                 try:
                     compiled_result = compile_func(self, token)
                 except TemplateSyntaxError, e:
@@ -331,7 +328,9 @@
     def empty_block_tag(self, token):
         raise self.error(token, "Empty block tag")
 
-    def invalid_block_tag(self, token, command):
+    def invalid_block_tag(self, token, command, parse_until=None):
+        if parse_until:
+            raise self.error(token, "Invalid block tag: '%s', expected %s" % (command, get_text_list(["'%s'" % p for p in parse_until])))
         raise self.error(token, "Invalid block tag: '%s'" % command)
 
     def unclosed_block_tag(self, parse_until):
@@ -411,6 +410,20 @@
         "A microparser that parses for a value: some string constant or variable name."
         subject = self.subject
         i = self.pointer
+
+        def next_space_index(subject, i):
+            "Increment pointer until a real space (i.e. a space not within quotes) is encountered"
+            while i < len(subject) and subject[i] not in (' ', '\t'):
+                if subject[i] in ('"', "'"):
+                    c = subject[i]
+                    i += 1
+                    while i < len(subject) and subject[i] != c:
+                        i += 1
+                    if i >= len(subject):
+                        raise TemplateSyntaxError("Searching for value. Unexpected end of string in column %d: %s" % (i, subject))
+                i += 1
+            return i
+
         if i >= len(subject):
             raise TemplateSyntaxError("Searching for value. Expected another value but found end of string: %s" % subject)
         if subject[i] in ('"', "'"):
@@ -421,6 +434,10 @@
             if i >= len(subject):
                 raise TemplateSyntaxError("Searching for value. Unexpected end of string in column %d: %s" % (i, subject))
             i += 1
+
+            # Continue parsing until next "real" space, so that filters are also included
+            i = next_space_index(subject, i)
+
             res = subject[p:i]
             while i < len(subject) and subject[i] in (' ', '\t'):
                 i += 1
@@ -429,15 +446,7 @@
             return res
         else:
             p = i
-            while i < len(subject) and subject[i] not in (' ', '\t'):
-                if subject[i] in ('"', "'"):
-                    c = subject[i]
-                    i += 1
-                    while i < len(subject) and subject[i] != c:
-                        i += 1
-                    if i >= len(subject):
-                        raise TemplateSyntaxError("Searching for value. Unexpected end of string in column %d: %s" % (i, subject))
-                i += 1
+            i = next_space_index(subject, i)
             s = subject[p:i]
             while i < len(subject) and subject[i] in (' ', '\t'):
                 i += 1
@@ -518,8 +527,6 @@
                         var_obj = None
                 elif var is None:
                     raise TemplateSyntaxError("Could not find variable at start of %s." % token)
-                elif var.find(VARIABLE_ATTRIBUTE_SEPARATOR + '_') > -1 or var[0] == '_':
-                    raise TemplateSyntaxError("Variables and attributes may not begin with underscores: '%s'" % var)
                 else:
                     var_obj = Variable(var)
             else:
@@ -531,8 +538,8 @@
                 elif var_arg:
                     args.append((True, Variable(var_arg)))
                 filter_func = parser.find_filter(filter_name)
-                self.args_check(filter_name,filter_func, args)
-                filters.append( (filter_func,args))
+                self.args_check(filter_name, filter_func, args)
+                filters.append((filter_func, args))
             upto = match.end()
         if upto != len(token):
             raise TemplateSyntaxError("Could not parse the remainder: '%s' from '%s'" % (token[upto:], token))
@@ -678,6 +685,8 @@
             except ValueError:
                 # Otherwise we'll set self.lookups so that resolve() knows we're
                 # dealing with a bonafide variable
+                if var.find(VARIABLE_ATTRIBUTE_SEPARATOR + '_') > -1 or var[0] == '_':
+                    raise TemplateSyntaxError("Variables and attributes may not begin with underscores: '%s'" % var)
                 self.lookups = tuple(var.split(VARIABLE_ATTRIBUTE_SEPARATOR))
 
     def resolve(self, context):
@@ -743,6 +752,11 @@
                         current = settings.TEMPLATE_STRING_IF_INVALID
                     else:
                         raise
+            except Exception, e:
+                if getattr(e, 'silent_variable_failure', False):
+                    current = settings.TEMPLATE_STRING_IF_INVALID
+                else:
+                    raise
 
         return current
 
@@ -750,6 +764,7 @@
     # Set this to True for nodes that must be first in the template (although
     # they can be preceded by text nodes.
     must_be_first = False
+    child_nodelists = ('nodelist',)
 
     def render(self, context):
         "Return the node rendered as a string"
@@ -763,8 +778,10 @@
         nodes = []
         if isinstance(self, nodetype):
             nodes.append(self)
-        if hasattr(self, 'nodelist'):
-            nodes.extend(self.nodelist.get_nodes_by_type(nodetype))
+        for attr in self.child_nodelists:
+            nodelist = getattr(self, attr, None)
+            if nodelist:
+                nodes.extend(nodelist.get_nodes_by_type(nodetype))
         return nodes
 
 class NodeList(list):
@@ -801,13 +818,14 @@
 
     def render(self, context):
         return self.s
-    
+
 def _render_value_in_context(value, context):
     """
     Converts any value to a string to become part of a rendered template. This
     means escaping, if required, and conversion to a unicode object. If value
     is a string, it is expected to have already been translated.
     """
+    value = localize(value)
     value = force_unicode(value)
     if (context.autoescape and not isinstance(value, SafeData)) or isinstance(value, EscapeData):
         return escape(value)
@@ -942,8 +960,14 @@
                         else:
                             t = get_template(file_name)
                         self.nodelist = t.nodelist
-                    return self.nodelist.render(context_class(dict,
-                            autoescape=context.autoescape))
+                    new_context = context_class(dict, autoescape=context.autoescape)
+                    # Copy across the CSRF token, if present, because inclusion
+                    # tags are often used for forms, and we need instructions
+                    # for using CSRF protection to be as simple as possible.
+                    csrf_token = context.get('csrf_token', None)
+                    if csrf_token is not None:
+                        new_context['csrf_token'] = csrf_token
+                    return self.nodelist.render(new_context)
 
             compile_func = curry(generic_tag_compiler, params, defaults, getattr(func, "_decorated_function", func).__name__, InclusionNode)
             compile_func.__doc__ = func.__doc__
@@ -951,22 +975,78 @@
             return func
         return dec
 
-def get_library(module_name):
-    lib = libraries.get(module_name, None)
+def import_library(taglib_module):
+    """Load a template tag library module.
+
+    Verifies that the library contains a 'register' attribute, and
+    returns that attribute as the representation of the library
+    """
+    app_path, taglib = taglib_module.rsplit('.',1)
+    app_module = import_module(app_path)
+    try:
+        mod = import_module(taglib_module)
+    except ImportError, e:
+        # If the ImportError is because the taglib submodule does not exist, that's not
+        # an error that should be raised. If the submodule exists and raised an ImportError
+        # on the attempt to load it, that we want to raise.
+        if not module_has_submodule(app_module, taglib):
+            return None
+        else:
+            raise InvalidTemplateLibrary("ImportError raised loading %s: %s" % (taglib_module, e))
+    try:
+        return mod.register
+    except AttributeError:
+        raise InvalidTemplateLibrary("Template library %s does not have a variable named 'register'" % taglib_module)
+
+templatetags_modules = []
+
+def get_templatetags_modules():
+    """Return the list of all available template tag modules.
+
+    Caches the result for faster access.
+    """
+    global templatetags_modules
+    if not templatetags_modules:
+        _templatetags_modules = []
+        # Populate list once per thread.
+        for app_module in ['django'] + list(settings.INSTALLED_APPS):
+            try:
+                templatetag_module = '%s.templatetags' % app_module
+                import_module(templatetag_module)
+                _templatetags_modules.append(templatetag_module)
+            except ImportError:
+                continue
+        templatetags_modules = _templatetags_modules
+    return templatetags_modules
+
+def get_library(library_name):
+    """
+    Load the template library module with the given name.
+
+    If library is not already loaded loop over all templatetags modules to locate it.
+
+    {% load somelib %} and {% load someotherlib %} loops twice.
+
+    Subsequent loads eg. {% load somelib %} in the same process will grab the cached
+    module from libraries.
+    """
+    lib = libraries.get(library_name, None)
     if not lib:
-        try:
-            mod = import_module(module_name)
-        except ImportError, e:
-            raise InvalidTemplateLibrary("Could not load template library from %s, %s" % (module_name, e))
-        try:
-            lib = mod.register
-            libraries[module_name] = lib
-        except AttributeError:
-            raise InvalidTemplateLibrary("Template library %s does not have a variable named 'register'" % module_name)
+        templatetags_modules = get_templatetags_modules()
+        tried_modules = []
+        for module in templatetags_modules:
+            taglib_module = '%s.%s' % (module, library_name)
+            tried_modules.append(taglib_module)
+            lib = import_library(taglib_module)
+            if lib:
+                libraries[library_name] = lib
+                break
+        if not lib:
+            raise InvalidTemplateLibrary("Template library %s not found, tried %s" % (library_name, ','.join(tried_modules)))
     return lib
 
-def add_to_builtins(module_name):
-    builtins.append(get_library(module_name))
+def add_to_builtins(module):
+    builtins.append(import_library(module))
 
 add_to_builtins('django.template.defaulttags')
 add_to_builtins('django.template.defaultfilters')
--- a/web/lib/django/template/context.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/template/context.py	Tue May 25 02:43:45 2010 +0200
@@ -1,51 +1,53 @@
 from django.core.exceptions import ImproperlyConfigured
 from django.utils.importlib import import_module
 
+# Cache of actual callables.
 _standard_context_processors = None
+# We need the CSRF processor no matter what the user has in their settings,
+# because otherwise it is a security vulnerability, and we can't afford to leave
+# this to human error or failure to read migration instructions.
+_builtin_context_processors =  ('django.core.context_processors.csrf',)
 
 class ContextPopException(Exception):
     "pop() has been called more times than push()"
     pass
 
-class Context(object):
-    "A stack container for variable context"
-    def __init__(self, dict_=None, autoescape=True, current_app=None):
+class BaseContext(object):
+    def __init__(self, dict_=None):
         dict_ = dict_ or {}
         self.dicts = [dict_]
-        self.autoescape = autoescape
-        self.current_app = current_app
 
     def __repr__(self):
         return repr(self.dicts)
 
     def __iter__(self):
-        for d in self.dicts:
+        for d in reversed(self.dicts):
             yield d
 
     def push(self):
         d = {}
-        self.dicts = [d] + self.dicts
+        self.dicts.append(d)
         return d
 
     def pop(self):
         if len(self.dicts) == 1:
             raise ContextPopException
-        return self.dicts.pop(0)
+        return self.dicts.pop()
 
     def __setitem__(self, key, value):
         "Set a variable in the current context"
-        self.dicts[0][key] = value
+        self.dicts[-1][key] = value
 
     def __getitem__(self, key):
         "Get a variable's value, starting at the current context and going upward"
-        for d in self.dicts:
+        for d in reversed(self.dicts):
             if key in d:
                 return d[key]
         raise KeyError(key)
 
     def __delitem__(self, key):
         "Delete a variable from the current context"
-        del self.dicts[0][key]
+        del self.dicts[-1][key]
 
     def has_key(self, key):
         for d in self.dicts:
@@ -53,21 +55,58 @@
                 return True
         return False
 
-    __contains__ = has_key
+    def __contains__(self, key):
+        return self.has_key(key)
 
     def get(self, key, otherwise=None):
-        for d in self.dicts:
+        for d in reversed(self.dicts):
             if key in d:
                 return d[key]
         return otherwise
 
+class Context(BaseContext):
+    "A stack container for variable context"
+    def __init__(self, dict_=None, autoescape=True, current_app=None):
+        self.autoescape = autoescape
+        self.current_app = current_app
+        self.render_context = RenderContext()
+        super(Context, self).__init__(dict_)
+
     def update(self, other_dict):
         "Like dict.update(). Pushes an entire dictionary's keys and values onto the context."
         if not hasattr(other_dict, '__getitem__'):
             raise TypeError('other_dict must be a mapping (dictionary-like) object.')
-        self.dicts = [other_dict] + self.dicts
+        self.dicts.append(other_dict)
         return other_dict
 
+class RenderContext(BaseContext):
+    """
+    A stack container for storing Template state.
+
+    RenderContext simplifies the implementation of template Nodes by providing a
+    safe place to store state between invocations of a node's `render` method.
+
+    The RenderContext also provides scoping rules that are more sensible for
+    'template local' variables. The render context stack is pushed before each
+    template is rendered, creating a fresh scope with nothing in it. Name
+    resolution fails if a variable is not found at the top of the RequestContext
+    stack. Thus, variables are local to a specific template and don't affect the
+    rendering of other templates as they would if they were stored in the normal
+    template context.
+    """
+    def __iter__(self):
+        for d in self.dicts[-1]:
+            yield d
+
+    def has_key(self, key):
+        return key in self.dicts[-1]
+
+    def get(self, key, otherwise=None):
+        d = self.dicts[-1]
+        if key in d:
+            return d[key]
+        return otherwise
+
 # This is a function rather than module-level procedural code because we only
 # want it to execute if somebody uses RequestContext.
 def get_standard_processors():
@@ -75,7 +114,10 @@
     global _standard_context_processors
     if _standard_context_processors is None:
         processors = []
-        for path in settings.TEMPLATE_CONTEXT_PROCESSORS:
+        collect = []
+        collect.extend(_builtin_context_processors)
+        collect.extend(settings.TEMPLATE_CONTEXT_PROCESSORS)
+        for path in collect:
             i = path.rfind('.')
             module, attr = path[:i], path[i+1:]
             try:
--- a/web/lib/django/template/debug.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/template/debug.py	Tue May 25 02:43:45 2010 +0200
@@ -2,6 +2,7 @@
 from django.utils.encoding import force_unicode
 from django.utils.html import escape
 from django.utils.safestring import SafeData, EscapeData
+from django.utils.formats import localize
 
 class DebugLexer(Lexer):
     def __init__(self, template_string, origin):
@@ -75,16 +76,19 @@
             raise
         except Exception, e:
             from sys import exc_info
-            wrapped = TemplateSyntaxError(u'Caught an exception while rendering: %s' % force_unicode(e, errors='replace'))
+            wrapped = TemplateSyntaxError(u'Caught %s while rendering: %s' %
+                (e.__class__.__name__, force_unicode(e, errors='replace')))
             wrapped.source = node.source
             wrapped.exc_info = exc_info()
-            raise wrapped
+            raise wrapped, None, wrapped.exc_info[2]
         return result
 
 class DebugVariableNode(VariableNode):
     def render(self, context):
         try:
-            output = force_unicode(self.filter_expression.resolve(context))
+            output = self.filter_expression.resolve(context)
+            output = localize(output)
+            output = force_unicode(output)
         except TemplateSyntaxError, e:
             if not hasattr(e, 'source'):
                 e.source = self.source
--- a/web/lib/django/template/defaultfilters.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/template/defaultfilters.py	Tue May 25 02:43:45 2010 +0200
@@ -1,20 +1,16 @@
 """Default variable filters."""
 
 import re
-
-try:
-    from decimal import Decimal, InvalidOperation, ROUND_HALF_UP
-except ImportError:
-    from django.utils._decimal import Decimal, InvalidOperation, ROUND_HALF_UP
-
+from decimal import Decimal, InvalidOperation, ROUND_HALF_UP
 import random as random_module
 try:
     from functools import wraps
 except ImportError:
-    from django.utils.functional import wraps  # Python 2.3, 2.4 fallback.
+    from django.utils.functional import wraps  # Python 2.4 fallback.
 
 from django.template import Variable, Library
 from django.conf import settings
+from django.utils import formats
 from django.utils.translation import ugettext, ungettext
 from django.utils.encoding import force_unicode, iri_to_uri
 from django.utils.safestring import mark_safe, SafeData
@@ -68,22 +64,22 @@
 capfirst = stringfilter(capfirst)
 
 _base_js_escapes = (
-    ('\\', r'\x5C'),
-    ('\'', r'\x27'),
-    ('"', r'\x22'),
-    ('>', r'\x3E'),
-    ('<', r'\x3C'),
-    ('&', r'\x26'),
-    ('=', r'\x3D'),
-    ('-', r'\x2D'),
-    (';', r'\x3B'),
+    ('\\', r'\u005C'),
+    ('\'', r'\u0027'),
+    ('"', r'\u0022'),
+    ('>', r'\u003E'),
+    ('<', r'\u003C'),
+    ('&', r'\u0026'),
+    ('=', r'\u003D'),
+    ('-', r'\u002D'),
+    (';', r'\u003B'),
     (u'\u2028', r'\u2028'),
     (u'\u2029', r'\u2029')
 )
 
 # Escape every ASCII character with a value less than 32.
 _js_escapes = (_base_js_escapes +
-               tuple([('%c' % z, '\\x%02X' % z) for z in range(32)]))
+               tuple([('%c' % z, '\\u%04X' % z) for z in range(32)]))
 
 def escapejs(value):
     """Hex encodes characters for use in JavaScript strings."""
@@ -162,18 +158,18 @@
 
     try:
         m = int(d) - d
-    except (OverflowError, InvalidOperation):
+    except (ValueError, OverflowError, InvalidOperation):
         return input_val
 
     if not m and p < 0:
-        return mark_safe(u'%d' % (int(d)))
+        return mark_safe(formats.number_format(u'%d' % (int(d)), 0))
 
     if p == 0:
         exp = Decimal(1)
     else:
         exp = Decimal('1.0') / (Decimal(10) ** abs(p))
     try:
-        return mark_safe(u'%s' % str(d.quantize(exp, ROUND_HALF_UP)))
+        return mark_safe(formats.number_format(u'%s' % str(d.quantize(exp, ROUND_HALF_UP)), abs(p)))
     except InvalidOperation:
         return input_val
 floatformat.is_safe = True
@@ -249,7 +245,8 @@
 
 def title(value):
     """Converts a string into titlecase."""
-    return re.sub("([a-z])'([A-Z])", lambda m: m.group(0).lower(), value.title())
+    t = re.sub("([a-z])'([A-Z])", lambda m: m.group(0).lower(), value.title())
+    return re.sub("\d([A-Z])", lambda m: m.group(0).lower(), t)
 title.is_safe = True
 title = stringfilter(title)
 
@@ -649,7 +646,13 @@
 
 def add(value, arg):
     """Adds the arg to the value."""
-    return int(value) + int(arg)
+    try:
+        return int(value) + int(arg)
+    except (ValueError, TypeError):
+        try:
+            return value + arg
+        except:
+            return value
 add.is_safe = False
 
 def get_digit(value, arg):
@@ -684,22 +687,28 @@
     if arg is None:
         arg = settings.DATE_FORMAT
     try:
-        return format(value, arg)
+        return formats.date_format(value, arg)
     except AttributeError:
-        return ''
+        try:
+            return format(value, arg)
+        except AttributeError:
+            return ''
 date.is_safe = False
 
 def time(value, arg=None):
     """Formats a time according to the given format."""
-    from django.utils.dateformat import time_format
+    from django.utils import dateformat
     if value in (None, u''):
         return u''
     if arg is None:
         arg = settings.TIME_FORMAT
     try:
-        return time_format(value, arg)
+        return formats.time_format(value, arg)
     except AttributeError:
-        return ''
+        try:
+            return dateformat.time_format(value, arg)
+        except AttributeError:
+            return ''
 time.is_safe = False
 
 def timesince(value, arg=None):
@@ -791,7 +800,7 @@
     """
     try:
         bytes = float(bytes)
-    except TypeError:
+    except (TypeError,ValueError,UnicodeDecodeError):
         return u"0 bytes"
 
     if bytes < 1024:
--- a/web/lib/django/template/defaulttags.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/template/defaulttags.py	Tue May 25 02:43:45 2010 +0200
@@ -2,21 +2,19 @@
 
 import sys
 import re
-from itertools import cycle as itertools_cycle
-try:
-    reversed
-except NameError:
-    from django.utils.itercompat import reversed     # Python 2.3 fallback
+from itertools import groupby, cycle as itertools_cycle
 
 from django.template import Node, NodeList, Template, Context, Variable
 from django.template import TemplateSyntaxError, VariableDoesNotExist, BLOCK_TAG_START, BLOCK_TAG_END, VARIABLE_TAG_START, VARIABLE_TAG_END, SINGLE_BRACE_START, SINGLE_BRACE_END, COMMENT_TAG_START, COMMENT_TAG_END
 from django.template import get_library, Library, InvalidTemplateLibrary
+from django.template.smartif import IfParser, Literal
 from django.conf import settings
 from django.utils.encoding import smart_str, smart_unicode
-from django.utils.itercompat import groupby
 from django.utils.safestring import mark_safe
 
 register = Library()
+# Regex for token keyword arguments
+kwarg_re = re.compile(r"(?:(\w+)=)?(.+)")
 
 class AutoEscapeControlNode(Node):
     """Implements the actions of the autoescape tag."""
@@ -37,13 +35,33 @@
     def render(self, context):
         return ''
 
+class CsrfTokenNode(Node):
+    def render(self, context):
+        csrf_token = context.get('csrf_token', None)
+        if csrf_token:
+            if csrf_token == 'NOTPROVIDED':
+                return mark_safe(u"")
+            else:
+                return mark_safe(u"<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='%s' /></div>" % (csrf_token))
+        else:
+            # It's very probable that the token is missing because of
+            # misconfiguration, so we raise a warning
+            from django.conf import settings
+            if settings.DEBUG:
+                import warnings
+                warnings.warn("A {% csrf_token %} was used in a template, but the context did not provide the value.  This is usually caused by not using RequestContext.")
+            return u''
+
 class CycleNode(Node):
     def __init__(self, cyclevars, variable_name=None):
-        self.cycle_iter = itertools_cycle(cyclevars)
+        self.cyclevars = cyclevars
         self.variable_name = variable_name
 
     def render(self, context):
-        value = self.cycle_iter.next().resolve(context)
+        if self not in context.render_context:
+            context.render_context[self] = itertools_cycle(self.cyclevars)
+        cycle_iter = context.render_context[self]
+        value = cycle_iter.next().resolve(context)
         if self.variable_name:
             context[self.variable_name] = value
         return value
@@ -80,6 +98,8 @@
         return u''
 
 class ForNode(Node):
+    child_nodelists = ('nodelist_loop', 'nodelist_empty')
+
     def __init__(self, loopvars, sequence, is_reversed, nodelist_loop, nodelist_empty=None):
         self.loopvars, self.sequence = loopvars, sequence
         self.is_reversed = is_reversed
@@ -101,14 +121,6 @@
         for node in self.nodelist_empty:
             yield node
 
-    def get_nodes_by_type(self, nodetype):
-        nodes = []
-        if isinstance(self, nodetype):
-            nodes.append(self)
-        nodes.extend(self.nodelist_loop.get_nodes_by_type(nodetype))
-        nodes.extend(self.nodelist_empty.get_nodes_by_type(nodetype))
-        return nodes
-
     def render(self, context):
         if 'forloop' in context:
             parentloop = context['forloop']
@@ -164,6 +176,8 @@
         return nodelist.render(context)
 
 class IfChangedNode(Node):
+    child_nodelists = ('nodelist_true', 'nodelist_false')
+
     def __init__(self, nodelist_true, nodelist_false, *varlist):
         self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
         self._last_seen = None
@@ -194,6 +208,8 @@
         return ''
 
 class IfEqualNode(Node):
+    child_nodelists = ('nodelist_true', 'nodelist_false')
+
     def __init__(self, var1, var2, nodelist_true, nodelist_false, negate):
         self.var1, self.var2 = var1, var2
         self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
@@ -210,10 +226,11 @@
         return self.nodelist_false.render(context)
 
 class IfNode(Node):
-    def __init__(self, bool_exprs, nodelist_true, nodelist_false, link_type):
-        self.bool_exprs = bool_exprs
+    child_nodelists = ('nodelist_true', 'nodelist_false')
+
+    def __init__(self, var, nodelist_true, nodelist_false=None):
         self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
-        self.link_type = link_type
+        self.var = var
 
     def __repr__(self):
         return "<If node>"
@@ -224,37 +241,16 @@
         for node in self.nodelist_false:
             yield node
 
-    def get_nodes_by_type(self, nodetype):
-        nodes = []
-        if isinstance(self, nodetype):
-            nodes.append(self)
-        nodes.extend(self.nodelist_true.get_nodes_by_type(nodetype))
-        nodes.extend(self.nodelist_false.get_nodes_by_type(nodetype))
-        return nodes
+    def render(self, context):
+        try:
+            var = self.var.eval(context)
+        except VariableDoesNotExist:
+            var = None
 
-    def render(self, context):
-        if self.link_type == IfNode.LinkTypes.or_:
-            for ifnot, bool_expr in self.bool_exprs:
-                try:
-                    value = bool_expr.resolve(context, True)
-                except VariableDoesNotExist:
-                    value = None
-                if (value and not ifnot) or (ifnot and not value):
-                    return self.nodelist_true.render(context)
-            return self.nodelist_false.render(context)
+        if var:
+            return self.nodelist_true.render(context)
         else:
-            for ifnot, bool_expr in self.bool_exprs:
-                try:
-                    value = bool_expr.resolve(context, True)
-                except VariableDoesNotExist:
-                    value = None
-                if not ((value and not ifnot) or (ifnot and not value)):
-                    return self.nodelist_false.render(context)
-            return self.nodelist_true.render(context)
-
-    class LinkTypes:
-        and_ = 0,
-        or_ = 1
+            return self.nodelist_false.render(context)
 
 class RegroupNode(Node):
     def __init__(self, target, expression, var_name):
@@ -437,10 +433,10 @@
     """
     args = token.contents.split()
     if len(args) != 2:
-        raise TemplateSyntaxError("'Autoescape' tag requires exactly one argument.")
+        raise TemplateSyntaxError("'autoescape' tag requires exactly one argument.")
     arg = args[1]
     if arg not in (u'on', u'off'):
-        raise TemplateSyntaxError("'Autoescape' argument should be 'on' or 'off'")
+        raise TemplateSyntaxError("'autoescape' argument should be 'on' or 'off'")
     nodelist = parser.parse(('endautoescape',))
     parser.delete_first_token()
     return AutoEscapeControlNode((arg == 'on'), nodelist)
@@ -523,6 +519,10 @@
     return node
 cycle = register.tag(cycle)
 
+def csrf_token(parser, token):
+    return CsrfTokenNode()
+register.tag(csrf_token)
+
 def debug(parser, token):
     """
     Outputs a whole load of debugging information, including the current
@@ -593,13 +593,12 @@
 
         {% filter force_escape %}
             {% firstof var1 var2 var3 "fallback value" %}
-	{% endfilter %}
+        {% endfilter %}
 
     """
     bits = token.split_contents()[1:]
     if len(bits) < 1:
-        raise TemplateSyntaxError("'firstof' statement requires at least one"
-                                  " argument")
+        raise TemplateSyntaxError("'firstof' statement requires at least one argument")
     return FirstOfNode([parser.compile_filter(bit) for bit in bits])
 firstof = register.tag(firstof)
 
@@ -698,7 +697,7 @@
 def do_ifequal(parser, token, negate):
     bits = list(token.split_contents())
     if len(bits) != 3:
-        raise TemplateSyntaxError, "%r takes two arguments" % bits[0]
+        raise TemplateSyntaxError("%r takes two arguments" % bits[0])
     end_tag = 'end' + bits[0]
     nodelist_true = parser.parse(('else', end_tag))
     token = parser.next_token()
@@ -740,6 +739,27 @@
     return do_ifequal(parser, token, True)
 ifnotequal = register.tag(ifnotequal)
 
+class TemplateLiteral(Literal):
+    def __init__(self, value, text):
+        self.value = value
+        self.text = text # for better error messages
+
+    def display(self):
+        return self.text
+
+    def eval(self, context):
+        return self.value.resolve(context, ignore_failures=True)
+
+class TemplateIfParser(IfParser):
+    error_class = TemplateSyntaxError
+
+    def __init__(self, parser, *args, **kwargs):
+        self.template_parser = parser
+        return super(TemplateIfParser, self).__init__(*args, **kwargs)
+
+    def create_var(self, value):
+        return TemplateLiteral(self.template_parser.compile_filter(value), value)
+
 #@register.tag(name="if")
 def do_if(parser, token):
     """
@@ -784,47 +804,21 @@
             There are some athletes and absolutely no coaches.
         {% endif %}
 
-    ``if`` tags do not allow ``and`` and ``or`` clauses with the same tag,
-    because the order of logic would be ambigous. For example, this is
-    invalid::
+    Comparison operators are also available, and the use of filters is also
+    allowed, for example:
 
-        {% if athlete_list and coach_list or cheerleader_list %}
+        {% if articles|length >= 5 %}...{% endif %}
 
-    If you need to combine ``and`` and ``or`` to do advanced logic, just use
-    nested if tags. For example::
+    Arguments and operators _must_ have a space between them, so
+    ``{% if 1>2 %}`` is not a valid if tag.
 
-        {% if athlete_list %}
-            {% if coach_list or cheerleader_list %}
-                We have athletes, and either coaches or cheerleaders!
-            {% endif %}
-        {% endif %}
+    All supported operators are: ``or``, ``and``, ``in``, ``not in``
+    ``==`` (or ``=``), ``!=``, ``>``, ``>=``, ``<`` and ``<=``.
+
+    Operator precedence follows Python.
     """
-    bits = token.contents.split()
-    del bits[0]
-    if not bits:
-        raise TemplateSyntaxError("'if' statement requires at least one argument")
-    # Bits now looks something like this: ['a', 'or', 'not', 'b', 'or', 'c.d']
-    bitstr = ' '.join(bits)
-    boolpairs = bitstr.split(' and ')
-    boolvars = []
-    if len(boolpairs) == 1:
-        link_type = IfNode.LinkTypes.or_
-        boolpairs = bitstr.split(' or ')
-    else:
-        link_type = IfNode.LinkTypes.and_
-        if ' or ' in bitstr:
-            raise TemplateSyntaxError, "'if' tags can't mix 'and' and 'or'"
-    for boolpair in boolpairs:
-        if ' ' in boolpair:
-            try:
-                not_, boolvar = boolpair.split()
-            except ValueError:
-                raise TemplateSyntaxError, "'if' statement improperly formatted"
-            if not_ != 'not':
-                raise TemplateSyntaxError, "Expected 'not' in if statement"
-            boolvars.append((True, parser.compile_filter(boolvar)))
-        else:
-            boolvars.append((False, parser.compile_filter(boolpair)))
+    bits = token.split_contents()[1:]
+    var = TemplateIfParser(parser, bits).parse()
     nodelist_true = parser.parse(('else', 'endif'))
     token = parser.next_token()
     if token.contents == 'else':
@@ -832,7 +826,7 @@
         parser.delete_first_token()
     else:
         nodelist_false = NodeList()
-    return IfNode(boolvars, nodelist_true, nodelist_false, link_type)
+    return IfNode(var, nodelist_true, nodelist_false)
 do_if = register.tag("if", do_if)
 
 #@register.tag
@@ -920,7 +914,7 @@
     for taglib in bits[1:]:
         # add the library to the parser
         try:
-            lib = get_library("django.templatetags.%s" % taglib)
+            lib = get_library(taglib)
             parser.add_library(lib)
         except InvalidTemplateLibrary, e:
             raise TemplateSyntaxError("'%s' is not a valid tag library: %s" %
@@ -942,7 +936,7 @@
     """
     bits = token.contents.split('"')
     if len(bits) != 3:
-        raise TemplateSyntaxError, "'now' statement takes one argument"
+        raise TemplateSyntaxError("'now' statement takes one argument")
     format_string = bits[1]
     return NowNode(format_string)
 now = register.tag(now)
@@ -996,7 +990,7 @@
     """
     firstbits = token.contents.split(None, 3)
     if len(firstbits) != 4:
-        raise TemplateSyntaxError, "'regroup' tag takes five arguments"
+        raise TemplateSyntaxError("'regroup' tag takes five arguments")
     target = parser.compile_filter(firstbits[1])
     if firstbits[2] != 'by':
         raise TemplateSyntaxError("second argument to 'regroup' tag must be 'by'")
@@ -1066,7 +1060,7 @@
     """
     bits = token.contents.split()
     if len(bits) != 2:
-        raise TemplateSyntaxError, "'templatetag' statement takes one argument"
+        raise TemplateSyntaxError("'templatetag' statement takes one argument")
     tag = bits[1]
     if tag not in TemplateTagNode.mapping:
         raise TemplateSyntaxError("Invalid templatetag argument: '%s'."
@@ -1082,7 +1076,11 @@
     This is a way to define links that aren't tied to a particular URL
     configuration::
 
-        {% url path.to.some_view arg1,arg2,name1=value1 %}
+        {% url path.to.some_view arg1 arg2 %}
+
+        or
+
+        {% url path.to.some_view name1=value1 name2=value2 %}
 
     The first argument is a path to a view. It can be an absolute python path
     or just ``app_name.view_name`` without the project name if the view is
@@ -1114,21 +1112,54 @@
     args = []
     kwargs = {}
     asvar = None
+    bits = bits[2:]
+    if len(bits) >= 2 and bits[-2] == 'as':
+        asvar = bits[-1]
+        bits = bits[:-2]
 
-    if len(bits) > 2:
-        bits = iter(bits[2:])
+    # Backwards compatibility: check for the old comma separated format
+    # {% url urlname arg1,arg2 %}
+    # Initial check - that the first space separated bit has a comma in it
+    if bits and ',' in bits[0]:
+        check_old_format = True
+        # In order to *really* be old format, there must be a comma
+        # in *every* space separated bit, except the last.
+        for bit in bits[1:-1]:
+            if ',' not in bit:
+                # No comma in this bit. Either the comma we found
+                # in bit 1 was a false positive (e.g., comma in a string),
+                # or there is a syntax problem with missing commas
+                check_old_format = False
+                break
+    else:
+        # No comma found - must be new format.
+        check_old_format = False
+
+    if check_old_format:
+        # Confirm that this is old format by trying to parse the first
+        # argument. An exception will be raised if the comma is
+        # unexpected (i.e. outside of a static string).
+        match = kwarg_re.match(bits[0])
+        if match:
+            value = match.groups()[1]
+            try:
+                parser.compile_filter(value)
+            except TemplateSyntaxError:
+                bits = ''.join(bits).split(',')
+
+    # Now all the bits are parsed into new format,
+    # process them as template vars
+    if len(bits):
         for bit in bits:
-            if bit == 'as':
-                asvar = bits.next()
-                break
+            match = kwarg_re.match(bit)
+            if not match:
+                raise TemplateSyntaxError("Malformed arguments to url tag")
+            name, value = match.groups()
+            if name:
+                kwargs[name] = parser.compile_filter(value)
             else:
-                for arg in bit.split(","):
-                    if '=' in arg:
-                        k, v = arg.split('=', 1)
-                        k = k.strip()
-                        kwargs[k] = parser.compile_filter(v)
-                    elif arg:
-                        args.append(parser.compile_filter(arg))
+                args.append(parser.compile_filter(value))
+
     return URLNode(viewname, args, kwargs, asvar)
 url = register.tag(url)
 
--- a/web/lib/django/template/loader.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/template/loader.py	Tue May 25 02:43:45 2010 +0200
@@ -12,6 +12,11 @@
 # might be shown to the user for debugging purposes, so it should identify where
 # the template was loaded from.
 #
+# A loader may return an already-compiled template instead of the actual
+# template source. In that case the path returned should be None, since the
+# path information is associated with the template during the compilation,
+# which has already been done.
+#
 # Each loader should have an "is_usable" attribute set. This is a boolean that
 # specifies whether the loader can be used in this Python installation. Each
 # loader is responsible for setting this when it's initialized.
@@ -27,6 +32,44 @@
 
 template_source_loaders = None
 
+class BaseLoader(object):
+    is_usable = False
+
+    def __init__(self, *args, **kwargs):
+        pass
+
+    def __call__(self, template_name, template_dirs=None):
+        return self.load_template(template_name, template_dirs)
+
+    def load_template(self, template_name, template_dirs=None):
+        source, display_name = self.load_template_source(template_name, template_dirs)
+        origin = make_origin(display_name, self.load_template_source, template_name, template_dirs)
+        try:
+            template = get_template_from_string(source, origin, template_name)
+            return template, None
+        except TemplateDoesNotExist:
+            # If compiling the template we found raises TemplateDoesNotExist, back off to
+            # returning the source and display name for the template we were asked to load.
+            # This allows for correct identification (later) of the actual template that does
+            # not exist.
+            return source, display_name
+
+    def load_template_source(self, template_name, template_dirs=None):
+        """
+        Returns a tuple containing the source and origin for the given template
+        name.
+
+        """
+        raise NotImplementedError
+
+    def reset(self):
+        """
+        Resets any state maintained by the loader instance (e.g., cached
+        templates or cached loader modules).
+
+        """
+        pass
+
 class LoaderOrigin(Origin):
     def __init__(self, display_name, loader, name, dirs):
         super(LoaderOrigin, self).__init__(display_name)
@@ -36,34 +79,55 @@
         return self.loader(self.loadname, self.dirs)[0]
 
 def make_origin(display_name, loader, name, dirs):
-    if settings.TEMPLATE_DEBUG:
+    if settings.TEMPLATE_DEBUG and display_name:
         return LoaderOrigin(display_name, loader, name, dirs)
     else:
         return None
 
-def find_template_source(name, dirs=None):
+def find_template_loader(loader):
+    if isinstance(loader, (tuple, list)):
+        loader, args = loader[0], loader[1:]
+    else:
+        args = []
+    if isinstance(loader, basestring):
+        module, attr = loader.rsplit('.', 1)
+        try:
+            mod = import_module(module)
+        except ImportError, e:
+            raise ImproperlyConfigured('Error importing template source loader %s: "%s"' % (loader, e))
+        try:
+            TemplateLoader = getattr(mod, attr)
+        except AttributeError, e:
+            raise ImproperlyConfigured('Error importing template source loader %s: "%s"' % (loader, e))
+
+        if hasattr(TemplateLoader, 'load_template_source'):
+            func = TemplateLoader(*args)
+        else:
+            # Try loading module the old way - string is full path to callable
+            if args:
+                raise ImproperlyConfigured("Error importing template source loader %s - can't pass arguments to function-based loader." % loader)
+            func = TemplateLoader
+
+        if not func.is_usable:
+            import warnings
+            warnings.warn("Your TEMPLATE_LOADERS setting includes %r, but your Python installation doesn't support that type of template loading. Consider removing that line from TEMPLATE_LOADERS." % loader)
+            return None
+        else:
+            return func
+    else:
+        raise ImproperlyConfigured('Loader does not define a "load_template" callable template source loader')
+
+def find_template(name, dirs=None):
     # Calculate template_source_loaders the first time the function is executed
     # because putting this logic in the module-level namespace may cause
     # circular import errors. See Django ticket #1292.
     global template_source_loaders
     if template_source_loaders is None:
         loaders = []
-        for path in settings.TEMPLATE_LOADERS:
-            i = path.rfind('.')
-            module, attr = path[:i], path[i+1:]
-            try:
-                mod = import_module(module)
-            except ImportError, e:
-                raise ImproperlyConfigured, 'Error importing template source loader %s: "%s"' % (module, e)
-            try:
-                func = getattr(mod, attr)
-            except AttributeError:
-                raise ImproperlyConfigured, 'Module "%s" does not define a "%s" callable template source loader' % (module, attr)
-            if not func.is_usable:
-                import warnings
-                warnings.warn("Your TEMPLATE_LOADERS setting includes %r, but your Python installation doesn't support that type of template loading. Consider removing that line from TEMPLATE_LOADERS." % path)
-            else:
-                loaders.append(func)
+        for loader_name in settings.TEMPLATE_LOADERS:
+            loader = find_template_loader(loader_name)
+            if loader is not None:
+                loaders.append(loader)
         template_source_loaders = tuple(loaders)
     for loader in template_source_loaders:
         try:
@@ -71,15 +135,29 @@
             return (source, make_origin(display_name, loader, name, dirs))
         except TemplateDoesNotExist:
             pass
-    raise TemplateDoesNotExist, name
+    raise TemplateDoesNotExist(name)
+
+def find_template_source(name, dirs=None):
+    # For backward compatibility
+    import warnings
+    warnings.warn(
+        "`django.template.loaders.find_template_source` is deprecated; use `django.template.loaders.find_template` instead.",
+        PendingDeprecationWarning
+    )
+    template, origin = find_template(name, dirs)
+    if hasattr(template, 'render'):
+        raise Exception("Found a compiled template that is incompatible with the deprecated `django.template.loaders.find_template_source` function.")
+    return template, origin
 
 def get_template(template_name):
     """
     Returns a compiled Template object for the given template name,
     handling template inheritance recursively.
     """
-    source, origin = find_template_source(template_name)
-    template = get_template_from_string(source, origin, template_name)
+    template, origin = find_template(template_name)
+    if not hasattr(template, 'render'):
+        # template needs to be compiled
+        template = get_template_from_string(template, origin, template_name)
     return template
 
 def get_template_from_string(source, origin=None, name=None):
@@ -115,6 +193,6 @@
         except TemplateDoesNotExist:
             continue
     # If we get here, none of the templates could be loaded
-    raise TemplateDoesNotExist, ', '.join(template_name_list)
+    raise TemplateDoesNotExist(', '.join(template_name_list))
 
 add_to_builtins('django.template.loader_tags')
--- a/web/lib/django/template/loader_tags.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/template/loader_tags.py	Tue May 25 02:43:45 2010 +0200
@@ -1,14 +1,43 @@
 from django.template import TemplateSyntaxError, TemplateDoesNotExist, Variable
 from django.template import Library, Node, TextNode
-from django.template.loader import get_template, get_template_from_string, find_template_source
+from django.template.loader import get_template
 from django.conf import settings
 from django.utils.safestring import mark_safe
 
 register = Library()
 
+BLOCK_CONTEXT_KEY = 'block_context'
+
 class ExtendsError(Exception):
     pass
 
+class BlockContext(object):
+    def __init__(self):
+        # Dictionary of FIFO queues.
+        self.blocks = {}
+
+    def add_blocks(self, blocks):
+        for name, block in blocks.iteritems():
+            if name in self.blocks:
+                self.blocks[name].insert(0, block)
+            else:
+                self.blocks[name] = [block]
+
+    def pop(self, name):
+        try:
+            return self.blocks[name].pop()
+        except (IndexError, KeyError):
+            return None
+
+    def push(self, name, block):
+        self.blocks[name].append(block)
+
+    def get_block(self, name):
+        try:
+            return self.blocks[name][-1]
+        except (IndexError, KeyError):
+            return None
+
 class BlockNode(Node):
     def __init__(self, name, nodelist, parent=None):
         self.name, self.nodelist, self.parent = name, nodelist, parent
@@ -17,25 +46,32 @@
         return "<Block Node: %s. Contents: %r>" % (self.name, self.nodelist)
 
     def render(self, context):
+        block_context = context.render_context.get(BLOCK_CONTEXT_KEY)
         context.push()
-        # Save context in case of block.super().
-        self.context = context
-        context['block'] = self
-        result = self.nodelist.render(context)
+        if block_context is None:
+            context['block'] = self
+            result = self.nodelist.render(context)
+        else:
+            push = block = block_context.pop(self.name)
+            if block is None:
+                block = self
+            # Create new block so we can store context without thread-safety issues.
+            block = BlockNode(block.name, block.nodelist)
+            block.context = context
+            context['block'] = block
+            result = block.nodelist.render(context)
+            if push is not None:
+                block_context.push(self.name, push)
         context.pop()
         return result
 
     def super(self):
-        if self.parent:
-            return mark_safe(self.parent.render(self.context))
+        render_context = self.context.render_context
+        if (BLOCK_CONTEXT_KEY in render_context and
+            render_context[BLOCK_CONTEXT_KEY].get_block(self.name) is not None):
+            return mark_safe(self.render(self.context))
         return ''
 
-    def add_parent(self, nodelist):
-        if self.parent:
-            self.parent.add_parent(nodelist)
-        else:
-            self.parent = BlockNode(self.name, nodelist)
-
 class ExtendsNode(Node):
     must_be_first = True
 
@@ -43,6 +79,7 @@
         self.nodelist = nodelist
         self.parent_name, self.parent_name_expr = parent_name, parent_name_expr
         self.template_dirs = template_dirs
+        self.blocks = dict([(n.name, n) for n in nodelist.get_nodes_by_type(BlockNode)])
 
     def __repr__(self):
         if self.parent_name_expr:
@@ -57,44 +94,35 @@
             error_msg = "Invalid template name in 'extends' tag: %r." % parent
             if self.parent_name_expr:
                 error_msg += " Got this from the '%s' variable." % self.parent_name_expr.token
-            raise TemplateSyntaxError, error_msg
+            raise TemplateSyntaxError(error_msg)
         if hasattr(parent, 'render'):
             return parent # parent is a Template object
-        try:
-            source, origin = find_template_source(parent, self.template_dirs)
-        except TemplateDoesNotExist:
-            raise TemplateSyntaxError, "Template %r cannot be extended, because it doesn't exist" % parent
-        else:
-            return get_template_from_string(source, origin, parent)
+        return get_template(parent)
 
     def render(self, context):
         compiled_parent = self.get_parent(context)
-        parent_blocks = dict([(n.name, n) for n in compiled_parent.nodelist.get_nodes_by_type(BlockNode)])
-        for block_node in self.nodelist.get_nodes_by_type(BlockNode):
-            # Check for a BlockNode with this node's name, and replace it if found.
-            try:
-                parent_block = parent_blocks[block_node.name]
-            except KeyError:
-                # This BlockNode wasn't found in the parent template, but the
-                # parent block might be defined in the parent's *parent*, so we
-                # add this BlockNode to the parent's ExtendsNode nodelist, so
-                # it'll be checked when the parent node's render() is called.
+
+        if BLOCK_CONTEXT_KEY not in context.render_context:
+            context.render_context[BLOCK_CONTEXT_KEY] = BlockContext()
+        block_context = context.render_context[BLOCK_CONTEXT_KEY]
+
+        # Add the block nodes from this node to the block context
+        block_context.add_blocks(self.blocks)
 
-                # Find out if the parent template has a parent itself
-                for node in compiled_parent.nodelist:
-                    if not isinstance(node, TextNode):
-                        # If the first non-text node is an extends, handle it.
-                        if isinstance(node, ExtendsNode):
-                            node.nodelist.append(block_node)
-                        # Extends must be the first non-text node, so once you find
-                        # the first non-text node you can stop looking. 
-                        break
-            else:
-                # Keep any existing parents and add a new one. Used by BlockNode.
-                parent_block.parent = block_node.parent
-                parent_block.add_parent(parent_block.nodelist)
-                parent_block.nodelist = block_node.nodelist
-        return compiled_parent.render(context)
+        # If this block's parent doesn't have an extends node it is the root,
+        # and its block nodes also need to be added to the block context.
+        for node in compiled_parent.nodelist:
+            # The ExtendsNode has to be the first non-text node.
+            if not isinstance(node, TextNode):
+                if not isinstance(node, ExtendsNode):
+                    blocks = dict([(n.name, n) for n in
+                                   compiled_parent.nodelist.get_nodes_by_type(BlockNode)])
+                    block_context.add_blocks(blocks)
+                break
+
+        # Call Template._render explicitly so the parser context stays
+        # the same.
+        return compiled_parent._render(context)
 
 class ConstantIncludeNode(Node):
     def __init__(self, template_path):
@@ -134,13 +162,13 @@
     """
     bits = token.contents.split()
     if len(bits) != 2:
-        raise TemplateSyntaxError, "'%s' tag takes only one argument" % bits[0]
+        raise TemplateSyntaxError("'%s' tag takes only one argument" % bits[0])
     block_name = bits[1]
     # Keep track of the names of BlockNodes found in this template, so we can
     # check for duplication.
     try:
         if block_name in parser.__loaded_blocks:
-            raise TemplateSyntaxError, "'%s' tag with name '%s' appears more than once" % (bits[0], block_name)
+            raise TemplateSyntaxError("'%s' tag with name '%s' appears more than once" % (bits[0], block_name))
         parser.__loaded_blocks.append(block_name)
     except AttributeError: # parser.__loaded_blocks isn't a list yet
         parser.__loaded_blocks = [block_name]
@@ -160,7 +188,7 @@
     """
     bits = token.split_contents()
     if len(bits) != 2:
-        raise TemplateSyntaxError, "'%s' takes one argument" % bits[0]
+        raise TemplateSyntaxError("'%s' takes one argument" % bits[0])
     parent_name, parent_name_expr = None, None
     if bits[1][0] in ('"', "'") and bits[1][-1] == bits[1][0]:
         parent_name = bits[1][1:-1]
@@ -168,7 +196,7 @@
         parent_name_expr = parser.compile_filter(bits[1])
     nodelist = parser.parse()
     if nodelist.get_nodes_by_type(ExtendsNode):
-        raise TemplateSyntaxError, "'%s' cannot appear more than once in the same template" % bits[0]
+        raise TemplateSyntaxError("'%s' cannot appear more than once in the same template" % bits[0])
     return ExtendsNode(nodelist, parent_name, parent_name_expr)
 
 def do_include(parser, token):
@@ -181,7 +209,7 @@
     """
     bits = token.split_contents()
     if len(bits) != 2:
-        raise TemplateSyntaxError, "%r tag takes one argument: the name of the template to be included" % bits[0]
+        raise TemplateSyntaxError("%r tag takes one argument: the name of the template to be included" % bits[0])
     path = bits[1]
     if path[0] in ('"', "'") and path[-1] == path[0]:
         return ConstantIncludeNode(path[1:-1])
--- a/web/lib/django/template/loaders/app_directories.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/template/loaders/app_directories.py	Tue May 25 02:43:45 2010 +0200
@@ -9,6 +9,7 @@
 from django.conf import settings
 from django.core.exceptions import ImproperlyConfigured
 from django.template import TemplateDoesNotExist
+from django.template.loader import BaseLoader
 from django.utils._os import safe_join
 from django.utils.importlib import import_module
 
@@ -19,7 +20,7 @@
     try:
         mod = import_module(app)
     except ImportError, e:
-        raise ImproperlyConfigured, 'ImportError %s: %s' % (app, e.args[0])
+        raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0]))
     template_dir = os.path.join(os.path.dirname(mod.__file__), 'templates')
     if os.path.isdir(template_dir):
         app_template_dirs.append(template_dir.decode(fs_encoding))
@@ -27,29 +28,47 @@
 # It won't change, so convert it to a tuple to save memory.
 app_template_dirs = tuple(app_template_dirs)
 
-def get_template_sources(template_name, template_dirs=None):
-    """
-    Returns the absolute paths to "template_name", when appended to each
-    directory in "template_dirs". Any paths that don't lie inside one of the
-    template dirs are excluded from the result set, for security reasons.
-    """
-    if not template_dirs:
-        template_dirs = app_template_dirs
-    for template_dir in template_dirs:
-        try:
-            yield safe_join(template_dir, template_name)
-        except UnicodeDecodeError:
-            # The template dir name was a bytestring that wasn't valid UTF-8.
-            raise
-        except ValueError:
-            # The joined path was located outside of template_dir.
-            pass
+class Loader(BaseLoader):
+    is_usable = True
+
+    def get_template_sources(self, template_name, template_dirs=None):
+        """
+        Returns the absolute paths to "template_name", when appended to each
+        directory in "template_dirs". Any paths that don't lie inside one of the
+        template dirs are excluded from the result set, for security reasons.
+        """
+        if not template_dirs:
+            template_dirs = app_template_dirs
+        for template_dir in template_dirs:
+            try:
+                yield safe_join(template_dir, template_name)
+            except UnicodeDecodeError:
+                # The template dir name was a bytestring that wasn't valid UTF-8.
+                raise
+            except ValueError:
+                # The joined path was located outside of template_dir.
+                pass
+
+    def load_template_source(self, template_name, template_dirs=None):
+        for filepath in self.get_template_sources(template_name, template_dirs):
+            try:
+                file = open(filepath)
+                try:
+                    return (file.read().decode(settings.FILE_CHARSET), filepath)
+                finally:
+                    file.close()
+            except IOError:
+                pass
+        raise TemplateDoesNotExist(template_name)
+
+_loader = Loader()
 
 def load_template_source(template_name, template_dirs=None):
-    for filepath in get_template_sources(template_name, template_dirs):
-        try:
-            return (open(filepath).read().decode(settings.FILE_CHARSET), filepath)
-        except IOError:
-            pass
-    raise TemplateDoesNotExist, template_name
+    # For backwards compatibility
+    import warnings
+    warnings.warn(
+        "'django.template.loaders.app_directories.load_template_source' is deprecated; use 'django.template.loaders.app_directories.Loader' instead.",
+        PendingDeprecationWarning
+    )
+    return _loader.load_template_source(template_name, template_dirs)
 load_template_source.is_usable = True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/template/loaders/cached.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,53 @@
+"""
+Wrapper class that takes a list of template loaders as an argument and attempts
+to load templates from them in order, caching the result.
+"""
+
+from django.template import TemplateDoesNotExist
+from django.template.loader import BaseLoader, get_template_from_string, find_template_loader, make_origin
+from django.utils.importlib import import_module
+from django.core.exceptions import ImproperlyConfigured
+
+class Loader(BaseLoader):
+    is_usable = True
+
+    def __init__(self, loaders):
+        self.template_cache = {}
+        self._loaders = loaders
+        self._cached_loaders = []
+
+    @property
+    def loaders(self):
+        # Resolve loaders on demand to avoid circular imports
+        if not self._cached_loaders:
+            for loader in self._loaders:
+                self._cached_loaders.append(find_template_loader(loader))
+        return self._cached_loaders
+
+    def find_template(self, name, dirs=None):
+        for loader in self.loaders:
+            try:
+                template, display_name = loader(name, dirs)
+                return (template, make_origin(display_name, loader, name, dirs))
+            except TemplateDoesNotExist:
+                pass
+        raise TemplateDoesNotExist(name)
+
+    def load_template(self, template_name, template_dirs=None):
+        if template_name not in self.template_cache:
+            template, origin = self.find_template(template_name, template_dirs)
+            if not hasattr(template, 'render'):
+                try:
+                    template = get_template_from_string(template, origin, template_name)
+                except TemplateDoesNotExist:
+                    # If compiling the template we found raises TemplateDoesNotExist, 
+                    # back off to returning the source and display name for the template 
+                    # we were asked to load. This allows for correct identification (later) 
+                    # of the actual template that does not exist.
+                    return template, origin
+            self.template_cache[template_name] = template
+        return self.template_cache[template_name], None
+
+    def reset(self):
+        "Empty the template cache."
+        self.template_cache.clear()
--- a/web/lib/django/template/loaders/eggs.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/template/loaders/eggs.py	Tue May 25 02:43:45 2010 +0200
@@ -6,20 +6,34 @@
     resource_string = None
 
 from django.template import TemplateDoesNotExist
+from django.template.loader import BaseLoader
 from django.conf import settings
 
+class Loader(BaseLoader):
+    is_usable = resource_string is not None
+
+    def load_template_source(self, template_name, template_dirs=None):
+        """
+        Loads templates from Python eggs via pkg_resource.resource_string.
+
+        For every installed app, it tries to get the resource (app, template_name).
+        """
+        if resource_string is not None:
+            pkg_name = 'templates/' + template_name
+            for app in settings.INSTALLED_APPS:
+                try:
+                    return (resource_string(app, pkg_name).decode(settings.FILE_CHARSET), 'egg:%s:%s' % (app, pkg_name))
+                except:
+                    pass
+        raise TemplateDoesNotExist(template_name)
+
+_loader = Loader()
+
 def load_template_source(template_name, template_dirs=None):
-    """
-    Loads templates from Python eggs via pkg_resource.resource_string.
-
-    For every installed app, it tries to get the resource (app, template_name).
-    """
-    if resource_string is not None:
-        pkg_name = 'templates/' + template_name
-        for app in settings.INSTALLED_APPS:
-            try:
-                return (resource_string(app, pkg_name).decode(settings.FILE_CHARSET), 'egg:%s:%s' % (app, pkg_name))
-            except:
-                pass
-    raise TemplateDoesNotExist, template_name
+    import warnings
+    warnings.warn(
+        "'django.template.loaders.eggs.load_template_source' is deprecated; use 'django.template.loaders.eggs.Loader' instead.",
+        PendingDeprecationWarning
+    )
+    return _loader.load_template_source(template_name, template_dirs)
 load_template_source.is_usable = resource_string is not None
--- a/web/lib/django/template/loaders/filesystem.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/template/loaders/filesystem.py	Tue May 25 02:43:45 2010 +0200
@@ -4,38 +4,58 @@
 
 from django.conf import settings
 from django.template import TemplateDoesNotExist
+from django.template.loader import BaseLoader
 from django.utils._os import safe_join
 
-def get_template_sources(template_name, template_dirs=None):
-    """
-    Returns the absolute paths to "template_name", when appended to each
-    directory in "template_dirs". Any paths that don't lie inside one of the
-    template dirs are excluded from the result set, for security reasons.
-    """
-    if not template_dirs:
-        template_dirs = settings.TEMPLATE_DIRS
-    for template_dir in template_dirs:
-        try:
-            yield safe_join(template_dir, template_name)
-        except UnicodeDecodeError:
-            # The template dir name was a bytestring that wasn't valid UTF-8.
-            raise
-        except ValueError:
-            # The joined path was located outside of this particular
-            # template_dir (it might be inside another one, so this isn't
-            # fatal).
-            pass
+class Loader(BaseLoader):
+    is_usable = True
+
+    def get_template_sources(self, template_name, template_dirs=None):
+        """
+        Returns the absolute paths to "template_name", when appended to each
+        directory in "template_dirs". Any paths that don't lie inside one of the
+        template dirs are excluded from the result set, for security reasons.
+        """
+        if not template_dirs:
+            template_dirs = settings.TEMPLATE_DIRS
+        for template_dir in template_dirs:
+            try:
+                yield safe_join(template_dir, template_name)
+            except UnicodeDecodeError:
+                # The template dir name was a bytestring that wasn't valid UTF-8.
+                raise
+            except ValueError:
+                # The joined path was located outside of this particular
+                # template_dir (it might be inside another one, so this isn't
+                # fatal).
+                pass
+
+    def load_template_source(self, template_name, template_dirs=None):
+        tried = []
+        for filepath in self.get_template_sources(template_name, template_dirs):
+            try:
+                file = open(filepath)
+                try:
+                    return (file.read().decode(settings.FILE_CHARSET), filepath)
+                finally:
+                    file.close()
+            except IOError:
+                tried.append(filepath)
+        if tried:
+            error_msg = "Tried %s" % tried
+        else:
+            error_msg = "Your TEMPLATE_DIRS setting is empty. Change it to point to at least one template directory."
+        raise TemplateDoesNotExist(error_msg)
+    load_template_source.is_usable = True
+
+_loader = Loader()
 
 def load_template_source(template_name, template_dirs=None):
-    tried = []
-    for filepath in get_template_sources(template_name, template_dirs):
-        try:
-            return (open(filepath).read().decode(settings.FILE_CHARSET), filepath)
-        except IOError:
-            tried.append(filepath)
-    if tried:
-        error_msg = "Tried %s" % tried
-    else:
-        error_msg = "Your TEMPLATE_DIRS setting is empty. Change it to point to at least one template directory."
-    raise TemplateDoesNotExist, error_msg
+    # For backwards compatibility
+    import warnings
+    warnings.warn(
+        "'django.template.loaders.filesystem.load_template_source' is deprecated; use 'django.template.loaders.filesystem.Loader' instead.",
+        PendingDeprecationWarning
+    )
+    return _loader.load_template_source(template_name, template_dirs)
 load_template_source.is_usable = True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/template/smartif.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,206 @@
+"""
+Parser and utilities for the smart 'if' tag
+"""
+import operator
+
+# Using a simple top down parser, as described here:
+#    http://effbot.org/zone/simple-top-down-parsing.htm.
+# 'led' = left denotation
+# 'nud' = null denotation
+# 'bp' = binding power (left = lbp, right = rbp)
+
+class TokenBase(object):
+    """
+    Base class for operators and literals, mainly for debugging and for throwing
+    syntax errors.
+    """
+    id = None # node/token type name
+    value = None # used by literals
+    first = second = None # used by tree nodes
+
+    def nud(self, parser):
+        # Null denotation - called in prefix context
+        raise parser.error_class(
+            "Not expecting '%s' in this position in if tag." % self.id
+        )
+
+    def led(self, left, parser):
+        # Left denotation - called in infix context
+        raise parser.error_class(
+            "Not expecting '%s' as infix operator in if tag." % self.id
+        )
+
+    def display(self):
+        """
+        Returns what to display in error messages for this node
+        """
+        return self.id
+
+    def __repr__(self):
+        out = [str(x) for x in [self.id, self.first, self.second] if x is not None]
+        return "(" + " ".join(out) + ")"
+
+
+def infix(bp, func):
+    """
+    Creates an infix operator, given a binding power and a function that
+    evaluates the node
+    """
+    class Operator(TokenBase):
+        lbp = bp
+
+        def led(self, left, parser):
+            self.first = left
+            self.second = parser.expression(bp)
+            return self
+
+        def eval(self, context):
+            try:
+                return func(context, self.first, self.second)
+            except Exception:
+                # Templates shouldn't throw exceptions when rendering.  We are
+                # most likely to get exceptions for things like {% if foo in bar
+                # %} where 'bar' does not support 'in', so default to False
+                return False
+
+    return Operator
+
+
+def prefix(bp, func):
+    """
+    Creates a prefix operator, given a binding power and a function that
+    evaluates the node.
+    """
+    class Operator(TokenBase):
+        lbp = bp
+
+        def nud(self, parser):
+            self.first = parser.expression(bp)
+            self.second = None
+            return self
+
+        def eval(self, context):
+            try:
+                return func(context, self.first)
+            except Exception:
+                return False
+
+    return Operator
+
+
+# Operator precedence follows Python.
+# NB - we can get slightly more accurate syntax error messages by not using the
+# same object for '==' and '='.
+# We defer variable evaluation to the lambda to ensure that terms are
+# lazily evaluated using Python's boolean parsing logic.
+OPERATORS = {
+    'or': infix(6, lambda context, x, y: x.eval(context) or y.eval(context)),
+    'and': infix(7, lambda context, x, y: x.eval(context) and y.eval(context)),
+    'not': prefix(8, lambda context, x: not x.eval(context)),
+    'in': infix(9, lambda context, x, y: x.eval(context) in y.eval(context)),
+    'not in': infix(9, lambda context, x, y: x.eval(context) not in y.eval(context)),
+    '=': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)),
+    '==': infix(10, lambda context, x, y: x.eval(context) == y.eval(context)),
+    '!=': infix(10, lambda context, x, y: x.eval(context) != y.eval(context)),
+    '>': infix(10, lambda context, x, y: x.eval(context) > y.eval(context)),
+    '>=': infix(10, lambda context, x, y: x.eval(context) >= y.eval(context)),
+    '<': infix(10, lambda context, x, y: x.eval(context) < y.eval(context)),
+    '<=': infix(10, lambda context, x, y: x.eval(context) <= y.eval(context)),
+}
+
+# Assign 'id' to each:
+for key, op in OPERATORS.items():
+    op.id = key
+
+
+class Literal(TokenBase):
+    """
+    A basic self-resolvable object similar to a Django template variable.
+    """
+    # IfParser uses Literal in create_var, but TemplateIfParser overrides
+    # create_var so that a proper implementation that actually resolves
+    # variables, filters etc is used.
+    id = "literal"
+    lbp = 0
+
+    def __init__(self, value):
+        self.value = value
+
+    def display(self):
+        return repr(self.value)
+
+    def nud(self, parser):
+        return self
+
+    def eval(self, context):
+        return self.value
+
+    def __repr__(self):
+        return "(%s %r)" % (self.id, self.value)
+
+
+class EndToken(TokenBase):
+    lbp = 0
+
+    def nud(self, parser):
+        raise parser.error_class("Unexpected end of expression in if tag.")
+
+EndToken = EndToken()
+
+
+class IfParser(object):
+    error_class = ValueError
+
+    def __init__(self, tokens):
+        # pre-pass necessary to turn  'not','in' into single token
+        l = len(tokens)
+        mapped_tokens = []
+        i = 0
+        while i < l:
+            token = tokens[i]
+            if token == "not" and i + 1 < l and tokens[i+1] == "in":
+                token = "not in"
+                i += 1 # skip 'in'
+            mapped_tokens.append(self.translate_token(token))
+            i += 1
+
+        self.tokens = mapped_tokens
+        self.pos = 0
+        self.current_token = self.next()
+
+    def translate_token(self, token):
+        try:
+            op = OPERATORS[token]
+        except (KeyError, TypeError):
+            return self.create_var(token)
+        else:
+            return op()
+
+    def next(self):
+        if self.pos >= len(self.tokens):
+            return EndToken
+        else:
+            retval = self.tokens[self.pos]
+            self.pos += 1
+            return retval
+
+    def parse(self):
+        retval = self.expression()
+        # Check that we have exhausted all the tokens
+        if self.current_token is not EndToken:
+            raise self.error_class("Unused '%s' at end of if expression." %
+                                   self.current_token.display())
+        return retval
+
+    def expression(self, rbp=0):
+        t = self.current_token
+        self.current_token = self.next()
+        left = t.nud(self)
+        while rbp < self.current_token.lbp:
+            t = self.current_token
+            self.current_token = self.next()
+            left = t.led(left, self)
+        return left
+
+    def create_var(self, value):
+        return Literal(value)
--- a/web/lib/django/templatetags/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/templatetags/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,8 +0,0 @@
-from django.conf import settings
-from django.utils import importlib
-
-for a in settings.INSTALLED_APPS:
-    try:
-        __path__.extend(importlib.import_module('.templatetags', a).__path__)
-    except ImportError:
-        pass
--- a/web/lib/django/templatetags/cache.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/templatetags/cache.py	Tue May 25 02:43:45 2010 +0200
@@ -18,7 +18,7 @@
         try:
             expire_time = self.expire_time_var.resolve(context)
         except VariableDoesNotExist:
-            raise TemplateSyntaxError('"cache" tag got an unknkown variable: %r' % self.expire_time_var.var)
+            raise TemplateSyntaxError('"cache" tag got an unknown variable: %r' % self.expire_time_var.var)
         try:
             expire_time = int(expire_time)
         except (ValueError, TypeError):
--- a/web/lib/django/templatetags/i18n.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/templatetags/i18n.py	Tue May 25 02:43:45 2010 +0200
@@ -34,16 +34,16 @@
         return ''
 
 class TranslateNode(Node):
-    def __init__(self, value, noop):
-        self.value = Variable(value)
+    def __init__(self, filter_expression, noop):
         self.noop = noop
+        self.filter_expression = filter_expression
+        if isinstance(self.filter_expression.var, basestring):
+            self.filter_expression.var = Variable(u"'%s'" % self.filter_expression.var)
 
     def render(self, context):
-        value = self.value.resolve(context)
-        if self.noop:
-            return value
-        else:
-            return _render_value_in_context(translation.ugettext(value), context)
+        self.filter_expression.var.translate = not self.noop
+        output = self.filter_expression.resolve(context)
+        return _render_value_in_context(output, context)
 
 class BlockTranslateNode(Node):
     def __init__(self, extra_context, singular, plural=None, countervar=None,
@@ -104,7 +104,7 @@
     """
     args = token.contents.split()
     if len(args) != 3 or args[1] != 'as':
-        raise TemplateSyntaxError, "'get_available_languages' requires 'as variable' (got %r)" % args
+        raise TemplateSyntaxError("'get_available_languages' requires 'as variable' (got %r)" % args)
     return GetAvailableLanguagesNode(args[2])
 
 def do_get_current_language(parser, token):
@@ -121,7 +121,7 @@
     """
     args = token.contents.split()
     if len(args) != 3 or args[1] != 'as':
-        raise TemplateSyntaxError, "'get_current_language' requires 'as variable' (got %r)" % args
+        raise TemplateSyntaxError("'get_current_language' requires 'as variable' (got %r)" % args)
     return GetCurrentLanguageNode(args[2])
 
 def do_get_current_language_bidi(parser, token):
@@ -138,7 +138,7 @@
     """
     args = token.contents.split()
     if len(args) != 3 or args[1] != 'as':
-        raise TemplateSyntaxError, "'get_current_language_bidi' requires 'as variable' (got %r)" % args
+        raise TemplateSyntaxError("'get_current_language_bidi' requires 'as variable' (got %r)" % args)
     return GetCurrentLanguageBidiNode(args[2])
 
 def do_translate(parser, token):
@@ -174,16 +174,30 @@
     class TranslateParser(TokenParser):
         def top(self):
             value = self.value()
+
+            # Backwards Compatiblity fix:
+            # FilterExpression does not support single-quoted strings,
+            # so we make a cheap localized fix in order to maintain
+            # backwards compatibility with existing uses of ``trans``
+            # where single quote use is supported.
+            if value[0] == "'":
+                pos = None
+                m = re.match("^'([^']+)'(\|.*$)",value)
+                if m:
+                    value = '"%s"%s' % (m.group(1).replace('"','\\"'),m.group(2))
+                elif value[-1] == "'":
+                    value = '"%s"' % value[1:-1].replace('"','\\"')
+
             if self.more():
                 if self.tag() == 'noop':
                     noop = True
                 else:
-                    raise TemplateSyntaxError, "only option for 'trans' is 'noop'"
+                    raise TemplateSyntaxError("only option for 'trans' is 'noop'")
             else:
                 noop = False
             return (value, noop)
     value, noop = TranslateParser(token.contents).top()
-    return TranslateNode(value, noop)
+    return TranslateNode(parser.compile_filter(value), noop)
 
 def do_block_translate(parser, token):
     """
@@ -215,16 +229,16 @@
                 if tag == 'with' or tag == 'and':
                     value = self.value()
                     if self.tag() != 'as':
-                        raise TemplateSyntaxError, "variable bindings in 'blocktrans' must be 'with value as variable'"
+                        raise TemplateSyntaxError("variable bindings in 'blocktrans' must be 'with value as variable'")
                     extra_context[self.tag()] = VariableNode(
                             parser.compile_filter(value))
                 elif tag == 'count':
                     counter = parser.compile_filter(self.value())
                     if self.tag() != 'as':
-                        raise TemplateSyntaxError, "counter specification in 'blocktrans' must be 'count value as variable'"
+                        raise TemplateSyntaxError("counter specification in 'blocktrans' must be 'count value as variable'")
                     countervar = self.tag()
                 else:
-                    raise TemplateSyntaxError, "unknown subtag %s for 'blocktrans' found" % tag
+                    raise TemplateSyntaxError("unknown subtag %s for 'blocktrans' found" % tag)
             return (countervar, counter, extra_context)
 
     countervar, counter, extra_context = BlockTranslateParser(token.contents).top()
@@ -239,7 +253,7 @@
             break
     if countervar and counter:
         if token.contents.strip() != 'plural':
-            raise TemplateSyntaxError, "'blocktrans' doesn't allow other block tags inside it"
+            raise TemplateSyntaxError("'blocktrans' doesn't allow other block tags inside it")
         while parser.tokens:
             token = parser.next_token()
             if token.token_type in (TOKEN_VAR, TOKEN_TEXT):
@@ -247,7 +261,7 @@
             else:
                 break
     if token.contents.strip() != 'endblocktrans':
-        raise TemplateSyntaxError, "'blocktrans' doesn't allow other block tags (seen %r) inside it" % token.contents
+        raise TemplateSyntaxError("'blocktrans' doesn't allow other block tags (seen %r) inside it" % token.contents)
 
     return BlockTranslateNode(extra_context, singular, plural, countervar,
             counter)
--- a/web/lib/django/test/client.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/test/client.py	Tue May 25 02:43:45 2010 +0200
@@ -66,6 +66,11 @@
         signals.request_started.send(sender=self.__class__)
         try:
             request = WSGIRequest(environ)
+            # sneaky little hack so that we can easily get round
+            # CsrfViewMiddleware.  This makes life easier, and is probably
+            # required for backwards compatibility with external tests against
+            # admin views.
+            request._dont_enforce_csrf_checks = True
             response = self.get_response(request)
 
             # Apply response middleware.
@@ -193,7 +198,7 @@
         using the arguments to the request.
         """
         environ = {
-            'HTTP_COOKIE':      self.cookies,
+            'HTTP_COOKIE':       self.cookies.output(header='', sep='; '),
             'PATH_INFO':         '/',
             'QUERY_STRING':      '',
             'REMOTE_ADDR':       '127.0.0.1',
@@ -216,53 +221,57 @@
         # callback function.
         data = {}
         on_template_render = curry(store_rendered_templates, data)
-        signals.template_rendered.connect(on_template_render)
-
+        signals.template_rendered.connect(on_template_render, dispatch_uid="template-render")
         # Capture exceptions created by the handler.
-        got_request_exception.connect(self.store_exc_info)
-
+        got_request_exception.connect(self.store_exc_info, dispatch_uid="request-exception")
         try:
-            response = self.handler(environ)
-        except TemplateDoesNotExist, e:
-            # If the view raises an exception, Django will attempt to show
-            # the 500.html template. If that template is not available,
-            # we should ignore the error in favor of re-raising the
-            # underlying exception that caused the 500 error. Any other
-            # template found to be missing during view error handling
-            # should be reported as-is.
-            if e.args != ('500.html',):
-                raise
+
+            try:
+                response = self.handler(environ)
+            except TemplateDoesNotExist, e:
+                # If the view raises an exception, Django will attempt to show
+                # the 500.html template. If that template is not available,
+                # we should ignore the error in favor of re-raising the
+                # underlying exception that caused the 500 error. Any other
+                # template found to be missing during view error handling
+                # should be reported as-is.
+                if e.args != ('500.html',):
+                    raise
+
+            # Look for a signalled exception, clear the current context
+            # exception data, then re-raise the signalled exception.
+            # Also make sure that the signalled exception is cleared from
+            # the local cache!
+            if self.exc_info:
+                exc_info = self.exc_info
+                self.exc_info = None
+                raise exc_info[1], None, exc_info[2]
 
-        # Look for a signalled exception, clear the current context
-        # exception data, then re-raise the signalled exception.
-        # Also make sure that the signalled exception is cleared from
-        # the local cache!
-        if self.exc_info:
-            exc_info = self.exc_info
-            self.exc_info = None
-            raise exc_info[1], None, exc_info[2]
-
-        # Save the client and request that stimulated the response.
-        response.client = self
-        response.request = request
+            # Save the client and request that stimulated the response.
+            response.client = self
+            response.request = request
 
-        # Add any rendered template detail to the response.
-        # If there was only one template rendered (the most likely case),
-        # flatten the list to a single element.
-        for detail in ('template', 'context'):
-            if data.get(detail):
-                if len(data[detail]) == 1:
-                    setattr(response, detail, data[detail][0]);
+            # Add any rendered template detail to the response.
+            # If there was only one template rendered (the most likely case),
+            # flatten the list to a single element.
+            for detail in ('template', 'context'):
+                if data.get(detail):
+                    if len(data[detail]) == 1:
+                        setattr(response, detail, data[detail][0]);
+                    else:
+                        setattr(response, detail, data[detail])
                 else:
-                    setattr(response, detail, data[detail])
-            else:
-                setattr(response, detail, None)
+                    setattr(response, detail, None)
+
+            # Update persistent cookie data.
+            if response.cookies:
+                self.cookies.update(response.cookies)
 
-        # Update persistent cookie data.
-        if response.cookies:
-            self.cookies.update(response.cookies)
+            return response
+        finally:
+            signals.template_rendered.disconnect(dispatch_uid="template-render")
+            got_request_exception.disconnect(dispatch_uid="request-exception")
 
-        return response
 
     def get(self, path, data={}, follow=False, **extra):
         """
@@ -362,12 +371,18 @@
         else:
             post_data = data
 
+        # Make `data` into a querystring only if it's not already a string. If
+        # it is a string, we'll assume that the caller has already encoded it.
+        query_string = None
+        if not isinstance(data, basestring):
+            query_string = urlencode(data, doseq=True)
+
         parsed = urlparse(path)
         r = {
             'CONTENT_LENGTH': len(post_data),
             'CONTENT_TYPE':   content_type,
             'PATH_INFO':      urllib.unquote(parsed[2]),
-            'QUERY_STRING':   urlencode(data, doseq=True) or parsed[4],
+            'QUERY_STRING':   query_string or parsed[4],
             'REQUEST_METHOD': 'PUT',
             'wsgi.input':     FakePayload(post_data),
         }
@@ -417,6 +432,9 @@
                 request.session = engine.SessionStore()
             login(request, user)
 
+            # Save the session values.
+            request.session.save()
+
             # Set the cookie to represent the session.
             session_cookie = settings.SESSION_COOKIE_NAME
             self.cookies[session_cookie] = request.session.session_key
@@ -429,9 +447,6 @@
             }
             self.cookies[session_cookie].update(cookie_data)
 
-            # Save the session values.
-            request.session.save()
-
             return True
         else:
             return False
@@ -459,11 +474,15 @@
             redirect_chain = response.redirect_chain
             redirect_chain.append((url, response.status_code))
 
+            extra = {}
+            if scheme:
+                extra['wsgi.url_scheme'] = scheme
+
             # The test client doesn't handle external links,
             # but since the situation is simulated in test_client,
             # we fake things here by ignoring the netloc portion of the
             # redirected URL.
-            response = self.get(path, QueryDict(query), follow=False)
+            response = self.get(path, QueryDict(query), follow=False, **extra)
             response.redirect_chain = redirect_chain
 
             # Prevent loops
--- a/web/lib/django/test/simple.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/test/simple.py	Tue May 25 02:43:45 2010 +0200
@@ -1,4 +1,7 @@
+import sys
+import signal
 import unittest
+
 from django.conf import settings
 from django.db.models import get_app, get_apps
 from django.test import _doctest as doctest
@@ -10,6 +13,54 @@
 
 doctestOutputChecker = OutputChecker()
 
+class DjangoTestRunner(unittest.TextTestRunner):
+
+    def __init__(self, verbosity=0, failfast=False, **kwargs):
+        super(DjangoTestRunner, self).__init__(verbosity=verbosity, **kwargs)
+        self.failfast = failfast
+        self._keyboard_interrupt_intercepted = False
+
+    def run(self, *args, **kwargs):
+        """
+        Runs the test suite after registering a custom signal handler
+        that triggers a graceful exit when Ctrl-C is pressed.
+        """
+        self._default_keyboard_interrupt_handler = signal.signal(signal.SIGINT,
+            self._keyboard_interrupt_handler)
+        try:
+            result = super(DjangoTestRunner, self).run(*args, **kwargs)
+        finally:
+            signal.signal(signal.SIGINT, self._default_keyboard_interrupt_handler)
+        return result
+
+    def _keyboard_interrupt_handler(self, signal_number, stack_frame):
+        """
+        Handles Ctrl-C by setting a flag that will stop the test run when
+        the currently running test completes.
+        """
+        self._keyboard_interrupt_intercepted = True
+        sys.stderr.write(" <Test run halted by Ctrl-C> ")
+        # Set the interrupt handler back to the default handler, so that
+        # another Ctrl-C press will trigger immediate exit.
+        signal.signal(signal.SIGINT, self._default_keyboard_interrupt_handler)
+
+    def _makeResult(self):
+        result = super(DjangoTestRunner, self)._makeResult()
+        failfast = self.failfast
+
+        def stoptest_override(func):
+            def stoptest(test):
+                # If we were set to failfast and the unit test failed,
+                # or if the user has typed Ctrl-C, report and quit
+                if (failfast and not result.wasSuccessful()) or \
+                    self._keyboard_interrupt_intercepted:
+                    result.stop()
+                func(test)
+            return stoptest
+
+        setattr(result, 'stopTest', stoptest_override(result.stopTest))
+        return result
+
 def get_tests(app_module):
     try:
         app_path = app_module.__name__.split('.')[:-1]
@@ -73,41 +124,66 @@
     return suite
 
 def build_test(label):
-    """Construct a test case a test with the specified label. Label should
-    be of the form model.TestClass or model.TestClass.test_method. Returns
-    an instantiated test or test suite corresponding to the label provided.
+    """Construct a test case with the specified label. Label should be of the
+    form model.TestClass or model.TestClass.test_method. Returns an
+    instantiated test or test suite corresponding to the label provided.
 
     """
     parts = label.split('.')
     if len(parts) < 2 or len(parts) > 3:
         raise ValueError("Test label '%s' should be of the form app.TestCase or app.TestCase.test_method" % label)
 
+    #
+    # First, look for TestCase instances with a name that matches
+    #
     app_module = get_app(parts[0])
+    test_module = get_tests(app_module)
     TestClass = getattr(app_module, parts[1], None)
 
     # Couldn't find the test class in models.py; look in tests.py
     if TestClass is None:
-        test_module = get_tests(app_module)
         if test_module:
             TestClass = getattr(test_module, parts[1], None)
 
-    if len(parts) == 2: # label is app.TestClass
+    try:
+        if issubclass(TestClass, unittest.TestCase):
+            if len(parts) == 2: # label is app.TestClass
+                try:
+                    return unittest.TestLoader().loadTestsFromTestCase(TestClass)
+                except TypeError:
+                    raise ValueError("Test label '%s' does not refer to a test class" % label)
+            else: # label is app.TestClass.test_method
+                return TestClass(parts[2])
+    except TypeError:
+        # TestClass isn't a TestClass - it must be a method or normal class
+        pass
+
+    #
+    # If there isn't a TestCase, look for a doctest that matches
+    #
+    tests = []
+    for module in app_module, test_module:
         try:
-            return unittest.TestLoader().loadTestsFromTestCase(TestClass)
-        except TypeError:
-            raise ValueError("Test label '%s' does not refer to a test class" % label)
-    else: # label is app.TestClass.test_method
-        if not TestClass:
-            raise ValueError("Test label '%s' does not refer to a test class" % label)
-        return TestClass(parts[2])
+            doctests = doctest.DocTestSuite(module,
+                                            checker=doctestOutputChecker,
+                                            runner=DocTestRunner)
+            # Now iterate over the suite, looking for doctests whose name
+            # matches the pattern that was given
+            for test in doctests:
+                if test._dt_test.name in (
+                        '%s.%s' % (module.__name__, '.'.join(parts[1:])),
+                        '%s.__test__.%s' % (module.__name__, '.'.join(parts[1:]))):
+                    tests.append(test)
+        except ValueError:
+            # No doctests found.
+            pass
 
-# Python 2.3 compatibility: TestSuites were made iterable in 2.4.
-# We need to iterate over them, so we add the missing method when
-# necessary.
-try:
-    getattr(unittest.TestSuite, '__iter__')
-except AttributeError:
-    setattr(unittest.TestSuite, '__iter__', lambda s: iter(s._tests))
+    # If no tests were found, then we were given a bad test label.
+    if not tests:
+        raise ValueError("Test label '%s' does not refer to a test" % label)
+
+    # Construct a suite out of the tests that matched.
+    return unittest.TestSuite(tests)
 
 def partition_suite(suite, classes, bins):
     """
@@ -146,52 +222,105 @@
         bins[0].addTests(bins[i+1])
     return bins[0]
 
-def run_tests(test_labels, verbosity=1, interactive=True, extra_tests=[]):
-    """
-    Run the unit tests for all the test labels in the provided list.
-    Labels must be of the form:
-     - app.TestClass.test_method
-        Run a single specific test method
-     - app.TestClass
-        Run all the test methods in a given class
-     - app
-        Search for doctests and unittests in the named application.
+
+class DjangoTestSuiteRunner(object):
+    def __init__(self, verbosity=1, interactive=True, failfast=True, **kwargs):
+        self.verbosity = verbosity
+        self.interactive = interactive
+        self.failfast = failfast
+
+    def setup_test_environment(self, **kwargs):
+        setup_test_environment()
+        settings.DEBUG = False
+
+    def build_suite(self, test_labels, extra_tests=None, **kwargs):
+        suite = unittest.TestSuite()
+
+        if test_labels:
+            for label in test_labels:
+                if '.' in label:
+                    suite.addTest(build_test(label))
+                else:
+                    app = get_app(label)
+                    suite.addTest(build_suite(app))
+        else:
+            for app in get_apps():
+                suite.addTest(build_suite(app))
 
-    When looking for tests, the test runner will look in the models and
-    tests modules for the application.
+        if extra_tests:
+            for test in extra_tests:
+                suite.addTest(test)
 
-    A list of 'extra' tests may also be provided; these tests
-    will be added to the test suite.
+        return reorder_suite(suite, (TestCase,))
 
-    Returns the number of tests that failed.
-    """
-    setup_test_environment()
+    def setup_databases(self, **kwargs):
+        from django.db import connections
+        old_names = []
+        mirrors = []
+        for alias in connections:
+            connection = connections[alias]
+            # If the database is a test mirror, redirect it's connection
+            # instead of creating a test database.
+            if connection.settings_dict['TEST_MIRROR']:
+                mirrors.append((alias, connection))
+                mirror_alias = connection.settings_dict['TEST_MIRROR']
+                connections._connections[alias] = connections[mirror_alias]
+            else:
+                old_names.append((connection, connection.settings_dict['NAME']))
+                connection.creation.create_test_db(self.verbosity, autoclobber=not self.interactive)
+        return old_names, mirrors
 
-    settings.DEBUG = False
-    suite = unittest.TestSuite()
+    def run_suite(self, suite, **kwargs):
+        return DjangoTestRunner(verbosity=self.verbosity, failfast=self.failfast).run(suite)
 
-    if test_labels:
-        for label in test_labels:
-            if '.' in label:
-                suite.addTest(build_test(label))
-            else:
-                app = get_app(label)
-                suite.addTest(build_suite(app))
-    else:
-        for app in get_apps():
-            suite.addTest(build_suite(app))
+    def teardown_databases(self, old_config, **kwargs):
+        from django.db import connections
+        old_names, mirrors = old_config
+        # Point all the mirrors back to the originals
+        for alias, connection in mirrors:
+            connections._connections[alias] = connection
+        # Destroy all the non-mirror databases
+        for connection, old_name in old_names:
+            connection.creation.destroy_test_db(old_name, self.verbosity)
+
+    def teardown_test_environment(self, **kwargs):
+        teardown_test_environment()
+
+    def suite_result(self, suite, result, **kwargs):
+        return len(result.failures) + len(result.errors)
 
-    for test in extra_tests:
-        suite.addTest(test)
+    def run_tests(self, test_labels, extra_tests=None, **kwargs):
+        """
+        Run the unit tests for all the test labels in the provided list.
+        Labels must be of the form:
+         - app.TestClass.test_method
+            Run a single specific test method
+         - app.TestClass
+            Run all the test methods in a given class
+         - app
+            Search for doctests and unittests in the named application.
 
-    suite = reorder_suite(suite, (TestCase,))
+        When looking for tests, the test runner will look in the models and
+        tests modules for the application.
+
+        A list of 'extra' tests may also be provided; these tests
+        will be added to the test suite.
 
-    old_name = settings.DATABASE_NAME
-    from django.db import connection
-    connection.creation.create_test_db(verbosity, autoclobber=not interactive)
-    result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
-    connection.creation.destroy_test_db(old_name, verbosity)
+        Returns the number of tests that failed.
+        """
+        self.setup_test_environment()
+        suite = self.build_suite(test_labels, extra_tests)
+        old_config = self.setup_databases()
+        result = self.run_suite(suite)
+        self.teardown_databases(old_config)
+        self.teardown_test_environment()
+        return self.suite_result(suite, result)
 
-    teardown_test_environment()
-
-    return len(result.failures) + len(result.errors)
+def run_tests(test_labels, verbosity=1, interactive=True, failfast=False, extra_tests=None):
+    import warnings
+    warnings.warn(
+        'The run_tests() test runner has been deprecated in favor of DjangoTestSuiteRunner.',
+        PendingDeprecationWarning
+    )
+    test_runner = DjangoTestSuiteRunner(verbosity=verbosity, interactive=interactive, failfast=failfast)
+    return test_runner.run_tests(test_labels, extra_tests=extra_tests)
--- a/web/lib/django/test/testcases.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/test/testcases.py	Tue May 25 02:43:45 2010 +0200
@@ -7,13 +7,18 @@
 from django.core import mail
 from django.core.management import call_command
 from django.core.urlresolvers import clear_url_caches
-from django.db import transaction, connection
+from django.db import transaction, connections, DEFAULT_DB_ALIAS
 from django.http import QueryDict
 from django.test import _doctest as doctest
 from django.test.client import Client
 from django.utils import simplejson
 from django.utils.encoding import smart_str
 
+try:
+    all
+except NameError:
+    from django.utils.itercompat import all
+
 normalize_long_ints = lambda s: re.sub(r'(?<![\w])(\d+)L(?![\w])', '\\1', s)
 normalize_decimals = lambda s: re.sub(r"Decimal\('(\d+(\.\d*)?)'\)", lambda m: "Decimal(\"%s\")" % m.groups()[0], s)
 
@@ -201,7 +206,8 @@
                                                           example, exc_info)
         # Rollback, in case of database errors. Otherwise they'd have
         # side effects on other tests.
-        transaction.rollback_unless_managed()
+        for conn in connections:
+            transaction.rollback_unless_managed(using=conn)
 
 class TransactionTestCase(unittest.TestCase):
     def _pre_setup(self):
@@ -219,11 +225,19 @@
         mail.outbox = []
 
     def _fixture_setup(self):
-        call_command('flush', verbosity=0, interactive=False)
-        if hasattr(self, 'fixtures'):
-            # We have to use this slightly awkward syntax due to the fact
-            # that we're using *args and **kwargs together.
-            call_command('loaddata', *self.fixtures, **{'verbosity': 0})
+        # If the test case has a multi_db=True flag, flush all databases.
+        # Otherwise, just flush default.
+        if getattr(self, 'multi_db', False):
+            databases = connections
+        else:
+            databases = [DEFAULT_DB_ALIAS]
+        for db in databases:
+            call_command('flush', verbosity=0, interactive=False, database=db)
+
+            if hasattr(self, 'fixtures'):
+                # We have to use this slightly awkward syntax due to the fact
+                # that we're using *args and **kwargs together.
+                call_command('loaddata', *self.fixtures, **{'verbosity': 0, 'database': db})
 
     def _urlconf_setup(self):
         if hasattr(self, 'urls'):
@@ -273,34 +287,41 @@
             clear_url_caches()
 
     def assertRedirects(self, response, expected_url, status_code=302,
-                        target_status_code=200, host=None):
+                        target_status_code=200, host=None, msg_prefix=''):
         """Asserts that a response redirected to a specific URL, and that the
         redirect URL can be loaded.
 
         Note that assertRedirects won't work for external links since it uses
         TestClient to do a request.
         """
+        if msg_prefix:
+            msg_prefix += ": "
+
         if hasattr(response, 'redirect_chain'):
             # The request was a followed redirect
             self.failUnless(len(response.redirect_chain) > 0,
-                ("Response didn't redirect as expected: Response code was %d"
-                " (expected %d)" % (response.status_code, status_code)))
+                msg_prefix + "Response didn't redirect as expected: Response"
+                " code was %d (expected %d)" %
+                    (response.status_code, status_code))
 
             self.assertEqual(response.redirect_chain[0][1], status_code,
-                ("Initial response didn't redirect as expected: Response code was %d"
-                 " (expected %d)" % (response.redirect_chain[0][1], status_code)))
+                msg_prefix + "Initial response didn't redirect as expected:"
+                " Response code was %d (expected %d)" %
+                    (response.redirect_chain[0][1], status_code))
 
             url, status_code = response.redirect_chain[-1]
 
             self.assertEqual(response.status_code, target_status_code,
-                ("Response didn't redirect as expected: Final Response code was %d"
-                " (expected %d)" % (response.status_code, target_status_code)))
+                msg_prefix + "Response didn't redirect as expected: Final"
+                " Response code was %d (expected %d)" %
+                    (response.status_code, target_status_code))
 
         else:
             # Not a followed redirect
             self.assertEqual(response.status_code, status_code,
-                ("Response didn't redirect as expected: Response code was %d"
-                 " (expected %d)" % (response.status_code, status_code)))
+                msg_prefix + "Response didn't redirect as expected: Response"
+                " code was %d (expected %d)" %
+                    (response.status_code, status_code))
 
             url = response['Location']
             scheme, netloc, path, query, fragment = urlsplit(url)
@@ -310,9 +331,9 @@
             # Get the redirection page, using the same client that was used
             # to obtain the original response.
             self.assertEqual(redirect_response.status_code, target_status_code,
-                ("Couldn't retrieve redirection page '%s': response code was %d"
-                 " (expected %d)") %
-                     (path, redirect_response.status_code, target_status_code))
+                msg_prefix + "Couldn't retrieve redirection page '%s':"
+                " response code was %d (expected %d)" %
+                    (path, redirect_response.status_code, target_status_code))
 
         e_scheme, e_netloc, e_path, e_query, e_fragment = urlsplit(expected_url)
         if not (e_scheme or e_netloc):
@@ -320,10 +341,11 @@
                 e_query, e_fragment))
 
         self.assertEqual(url, expected_url,
-            "Response redirected to '%s', expected '%s'" % (url, expected_url))
+            msg_prefix + "Response redirected to '%s', expected '%s'" %
+                (url, expected_url))
 
-
-    def assertContains(self, response, text, count=None, status_code=200):
+    def assertContains(self, response, text, count=None, status_code=200,
+                       msg_prefix=''):
         """
         Asserts that a response indicates that a page was retrieved
         successfully, (i.e., the HTTP status code was as expected), and that
@@ -331,42 +353,52 @@
         If ``count`` is None, the count doesn't matter - the assertion is true
         if the text occurs at least once in the response.
         """
+        if msg_prefix:
+            msg_prefix += ": "
+
         self.assertEqual(response.status_code, status_code,
-            "Couldn't retrieve page: Response code was %d (expected %d)'" %
-                (response.status_code, status_code))
+            msg_prefix + "Couldn't retrieve page: Response code was %d"
+            " (expected %d)" % (response.status_code, status_code))
         text = smart_str(text, response._charset)
         real_count = response.content.count(text)
         if count is not None:
             self.assertEqual(real_count, count,
-                "Found %d instances of '%s' in response (expected %d)" %
-                    (real_count, text, count))
+                msg_prefix + "Found %d instances of '%s' in response"
+                " (expected %d)" % (real_count, text, count))
         else:
             self.failUnless(real_count != 0,
-                            "Couldn't find '%s' in response" % text)
+                msg_prefix + "Couldn't find '%s' in response" % text)
 
-    def assertNotContains(self, response, text, status_code=200):
+    def assertNotContains(self, response, text, status_code=200,
+                          msg_prefix=''):
         """
         Asserts that a response indicates that a page was retrieved
         successfully, (i.e., the HTTP status code was as expected), and that
         ``text`` doesn't occurs in the content of the response.
         """
+        if msg_prefix:
+            msg_prefix += ": "
+
         self.assertEqual(response.status_code, status_code,
-            "Couldn't retrieve page: Response code was %d (expected %d)'" %
-                (response.status_code, status_code))
+            msg_prefix + "Couldn't retrieve page: Response code was %d"
+            " (expected %d)" % (response.status_code, status_code))
         text = smart_str(text, response._charset)
-        self.assertEqual(response.content.count(text),
-             0, "Response should not contain '%s'" % text)
+        self.assertEqual(response.content.count(text), 0,
+            msg_prefix + "Response should not contain '%s'" % text)
 
-    def assertFormError(self, response, form, field, errors):
+    def assertFormError(self, response, form, field, errors, msg_prefix=''):
         """
         Asserts that a form used to render the response has a specific field
         error.
         """
+        if msg_prefix:
+            msg_prefix += ": "
+
         # Put context(s) into a list to simplify processing.
         contexts = to_list(response.context)
         if not contexts:
-            self.fail('Response did not use any contexts to render the'
-                      ' response')
+            self.fail(msg_prefix + "Response did not use any contexts to "
+                      "render the response")
 
         # Put error(s) into a list to simplify processing.
         errors = to_list(errors)
@@ -382,50 +414,65 @@
                     if field in context[form].errors:
                         field_errors = context[form].errors[field]
                         self.failUnless(err in field_errors,
-                                        "The field '%s' on form '%s' in"
-                                        " context %d does not contain the"
-                                        " error '%s' (actual errors: %s)" %
-                                            (field, form, i, err,
-                                             repr(field_errors)))
+                            msg_prefix + "The field '%s' on form '%s' in"
+                            " context %d does not contain the error '%s'"
+                            " (actual errors: %s)" %
+                                (field, form, i, err, repr(field_errors)))
                     elif field in context[form].fields:
-                        self.fail("The field '%s' on form '%s' in context %d"
-                                  " contains no errors" % (field, form, i))
+                        self.fail(msg_prefix + "The field '%s' on form '%s'"
+                                  " in context %d contains no errors" %
+                                      (field, form, i))
                     else:
-                        self.fail("The form '%s' in context %d does not"
-                                  " contain the field '%s'" %
+                        self.fail(msg_prefix + "The form '%s' in context %d"
+                                  " does not contain the field '%s'" %
                                       (form, i, field))
                 else:
                     non_field_errors = context[form].non_field_errors()
                     self.failUnless(err in non_field_errors,
-                        "The form '%s' in context %d does not contain the"
-                        " non-field error '%s' (actual errors: %s)" %
+                        msg_prefix + "The form '%s' in context %d does not"
+                        " contain the non-field error '%s'"
+                        " (actual errors: %s)" %
                             (form, i, err, non_field_errors))
         if not found_form:
-            self.fail("The form '%s' was not used to render the response" %
-                          form)
+            self.fail(msg_prefix + "The form '%s' was not used to render the"
+                      " response" % form)
 
-    def assertTemplateUsed(self, response, template_name):
+    def assertTemplateUsed(self, response, template_name, msg_prefix=''):
         """
         Asserts that the template with the provided name was used in rendering
         the response.
         """
+        if msg_prefix:
+            msg_prefix += ": "
+
         template_names = [t.name for t in to_list(response.template)]
         if not template_names:
-            self.fail('No templates used to render the response')
+            self.fail(msg_prefix + "No templates used to render the response")
         self.failUnless(template_name in template_names,
-            (u"Template '%s' was not a template used to render the response."
-             u" Actual template(s) used: %s") % (template_name,
-                                                 u', '.join(template_names)))
+            msg_prefix + "Template '%s' was not a template used to render"
+            " the response. Actual template(s) used: %s" %
+                (template_name, u', '.join(template_names)))
 
-    def assertTemplateNotUsed(self, response, template_name):
+    def assertTemplateNotUsed(self, response, template_name, msg_prefix=''):
         """
         Asserts that the template with the provided name was NOT used in
         rendering the response.
         """
+        if msg_prefix:
+            msg_prefix += ": "
+
         template_names = [t.name for t in to_list(response.template)]
         self.failIf(template_name in template_names,
-            (u"Template '%s' was used unexpectedly in rendering the"
-             u" response") % template_name)
+            msg_prefix + "Template '%s' was used unexpectedly in rendering"
+            " the response" % template_name)
+
+def connections_support_transactions():
+    """
+    Returns True if all connections support transactions.  This is messy
+    because 2.4 doesn't support any or all.
+    """
+    return all(conn.settings_dict['SUPPORTS_TRANSACTIONS']
+        for conn in connections.all())
 
 class TestCase(TransactionTestCase):
     """
@@ -436,27 +483,47 @@
     """
 
     def _fixture_setup(self):
-        if not settings.DATABASE_SUPPORTS_TRANSACTIONS:
+        if not connections_support_transactions():
             return super(TestCase, self)._fixture_setup()
 
-        transaction.enter_transaction_management()
-        transaction.managed(True)
+        # If the test case has a multi_db=True flag, setup all databases.
+        # Otherwise, just use default.
+        if getattr(self, 'multi_db', False):
+            databases = connections
+        else:
+            databases = [DEFAULT_DB_ALIAS]
+
+        for db in databases:
+            transaction.enter_transaction_management(using=db)
+            transaction.managed(True, using=db)
         disable_transaction_methods()
 
         from django.contrib.sites.models import Site
         Site.objects.clear_cache()
 
-        if hasattr(self, 'fixtures'):
-            call_command('loaddata', *self.fixtures, **{
-                                                        'verbosity': 0,
-                                                        'commit': False
-                                                        })
+        for db in databases:
+            if hasattr(self, 'fixtures'):
+                call_command('loaddata', *self.fixtures, **{
+                                                            'verbosity': 0,
+                                                            'commit': False,
+                                                            'database': db
+                                                            })
 
     def _fixture_teardown(self):
-        if not settings.DATABASE_SUPPORTS_TRANSACTIONS:
+        if not connections_support_transactions():
             return super(TestCase, self)._fixture_teardown()
 
+        # If the test case has a multi_db=True flag, teardown all databases.
+        # Otherwise, just teardown default.
+        if getattr(self, 'multi_db', False):
+            databases = connections
+        else:
+            databases = [DEFAULT_DB_ALIAS]
+
         restore_transaction_methods()
-        transaction.rollback()
-        transaction.leave_transaction_management()
-        connection.close()
+        for db in databases:
+            transaction.rollback(using=db)
+            transaction.leave_transaction_management(using=db)
+
+        for connection in connections.all():
+            connection.close()
--- a/web/lib/django/test/utils.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/test/utils.py	Tue May 25 02:43:45 2010 +0200
@@ -1,7 +1,7 @@
 import sys, time, os
 from django.conf import settings
-from django.db import connection
 from django.core import mail
+from django.core.mail.backends import locmem
 from django.test import signals
 from django.template import Template
 from django.utils.translation import deactivate
@@ -15,7 +15,7 @@
             for subcontext in self:
                 if key in subcontext:
                     return subcontext[key]
-            raise KeyError
+            raise KeyError(key)
         else:
             return super(ContextList, self).__getitem__(key)
 
@@ -28,37 +28,22 @@
     signals.template_rendered.send(sender=self, template=self, context=context)
     return self.nodelist.render(context)
 
-class TestSMTPConnection(object):
-    """A substitute SMTP connection for use during test sessions.
-    The test connection stores email messages in a dummy outbox,
-    rather than sending them out on the wire.
-
-    """
-    def __init__(*args, **kwargs):
-        pass
-    def open(self):
-        "Mock the SMTPConnection open() interface"
-        pass
-    def close(self):
-        "Mock the SMTPConnection close() interface"
-        pass
-    def send_messages(self, messages):
-        "Redirect messages to the dummy outbox"
-        mail.outbox.extend(messages)
-        return len(messages)
 
 def setup_test_environment():
     """Perform any global pre-test setup. This involves:
 
         - Installing the instrumented test renderer
-        - Diverting the email sending functions to a test buffer
+        - Set the email backend to the locmem email backend.
         - Setting the active locale to match the LANGUAGE_CODE setting.
     """
-    Template.original_render = Template.render
-    Template.render = instrumented_test_render
+    Template.original_render = Template._render
+    Template._render = instrumented_test_render
 
     mail.original_SMTPConnection = mail.SMTPConnection
-    mail.SMTPConnection = TestSMTPConnection
+    mail.SMTPConnection = locmem.EmailBackend
+
+    mail.original_email_backend = settings.EMAIL_BACKEND
+    settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
 
     mail.outbox = []
 
@@ -71,15 +56,17 @@
         - Restoring the email sending functions
 
     """
-    Template.render = Template.original_render
+    Template._render = Template.original_render
     del Template.original_render
 
     mail.SMTPConnection = mail.original_SMTPConnection
     del mail.original_SMTPConnection
 
+    settings.EMAIL_BACKEND = mail.original_email_backend
+    del mail.original_email_backend
+
     del mail.outbox
 
-
 def get_runner(settings):
     test_path = settings.TEST_RUNNER.split('.')
     # Allow for Python 2.5 relative paths
--- a/web/lib/django/utils/_decimal.py	Wed May 19 17:43:59 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3079 +0,0 @@
-# Copyright (c) 2004 Python Software Foundation.
-# All rights reserved.
-
-# Written by Eric Price <eprice at tjhsst.edu>
-#    and Facundo Batista <facundo at taniquetil.com.ar>
-#    and Raymond Hettinger <python at rcn.com>
-#    and Aahz <aahz at pobox.com>
-#    and Tim Peters
-
-# This module is currently Py2.3 compatible and should be kept that way
-# unless a major compelling advantage arises.  IOW, 2.3 compatibility is
-# strongly preferred, but not guaranteed.
-
-# Also, this module should be kept in sync with the latest updates of
-# the IBM specification as it evolves.  Those updates will be treated
-# as bug fixes (deviation from the spec is a compatibility, usability
-# bug) and will be backported.  At this point the spec is stabilizing
-# and the updates are becoming fewer, smaller, and less significant.
-
-"""
-This is a Py2.3 implementation of decimal floating point arithmetic based on
-the General Decimal Arithmetic Specification:
-
-    www2.hursley.ibm.com/decimal/decarith.html
-
-and IEEE standard 854-1987:
-
-    www.cs.berkeley.edu/~ejr/projects/754/private/drafts/854-1987/dir.html
-
-Decimal floating point has finite precision with arbitrarily large bounds.
-
-The purpose of the module is to support arithmetic using familiar
-"schoolhouse" rules and to avoid the some of tricky representation
-issues associated with binary floating point.  The package is especially
-useful for financial applications or for contexts where users have
-expectations that are at odds with binary floating point (for instance,
-in binary floating point, 1.00 % 0.1 gives 0.09999999999999995 instead
-of the expected Decimal("0.00") returned by decimal floating point).
-
-Here are some examples of using the decimal module:
-
->>> from decimal import *
->>> setcontext(ExtendedContext)
->>> Decimal(0)
-Decimal("0")
->>> Decimal("1")
-Decimal("1")
->>> Decimal("-.0123")
-Decimal("-0.0123")
->>> Decimal(123456)
-Decimal("123456")
->>> Decimal("123.45e12345678901234567890")
-Decimal("1.2345E+12345678901234567892")
->>> Decimal("1.33") + Decimal("1.27")
-Decimal("2.60")
->>> Decimal("12.34") + Decimal("3.87") - Decimal("18.41")
-Decimal("-2.20")
->>> dig = Decimal(1)
->>> print dig / Decimal(3)
-0.333333333
->>> getcontext().prec = 18
->>> print dig / Decimal(3)
-0.333333333333333333
->>> print dig.sqrt()
-1
->>> print Decimal(3).sqrt()
-1.73205080756887729
->>> print Decimal(3) ** 123
-4.85192780976896427E+58
->>> inf = Decimal(1) / Decimal(0)
->>> print inf
-Infinity
->>> neginf = Decimal(-1) / Decimal(0)
->>> print neginf
--Infinity
->>> print neginf + inf
-NaN
->>> print neginf * inf
--Infinity
->>> print dig / 0
-Infinity
->>> getcontext().traps[DivisionByZero] = 1
->>> print dig / 0
-Traceback (most recent call last):
-  ...
-  ...
-  ...
-DivisionByZero: x / 0
->>> c = Context()
->>> c.traps[InvalidOperation] = 0
->>> print c.flags[InvalidOperation]
-0
->>> c.divide(Decimal(0), Decimal(0))
-Decimal("NaN")
->>> c.traps[InvalidOperation] = 1
->>> print c.flags[InvalidOperation]
-1
->>> c.flags[InvalidOperation] = 0
->>> print c.flags[InvalidOperation]
-0
->>> print c.divide(Decimal(0), Decimal(0))
-Traceback (most recent call last):
-  ...
-  ...
-  ...
-InvalidOperation: 0 / 0
->>> print c.flags[InvalidOperation]
-1
->>> c.flags[InvalidOperation] = 0
->>> c.traps[InvalidOperation] = 0
->>> print c.divide(Decimal(0), Decimal(0))
-NaN
->>> print c.flags[InvalidOperation]
-1
->>>
-"""
-
-__all__ = [
-    # Two major classes
-    'Decimal', 'Context',
-
-    # Contexts
-    'DefaultContext', 'BasicContext', 'ExtendedContext',
-
-    # Exceptions
-    'DecimalException', 'Clamped', 'InvalidOperation', 'DivisionByZero',
-    'Inexact', 'Rounded', 'Subnormal', 'Overflow', 'Underflow',
-
-    # Constants for use in setting up contexts
-    'ROUND_DOWN', 'ROUND_HALF_UP', 'ROUND_HALF_EVEN', 'ROUND_CEILING',
-    'ROUND_FLOOR', 'ROUND_UP', 'ROUND_HALF_DOWN',
-
-    # Functions for manipulating contexts
-    'setcontext', 'getcontext'
-]
-
-import copy as _copy
-
-#Rounding
-ROUND_DOWN = 'ROUND_DOWN'
-ROUND_HALF_UP = 'ROUND_HALF_UP'
-ROUND_HALF_EVEN = 'ROUND_HALF_EVEN'
-ROUND_CEILING = 'ROUND_CEILING'
-ROUND_FLOOR = 'ROUND_FLOOR'
-ROUND_UP = 'ROUND_UP'
-ROUND_HALF_DOWN = 'ROUND_HALF_DOWN'
-
-#Rounding decision (not part of the public API)
-NEVER_ROUND = 'NEVER_ROUND'    # Round in division (non-divmod), sqrt ONLY
-ALWAYS_ROUND = 'ALWAYS_ROUND'  # Every operation rounds at end.
-
-#Errors
-
-class DecimalException(ArithmeticError):
-    """Base exception class.
-
-    Used exceptions derive from this.
-    If an exception derives from another exception besides this (such as
-    Underflow (Inexact, Rounded, Subnormal) that indicates that it is only
-    called if the others are present.  This isn't actually used for
-    anything, though.
-
-    handle  -- Called when context._raise_error is called and the
-               trap_enabler is set.  First argument is self, second is the
-               context.  More arguments can be given, those being after
-               the explanation in _raise_error (For example,
-               context._raise_error(NewError, '(-x)!', self._sign) would
-               call NewError().handle(context, self._sign).)
-
-    To define a new exception, it should be sufficient to have it derive
-    from DecimalException.
-    """
-    def handle(self, context, *args):
-        pass
-
-
-class Clamped(DecimalException):
-    """Exponent of a 0 changed to fit bounds.
-
-    This occurs and signals clamped if the exponent of a result has been
-    altered in order to fit the constraints of a specific concrete
-    representation. This may occur when the exponent of a zero result would
-    be outside the bounds of a representation, or  when a large normal
-    number would have an encoded exponent that cannot be represented. In
-    this latter case, the exponent is reduced to fit and the corresponding
-    number of zero digits are appended to the coefficient ("fold-down").
-    """
-
-
-class InvalidOperation(DecimalException):
-    """An invalid operation was performed.
-
-    Various bad things cause this:
-
-    Something creates a signaling NaN
-    -INF + INF
-     0 * (+-)INF
-     (+-)INF / (+-)INF
-    x % 0
-    (+-)INF % x
-    x._rescale( non-integer )
-    sqrt(-x) , x > 0
-    0 ** 0
-    x ** (non-integer)
-    x ** (+-)INF
-    An operand is invalid
-    """
-    def handle(self, context, *args):
-        if args:
-            if args[0] == 1: #sNaN, must drop 's' but keep diagnostics
-                return Decimal( (args[1]._sign, args[1]._int, 'n') )
-        return NaN
-
-class ConversionSyntax(InvalidOperation):
-    """Trying to convert badly formed string.
-
-    This occurs and signals invalid-operation if an string is being
-    converted to a number and it does not conform to the numeric string
-    syntax. The result is [0,qNaN].
-    """
-
-    def handle(self, context, *args):
-        return (0, (0,), 'n') #Passed to something which uses a tuple.
-
-class DivisionByZero(DecimalException, ZeroDivisionError):
-    """Division by 0.
-
-    This occurs and signals division-by-zero if division of a finite number
-    by zero was attempted (during a divide-integer or divide operation, or a
-    power operation with negative right-hand operand), and the dividend was
-    not zero.
-
-    The result of the operation is [sign,inf], where sign is the exclusive
-    or of the signs of the operands for divide, or is 1 for an odd power of
-    -0, for power.
-    """
-
-    def handle(self, context, sign, double = None, *args):
-        if double is not None:
-            return (Infsign[sign],)*2
-        return Infsign[sign]
-
-class DivisionImpossible(InvalidOperation):
-    """Cannot perform the division adequately.
-
-    This occurs and signals invalid-operation if the integer result of a
-    divide-integer or remainder operation had too many digits (would be
-    longer than precision). The result is [0,qNaN].
-    """
-
-    def handle(self, context, *args):
-        return (NaN, NaN)
-
-class DivisionUndefined(InvalidOperation, ZeroDivisionError):
-    """Undefined result of division.
-
-    This occurs and signals invalid-operation if division by zero was
-    attempted (during a divide-integer, divide, or remainder operation), and
-    the dividend is also zero. The result is [0,qNaN].
-    """
-
-    def handle(self, context, tup=None, *args):
-        if tup is not None:
-            return (NaN, NaN) #for 0 %0, 0 // 0
-        return NaN
-
-class Inexact(DecimalException):
-    """Had to round, losing information.
-
-    This occurs and signals inexact whenever the result of an operation is
-    not exact (that is, it needed to be rounded and any discarded digits
-    were non-zero), or if an overflow or underflow condition occurs. The
-    result in all cases is unchanged.
-
-    The inexact signal may be tested (or trapped) to determine if a given
-    operation (or sequence of operations) was inexact.
-    """
-    pass
-
-class InvalidContext(InvalidOperation):
-    """Invalid context.  Unknown rounding, for example.
-
-    This occurs and signals invalid-operation if an invalid context was
-    detected during an operation. This can occur if contexts are not checked
-    on creation and either the precision exceeds the capability of the
-    underlying concrete representation or an unknown or unsupported rounding
-    was specified. These aspects of the context need only be checked when
-    the values are required to be used. The result is [0,qNaN].
-    """
-
-    def handle(self, context, *args):
-        return NaN
-
-class Rounded(DecimalException):
-    """Number got rounded (not  necessarily changed during rounding).
-
-    This occurs and signals rounded whenever the result of an operation is
-    rounded (that is, some zero or non-zero digits were discarded from the
-    coefficient), or if an overflow or underflow condition occurs. The
-    result in all cases is unchanged.
-
-    The rounded signal may be tested (or trapped) to determine if a given
-    operation (or sequence of operations) caused a loss of precision.
-    """
-    pass
-
-class Subnormal(DecimalException):
-    """Exponent < Emin before rounding.
-
-    This occurs and signals subnormal whenever the result of a conversion or
-    operation is subnormal (that is, its adjusted exponent is less than
-    Emin, before any rounding). The result in all cases is unchanged.
-
-    The subnormal signal may be tested (or trapped) to determine if a given
-    or operation (or sequence of operations) yielded a subnormal result.
-    """
-    pass
-
-class Overflow(Inexact, Rounded):
-    """Numerical overflow.
-
-    This occurs and signals overflow if the adjusted exponent of a result
-    (from a conversion or from an operation that is not an attempt to divide
-    by zero), after rounding, would be greater than the largest value that
-    can be handled by the implementation (the value Emax).
-
-    The result depends on the rounding mode:
-
-    For round-half-up and round-half-even (and for round-half-down and
-    round-up, if implemented), the result of the operation is [sign,inf],
-    where sign is the sign of the intermediate result. For round-down, the
-    result is the largest finite number that can be represented in the
-    current precision, with the sign of the intermediate result. For
-    round-ceiling, the result is the same as for round-down if the sign of
-    the intermediate result is 1, or is [0,inf] otherwise. For round-floor,
-    the result is the same as for round-down if the sign of the intermediate
-    result is 0, or is [1,inf] otherwise. In all cases, Inexact and Rounded
-    will also be raised.
-   """
-
-    def handle(self, context, sign, *args):
-        if context.rounding in (ROUND_HALF_UP, ROUND_HALF_EVEN,
-                                     ROUND_HALF_DOWN, ROUND_UP):
-            return Infsign[sign]
-        if sign == 0:
-            if context.rounding == ROUND_CEILING:
-                return Infsign[sign]
-            return Decimal((sign, (9,)*context.prec,
-                            context.Emax-context.prec+1))
-        if sign == 1:
-            if context.rounding == ROUND_FLOOR:
-                return Infsign[sign]
-            return Decimal( (sign, (9,)*context.prec,
-                             context.Emax-context.prec+1))
-
-
-class Underflow(Inexact, Rounded, Subnormal):
-    """Numerical underflow with result rounded to 0.
-
-    This occurs and signals underflow if a result is inexact and the
-    adjusted exponent of the result would be smaller (more negative) than
-    the smallest value that can be handled by the implementation (the value
-    Emin). That is, the result is both inexact and subnormal.
-
-    The result after an underflow will be a subnormal number rounded, if
-    necessary, so that its exponent is not less than Etiny. This may result
-    in 0 with the sign of the intermediate result and an exponent of Etiny.
-
-    In all cases, Inexact, Rounded, and Subnormal will also be raised.
-    """
-
-# List of public traps and flags
-_signals = [Clamped, DivisionByZero, Inexact, Overflow, Rounded,
-           Underflow, InvalidOperation, Subnormal]
-
-# Map conditions (per the spec) to signals
-_condition_map = {ConversionSyntax:InvalidOperation,
-                  DivisionImpossible:InvalidOperation,
-                  DivisionUndefined:InvalidOperation,
-                  InvalidContext:InvalidOperation}
-
-##### Context Functions #######################################
-
-# The getcontext() and setcontext() function manage access to a thread-local
-# current context.  Py2.4 offers direct support for thread locals.  If that
-# is not available, use threading.currentThread() which is slower but will
-# work for older Pythons.  If threads are not part of the build, create a
-# mock threading object with threading.local() returning the module namespace.
-
-try:
-    import threading
-except ImportError:
-    # Python was compiled without threads; create a mock object instead
-    import sys
-    class MockThreading:
-        def local(self, sys=sys):
-            return sys.modules[__name__]
-    threading = MockThreading()
-    del sys, MockThreading
-
-try:
-    threading.local
-
-except AttributeError:
-
-    #To fix reloading, force it to create a new context
-    #Old contexts have different exceptions in their dicts, making problems.
-    if hasattr(threading.currentThread(), '__decimal_context__'):
-        del threading.currentThread().__decimal_context__
-
-    def setcontext(context):
-        """Set this thread's context to context."""
-        if context in (DefaultContext, BasicContext, ExtendedContext):
-            context = context.copy()
-            context.clear_flags()
-        threading.currentThread().__decimal_context__ = context
-
-    def getcontext():
-        """Returns this thread's context.
-
-        If this thread does not yet have a context, returns
-        a new context and sets this thread's context.
-        New contexts are copies of DefaultContext.
-        """
-        try:
-            return threading.currentThread().__decimal_context__
-        except AttributeError:
-            context = Context()
-            threading.currentThread().__decimal_context__ = context
-            return context
-
-else:
-
-    local = threading.local()
-    if hasattr(local, '__decimal_context__'):
-        del local.__decimal_context__
-
-    def getcontext(_local=local):
-        """Returns this thread's context.
-
-        If this thread does not yet have a context, returns
-        a new context and sets this thread's context.
-        New contexts are copies of DefaultContext.
-        """
-        try:
-            return _local.__decimal_context__
-        except AttributeError:
-            context = Context()
-            _local.__decimal_context__ = context
-            return context
-
-    def setcontext(context, _local=local):
-        """Set this thread's context to context."""
-        if context in (DefaultContext, BasicContext, ExtendedContext):
-            context = context.copy()
-            context.clear_flags()
-        _local.__decimal_context__ = context
-
-    del threading, local        # Don't contaminate the namespace
-
-
-##### Decimal class ###########################################
-
-class Decimal(object):
-    """Floating point class for decimal arithmetic."""
-
-    __slots__ = ('_exp','_int','_sign', '_is_special')
-    # Generally, the value of the Decimal instance is given by
-    #  (-1)**_sign * _int * 10**_exp
-    # Special values are signified by _is_special == True
-
-    # We're immutable, so use __new__ not __init__
-    def __new__(cls, value="0", context=None):
-        """Create a decimal point instance.
-
-        >>> Decimal('3.14')              # string input
-        Decimal("3.14")
-        >>> Decimal((0, (3, 1, 4), -2))  # tuple input (sign, digit_tuple, exponent)
-        Decimal("3.14")
-        >>> Decimal(314)                 # int or long
-        Decimal("314")
-        >>> Decimal(Decimal(314))        # another decimal instance
-        Decimal("314")
-        """
-
-        self = object.__new__(cls)
-        self._is_special = False
-
-        # From an internal working value
-        if isinstance(value, _WorkRep):
-            self._sign = value.sign
-            self._int = tuple(map(int, str(value.int)))
-            self._exp = int(value.exp)
-            return self
-
-        # From another decimal
-        if isinstance(value, Decimal):
-            self._exp  = value._exp
-            self._sign = value._sign
-            self._int  = value._int
-            self._is_special  = value._is_special
-            return self
-
-        # From an integer
-        if isinstance(value, (int,long)):
-            if value >= 0:
-                self._sign = 0
-            else:
-                self._sign = 1
-            self._exp = 0
-            self._int = tuple(map(int, str(abs(value))))
-            return self
-
-        # tuple/list conversion (possibly from as_tuple())
-        if isinstance(value, (list,tuple)):
-            if len(value) != 3:
-                raise ValueError, 'Invalid arguments'
-            if value[0] not in (0,1):
-                raise ValueError, 'Invalid sign'
-            for digit in value[1]:
-                if not isinstance(digit, (int,long)) or digit < 0:
-                    raise ValueError, "The second value in the tuple must be composed of non negative integer elements."
-
-            self._sign = value[0]
-            self._int  = tuple(value[1])
-            if value[2] in ('F','n','N'):
-                self._exp = value[2]
-                self._is_special = True
-            else:
-                self._exp  = int(value[2])
-            return self
-
-        if isinstance(value, float):
-            raise TypeError("Cannot convert float to Decimal.  " +
-                            "First convert the float to a string")
-
-        # Other argument types may require the context during interpretation
-        if context is None:
-            context = getcontext()
-
-        # From a string
-        # REs insist on real strings, so we can too.
-        if isinstance(value, basestring):
-            if _isinfinity(value):
-                self._exp = 'F'
-                self._int = (0,)
-                self._is_special = True
-                if _isinfinity(value) == 1:
-                    self._sign = 0
-                else:
-                    self._sign = 1
-                return self
-            if _isnan(value):
-                sig, sign, diag = _isnan(value)
-                self._is_special = True
-                if len(diag) > context.prec: #Diagnostic info too long
-                    self._sign, self._int, self._exp = \
-                                context._raise_error(ConversionSyntax)
-                    return self
-                if sig == 1:
-                    self._exp = 'n' #qNaN
-                else: #sig == 2
-                    self._exp = 'N' #sNaN
-                self._sign = sign
-                self._int = tuple(map(int, diag)) #Diagnostic info
-                return self
-            try:
-                self._sign, self._int, self._exp = _string2exact(value)
-            except ValueError:
-                self._is_special = True
-                self._sign, self._int, self._exp = context._raise_error(ConversionSyntax)
-            return self
-
-        raise TypeError("Cannot convert %r to Decimal" % value)
-
-    def _isnan(self):
-        """Returns whether the number is not actually one.
-
-        0 if a number
-        1 if NaN
-        2 if sNaN
-        """
-        if self._is_special:
-            exp = self._exp
-            if exp == 'n':
-                return 1
-            elif exp == 'N':
-                return 2
-        return 0
-
-    def _isinfinity(self):
-        """Returns whether the number is infinite
-
-        0 if finite or not a number
-        1 if +INF
-        -1 if -INF
-        """
-        if self._exp == 'F':
-            if self._sign:
-                return -1
-            return 1
-        return 0
-
-    def _check_nans(self, other = None, context=None):
-        """Returns whether the number is not actually one.
-
-        if self, other are sNaN, signal
-        if self, other are NaN return nan
-        return 0
-
-        Done before operations.
-        """
-
-        self_is_nan = self._isnan()
-        if other is None:
-            other_is_nan = False
-        else:
-            other_is_nan = other._isnan()
-
-        if self_is_nan or other_is_nan:
-            if context is None:
-                context = getcontext()
-
-            if self_is_nan == 2:
-                return context._raise_error(InvalidOperation, 'sNaN',
-                                        1, self)
-            if other_is_nan == 2:
-                return context._raise_error(InvalidOperation, 'sNaN',
-                                        1, other)
-            if self_is_nan:
-                return self
-
-            return other
-        return 0
-
-    def __nonzero__(self):
-        """Is the number non-zero?
-
-        0 if self == 0
-        1 if self != 0
-        """
-        if self._is_special:
-            return 1
-        return sum(self._int) != 0
-
-    def __cmp__(self, other, context=None):
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-
-        if self._is_special or other._is_special:
-            ans = self._check_nans(other, context)
-            if ans:
-                return 1 # Comparison involving NaN's always reports self > other
-
-            # INF = INF
-            return cmp(self._isinfinity(), other._isinfinity())
-
-        if not self and not other:
-            return 0 #If both 0, sign comparison isn't certain.
-
-        #If different signs, neg one is less
-        if other._sign < self._sign:
-            return -1
-        if self._sign < other._sign:
-            return 1
-
-        self_adjusted = self.adjusted()
-        other_adjusted = other.adjusted()
-        if self_adjusted == other_adjusted and \
-           self._int + (0,)*(self._exp - other._exp) == \
-           other._int + (0,)*(other._exp - self._exp):
-            return 0 #equal, except in precision. ([0]*(-x) = [])
-        elif self_adjusted > other_adjusted and self._int[0] != 0:
-            return (-1)**self._sign
-        elif self_adjusted < other_adjusted and other._int[0] != 0:
-            return -((-1)**self._sign)
-
-        # Need to round, so make sure we have a valid context
-        if context is None:
-            context = getcontext()
-
-        context = context._shallow_copy()
-        rounding = context._set_rounding(ROUND_UP) #round away from 0
-
-        flags = context._ignore_all_flags()
-        res = self.__sub__(other, context=context)
-
-        context._regard_flags(*flags)
-
-        context.rounding = rounding
-
-        if not res:
-            return 0
-        elif res._sign:
-            return -1
-        return 1
-
-    def __eq__(self, other):
-        if not isinstance(other, (Decimal, int, long)):
-            return NotImplemented
-        return self.__cmp__(other) == 0
-
-    def __ne__(self, other):
-        if not isinstance(other, (Decimal, int, long)):
-            return NotImplemented
-        return self.__cmp__(other) != 0
-
-    def compare(self, other, context=None):
-        """Compares one to another.
-
-        -1 => a < b
-        0  => a = b
-        1  => a > b
-        NaN => one is NaN
-        Like __cmp__, but returns Decimal instances.
-        """
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-
-        #compare(NaN, NaN) = NaN
-        if (self._is_special or other and other._is_special):
-            ans = self._check_nans(other, context)
-            if ans:
-                return ans
-
-        return Decimal(self.__cmp__(other, context))
-
-    def __hash__(self):
-        """x.__hash__() <==> hash(x)"""
-        # Decimal integers must hash the same as the ints
-        # Non-integer decimals are normalized and hashed as strings
-        # Normalization assures that hast(100E-1) == hash(10)
-        if self._is_special:
-            if self._isnan():
-                raise TypeError('Cannot hash a NaN value.')
-            return hash(str(self))
-        i = int(self)
-        if self == Decimal(i):
-            return hash(i)
-        assert self.__nonzero__()   # '-0' handled by integer case
-        return hash(str(self.normalize()))
-
-    def as_tuple(self):
-        """Represents the number as a triple tuple.
-
-        To show the internals exactly as they are.
-        """
-        return (self._sign, self._int, self._exp)
-
-    def __repr__(self):
-        """Represents the number as an instance of Decimal."""
-        # Invariant:  eval(repr(d)) == d
-        return 'Decimal("%s")' % str(self)
-
-    def __str__(self, eng = 0, context=None):
-        """Return string representation of the number in scientific notation.
-
-        Captures all of the information in the underlying representation.
-        """
-
-        if self._is_special:
-            if self._isnan():
-                minus = '-'*self._sign
-                if self._int == (0,):
-                    info = ''
-                else:
-                    info = ''.join(map(str, self._int))
-                if self._isnan() == 2:
-                    return minus + 'sNaN' + info
-                return minus + 'NaN' + info
-            if self._isinfinity():
-                minus = '-'*self._sign
-                return minus + 'Infinity'
-
-        if context is None:
-            context = getcontext()
-
-        tmp = map(str, self._int)
-        numdigits = len(self._int)
-        leftdigits = self._exp + numdigits
-        if eng and not self: #self = 0eX wants 0[.0[0]]eY, not [[0]0]0eY
-            if self._exp < 0 and self._exp >= -6: #short, no need for e/E
-                s = '-'*self._sign + '0.' + '0'*(abs(self._exp))
-                return s
-            #exp is closest mult. of 3 >= self._exp
-            exp = ((self._exp - 1)// 3 + 1) * 3
-            if exp != self._exp:
-                s = '0.'+'0'*(exp - self._exp)
-            else:
-                s = '0'
-            if exp != 0:
-                if context.capitals:
-                    s += 'E'
-                else:
-                    s += 'e'
-                if exp > 0:
-                    s += '+' #0.0e+3, not 0.0e3
-                s += str(exp)
-            s = '-'*self._sign + s
-            return s
-        if eng:
-            dotplace = (leftdigits-1)%3+1
-            adjexp = leftdigits -1 - (leftdigits-1)%3
-        else:
-            adjexp = leftdigits-1
-            dotplace = 1
-        if self._exp == 0:
-            pass
-        elif self._exp < 0 and adjexp >= 0:
-            tmp.insert(leftdigits, '.')
-        elif self._exp < 0 and adjexp >= -6:
-            tmp[0:0] = ['0'] * int(-leftdigits)
-            tmp.insert(0, '0.')
-        else:
-            if numdigits > dotplace:
-                tmp.insert(dotplace, '.')
-            elif numdigits < dotplace:
-                tmp.extend(['0']*(dotplace-numdigits))
-            if adjexp:
-                if not context.capitals:
-                    tmp.append('e')
-                else:
-                    tmp.append('E')
-                    if adjexp > 0:
-                        tmp.append('+')
-                tmp.append(str(adjexp))
-        if eng:
-            while tmp[0:1] == ['0']:
-                tmp[0:1] = []
-            if len(tmp) == 0 or tmp[0] == '.' or tmp[0].lower() == 'e':
-                tmp[0:0] = ['0']
-        if self._sign:
-            tmp.insert(0, '-')
-
-        return ''.join(tmp)
-
-    def to_eng_string(self, context=None):
-        """Convert to engineering-type string.
-
-        Engineering notation has an exponent which is a multiple of 3, so there
-        are up to 3 digits left of the decimal place.
-
-        Same rules for when in exponential and when as a value as in __str__.
-        """
-        return self.__str__(eng=1, context=context)
-
-    def __neg__(self, context=None):
-        """Returns a copy with the sign switched.
-
-        Rounds, if it has reason.
-        """
-        if self._is_special:
-            ans = self._check_nans(context=context)
-            if ans:
-                return ans
-
-        if not self:
-            # -Decimal('0') is Decimal('0'), not Decimal('-0')
-            sign = 0
-        elif self._sign:
-            sign = 0
-        else:
-            sign = 1
-
-        if context is None:
-            context = getcontext()
-        if context._rounding_decision == ALWAYS_ROUND:
-            return Decimal((sign, self._int, self._exp))._fix(context)
-        return Decimal( (sign, self._int, self._exp))
-
-    def __pos__(self, context=None):
-        """Returns a copy, unless it is a sNaN.
-
-        Rounds the number (if more then precision digits)
-        """
-        if self._is_special:
-            ans = self._check_nans(context=context)
-            if ans:
-                return ans
-
-        sign = self._sign
-        if not self:
-            # + (-0) = 0
-            sign = 0
-
-        if context is None:
-            context = getcontext()
-
-        if context._rounding_decision == ALWAYS_ROUND:
-            ans = self._fix(context)
-        else:
-            ans = Decimal(self)
-        ans._sign = sign
-        return ans
-
-    def __abs__(self, round=1, context=None):
-        """Returns the absolute value of self.
-
-        If the second argument is 0, do not round.
-        """
-        if self._is_special:
-            ans = self._check_nans(context=context)
-            if ans:
-                return ans
-
-        if not round:
-            if context is None:
-                context = getcontext()
-            context = context._shallow_copy()
-            context._set_rounding_decision(NEVER_ROUND)
-
-        if self._sign:
-            ans = self.__neg__(context=context)
-        else:
-            ans = self.__pos__(context=context)
-
-        return ans
-
-    def __add__(self, other, context=None):
-        """Returns self + other.
-
-        -INF + INF (or the reverse) cause InvalidOperation errors.
-        """
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-
-        if context is None:
-            context = getcontext()
-
-        if self._is_special or other._is_special:
-            ans = self._check_nans(other, context)
-            if ans:
-                return ans
-
-            if self._isinfinity():
-                #If both INF, same sign => same as both, opposite => error.
-                if self._sign != other._sign and other._isinfinity():
-                    return context._raise_error(InvalidOperation, '-INF + INF')
-                return Decimal(self)
-            if other._isinfinity():
-                return Decimal(other)  #Can't both be infinity here
-
-        shouldround = context._rounding_decision == ALWAYS_ROUND
-
-        exp = min(self._exp, other._exp)
-        negativezero = 0
-        if context.rounding == ROUND_FLOOR and self._sign != other._sign:
-            #If the answer is 0, the sign should be negative, in this case.
-            negativezero = 1
-
-        if not self and not other:
-            sign = min(self._sign, other._sign)
-            if negativezero:
-                sign = 1
-            return Decimal( (sign, (0,), exp))
-        if not self:
-            exp = max(exp, other._exp - context.prec-1)
-            ans = other._rescale(exp, watchexp=0, context=context)
-            if shouldround:
-                ans = ans._fix(context)
-            return ans
-        if not other:
-            exp = max(exp, self._exp - context.prec-1)
-            ans = self._rescale(exp, watchexp=0, context=context)
-            if shouldround:
-                ans = ans._fix(context)
-            return ans
-
-        op1 = _WorkRep(self)
-        op2 = _WorkRep(other)
-        op1, op2 = _normalize(op1, op2, shouldround, context.prec)
-
-        result = _WorkRep()
-        if op1.sign != op2.sign:
-            # Equal and opposite
-            if op1.int == op2.int:
-                if exp < context.Etiny():
-                    exp = context.Etiny()
-                    context._raise_error(Clamped)
-                return Decimal((negativezero, (0,), exp))
-            if op1.int < op2.int:
-                op1, op2 = op2, op1
-                #OK, now abs(op1) > abs(op2)
-            if op1.sign == 1:
-                result.sign = 1
-                op1.sign, op2.sign = op2.sign, op1.sign
-            else:
-                result.sign = 0
-                #So we know the sign, and op1 > 0.
-        elif op1.sign == 1:
-            result.sign = 1
-            op1.sign, op2.sign = (0, 0)
-        else:
-            result.sign = 0
-        #Now, op1 > abs(op2) > 0
-
-        if op2.sign == 0:
-            result.int = op1.int + op2.int
-        else:
-            result.int = op1.int - op2.int
-
-        result.exp = op1.exp
-        ans = Decimal(result)
-        if shouldround:
-            ans = ans._fix(context)
-        return ans
-
-    __radd__ = __add__
-
-    def __sub__(self, other, context=None):
-        """Return self + (-other)"""
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-
-        if self._is_special or other._is_special:
-            ans = self._check_nans(other, context=context)
-            if ans:
-                return ans
-
-        # -Decimal(0) = Decimal(0), which we don't want since
-        # (-0 - 0 = -0 + (-0) = -0, but -0 + 0 = 0.)
-        # so we change the sign directly to a copy
-        tmp = Decimal(other)
-        tmp._sign = 1-tmp._sign
-
-        return self.__add__(tmp, context=context)
-
-    def __rsub__(self, other, context=None):
-        """Return other + (-self)"""
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-
-        tmp = Decimal(self)
-        tmp._sign = 1 - tmp._sign
-        return other.__add__(tmp, context=context)
-
-    def _increment(self, round=1, context=None):
-        """Special case of add, adding 1eExponent
-
-        Since it is common, (rounding, for example) this adds
-        (sign)*one E self._exp to the number more efficiently than add.
-
-        For example:
-        Decimal('5.624e10')._increment() == Decimal('5.625e10')
-        """
-        if self._is_special:
-            ans = self._check_nans(context=context)
-            if ans:
-                return ans
-
-            return Decimal(self) # Must be infinite, and incrementing makes no difference
-
-        L = list(self._int)
-        L[-1] += 1
-        spot = len(L)-1
-        while L[spot] == 10:
-            L[spot] = 0
-            if spot == 0:
-                L[0:0] = [1]
-                break
-            L[spot-1] += 1
-            spot -= 1
-        ans = Decimal((self._sign, L, self._exp))
-
-        if context is None:
-            context = getcontext()
-        if round and context._rounding_decision == ALWAYS_ROUND:
-            ans = ans._fix(context)
-        return ans
-
-    def __mul__(self, other, context=None):
-        """Return self * other.
-
-        (+-) INF * 0 (or its reverse) raise InvalidOperation.
-        """
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-
-        if context is None:
-            context = getcontext()
-
-        resultsign = self._sign ^ other._sign
-
-        if self._is_special or other._is_special:
-            ans = self._check_nans(other, context)
-            if ans:
-                return ans
-
-            if self._isinfinity():
-                if not other:
-                    return context._raise_error(InvalidOperation, '(+-)INF * 0')
-                return Infsign[resultsign]
-
-            if other._isinfinity():
-                if not self:
-                    return context._raise_error(InvalidOperation, '0 * (+-)INF')
-                return Infsign[resultsign]
-
-        resultexp = self._exp + other._exp
-        shouldround = context._rounding_decision == ALWAYS_ROUND
-
-        # Special case for multiplying by zero
-        if not self or not other:
-            ans = Decimal((resultsign, (0,), resultexp))
-            if shouldround:
-                #Fixing in case the exponent is out of bounds
-                ans = ans._fix(context)
-            return ans
-
-        # Special case for multiplying by power of 10
-        if self._int == (1,):
-            ans = Decimal((resultsign, other._int, resultexp))
-            if shouldround:
-                ans = ans._fix(context)
-            return ans
-        if other._int == (1,):
-            ans = Decimal((resultsign, self._int, resultexp))
-            if shouldround:
-                ans = ans._fix(context)
-            return ans
-
-        op1 = _WorkRep(self)
-        op2 = _WorkRep(other)
-
-        ans = Decimal( (resultsign, map(int, str(op1.int * op2.int)), resultexp))
-        if shouldround:
-            ans = ans._fix(context)
-
-        return ans
-    __rmul__ = __mul__
-
-    def __div__(self, other, context=None):
-        """Return self / other."""
-        return self._divide(other, context=context)
-    __truediv__ = __div__
-
-    def _divide(self, other, divmod = 0, context=None):
-        """Return a / b, to context.prec precision.
-
-        divmod:
-        0 => true division
-        1 => (a //b, a%b)
-        2 => a //b
-        3 => a%b
-
-        Actually, if divmod is 2 or 3 a tuple is returned, but errors for
-        computing the other value are not raised.
-        """
-        other = _convert_other(other)
-        if other is NotImplemented:
-            if divmod in (0, 1):
-                return NotImplemented
-            return (NotImplemented, NotImplemented)
-
-        if context is None:
-            context = getcontext()
-
-        sign = self._sign ^ other._sign
-
-        if self._is_special or other._is_special:
-            ans = self._check_nans(other, context)
-            if ans:
-                if divmod:
-                    return (ans, ans)
-                return ans
-
-            if self._isinfinity() and other._isinfinity():
-                if divmod:
-                    return (context._raise_error(InvalidOperation,
-                                            '(+-)INF // (+-)INF'),
-                            context._raise_error(InvalidOperation,
-                                            '(+-)INF % (+-)INF'))
-                return context._raise_error(InvalidOperation, '(+-)INF/(+-)INF')
-
-            if self._isinfinity():
-                if divmod == 1:
-                    return (Infsign[sign],
-                            context._raise_error(InvalidOperation, 'INF % x'))
-                elif divmod == 2:
-                    return (Infsign[sign], NaN)
-                elif divmod == 3:
-                    return (Infsign[sign],
-                            context._raise_error(InvalidOperation, 'INF % x'))
-                return Infsign[sign]
-
-            if other._isinfinity():
-                if divmod:
-                    return (Decimal((sign, (0,), 0)), Decimal(self))
-                context._raise_error(Clamped, 'Division by infinity')
-                return Decimal((sign, (0,), context.Etiny()))
-
-        # Special cases for zeroes
-        if not self and not other:
-            if divmod:
-                return context._raise_error(DivisionUndefined, '0 / 0', 1)
-            return context._raise_error(DivisionUndefined, '0 / 0')
-
-        if not self:
-            if divmod:
-                otherside = Decimal(self)
-                otherside._exp = min(self._exp, other._exp)
-                return (Decimal((sign, (0,), 0)),  otherside)
-            exp = self._exp - other._exp
-            if exp < context.Etiny():
-                exp = context.Etiny()
-                context._raise_error(Clamped, '0e-x / y')
-            if exp > context.Emax:
-                exp = context.Emax
-                context._raise_error(Clamped, '0e+x / y')
-            return Decimal( (sign, (0,), exp) )
-
-        if not other:
-            if divmod:
-                return context._raise_error(DivisionByZero, 'divmod(x,0)',
-                                           sign, 1)
-            return context._raise_error(DivisionByZero, 'x / 0', sign)
-
-        #OK, so neither = 0, INF or NaN
-
-        shouldround = context._rounding_decision == ALWAYS_ROUND
-
-        #If we're dividing into ints, and self < other, stop.
-        #self.__abs__(0) does not round.
-        if divmod and (self.__abs__(0, context) < other.__abs__(0, context)):
-
-            if divmod == 1 or divmod == 3:
-                exp = min(self._exp, other._exp)
-                ans2 = self._rescale(exp, context=context, watchexp=0)
-                if shouldround:
-                    ans2 = ans2._fix(context)
-                return (Decimal( (sign, (0,), 0) ),
-                        ans2)
-
-            elif divmod == 2:
-                #Don't round the mod part, if we don't need it.
-                return (Decimal( (sign, (0,), 0) ), Decimal(self))
-
-        op1 = _WorkRep(self)
-        op2 = _WorkRep(other)
-        op1, op2, adjust = _adjust_coefficients(op1, op2)
-        res = _WorkRep( (sign, 0, (op1.exp - op2.exp)) )
-        if divmod and res.exp > context.prec + 1:
-            return context._raise_error(DivisionImpossible)
-
-        prec_limit = 10 ** context.prec
-        while 1:
-            while op2.int <= op1.int:
-                res.int += 1
-                op1.int -= op2.int
-            if res.exp == 0 and divmod:
-                if res.int >= prec_limit and shouldround:
-                    return context._raise_error(DivisionImpossible)
-                otherside = Decimal(op1)
-                frozen = context._ignore_all_flags()
-
-                exp = min(self._exp, other._exp)
-                otherside = otherside._rescale(exp, context=context, watchexp=0)
-                context._regard_flags(*frozen)
-                if shouldround:
-                    otherside = otherside._fix(context)
-                return (Decimal(res), otherside)
-
-            if op1.int == 0 and adjust >= 0 and not divmod:
-                break
-            if res.int >= prec_limit and shouldround:
-                if divmod:
-                    return context._raise_error(DivisionImpossible)
-                shouldround=1
-                # Really, the answer is a bit higher, so adding a one to
-                # the end will make sure the rounding is right.
-                if op1.int != 0:
-                    res.int *= 10
-                    res.int += 1
-                    res.exp -= 1
-
-                break
-            res.int *= 10
-            res.exp -= 1
-            adjust += 1
-            op1.int *= 10
-            op1.exp -= 1
-
-            if res.exp == 0 and divmod and op2.int > op1.int:
-                #Solves an error in precision.  Same as a previous block.
-
-                if res.int >= prec_limit and shouldround:
-                    return context._raise_error(DivisionImpossible)
-                otherside = Decimal(op1)
-                frozen = context._ignore_all_flags()
-
-                exp = min(self._exp, other._exp)
-                otherside = otherside._rescale(exp, context=context)
-
-                context._regard_flags(*frozen)
-
-                return (Decimal(res), otherside)
-
-        ans = Decimal(res)
-        if shouldround:
-            ans = ans._fix(context)
-        return ans
-
-    def __rdiv__(self, other, context=None):
-        """Swaps self/other and returns __div__."""
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-        return other.__div__(self, context=context)
-    __rtruediv__ = __rdiv__
-
-    def __divmod__(self, other, context=None):
-        """
-        (self // other, self % other)
-        """
-        return self._divide(other, 1, context)
-
-    def __rdivmod__(self, other, context=None):
-        """Swaps self/other and returns __divmod__."""
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-        return other.__divmod__(self, context=context)
-
-    def __mod__(self, other, context=None):
-        """
-        self % other
-        """
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-
-        if self._is_special or other._is_special:
-            ans = self._check_nans(other, context)
-            if ans:
-                return ans
-
-        if self and not other:
-            return context._raise_error(InvalidOperation, 'x % 0')
-
-        return self._divide(other, 3, context)[1]
-
-    def __rmod__(self, other, context=None):
-        """Swaps self/other and returns __mod__."""
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-        return other.__mod__(self, context=context)
-
-    def remainder_near(self, other, context=None):
-        """
-        Remainder nearest to 0-  abs(remainder-near) <= other/2
-        """
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-
-        if self._is_special or other._is_special:
-            ans = self._check_nans(other, context)
-            if ans:
-                return ans
-        if self and not other:
-            return context._raise_error(InvalidOperation, 'x % 0')
-
-        if context is None:
-            context = getcontext()
-        # If DivisionImpossible causes an error, do not leave Rounded/Inexact
-        # ignored in the calling function.
-        context = context._shallow_copy()
-        flags = context._ignore_flags(Rounded, Inexact)
-        #keep DivisionImpossible flags
-        (side, r) = self.__divmod__(other, context=context)
-
-        if r._isnan():
-            context._regard_flags(*flags)
-            return r
-
-        context = context._shallow_copy()
-        rounding = context._set_rounding_decision(NEVER_ROUND)
-
-        if other._sign:
-            comparison = other.__div__(Decimal(-2), context=context)
-        else:
-            comparison = other.__div__(Decimal(2), context=context)
-
-        context._set_rounding_decision(rounding)
-        context._regard_flags(*flags)
-
-        s1, s2 = r._sign, comparison._sign
-        r._sign, comparison._sign = 0, 0
-
-        if r < comparison:
-            r._sign, comparison._sign = s1, s2
-            #Get flags now
-            self.__divmod__(other, context=context)
-            return r._fix(context)
-        r._sign, comparison._sign = s1, s2
-
-        rounding = context._set_rounding_decision(NEVER_ROUND)
-
-        (side, r) = self.__divmod__(other, context=context)
-        context._set_rounding_decision(rounding)
-        if r._isnan():
-            return r
-
-        decrease = not side._iseven()
-        rounding = context._set_rounding_decision(NEVER_ROUND)
-        side = side.__abs__(context=context)
-        context._set_rounding_decision(rounding)
-
-        s1, s2 = r._sign, comparison._sign
-        r._sign, comparison._sign = 0, 0
-        if r > comparison or decrease and r == comparison:
-            r._sign, comparison._sign = s1, s2
-            context.prec += 1
-            if len(side.__add__(Decimal(1), context=context)._int) >= context.prec:
-                context.prec -= 1
-                return context._raise_error(DivisionImpossible)[1]
-            context.prec -= 1
-            if self._sign == other._sign:
-                r = r.__sub__(other, context=context)
-            else:
-                r = r.__add__(other, context=context)
-        else:
-            r._sign, comparison._sign = s1, s2
-
-        return r._fix(context)
-
-    def __floordiv__(self, other, context=None):
-        """self // other"""
-        return self._divide(other, 2, context)[0]
-
-    def __rfloordiv__(self, other, context=None):
-        """Swaps self/other and returns __floordiv__."""
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-        return other.__floordiv__(self, context=context)
-
-    def __float__(self):
-        """Float representation."""
-        return float(str(self))
-
-    def __int__(self):
-        """Converts self to an int, truncating if necessary."""
-        if self._is_special:
-            if self._isnan():
-                context = getcontext()
-                return context._raise_error(InvalidContext)
-            elif self._isinfinity():
-                raise OverflowError, "Cannot convert infinity to long"
-        if self._exp >= 0:
-            s = ''.join(map(str, self._int)) + '0'*self._exp
-        else:
-            s = ''.join(map(str, self._int))[:self._exp]
-        if s == '':
-            s = '0'
-        sign = '-'*self._sign
-        return int(sign + s)
-
-    def __long__(self):
-        """Converts to a long.
-
-        Equivalent to long(int(self))
-        """
-        return long(self.__int__())
-
-    def _fix(self, context):
-        """Round if it is necessary to keep self within prec precision.
-
-        Rounds and fixes the exponent.  Does not raise on a sNaN.
-
-        Arguments:
-        self - Decimal instance
-        context - context used.
-        """
-        if self._is_special:
-            return self
-        if context is None:
-            context = getcontext()
-        prec = context.prec
-        ans = self._fixexponents(context)
-        if len(ans._int) > prec:
-            ans = ans._round(prec, context=context)
-            ans = ans._fixexponents(context)
-        return ans
-
-    def _fixexponents(self, context):
-        """Fix the exponents and return a copy with the exponent in bounds.
-        Only call if known to not be a special value.
-        """
-        folddown = context._clamp
-        Emin = context.Emin
-        ans = self
-        ans_adjusted = ans.adjusted()
-        if ans_adjusted < Emin:
-            Etiny = context.Etiny()
-            if ans._exp < Etiny:
-                if not ans:
-                    ans = Decimal(self)
-                    ans._exp = Etiny
-                    context._raise_error(Clamped)
-                    return ans
-                ans = ans._rescale(Etiny, context=context)
-                #It isn't zero, and exp < Emin => subnormal
-                context._raise_error(Subnormal)
-                if context.flags[Inexact]:
-                    context._raise_error(Underflow)
-            else:
-                if ans:
-                    #Only raise subnormal if non-zero.
-                    context._raise_error(Subnormal)
-        else:
-            Etop = context.Etop()
-            if folddown and ans._exp > Etop:
-                context._raise_error(Clamped)
-                ans = ans._rescale(Etop, context=context)
-            else:
-                Emax = context.Emax
-                if ans_adjusted > Emax:
-                    if not ans:
-                        ans = Decimal(self)
-                        ans._exp = Emax
-                        context._raise_error(Clamped)
-                        return ans
-                    context._raise_error(Inexact)
-                    context._raise_error(Rounded)
-                    return context._raise_error(Overflow, 'above Emax', ans._sign)
-        return ans
-
-    def _round(self, prec=None, rounding=None, context=None):
-        """Returns a rounded version of self.
-
-        You can specify the precision or rounding method.  Otherwise, the
-        context determines it.
-        """
-
-        if self._is_special:
-            ans = self._check_nans(context=context)
-            if ans:
-                return ans
-
-            if self._isinfinity():
-                return Decimal(self)
-
-        if context is None:
-            context = getcontext()
-
-        if rounding is None:
-            rounding = context.rounding
-        if prec is None:
-            prec = context.prec
-
-        if not self:
-            if prec <= 0:
-                dig = (0,)
-                exp = len(self._int) - prec + self._exp
-            else:
-                dig = (0,) * prec
-                exp = len(self._int) + self._exp - prec
-            ans = Decimal((self._sign, dig, exp))
-            context._raise_error(Rounded)
-            return ans
-
-        if prec == 0:
-            temp = Decimal(self)
-            temp._int = (0,)+temp._int
-            prec = 1
-        elif prec < 0:
-            exp = self._exp + len(self._int) - prec - 1
-            temp = Decimal( (self._sign, (0, 1), exp))
-            prec = 1
-        else:
-            temp = Decimal(self)
-
-        numdigits = len(temp._int)
-        if prec == numdigits:
-            return temp
-
-        # See if we need to extend precision
-        expdiff = prec - numdigits
-        if expdiff > 0:
-            tmp = list(temp._int)
-            tmp.extend([0] * expdiff)
-            ans =  Decimal( (temp._sign, tmp, temp._exp - expdiff))
-            return ans
-
-        #OK, but maybe all the lost digits are 0.
-        lostdigits = self._int[expdiff:]
-        if lostdigits == (0,) * len(lostdigits):
-            ans = Decimal( (temp._sign, temp._int[:prec], temp._exp - expdiff))
-            #Rounded, but not Inexact
-            context._raise_error(Rounded)
-            return ans
-
-        # Okay, let's round and lose data
-
-        this_function = getattr(temp, self._pick_rounding_function[rounding])
-        #Now we've got the rounding function
-
-        if prec != context.prec:
-            context = context._shallow_copy()
-            context.prec = prec
-        ans = this_function(prec, expdiff, context)
-        context._raise_error(Rounded)
-        context._raise_error(Inexact, 'Changed in rounding')
-
-        return ans
-
-    _pick_rounding_function = {}
-
-    def _round_down(self, prec, expdiff, context):
-        """Also known as round-towards-0, truncate."""
-        return Decimal( (self._sign, self._int[:prec], self._exp - expdiff) )
-
-    def _round_half_up(self, prec, expdiff, context, tmp = None):
-        """Rounds 5 up (away from 0)"""
-
-        if tmp is None:
-            tmp = Decimal( (self._sign,self._int[:prec], self._exp - expdiff))
-        if self._int[prec] >= 5:
-            tmp = tmp._increment(round=0, context=context)
-            if len(tmp._int) > prec:
-                return Decimal( (tmp._sign, tmp._int[:-1], tmp._exp + 1))
-        return tmp
-
-    def _round_half_even(self, prec, expdiff, context):
-        """Round 5 to even, rest to nearest."""
-
-        tmp = Decimal( (self._sign, self._int[:prec], self._exp - expdiff))
-        half = (self._int[prec] == 5)
-        if half:
-            for digit in self._int[prec+1:]:
-                if digit != 0:
-                    half = 0
-                    break
-        if half:
-            if self._int[prec-1] & 1 == 0:
-                return tmp
-        return self._round_half_up(prec, expdiff, context, tmp)
-
-    def _round_half_down(self, prec, expdiff, context):
-        """Round 5 down"""
-
-        tmp = Decimal( (self._sign, self._int[:prec], self._exp - expdiff))
-        half = (self._int[prec] == 5)
-        if half:
-            for digit in self._int[prec+1:]:
-                if digit != 0:
-                    half = 0
-                    break
-        if half:
-            return tmp
-        return self._round_half_up(prec, expdiff, context, tmp)
-
-    def _round_up(self, prec, expdiff, context):
-        """Rounds away from 0."""
-        tmp = Decimal( (self._sign, self._int[:prec], self._exp - expdiff) )
-        for digit in self._int[prec:]:
-            if digit != 0:
-                tmp = tmp._increment(round=1, context=context)
-                if len(tmp._int) > prec:
-                    return Decimal( (tmp._sign, tmp._int[:-1], tmp._exp + 1))
-                else:
-                    return tmp
-        return tmp
-
-    def _round_ceiling(self, prec, expdiff, context):
-        """Rounds up (not away from 0 if negative.)"""
-        if self._sign:
-            return self._round_down(prec, expdiff, context)
-        else:
-            return self._round_up(prec, expdiff, context)
-
-    def _round_floor(self, prec, expdiff, context):
-        """Rounds down (not towards 0 if negative)"""
-        if not self._sign:
-            return self._round_down(prec, expdiff, context)
-        else:
-            return self._round_up(prec, expdiff, context)
-
-    def __pow__(self, n, modulo = None, context=None):
-        """Return self ** n (mod modulo)
-
-        If modulo is None (default), don't take it mod modulo.
-        """
-        n = _convert_other(n)
-        if n is NotImplemented:
-            return n
-
-        if context is None:
-            context = getcontext()
-
-        if self._is_special or n._is_special or n.adjusted() > 8:
-            #Because the spot << doesn't work with really big exponents
-            if n._isinfinity() or n.adjusted() > 8:
-                return context._raise_error(InvalidOperation, 'x ** INF')
-
-            ans = self._check_nans(n, context)
-            if ans:
-                return ans
-
-        if not n._isinteger():
-            return context._raise_error(InvalidOperation, 'x ** (non-integer)')
-
-        if not self and not n:
-            return context._raise_error(InvalidOperation, '0 ** 0')
-
-        if not n:
-            return Decimal(1)
-
-        if self == Decimal(1):
-            return Decimal(1)
-
-        sign = self._sign and not n._iseven()
-        n = int(n)
-
-        if self._isinfinity():
-            if modulo:
-                return context._raise_error(InvalidOperation, 'INF % x')
-            if n > 0:
-                return Infsign[sign]
-            return Decimal( (sign, (0,), 0) )
-
-        #with ludicrously large exponent, just raise an overflow and return inf.
-        if not modulo and n > 0 and (self._exp + len(self._int) - 1) * n > context.Emax \
-           and self:
-
-            tmp = Decimal('inf')
-            tmp._sign = sign
-            context._raise_error(Rounded)
-            context._raise_error(Inexact)
-            context._raise_error(Overflow, 'Big power', sign)
-            return tmp
-
-        elength = len(str(abs(n)))
-        firstprec = context.prec
-
-        if not modulo and firstprec + elength + 1 > DefaultContext.Emax:
-            return context._raise_error(Overflow, 'Too much precision.', sign)
-
-        mul = Decimal(self)
-        val = Decimal(1)
-        context = context._shallow_copy()
-        context.prec = firstprec + elength + 1
-        if n < 0:
-            #n is a long now, not Decimal instance
-            n = -n
-            mul = Decimal(1).__div__(mul, context=context)
-
-        spot = 1
-        while spot <= n:
-            spot <<= 1
-
-        spot >>= 1
-        #Spot is the highest power of 2 less than n
-        while spot:
-            val = val.__mul__(val, context=context)
-            if val._isinfinity():
-                val = Infsign[sign]
-                break
-            if spot & n:
-                val = val.__mul__(mul, context=context)
-            if modulo is not None:
-                val = val.__mod__(modulo, context=context)
-            spot >>= 1
-        context.prec = firstprec
-
-        if context._rounding_decision == ALWAYS_ROUND:
-            return val._fix(context)
-        return val
-
-    def __rpow__(self, other, context=None):
-        """Swaps self/other and returns __pow__."""
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-        return other.__pow__(self, context=context)
-
-    def normalize(self, context=None):
-        """Normalize- strip trailing 0s, change anything equal to 0 to 0e0"""
-
-        if self._is_special:
-            ans = self._check_nans(context=context)
-            if ans:
-                return ans
-
-        dup = self._fix(context)
-        if dup._isinfinity():
-            return dup
-
-        if not dup:
-            return Decimal( (dup._sign, (0,), 0) )
-        end = len(dup._int)
-        exp = dup._exp
-        while dup._int[end-1] == 0:
-            exp += 1
-            end -= 1
-        return Decimal( (dup._sign, dup._int[:end], exp) )
-
-
-    def quantize(self, exp, rounding=None, context=None, watchexp=1):
-        """Quantize self so its exponent is the same as that of exp.
-
-        Similar to self._rescale(exp._exp) but with error checking.
-        """
-        if self._is_special or exp._is_special:
-            ans = self._check_nans(exp, context)
-            if ans:
-                return ans
-
-            if exp._isinfinity() or self._isinfinity():
-                if exp._isinfinity() and self._isinfinity():
-                    return self  #if both are inf, it is OK
-                if context is None:
-                    context = getcontext()
-                return context._raise_error(InvalidOperation,
-                                        'quantize with one INF')
-        return self._rescale(exp._exp, rounding, context, watchexp)
-
-    def same_quantum(self, other):
-        """Test whether self and other have the same exponent.
-
-        same as self._exp == other._exp, except NaN == sNaN
-        """
-        if self._is_special or other._is_special:
-            if self._isnan() or other._isnan():
-                return self._isnan() and other._isnan() and True
-            if self._isinfinity() or other._isinfinity():
-                return self._isinfinity() and other._isinfinity() and True
-        return self._exp == other._exp
-
-    def _rescale(self, exp, rounding=None, context=None, watchexp=1):
-        """Rescales so that the exponent is exp.
-
-        exp = exp to scale to (an integer)
-        rounding = rounding version
-        watchexp: if set (default) an error is returned if exp is greater
-        than Emax or less than Etiny.
-        """
-        if context is None:
-            context = getcontext()
-
-        if self._is_special:
-            if self._isinfinity():
-                return context._raise_error(InvalidOperation, 'rescale with an INF')
-
-            ans = self._check_nans(context=context)
-            if ans:
-                return ans
-
-        if watchexp and (context.Emax  < exp or context.Etiny() > exp):
-            return context._raise_error(InvalidOperation, 'rescale(a, INF)')
-
-        if not self:
-            ans = Decimal(self)
-            ans._int = (0,)
-            ans._exp = exp
-            return ans
-
-        diff = self._exp - exp
-        digits = len(self._int) + diff
-
-        if watchexp and digits > context.prec:
-            return context._raise_error(InvalidOperation, 'Rescale > prec')
-
-        tmp = Decimal(self)
-        tmp._int = (0,) + tmp._int
-        digits += 1
-
-        if digits < 0:
-            tmp._exp = -digits + tmp._exp
-            tmp._int = (0,1)
-            digits = 1
-        tmp = tmp._round(digits, rounding, context=context)
-
-        if tmp._int[0] == 0 and len(tmp._int) > 1:
-            tmp._int = tmp._int[1:]
-        tmp._exp = exp
-
-        tmp_adjusted = tmp.adjusted()
-        if tmp and tmp_adjusted < context.Emin:
-            context._raise_error(Subnormal)
-        elif tmp and tmp_adjusted > context.Emax:
-            return context._raise_error(InvalidOperation, 'rescale(a, INF)')
-        return tmp
-
-    def to_integral(self, rounding=None, context=None):
-        """Rounds to the nearest integer, without raising inexact, rounded."""
-        if self._is_special:
-            ans = self._check_nans(context=context)
-            if ans:
-                return ans
-        if self._exp >= 0:
-            return self
-        if context is None:
-            context = getcontext()
-        flags = context._ignore_flags(Rounded, Inexact)
-        ans = self._rescale(0, rounding, context=context)
-        context._regard_flags(flags)
-        return ans
-
-    def sqrt(self, context=None):
-        """Return the square root of self.
-
-        Uses a converging algorithm (Xn+1 = 0.5*(Xn + self / Xn))
-        Should quadratically approach the right answer.
-        """
-        if self._is_special:
-            ans = self._check_nans(context=context)
-            if ans:
-                return ans
-
-            if self._isinfinity() and self._sign == 0:
-                return Decimal(self)
-
-        if not self:
-            #exponent = self._exp / 2, using round_down.
-            #if self._exp < 0:
-            #    exp = (self._exp+1) // 2
-            #else:
-            exp = (self._exp) // 2
-            if self._sign == 1:
-                #sqrt(-0) = -0
-                return Decimal( (1, (0,), exp))
-            else:
-                return Decimal( (0, (0,), exp))
-
-        if context is None:
-            context = getcontext()
-
-        if self._sign == 1:
-            return context._raise_error(InvalidOperation, 'sqrt(-x), x > 0')
-
-        tmp = Decimal(self)
-
-        expadd = tmp._exp // 2
-        if tmp._exp & 1:
-            tmp._int += (0,)
-            tmp._exp = 0
-        else:
-            tmp._exp = 0
-
-        context = context._shallow_copy()
-        flags = context._ignore_all_flags()
-        firstprec = context.prec
-        context.prec = 3
-        if tmp.adjusted() & 1 == 0:
-            ans = Decimal( (0, (8,1,9), tmp.adjusted()  - 2) )
-            ans = ans.__add__(tmp.__mul__(Decimal((0, (2,5,9), -2)),
-                                          context=context), context=context)
-            ans._exp -= 1 + tmp.adjusted() // 2
-        else:
-            ans = Decimal( (0, (2,5,9), tmp._exp + len(tmp._int)- 3) )
-            ans = ans.__add__(tmp.__mul__(Decimal((0, (8,1,9), -3)),
-                                          context=context), context=context)
-            ans._exp -= 1 + tmp.adjusted()  // 2
-
-        #ans is now a linear approximation.
-
-        Emax, Emin = context.Emax, context.Emin
-        context.Emax, context.Emin = DefaultContext.Emax, DefaultContext.Emin
-
-        half = Decimal('0.5')
-
-        maxp = firstprec + 2
-        rounding = context._set_rounding(ROUND_HALF_EVEN)
-        while 1:
-            context.prec = min(2*context.prec - 2, maxp)
-            ans = half.__mul__(ans.__add__(tmp.__div__(ans, context=context),
-                                           context=context), context=context)
-            if context.prec == maxp:
-                break
-
-        #round to the answer's precision-- the only error can be 1 ulp.
-        context.prec = firstprec
-        prevexp = ans.adjusted()
-        ans = ans._round(context=context)
-
-        #Now, check if the other last digits are better.
-        context.prec = firstprec + 1
-        # In case we rounded up another digit and we should actually go lower.
-        if prevexp != ans.adjusted():
-            ans._int += (0,)
-            ans._exp -= 1
-
-
-        lower = ans.__sub__(Decimal((0, (5,), ans._exp-1)), context=context)
-        context._set_rounding(ROUND_UP)
-        if lower.__mul__(lower, context=context) > (tmp):
-            ans = ans.__sub__(Decimal((0, (1,), ans._exp)), context=context)
-
-        else:
-            upper = ans.__add__(Decimal((0, (5,), ans._exp-1)),context=context)
-            context._set_rounding(ROUND_DOWN)
-            if upper.__mul__(upper, context=context) < tmp:
-                ans = ans.__add__(Decimal((0, (1,), ans._exp)),context=context)
-
-        ans._exp += expadd
-
-        context.prec = firstprec
-        context.rounding = rounding
-        ans = ans._fix(context)
-
-        rounding = context._set_rounding_decision(NEVER_ROUND)
-        if not ans.__mul__(ans, context=context) == self:
-            # Only rounded/inexact if here.
-            context._regard_flags(flags)
-            context._raise_error(Rounded)
-            context._raise_error(Inexact)
-        else:
-            #Exact answer, so let's set the exponent right.
-            #if self._exp < 0:
-            #    exp = (self._exp +1)// 2
-            #else:
-            exp = self._exp // 2
-            context.prec += ans._exp - exp
-            ans = ans._rescale(exp, context=context)
-            context.prec = firstprec
-            context._regard_flags(flags)
-        context.Emax, context.Emin = Emax, Emin
-
-        return ans._fix(context)
-
-    def max(self, other, context=None):
-        """Returns the larger value.
-
-        like max(self, other) except if one is not a number, returns
-        NaN (and signals if one is sNaN).  Also rounds.
-        """
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-
-        if self._is_special or other._is_special:
-            # if one operand is a quiet NaN and the other is number, then the
-            # number is always returned
-            sn = self._isnan()
-            on = other._isnan()
-            if sn or on:
-                if on == 1 and sn != 2:
-                    return self
-                if sn == 1 and on != 2:
-                    return other
-                return self._check_nans(other, context)
-
-        ans = self
-        c = self.__cmp__(other)
-        if c == 0:
-            # if both operands are finite and equal in numerical value
-            # then an ordering is applied:
-            #
-            # if the signs differ then max returns the operand with the
-            # positive sign and min returns the operand with the negative sign
-            #
-            # if the signs are the same then the exponent is used to select
-            # the result.
-            if self._sign != other._sign:
-                if self._sign:
-                    ans = other
-            elif self._exp < other._exp and not self._sign:
-                ans = other
-            elif self._exp > other._exp and self._sign:
-                ans = other
-        elif c == -1:
-            ans = other
-
-        if context is None:
-            context = getcontext()
-        if context._rounding_decision == ALWAYS_ROUND:
-            return ans._fix(context)
-        return ans
-
-    def min(self, other, context=None):
-        """Returns the smaller value.
-
-        like min(self, other) except if one is not a number, returns
-        NaN (and signals if one is sNaN).  Also rounds.
-        """
-        other = _convert_other(other)
-        if other is NotImplemented:
-            return other
-
-        if self._is_special or other._is_special:
-            # if one operand is a quiet NaN and the other is number, then the
-            # number is always returned
-            sn = self._isnan()
-            on = other._isnan()
-            if sn or on:
-                if on == 1 and sn != 2:
-                    return self
-                if sn == 1 and on != 2:
-                    return other
-                return self._check_nans(other, context)
-
-        ans = self
-        c = self.__cmp__(other)
-        if c == 0:
-            # if both operands are finite and equal in numerical value
-            # then an ordering is applied:
-            #
-            # if the signs differ then max returns the operand with the
-            # positive sign and min returns the operand with the negative sign
-            #
-            # if the signs are the same then the exponent is used to select
-            # the result.
-            if self._sign != other._sign:
-                if other._sign:
-                    ans = other
-            elif self._exp > other._exp and not self._sign:
-                ans = other
-            elif self._exp < other._exp and self._sign:
-                ans = other
-        elif c == 1:
-            ans = other
-
-        if context is None:
-            context = getcontext()
-        if context._rounding_decision == ALWAYS_ROUND:
-            return ans._fix(context)
-        return ans
-
-    def _isinteger(self):
-        """Returns whether self is an integer"""
-        if self._exp >= 0:
-            return True
-        rest = self._int[self._exp:]
-        return rest == (0,)*len(rest)
-
-    def _iseven(self):
-        """Returns 1 if self is even.  Assumes self is an integer."""
-        if self._exp > 0:
-            return 1
-        return self._int[-1+self._exp] & 1 == 0
-
-    def adjusted(self):
-        """Return the adjusted exponent of self"""
-        try:
-            return self._exp + len(self._int) - 1
-        #If NaN or Infinity, self._exp is string
-        except TypeError:
-            return 0
-
-    # support for pickling, copy, and deepcopy
-    def __reduce__(self):
-        return (self.__class__, (str(self),))
-
-    def __copy__(self):
-        if type(self) == Decimal:
-            return self     # I'm immutable; therefore I am my own clone
-        return self.__class__(str(self))
-
-    def __deepcopy__(self, memo):
-        if type(self) == Decimal:
-            return self     # My components are also immutable
-        return self.__class__(str(self))
-
-##### Context class ###########################################
-
-
-# get rounding method function:
-rounding_functions = [name for name in Decimal.__dict__.keys() if name.startswith('_round_')]
-for name in rounding_functions:
-    #name is like _round_half_even, goes to the global ROUND_HALF_EVEN value.
-    globalname = name[1:].upper()
-    val = globals()[globalname]
-    Decimal._pick_rounding_function[val] = name
-
-del name, val, globalname, rounding_functions
-
-class Context(object):
-    """Contains the context for a Decimal instance.
-
-    Contains:
-    prec - precision (for use in rounding, division, square roots..)
-    rounding - rounding type. (how you round)
-    _rounding_decision - ALWAYS_ROUND, NEVER_ROUND -- do you round?
-    traps - If traps[exception] = 1, then the exception is
-                    raised when it is caused.  Otherwise, a value is
-                    substituted in.
-    flags  - When an exception is caused, flags[exception] is incremented.
-             (Whether or not the trap_enabler is set)
-             Should be reset by user of Decimal instance.
-    Emin -   Minimum exponent
-    Emax -   Maximum exponent
-    capitals -      If 1, 1*10^1 is printed as 1E+1.
-                    If 0, printed as 1e1
-    _clamp - If 1, change exponents if too high (Default 0)
-    """
-
-    def __init__(self, prec=None, rounding=None,
-                 traps=None, flags=None,
-                 _rounding_decision=None,
-                 Emin=None, Emax=None,
-                 capitals=None, _clamp=0,
-                 _ignored_flags=None):
-        if flags is None:
-            flags = []
-        if _ignored_flags is None:
-            _ignored_flags = []
-        if not isinstance(flags, dict):
-            flags = dict([(s,s in flags) for s in _signals])
-            del s
-        if traps is not None and not isinstance(traps, dict):
-            traps = dict([(s,s in traps) for s in _signals])
-            del s
-        for name, val in locals().items():
-            if val is None:
-                setattr(self, name, _copy.copy(getattr(DefaultContext, name)))
-            else:
-                setattr(self, name, val)
-        del self.self
-
-    def __repr__(self):
-        """Show the current context."""
-        s = []
-        s.append('Context(prec=%(prec)d, rounding=%(rounding)s, Emin=%(Emin)d, Emax=%(Emax)d, capitals=%(capitals)d' % vars(self))
-        s.append('flags=[' + ', '.join([f.__name__ for f, v in self.flags.items() if v]) + ']')
-        s.append('traps=[' + ', '.join([t.__name__ for t, v in self.traps.items() if v]) + ']')
-        return ', '.join(s) + ')'
-
-    def clear_flags(self):
-        """Reset all flags to zero"""
-        for flag in self.flags:
-            self.flags[flag] = 0
-
-    def _shallow_copy(self):
-        """Returns a shallow copy from self."""
-        nc = Context(self.prec, self.rounding, self.traps, self.flags,
-                         self._rounding_decision, self.Emin, self.Emax,
-                         self.capitals, self._clamp, self._ignored_flags)
-        return nc
-
-    def copy(self):
-        """Returns a deep copy from self."""
-        nc = Context(self.prec, self.rounding, self.traps.copy(), self.flags.copy(),
-                         self._rounding_decision, self.Emin, self.Emax,
-                         self.capitals, self._clamp, self._ignored_flags)
-        return nc
-    __copy__ = copy
-
-    def _raise_error(self, condition, explanation = None, *args):
-        """Handles an error
-
-        If the flag is in _ignored_flags, returns the default response.
-        Otherwise, it increments the flag, then, if the corresponding
-        trap_enabler is set, it reaises the exception.  Otherwise, it returns
-        the default value after incrementing the flag.
-        """
-        error = _condition_map.get(condition, condition)
-        if error in self._ignored_flags:
-            #Don't touch the flag
-            return error().handle(self, *args)
-
-        self.flags[error] += 1
-        if not self.traps[error]:
-            #The errors define how to handle themselves.
-            return condition().handle(self, *args)
-
-        # Errors should only be risked on copies of the context
-        #self._ignored_flags = []
-        raise error, explanation
-
-    def _ignore_all_flags(self):
-        """Ignore all flags, if they are raised"""
-        return self._ignore_flags(*_signals)
-
-    def _ignore_flags(self, *flags):
-        """Ignore the flags, if they are raised"""
-        # Do not mutate-- This way, copies of a context leave the original
-        # alone.
-        self._ignored_flags = (self._ignored_flags + list(flags))
-        return list(flags)
-
-    def _regard_flags(self, *flags):
-        """Stop ignoring the flags, if they are raised"""
-        if flags and isinstance(flags[0], (tuple,list)):
-            flags = flags[0]
-        for flag in flags:
-            self._ignored_flags.remove(flag)
-
-    def __hash__(self):
-        """A Context cannot be hashed."""
-        # We inherit object.__hash__, so we must deny this explicitly
-        raise TypeError, "Cannot hash a Context."
-
-    def Etiny(self):
-        """Returns Etiny (= Emin - prec + 1)"""
-        return int(self.Emin - self.prec + 1)
-
-    def Etop(self):
-        """Returns maximum exponent (= Emax - prec + 1)"""
-        return int(self.Emax - self.prec + 1)
-
-    def _set_rounding_decision(self, type):
-        """Sets the rounding decision.
-
-        Sets the rounding decision, and returns the current (previous)
-        rounding decision.  Often used like:
-
-        context = context._shallow_copy()
-        # That so you don't change the calling context
-        # if an error occurs in the middle (say DivisionImpossible is raised).
-
-        rounding = context._set_rounding_decision(NEVER_ROUND)
-        instance = instance / Decimal(2)
-        context._set_rounding_decision(rounding)
-
-        This will make it not round for that operation.
-        """
-
-        rounding = self._rounding_decision
-        self._rounding_decision = type
-        return rounding
-
-    def _set_rounding(self, type):
-        """Sets the rounding type.
-
-        Sets the rounding type, and returns the current (previous)
-        rounding type.  Often used like:
-
-        context = context.copy()
-        # so you don't change the calling context
-        # if an error occurs in the middle.
-        rounding = context._set_rounding(ROUND_UP)
-        val = self.__sub__(other, context=context)
-        context._set_rounding(rounding)
-
-        This will make it round up for that operation.
-        """
-        rounding = self.rounding
-        self.rounding= type
-        return rounding
-
-    def create_decimal(self, num='0'):
-        """Creates a new Decimal instance but using self as context."""
-        d = Decimal(num, context=self)
-        return d._fix(self)
-
-    #Methods
-    def abs(self, a):
-        """Returns the absolute value of the operand.
-
-        If the operand is negative, the result is the same as using the minus
-        operation on the operand. Otherwise, the result is the same as using
-        the plus operation on the operand.
-
-        >>> ExtendedContext.abs(Decimal('2.1'))
-        Decimal("2.1")
-        >>> ExtendedContext.abs(Decimal('-100'))
-        Decimal("100")
-        >>> ExtendedContext.abs(Decimal('101.5'))
-        Decimal("101.5")
-        >>> ExtendedContext.abs(Decimal('-101.5'))
-        Decimal("101.5")
-        """
-        return a.__abs__(context=self)
-
-    def add(self, a, b):
-        """Return the sum of the two operands.
-
-        >>> ExtendedContext.add(Decimal('12'), Decimal('7.00'))
-        Decimal("19.00")
-        >>> ExtendedContext.add(Decimal('1E+2'), Decimal('1.01E+4'))
-        Decimal("1.02E+4")
-        """
-        return a.__add__(b, context=self)
-
-    def _apply(self, a):
-        return str(a._fix(self))
-
-    def compare(self, a, b):
-        """Compares values numerically.
-
-        If the signs of the operands differ, a value representing each operand
-        ('-1' if the operand is less than zero, '0' if the operand is zero or
-        negative zero, or '1' if the operand is greater than zero) is used in
-        place of that operand for the comparison instead of the actual
-        operand.
-
-        The comparison is then effected by subtracting the second operand from
-        the first and then returning a value according to the result of the
-        subtraction: '-1' if the result is less than zero, '0' if the result is
-        zero or negative zero, or '1' if the result is greater than zero.
-
-        >>> ExtendedContext.compare(Decimal('2.1'), Decimal('3'))
-        Decimal("-1")
-        >>> ExtendedContext.compare(Decimal('2.1'), Decimal('2.1'))
-        Decimal("0")
-        >>> ExtendedContext.compare(Decimal('2.1'), Decimal('2.10'))
-        Decimal("0")
-        >>> ExtendedContext.compare(Decimal('3'), Decimal('2.1'))
-        Decimal("1")
-        >>> ExtendedContext.compare(Decimal('2.1'), Decimal('-3'))
-        Decimal("1")
-        >>> ExtendedContext.compare(Decimal('-3'), Decimal('2.1'))
-        Decimal("-1")
-        """
-        return a.compare(b, context=self)
-
-    def divide(self, a, b):
-        """Decimal division in a specified context.
-
-        >>> ExtendedContext.divide(Decimal('1'), Decimal('3'))
-        Decimal("0.333333333")
-        >>> ExtendedContext.divide(Decimal('2'), Decimal('3'))
-        Decimal("0.666666667")
-        >>> ExtendedContext.divide(Decimal('5'), Decimal('2'))
-        Decimal("2.5")
-        >>> ExtendedContext.divide(Decimal('1'), Decimal('10'))
-        Decimal("0.1")
-        >>> ExtendedContext.divide(Decimal('12'), Decimal('12'))
-        Decimal("1")
-        >>> ExtendedContext.divide(Decimal('8.00'), Decimal('2'))
-        Decimal("4.00")
-        >>> ExtendedContext.divide(Decimal('2.400'), Decimal('2.0'))
-        Decimal("1.20")
-        >>> ExtendedContext.divide(Decimal('1000'), Decimal('100'))
-        Decimal("10")
-        >>> ExtendedContext.divide(Decimal('1000'), Decimal('1'))
-        Decimal("1000")
-        >>> ExtendedContext.divide(Decimal('2.40E+6'), Decimal('2'))
-        Decimal("1.20E+6")
-        """
-        return a.__div__(b, context=self)
-
-    def divide_int(self, a, b):
-        """Divides two numbers and returns the integer part of the result.
-
-        >>> ExtendedContext.divide_int(Decimal('2'), Decimal('3'))
-        Decimal("0")
-        >>> ExtendedContext.divide_int(Decimal('10'), Decimal('3'))
-        Decimal("3")
-        >>> ExtendedContext.divide_int(Decimal('1'), Decimal('0.3'))
-        Decimal("3")
-        """
-        return a.__floordiv__(b, context=self)
-
-    def divmod(self, a, b):
-        return a.__divmod__(b, context=self)
-
-    def max(self, a,b):
-        """max compares two values numerically and returns the maximum.
-
-        If either operand is a NaN then the general rules apply.
-        Otherwise, the operands are compared as as though by the compare
-        operation. If they are numerically equal then the left-hand operand
-        is chosen as the result. Otherwise the maximum (closer to positive
-        infinity) of the two operands is chosen as the result.
-
-        >>> ExtendedContext.max(Decimal('3'), Decimal('2'))
-        Decimal("3")
-        >>> ExtendedContext.max(Decimal('-10'), Decimal('3'))
-        Decimal("3")
-        >>> ExtendedContext.max(Decimal('1.0'), Decimal('1'))
-        Decimal("1")
-        >>> ExtendedContext.max(Decimal('7'), Decimal('NaN'))
-        Decimal("7")
-        """
-        return a.max(b, context=self)
-
-    def min(self, a,b):
-        """min compares two values numerically and returns the minimum.
-
-        If either operand is a NaN then the general rules apply.
-        Otherwise, the operands are compared as as though by the compare
-        operation. If they are numerically equal then the left-hand operand
-        is chosen as the result. Otherwise the minimum (closer to negative
-        infinity) of the two operands is chosen as the result.
-
-        >>> ExtendedContext.min(Decimal('3'), Decimal('2'))
-        Decimal("2")
-        >>> ExtendedContext.min(Decimal('-10'), Decimal('3'))
-        Decimal("-10")
-        >>> ExtendedContext.min(Decimal('1.0'), Decimal('1'))
-        Decimal("1.0")
-        >>> ExtendedContext.min(Decimal('7'), Decimal('NaN'))
-        Decimal("7")
-        """
-        return a.min(b, context=self)
-
-    def minus(self, a):
-        """Minus corresponds to unary prefix minus in Python.
-
-        The operation is evaluated using the same rules as subtract; the
-        operation minus(a) is calculated as subtract('0', a) where the '0'
-        has the same exponent as the operand.
-
-        >>> ExtendedContext.minus(Decimal('1.3'))
-        Decimal("-1.3")
-        >>> ExtendedContext.minus(Decimal('-1.3'))
-        Decimal("1.3")
-        """
-        return a.__neg__(context=self)
-
-    def multiply(self, a, b):
-        """multiply multiplies two operands.
-
-        If either operand is a special value then the general rules apply.
-        Otherwise, the operands are multiplied together ('long multiplication'),
-        resulting in a number which may be as long as the sum of the lengths
-        of the two operands.
-
-        >>> ExtendedContext.multiply(Decimal('1.20'), Decimal('3'))
-        Decimal("3.60")
-        >>> ExtendedContext.multiply(Decimal('7'), Decimal('3'))
-        Decimal("21")
-        >>> ExtendedContext.multiply(Decimal('0.9'), Decimal('0.8'))
-        Decimal("0.72")
-        >>> ExtendedContext.multiply(Decimal('0.9'), Decimal('-0'))
-        Decimal("-0.0")
-        >>> ExtendedContext.multiply(Decimal('654321'), Decimal('654321'))
-        Decimal("4.28135971E+11")
-        """
-        return a.__mul__(b, context=self)
-
-    def normalize(self, a):
-        """normalize reduces an operand to its simplest form.
-
-        Essentially a plus operation with all trailing zeros removed from the
-        result.
-
-        >>> ExtendedContext.normalize(Decimal('2.1'))
-        Decimal("2.1")
-        >>> ExtendedContext.normalize(Decimal('-2.0'))
-        Decimal("-2")
-        >>> ExtendedContext.normalize(Decimal('1.200'))
-        Decimal("1.2")
-        >>> ExtendedContext.normalize(Decimal('-120'))
-        Decimal("-1.2E+2")
-        >>> ExtendedContext.normalize(Decimal('120.00'))
-        Decimal("1.2E+2")
-        >>> ExtendedContext.normalize(Decimal('0.00'))
-        Decimal("0")
-        """
-        return a.normalize(context=self)
-
-    def plus(self, a):
-        """Plus corresponds to unary prefix plus in Python.
-
-        The operation is evaluated using the same rules as add; the
-        operation plus(a) is calculated as add('0', a) where the '0'
-        has the same exponent as the operand.
-
-        >>> ExtendedContext.plus(Decimal('1.3'))
-        Decimal("1.3")
-        >>> ExtendedContext.plus(Decimal('-1.3'))
-        Decimal("-1.3")
-        """
-        return a.__pos__(context=self)
-
-    def power(self, a, b, modulo=None):
-        """Raises a to the power of b, to modulo if given.
-
-        The right-hand operand must be a whole number whose integer part (after
-        any exponent has been applied) has no more than 9 digits and whose
-        fractional part (if any) is all zeros before any rounding. The operand
-        may be positive, negative, or zero; if negative, the absolute value of
-        the power is used, and the left-hand operand is inverted (divided into
-        1) before use.
-
-        If the increased precision needed for the intermediate calculations
-        exceeds the capabilities of the implementation then an Invalid operation
-        condition is raised.
-
-        If, when raising to a negative power, an underflow occurs during the
-        division into 1, the operation is not halted at that point but
-        continues.
-
-        >>> ExtendedContext.power(Decimal('2'), Decimal('3'))
-        Decimal("8")
-        >>> ExtendedContext.power(Decimal('2'), Decimal('-3'))
-        Decimal("0.125")
-        >>> ExtendedContext.power(Decimal('1.7'), Decimal('8'))
-        Decimal("69.7575744")
-        >>> ExtendedContext.power(Decimal('Infinity'), Decimal('-2'))
-        Decimal("0")
-        >>> ExtendedContext.power(Decimal('Infinity'), Decimal('-1'))
-        Decimal("0")
-        >>> ExtendedContext.power(Decimal('Infinity'), Decimal('0'))
-        Decimal("1")
-        >>> ExtendedContext.power(Decimal('Infinity'), Decimal('1'))
-        Decimal("Infinity")
-        >>> ExtendedContext.power(Decimal('Infinity'), Decimal('2'))
-        Decimal("Infinity")
-        >>> ExtendedContext.power(Decimal('-Infinity'), Decimal('-2'))
-        Decimal("0")
-        >>> ExtendedContext.power(Decimal('-Infinity'), Decimal('-1'))
-        Decimal("-0")
-        >>> ExtendedContext.power(Decimal('-Infinity'), Decimal('0'))
-        Decimal("1")
-        >>> ExtendedContext.power(Decimal('-Infinity'), Decimal('1'))
-        Decimal("-Infinity")
-        >>> ExtendedContext.power(Decimal('-Infinity'), Decimal('2'))
-        Decimal("Infinity")
-        >>> ExtendedContext.power(Decimal('0'), Decimal('0'))
-        Decimal("NaN")
-        """
-        return a.__pow__(b, modulo, context=self)
-
-    def quantize(self, a, b):
-        """Returns a value equal to 'a' (rounded) and having the exponent of 'b'.
-
-        The coefficient of the result is derived from that of the left-hand
-        operand. It may be rounded using the current rounding setting (if the
-        exponent is being increased), multiplied by a positive power of ten (if
-        the exponent is being decreased), or is unchanged (if the exponent is
-        already equal to that of the right-hand operand).
-
-        Unlike other operations, if the length of the coefficient after the
-        quantize operation would be greater than precision then an Invalid
-        operation condition is raised. This guarantees that, unless there is an
-        error condition, the exponent of the result of a quantize is always
-        equal to that of the right-hand operand.
-
-        Also unlike other operations, quantize will never raise Underflow, even
-        if the result is subnormal and inexact.
-
-        >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('0.001'))
-        Decimal("2.170")
-        >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('0.01'))
-        Decimal("2.17")
-        >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('0.1'))
-        Decimal("2.2")
-        >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('1e+0'))
-        Decimal("2")
-        >>> ExtendedContext.quantize(Decimal('2.17'), Decimal('1e+1'))
-        Decimal("0E+1")
-        >>> ExtendedContext.quantize(Decimal('-Inf'), Decimal('Infinity'))
-        Decimal("-Infinity")
-        >>> ExtendedContext.quantize(Decimal('2'), Decimal('Infinity'))
-        Decimal("NaN")
-        >>> ExtendedContext.quantize(Decimal('-0.1'), Decimal('1'))
-        Decimal("-0")
-        >>> ExtendedContext.quantize(Decimal('-0'), Decimal('1e+5'))
-        Decimal("-0E+5")
-        >>> ExtendedContext.quantize(Decimal('+35236450.6'), Decimal('1e-2'))
-        Decimal("NaN")
-        >>> ExtendedContext.quantize(Decimal('-35236450.6'), Decimal('1e-2'))
-        Decimal("NaN")
-        >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e-1'))
-        Decimal("217.0")
-        >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e-0'))
-        Decimal("217")
-        >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e+1'))
-        Decimal("2.2E+2")
-        >>> ExtendedContext.quantize(Decimal('217'), Decimal('1e+2'))
-        Decimal("2E+2")
-        """
-        return a.quantize(b, context=self)
-
-    def remainder(self, a, b):
-        """Returns the remainder from integer division.
-
-        The result is the residue of the dividend after the operation of
-        calculating integer division as described for divide-integer, rounded to
-        precision digits if necessary. The sign of the result, if non-zero, is
-        the same as that of the original dividend.
-
-        This operation will fail under the same conditions as integer division
-        (that is, if integer division on the same two operands would fail, the
-        remainder cannot be calculated).
-
-        >>> ExtendedContext.remainder(Decimal('2.1'), Decimal('3'))
-        Decimal("2.1")
-        >>> ExtendedContext.remainder(Decimal('10'), Decimal('3'))
-        Decimal("1")
-        >>> ExtendedContext.remainder(Decimal('-10'), Decimal('3'))
-        Decimal("-1")
-        >>> ExtendedContext.remainder(Decimal('10.2'), Decimal('1'))
-        Decimal("0.2")
-        >>> ExtendedContext.remainder(Decimal('10'), Decimal('0.3'))
-        Decimal("0.1")
-        >>> ExtendedContext.remainder(Decimal('3.6'), Decimal('1.3'))
-        Decimal("1.0")
-        """
-        return a.__mod__(b, context=self)
-
-    def remainder_near(self, a, b):
-        """Returns to be "a - b * n", where n is the integer nearest the exact
-        value of "x / b" (if two integers are equally near then the even one
-        is chosen). If the result is equal to 0 then its sign will be the
-        sign of a.
-
-        This operation will fail under the same conditions as integer division
-        (that is, if integer division on the same two operands would fail, the
-        remainder cannot be calculated).
-
-        >>> ExtendedContext.remainder_near(Decimal('2.1'), Decimal('3'))
-        Decimal("-0.9")
-        >>> ExtendedContext.remainder_near(Decimal('10'), Decimal('6'))
-        Decimal("-2")
-        >>> ExtendedContext.remainder_near(Decimal('10'), Decimal('3'))
-        Decimal("1")
-        >>> ExtendedContext.remainder_near(Decimal('-10'), Decimal('3'))
-        Decimal("-1")
-        >>> ExtendedContext.remainder_near(Decimal('10.2'), Decimal('1'))
-        Decimal("0.2")
-        >>> ExtendedContext.remainder_near(Decimal('10'), Decimal('0.3'))
-        Decimal("0.1")
-        >>> ExtendedContext.remainder_near(Decimal('3.6'), Decimal('1.3'))
-        Decimal("-0.3")
-        """
-        return a.remainder_near(b, context=self)
-
-    def same_quantum(self, a, b):
-        """Returns True if the two operands have the same exponent.
-
-        The result is never affected by either the sign or the coefficient of
-        either operand.
-
-        >>> ExtendedContext.same_quantum(Decimal('2.17'), Decimal('0.001'))
-        False
-        >>> ExtendedContext.same_quantum(Decimal('2.17'), Decimal('0.01'))
-        True
-        >>> ExtendedContext.same_quantum(Decimal('2.17'), Decimal('1'))
-        False
-        >>> ExtendedContext.same_quantum(Decimal('Inf'), Decimal('-Inf'))
-        True
-        """
-        return a.same_quantum(b)
-
-    def sqrt(self, a):
-        """Returns the square root of a non-negative number to context precision.
-
-        If the result must be inexact, it is rounded using the round-half-even
-        algorithm.
-
-        >>> ExtendedContext.sqrt(Decimal('0'))
-        Decimal("0")
-        >>> ExtendedContext.sqrt(Decimal('-0'))
-        Decimal("-0")
-        >>> ExtendedContext.sqrt(Decimal('0.39'))
-        Decimal("0.624499800")
-        >>> ExtendedContext.sqrt(Decimal('100'))
-        Decimal("10")
-        >>> ExtendedContext.sqrt(Decimal('1'))
-        Decimal("1")
-        >>> ExtendedContext.sqrt(Decimal('1.0'))
-        Decimal("1.0")
-        >>> ExtendedContext.sqrt(Decimal('1.00'))
-        Decimal("1.0")
-        >>> ExtendedContext.sqrt(Decimal('7'))
-        Decimal("2.64575131")
-        >>> ExtendedContext.sqrt(Decimal('10'))
-        Decimal("3.16227766")
-        >>> ExtendedContext.prec
-        9
-        """
-        return a.sqrt(context=self)
-
-    def subtract(self, a, b):
-        """Return the difference between the two operands.
-
-        >>> ExtendedContext.subtract(Decimal('1.3'), Decimal('1.07'))
-        Decimal("0.23")
-        >>> ExtendedContext.subtract(Decimal('1.3'), Decimal('1.30'))
-        Decimal("0.00")
-        >>> ExtendedContext.subtract(Decimal('1.3'), Decimal('2.07'))
-        Decimal("-0.77")
-        """
-        return a.__sub__(b, context=self)
-
-    def to_eng_string(self, a):
-        """Converts a number to a string, using scientific notation.
-
-        The operation is not affected by the context.
-        """
-        return a.to_eng_string(context=self)
-
-    def to_sci_string(self, a):
-        """Converts a number to a string, using scientific notation.
-
-        The operation is not affected by the context.
-        """
-        return a.__str__(context=self)
-
-    def to_integral(self, a):
-        """Rounds to an integer.
-
-        When the operand has a negative exponent, the result is the same
-        as using the quantize() operation using the given operand as the
-        left-hand-operand, 1E+0 as the right-hand-operand, and the precision
-        of the operand as the precision setting, except that no flags will
-        be set. The rounding mode is taken from the context.
-
-        >>> ExtendedContext.to_integral(Decimal('2.1'))
-        Decimal("2")
-        >>> ExtendedContext.to_integral(Decimal('100'))
-        Decimal("100")
-        >>> ExtendedContext.to_integral(Decimal('100.0'))
-        Decimal("100")
-        >>> ExtendedContext.to_integral(Decimal('101.5'))
-        Decimal("102")
-        >>> ExtendedContext.to_integral(Decimal('-101.5'))
-        Decimal("-102")
-        >>> ExtendedContext.to_integral(Decimal('10E+5'))
-        Decimal("1.0E+6")
-        >>> ExtendedContext.to_integral(Decimal('7.89E+77'))
-        Decimal("7.89E+77")
-        >>> ExtendedContext.to_integral(Decimal('-Inf'))
-        Decimal("-Infinity")
-        """
-        return a.to_integral(context=self)
-
-class _WorkRep(object):
-    __slots__ = ('sign','int','exp')
-    # sign: 0 or 1
-    # int:  int or long
-    # exp:  None, int, or string
-
-    def __init__(self, value=None):
-        if value is None:
-            self.sign = None
-            self.int = 0
-            self.exp = None
-        elif isinstance(value, Decimal):
-            self.sign = value._sign
-            cum = 0
-            for digit  in value._int:
-                cum = cum * 10 + digit
-            self.int = cum
-            self.exp = value._exp
-        else:
-            # assert isinstance(value, tuple)
-            self.sign = value[0]
-            self.int = value[1]
-            self.exp = value[2]
-
-    def __repr__(self):
-        return "(%r, %r, %r)" % (self.sign, self.int, self.exp)
-
-    __str__ = __repr__
-
-
-
-def _normalize(op1, op2, shouldround = 0, prec = 0):
-    """Normalizes op1, op2 to have the same exp and length of coefficient.
-
-    Done during addition.
-    """
-    # Yes, the exponent is a long, but the difference between exponents
-    # must be an int-- otherwise you'd get a big memory problem.
-    numdigits = int(op1.exp - op2.exp)
-    if numdigits < 0:
-        numdigits = -numdigits
-        tmp = op2
-        other = op1
-    else:
-        tmp = op1
-        other = op2
-
-
-    if shouldround and numdigits > prec + 1:
-        # Big difference in exponents - check the adjusted exponents
-        tmp_len = len(str(tmp.int))
-        other_len = len(str(other.int))
-        if numdigits > (other_len + prec + 1 - tmp_len):
-            # If the difference in adjusted exps is > prec+1, we know
-            # other is insignificant, so might as well put a 1 after the precision.
-            # (since this is only for addition.)  Also stops use of massive longs.
-
-            extend = prec + 2 - tmp_len
-            if extend <= 0:
-                extend = 1
-            tmp.int *= 10 ** extend
-            tmp.exp -= extend
-            other.int = 1
-            other.exp = tmp.exp
-            return op1, op2
-
-    tmp.int *= 10 ** numdigits
-    tmp.exp -= numdigits
-    return op1, op2
-
-def _adjust_coefficients(op1, op2):
-    """Adjust op1, op2 so that op2.int * 10 > op1.int >= op2.int.
-
-    Returns the adjusted op1, op2 as well as the change in op1.exp-op2.exp.
-
-    Used on _WorkRep instances during division.
-    """
-    adjust = 0
-    #If op1 is smaller, make it larger
-    while op2.int > op1.int:
-        op1.int *= 10
-        op1.exp -= 1
-        adjust += 1
-
-    #If op2 is too small, make it larger
-    while op1.int >= (10 * op2.int):
-        op2.int *= 10
-        op2.exp -= 1
-        adjust -= 1
-
-    return op1, op2, adjust
-
-##### Helper Functions ########################################
-
-def _convert_other(other):
-    """Convert other to Decimal.
-
-    Verifies that it's ok to use in an implicit construction.
-    """
-    if isinstance(other, Decimal):
-        return other
-    if isinstance(other, (int, long)):
-        return Decimal(other)
-    return NotImplemented
-
-_infinity_map = {
-    'inf' : 1,
-    'infinity' : 1,
-    '+inf' : 1,
-    '+infinity' : 1,
-    '-inf' : -1,
-    '-infinity' : -1
-}
-
-def _isinfinity(num):
-    """Determines whether a string or float is infinity.
-
-    +1 for negative infinity; 0 for finite ; +1 for positive infinity
-    """
-    num = str(num).lower()
-    return _infinity_map.get(num, 0)
-
-def _isnan(num):
-    """Determines whether a string or float is NaN
-
-    (1, sign, diagnostic info as string) => NaN
-    (2, sign, diagnostic info as string) => sNaN
-    0 => not a NaN
-    """
-    num = str(num).lower()
-    if not num:
-        return 0
-
-    #get the sign, get rid of trailing [+-]
-    sign = 0
-    if num[0] == '+':
-        num = num[1:]
-    elif num[0] == '-':  #elif avoids '+-nan'
-        num = num[1:]
-        sign = 1
-
-    if num.startswith('nan'):
-        if len(num) > 3 and not num[3:].isdigit(): #diagnostic info
-            return 0
-        return (1, sign, num[3:].lstrip('0'))
-    if num.startswith('snan'):
-        if len(num) > 4 and not num[4:].isdigit():
-            return 0
-        return (2, sign, num[4:].lstrip('0'))
-    return 0
-
-
-##### Setup Specific Contexts ################################
-
-# The default context prototype used by Context()
-# Is mutable, so that new contexts can have different default values
-
-DefaultContext = Context(
-        prec=28, rounding=ROUND_HALF_EVEN,
-        traps=[DivisionByZero, Overflow, InvalidOperation],
-        flags=[],
-        _rounding_decision=ALWAYS_ROUND,
-        Emax=999999999,
-        Emin=-999999999,
-        capitals=1
-)
-
-# Pre-made alternate contexts offered by the specification
-# Don't change these; the user should be able to select these
-# contexts and be able to reproduce results from other implementations
-# of the spec.
-
-BasicContext = Context(
-        prec=9, rounding=ROUND_HALF_UP,
-        traps=[DivisionByZero, Overflow, InvalidOperation, Clamped, Underflow],
-        flags=[],
-)
-
-ExtendedContext = Context(
-        prec=9, rounding=ROUND_HALF_EVEN,
-        traps=[],
-        flags=[],
-)
-
-
-##### Useful Constants (internal use only) ####################
-
-#Reusable defaults
-Inf = Decimal('Inf')
-negInf = Decimal('-Inf')
-
-#Infsign[sign] is infinity w/ that sign
-Infsign = (Inf, negInf)
-
-NaN = Decimal('NaN')
-
-
-##### crud for parsing strings #################################
-import re
-
-# There's an optional sign at the start, and an optional exponent
-# at the end.  The exponent has an optional sign and at least one
-# digit.  In between, must have either at least one digit followed
-# by an optional fraction, or a decimal point followed by at least
-# one digit.  Yuck.
-
-_parser = re.compile(r"""
-#    \s*
-    (?P<sign>[-+])?
-    (
-        (?P<int>\d+) (\. (?P<frac>\d*))?
-    |
-        \. (?P<onlyfrac>\d+)
-    )
-    ([eE](?P<exp>[-+]? \d+))?
-#    \s*
-    $
-""", re.VERBOSE).match #Uncomment the \s* to allow leading or trailing spaces.
-
-del re
-
-# return sign, n, p s.t. float string value == -1**sign * n * 10**p exactly
-
-def _string2exact(s):
-    m = _parser(s)
-    if m is None:
-        raise ValueError("invalid literal for Decimal: %r" % s)
-
-    if m.group('sign') == "-":
-        sign = 1
-    else:
-        sign = 0
-
-    exp = m.group('exp')
-    if exp is None:
-        exp = 0
-    else:
-        exp = int(exp)
-
-    intpart = m.group('int')
-    if intpart is None:
-        intpart = ""
-        fracpart = m.group('onlyfrac')
-    else:
-        fracpart = m.group('frac')
-        if fracpart is None:
-            fracpart = ""
-
-    exp -= len(fracpart)
-
-    mantissa = intpart + fracpart
-    tmp = map(int, mantissa)
-    backup = tmp
-    while tmp and tmp[0] == 0:
-        del tmp[0]
-
-    # It's a zero
-    if not tmp:
-        if backup:
-            return (sign, tuple(backup), exp)
-        return (sign, (0,), exp)
-    mantissa = tuple(tmp)
-
-    return (sign, mantissa, exp)
-
-
-if __name__ == '__main__':
-    import doctest, sys
-    doctest.testmod(sys.modules[__name__])
--- a/web/lib/django/utils/cache.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/cache.py	Tue May 25 02:43:45 2010 +0200
@@ -19,16 +19,13 @@
 
 import re
 import time
-try:
-    set
-except NameError:
-    from sets import Set as set   # Python 2.3 fallback
 
 from django.conf import settings
 from django.core.cache import cache
 from django.utils.encoding import smart_str, iri_to_uri
 from django.utils.http import http_date
 from django.utils.hashcompat import md5_constructor
+from django.utils.translation import get_language
 from django.http import HttpRequest
 
 cc_delim_re = re.compile(r'\s*,\s*')
@@ -137,6 +134,15 @@
                           if newheader.lower() not in existing_headers]
     response['Vary'] = ', '.join(vary_headers + additional_headers)
 
+def _i18n_cache_key_suffix(request, cache_key):
+    """If enabled, returns the cache key ending with a locale."""
+    if settings.USE_I18N:
+        # first check if LocaleMiddleware or another middleware added
+        # LANGUAGE_CODE to request, then fall back to the active language
+        # which in turn can also fall back to settings.LANGUAGE_CODE
+        cache_key += '.%s' % getattr(request, 'LANGUAGE_CODE', get_language())
+    return cache_key
+
 def _generate_cache_key(request, headerlist, key_prefix):
     """Returns a cache key from the headers given in the header list."""
     ctx = md5_constructor()
@@ -145,13 +151,16 @@
         if value is not None:
             ctx.update(value)
     path = md5_constructor(iri_to_uri(request.path))
-    return 'views.decorators.cache.cache_page.%s.%s.%s' % (
-               key_prefix, path.hexdigest(), ctx.hexdigest())
+    cache_key = 'views.decorators.cache.cache_page.%s.%s.%s' % (
+        key_prefix, path.hexdigest(), ctx.hexdigest())
+    return _i18n_cache_key_suffix(request, cache_key)
 
 def _generate_cache_header_key(key_prefix, request):
     """Returns a cache key for the header cache."""
     path = md5_constructor(iri_to_uri(request.path))
-    return 'views.decorators.cache.cache_header.%s.%s' % (key_prefix, path.hexdigest())
+    cache_key = 'views.decorators.cache.cache_header.%s.%s' % (
+        key_prefix, path.hexdigest())
+    return _i18n_cache_key_suffix(request, cache_key)
 
 def get_cache_key(request, key_prefix=None):
     """
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/utils/copycompat.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,14 @@
+"""
+Fixes Python 2.4's failure to deepcopy unbound functions.
+"""
+
+import copy
+import types
+
+# Monkeypatch copy's deepcopy registry to handle functions correctly.
+if (hasattr(copy, '_deepcopy_dispatch') and types.FunctionType not in copy._deepcopy_dispatch):
+    copy._deepcopy_dispatch[types.FunctionType] = copy._deepcopy_atomic
+
+# Pose as the copy module now.
+del copy, types
+from copy import *
--- a/web/lib/django/utils/datastructures.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/datastructures.py	Tue May 25 02:43:45 2010 +0200
@@ -1,3 +1,8 @@
+from types import GeneratorType
+
+from django.utils.copycompat import deepcopy
+
+
 class MergeDict(object):
     """
     A simple class for creating new "virtual" dictionaries that actually look
@@ -32,11 +37,32 @@
                 return dict_.getlist(key)
         return []
 
-    def items(self):
-        item_list = []
+    def iteritems(self):
+        seen = set()
         for dict_ in self.dicts:
-            item_list.extend(dict_.items())
-        return item_list
+            for item in dict_.iteritems():
+                k, v = item
+                if k in seen:
+                    continue
+                seen.add(k)
+                yield item
+
+    def iterkeys(self):
+        for k, v in self.iteritems():
+            yield k
+
+    def itervalues(self):
+        for k, v in self.iteritems():
+            yield v
+
+    def items(self):
+        return list(self.iteritems())
+
+    def keys(self):
+        return list(self.iterkeys())
+
+    def values(self):
+        return list(self.itervalues())
 
     def has_key(self, key):
         for dict_ in self.dicts:
@@ -45,6 +71,7 @@
         return False
 
     __contains__ = has_key
+    __iter__ = iterkeys
 
     def copy(self):
         """Returns a copy of this object."""
@@ -62,6 +89,11 @@
     def __init__(self, data=None):
         if data is None:
             data = {}
+        elif isinstance(data, GeneratorType):
+            # Unfortunately we need to be able to read a generator twice.  Once
+            # to get the data into self with our super().__init__ call and a
+            # second time to setup keyOrder correctly
+            data = list(data)
         super(SortedDict, self).__init__(data)
         if isinstance(data, dict):
             self.keyOrder = data.keys()
@@ -72,22 +104,20 @@
                     self.keyOrder.append(key)
 
     def __deepcopy__(self, memo):
-        from copy import deepcopy
         return self.__class__([(key, deepcopy(value, memo))
                                for key, value in self.iteritems()])
 
     def __setitem__(self, key, value):
+        if key not in self:
+            self.keyOrder.append(key)
         super(SortedDict, self).__setitem__(key, value)
-        if key not in self.keyOrder:
-            self.keyOrder.append(key)
 
     def __delitem__(self, key):
         super(SortedDict, self).__delitem__(key)
         self.keyOrder.remove(key)
 
     def __iter__(self):
-        for k in self.keyOrder:
-            yield k
+        return iter(self.keyOrder)
 
     def pop(self, k, *args):
         result = super(SortedDict, self).pop(k, *args)
@@ -108,7 +138,7 @@
 
     def iteritems(self):
         for key in self.keyOrder:
-            yield key, super(SortedDict, self).__getitem__(key)
+            yield key, self[key]
 
     def keys(self):
         return self.keyOrder[:]
@@ -117,18 +147,18 @@
         return iter(self.keyOrder)
 
     def values(self):
-        return map(super(SortedDict, self).__getitem__, self.keyOrder)
+        return map(self.__getitem__, self.keyOrder)
 
     def itervalues(self):
         for key in self.keyOrder:
-            yield super(SortedDict, self).__getitem__(key)
+            yield self[key]
 
     def update(self, dict_):
-        for k, v in dict_.items():
-            self.__setitem__(k, v)
+        for k, v in dict_.iteritems():
+            self[k] = v
 
     def setdefault(self, key, default):
-        if key not in self.keyOrder:
+        if key not in self:
             self.keyOrder.append(key)
         return super(SortedDict, self).setdefault(key, default)
 
@@ -200,7 +230,7 @@
         try:
             list_ = super(MultiValueDict, self).__getitem__(key)
         except KeyError:
-            raise MultiValueDictKeyError, "Key %r not found in %r" % (key, self)
+            raise MultiValueDictKeyError("Key %r not found in %r" % (key, self))
         try:
             return list_[-1]
         except IndexError:
@@ -213,7 +243,7 @@
         return self.__class__(super(MultiValueDict, self).items())
 
     def __deepcopy__(self, memo=None):
-        import copy
+        import django.utils.copycompat as copy
         if memo is None:
             memo = {}
         result = self.__class__()
@@ -222,18 +252,18 @@
             dict.__setitem__(result, copy.deepcopy(key, memo),
                              copy.deepcopy(value, memo))
         return result
-    
+
     def __getstate__(self):
         obj_dict = self.__dict__.copy()
         obj_dict['_data'] = dict([(k, self.getlist(k)) for k in self])
         return obj_dict
-    
+
     def __setstate__(self, obj_dict):
         data = obj_dict.pop('_data', {})
         for k, v in data.items():
             self.setlist(k, v)
         self.__dict__.update(obj_dict)
-        
+
     def get(self, key, default=None):
         """
         Returns the last data value for the passed key. If key doesn't exist
@@ -301,12 +331,12 @@
     def values(self):
         """Returns a list of the last value on every key list."""
         return [self[key] for key in self.keys()]
-        
+
     def itervalues(self):
         """Yield the last value on every key list."""
         for key in self.iterkeys():
             yield self[key]
-    
+
     def copy(self):
         """Returns a copy of this object."""
         return self.__deepcopy__()
@@ -317,7 +347,7 @@
         Also accepts keyword args.
         """
         if len(args) > 1:
-            raise TypeError, "update expected at most 1 arguments, got %d" % len(args)
+            raise TypeError("update expected at most 1 arguments, got %d" % len(args))
         if args:
             other_dict = args[0]
             if isinstance(other_dict, MultiValueDict):
@@ -328,7 +358,7 @@
                     for key, value in other_dict.items():
                         self.setlistdefault(key, []).append(value)
                 except TypeError:
-                    raise ValueError, "MultiValueDict.update() takes either a MultiValueDict or dictionary"
+                    raise ValueError("MultiValueDict.update() takes either a MultiValueDict or dictionary")
         for key, value in kwargs.iteritems():
             self.setlistdefault(key, []).append(value)
 
@@ -392,7 +422,7 @@
         if isinstance(self.warning, Exception):
             raise self.warning
         else:
-            raise AttributeError, self.warning
+            raise AttributeError(self.warning)
 
     # All list mutation functions complain.
     __delitem__  = complain
--- a/web/lib/django/utils/dateformat.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/dateformat.py	Tue May 25 02:43:45 2010 +0200
@@ -19,7 +19,7 @@
 from django.utils.translation import ugettext as _
 from django.utils.encoding import force_unicode
 
-re_formatchars = re.compile(r'(?<!\\)([aAbBdDfFgGhHiIjlLmMnNOPrsStTUwWyYzZ])')
+re_formatchars = re.compile(r'(?<!\\)([aAbBcdDfFgGhHiIjlLmMnNOPrsStTUuwWyYzZ])')
 re_escaped = re.compile(r'\\(.)')
 
 class Formatter(object):
@@ -104,6 +104,11 @@
         "Seconds; i.e. '00' to '59'"
         return u'%02d' % self.data.second
 
+    def u(self):
+        "Microseconds"
+        return self.data.microsecond
+
+
 class DateFormat(TimeFormat):
     year_days = [None, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
 
@@ -118,6 +123,13 @@
         "Month, textual, 3 letters, lowercase; e.g. 'jan'"
         return MONTHS_3[self.data.month]
 
+    def c(self):
+        """
+        ISO 8601 Format
+        Example : '2008-01-02T10:30:00.000123'
+        """
+        return self.data.isoformat(' ')
+
     def d(self):
         "Day of the month, 2 digits with leading zeros; i.e. '01' to '31'"
         return u'%02d' % self.data.day
--- a/web/lib/django/utils/datetime_safe.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/datetime_safe.py	Tue May 25 02:43:45 2010 +0200
@@ -4,7 +4,7 @@
 #
 # Based on code submitted to comp.lang.python by Andrew Dalke
 #
-# >>> datetime_safe.date(1850, 8, 2).strftime("%Y/%M/%d was a %A")
+# >>> datetime_safe.date(1850, 8, 2).strftime("%Y/%m/%d was a %A")
 # '1850/08/02 was a Friday'
 
 from datetime import date as real_date, datetime as real_datetime
@@ -83,7 +83,7 @@
             sites.append(site)
 
     s = s1
-    syear = "%4d" % (dt.year,)
+    syear = "%04d" % (dt.year,)
     for site in sites:
         s = s[:site] + syear + s[site+4:]
     return s
--- a/web/lib/django/utils/decorators.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/decorators.py	Tue May 25 02:43:45 2010 +0200
@@ -2,60 +2,87 @@
 
 import types
 try:
-    from functools import wraps
+    from functools import wraps, update_wrapper, WRAPPER_ASSIGNMENTS
 except ImportError:
-    from django.utils.functional import wraps  # Python 2.3, 2.4 fallback.
+    from django.utils.functional import wraps, update_wrapper, WRAPPER_ASSIGNMENTS  # Python 2.4 fallback.
+
+
+def method_decorator(decorator):
+    """
+    Converts a function decorator into a method decorator
+    """
+    def _dec(func):
+        def _wrapper(self, *args, **kwargs):
+            def bound_func(*args2, **kwargs2):
+                return func(self, *args2, **kwargs2)
+            # bound_func has the signature that 'decorator' expects i.e.  no
+            # 'self' argument, but it is a closure over self so it can call
+            # 'func' correctly.
+            return decorator(bound_func)(*args, **kwargs)
+        return wraps(func)(_wrapper)
+    update_wrapper(_dec, decorator)
+    # Change the name to aid debugging.
+    _dec.__name__ = 'method_dec(%s)' % decorator.__name__
+    return _dec
+
+
+def decorator_from_middleware_with_args(middleware_class):
+    """
+    Like decorator_from_middleware, but returns a function
+    that accepts the arguments to be passed to the middleware_class.
+    Use like::
+
+         cache_page = decorator_from_middleware_with_args(CacheMiddleware)
+         # ...
+
+         @cache_page(3600)
+         def my_view(request):
+             # ...
+    """
+    return make_middleware_decorator(middleware_class)
+
 
 def decorator_from_middleware(middleware_class):
     """
     Given a middleware class (not an instance), returns a view decorator. This
-    lets you use middleware functionality on a per-view basis.
+    lets you use middleware functionality on a per-view basis. The middleware
+    is created with no params passed.
     """
-    def _decorator_from_middleware(*args, **kwargs):
-        # For historical reasons, these "decorators" are also called as
-        # dec(func, *args) instead of dec(*args)(func). We handle both forms
-        # for backwards compatibility.
-        has_func = True
-        try:
-            view_func = kwargs.pop('view_func')
-        except KeyError:
-            if len(args):
-                view_func, args = args[0], args[1:]
-            else:
-                has_func = False
-        if not (has_func and isinstance(view_func, types.FunctionType)):
-            # We are being called as a decorator.
-            if has_func:
-                args = (view_func,) + args
-            middleware = middleware_class(*args, **kwargs)
+    return make_middleware_decorator(middleware_class)()
 
-            def decorator_func(fn):
-                return _decorator_from_middleware(fn, *args, **kwargs)
-            return decorator_func
-
-        middleware = middleware_class(*args, **kwargs)
+def available_attrs(fn):
+    """
+    Return the list of functools-wrappable attributes on a callable.
+    This is required as a workaround for http://bugs.python.org/issue3445.
+    """
+    return tuple(a for a in WRAPPER_ASSIGNMENTS if hasattr(fn, a))
 
-        def _wrapped_view(request, *args, **kwargs):
-            if hasattr(middleware, 'process_request'):
-                result = middleware.process_request(request)
-                if result is not None:
-                    return result
-            if hasattr(middleware, 'process_view'):
-                result = middleware.process_view(request, view_func, args, kwargs)
-                if result is not None:
-                    return result
-            try:
-                response = view_func(request, *args, **kwargs)
-            except Exception, e:
-                if hasattr(middleware, 'process_exception'):
-                    result = middleware.process_exception(request, e)
+def make_middleware_decorator(middleware_class):
+    def _make_decorator(*m_args, **m_kwargs):
+        middleware = middleware_class(*m_args, **m_kwargs)
+        def _decorator(view_func):
+            def _wrapped_view(request, *args, **kwargs):
+                if hasattr(middleware, 'process_request'):
+                    result = middleware.process_request(request)
                     if result is not None:
                         return result
-                raise
-            if hasattr(middleware, 'process_response'):
-                result = middleware.process_response(request, response)
-                if result is not None:
-                    return result
-            return response
-        return wraps(view_func)(_wrapped_view)
-    return _decorator_from_middleware
+                if hasattr(middleware, 'process_view'):
+                    result = middleware.process_view(request, view_func, args, kwargs)
+                    if result is not None:
+                        return result
+                try:
+                    response = view_func(request, *args, **kwargs)
+                except Exception, e:
+                    if hasattr(middleware, 'process_exception'):
+                        result = middleware.process_exception(request, e)
+                        if result is not None:
+                            return result
+                    raise
+                if hasattr(middleware, 'process_response'):
+                    result = middleware.process_response(request, response)
+                    if result is not None:
+                        return result
+                return response
+            return wraps(view_func, assigned=available_attrs(view_func))(_wrapped_view)
+        return _decorator
+    return _make_decorator
--- a/web/lib/django/utils/encoding.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/encoding.py	Tue May 25 02:43:45 2010 +0200
@@ -3,15 +3,10 @@
 import locale
 import datetime
 import codecs
+from decimal import Decimal
 
 from django.utils.functional import Promise
 
-try:
-    from decimal import Decimal
-except ImportError:
-    from django.utils._decimal import Decimal # Python 2.3 fallback
-
-
 class DjangoUnicodeDecodeError(UnicodeDecodeError):
     def __init__(self, obj, *args):
         self.obj = obj
@@ -89,7 +84,16 @@
             # SafeUnicode at the end.
             s = s.decode(encoding, errors)
     except UnicodeDecodeError, e:
-        raise DjangoUnicodeDecodeError(s, *e.args)
+        if not isinstance(s, Exception):
+            raise DjangoUnicodeDecodeError(s, *e.args)
+        else:
+            # If we get to here, the caller has passed in an Exception
+            # subclass populated with non-ASCII bytestring data without a
+            # working unicode method. Try to handle this without raising a
+            # further exception by individually forcing the exception args
+            # to unicode.
+            s = ' '.join([force_unicode(arg, encoding, strings_only,
+                    errors) for arg in s])
     return s
 
 def smart_str(s, encoding='utf-8', strings_only=False, errors='strict'):
@@ -131,12 +135,21 @@
 
     Returns an ASCII string containing the encoded result.
     """
-    # The list of safe characters here is constructed from the printable ASCII
-    # characters that are not explicitly excluded by the list at the end of
-    # section 3.1 of RFC 3987.
+    # The list of safe characters here is constructed from the "reserved" and
+    # "unreserved" characters specified in sections 2.2 and 2.3 of RFC 3986:
+    #     reserved    = gen-delims / sub-delims
+    #     gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
+    #     sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
+    #                   / "*" / "+" / "," / ";" / "="
+    #     unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
+    # Of the unreserved characters, urllib.quote already considers all but
+    # the ~ safe.
+    # The % character is also added to the list of safe characters here, as the
+    # end of section 3.1 of RFC 3987 specifically mentions that % must not be
+    # converted.
     if iri is None:
         return iri
-    return urllib.quote(smart_str(iri), safe='/#%[]=:;$&()+,!?*')
+    return urllib.quote(smart_str(iri), safe="/#%[]=:;$&()+,!?*@'~")
 
 
 # The encoding of the default system locale but falls back to the
--- a/web/lib/django/utils/feedgenerator.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/feedgenerator.py	Tue May 25 02:43:45 2010 +0200
@@ -19,8 +19,8 @@
 http://diveintomark.org/archives/2004/02/04/incompatible-rss
 """
 
-import re
 import datetime
+import urlparse
 from django.utils.xmlutils import SimplerXMLGenerator
 from django.utils.encoding import force_unicode, iri_to_uri
 
@@ -46,12 +46,22 @@
         return date.strftime('%Y-%m-%dT%H:%M:%SZ')
 
 def get_tag_uri(url, date):
-    "Creates a TagURI. See http://diveintomark.org/archives/2004/05/28/howto-atom-id"
-    tag = re.sub('^http://', '', url)
+    """
+    Creates a TagURI.
+
+    See http://diveintomark.org/archives/2004/05/28/howto-atom-id
+    """
+    url_split = urlparse.urlparse(url)
+
+    # Python 2.4 didn't have named attributes on split results or the hostname.
+    hostname = getattr(url_split, 'hostname', url_split[1].split(':')[0])
+    path = url_split[2]
+    fragment = url_split[5]
+
+    d = ''
     if date is not None:
-        tag = re.sub('/', ',%s:/' % date.strftime('%Y-%m-%d'), tag, 1)
-    tag = re.sub('#', '/', tag)
-    return u'tag:' + tag
+        d = ',%s' % date.strftime('%Y-%m-%d')
+    return u'tag:%s%s:%s/%s' % (hostname, d, path, fragment)
 
 class SyndicationFeed(object):
     "Base class for all syndication feeds. Subclasses should provide write()"
@@ -61,6 +71,9 @@
         to_unicode = lambda s: force_unicode(s, strings_only=True)
         if categories:
             categories = [force_unicode(c) for c in categories]
+        if ttl is not None:
+            # Force ints to unicode
+            ttl = force_unicode(ttl)
         self.feed = {
             'title': to_unicode(title),
             'link': iri_to_uri(link),
@@ -91,6 +104,9 @@
         to_unicode = lambda s: force_unicode(s, strings_only=True)
         if categories:
             categories = [to_unicode(c) for c in categories]
+        if ttl is not None:
+            # Force ints to unicode
+            ttl = force_unicode(ttl)
         item = {
             'title': to_unicode(title),
             'link': iri_to_uri(link),
@@ -186,7 +202,8 @@
         handler.endElement(u"rss")
 
     def rss_attributes(self):
-        return {u"version": self._version}
+        return {u"version": self._version,
+                u"xmlns:atom": u"http://www.w3.org/2005/Atom"}
 
     def write_items(self, handler):
         for item in self.items:
@@ -198,6 +215,7 @@
         handler.addQuickElement(u"title", self.feed['title'])
         handler.addQuickElement(u"link", self.feed['link'])
         handler.addQuickElement(u"description", self.feed['description'])
+        handler.addQuickElement(u"atom:link", None, {u"rel": u"self", u"href": self.feed['feed_url']})
         if self.feed['language'] is not None:
             handler.addQuickElement(u"language", self.feed['language'])
         for cat in self.feed['categories']:
@@ -235,7 +253,7 @@
         elif item["author_email"]:
             handler.addQuickElement(u"author", item["author_email"])
         elif item["author_name"]:
-            handler.addQuickElement(u"dc:creator", item["author_name"], {"xmlns:dc": u"http://purl.org/dc/elements/1.1/"})
+            handler.addQuickElement(u"dc:creator", item["author_name"], {u"xmlns:dc": u"http://purl.org/dc/elements/1.1/"})
 
         if item['pubdate'] is not None:
             handler.addQuickElement(u"pubDate", rfc2822_date(item['pubdate']).decode('utf-8'))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/utils/formats.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,130 @@
+import decimal
+import datetime
+
+from django.conf import settings
+from django.utils.translation import get_language, to_locale, check_for_language
+from django.utils.importlib import import_module
+from django.utils.encoding import smart_str
+from django.utils import dateformat, numberformat, datetime_safe
+
+def get_format_modules(reverse=False):
+    """
+    Returns an iterator over the format modules found in the project and Django
+    """
+    modules = []
+    if not check_for_language(get_language()) or not settings.USE_L10N:
+        return modules
+    locale = to_locale(get_language())
+    if settings.FORMAT_MODULE_PATH:
+        format_locations = [settings.FORMAT_MODULE_PATH + '.%s']
+    else:
+        format_locations = []
+    format_locations.append('django.conf.locale.%s')
+    for location in format_locations:
+        for l in (locale, locale.split('_')[0]):
+            try:
+                mod = import_module('.formats', location % l)
+            except ImportError:
+                pass
+            else:
+                # Don't return duplicates
+                if mod not in modules:
+                    modules.append(mod)
+    if reverse:
+        modules.reverse()
+    return modules
+
+def get_format(format_type):
+    """
+    For a specific format type, returns the format for the current
+    language (locale), defaults to the format in the settings.
+    format_type is the name of the format, e.g. 'DATE_FORMAT'
+    """
+    format_type = smart_str(format_type)
+    if settings.USE_L10N:
+        for module in get_format_modules():
+            try:
+                return getattr(module, format_type)
+            except AttributeError:
+                pass
+    return getattr(settings, format_type)
+
+def date_format(value, format=None):
+    """
+    Formats a datetime.date or datetime.datetime object using a
+    localizable format
+    """
+    return dateformat.format(value, get_format(format or 'DATE_FORMAT'))
+
+def time_format(value, format=None):
+    """
+    Formats a datetime.time object using a localizable format
+    """
+    return dateformat.time_format(value, get_format(format or 'TIME_FORMAT'))
+
+def number_format(value, decimal_pos=None):
+    """
+    Formats a numeric value using localization settings
+    """
+    return numberformat.format(
+        value,
+        get_format('DECIMAL_SEPARATOR'),
+        decimal_pos,
+        get_format('NUMBER_GROUPING'),
+        get_format('THOUSAND_SEPARATOR'),
+    )
+
+def localize(value):
+    """
+    Checks if value is a localizable type (date, number...) and returns it
+    formatted as a string using current locale format
+    """
+    if settings.USE_L10N:
+        if isinstance(value, (decimal.Decimal, float, int)):
+            return number_format(value)
+        elif isinstance(value, datetime.datetime):
+            return date_format(value, 'DATETIME_FORMAT')
+        elif isinstance(value, datetime.date):
+            return date_format(value)
+        elif isinstance(value, datetime.time):
+            return time_format(value, 'TIME_FORMAT')
+    return value
+
+def localize_input(value, default=None):
+    """
+    Checks if an input value is a localizable type and returns it
+    formatted with the appropriate formatting string of the current locale.
+    """
+    if isinstance(value, (decimal.Decimal, float, int)):
+        return number_format(value)
+    if isinstance(value, datetime.datetime):
+        value = datetime_safe.new_datetime(value)
+        format = smart_str(default or get_format('DATETIME_INPUT_FORMATS')[0])
+        return value.strftime(format)
+    elif isinstance(value, datetime.date):
+        value = datetime_safe.new_date(value)
+        format = smart_str(default or get_format('DATE_INPUT_FORMATS')[0])
+        return value.strftime(format)
+    elif isinstance(value, datetime.time):
+        format = smart_str(default or get_format('TIME_INPUT_FORMATS')[0])
+        return value.strftime(format)
+    return value
+
+def sanitize_separators(value):
+    """
+    Sanitizes a value according to the current decimal and
+    thousand separator setting. Used with form field input.
+    """
+    if settings.USE_L10N:
+        decimal_separator = get_format('DECIMAL_SEPARATOR')
+        if isinstance(value, basestring):
+            parts = []
+            if decimal_separator in value:
+                value, decimals = value.split(decimal_separator, 1)
+                parts.append(decimals)
+            if settings.USE_THOUSAND_SEPARATOR:
+                parts.append(value.replace(get_format('THOUSAND_SEPARATOR'), ''))
+            else:
+                parts.append(value)
+            value = '.'.join(reversed(parts))
+    return value
--- a/web/lib/django/utils/functional.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/functional.py	Tue May 25 02:43:45 2010 +0200
@@ -60,9 +60,6 @@
 # Summary of changes made to the Python 2.5 code below:
 #   * swapped ``partial`` for ``curry`` to maintain backwards-compatibility
 #     in Django.
-#   * Wrapped the ``setattr`` call in ``update_wrapper`` with a try-except
-#     block to make it compatible with Python 2.3, which doesn't allow
-#     assigning to ``__name__``.
 
 # Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation.
 # All Rights Reserved.
@@ -90,10 +87,7 @@
        function (defaults to functools.WRAPPER_UPDATES)
     """
     for attr in assigned:
-        try:
-            setattr(wrapper, attr, getattr(wrapped, attr))
-        except TypeError: # Python 2.3 doesn't allow assigning to __name__.
-            pass
+        setattr(wrapper, attr, getattr(wrapped, attr))
     for attr in updated:
         getattr(wrapper, attr).update(getattr(wrapped, attr))
     # Return the wrapper so this can be used as a decorator via curry()
@@ -147,6 +141,7 @@
     the lazy evaluation code is triggered. Results are not memoized; the
     function is evaluated on every access.
     """
+
     class __proxy__(Promise):
         """
         Encapsulate a function call and act as a proxy for methods that are
@@ -162,14 +157,24 @@
             if self.__dispatch is None:
                 self.__prepare_class__()
 
+        def __reduce__(self):
+            return (
+                _lazy_proxy_unpickle,
+                (self.__func, self.__args, self.__kw) + resultclasses
+            )
+
         def __prepare_class__(cls):
             cls.__dispatch = {}
             for resultclass in resultclasses:
                 cls.__dispatch[resultclass] = {}
                 for (k, v) in resultclass.__dict__.items():
+                    # All __promise__ return the same wrapper method, but they
+                    # also do setup, inserting the method into the dispatch
+                    # dict.
+                    meth = cls.__promise__(resultclass, k, v)
                     if hasattr(cls, k):
                         continue
-                    setattr(cls, k, cls.__promise__(resultclass, k, v))
+                    setattr(cls, k, meth)
             cls._delegate_str = str in resultclasses
             cls._delegate_unicode = unicode in resultclasses
             assert not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types."
@@ -236,6 +241,9 @@
 
     return wraps(func)(__wrapper__)
 
+def _lazy_proxy_unpickle(func, args, kwargs, *resultclasses):
+    return lazy(func, *resultclasses)(*args, **kwargs)
+
 def allow_lazy(func, *resultclasses):
     """
     A decorator that allows a function to be called with one or more lazy
@@ -257,9 +265,8 @@
     A wrapper for another class that can be used to delay instantiation of the
     wrapped class.
 
-    This is useful, for example, if the wrapped class needs to use Django
-    settings at creation time: we want to permit it to be imported without
-    accessing settings.
+    By subclassing, you have the opportunity to intercept and alter the
+    instantiation. If you don't need to do that, use SimpleLazyObject.
     """
     def __init__(self):
         self._wrapped = None
@@ -267,9 +274,6 @@
     def __getattr__(self, name):
         if self._wrapped is None:
             self._setup()
-        if name == "__members__":
-            # Used to implement dir(obj)
-            return self._wrapped.get_all_members()
         return getattr(self._wrapped, name)
 
     def __setattr__(self, name, value):
@@ -281,9 +285,83 @@
                 self._setup()
             setattr(self._wrapped, name, value)
 
+    def __delattr__(self, name):
+        if name == "_wrapped":
+            raise TypeError("can't delete _wrapped.")
+        if self._wrapped is None:
+            self._setup()
+        delattr(self._wrapped, name)
+
     def _setup(self):
         """
         Must be implemented by subclasses to initialise the wrapped object.
         """
         raise NotImplementedError
 
+    # introspection support:
+    __members__ = property(lambda self: self.__dir__())
+
+    def __dir__(self):
+        if self._wrapped is None:
+            self._setup()
+        return  dir(self._wrapped)
+
+class SimpleLazyObject(LazyObject):
+    """
+    A lazy object initialised from any function.
+
+    Designed for compound objects of unknown type. For builtins or objects of
+    known type, use django.utils.functional.lazy.
+    """
+    def __init__(self, func):
+        """
+        Pass in a callable that returns the object to be wrapped.
+
+        If copies are made of the resulting SimpleLazyObject, which can happen
+        in various circumstances within Django, then you must ensure that the
+        callable can be safely run more than once and will return the same
+        value.
+        """
+        self.__dict__['_setupfunc'] = func
+        # For some reason, we have to inline LazyObject.__init__ here to avoid
+        # recursion
+        self._wrapped = None
+
+    def __str__(self):
+        if self._wrapped is None: self._setup()
+        return str(self._wrapped)
+
+    def __unicode__(self):
+        if self._wrapped is None: self._setup()
+        return unicode(self._wrapped)
+
+    def __deepcopy__(self, memo):
+        if self._wrapped is None:
+            # We have to use SimpleLazyObject, not self.__class__, because the
+            # latter is proxied.
+            result = SimpleLazyObject(self._setupfunc)
+            memo[id(self)] = result
+            return result
+        else:
+            # Changed to use deepcopy from copycompat, instead of copy
+            # For Python 2.4.
+            from django.utils.copycompat import deepcopy
+            return deepcopy(self._wrapped, memo)
+
+    # Need to pretend to be the wrapped class, for the sake of objects that care
+    # about this (especially in equality tests)
+    def __get_class(self):
+        if self._wrapped is None: self._setup()
+        return self._wrapped.__class__
+    __class__ = property(__get_class)
+
+    def __eq__(self, other):
+        if self._wrapped is None: self._setup()
+        return self._wrapped == other
+
+    def __hash__(self):
+        if self._wrapped is None: self._setup()
+        return hash(self._wrapped)
+
+    def _setup(self):
+        self._wrapped = self._setupfunc()
--- a/web/lib/django/utils/hashcompat.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/hashcompat.py	Tue May 25 02:43:45 2010 +0200
@@ -8,9 +8,13 @@
 try:
     import hashlib
     md5_constructor = hashlib.md5
+    md5_hmac = md5_constructor
     sha_constructor = hashlib.sha1
+    sha_hmac = sha_constructor
 except ImportError:
     import md5
     md5_constructor = md5.new
+    md5_hmac = md5
     import sha
     sha_constructor = sha.new
+    sha_hmac = sha
--- a/web/lib/django/utils/itercompat.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/itercompat.py	Tue May 25 02:43:45 2010 +0200
@@ -6,57 +6,22 @@
 
 import itertools
 
-def compat_tee(iterable):
-    """
-    Return two independent iterators from a single iterable.
-
-    Based on http://www.python.org/doc/2.3.5/lib/itertools-example.html
+# Fallback for Python 2.4, Python 2.5
+def product(*args, **kwds):
     """
-    # Note: Using a dictionary and a list as the default arguments here is
-    # deliberate and safe in this instance.
-    def gen(next, data={}, cnt=[0]):
-        dpop = data.pop
-        for i in itertools.count():
-            if i == cnt[0]:
-                item = data[i] = next()
-                cnt[0] += 1
-            else:
-                item = dpop(i)
-            yield item
-    next = iter(iterable).next
-    return gen(next), gen(next)
-
-def groupby(iterable, keyfunc=None):
-    """
-    Taken from http://docs.python.org/lib/itertools-functions.html
+    Taken from http://docs.python.org/library/itertools.html#itertools.product
     """
-    if keyfunc is None:
-        keyfunc = lambda x:x
-    iterable = iter(iterable)
-    l = [iterable.next()]
-    lastkey = keyfunc(l[0])
-    for item in iterable:
-        key = keyfunc(item)
-        if key != lastkey:
-            yield lastkey, l
-            lastkey = key
-            l = [item]
-        else:
-            l.append(item)
-    yield lastkey, l
+    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
+    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
+    pools = map(tuple, args) * kwds.get('repeat', 1)
+    result = [[]]
+    for pool in pools:
+        result = [x+[y] for x in result for y in pool]
+    for prod in result:
+        yield tuple(prod)
 
-# Not really in itertools, since it's a builtin in Python 2.4 and later, but it
-# does operate as an iterator.
-def reversed(data):
-    for index in xrange(len(data)-1, -1, -1):
-        yield data[index]
-
-if hasattr(itertools, 'tee'):
-    tee = itertools.tee
-else:
-    tee = compat_tee
-if hasattr(itertools, 'groupby'):
-    groupby = itertools.groupby
+if hasattr(itertools, 'product'):
+    product = itertools.product
 
 def is_iterable(x):
     "A implementation independent way of checking for iterables"
@@ -67,9 +32,8 @@
     else:
         return True
 
-def sorted(in_value):
-    "A naive implementation of sorted"
-    out_value = in_value[:]
-    out_value.sort()
-    return out_value
-
+def all(iterable):
+    for item in iterable:
+        if not item:
+            return False
+    return True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/utils/module_loading.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,60 @@
+import imp
+import os
+import sys
+
+
+def module_has_submodule(package, module_name):
+    """See if 'module' is in 'package'."""
+    name = ".".join([package.__name__, module_name])
+    if name in sys.modules:
+        return True
+    for finder in sys.meta_path:
+        if finder.find_module(name):
+            return True
+    for entry in package.__path__:  # No __path__, then not a package.
+        try:
+            # Try the cached finder.
+            finder = sys.path_importer_cache[entry]
+            if finder is None:
+                # Implicit import machinery should be used.
+                try:
+                    file_, _, _ = imp.find_module(module_name, [entry])
+                    if file_:
+                        file_.close()
+                    return True
+                except ImportError:
+                    continue
+            # Else see if the finder knows of a loader.
+            elif finder.find_module(name):
+                return True
+            else:
+                continue
+        except KeyError:
+            # No cached finder, so try and make one.
+            for hook in sys.path_hooks:
+                try:
+                    finder = hook(entry)
+                    # XXX Could cache in sys.path_importer_cache
+                    if finder.find_module(name):
+                        return True
+                    else:
+                        # Once a finder is found, stop the search.
+                        break
+                except ImportError:
+                    # Continue the search for a finder.
+                    continue
+            else:
+                # No finder found.
+                # Try the implicit import machinery if searching a directory.
+                if os.path.isdir(entry):
+                    try:
+                        file_, _, _ = imp.find_module(module_name, [entry])
+                        if file_:
+                            file_.close()
+                        return True
+                    except ImportError:
+                        pass
+                # XXX Could insert None or NullImporter
+    else:
+        # Exhausted the search, so the module cannot be found.
+        return False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/utils/numberformat.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,42 @@
+from django.conf import settings
+
+def format(number, decimal_sep, decimal_pos, grouping=0, thousand_sep=''):
+    """
+    Gets a number (as a number or string), and returns it as a string,
+    using formats definied as arguments:
+
+    * decimal_sep: Decimal separator symbol (for example ".")
+    * decimal_pos: Number of decimal positions
+    * grouping: Number of digits in every group limited by thousand separator
+    * thousand_sep: Thousand separator symbol (for example ",")
+
+    """
+    # sign
+    if float(number) < 0:
+        sign = '-'
+    else:
+        sign = ''
+    # decimal part
+    str_number = unicode(number)
+    if str_number[0] == '-':
+        str_number = str_number[1:]
+    if '.' in str_number:
+        int_part, dec_part = str_number.split('.')
+        if decimal_pos:
+            dec_part = dec_part[:decimal_pos]
+    else:
+        int_part, dec_part = str_number, ''
+    if decimal_pos:
+        dec_part = dec_part + ('0' * (decimal_pos - len(dec_part)))
+    if dec_part: dec_part = decimal_sep + dec_part
+    # grouping
+    if settings.USE_L10N and settings.USE_THOUSAND_SEPARATOR and grouping:
+        int_part_gd = ''
+        for cnt, digit in enumerate(int_part[::-1]):
+            if cnt and not cnt % grouping:
+                int_part_gd += thousand_sep
+            int_part_gd += digit
+        int_part = int_part_gd[::-1]
+
+    return sign + int_part + dec_part
+
--- a/web/lib/django/utils/termcolors.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/termcolors.py	Tue May 25 02:43:45 2010 +0200
@@ -5,7 +5,6 @@
 color_names = ('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white')
 foreground = dict([(color_names[x], '3%s' % x) for x in range(8)])
 background = dict([(color_names[x], '4%s' % x) for x in range(8)])
-del color_names
 
 RESET = '0'
 opt_dict = {'bold': '1', 'underscore': '4', 'blink': '5', 'reverse': '7', 'conceal': '8'}
@@ -39,7 +38,6 @@
         print colorize('and so should this')
         print 'this should not be red'
     """
-    text = str(text)
     code_list = []
     if text == '' and len(opts) == 1 and opts[0] == 'reset':
         return '\x1b[%sm' % RESET
@@ -66,3 +64,135 @@
         COMMENT = make_style(fg='blue', opts=('bold',))
     """
     return lambda text: colorize(text, opts, **kwargs)
+
+NOCOLOR_PALETTE = 'nocolor'
+DARK_PALETTE = 'dark'
+LIGHT_PALETTE = 'light'
+
+PALETTES = {
+    NOCOLOR_PALETTE: {
+        'ERROR':        {},
+        'NOTICE':       {},
+        'SQL_FIELD':    {},
+        'SQL_COLTYPE':  {},
+        'SQL_KEYWORD':  {},
+        'SQL_TABLE':    {},
+        'HTTP_INFO':         {},
+        'HTTP_SUCCESS':      {},
+        'HTTP_REDIRECT':     {},
+        'HTTP_NOT_MODIFIED': {},
+        'HTTP_BAD_REQUEST':  {},
+        'HTTP_NOT_FOUND':    {},
+        'HTTP_SERVER_ERROR': {},
+    },
+    DARK_PALETTE: {
+        'ERROR':        { 'fg': 'red', 'opts': ('bold',) },
+        'NOTICE':       { 'fg': 'red' },
+        'SQL_FIELD':    { 'fg': 'green', 'opts': ('bold',) },
+        'SQL_COLTYPE':  { 'fg': 'green' },
+        'SQL_KEYWORD':  { 'fg': 'yellow' },
+        'SQL_TABLE':    { 'opts': ('bold',) },
+        'HTTP_INFO':         { 'opts': ('bold',) },
+        'HTTP_SUCCESS':      { },
+        'HTTP_REDIRECT':     { 'fg': 'green' },
+        'HTTP_NOT_MODIFIED': { 'fg': 'cyan' },
+        'HTTP_BAD_REQUEST':  { 'fg': 'red', 'opts': ('bold',) },
+        'HTTP_NOT_FOUND':    { 'fg': 'yellow' },
+        'HTTP_SERVER_ERROR': { 'fg': 'magenta', 'opts': ('bold',) },
+    },
+    LIGHT_PALETTE: {
+        'ERROR':        { 'fg': 'red', 'opts': ('bold',) },
+        'NOTICE':       { 'fg': 'red' },
+        'SQL_FIELD':    { 'fg': 'green', 'opts': ('bold',) },
+        'SQL_COLTYPE':  { 'fg': 'green' },
+        'SQL_KEYWORD':  { 'fg': 'blue' },
+        'SQL_TABLE':    { 'opts': ('bold',) },
+        'HTTP_INFO':         { 'opts': ('bold',) },
+        'HTTP_SUCCESS':      { },
+        'HTTP_REDIRECT':     { 'fg': 'green', 'opts': ('bold',) },
+        'HTTP_NOT_MODIFIED': { 'fg': 'green' },
+        'HTTP_BAD_REQUEST':  { 'fg': 'red', 'opts': ('bold',) },
+        'HTTP_NOT_FOUND':    { 'fg': 'red' },
+        'HTTP_SERVER_ERROR': { 'fg': 'magenta', 'opts': ('bold',) },
+    }
+}
+DEFAULT_PALETTE = DARK_PALETTE
+
+def parse_color_setting(config_string):
+    """Parse a DJANGO_COLORS environment variable to produce the system palette
+
+    The general form of a pallete definition is:
+
+        "palette;role=fg;role=fg/bg;role=fg,option,option;role=fg/bg,option,option"
+
+    where:
+        palette is a named palette; one of 'light', 'dark', or 'nocolor'.
+        role is a named style used by Django
+        fg is a background color.
+        bg is a background color.
+        option is a display options.
+
+    Specifying a named palette is the same as manually specifying the individual
+    definitions for each role. Any individual definitions following the pallete
+    definition will augment the base palette definition.
+
+    Valid roles:
+        'error', 'notice', 'sql_field', 'sql_coltype', 'sql_keyword', 'sql_table',
+        'http_info', 'http_success', 'http_redirect', 'http_bad_request',
+        'http_not_found', 'http_server_error'
+
+    Valid colors:
+        'black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'
+
+    Valid options:
+        'bold', 'underscore', 'blink', 'reverse', 'conceal'
+
+    """
+    if not config_string:
+        return PALETTES[DEFAULT_PALETTE]
+
+    # Split the color configuration into parts
+    parts = config_string.lower().split(';')
+    palette = PALETTES[NOCOLOR_PALETTE].copy()
+    for part in parts:
+        if part in PALETTES:
+            # A default palette has been specified
+            palette.update(PALETTES[part])
+        elif '=' in part:
+            # Process a palette defining string
+            definition = {}
+
+            # Break the definition into the role,
+            # plus the list of specific instructions.
+            # The role must be in upper case
+            role, instructions = part.split('=')
+            role = role.upper()
+
+            styles = instructions.split(',')
+            styles.reverse()
+
+            # The first instruction can contain a slash
+            # to break apart fg/bg.
+            colors = styles.pop().split('/')
+            colors.reverse()
+            fg = colors.pop()
+            if fg in color_names:
+                definition['fg'] = fg
+            if colors and colors[-1] in color_names:
+                definition['bg'] = colors[-1]
+
+            # All remaining instructions are options
+            opts = tuple(s for s in styles if s in opt_dict.keys())
+            if opts:
+                definition['opts'] = opts
+
+            # The nocolor palette has all available roles.
+            # Use that palette as the basis for determining
+            # if the role is valid.
+            if role in PALETTES[NOCOLOR_PALETTE] and definition:
+                palette[role] = definition
+
+    # If there are no colors specified, return the empty palette.
+    if palette == PALETTES[NOCOLOR_PALETTE]:
+        return None
+    return palette
--- a/web/lib/django/utils/text.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/text.py	Tue May 25 02:43:45 2010 +0200
@@ -1,5 +1,4 @@
 import re
-from django.conf import settings
 from django.utils.encoding import force_unicode
 from django.utils.functional import allow_lazy
 from django.utils.translation import ugettext_lazy
@@ -37,24 +36,25 @@
     return u''.join(_generator())
 wrap = allow_lazy(wrap, unicode)
 
-def truncate_words(s, num):
-    "Truncates a string after a certain number of words."
+def truncate_words(s, num, end_text='...'):
+    """Truncates a string after a certain number of words. Takes an optional
+    argument of what should be used to notify that the string has been
+    truncated, defaults to ellipsis (...)"""
     s = force_unicode(s)
     length = int(num)
     words = s.split()
     if len(words) > length:
         words = words[:length]
-        if not words[-1].endswith('...'):
-            words.append('...')
+        if not words[-1].endswith(end_text):
+            words.append(end_text)
     return u' '.join(words)
 truncate_words = allow_lazy(truncate_words, unicode)
 
-def truncate_html_words(s, num):
-    """
-    Truncates html to a certain number of words (not counting tags and
+def truncate_html_words(s, num, end_text='...'):
+    """Truncates html to a certain number of words (not counting tags and
     comments). Closes opened tags if they were correctly closed in the given
-    html.
-    """
+    html. Takes an optional argument of what should be used to notify that the
+    string has been truncated, defaults to ellipsis (...)."""
     s = force_unicode(s)
     length = int(num)
     if length <= 0:
@@ -65,7 +65,7 @@
     re_tag = re.compile(r'<(/)?([^ ]+?)(?: (/)| .*?)?>')
     # Count non-HTML words and keep note of open tags
     pos = 0
-    ellipsis_pos = 0
+    end_text_pos = 0
     words = 0
     open_tags = []
     while words <= length:
@@ -78,11 +78,11 @@
             # It's an actual non-HTML word
             words += 1
             if words == length:
-                ellipsis_pos = pos
+                end_text_pos = pos
             continue
         # Check for tag
         tag = re_tag.match(m.group(0))
-        if not tag or ellipsis_pos:
+        if not tag or end_text_pos:
             # Don't worry about non tags or tags after our truncate point
             continue
         closing_tag, tagname, self_closing = tag.groups()
@@ -104,7 +104,9 @@
     if words <= length:
         # Don't try to close tags if we don't need to truncate
         return s
-    out = s[:ellipsis_pos] + ' ...'
+    out = s[:end_text_pos]
+    if end_text:
+        out += ' ' + end_text
     # Close any tags still open
     for tag in open_tags:
         out += '</%s>' % tag
@@ -157,12 +159,12 @@
 
 def phone2numeric(phone):
     "Converts a phone number with letters into its numeric equivalent."
-    letters = re.compile(r'[A-PR-Y]', re.I)
-    char2number = lambda m: {'a': '2', 'c': '2', 'b': '2', 'e': '3',
-         'd': '3', 'g': '4', 'f': '3', 'i': '4', 'h': '4', 'k': '5',
-         'j': '5', 'm': '6', 'l': '5', 'o': '6', 'n': '6', 'p': '7',
-         's': '7', 'r': '7', 'u': '8', 't': '8', 'w': '9', 'v': '8',
-         'y': '9', 'x': '9'}.get(m.group(0).lower())
+    letters = re.compile(r'[A-Z]', re.I)
+    char2number = lambda m: {'a': '2', 'b': '2', 'c': '2', 'd': '3', 'e': '3',
+         'f': '3', 'g': '4', 'h': '4', 'i': '4', 'j': '5', 'k': '5', 'l': '5',
+         'm': '6', 'n': '6', 'o': '6', 'p': '7', 'q': '7', 'r': '7', 's': '7',
+         't': '8', 'u': '8', 'v': '8', 'w': '9', 'x': '9', 'y': '9', 'z': '9',
+        }.get(m.group(0).lower())
     return letters.sub(char2number, phone)
 phone2numeric = allow_lazy(phone2numeric)
 
@@ -186,7 +188,7 @@
     if type(s) == str:
         s = s.decode('utf-8')
     elif type(s) != unicode:
-        raise TypeError, s
+        raise TypeError(s)
     s = s.replace('\\', '\\\\')
     s = s.replace('\r', '\\r')
     s = s.replace('\n', '\\n')
@@ -200,9 +202,14 @@
 # Expression to match some_token and some_token="with spaces" (and similarly
 # for single-quoted strings).
 smart_split_re = re.compile(r"""
-    ([^\s"]*"(?:[^"\\]*(?:\\.[^"\\]*)*)"\S*|
-     [^\s']*'(?:[^'\\]*(?:\\.[^'\\]*)*)'\S*|
-     \S+)""", re.VERBOSE)
+    ((?:
+        [^\s'"]*
+        (?:
+            (?:"(?:[^"\\]|\\.)*" | '(?:[^'\\]|\\.)*')
+            [^\s'"]*
+        )+
+    ) | \S+)
+""", re.VERBOSE)
 
 def smart_split(text):
     r"""
--- a/web/lib/django/utils/translation/__init__.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/translation/__init__.py	Tue May 25 02:43:45 2010 +0200
@@ -1,8 +1,9 @@
 """
 Internationalization support.
 """
-from django.utils.functional import lazy
 from django.utils.encoding import force_unicode
+from django.utils.functional import lazy, curry
+
 
 __all__ = ['gettext', 'gettext_noop', 'gettext_lazy', 'ngettext',
         'ngettext_lazy', 'string_concat', 'activate', 'deactivate',
@@ -19,32 +20,24 @@
 # replace the functions with their real counterparts (once we do access the
 # settings).
 
-def delayed_loader(*args, **kwargs):
+def delayed_loader(real_name, *args, **kwargs):
     """
-    Replace each real_* function with the corresponding function from either
-    trans_real or trans_null (e.g. real_gettext is replaced with
-    trans_real.gettext or trans_null.gettext). This function is run once, the
-    first time any i18n method is called. It replaces all the i18n methods at
-    once at that time.
+    Call the real, underlying function.  We have a level of indirection here so
+    that modules can use the translation bits without actually requiring
+    Django's settings bits to be configured before import.
     """
-    import traceback
     from django.conf import settings
     if settings.USE_I18N:
-        import trans_real as trans
+        from django.utils.translation import trans_real as trans
     else:
-        import trans_null as trans
-    caller = traceback.extract_stack(limit=2)[0][2]
-    g = globals()
-    for name in __all__:
-        if hasattr(trans, name):
-            g['real_%s' % name] = getattr(trans, name)
+        from django.utils.translation import trans_null as trans
 
     # Make the originally requested function call on the way out the door.
-    return g['real_%s' % caller](*args, **kwargs)
+    return getattr(trans, real_name)(*args, **kwargs)
 
 g = globals()
 for name in __all__:
-    g['real_%s' % name] = delayed_loader
+    g['real_%s' % name] = curry(delayed_loader, name)
 del g, delayed_loader
 
 def gettext_noop(message):
@@ -102,10 +95,10 @@
 def deactivate_all():
     return real_deactivate_all()
 
-def string_concat(*strings):
+def _string_concat(*strings):
     """
     Lazy variant of string concatenation, needed for translations that are
     constructed from multiple parts.
     """
     return u''.join([force_unicode(s) for s in strings])
-string_concat = lazy(string_concat, unicode)
+string_concat = lazy(_string_concat, unicode)
--- a/web/lib/django/utils/translation/trans_null.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/translation/trans_null.py	Tue May 25 02:43:45 2010 +0200
@@ -2,6 +2,7 @@
 # that don't actually do anything. This is purely for performance, so that
 # settings.USE_I18N = False can use this module rather than trans_real.py.
 
+import warnings
 from django.conf import settings
 from django.utils.encoding import force_unicode
 from django.utils.safestring import mark_safe, SafeData
@@ -18,10 +19,10 @@
 deactivate = deactivate_all = lambda: None
 get_language = lambda: settings.LANGUAGE_CODE
 get_language_bidi = lambda: settings.LANGUAGE_CODE in settings.LANGUAGES_BIDI
-get_date_formats = lambda: (settings.DATE_FORMAT, settings.DATETIME_FORMAT, settings.TIME_FORMAT)
-get_partial_date_formats = lambda: (settings.YEAR_MONTH_FORMAT, settings.MONTH_DAY_FORMAT)
 check_for_language = lambda x: True
 
+# date formats shouldn't be used using gettext anymore. This
+# is kept for backward compatibility
 TECHNICAL_ID_MAP = {
     "DATE_WITH_TIME_FULL": settings.DATETIME_FORMAT,
     "DATE_FORMAT": settings.DATE_FORMAT,
@@ -51,3 +52,21 @@
 
 def get_language_from_request(request):
     return settings.LANGUAGE_CODE
+
+# get_date_formats and get_partial_date_formats aren't used anymore by Django
+# but are kept for backward compatibility.
+def get_date_formats():
+    warnings.warn(
+        '`django.utils.translation.get_date_formats` is deprecated. '
+        'Please update your code to use the new i18n aware formatting.',
+        PendingDeprecationWarning
+    )
+    return settings.DATE_FORMAT, settings.DATETIME_FORMAT, settings.TIME_FORMAT
+
+def get_partial_date_formats():
+    warnings.warn(
+        '`django.utils.translation.get_partial_date_formats` is deprecated. '
+        'Please update your code to use the new i18n aware formatting.',
+        PendingDeprecationWarning
+    )
+    return settings.YEAR_MONTH_FORMAT, settings.MONTH_DAY_FORMAT
--- a/web/lib/django/utils/translation/trans_real.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/translation/trans_real.py	Tue May 25 02:43:45 2010 +0200
@@ -4,6 +4,7 @@
 import os
 import re
 import sys
+import warnings
 import gettext as gettext_module
 from cStringIO import StringIO
 
@@ -40,6 +41,9 @@
         if to_lower:
             return language[:p].lower()+'_'+language[p+1:].lower()
         else:
+            # Get correct locale for sr-latn
+            if len(language[p+1:]) > 2:
+                return language[:p].lower()+'_'+language[p+1].upper()+language[p+2:].lower()
             return language[:p].lower()+'_'+language[p+1:].upper()
     else:
         return language.lower()
@@ -56,7 +60,7 @@
     """
     This class sets up the GNUTranslations context with regard to output
     charset. Django uses a defined DEFAULT_CHARSET as the output charset on
-    Python 2.4. With Python 2.3, use DjangoTranslation23.
+    Python 2.4.
     """
     def __init__(self, *args, **kw):
         from django.conf import settings
@@ -83,23 +87,6 @@
     def __repr__(self):
         return "<DjangoTranslation lang:%s>" % self.__language
 
-class DjangoTranslation23(DjangoTranslation):
-    """
-    Compatibility class that is only used with Python 2.3.
-    Python 2.3 doesn't support set_output_charset on translation objects and
-    needs this wrapper class to make sure input charsets from translation files
-    are correctly translated to output charsets.
-
-    With a full switch to Python 2.4, this can be removed from the source.
-    """
-    def gettext(self, msgid):
-        res = self.ugettext(msgid)
-        return res.encode(self.django_output_charset)
-
-    def ngettext(self, msgid1, msgid2, n):
-        res = self.ungettext(msgid1, msgid2, n)
-        return res.encode(self.django_output_charset)
-
 def translation(language):
     """
     Returns a translation object.
@@ -117,11 +104,6 @@
 
     from django.conf import settings
 
-    # set up the right translation class
-    klass = DjangoTranslation
-    if sys.version_info < (2, 4):
-        klass = DjangoTranslation23
-
     globalpath = os.path.join(os.path.dirname(sys.modules[settings.__module__].__file__), 'locale')
 
     if settings.SETTINGS_MODULE is not None:
@@ -143,7 +125,7 @@
 
         def _translation(path):
             try:
-                t = gettext_module.translation('django', path, [loc], klass)
+                t = gettext_module.translation('django', path, [loc], DjangoTranslation)
                 t.set_language(lang)
                 return t
             except IOError, e:
@@ -173,9 +155,6 @@
             if os.path.isdir(localepath):
                 res = _merge(localepath)
 
-        if projectpath and os.path.isdir(projectpath):
-            res = _merge(projectpath)
-
         for appname in settings.INSTALLED_APPS:
             app = import_module(appname)
             apppath = os.path.join(os.path.dirname(app.__file__), 'locale')
@@ -183,6 +162,9 @@
             if os.path.isdir(apppath):
                 res = _merge(apppath)
 
+        if projectpath and os.path.isdir(projectpath):
+            res = _merge(projectpath)
+
         if res is None:
             if fallback is not None:
                 res = fallback
@@ -202,6 +184,12 @@
     language and installs it as the current translation object for the current
     thread.
     """
+    if isinstance(language, basestring) and language == 'no':
+        warnings.warn(
+            "The use of the language code 'no' is deprecated. "
+            "Please use the 'nb' translation instead.",
+            PendingDeprecationWarning
+        )
     _active[currentThread()] = translation(language)
 
 def deactivate():
@@ -266,15 +254,16 @@
     translation object to use. If no current translation is activated, the
     message will be run through the default translation object.
     """
+    eol_message = message.replace('\r\n', '\n').replace('\r', '\n')
     global _default, _active
     t = _active.get(currentThread(), None)
     if t is not None:
-        result = getattr(t, translation_function)(message)
+        result = getattr(t, translation_function)(eol_message)
     else:
         if _default is None:
             from django.conf import settings
             _default = translation(settings.LANGUAGE_CODE)
-        result = getattr(_default, translation_function)(message)
+        result = getattr(_default, translation_function)(eol_message)
     if isinstance(message, SafeData):
         return mark_safe(result)
     return result
@@ -351,6 +340,10 @@
             return lang_code
 
     lang_code = request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME)
+
+    if lang_code and lang_code not in supported:
+        lang_code = lang_code.split('-')[0] # e.g. if fr-ca is not supported fallback to fr
+
     if lang_code and lang_code in supported and check_for_language(lang_code):
         return lang_code
 
@@ -389,39 +382,6 @@
 
     return settings.LANGUAGE_CODE
 
-def get_date_formats():
-    """
-    Checks whether translation files provide a translation for some technical
-    message ID to store date and time formats. If it doesn't contain one, the
-    formats provided in the settings will be used.
-    """
-    from django.conf import settings
-    date_format = ugettext('DATE_FORMAT')
-    datetime_format = ugettext('DATETIME_FORMAT')
-    time_format = ugettext('TIME_FORMAT')
-    if date_format == 'DATE_FORMAT':
-        date_format = settings.DATE_FORMAT
-    if datetime_format == 'DATETIME_FORMAT':
-        datetime_format = settings.DATETIME_FORMAT
-    if time_format == 'TIME_FORMAT':
-        time_format = settings.TIME_FORMAT
-    return date_format, datetime_format, time_format
-
-def get_partial_date_formats():
-    """
-    Checks whether translation files provide a translation for some technical
-    message ID to store partial date formats. If it doesn't contain one, the
-    formats provided in the settings will be used.
-    """
-    from django.conf import settings
-    year_month_format = ugettext('YEAR_MONTH_FORMAT')
-    month_day_format = ugettext('MONTH_DAY_FORMAT')
-    if year_month_format == 'YEAR_MONTH_FORMAT':
-        year_month_format = settings.YEAR_MONTH_FORMAT
-    if month_day_format == 'MONTH_DAY_FORMAT':
-        month_day_format = settings.MONTH_DAY_FORMAT
-    return year_month_format, month_day_format
-
 dot_re = re.compile(r'\S')
 def blankout(src, char):
     """
@@ -537,3 +497,52 @@
         result.append((lang, priority))
     result.sort(lambda x, y: -cmp(x[1], y[1]))
     return result
+
+# get_date_formats and get_partial_date_formats aren't used anymore by Django
+# and are kept for backward compatibility.
+# Note, it's also important to keep format names marked for translation.
+# For compatibility we still want to have formats on translation catalogs.
+# That makes template code like {{ my_date|date:_('DATE_FORMAT') }} still work
+def get_date_formats():
+    """
+    Checks whether translation files provide a translation for some technical
+    message ID to store date and time formats. If it doesn't contain one, the
+    formats provided in the settings will be used.
+    """
+    warnings.warn(
+        "'django.utils.translation.get_date_formats' is deprecated. "
+        "Please update your code to use the new i18n aware formatting.",
+        PendingDeprecationWarning
+    )
+    from django.conf import settings
+    date_format = ugettext('DATE_FORMAT')
+    datetime_format = ugettext('DATETIME_FORMAT')
+    time_format = ugettext('TIME_FORMAT')
+    if date_format == 'DATE_FORMAT':
+        date_format = settings.DATE_FORMAT
+    if datetime_format == 'DATETIME_FORMAT':
+        datetime_format = settings.DATETIME_FORMAT
+    if time_format == 'TIME_FORMAT':
+        time_format = settings.TIME_FORMAT
+    return date_format, datetime_format, time_format
+
+def get_partial_date_formats():
+    """
+    Checks whether translation files provide a translation for some technical
+    message ID to store partial date formats. If it doesn't contain one, the
+    formats provided in the settings will be used.
+    """
+    warnings.warn(
+        "'django.utils.translation.get_partial_date_formats' is deprecated. "
+        "Please update your code to use the new i18n aware formatting.",
+        PendingDeprecationWarning
+    )
+    from django.conf import settings
+    year_month_format = ugettext('YEAR_MONTH_FORMAT')
+    month_day_format = ugettext('MONTH_DAY_FORMAT')
+    if year_month_format == 'YEAR_MONTH_FORMAT':
+        year_month_format = settings.YEAR_MONTH_FORMAT
+    if month_day_format == 'MONTH_DAY_FORMAT':
+        month_day_format = settings.MONTH_DAY_FORMAT
+    return year_month_format, month_day_format
+
--- a/web/lib/django/utils/tree.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/tree.py	Tue May 25 02:43:45 2010 +0200
@@ -3,7 +3,7 @@
 ORM.
 """
 
-from copy import deepcopy
+from django.utils.copycompat import deepcopy
 
 class Node(object):
     """
--- a/web/lib/django/utils/tzinfo.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/utils/tzinfo.py	Tue May 25 02:43:45 2010 +0200
@@ -13,7 +13,8 @@
         else:
             self.__offset = timedelta(minutes=offset)
 
-        self.__name = u"%+03d%02d" % (offset / 60, offset % 60)
+        sign = offset < 0 and '-' or '+'
+        self.__name = u"%s%02d%02d" % (sign, abs(offset) / 60., abs(offset) % 60)
 
     def __repr__(self):
         return self.__name
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/views/csrf.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,69 @@
+from django.http import HttpResponseForbidden
+from django.template import Context, Template
+from django.conf import settings
+
+# We include the template inline since we need to be able to reliably display
+# this error message, especially for the sake of developers, and there isn't any
+# other way of making it available independent of what is in the settings file.
+
+CSRF_FAILRE_TEMPLATE = """
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=utf-8">
+  <title>403 Forbidden</title>
+</head>
+<body>
+  <h1>403 Forbidden</h1>
+  <p>CSRF verification failed. Request aborted.</p>
+  {% if DEBUG %}
+  <h2>Help</h2>
+    {% if reason %}
+    <p>Reason given for failure:</p>
+    <pre>
+    {{ reason }}
+    </pre>
+    {% endif %}
+
+  <p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when
+  <a
+  href='http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf'>Django's
+  CSRF mechanism</a> has not been used correctly.  For POST forms, you need to
+  ensure:</p>
+
+  <ul>
+    <li>The view function uses <a
+    href='http://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext'><code>RequestContext</code></a>
+    for the template, instead of <code>Context</code>.</li>
+
+    <li>In the template, there is a <code>{% templatetag openblock %} csrf_token
+    {% templatetag closeblock %}</code> template tag inside each POST form that
+    targets an internal URL.</li>
+
+    <li>If you are not using <code>CsrfViewMiddleware</code>, then you must use
+    <code>csrf_protect</code> on any views that use the <code>csrf_token</code>
+    template tag, as well as those that accept the POST data.</li>
+
+  </ul>
+
+  <p>You're seeing the help section of this page because you have <code>DEBUG =
+  True</code> in your Django settings file. Change that to <code>False</code>,
+  and only the initial error message will be displayed.  </p>
+
+  <p>You can customize this page using the CSRF_FAILURE_VIEW setting.</p>
+  {% else %}
+  <p><small>More information is available with DEBUG=True.</small></p>
+
+  {% endif %}
+</body>
+</html>
+"""
+
+def csrf_failure(request, reason=""):
+    """
+    Default view used when request fails CSRF protection
+    """
+    t = Template(CSRF_FAILRE_TEMPLATE)
+    c = Context({'DEBUG': settings.DEBUG,
+                 'reason': reason})
+    return HttpResponseForbidden(t.render(c), mimetype='text/html')
--- a/web/lib/django/views/debug.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/views/debug.py	Tue May 25 02:43:45 2010 +0200
@@ -1,15 +1,17 @@
+import datetime
 import os
 import re
 import sys
-import datetime
 
 from django.conf import settings
-from django.template import Template, Context, TemplateDoesNotExist
+from django.http import HttpResponse, HttpResponseServerError, HttpResponseNotFound
+from django.template import (Template, Context, TemplateDoesNotExist,
+    TemplateSyntaxError)
 from django.utils.html import escape
 from django.utils.importlib import import_module
-from django.http import HttpResponse, HttpResponseServerError, HttpResponseNotFound
 from django.utils.encoding import smart_unicode, smart_str
 
+
 HIDDEN_SETTINGS = re.compile('SECRET|PASSWORD|PROFANITIES_LIST')
 
 def linebreak_iter(template_source):
@@ -20,15 +22,31 @@
         p = template_source.find('\n', p+1)
     yield len(template_source) + 1
 
+def cleanse_setting(key, value):
+    """Cleanse an individual setting key/value of sensitive content.
+
+    If the value is a dictionary, recursively cleanse the keys in
+    that dictionary.
+    """
+    try:
+        if HIDDEN_SETTINGS.search(key):
+            cleansed = '********************'
+        else:
+            if isinstance(value, dict):
+                cleansed = dict((k, cleanse_setting(k, v)) for k,v in value.items())
+            else:
+                cleansed = value
+    except TypeError:
+        # If the key isn't regex-able, just return as-is.
+        cleansed = value
+    return cleansed
+
 def get_safe_settings():
     "Returns a dictionary of the settings module, with sensitive settings blurred out."
     settings_dict = {}
     for k in dir(settings):
         if k.isupper():
-            if HIDDEN_SETTINGS.search(k):
-                settings_dict[k] = '********************'
-            else:
-                settings_dict[k] = getattr(settings, k)
+            settings_dict[k] = cleanse_setting(k, getattr(settings, k))
     return settings_dict
 
 def technical_500_response(request, exc_type, exc_value, tb):
@@ -76,11 +94,16 @@
                         for t in source_list_func(str(self.exc_value))]
                 except (ImportError, AttributeError):
                     template_list = []
+                if hasattr(loader, '__class__'):
+                    loader_name = loader.__module__ + '.' + loader.__class__.__name__
+                else:
+                    loader_name = loader.__module__ + '.' + loader.__name__
                 self.loader_debug_info.append({
-                    'loader': loader.__module__ + '.' + loader.__name__,
+                    'loader': loader_name,
                     'templates': template_list,
                 })
-        if settings.TEMPLATE_DEBUG and hasattr(self.exc_value, 'source'):
+        if (settings.TEMPLATE_DEBUG and hasattr(self.exc_value, 'source') and
+            isinstance(self.exc_value, TemplateSyntaxError)):
             self.get_template_exception_info()
 
         frames = self.get_traceback_frames()
@@ -245,7 +268,7 @@
     "Create a technical 404 error response. The exception should be the Http404."
     try:
         tried = exception.args[0]['tried']
-    except (IndexError, TypeError):
+    except (IndexError, TypeError, KeyError):
         tried = []
     else:
         if not tried:
@@ -400,6 +423,10 @@
       <td>{{ request.build_absolute_uri|escape }}</td>
     </tr>
     <tr>
+      <th>Django Version:</th>
+      <td>{{ django_version_info }}</td>
+    </tr>
+    <tr>
       <th>Exception Type:</th>
       <td>{{ exception_type }}</td>
     </tr>
@@ -809,7 +836,7 @@
 <div id="instructions">
   <p>Of course, you haven't actually done any work yet. Here's what to do next:</p>
   <ul>
-    <li>If you plan to use a database, edit the <code>DATABASE_*</code> settings in <code>{{ project_name }}/settings.py</code>.</li>
+    <li>If you plan to use a database, edit the <code>DATABASES</code> setting in <code>{{ project_name }}/settings.py</code>.</li>
     <li>Start your first app by running <code>python {{ project_name }}/manage.py startapp [appname]</code>.</li>
   </ul>
 </div>
--- a/web/lib/django/views/decorators/cache.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/views/decorators/cache.py	Tue May 25 02:43:45 2010 +0200
@@ -14,26 +14,51 @@
 try:
     from functools import wraps
 except ImportError:
-    from django.utils.functional import wraps  # Python 2.3, 2.4 fallback.
+    from django.utils.functional import wraps  # Python 2.4 fallback.
 
-from django.utils.decorators import decorator_from_middleware
+from django.utils.decorators import decorator_from_middleware_with_args, available_attrs
 from django.utils.cache import patch_cache_control, add_never_cache_headers
 from django.middleware.cache import CacheMiddleware
 
-cache_page = decorator_from_middleware(CacheMiddleware)
+
+def cache_page(*args, **kwargs):
+    # We need backwards compatibility with code which spells it this way:
+    #   def my_view(): pass
+    #   my_view = cache_page(my_view, 123)
+    # and this way:
+    #   my_view = cache_page(123)(my_view)
+    # and this:
+    #   my_view = cache_page(my_view, 123, key_prefix="foo")
+    # and this:
+    #   my_view = cache_page(123, key_prefix="foo")(my_view)
+    # and possibly this way (?):
+    #   my_view = cache_page(123, my_view)
+
+    # We also add some asserts to give better error messages in case people are
+    # using other ways to call cache_page that no longer work.
+    key_prefix = kwargs.pop('key_prefix', None)
+    assert not kwargs, "The only keyword argument accepted is key_prefix"
+    if len(args) > 1:
+        assert len(args) == 2, "cache_page accepts at most 2 arguments"
+        if callable(args[0]):
+            return decorator_from_middleware_with_args(CacheMiddleware)(cache_timeout=args[1], key_prefix=key_prefix)(args[0])
+        elif callable(args[1]):
+            return decorator_from_middleware_with_args(CacheMiddleware)(cache_timeout=args[0], key_prefix=key_prefix)(args[1])
+        else:
+            assert False, "cache_page must be passed either a single argument (timeout) or a view function and a timeout"
+    else:
+        return decorator_from_middleware_with_args(CacheMiddleware)(cache_timeout=args[0], key_prefix=key_prefix)
+
 
 def cache_control(**kwargs):
-
     def _cache_controller(viewfunc):
-
         def _cache_controlled(request, *args, **kw):
             response = viewfunc(request, *args, **kw)
             patch_cache_control(response, **kwargs)
             return response
+        return wraps(viewfunc, assigned=available_attrs(viewfunc))(_cache_controlled)
+    return _cache_controller
 
-        return wraps(viewfunc)(_cache_controlled)
-
-    return _cache_controller
 
 def never_cache(view_func):
     """
@@ -44,4 +69,4 @@
         response = view_func(request, *args, **kwargs)
         add_never_cache_headers(response)
         return response
-    return wraps(view_func)(_wrapped_view_func)
+    return wraps(view_func, assigned=available_attrs(view_func))(_wrapped_view_func)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/lib/django/views/decorators/csrf.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,48 @@
+from django.middleware.csrf import CsrfViewMiddleware
+from django.utils.decorators import decorator_from_middleware, available_attrs
+
+try:
+    from functools import wraps
+except ImportError:
+    from django.utils.functional import wraps  # Python 2.4 fallback.
+
+csrf_protect = decorator_from_middleware(CsrfViewMiddleware)
+csrf_protect.__name__ = "csrf_protect"
+csrf_protect.__doc__ = """
+This decorator adds CSRF protection in exactly the same way as
+CsrfViewMiddleware, but it can be used on a per view basis.  Using both, or
+using the decorator multiple times, is harmless and efficient.
+"""
+
+def csrf_response_exempt(view_func):
+    """
+    Modifies a view function so that its response is exempt
+    from the post-processing of the CSRF middleware.
+    """
+    def wrapped_view(*args, **kwargs):
+        resp = view_func(*args, **kwargs)
+        resp.csrf_exempt = True
+        return resp
+    return wraps(view_func, assigned=available_attrs(view_func))(wrapped_view)
+
+def csrf_view_exempt(view_func):
+    """
+    Marks a view function as being exempt from CSRF view protection.
+    """
+    # We could just do view_func.csrf_exempt = True, but decorators
+    # are nicer if they don't have side-effects, so we return a new
+    # function.
+    def wrapped_view(*args, **kwargs):
+        return view_func(*args, **kwargs)
+    wrapped_view.csrf_exempt = True
+    return wraps(view_func, assigned=available_attrs(view_func))(wrapped_view)
+
+def csrf_exempt(view_func):
+    """
+    Marks a view function as being exempt from the CSRF checks
+    and post processing.
+
+    This is the same as using both the csrf_view_exempt and
+    csrf_response_exempt decorators.
+    """
+    return csrf_response_exempt(csrf_view_exempt(view_func))
--- a/web/lib/django/views/decorators/http.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/views/decorators/http.py	Tue May 25 02:43:45 2010 +0200
@@ -5,13 +5,13 @@
 try:
     from functools import wraps
 except ImportError:
-    from django.utils.functional import wraps  # Python 2.3, 2.4 fallback.
+    from django.utils.functional import wraps  # Python 2.4 fallback.
 
 from calendar import timegm
 from datetime import timedelta
 from email.Utils import formatdate
 
-from django.utils.decorators import decorator_from_middleware
+from django.utils.decorators import decorator_from_middleware, available_attrs
 from django.utils.http import parse_etags, quote_etag
 from django.middleware.http import ConditionalGetMiddleware
 from django.http import HttpResponseNotAllowed, HttpResponseNotModified, HttpResponse
@@ -35,7 +35,7 @@
             if request.method not in request_method_list:
                 return HttpResponseNotAllowed(request_method_list)
             return func(request, *args, **kwargs)
-        return wraps(func)(inner)
+        return wraps(func, assigned=available_attrs(func))(inner)
     return decorator
 
 require_GET = require_http_methods(["GET"])
--- a/web/lib/django/views/decorators/vary.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/views/decorators/vary.py	Tue May 25 02:43:45 2010 +0200
@@ -1,9 +1,10 @@
 try:
     from functools import wraps
 except ImportError:
-    from django.utils.functional import wraps  # Python 2.3, 2.4 fallback.
+    from django.utils.functional import wraps  # Python 2.4 fallback.
 
 from django.utils.cache import patch_vary_headers
+from django.utils.decorators import available_attrs
 
 def vary_on_headers(*headers):
     """
@@ -21,7 +22,7 @@
             response = func(*args, **kwargs)
             patch_vary_headers(response, headers)
             return response
-        return wraps(func)(inner_func)
+        return wraps(func, assigned=available_attrs(func))(inner_func)
     return decorator
 
 def vary_on_cookie(func):
@@ -37,4 +38,4 @@
         response = func(*args, **kwargs)
         patch_vary_headers(response, ('Cookie',))
         return response
-    return wraps(func)(inner_func)
+    return wraps(func, assigned=available_attrs(func))(inner_func)
--- a/web/lib/django/views/generic/create_update.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/views/generic/create_update.py	Tue May 25 02:43:45 2010 +0200
@@ -6,6 +6,7 @@
 from django.utils.translation import ugettext
 from django.contrib.auth.views import redirect_to_login
 from django.views.generic import GenericViewError
+from django.contrib import messages
 
 
 def apply_extra_context(extra_context, context):
@@ -110,8 +111,10 @@
         form = form_class(request.POST, request.FILES)
         if form.is_valid():
             new_object = form.save()
-            if request.user.is_authenticated():
-                request.user.message_set.create(message=ugettext("The %(verbose_name)s was created successfully.") % {"verbose_name": model._meta.verbose_name})
+            
+            msg = ugettext("The %(verbose_name)s was created successfully.") %\
+                                    {"verbose_name": model._meta.verbose_name}
+            messages.success(request, msg, fail_silently=True)
             return redirect(post_save_redirect, new_object)
     else:
         form = form_class()
@@ -152,8 +155,9 @@
         form = form_class(request.POST, request.FILES, instance=obj)
         if form.is_valid():
             obj = form.save()
-            if request.user.is_authenticated():
-                request.user.message_set.create(message=ugettext("The %(verbose_name)s was updated successfully.") % {"verbose_name": model._meta.verbose_name})
+            msg = ugettext("The %(verbose_name)s was updated successfully.") %\
+                                    {"verbose_name": model._meta.verbose_name}
+            messages.success(request, msg, fail_silently=True)
             return redirect(post_save_redirect, obj)
     else:
         form = form_class(instance=obj)
@@ -194,8 +198,9 @@
 
     if request.method == 'POST':
         obj.delete()
-        if request.user.is_authenticated():
-            request.user.message_set.create(message=ugettext("The %(verbose_name)s was deleted.") % {"verbose_name": model._meta.verbose_name})
+        msg = ugettext("The %(verbose_name)s was deleted.") %\
+                                    {"verbose_name": model._meta.verbose_name}
+        messages.success(request, msg, fail_silently=True)
         return HttpResponseRedirect(post_delete_redirect)
     else:
         if not template_name:
--- a/web/lib/django/views/generic/date_based.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/views/generic/date_based.py	Tue May 25 02:43:45 2010 +0200
@@ -27,7 +27,7 @@
         queryset = queryset.filter(**{'%s__lte' % date_field: datetime.datetime.now()})
     date_list = queryset.dates(date_field, 'year')[::-1]
     if not date_list and not allow_empty:
-        raise Http404, "No %s available" % model._meta.verbose_name
+        raise Http404("No %s available" % model._meta.verbose_name)
 
     if date_list and num_latest:
         latest = queryset.order_by('-'+date_field)[:num_latest]
@@ -105,6 +105,8 @@
 
     Templates: ``<app_label>/<model_name>_archive_month.html``
     Context:
+        date_list:
+            List of days in this month with objects
         month:
             (date) this month
         next_month:
@@ -139,6 +141,7 @@
     if last_day >= now.date() and not allow_future:
         lookup_kwargs['%s__lte' % date_field] = now
     object_list = queryset.filter(**lookup_kwargs)
+    date_list = object_list.dates(date_field, 'day')
     if not object_list and not allow_empty:
         raise Http404
 
@@ -160,6 +163,7 @@
         template_name = "%s/%s_archive_month.html" % (model._meta.app_label, model._meta.object_name.lower())
     t = template_loader.get_template(template_name)
     c = RequestContext(request, {
+        'date_list': date_list,
         '%s_list' % template_object_name: object_list,
         'month': date,
         'next_month': next_month,
@@ -339,11 +343,11 @@
     elif slug and slug_field:
         lookup_kwargs['%s__exact' % slug_field] = slug
     else:
-        raise AttributeError, "Generic detail view must be called with either an object_id or a slug/slugfield"
+        raise AttributeError("Generic detail view must be called with either an object_id or a slug/slugfield")
     try:
         obj = queryset.get(**lookup_kwargs)
     except ObjectDoesNotExist:
-        raise Http404, "No %s found for" % model._meta.verbose_name
+        raise Http404("No %s found for" % model._meta.verbose_name)
     if not template_name:
         template_name = "%s/%s_detail.html" % (model._meta.app_label, model._meta.object_name.lower())
     if template_name_field:
--- a/web/lib/django/views/generic/list_detail.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/views/generic/list_detail.py	Tue May 25 02:43:45 2010 +0200
@@ -120,11 +120,11 @@
     elif slug and slug_field:
         queryset = queryset.filter(**{slug_field: slug})
     else:
-        raise AttributeError, "Generic detail view must be called with either an object_id or a slug/slug_field."
+        raise AttributeError("Generic detail view must be called with either an object_id or a slug/slug_field.")
     try:
         obj = queryset.get()
     except ObjectDoesNotExist:
-        raise Http404, "No %s found matching the query" % (model._meta.verbose_name)
+        raise Http404("No %s found matching the query" % (model._meta.verbose_name))
     if not template_name:
         template_name = "%s/%s_detail.html" % (model._meta.app_label, model._meta.object_name.lower())
     if template_name_field:
--- a/web/lib/django/views/i18n.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/views/i18n.py	Tue May 25 02:43:45 2010 +0200
@@ -1,10 +1,13 @@
+import os
+import gettext as gettext_module
+
 from django import http
 from django.conf import settings
 from django.utils import importlib
 from django.utils.translation import check_for_language, activate, to_locale, get_language
 from django.utils.text import javascript_quote
-import os
-import gettext as gettext_module
+from django.utils.encoding import smart_unicode
+from django.utils.formats import get_format_modules
 
 def set_language(request):
     """
@@ -32,6 +35,33 @@
                 response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code)
     return response
 
+def get_formats():
+    """
+    Returns all formats strings required for i18n to work
+    """
+    FORMAT_SETTINGS = (
+        'DATE_FORMAT', 'DATETIME_FORMAT', 'TIME_FORMAT',
+        'YEAR_MONTH_FORMAT', 'MONTH_DAY_FORMAT', 'SHORT_DATE_FORMAT',
+        'SHORT_DATETIME_FORMAT', 'FIRST_DAY_OF_WEEK', 'DECIMAL_SEPARATOR',
+        'THOUSAND_SEPARATOR', 'NUMBER_GROUPING',
+        'DATE_INPUT_FORMATS', 'TIME_INPUT_FORMATS', 'DATETIME_INPUT_FORMATS'
+    )
+    result = {}
+    for module in [settings] + get_format_modules(reverse=True):
+        for attr in FORMAT_SETTINGS:
+            try:
+                result[attr] = getattr(module, attr)
+            except AttributeError:
+                pass
+    src = []
+    for k, v in result.items():
+        if isinstance(v, (basestring, int)):
+            src.append("formats['%s'] = '%s';\n" % (javascript_quote(k), javascript_quote(smart_unicode(v))))
+        elif isinstance(v, (tuple, list)):
+            v = [javascript_quote(smart_unicode(value)) for value in v]
+            src.append("formats['%s'] = ['%s'];\n" % (javascript_quote(k), "', '".join(v)))
+    return ''.join(src)
+
 NullSource = """
 /* gettext identity library */
 
@@ -67,6 +97,25 @@
 }
 
 function gettext_noop(msgid) { return msgid; }
+
+"""
+
+LibFormatHead = """
+/* formatting library */
+
+var formats = new Array();
+
+"""
+
+LibFormatFoot = """
+function get_format(format_type) {
+    var value = formats[format_type];
+    if (typeof(value) == 'undefined') {
+      return msgid;
+    } else {
+      return value;
+    }
+}
 """
 
 SimplePlural = """
@@ -99,7 +148,8 @@
     Returns "identity" versions of the JavaScript i18n functions -- i.e.,
     versions that don't actually do anything.
     """
-    return http.HttpResponse(NullSource + InterPolate, 'text/javascript')
+    src = [NullSource, InterPolate, LibFormatHead, get_formats(), LibFormatFoot]
+    return http.HttpResponse(''.join(src), 'text/javascript')
 
 def javascript_catalog(request, domain='djangojs', packages=None):
     """
@@ -120,13 +170,14 @@
                 activate(request.GET['language'])
     if packages is None:
         packages = ['django.conf']
-    if type(packages) in (str, unicode):
+    if isinstance(packages, basestring):
         packages = packages.split('+')
     packages = [p for p in packages if p == 'django.conf' or p in settings.INSTALLED_APPS]
     default_locale = to_locale(settings.LANGUAGE_CODE)
     locale = to_locale(get_language())
     t = {}
     paths = []
+    en_catalog_missing = False
     # first load all english languages files for defaults
     for package in packages:
         p = importlib.import_module(package)
@@ -136,7 +187,12 @@
             catalog = gettext_module.translation(domain, path, ['en'])
             t.update(catalog._catalog)
         except IOError:
-            # 'en' catalog was missing. This is harmless.
+            # 'en' catalog was missing.
+            if locale.startswith('en'):
+                # If 'en' is the selected language this would cause issues
+                # later on if default_locale is something other than 'en'.
+                en_catalog_missing = True
+            # Otherwise it is harmless.
             pass
     # next load the settings.LANGUAGE_CODE translations if it isn't english
     if default_locale != 'en':
@@ -149,13 +205,21 @@
                 t.update(catalog._catalog)
     # last load the currently selected language, if it isn't identical to the default.
     if locale != default_locale:
-        for path in paths:
-            try:
-                catalog = gettext_module.translation(domain, path, [locale])
-            except IOError:
-                catalog = None
-            if catalog is not None:
-                t.update(catalog._catalog)
+        # If the flag en_catalog_missing has been set, the currently
+        # selected language is English but it doesn't have a translation
+        # catalog (presumably due to being the language translated from).
+        # If that is the case, a wrong language catalog might have been
+        # loaded in the previous step. It needs to be discarded.
+        if en_catalog_missing:
+            t = {}
+        else:
+            for path in paths:
+                try:
+                    catalog = gettext_module.translation(domain, path, [locale])
+                except IOError:
+                    catalog = None
+                if catalog is not None:
+                    t = catalog._catalog
     src = [LibHead]
     plural = None
     if '' in t:
@@ -174,21 +238,25 @@
     for k, v in t.items():
         if k == '':
             continue
-        if type(k) in (str, unicode):
+        if isinstance(k, basestring):
             csrc.append("catalog['%s'] = '%s';\n" % (javascript_quote(k), javascript_quote(v)))
-        elif type(k) == tuple:
+        elif isinstance(k, tuple):
             if k[0] not in pdict:
                 pdict[k[0]] = k[1]
             else:
                 pdict[k[0]] = max(k[1], pdict[k[0]])
             csrc.append("catalog['%s'][%d] = '%s';\n" % (javascript_quote(k[0]), k[1], javascript_quote(v)))
         else:
-            raise TypeError, k
+            raise TypeError(k)
     csrc.sort()
-    for k,v in pdict.items():
+    for k, v in pdict.items():
         src.append("catalog['%s'] = [%s];\n" % (javascript_quote(k), ','.join(["''"]*(v+1))))
     src.extend(csrc)
     src.append(LibFoot)
     src.append(InterPolate)
+    src.append(LibFormatHead)
+    src.append(get_formats())
+    src.append(LibFormatFoot)
     src = ''.join(src)
     return http.HttpResponse(src, 'text/javascript')
+
--- a/web/lib/django/views/static.py	Wed May 19 17:43:59 2010 +0200
+++ b/web/lib/django/views/static.py	Tue May 25 02:43:45 2010 +0200
@@ -51,15 +51,15 @@
     if os.path.isdir(fullpath):
         if show_indexes:
             return directory_index(newpath, fullpath)
-        raise Http404, "Directory indexes are not allowed here."
+        raise Http404("Directory indexes are not allowed here.")
     if not os.path.exists(fullpath):
-        raise Http404, '"%s" does not exist' % fullpath
+        raise Http404('"%s" does not exist' % fullpath)
     # Respect the If-Modified-Since header.
     statobj = os.stat(fullpath)
+    mimetype = mimetypes.guess_type(fullpath)[0] or 'application/octet-stream'
     if not was_modified_since(request.META.get('HTTP_IF_MODIFIED_SINCE'),
                               statobj[stat.ST_MTIME], statobj[stat.ST_SIZE]):
-        return HttpResponseNotModified()
-    mimetype = mimetypes.guess_type(fullpath)[0] or 'application/octet-stream'
+        return HttpResponseNotModified(mimetype=mimetype)
     contents = open(fullpath, 'rb').read()
     response = HttpResponse(contents, mimetype=mimetype)
     response["Last-Modified"] = http_date(statobj[stat.ST_MTIME])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/css/base.css	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,746 @@
+/*
+    DJANGO Admin styles
+*/
+
+body {
+    margin: 0;
+    padding: 0;
+    font-size: 12px;
+    font-family: "Lucida Grande","DejaVu Sans","Bitstream Vera Sans",Verdana,Arial,sans-serif;
+    color: #333;
+    background: #fff;
+}
+
+/* LINKS */
+
+a:link, a:visited {
+    color: #5b80b2;
+    text-decoration: none;
+}
+
+a:hover {
+    color: #036;
+}
+
+a img {
+    border: none;
+}
+
+a.section:link, a.section:visited {
+    color: white;
+    text-decoration: none;
+}
+
+/* GLOBAL DEFAULTS */
+
+p, ol, ul, dl {
+    margin: .2em 0 .8em 0;
+}
+
+p {
+    padding: 0;
+    line-height: 140%;
+}
+
+h1,h2,h3,h4,h5 {
+    font-weight: bold;
+}
+
+h1 {
+    font-size: 18px;
+    color: #666;
+    padding: 0 6px 0 0;
+    margin: 0 0 .2em 0;
+}
+
+h2 {
+    font-size: 16px;
+    margin: 1em 0 .5em 0;
+}
+
+h2.subhead {
+    font-weight: normal;
+    margin-top: 0;
+}
+
+h3 {
+    font-size: 14px;
+    margin: .8em 0 .3em 0;
+    color: #666;
+    font-weight: bold;
+}
+
+h4 {
+    font-size: 12px;
+    margin: 1em 0 .8em 0;
+    padding-bottom: 3px;
+}
+
+h5 {
+    font-size: 10px;
+    margin: 1.5em 0 .5em 0;
+    color: #666;
+    text-transform: uppercase;
+    letter-spacing: 1px;
+}
+
+ul li {
+    list-style-type: square;
+    padding: 1px 0;
+}
+
+ul.plainlist {
+    margin-left: 0 !important;
+}
+
+ul.plainlist li {
+    list-style-type: none;
+}
+
+li ul {
+    margin-bottom: 0;
+}
+
+li, dt, dd {
+    font-size: 11px;
+    line-height: 14px;
+}
+
+dt {
+    font-weight: bold;
+    margin-top: 4px;
+}
+
+dd {
+    margin-left: 0;
+}
+
+form {
+    margin: 0;
+    padding: 0;
+}
+
+fieldset {
+    margin: 0;
+    padding: 0;
+}
+
+blockquote {
+    font-size: 11px;
+    color: #777;
+    margin-left: 2px;
+    padding-left: 10px;
+    border-left: 5px solid #ddd;
+}
+
+code, pre {
+    font-family: "Bitstream Vera Sans Mono", Monaco, "Courier New", Courier, monospace;
+    background: inherit;
+    color: #666;
+    font-size: 11px;
+}
+
+pre.literal-block {
+    margin: 10px;
+    background: #eee;
+    padding: 6px 8px;
+}
+
+code strong {
+    color: #930;
+}
+
+hr {
+    clear: both;
+    color: #eee;
+    background-color: #eee;
+    height: 1px;
+    border: none;
+    margin: 0;
+    padding: 0;
+    font-size: 1px;
+    line-height: 1px;
+}
+
+/* TEXT STYLES & MODIFIERS */
+
+.small {
+    font-size: 11px;
+}
+
+.tiny {
+    font-size: 10px;
+}
+
+p.tiny {
+    margin-top: -2px;
+}
+
+.mini {
+    font-size: 9px;
+}
+
+p.mini {
+    margin-top: -3px;
+}
+
+.help, p.help {
+    font-size: 10px !important;
+    color: #999;
+}
+
+p img, h1 img, h2 img, h3 img, h4 img, td img {
+    vertical-align: middle;
+}
+
+.quiet, a.quiet:link, a.quiet:visited {
+    color: #999 !important;
+    font-weight: normal !important;
+}
+
+.quiet strong {
+    font-weight: bold !important;
+}
+
+.float-right {
+    float: right;
+}
+
+.float-left {
+    float: left;
+}
+
+.clear {
+    clear: both;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-right {
+    text-align: right;
+}
+
+.example {
+    margin: 10px 0;
+    padding: 5px 10px;
+    background: #efefef;
+}
+
+.nowrap {
+    white-space: nowrap;
+}
+
+/* TABLES */
+
+table {
+    border-collapse: collapse;
+    border-color: #ccc;
+}
+
+td, th {
+    font-size: 11px;
+    line-height: 13px;
+    border-bottom: 1px solid #eee;
+    vertical-align: top;
+    padding: 5px;
+    font-family: "Lucida Grande", Verdana, Arial, sans-serif;
+}
+
+th {
+    text-align: left;
+    font-size: 12px;
+    font-weight: bold;
+}
+
+thead th,
+tfoot td {
+    color: #666;
+    padding: 2px 5px;
+    font-size: 11px;
+    background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
+    border-left: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+}
+
+tfoot td {
+    border-bottom: none;
+    border-top: 1px solid #ddd;
+}
+
+thead th:first-child,
+tfoot td:first-child {
+    border-left: none !important;
+}
+
+thead th.optional {
+    font-weight: normal !important;
+}
+
+fieldset table {
+    border-right: 1px solid #eee;
+}
+
+tr.row-label td {
+    font-size: 9px;
+    padding-top: 2px;
+    padding-bottom: 0;
+    border-bottom: none;
+    color: #666;
+    margin-top: -1px;
+}
+
+tr.alt {
+    background: #f6f6f6;
+}
+
+.row1 {
+    background: #EDF3FE;
+}
+
+.row2 {
+    background: white;
+}
+
+/* SORTABLE TABLES */
+
+thead th a:link, thead th a:visited {
+    color: #666;
+    display: block;
+}
+
+table thead th.sorted {
+    background-position: bottom left !important;
+}
+
+table thead th.sorted a {
+    padding-right: 13px;
+}
+
+table thead th.ascending a {
+    background: url(../img/admin/arrow-down.gif) right .4em no-repeat;
+}
+
+table thead th.descending a {
+    background: url(../img/admin/arrow-up.gif) right .4em no-repeat;
+}
+
+/* ORDERABLE TABLES */
+
+table.orderable tbody tr td:hover {
+    cursor: move;
+}
+
+table.orderable tbody tr td:first-child {
+    padding-left: 14px;
+    background-image: url(../img/admin/nav-bg-grabber.gif);
+    background-repeat: repeat-y;
+}
+
+table.orderable-initalized .order-cell, body>tr>td.order-cell {
+    display: none;
+}
+
+/* FORM DEFAULTS */
+
+input, textarea, select, .form-row p {
+    margin: 2px 0;
+    padding: 2px 3px;
+    vertical-align: middle;
+    font-family: "Lucida Grande", Verdana, Arial, sans-serif;
+    font-weight: normal;
+    font-size: 11px;
+}
+
+textarea {
+    vertical-align: top !important;
+}
+
+input[type=text], input[type=password], textarea, select, .vTextField {
+    border: 1px solid #ccc;
+}
+
+/* FORM BUTTONS */
+
+.button, input[type=submit], input[type=button], .submit-row input {
+    background: white url(../img/admin/nav-bg.gif) bottom repeat-x;
+    padding: 3px 5px;
+    color: black;
+    border: 1px solid #bbb;
+    border-color: #ddd #aaa #aaa #ddd;
+}
+
+.button:active, input[type=submit]:active, input[type=button]:active {
+    background-image: url(../img/admin/nav-bg-reverse.gif);
+    background-position: top;
+}
+
+.button.default, input[type=submit].default, .submit-row input.default {
+    border: 2px solid #5b80b2;
+    background: #7CA0C7 url(../img/admin/default-bg.gif) bottom repeat-x;
+    font-weight: bold;
+    color: white;
+    float: right;
+}
+
+.button.default:active, input[type=submit].default:active {
+    background-image: url(../img/admin/default-bg-reverse.gif);
+    background-position: top;
+}
+
+/* MODULES */
+
+.module {
+    border: 1px solid #ccc;
+    margin-bottom: 5px;
+    background: white;
+}
+
+.module p, .module ul, .module h3, .module h4, .module dl, .module pre {
+    padding-left: 10px;
+    padding-right: 10px;
+}
+
+.module blockquote {
+    margin-left: 12px;
+}
+
+.module ul, .module ol {
+    margin-left: 1.5em;
+}
+
+.module h3 {
+    margin-top: .6em;
+}
+
+.module h2, .module caption, .inline-group h2 {
+    margin: 0;
+    padding: 2px 5px 3px 5px;
+    font-size: 11px;
+    text-align: left;
+    font-weight: bold;
+    background: #7CA0C7 url(../img/admin/default-bg.gif) top left repeat-x;
+    color: white;
+}
+
+.module table {
+    border-collapse: collapse;
+}
+
+/* MESSAGES & ERRORS */
+
+ul.messagelist {
+    padding: 0 0 5px 0;
+    margin: 0;
+}
+
+ul.messagelist li {
+    font-size: 12px;
+    display: block;
+    padding: 4px 5px 4px 25px;
+    margin: 0 0 3px 0;
+    border-bottom: 1px solid #ddd;
+    color: #666;
+    background: #ffc url(../img/admin/icon_success.gif) 5px .3em no-repeat;
+}
+
+.errornote {
+    font-size: 12px !important;
+    display: block;
+    padding: 4px 5px 4px 25px;
+    margin: 0 0 3px 0;
+    border: 1px solid red;
+    color: red;
+    background: #ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat;
+}
+
+ul.errorlist {
+    margin: 0 !important;
+    padding: 0 !important;
+}
+
+.errorlist li {
+    font-size: 12px !important;
+    display: block;
+    padding: 4px 5px 4px 25px;
+    margin: 0 0 3px 0;
+    border: 1px solid red;
+    color: white;
+    background: red url(../img/admin/icon_alert.gif) 5px .3em no-repeat;
+}
+
+td ul.errorlist {
+    margin: 0 !important;
+    padding: 0 !important;
+}
+
+td ul.errorlist li {
+    margin: 0 !important;
+}
+
+.errors {
+    background: #ffc;
+}
+
+.errors input, .errors select {
+    border: 1px solid red;
+}
+
+div.system-message {
+    background: #ffc;
+    margin: 10px;
+    padding: 6px 8px;
+    font-size: .8em;
+}
+
+div.system-message p.system-message-title {
+    padding: 4px 5px 4px 25px;
+    margin: 0;
+    color: red;
+    background: #ffc url(../img/admin/icon_error.gif) 5px .3em no-repeat;
+}
+
+.description {
+    font-size: 12px;
+    padding: 5px 0 0 12px;
+}
+
+/* BREADCRUMBS */
+
+div.breadcrumbs {
+    background: white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x;
+    padding: 2px 8px 3px 8px;
+    font-size: 11px;
+    color: #999;
+    border-top: 1px solid white;
+    border-bottom: 1px solid #ccc;
+    text-align: left;
+}
+
+/* ACTION ICONS */
+
+.addlink {
+    padding-left: 12px;
+    background: url(../img/admin/icon_addlink.gif) 0 .2em no-repeat;
+}
+
+.changelink {
+    padding-left: 12px;
+    background: url(../img/admin/icon_changelink.gif) 0 .2em no-repeat;
+}
+
+.deletelink {
+    padding-left: 12px;
+    background: url(../img/admin/icon_deletelink.gif) 0 .25em no-repeat;
+}
+
+a.deletelink:link, a.deletelink:visited {
+    color: #CC3434;
+}
+
+a.deletelink:hover {
+    color: #993333;
+}
+
+/* OBJECT TOOLS */
+
+.object-tools {
+    font-size: 10px;
+    font-weight: bold;
+    font-family: Arial,Helvetica,sans-serif;
+    padding-left: 0;
+    float: right;
+    position: relative;
+    margin-top: -2.4em;
+    margin-bottom: -2em;
+}
+
+.form-row .object-tools {
+    margin-top: 5px;
+    margin-bottom: 5px;
+    float: none;
+    height: 2em;
+    padding-left: 3.5em;
+}
+
+.object-tools li {
+    display: block;
+    float: left;
+    background: url(../img/admin/tool-left.gif) 0 0 no-repeat;
+    padding: 0 0 0 8px;
+    margin-left: 2px;
+    height: 16px;
+}
+
+.object-tools li:hover {
+    background: url(../img/admin/tool-left_over.gif) 0 0 no-repeat;
+}
+
+.object-tools a:link, .object-tools a:visited {
+    display: block;
+    float: left;
+    color: white;
+    padding: .1em 14px .1em 8px;
+    height: 14px;
+    background: #999 url(../img/admin/tool-right.gif) 100% 0 no-repeat;
+}
+
+.object-tools a:hover, .object-tools li:hover a {
+    background: #5b80b2 url(../img/admin/tool-right_over.gif) 100% 0 no-repeat;
+}
+
+.object-tools a.viewsitelink, .object-tools a.golink {
+    background: #999 url(../img/admin/tooltag-arrowright.gif) top right no-repeat;
+    padding-right: 28px;
+}
+
+.object-tools a.viewsitelink:hover, .object-tools a.golink:hover {
+    background: #5b80b2 url(../img/admin/tooltag-arrowright_over.gif) top right no-repeat;
+}
+
+.object-tools a.addlink {
+    background: #999 url(../img/admin/tooltag-add.gif) top right no-repeat;
+    padding-right: 28px;
+}
+
+.object-tools a.addlink:hover {
+    background: #5b80b2 url(../img/admin/tooltag-add_over.gif) top right no-repeat;
+}
+
+/* OBJECT HISTORY */
+
+table#change-history {
+    width: 100%;
+}
+
+table#change-history tbody th {
+    width: 16em;
+}
+
+/* PAGE STRUCTURE */
+
+#container {
+    position: relative;
+    width: 100%;
+    min-width: 760px;
+    padding: 0;
+}
+
+#content {
+    margin: 10px 15px;
+}
+
+#header {
+    width: 100%;
+}
+
+#content-main {
+    float: left;
+    width: 100%;
+}
+
+#content-related {
+    float: right;
+    width: 18em;
+    position: relative;
+    margin-right: -19em;
+}
+
+#footer {
+    clear: both;
+    padding: 10px;
+}
+
+/* COLUMN TYPES */
+
+.colMS {
+    margin-right: 20em !important;
+}
+
+.colSM {
+    margin-left: 20em !important;
+}
+
+.colSM #content-related {
+    float: left;
+    margin-right: 0;
+    margin-left: -19em;
+}
+
+.colSM #content-main {
+    float: right;
+}
+
+.popup .colM {
+    width: 95%;
+}
+
+.subcol {
+    float: left;
+    width: 46%;
+    margin-right: 15px;
+}
+
+.dashboard #content {
+    width: 500px;
+}
+
+/* HEADER */
+
+#header {
+    background: #417690;
+    color: #ffc;
+    overflow: hidden;
+}
+
+#header a:link, #header a:visited {
+    color: white;
+}
+
+#header a:hover {
+    text-decoration: underline;
+}
+
+#branding h1 {
+    padding: 0 10px;
+    font-size: 18px;
+    margin: 8px 0;
+    font-weight: normal;
+    color: #f4f379;
+}
+
+#branding h2 {
+    padding: 0 10px;
+    font-size: 14px;
+    margin: -8px 0 8px 0;
+    font-weight: normal;
+    color: #ffc;
+}
+
+#user-tools {
+    position: absolute;
+    top: 0;
+    right: 0;
+    padding: 1.2em 10px;
+    font-size: 11px;
+    text-align: right;
+}
+
+/* SIDEBAR */
+
+#content-related h3 {
+    font-size: 12px;
+    color: #666;
+    margin-bottom: 3px;
+}
+
+#content-related h4 {
+    font-size: 11px;
+}
+
+#content-related .module h2 {
+    background: #eee url(../img/admin/nav-bg.gif) bottom left repeat-x;
+    color: #666;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/css/changelists.css	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,284 @@
+/* CHANGELISTS */
+
+#changelist {
+    position: relative;
+    width: 100%;
+}
+
+#changelist table {
+    width: 100%;
+}
+
+.change-list .filtered table {
+    border-right: 1px solid #ddd;
+}
+
+.change-list .filtered {
+    min-height: 400px;
+}
+
+.change-list .filtered {
+    background: white url(../img/admin/changelist-bg.gif) top right repeat-y !important;
+}
+
+.change-list .filtered table, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {
+    margin-right: 160px !important;
+    width: auto !important;
+}
+
+.change-list .filtered table tbody th {
+    padding-right: 1em;
+}
+
+#changelist .toplinks {
+    border-bottom: 1px solid #ccc !important;
+}
+
+#changelist .paginator {
+    color: #666;
+    border-top: 1px solid #eee;
+    border-bottom: 1px solid #eee;
+    background: white url(../img/admin/nav-bg.gif) 0 180% repeat-x;
+    overflow: hidden;
+}
+
+.change-list .filtered .paginator {
+    border-right: 1px solid #ddd;
+}
+
+/* CHANGELIST TABLES */
+
+#changelist table thead th {
+    white-space: nowrap;
+    vertical-align: middle;
+}
+
+#changelist table thead th.action-checkbox-column {
+    width: 1.5em;
+    text-align: center;
+}
+
+#changelist table tbody td {
+    border-left: 1px solid #ddd;
+}
+
+#changelist table tbody td:first-child {
+    border-left: 0;
+    border-right: 1px solid #ddd;
+    text-align: center;
+}
+
+#changelist table tfoot {
+    color: #666;
+}
+
+/* TOOLBAR */
+
+#changelist #toolbar {
+    padding: 3px;
+    border-bottom: 1px solid #ddd;
+    background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
+    color: #666;
+}
+
+#changelist #toolbar form input {
+    font-size: 11px;
+    padding: 1px 2px;
+}
+
+#changelist #toolbar form #searchbar {
+    padding: 2px;
+}
+
+#changelist #changelist-search img {
+    vertical-align: middle;
+}
+
+/* FILTER COLUMN */
+
+#changelist-filter {
+    position: absolute;
+    top: 0;
+    right: 0;
+    z-index: 1000;
+    width: 160px;
+    border-left: 1px solid #ddd;
+    background: #efefef;
+    margin: 0;
+}
+
+#changelist-filter h2 {
+    font-size: 11px;
+    padding: 2px 5px;
+    border-bottom: 1px solid #ddd;
+}
+
+#changelist-filter h3 {
+    font-size: 12px;
+    margin-bottom: 0;
+}
+
+#changelist-filter ul {
+    padding-left: 0;
+    margin-left: 10px;
+}
+
+#changelist-filter li {
+    list-style-type: none;
+    margin-left: 0;
+    padding-left: 0;
+}
+
+#changelist-filter a {
+    color: #999;
+}
+
+#changelist-filter a:hover {
+    color: #036;
+}
+
+#changelist-filter li.selected {
+    border-left: 5px solid #ccc;
+    padding-left: 5px;
+    margin-left: -10px;
+}
+
+#changelist-filter li.selected a {
+    color: #5b80b2 !important;
+}
+
+/* DATE DRILLDOWN */
+
+.change-list ul.toplinks {
+    display: block;
+    background: white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x;
+    border-top: 1px solid white;
+    float: left;
+    padding: 0 !important;
+    margin: 0 !important;
+    width: 100%;
+}
+
+.change-list ul.toplinks li {
+    float: left;
+    width: 9em;
+    padding: 3px 6px;
+    font-weight: bold;
+    list-style-type: none;
+}
+
+.change-list ul.toplinks .date-back a {
+    color: #999;
+}
+
+.change-list ul.toplinks .date-back a:hover {
+    color: #036;
+}
+
+/* PAGINATOR */
+
+.paginator {
+    font-size: 11px;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    line-height: 22px;
+    margin: 0;
+    border-top: 1px solid #ddd;
+}
+
+.paginator a:link, .paginator a:visited {
+    padding: 2px 6px;
+    border: solid 1px #ccc;
+    background: white;
+    text-decoration: none;
+}
+
+.paginator a.showall {
+    padding: 0 !important;
+    border: none !important;
+}
+
+.paginator a.showall:hover {
+    color: #036 !important;
+    background: transparent !important;
+}
+
+.paginator .end {
+    border-width: 2px !important;
+    margin-right: 6px;
+}
+
+.paginator .this-page {
+    padding: 2px 6px;
+    font-weight: bold;
+    font-size: 13px;
+    vertical-align: top;
+}
+
+.paginator a:hover {
+    color: white;
+    background: #5b80b2;
+    border-color: #036;
+}
+
+/* ACTIONS */
+
+.filtered .actions {
+    margin-right: 160px !important;
+    border-right: 1px solid #ddd;
+}
+
+#changelist table input {
+    margin: 0;
+}
+
+#changelist table tbody tr.selected {
+    background-color: #FFFFCC;
+}
+
+#changelist .actions {
+    color: #999;
+    padding: 3px;
+    border-top: 1px solid #fff;
+    border-bottom: 1px solid #ddd;
+    background: white url(../img/admin/nav-bg-reverse.gif) 0 -10px repeat-x;
+}
+
+#changelist .actions.selected {
+    background: #fffccf;
+    border-top: 1px solid #fffee8;
+    border-bottom: 1px solid #edecd6;
+}
+
+#changelist .actions span.all,
+#changelist .actions span.action-counter,
+#changelist .actions span.clear,
+#changelist .actions span.question {
+    font-size: 11px;
+    margin: 0 0.5em;
+    display: none;
+}
+
+#changelist .actions:last-child {
+    border-bottom: none;
+}
+
+#changelist .actions select {
+    border: 1px solid #aaa;
+    margin-left: 0.5em;
+    padding: 1px 2px;
+}
+
+#changelist .actions label {
+    font-size: 11px;
+    margin-left: 0.5em;
+}
+
+#changelist #action-toggle {
+    display: none;
+}
+
+#changelist .actions .button {
+    font-size: 11px;
+    padding: 1px 2px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/css/dashboard.css	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,24 @@
+/* DASHBOARD */
+
+.dashboard .module table th {
+    width: 100%;
+}
+
+.dashboard .module table td {
+    white-space: nowrap;
+}
+
+.dashboard .module table td a {
+    display: block;
+    padding-right: .6em;
+}
+
+/* RECENT ACTIONS MODULE */
+
+.module ul.actionlist {
+    margin-left: 0;
+}
+
+ul.actionlist li {
+    list-style-type: none;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/css/forms.css	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,354 @@
+@import url('widgets.css');
+
+/* FORM ROWS */
+
+.form-row {
+    overflow: hidden;
+    padding: 8px 12px;
+    font-size: 11px;
+    border-bottom: 1px solid #eee;
+}
+
+.form-row img, .form-row input {
+    vertical-align: middle;
+}
+
+form .form-row p {
+    padding-left: 0;
+    font-size: 11px;
+}
+
+/* FORM LABELS */
+
+form h4 {
+    margin: 0 !important;
+    padding: 0 !important;
+    border: none !important;
+}
+
+label {
+    font-weight: normal !important;
+    color: #666;
+    font-size: 12px;
+}
+
+.required label, label.required {
+    font-weight: bold !important;
+    color: #333 !important;
+}
+
+/* RADIO BUTTONS */
+
+form ul.radiolist li {
+    list-style-type: none;
+}
+
+form ul.radiolist label {
+    float: none;
+    display: inline;
+}
+
+form ul.inline {
+    margin-left: 0;
+    padding: 0;
+}
+
+form ul.inline li {
+    float: left;
+    padding-right: 7px;
+}
+
+/* ALIGNED FIELDSETS */
+
+.aligned label {
+    display: block;
+    padding: 3px 10px 0 0;
+    float: left;
+    width: 8em;
+}
+
+.aligned ul label {
+    display: inline;
+    float: none;
+    width: auto;
+}
+
+.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField {
+    width: 350px;
+}
+
+form .aligned p, form .aligned ul {
+    margin-left: 7em;
+    padding-left: 30px;
+}
+
+form .aligned table p {
+    margin-left: 0;
+    padding-left: 0;
+}
+
+form .aligned p.help {
+    padding-left: 38px;
+}
+
+.aligned .vCheckboxLabel {
+    float: none !important;
+    display: inline;
+    padding-left: 4px;
+}
+
+.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField {
+    width: 610px;
+}
+
+.checkbox-row p.help {
+    margin-left: 0;
+    padding-left: 0 !important;
+}
+
+fieldset .field-box {
+    float: left;
+    margin-right: 20px;
+}
+
+/* WIDE FIELDSETS */
+
+.wide label {
+    width: 15em !important;
+}
+
+form .wide p {
+    margin-left: 15em;
+}
+
+form .wide p.help {
+    padding-left: 38px;
+}
+
+.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField {
+    width: 450px;
+}
+
+/* COLLAPSED FIELDSETS */
+
+fieldset.collapsed * {
+    display: none;
+}
+
+fieldset.collapsed h2, fieldset.collapsed {
+    display: block !important;
+}
+
+fieldset.collapsed h2 {
+    background-image: url(../img/admin/nav-bg.gif);
+    background-position: bottom left;
+    color: #999;
+}
+
+fieldset.collapsed .collapse-toggle {
+    background: transparent;
+    display: inline !important;
+}
+
+/* MONOSPACE TEXTAREAS */
+
+fieldset.monospace textarea {
+    font-family: "Bitstream Vera Sans Mono",Monaco,"Courier New",Courier,monospace;
+}
+
+/* SUBMIT ROW */
+
+.submit-row {
+    padding: 5px 7px;
+    text-align: right;
+    background: white url(../img/admin/nav-bg.gif) 0 100% repeat-x;
+    border: 1px solid #ccc;
+    margin: 5px 0;
+    overflow: hidden;
+}
+
+.submit-row input {
+    margin: 0 0 0 5px;
+}
+
+.submit-row p {
+    margin: 0.3em;
+}
+
+.submit-row p.deletelink-box {
+    float: left;
+}
+
+.submit-row .deletelink {
+    background: url(../img/admin/icon_deletelink.gif) 0 50% no-repeat;
+    padding-left: 14px;
+}
+
+/* CUSTOM FORM FIELDS */
+
+.vSelectMultipleField {
+    vertical-align: top !important;
+}
+
+.vCheckboxField {
+    border: none;
+}
+
+.vDateField, .vTimeField {
+    margin-right: 2px;
+}
+
+.vURLField {
+    width: 30em;
+}
+
+.vLargeTextField, .vXMLLargeTextField {
+    width: 48em;
+}
+
+.flatpages-flatpage #id_content {
+    height: 40.2em;
+}
+
+.module table .vPositiveSmallIntegerField {
+    width: 2.2em;
+}
+
+.vTextField {
+    width: 20em;
+}
+
+.vIntegerField {
+    width: 5em;
+}
+
+.vForeignKeyRawIdAdminField {
+    width: 5em;
+}
+
+/* INLINES */
+
+.inline-group {
+    padding: 0;
+    border: 1px solid #ccc;
+    margin: 10px 0;
+}
+
+.inline-group .aligned label {
+    width: 8em;
+}
+
+.inline-related {
+    position: relative;
+}
+
+.inline-related h3 {
+    margin: 0;
+    color: #666;
+    padding: 3px 5px;
+    font-size: 11px;
+    background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
+    border-bottom: 1px solid #ddd;
+}
+
+.inline-related h3 span.delete {
+    float: right;
+}
+
+.inline-related h3 span.delete label {
+    margin-left: 2px;
+    font-size: 11px;
+}
+
+.inline-related fieldset {
+    margin: 0;
+    background: #fff;
+    border: none;
+}
+
+.inline-related fieldset.module h3 {
+    margin: 0;
+    padding: 2px 5px 3px 5px;
+    font-size: 11px;
+    text-align: left;
+    font-weight: bold;
+    background: #bcd;
+    color: #fff;
+}
+
+.inline-group .tabular fieldset.module {
+    border: none;
+    border-bottom: 1px solid #ddd;
+}
+
+.inline-related.tabular fieldset.module table {
+    width: 100%;
+}
+
+.last-related fieldset {
+    border: none;
+}
+
+.inline-group .tabular tr.has_original td {
+    padding-top: 2em;
+}
+
+.inline-group .tabular tr td.original {
+    padding: 2px 0 0 0;
+    width: 0;
+    _position: relative;
+}
+
+.inline-group .tabular th.original {
+    width: 0px;
+    padding: 0;
+}
+
+.inline-group .tabular td.original p {
+    position: absolute;
+    left: 0;
+    height: 1.1em;
+    padding: 2px 7px;
+    overflow: hidden;
+    font-size: 9px;
+    font-weight: bold;
+    color: #666;
+    _width: 700px;
+}
+
+.inline-group ul.tools {
+    padding: 0;
+    margin: 0;
+    list-style: none;
+}
+
+.inline-group ul.tools li {
+    display: inline;
+    padding: 0 5px;
+}
+
+.inline-group div.add-row,
+.inline-group .tabular tr.add-row td {
+    color: #666;
+    padding: 3px 5px;
+    border-bottom: 1px solid #ddd;
+    background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
+}
+
+.inline-group .tabular tr.add-row td {
+    padding: 4px 5px 3px;
+    border-bottom: none;
+}
+
+.inline-group ul.tools a.add,
+.inline-group div.add-row a,
+.inline-group .tabular tr.add-row td a {
+    background: url(../img/admin/icon_addlink.gif) 0 50% no-repeat;
+    padding-left: 14px;
+    font-size: 11px;
+    outline: 0; /* Remove dotted border around link */
+}
+
+.empty-form {
+    display: none;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/css/ie.css	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,57 @@
+/* IE 6 & 7 */
+
+/* Proper fixed width for dashboard in IE6 */
+
+.dashboard #content {
+    *width: 768px;
+}
+
+.dashboard #content-main {
+    *width: 535px;
+}
+
+/* IE 6 ONLY */
+
+/* Keep header from flowing off the page */
+
+#container {
+    _position: static;
+}
+
+/* Put the right sidebars back on the page */
+
+.colMS #content-related {
+    _margin-right: 0;
+    _margin-left: 10px;
+    _position: static;
+}
+
+/* Put the left sidebars back on the page */
+
+.colSM #content-related {
+    _margin-right: 10px;
+    _margin-left: -115px;
+    _position: static;
+}
+
+.form-row {
+    _height: 1%;
+}
+
+/* Fix right margin for changelist filters in IE6 */
+
+#changelist-filter ul {
+    _margin-right: -10px;
+}
+
+/* IE ignores min-height, but treats height as if it were min-height */
+
+.change-list .filtered {
+    _height: 400px;
+}
+
+/* IE doesn't know alpha transparency in PNGs */
+
+.inline-deletelink {
+    background: transparent url(../img/admin/inline-delete-8bit.png) no-repeat;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/css/login.css	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,54 @@
+/* LOGIN FORM */
+
+body.login {
+    background: #eee;
+}
+
+.login #container {
+    background: white;
+    border: 1px solid #ccc;
+    width: 28em;
+    min-width: 300px;
+    margin-left: auto;
+    margin-right: auto;
+    margin-top: 100px;
+}
+
+.login #content-main {
+    width: 100%;
+}
+
+.login form {
+    margin-top: 1em;
+}
+
+.login .form-row {
+    padding: 4px 0;
+    float: left;
+    width: 100%;
+}
+
+.login .form-row label {
+    float: left;
+    width: 9em;
+    padding-right: 0.5em;
+    line-height: 2em;
+    text-align: right;
+    font-size: 1em;
+    color: #333;
+}
+
+.login .form-row #id_username, .login .form-row #id_password {
+    width: 14em;
+}
+
+.login span.help {
+    font-size: 10px;
+    display: block;
+}
+
+.login .submit-row {
+    clear: both;
+    padding: 1em 0 0 9.4em;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/css/rtl.css	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,217 @@
+body {
+    direction: rtl;
+}
+
+/* LOGIN */
+
+.login .form-row {
+    float: right;
+}
+
+.login .form-row label {
+    float: right;
+    padding-left: 0.5em;
+    padding-right: 0;
+    text-align: left;
+}
+
+.login .submit-row {
+    clear: both;
+    padding: 1em 9.4em 0 0;
+}
+
+/* GLOBAL */
+
+th {
+    text-align: right;
+}
+
+.module h2, .module caption {
+    text-align: right;
+}
+
+.addlink, .changelink {
+    padding-left: 0px;
+    padding-right: 12px;
+    background-position: 100% 0.2em;
+}
+
+.deletelink {
+    padding-left: 0px;
+    padding-right: 12px;
+    background-position: 100% 0.25em;
+}
+
+.object-tools {
+    float: left;
+}
+
+/* LAYOUT */
+
+#user-tools {
+    right: auto;
+    left: 0;
+    text-align: left;
+}
+
+div.breadcrumbs {
+    text-align: right;
+}
+
+#content-main {
+    float: right;
+}
+
+#content-related {
+    float: left;
+    margin-left: -19em;
+    margin-right: auto;
+}
+
+.colMS {
+    margin-left: 20em !important;
+    margin-right: 10px !important;
+}
+
+/* dashboard styles */
+
+.dashboard .module table td a {
+    padding-left: .6em;
+    padding-right: 12px;
+}
+
+/* changelists styles */
+
+.change-list .filtered {
+    background: white url(../img/admin/changelist-bg_rtl.gif) top left repeat-y !important;
+}
+
+.change-list .filtered table {
+    border-left: 1px solid #ddd;
+    border-right: 0px none;
+}
+
+#changelist-filter {
+    right: auto;
+    left: 0;
+    border-left: 0px none;
+    border-right: 1px solid #ddd;
+}
+
+.change-list .filtered table, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {
+    margin-right: 0px !important;
+    margin-left: 160px !important;
+}
+
+#changelist-filter li.selected {
+    border-left: 0px none;
+    padding-left: 0px;
+    margin-left: 0;
+    border-right: 5px solid #ccc;
+    padding-right: 5px;
+    margin-right: -10px;
+}
+
+.filtered .actions {
+    border-left:1px solid #DDDDDD;
+    margin-left:160px !important;
+    border-right: 0 none;
+    margin-right:0 !important;
+}
+
+/* FORMS */
+
+.aligned label {
+    padding: 0 0 3px 1em;
+    float: right;
+}
+
+.submit-row {
+    text-align: left
+}
+
+.submit-row p.deletelink-box {
+    float: right;
+}
+
+.submit-row .deletelink {
+    background: url(../img/admin/icon_deletelink.gif) 0 50% no-repeat;
+    padding-right: 14px;
+}
+
+.vDateField, .vTimeField {
+    margin-left: 2px;
+}
+
+form ul.inline li {
+    float: right;
+    padding-right: 0;
+    padding-left: 7px;
+}
+
+input[type=submit].default, .submit-row input.default {
+    float: left;
+}
+
+fieldset .field-box {
+    float: right;
+    margin-left: 20px;
+}
+
+.errorlist li {
+    background-position: 100% .3em;
+    padding: 4px 25px 4px 5px;
+}
+
+.errornote {
+    background-position: 100% .3em;
+    padding: 4px 25px 4px 5px;
+}
+
+/* WIDGETS */
+
+.calendarnav-previous {
+    top: 0;
+    left: auto;
+    right: 0;
+}
+
+.calendarnav-next {
+    top: 0;
+    right: auto;
+    left: 0;
+}
+
+.calendar caption, .calendarbox h2 {
+    text-align: center;
+}
+
+.selector {
+    float: right;
+}
+
+.selector .selector-filter {
+    text-align: right;
+}
+
+.inline-deletelink {
+    float: left;
+}
+
+/* MISC */
+
+.inline-related h2 {
+    text-align: right
+}
+
+.inline-related h3 span.delete {
+    padding-right: 20px;
+    padding-left: inherit;
+    left: 10px;
+    right: inherit;
+}
+
+.inline-related h3 span.delete label {
+    margin-left: inherit;
+    margin-right: 2px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/css/widgets.css	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,506 @@
+/* SELECTOR (FILTER INTERFACE) */
+
+.selector {
+    width: 580px;
+    float: left;
+}
+
+.selector select {
+    width: 270px;
+    height: 17.2em;
+}
+
+.selector-available, .selector-chosen {
+    float: left;
+    width: 270px;
+    text-align: center;
+    margin-bottom: 5px;
+}
+
+.selector-available h2, .selector-chosen h2 {
+    border: 1px solid #ccc;
+}
+
+.selector .selector-available h2 {
+    background: white url(../img/admin/nav-bg.gif) bottom left repeat-x;
+    color: #666;
+}
+
+.selector .selector-filter {
+    background: white;
+    border: 1px solid #ccc;
+    border-width: 0 1px;
+    padding: 3px;
+    color: #999;
+    font-size: 10px;
+    margin: 0;
+    text-align: left;
+}
+
+.selector .selector-chosen .selector-filter {
+    padding: 4px 5px;
+}
+
+.selector .selector-available input {
+    width: 230px;
+}
+
+.selector ul.selector-chooser {
+    float: left;
+    width: 22px;
+    height: 50px;
+    background: url(../img/admin/chooser-bg.gif) top center no-repeat;
+    margin: 8em 3px 0 3px;
+    padding: 0;
+}
+
+.selector-chooser li {
+    margin: 0;
+    padding: 3px;
+    list-style-type: none;
+}
+
+.selector select {
+    margin-bottom: 5px;
+    margin-top: 0;
+}
+
+.selector-add, .selector-remove {
+    width: 16px;
+    height: 16px;
+    display: block;
+    text-indent: -3000px;
+}
+
+.selector-add {
+    background: url(../img/admin/selector-add.gif) top center no-repeat;
+    margin-bottom: 2px;
+}
+
+.selector-remove {
+    background: url(../img/admin/selector-remove.gif) top center no-repeat;
+}
+
+a.selector-chooseall, a.selector-clearall {
+    display: block;
+    width: 6em;
+    text-align: left;
+    margin-left: auto;
+    margin-right: auto;
+    font-weight: bold;
+    color: #666;
+    padding: 3px 0 3px 18px;
+}
+
+a.selector-chooseall:hover, a.selector-clearall:hover {
+    color: #036;
+}
+
+a.selector-chooseall {
+    width: 7em;
+    background: url(../img/admin/selector-addall.gif) left center no-repeat;
+}
+
+a.selector-clearall {
+    background: url(../img/admin/selector-removeall.gif) left center no-repeat;
+}
+
+
+/* STACKED SELECTORS */
+
+.stacked {
+    float: left;
+    width: 500px;
+}
+
+.stacked select {
+    width: 480px;
+    height: 10.1em;
+}
+
+.stacked .selector-available, .stacked .selector-chosen {
+    width: 480px;
+}
+
+.stacked .selector-available {
+    margin-bottom: 0;
+}
+
+.stacked .selector-available input {
+    width: 442px;
+}
+
+.stacked ul.selector-chooser {
+    height: 22px;
+    width: 50px;
+    margin: 0 0 3px 40%;
+    background: url(../img/admin/chooser_stacked-bg.gif) top center no-repeat;
+}
+
+.stacked .selector-chooser li {
+    float: left;
+    padding: 3px 3px 3px 5px;
+}
+
+.stacked .selector-chooseall, .stacked .selector-clearall {
+    display: none;
+}
+
+.stacked .selector-add {
+    background-image: url(../img/admin/selector_stacked-add.gif);
+}
+
+.stacked .selector-remove {
+    background-image: url(../img/admin/selector_stacked-remove.gif);
+}
+
+
+/* DATE AND TIME */
+
+p.datetime {
+    line-height: 20px;
+    margin: 0;
+    padding: 0;
+    color: #666;
+    font-size: 11px;
+    font-weight: bold;
+}
+
+.datetime span {
+    font-size: 11px;
+    color: #ccc;
+    font-weight: normal;
+    white-space: nowrap;
+}
+
+table p.datetime {
+    font-size: 10px;
+    margin-left: 0;
+    padding-left: 0;
+}
+
+/* FILE UPLOADS */
+
+p.file-upload {
+    line-height: 20px;
+    margin: 0;
+    padding: 0;
+    color: #666;
+    font-size: 11px;
+    font-weight: bold;
+}
+
+.file-upload a {
+    font-weight: normal;
+}
+
+.file-upload .deletelink {
+    margin-left: 5px;
+}
+
+/* CALENDARS & CLOCKS */
+
+.calendarbox, .clockbox {
+    margin: 5px auto;
+    font-size: 11px;
+    width: 16em;
+    text-align: center;
+    background: white;
+    position: relative;
+}
+
+.clockbox {
+    width: auto;
+}
+
+.calendar {
+    margin: 0;
+    padding: 0;
+}
+
+.calendar table {
+    margin: 0;
+    padding: 0;
+    border-collapse: collapse;
+    background: white;
+    width: 99%;
+}
+
+.calendar caption, .calendarbox h2 {
+    margin: 0;
+    font-size: 11px;
+    text-align: center;
+    border-top: none;
+}
+
+.calendar th {
+    font-size: 10px;
+    color: #666;
+    padding: 2px 3px;
+    text-align: center;
+    background: #e1e1e1 url(../img/admin/nav-bg.gif) 0 50% repeat-x;
+    border-bottom: 1px solid #ddd;
+}
+
+.calendar td {
+    font-size: 11px;
+    text-align: center;
+    padding: 0;
+    border-top: 1px solid #eee;
+    border-bottom: none;
+}
+
+.calendar td.selected a {
+    background: #C9DBED;
+}
+
+.calendar td.nonday {
+    background: #efefef;
+}
+
+.calendar td.today a {
+    background: #ffc;
+}
+
+.calendar td a, .timelist a {
+    display: block;
+    font-weight: bold;
+    padding: 4px;
+    text-decoration: none;
+    color: #444;
+}
+
+.calendar td a:hover, .timelist a:hover {
+    background: #5b80b2;
+    color: white;
+}
+
+.calendar td a:active, .timelist a:active {
+    background: #036;
+    color: white;
+}
+
+.calendarnav {
+    font-size: 10px;
+    text-align: center;
+    color: #ccc;
+    margin: 0;
+    padding: 1px 3px;
+}
+
+.calendarnav a:link, #calendarnav a:visited, #calendarnav a:hover {
+    color: #999;
+}
+
+.calendar-shortcuts {
+    background: white;
+    font-size: 10px;
+    line-height: 11px;
+    border-top: 1px solid #eee;
+    padding: 3px 0 4px;
+    color: #ccc;
+}
+
+.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next {
+    display: block;
+    position: absolute;
+    font-weight: bold;
+    font-size: 12px;
+    background: #C9DBED url(../img/admin/default-bg.gif) bottom left repeat-x;
+    padding: 1px 4px 2px 4px;
+    color: white;
+}
+
+.calendarnav-previous:hover, .calendarnav-next:hover {
+    background: #036;
+}
+
+.calendarnav-previous {
+    top: 0;
+    left: 0;
+}
+
+.calendarnav-next {
+    top: 0;
+    right: 0;
+}
+
+.calendar-cancel {
+    margin: 0 !important;
+    padding: 0;
+    font-size: 10px;
+    background: #e1e1e1 url(../img/admin/nav-bg.gif) 0 50% repeat-x;
+    border-top: 1px solid #ddd;
+}
+
+.calendar-cancel a {
+    padding: 2px;
+    color: #999;
+}
+
+ul.timelist, .timelist li {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+}
+
+.timelist a {
+    padding: 2px;
+}
+
+/* INLINE ORDERER */
+
+ul.orderer {
+    position: relative;
+    padding: 0 !important;
+    margin: 0 !important;
+    list-style-type: none;
+}
+
+ul.orderer li {
+    list-style-type: none;
+    display: block;
+    padding: 0;
+    margin: 0;
+    border: 1px solid #bbb;
+    border-width: 0 1px 1px 0;
+    white-space: nowrap;
+    overflow: hidden;
+    background: #e2e2e2 url(../img/admin/nav-bg-grabber.gif) repeat-y;
+}
+
+ul.orderer li:hover {
+    cursor: move;
+    background-color: #ddd;
+}
+
+ul.orderer li a.selector {
+    margin-left: 12px;
+    overflow: hidden;
+    width: 83%;
+    font-size: 10px !important;
+    padding: 0.6em 0;
+}
+
+ul.orderer li a:link, ul.orderer li a:visited {
+    color: #333;
+}
+
+ul.orderer li .inline-deletelink {
+    position: absolute;
+    right: 4px;
+    margin-top: 0.6em;
+}
+
+ul.orderer li.selected {
+    background-color: #f8f8f8;
+    border-right-color: #f8f8f8;
+}
+
+ul.orderer li.deleted {
+    background: #bbb url(../img/admin/deleted-overlay.gif);
+}
+
+ul.orderer li.deleted a:link, ul.orderer li.deleted a:visited {
+    color: #888;
+}
+
+ul.orderer li.deleted .inline-deletelink {
+    background-image: url(../img/admin/inline-restore.png);
+}
+
+ul.orderer li.deleted:hover, ul.orderer li.deleted a.selector:hover {
+    cursor: default;
+}
+
+/* EDIT INLINE */
+
+.inline-deletelink {
+    float: right;
+    text-indent: -9999px;
+    background: transparent url(../img/admin/inline-delete.png) no-repeat;
+    width: 15px;
+    height: 15px;
+    border: 0px none;
+    outline: 0; /* Remove dotted border around link */
+}
+
+.inline-deletelink:hover {
+    background-position: -15px 0;
+    cursor: pointer;
+}
+
+.editinline button.addlink {
+    border: 0px none;
+    color: #5b80b2;
+    font-size: 100%;
+    cursor: pointer;
+}
+
+.editinline button.addlink:hover {
+    color: #036;
+    cursor: pointer;
+}
+
+.editinline table .help {
+    text-align: right;
+    float: right;
+    padding-left: 2em;
+}
+
+.editinline tfoot .addlink {
+    white-space: nowrap;
+}
+
+.editinline table thead th:last-child {
+    border-left: none;
+}
+
+.editinline tr.deleted {
+    background: #ddd url(../img/admin/deleted-overlay.gif);
+}
+
+.editinline tr.deleted .inline-deletelink {
+    background-image: url(../img/admin/inline-restore.png);
+}
+
+.editinline tr.deleted td:hover {
+    cursor: default;
+}
+
+.editinline tr.deleted td:first-child {
+    background-image: none !important;
+}
+
+/* EDIT INLINE - STACKED */
+
+.editinline-stacked {
+    min-width: 758px;
+}
+
+.editinline-stacked .inline-object {
+    margin-left: 210px;
+    background: white;
+}
+
+.editinline-stacked .inline-source {
+    float: left;
+    width: 200px;
+    background: #f8f8f8;
+}
+
+.editinline-stacked .inline-splitter {
+    float: left;
+    width: 9px;
+    background: #f8f8f8 url(../img/admin/inline-splitter-bg.gif) 50% 50% no-repeat;
+    border-right: 1px solid #ccc;
+}
+
+.editinline-stacked .controls {
+    clear: both;
+    background: #e1e1e1 url(../img/admin/nav-bg.gif) top left repeat-x;
+    padding: 3px 4px;
+    font-size: 11px;
+    border-top: 1px solid #ddd;
+}
+
Binary file web/static/admin/img/admin/arrow-down.gif has changed
Binary file web/static/admin/img/admin/arrow-up.gif has changed
Binary file web/static/admin/img/admin/changelist-bg.gif has changed
Binary file web/static/admin/img/admin/changelist-bg_rtl.gif has changed
Binary file web/static/admin/img/admin/chooser-bg.gif has changed
Binary file web/static/admin/img/admin/chooser_stacked-bg.gif has changed
Binary file web/static/admin/img/admin/default-bg-reverse.gif has changed
Binary file web/static/admin/img/admin/default-bg.gif has changed
Binary file web/static/admin/img/admin/deleted-overlay.gif has changed
Binary file web/static/admin/img/admin/icon-no.gif has changed
Binary file web/static/admin/img/admin/icon-unknown.gif has changed
Binary file web/static/admin/img/admin/icon-yes.gif has changed
Binary file web/static/admin/img/admin/icon_addlink.gif has changed
Binary file web/static/admin/img/admin/icon_alert.gif has changed
Binary file web/static/admin/img/admin/icon_calendar.gif has changed
Binary file web/static/admin/img/admin/icon_changelink.gif has changed
Binary file web/static/admin/img/admin/icon_clock.gif has changed
Binary file web/static/admin/img/admin/icon_deletelink.gif has changed
Binary file web/static/admin/img/admin/icon_error.gif has changed
Binary file web/static/admin/img/admin/icon_searchbox.png has changed
Binary file web/static/admin/img/admin/icon_success.gif has changed
Binary file web/static/admin/img/admin/inline-delete-8bit.png has changed
Binary file web/static/admin/img/admin/inline-delete.png has changed
Binary file web/static/admin/img/admin/inline-restore-8bit.png has changed
Binary file web/static/admin/img/admin/inline-restore.png has changed
Binary file web/static/admin/img/admin/inline-splitter-bg.gif has changed
Binary file web/static/admin/img/admin/nav-bg-grabber.gif has changed
Binary file web/static/admin/img/admin/nav-bg-reverse.gif has changed
Binary file web/static/admin/img/admin/nav-bg.gif has changed
Binary file web/static/admin/img/admin/selector-add.gif has changed
Binary file web/static/admin/img/admin/selector-addall.gif has changed
Binary file web/static/admin/img/admin/selector-remove.gif has changed
Binary file web/static/admin/img/admin/selector-removeall.gif has changed
Binary file web/static/admin/img/admin/selector-search.gif has changed
Binary file web/static/admin/img/admin/selector_stacked-add.gif has changed
Binary file web/static/admin/img/admin/selector_stacked-remove.gif has changed
Binary file web/static/admin/img/admin/tool-left.gif has changed
Binary file web/static/admin/img/admin/tool-left_over.gif has changed
Binary file web/static/admin/img/admin/tool-right.gif has changed
Binary file web/static/admin/img/admin/tool-right_over.gif has changed
Binary file web/static/admin/img/admin/tooltag-add.gif has changed
Binary file web/static/admin/img/admin/tooltag-add_over.gif has changed
Binary file web/static/admin/img/admin/tooltag-arrowright.gif has changed
Binary file web/static/admin/img/admin/tooltag-arrowright_over.gif has changed
Binary file web/static/admin/img/gis/move_vertex_off.png has changed
Binary file web/static/admin/img/gis/move_vertex_on.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/LICENSE-JQUERY.txt	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,20 @@
+Copyright (c) 2010 John Resig, http://jquery.com/
+ 
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+ 
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+ 
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/SelectBox.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,111 @@
+var SelectBox = {
+    cache: new Object(),
+    init: function(id) {
+        var box = document.getElementById(id);
+        var node;
+        SelectBox.cache[id] = new Array();
+        var cache = SelectBox.cache[id];
+        for (var i = 0; (node = box.options[i]); i++) {
+            cache.push({value: node.value, text: node.text, displayed: 1});
+        }
+    },
+    redisplay: function(id) {
+        // Repopulate HTML select box from cache
+        var box = document.getElementById(id);
+        box.options.length = 0; // clear all options
+        for (var i = 0, j = SelectBox.cache[id].length; i < j; i++) {
+            var node = SelectBox.cache[id][i];
+            if (node.displayed) {
+                box.options[box.options.length] = new Option(node.text, node.value, false, false);
+            }
+        }
+    },
+    filter: function(id, text) {
+        // Redisplay the HTML select box, displaying only the choices containing ALL
+        // the words in text. (It's an AND search.)
+        var tokens = text.toLowerCase().split(/\s+/);
+        var node, token;
+        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
+            node.displayed = 1;
+            for (var j = 0; (token = tokens[j]); j++) {
+                if (node.text.toLowerCase().indexOf(token) == -1) {
+                    node.displayed = 0;
+                }
+            }
+        }
+        SelectBox.redisplay(id);
+    },
+    delete_from_cache: function(id, value) {
+        var node, delete_index = null;
+        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
+            if (node.value == value) {
+                delete_index = i;
+                break;
+            }
+        }
+        var j = SelectBox.cache[id].length - 1;
+        for (var i = delete_index; i < j; i++) {
+            SelectBox.cache[id][i] = SelectBox.cache[id][i+1];
+        }
+        SelectBox.cache[id].length--;
+    },
+    add_to_cache: function(id, option) {
+        SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1});
+    },
+    cache_contains: function(id, value) {
+        // Check if an item is contained in the cache
+        var node;
+        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
+            if (node.value == value) {
+                return true;
+            }
+        }
+        return false;
+    },
+    move: function(from, to) {
+        var from_box = document.getElementById(from);
+        var to_box = document.getElementById(to);
+        var option;
+        for (var i = 0; (option = from_box.options[i]); i++) {
+            if (option.selected && SelectBox.cache_contains(from, option.value)) {
+                SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
+                SelectBox.delete_from_cache(from, option.value);
+            }
+        }
+        SelectBox.redisplay(from);
+        SelectBox.redisplay(to);
+    },
+    move_all: function(from, to) {
+        var from_box = document.getElementById(from);
+        var to_box = document.getElementById(to);
+        var option;
+        for (var i = 0; (option = from_box.options[i]); i++) {
+            if (SelectBox.cache_contains(from, option.value)) {
+                SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
+                SelectBox.delete_from_cache(from, option.value);
+            }
+        }
+        SelectBox.redisplay(from);
+        SelectBox.redisplay(to);
+    },
+    sort: function(id) {
+        SelectBox.cache[id].sort( function(a, b) {
+            a = a.text.toLowerCase();
+            b = b.text.toLowerCase();
+            try {
+                if (a > b) return 1;
+                if (a < b) return -1;
+            }
+            catch (e) {
+                // silently fail on IE 'unknown' exception
+            }
+            return 0;
+        } );
+    },
+    select_all: function(id) {
+        var box = document.getElementById(id);
+        for (var i = 0; i < box.options.length; i++) {
+            box.options[i].selected = 'selected';
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/SelectFilter2.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,117 @@
+/*
+SelectFilter2 - Turns a multiple-select box into a filter interface.
+
+Different than SelectFilter because this is coupled to the admin framework.
+
+Requires core.js, SelectBox.js and addevent.js.
+*/
+
+function findForm(node) {
+    // returns the node of the form containing the given node
+    if (node.tagName.toLowerCase() != 'form') {
+        return findForm(node.parentNode);
+    }
+    return node;
+}
+
+var SelectFilter = {
+    init: function(field_id, field_name, is_stacked, admin_media_prefix) {
+        if (field_id.match(/__prefix__/)){
+            // Don't intialize on empty forms.
+            return;
+        }
+        var from_box = document.getElementById(field_id);
+        from_box.id += '_from'; // change its ID
+        from_box.className = 'filtered';
+
+        // Remove <p class="info">, because it just gets in the way.
+        var ps = from_box.parentNode.getElementsByTagName('p');
+        for (var i=0; i<ps.length; i++) {
+            from_box.parentNode.removeChild(ps[i]);
+        }
+
+        // <div class="selector"> or <div class="selector stacked">
+        var selector_div = quickElement('div', from_box.parentNode);
+        selector_div.className = is_stacked ? 'selector stacked' : 'selector';
+
+        // <div class="selector-available">
+        var selector_available = quickElement('div', selector_div, '');
+        selector_available.className = 'selector-available';
+        quickElement('h2', selector_available, interpolate(gettext('Available %s'), [field_name]));
+        var filter_p = quickElement('p', selector_available, '');
+        filter_p.className = 'selector-filter';
+        quickElement('img', filter_p, '', 'src', admin_media_prefix + 'img/admin/selector-search.gif');
+        filter_p.appendChild(document.createTextNode(' '));
+        var filter_input = quickElement('input', filter_p, '', 'type', 'text');
+        filter_input.id = field_id + '_input';
+        selector_available.appendChild(from_box);
+        var choose_all = quickElement('a', selector_available, gettext('Choose all'), 'href', 'javascript: (function(){ SelectBox.move_all("' + field_id + '_from", "' + field_id + '_to"); })()');
+        choose_all.className = 'selector-chooseall';
+
+        // <ul class="selector-chooser">
+        var selector_chooser = quickElement('ul', selector_div, '');
+        selector_chooser.className = 'selector-chooser';
+        var add_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Add'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_from","' + field_id + '_to");})()');
+        add_link.className = 'selector-add';
+        var remove_link = quickElement('a', quickElement('li', selector_chooser, ''), gettext('Remove'), 'href', 'javascript: (function(){ SelectBox.move("' + field_id + '_to","' + field_id + '_from");})()');
+        remove_link.className = 'selector-remove';
+
+        // <div class="selector-chosen">
+        var selector_chosen = quickElement('div', selector_div, '');
+        selector_chosen.className = 'selector-chosen';
+        quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s'), [field_name]));
+        var selector_filter = quickElement('p', selector_chosen, gettext('Select your choice(s) and click '));
+        selector_filter.className = 'selector-filter';
+        quickElement('img', selector_filter, '', 'src', admin_media_prefix + (is_stacked ? 'img/admin/selector_stacked-add.gif':'img/admin/selector-add.gif'), 'alt', 'Add');
+        var to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', 'multiple', 'size', from_box.size, 'name', from_box.getAttribute('name'));
+        to_box.className = 'filtered';
+        var clear_all = quickElement('a', selector_chosen, gettext('Clear all'), 'href', 'javascript: (function() { SelectBox.move_all("' + field_id + '_to", "' + field_id + '_from");})()');
+        clear_all.className = 'selector-clearall';
+
+        from_box.setAttribute('name', from_box.getAttribute('name') + '_old');
+
+        // Set up the JavaScript event handlers for the select box filter interface
+        addEvent(filter_input, 'keyup', function(e) { SelectFilter.filter_key_up(e, field_id); });
+        addEvent(filter_input, 'keydown', function(e) { SelectFilter.filter_key_down(e, field_id); });
+        addEvent(from_box, 'dblclick', function() { SelectBox.move(field_id + '_from', field_id + '_to'); });
+        addEvent(to_box, 'dblclick', function() { SelectBox.move(field_id + '_to', field_id + '_from'); });
+        addEvent(findForm(from_box), 'submit', function() { SelectBox.select_all(field_id + '_to'); });
+        SelectBox.init(field_id + '_from');
+        SelectBox.init(field_id + '_to');
+        // Move selected from_box options to to_box
+        SelectBox.move(field_id + '_from', field_id + '_to');
+    },
+    filter_key_up: function(event, field_id) {
+        from = document.getElementById(field_id + '_from');
+        // don't submit form if user pressed Enter
+        if ((event.which && event.which == 13) || (event.keyCode && event.keyCode == 13)) {
+            from.selectedIndex = 0;
+            SelectBox.move(field_id + '_from', field_id + '_to');
+            from.selectedIndex = 0;
+            return false;
+        }
+        var temp = from.selectedIndex;
+        SelectBox.filter(field_id + '_from', document.getElementById(field_id + '_input').value);
+        from.selectedIndex = temp;
+        return true;
+    },
+    filter_key_down: function(event, field_id) {
+        from = document.getElementById(field_id + '_from');
+        // right arrow -- move across
+        if ((event.which && event.which == 39) || (event.keyCode && event.keyCode == 39)) {
+            var old_index = from.selectedIndex;
+            SelectBox.move(field_id + '_from', field_id + '_to');
+            from.selectedIndex = (old_index == from.length) ? from.length - 1 : old_index;
+            return false;
+        }
+        // down arrow -- wrap around
+        if ((event.which && event.which == 40) || (event.keyCode && event.keyCode == 40)) {
+            from.selectedIndex = (from.length == from.selectedIndex + 1) ? 0 : from.selectedIndex + 1;
+        }
+        // up arrow -- wrap around
+        if ((event.which && event.which == 38) || (event.keyCode && event.keyCode == 38)) {
+            from.selectedIndex = (from.selectedIndex == 0) ? from.length - 1 : from.selectedIndex - 1;
+        }
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/actions.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,139 @@
+(function($) {
+	$.fn.actions = function(opts) {
+		var options = $.extend({}, $.fn.actions.defaults, opts);
+		var actionCheckboxes = $(this);
+		var list_editable_changed = false;
+		checker = function(checked) {
+			if (checked) {
+				showQuestion();
+			} else {
+				reset();
+			}
+			$(actionCheckboxes).attr("checked", checked)
+				.parent().parent().toggleClass(options.selectedClass, checked);
+		}
+		updateCounter = function() {
+			var sel = $(actionCheckboxes).filter(":checked").length;
+			$(options.counterContainer).html(interpolate(
+			ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), {
+				sel: sel,
+				cnt: _actions_icnt
+			}, true));
+			$(options.allToggle).attr("checked", function() {
+				if (sel == actionCheckboxes.length) {
+					value = true;
+					showQuestion();
+				} else {
+					value = false;
+					clearAcross();
+				}
+				return value;
+			});
+		}
+		showQuestion = function() {
+			$(options.acrossClears).hide();
+			$(options.acrossQuestions).show();
+			$(options.allContainer).hide();
+		}
+		showClear = function() {
+			$(options.acrossClears).show();
+			$(options.acrossQuestions).hide();
+			$(options.actionContainer).toggleClass(options.selectedClass);
+			$(options.allContainer).show();
+			$(options.counterContainer).hide();
+		}
+		reset = function() {
+			$(options.acrossClears).hide();
+			$(options.acrossQuestions).hide();
+			$(options.allContainer).hide();
+			$(options.counterContainer).show();
+		}
+		clearAcross = function() {
+			reset();
+			$(options.acrossInput).val(0);
+			$(options.actionContainer).removeClass(options.selectedClass);
+		}
+		// Show counter by default
+		$(options.counterContainer).show();
+		// Check state of checkboxes and reinit state if needed
+		$(this).filter(":checked").each(function(i) {
+			$(this).parent().parent().toggleClass(options.selectedClass);
+			updateCounter();
+			if ($(options.acrossInput).val() == 1) {
+				showClear();
+			}
+		});
+		$(options.allToggle).show().click(function() {
+			checker($(this).attr("checked"));
+			updateCounter();
+		});
+		$("div.actions span.question a").click(function(event) {
+			event.preventDefault();
+			$(options.acrossInput).val(1);
+			showClear();
+		});
+		$("div.actions span.clear a").click(function(event) {
+			event.preventDefault();
+			$(options.allToggle).attr("checked", false);
+			clearAcross();
+			checker(0);
+			updateCounter();
+		});
+		lastChecked = null;
+		$(actionCheckboxes).click(function(event) {
+			if (!event) { var event = window.event; }
+			var target = event.target ? event.target : event.srcElement;
+			if (lastChecked && $.data(lastChecked) != $.data(target) && event.shiftKey == true) {
+				var inrange = false;
+				$(lastChecked).attr("checked", target.checked)
+					.parent().parent().toggleClass(options.selectedClass, target.checked);
+				$(actionCheckboxes).each(function() {
+					if ($.data(this) == $.data(lastChecked) || $.data(this) == $.data(target)) {
+						inrange = (inrange) ? false : true;
+					}
+					if (inrange) {
+						$(this).attr("checked", target.checked)
+							.parent().parent().toggleClass(options.selectedClass, target.checked);
+					}
+				});
+			}
+			$(target).parent().parent().toggleClass(options.selectedClass, target.checked);
+			lastChecked = target;
+			updateCounter();
+		});
+		$('form#changelist-form table#result_list tr').find('td:gt(0) :input').change(function() {
+			list_editable_changed = true;
+		});
+		$('form#changelist-form button[name="index"]').click(function(event) {
+			if (list_editable_changed) {
+				return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."));
+			}
+		});
+		$('form#changelist-form input[name="_save"]').click(function(event) {
+			var action_changed = false;
+			$('div.actions select option:selected').each(function() {
+				if ($(this).val()) {
+					action_changed = true;
+				}
+			});
+			if (action_changed) {
+				if (list_editable_changed) {
+					return confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action."));
+				} else {
+					return confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."));
+				}
+			}
+		});
+	}
+	/* Setup plugin defaults */
+	$.fn.actions.defaults = {
+		actionContainer: "div.actions",
+		counterContainer: "span.action-counter",
+		allContainer: "div.actions span.all",
+		acrossInput: "div.actions input.select-across",
+		acrossQuestions: "div.actions span.question",
+		acrossClears: "div.actions span.clear",
+		allToggle: "#action-toggle",
+		selectedClass: "selected"
+	}
+})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/actions.min.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,7 @@
+(function(a){a.fn.actions=function(h){var b=a.extend({},a.fn.actions.defaults,h),e=a(this),f=false;checker=function(c){c?showQuestion():reset();a(e).attr("checked",c).parent().parent().toggleClass(b.selectedClass,c)};updateCounter=function(){var c=a(e).filter(":checked").length;a(b.counterContainer).html(interpolate(ngettext("%(sel)s of %(cnt)s selected","%(sel)s of %(cnt)s selected",c),{sel:c,cnt:_actions_icnt},true));a(b.allToggle).attr("checked",function(){if(c==e.length){value=true;showQuestion()}else{value=
+false;clearAcross()}return value})};showQuestion=function(){a(b.acrossClears).hide();a(b.acrossQuestions).show();a(b.allContainer).hide()};showClear=function(){a(b.acrossClears).show();a(b.acrossQuestions).hide();a(b.actionContainer).toggleClass(b.selectedClass);a(b.allContainer).show();a(b.counterContainer).hide()};reset=function(){a(b.acrossClears).hide();a(b.acrossQuestions).hide();a(b.allContainer).hide();a(b.counterContainer).show()};clearAcross=function(){reset();a(b.acrossInput).val(0);a(b.actionContainer).removeClass(b.selectedClass)};
+a(b.counterContainer).show();a(this).filter(":checked").each(function(){a(this).parent().parent().toggleClass(b.selectedClass);updateCounter();a(b.acrossInput).val()==1&&showClear()});a(b.allToggle).show().click(function(){checker(a(this).attr("checked"));updateCounter()});a("div.actions span.question a").click(function(c){c.preventDefault();a(b.acrossInput).val(1);showClear()});a("div.actions span.clear a").click(function(c){c.preventDefault();a(b.allToggle).attr("checked",false);clearAcross();checker(0);
+updateCounter()});lastChecked=null;a(e).click(function(c){if(!c)c=window.event;var d=c.target?c.target:c.srcElement;if(lastChecked&&a.data(lastChecked)!=a.data(d)&&c.shiftKey==true){var g=false;a(lastChecked).attr("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked);a(e).each(function(){if(a.data(this)==a.data(lastChecked)||a.data(this)==a.data(d))g=g?false:true;g&&a(this).attr("checked",d.checked).parent().parent().toggleClass(b.selectedClass,d.checked)})}a(d).parent().parent().toggleClass(b.selectedClass,
+d.checked);lastChecked=d;updateCounter()});a("form#changelist-form table#result_list tr").find("td:gt(0) :input").change(function(){f=true});a('form#changelist-form button[name="index"]').click(function(){if(f)return confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost."))});a('form#changelist-form input[name="_save"]').click(function(){var c=false;a("div.actions select option:selected").each(function(){if(a(this).val())c=
+true});if(c)return f?confirm(gettext("You have selected an action, but you haven't saved your changes to individual fields yet. Please click OK to save. You'll need to re-run the action.")):confirm(gettext("You have selected an action, and you haven't made any changes on individual fields. You're probably looking for the Go button rather than the Save button."))})};a.fn.actions.defaults={actionContainer:"div.actions",counterContainer:"span.action-counter",allContainer:"div.actions span.all",acrossInput:"div.actions input.select-across",
+acrossQuestions:"div.actions span.question",acrossClears:"div.actions span.clear",allToggle:"#action-toggle",selectedClass:"selected"}})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/admin/DateTimeShortcuts.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,274 @@
+// Inserts shortcut buttons after all of the following:
+//     <input type="text" class="vDateField">
+//     <input type="text" class="vTimeField">
+
+var DateTimeShortcuts = {
+    calendars: [],
+    calendarInputs: [],
+    clockInputs: [],
+    calendarDivName1: 'calendarbox', // name of calendar <div> that gets toggled
+    calendarDivName2: 'calendarin',  // name of <div> that contains calendar
+    calendarLinkName: 'calendarlink',// name of the link that is used to toggle
+    clockDivName: 'clockbox',        // name of clock <div> that gets toggled
+    clockLinkName: 'clocklink',      // name of the link that is used to toggle
+    shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts
+    admin_media_prefix: '',
+    init: function() {
+        // Get admin_media_prefix by grabbing it off the window object. It's
+        // set in the admin/base.html template, so if it's not there, someone's
+        // overridden the template. In that case, we'll set a clearly-invalid
+        // value in the hopes that someone will examine HTTP requests and see it.
+        if (window.__admin_media_prefix__ != undefined) {
+            DateTimeShortcuts.admin_media_prefix = window.__admin_media_prefix__;
+        } else {
+            DateTimeShortcuts.admin_media_prefix = '/missing-admin-media-prefix/';
+        }
+
+        var inputs = document.getElementsByTagName('input');
+        for (i=0; i<inputs.length; i++) {
+            var inp = inputs[i];
+            if (inp.getAttribute('type') == 'text' && inp.className.match(/vTimeField/)) {
+                DateTimeShortcuts.addClock(inp);
+            }
+            else if (inp.getAttribute('type') == 'text' && inp.className.match(/vDateField/)) {
+                DateTimeShortcuts.addCalendar(inp);
+            }
+        }
+    },
+    // Add clock widget to a given field
+    addClock: function(inp) {
+        var num = DateTimeShortcuts.clockInputs.length;
+        DateTimeShortcuts.clockInputs[num] = inp;
+
+        // Shortcut links (clock icon and "Now" link)
+        var shortcuts_span = document.createElement('span');
+        shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
+        inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
+        var now_link = document.createElement('a');
+        now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + get_format('TIME_INPUT_FORMATS')[0] + "'));");
+        now_link.appendChild(document.createTextNode(gettext('Now')));
+        var clock_link = document.createElement('a');
+        clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');');
+        clock_link.id = DateTimeShortcuts.clockLinkName + num;
+        quickElement('img', clock_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/admin/icon_clock.gif', 'alt', gettext('Clock'));
+        shortcuts_span.appendChild(document.createTextNode('\240'));
+        shortcuts_span.appendChild(now_link);
+        shortcuts_span.appendChild(document.createTextNode('\240|\240'));
+        shortcuts_span.appendChild(clock_link);
+
+        // Create clock link div
+        //
+        // Markup looks like:
+        // <div id="clockbox1" class="clockbox module">
+        //     <h2>Choose a time</h2>
+        //     <ul class="timelist">
+        //         <li><a href="#">Now</a></li>
+        //         <li><a href="#">Midnight</a></li>
+        //         <li><a href="#">6 a.m.</a></li>
+        //         <li><a href="#">Noon</a></li>
+        //     </ul>
+        //     <p class="calendar-cancel"><a href="#">Cancel</a></p>
+        // </div>
+
+        var clock_box = document.createElement('div');
+        clock_box.style.display = 'none';
+        clock_box.style.position = 'absolute';
+        clock_box.className = 'clockbox module';
+        clock_box.setAttribute('id', DateTimeShortcuts.clockDivName + num);
+        document.body.appendChild(clock_box);
+        addEvent(clock_box, 'click', DateTimeShortcuts.cancelEventPropagation);
+
+        quickElement('h2', clock_box, gettext('Choose a time'));
+        time_list = quickElement('ul', clock_box, '');
+        time_list.className = 'timelist';
+        time_format = get_format('TIME_INPUT_FORMATS')[0];
+        quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + time_format + "'));");
+        quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,0,0,0,0).strftime('" + time_format + "'));");
+        quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,6,0,0,0).strftime('" + time_format + "'));");
+        quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,12,0,0,0).strftime('" + time_format + "'));");
+
+        cancel_p = quickElement('p', clock_box, '');
+        cancel_p.className = 'calendar-cancel';
+        quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissClock(' + num + ');');
+    },
+    openClock: function(num) {
+        var clock_box = document.getElementById(DateTimeShortcuts.clockDivName+num)
+        var clock_link = document.getElementById(DateTimeShortcuts.clockLinkName+num)
+    
+        // Recalculate the clockbox position
+        // is it left-to-right or right-to-left layout ?
+        if (getStyle(document.body,'direction')!='rtl') {
+            clock_box.style.left = findPosX(clock_link) + 17 + 'px';
+        }
+        else {
+            // since style's width is in em, it'd be tough to calculate
+            // px value of it. let's use an estimated px for now
+            // TODO: IE returns wrong value for findPosX when in rtl mode
+            //       (it returns as it was left aligned), needs to be fixed.
+            clock_box.style.left = findPosX(clock_link) - 110 + 'px';
+        }
+        clock_box.style.top = findPosY(clock_link) - 30 + 'px';
+    
+        // Show the clock box
+        clock_box.style.display = 'block';
+        addEvent(window.document, 'click', function() { DateTimeShortcuts.dismissClock(num); return true; });
+    },
+    dismissClock: function(num) {
+       document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none';
+       window.document.onclick = null;
+    },
+    handleClockQuicklink: function(num, val) {
+       DateTimeShortcuts.clockInputs[num].value = val;
+       DateTimeShortcuts.clockInputs[num].focus();
+       DateTimeShortcuts.dismissClock(num);
+    },
+    // Add calendar widget to a given field.
+    addCalendar: function(inp) {
+        var num = DateTimeShortcuts.calendars.length;
+
+        DateTimeShortcuts.calendarInputs[num] = inp;
+
+        // Shortcut links (calendar icon and "Today" link)
+        var shortcuts_span = document.createElement('span');
+        shortcuts_span.className = DateTimeShortcuts.shortCutsClass;
+        inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling);
+        var today_link = document.createElement('a');
+        today_link.setAttribute('href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);');
+        today_link.appendChild(document.createTextNode(gettext('Today')));
+        var cal_link = document.createElement('a');
+        cal_link.setAttribute('href', 'javascript:DateTimeShortcuts.openCalendar(' + num + ');');
+        cal_link.id = DateTimeShortcuts.calendarLinkName + num;
+        quickElement('img', cal_link, '', 'src', DateTimeShortcuts.admin_media_prefix + 'img/admin/icon_calendar.gif', 'alt', gettext('Calendar'));
+        shortcuts_span.appendChild(document.createTextNode('\240'));
+        shortcuts_span.appendChild(today_link);
+        shortcuts_span.appendChild(document.createTextNode('\240|\240'));
+        shortcuts_span.appendChild(cal_link);
+
+        // Create calendarbox div.
+        //
+        // Markup looks like:
+        //
+        // <div id="calendarbox3" class="calendarbox module">
+        //     <h2>
+        //           <a href="#" class="link-previous">&lsaquo;</a>
+        //           <a href="#" class="link-next">&rsaquo;</a> February 2003
+        //     </h2>
+        //     <div class="calendar" id="calendarin3">
+        //         <!-- (cal) -->
+        //     </div>
+        //     <div class="calendar-shortcuts">
+        //          <a href="#">Yesterday</a> | <a href="#">Today</a> | <a href="#">Tomorrow</a>
+        //     </div>
+        //     <p class="calendar-cancel"><a href="#">Cancel</a></p>
+        // </div>
+        var cal_box = document.createElement('div');
+        cal_box.style.display = 'none';
+        cal_box.style.position = 'absolute';
+        cal_box.className = 'calendarbox module';
+        cal_box.setAttribute('id', DateTimeShortcuts.calendarDivName1 + num);
+        document.body.appendChild(cal_box);
+        addEvent(cal_box, 'click', DateTimeShortcuts.cancelEventPropagation);
+
+        // next-prev links
+        var cal_nav = quickElement('div', cal_box, '');
+        var cal_nav_prev = quickElement('a', cal_nav, '<', 'href', 'javascript:DateTimeShortcuts.drawPrev('+num+');');
+        cal_nav_prev.className = 'calendarnav-previous';
+        var cal_nav_next = quickElement('a', cal_nav, '>', 'href', 'javascript:DateTimeShortcuts.drawNext('+num+');');
+        cal_nav_next.className = 'calendarnav-next';
+
+        // main box
+        var cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num);
+        cal_main.className = 'calendar';
+        DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num));
+        DateTimeShortcuts.calendars[num].drawCurrent();
+
+        // calendar shortcuts
+        var shortcuts = quickElement('div', cal_box, '');
+        shortcuts.className = 'calendar-shortcuts';
+        quickElement('a', shortcuts, gettext('Yesterday'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', -1);');
+        shortcuts.appendChild(document.createTextNode('\240|\240'));
+        quickElement('a', shortcuts, gettext('Today'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', 0);');
+        shortcuts.appendChild(document.createTextNode('\240|\240'));
+        quickElement('a', shortcuts, gettext('Tomorrow'), 'href', 'javascript:DateTimeShortcuts.handleCalendarQuickLink(' + num + ', +1);');
+
+        // cancel bar
+        var cancel_p = quickElement('p', cal_box, '');
+        cancel_p.className = 'calendar-cancel';
+        quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissCalendar(' + num + ');');
+    },
+    openCalendar: function(num) {
+        var cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1+num)
+        var cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName+num)
+        var inp = DateTimeShortcuts.calendarInputs[num];
+
+        // Determine if the current value in the input has a valid date.
+        // If so, draw the calendar with that date's year and month.
+        if (inp.value) {
+            var date_parts = inp.value.split('-');
+            var year = date_parts[0];
+            var month = parseFloat(date_parts[1]);
+            if (year.match(/\d\d\d\d/) && month >= 1 && month <= 12) {
+                DateTimeShortcuts.calendars[num].drawDate(month, year);
+            }
+        }
+
+        // Recalculate the clockbox position
+        // is it left-to-right or right-to-left layout ?
+        if (getStyle(document.body,'direction')!='rtl') {
+            cal_box.style.left = findPosX(cal_link) + 17 + 'px';
+        }
+        else {
+            // since style's width is in em, it'd be tough to calculate
+            // px value of it. let's use an estimated px for now
+            // TODO: IE returns wrong value for findPosX when in rtl mode
+            //       (it returns as it was left aligned), needs to be fixed.
+            cal_box.style.left = findPosX(cal_link) - 180 + 'px';
+        }
+        cal_box.style.top = findPosY(cal_link) - 75 + 'px';
+    
+        cal_box.style.display = 'block';
+        addEvent(window.document, 'click', function() { DateTimeShortcuts.dismissCalendar(num); return true; });
+    },
+    dismissCalendar: function(num) {
+        document.getElementById(DateTimeShortcuts.calendarDivName1+num).style.display = 'none';
+        window.document.onclick = null;
+    },
+    drawPrev: function(num) {
+        DateTimeShortcuts.calendars[num].drawPreviousMonth();
+    },
+    drawNext: function(num) {
+        DateTimeShortcuts.calendars[num].drawNextMonth();
+    },
+    handleCalendarCallback: function(num) {
+        format = get_format('DATE_INPUT_FORMATS')[0];
+        // the format needs to be escaped a little
+        format = format.replace('\\', '\\\\');
+        format = format.replace('\r', '\\r');
+        format = format.replace('\n', '\\n');
+        format = format.replace('\t', '\\t');
+        format = format.replace("'", "\\'");
+        return ["function(y, m, d) { DateTimeShortcuts.calendarInputs[",
+               num,
+               "].value = new Date(y, m-1, d).strftime('",
+               format,
+               "');DateTimeShortcuts.calendarInputs[",
+               num,
+               "].focus();document.getElementById(DateTimeShortcuts.calendarDivName1+",
+               num,
+               ").style.display='none';}"].join('');
+    },
+    handleCalendarQuickLink: function(num, offset) {
+       var d = new Date();
+       d.setDate(d.getDate() + offset)
+       DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]);
+       DateTimeShortcuts.calendarInputs[num].focus();
+       DateTimeShortcuts.dismissCalendar(num);
+    },
+    cancelEventPropagation: function(e) {
+        if (!e) e = window.event;
+        e.cancelBubble = true;
+        if (e.stopPropagation) e.stopPropagation();
+    }
+}
+
+addEvent(window, 'load', DateTimeShortcuts.init);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/admin/RelatedObjectLookups.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,96 @@
+// Handles related-objects functionality: lookup link for raw_id_fields
+// and Add Another links.
+
+function html_unescape(text) {
+    // Unescape a string that was escaped using django.utils.html.escape.
+    text = text.replace(/&lt;/g, '<');
+    text = text.replace(/&gt;/g, '>');
+    text = text.replace(/&quot;/g, '"');
+    text = text.replace(/&#39;/g, "'");
+    text = text.replace(/&amp;/g, '&');
+    return text;
+}
+
+// IE doesn't accept periods or dashes in the window name, but the element IDs
+// we use to generate popup window names may contain them, therefore we map them
+// to allowed characters in a reversible way so that we can locate the correct 
+// element when the popup window is dismissed.
+function id_to_windowname(text) {
+    text = text.replace(/\./g, '__dot__');
+    text = text.replace(/\-/g, '__dash__');
+    return text;
+}
+
+function windowname_to_id(text) {
+    text = text.replace(/__dot__/g, '.');
+    text = text.replace(/__dash__/g, '-');
+    return text;
+}
+
+function showRelatedObjectLookupPopup(triggeringLink) {
+    var name = triggeringLink.id.replace(/^lookup_/, '');
+    name = id_to_windowname(name);
+    var href;
+    if (triggeringLink.href.search(/\?/) >= 0) {
+        href = triggeringLink.href + '&pop=1';
+    } else {
+        href = triggeringLink.href + '?pop=1';
+    }
+    var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
+    win.focus();
+    return false;
+}
+
+function dismissRelatedLookupPopup(win, chosenId) {
+    var name = windowname_to_id(win.name);
+    var elem = document.getElementById(name);
+    if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
+        elem.value += ',' + chosenId;
+    } else {
+        document.getElementById(name).value = chosenId;
+    }
+    win.close();
+}
+
+function showAddAnotherPopup(triggeringLink) {
+    var name = triggeringLink.id.replace(/^add_/, '');
+    name = id_to_windowname(name);
+    href = triggeringLink.href
+    if (href.indexOf('?') == -1) {
+        href += '?_popup=1';
+    } else {
+        href  += '&_popup=1';
+    }
+    var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
+    win.focus();
+    return false;
+}
+
+function dismissAddAnotherPopup(win, newId, newRepr) {
+    // newId and newRepr are expected to have previously been escaped by
+    // django.utils.html.escape.
+    newId = html_unescape(newId);
+    newRepr = html_unescape(newRepr);
+    var name = windowname_to_id(win.name);
+    var elem = document.getElementById(name);
+    if (elem) {
+        if (elem.nodeName == 'SELECT') {
+            var o = new Option(newRepr, newId);
+            elem.options[elem.options.length] = o;
+            o.selected = true;
+        } else if (elem.nodeName == 'INPUT') {
+            if (elem.className.indexOf('vManyToManyRawIdAdminField') != -1 && elem.value) {
+                elem.value += ',' + newId;
+            } else {
+                elem.value = newId;
+            }
+        }
+    } else {
+        var toId = name + "_to";
+        elem = document.getElementById(toId);
+        var o = new Option(newRepr, newId);
+        SelectBox.add_to_cache(toId, o);
+        SelectBox.redisplay(toId);
+    }
+    win.close();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/admin/ordering.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,137 @@
+addEvent(window, 'load', reorder_init);
+
+var lis;
+var top = 0;
+var left = 0;
+var height = 30;
+
+function reorder_init() {
+    lis = document.getElementsBySelector('ul#orderthese li');
+    var input = document.getElementsBySelector('input[name=order_]')[0];
+    setOrder(input.value.split(','));
+    input.disabled = true;
+    draw();
+    // Now initialise the dragging behaviour
+    var limit = (lis.length - 1) * height;
+    for (var i = 0; i < lis.length; i++) {
+        var li = lis[i];
+        var img = document.getElementById('handle'+li.id);
+        li.style.zIndex = 1;
+        Drag.init(img, li, left + 10, left + 10, top + 10, top + 10 + limit);
+        li.onDragStart = startDrag;
+        li.onDragEnd = endDrag;
+        img.style.cursor = 'move';
+    }
+}
+
+function submitOrderForm() {
+    var inputOrder = document.getElementsBySelector('input[name=order_]')[0];
+    inputOrder.value = getOrder();
+    inputOrder.disabled=false;
+}
+
+function startDrag() {
+    this.style.zIndex = '10';
+    this.className = 'dragging';
+}
+
+function endDrag(x, y) {
+    this.style.zIndex = '1';
+    this.className = '';
+    // Work out how far along it has been dropped, using x co-ordinate
+    var oldIndex = this.index;
+    var newIndex = Math.round((y - 10 - top) / height);
+    // 'Snap' to the correct position
+    this.style.top = (10 + top + newIndex * height) + 'px';
+    this.index = newIndex;
+    moveItem(oldIndex, newIndex);
+}
+
+function moveItem(oldIndex, newIndex) {
+    // Swaps two items, adjusts the index and left co-ord for all others
+    if (oldIndex == newIndex) {
+        return; // Nothing to swap;
+    }
+    var direction, lo, hi;
+    if (newIndex > oldIndex) {
+        lo = oldIndex;
+        hi = newIndex;
+        direction = -1;
+    } else {
+        direction = 1;
+        hi = oldIndex;
+        lo = newIndex;
+    }
+    var lis2 = new Array(); // We will build the new order in this array
+    for (var i = 0; i < lis.length; i++) {
+        if (i < lo || i > hi) {
+            // Position of items not between the indexes is unaffected
+            lis2[i] = lis[i];
+            continue;
+        } else if (i == newIndex) {
+            lis2[i] = lis[oldIndex];
+            continue;
+        } else {
+            // Item is between the two indexes - move it along 1
+            lis2[i] = lis[i - direction];
+        }
+    }
+    // Re-index everything
+    reIndex(lis2);
+    lis = lis2;
+    draw();
+//    document.getElementById('hiddenOrder').value = getOrder();
+    document.getElementsBySelector('input[name=order_]')[0].value = getOrder();
+}
+
+function reIndex(lis) {
+    for (var i = 0; i < lis.length; i++) {
+        lis[i].index = i;
+    }
+}
+
+function draw() {
+    for (var i = 0; i < lis.length; i++) {
+        var li = lis[i];
+        li.index = i;
+        li.style.position = 'absolute';
+        li.style.left = (10 + left) + 'px';
+        li.style.top = (10 + top + (i * height)) + 'px';
+    }
+}
+
+function getOrder() {
+    var order = new Array(lis.length);
+    for (var i = 0; i < lis.length; i++) {
+        order[i] = lis[i].id.substring(1, 100);
+    }
+    return order.join(',');
+}
+
+function setOrder(id_list) {
+    /* Set the current order to match the lsit of IDs */
+    var temp_lis = new Array();
+    for (var i = 0; i < id_list.length; i++) {
+        var id = 'p' + id_list[i];
+        temp_lis[temp_lis.length] = document.getElementById(id);
+    }
+    reIndex(temp_lis);
+    lis = temp_lis;
+    draw();
+}
+
+function addEvent(elm, evType, fn, useCapture)
+// addEvent and removeEvent
+// cross-browser event handling for IE5+,  NS6 and Mozilla
+// By Scott Andrew
+{
+  if (elm.addEventListener){
+    elm.addEventListener(evType, fn, useCapture);
+    return true;
+  } else if (elm.attachEvent){
+    var r = elm.attachEvent("on"+evType, fn);
+    return r;
+  } else {
+    elm['on'+evType] = fn;
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/calendar.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,156 @@
+/*
+calendar.js - Calendar functions by Adrian Holovaty
+*/
+
+function removeChildren(a) { // "a" is reference to an object
+    while (a.hasChildNodes()) a.removeChild(a.lastChild);
+}
+
+// quickElement(tagType, parentReference, textInChildNode, [, attribute, attributeValue ...]);
+function quickElement() {
+    var obj = document.createElement(arguments[0]);
+    if (arguments[2] != '' && arguments[2] != null) {
+        var textNode = document.createTextNode(arguments[2]);
+        obj.appendChild(textNode);
+    }
+    var len = arguments.length;
+    for (var i = 3; i < len; i += 2) {
+        obj.setAttribute(arguments[i], arguments[i+1]);
+    }
+    arguments[1].appendChild(obj);
+    return obj;
+}
+
+// CalendarNamespace -- Provides a collection of HTML calendar-related helper functions
+var CalendarNamespace = {
+    monthsOfYear: gettext('January February March April May June July August September October November December').split(' '),
+    daysOfWeek: gettext('S M T W T F S').split(' '),
+    firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')),
+    isLeapYear: function(year) {
+        return (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0));
+    },
+    getDaysInMonth: function(month,year) {
+        var days;
+        if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) {
+            days = 31;
+        }
+        else if (month==4 || month==6 || month==9 || month==11) {
+            days = 30;
+        }
+        else if (month==2 && CalendarNamespace.isLeapYear(year)) {
+            days = 29;
+        }
+        else {
+            days = 28;
+        }
+        return days;
+    },
+    draw: function(month, year, div_id, callback) { // month = 1-12, year = 1-9999
+        var today = new Date();
+        var todayDay = today.getDate();
+        var todayMonth = today.getMonth()+1;
+        var todayYear = today.getFullYear();
+        var todayClass = '';
+
+        month = parseInt(month);
+        year = parseInt(year);
+        var calDiv = document.getElementById(div_id);
+        removeChildren(calDiv);
+        var calTable = document.createElement('table');
+        quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month-1] + ' ' + year);
+        var tableBody = quickElement('tbody', calTable);
+
+        // Draw days-of-week header
+        var tableRow = quickElement('tr', tableBody);
+        for (var i = 0; i < 7; i++) {
+            quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]);
+        }
+
+        var startingPos = new Date(year, month-1, 1 - CalendarNamespace.firstDayOfWeek).getDay();
+        var days = CalendarNamespace.getDaysInMonth(month, year);
+
+        // Draw blanks before first of month
+        tableRow = quickElement('tr', tableBody);
+        for (var i = 0; i < startingPos; i++) {
+            var _cell = quickElement('td', tableRow, ' ');
+            _cell.style.backgroundColor = '#f3f3f3';
+        }
+
+        // Draw days of month
+        var currentDay = 1;
+        for (var i = startingPos; currentDay <= days; i++) {
+            if (i%7 == 0 && currentDay != 1) {
+                tableRow = quickElement('tr', tableBody);
+            }
+            if ((currentDay==todayDay) && (month==todayMonth) && (year==todayYear)) {
+                todayClass='today';
+            } else {
+                todayClass='';
+            }
+            var cell = quickElement('td', tableRow, '', 'class', todayClass);
+
+            quickElement('a', cell, currentDay, 'href', 'javascript:void(' + callback + '('+year+','+month+','+currentDay+'));');
+            currentDay++;
+        }
+
+        // Draw blanks after end of month (optional, but makes for valid code)
+        while (tableRow.childNodes.length < 7) {
+            var _cell = quickElement('td', tableRow, ' ');
+            _cell.style.backgroundColor = '#f3f3f3';
+        }
+
+        calDiv.appendChild(calTable);
+    }
+}
+
+// Calendar -- A calendar instance
+function Calendar(div_id, callback) {
+    // div_id (string) is the ID of the element in which the calendar will
+    //     be displayed
+    // callback (string) is the name of a JavaScript function that will be
+    //     called with the parameters (year, month, day) when a day in the
+    //     calendar is clicked
+    this.div_id = div_id;
+    this.callback = callback;
+    this.today = new Date();
+    this.currentMonth = this.today.getMonth() + 1;
+    this.currentYear = this.today.getFullYear();
+}
+Calendar.prototype = {
+    drawCurrent: function() {
+        CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback);
+    },
+    drawDate: function(month, year) {
+        this.currentMonth = month;
+        this.currentYear = year;
+        this.drawCurrent();
+    },
+    drawPreviousMonth: function() {
+        if (this.currentMonth == 1) {
+            this.currentMonth = 12;
+            this.currentYear--;
+        }
+        else {
+            this.currentMonth--;
+        }
+        this.drawCurrent();
+    },
+    drawNextMonth: function() {
+        if (this.currentMonth == 12) {
+            this.currentMonth = 1;
+            this.currentYear++;
+        }
+        else {
+            this.currentMonth++;
+        }
+        this.drawCurrent();
+    },
+    drawPreviousYear: function() {
+        this.currentYear--;
+        this.drawCurrent();
+    },
+    drawNextYear: function() {
+        this.currentYear++;
+        this.drawCurrent();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/collapse.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,27 @@
+(function($) {
+	$(document).ready(function() {
+		// Add anchor tag for Show/Hide link
+		$("fieldset.collapse").each(function(i, elem) {
+			// Don't hide if fields in this fieldset have errors
+			if ( $(elem).find("div.errors").length == 0 ) {
+				$(elem).addClass("collapsed");
+				$(elem).find("h2").first().append(' (<a id="fieldsetcollapser' +
+					i +'" class="collapse-toggle" href="#">' + gettext("Show") +
+					'</a>)');
+			}
+		});
+		// Add toggle to anchor tag
+		$("fieldset.collapse a.collapse-toggle").toggle(
+			function() { // Show
+				$(this).text(gettext("Hide"));
+				$(this).closest("fieldset").removeClass("collapsed");
+				return false;
+			},
+			function() { // Hide
+				$(this).text(gettext("Show"));
+				$(this).closest("fieldset").addClass("collapsed");
+				return false;
+			}
+		);
+	});
+})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/collapse.min.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,2 @@
+(function(a){a(document).ready(function(){a("fieldset.collapse").each(function(c,b){if(a(b).find("div.errors").length==0){a(b).addClass("collapsed");a(b).find("h2").first().append(' (<a id="fieldsetcollapser'+c+'" class="collapse-toggle" href="#">'+gettext("Show")+"</a>)")}});a("fieldset.collapse a.collapse-toggle").toggle(function(){a(this).text(gettext("Hide"));a(this).closest("fieldset").removeClass("collapsed");return false},function(){a(this).text(gettext("Show"));a(this).closest("fieldset").addClass("collapsed");
+return false})})})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/compress.py	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+import os
+import optparse
+import subprocess
+import sys
+
+here = os.path.dirname(__file__)
+
+def main():
+    usage = "usage: %prog [file1..fileN]"
+    description = """With no file paths given this script will automatically
+compress all jQuery-based files of the admin app. Requires the Google Closure
+Compiler library and Java version 6 or later."""
+    parser = optparse.OptionParser(usage, description=description)
+    parser.add_option("-c", dest="compiler", default="~/bin/compiler.jar",
+                      help="path to Closure Compiler jar file")
+    parser.add_option("-v", "--verbose",
+                      action="store_true", dest="verbose")
+    parser.add_option("-q", "--quiet",
+                      action="store_false", dest="verbose")
+    (options, args) = parser.parse_args()
+
+    compiler = os.path.expanduser(options.compiler)
+    if not os.path.exists(compiler):
+        sys.exit("Google Closure compiler jar file %s not found. Please use the -c option to specify the path." % compiler)
+
+    if not args:
+        if options.verbose:
+            sys.stdout.write("No filenames given; defaulting to admin scripts\n")
+        args = [os.path.join(here, f) for f in [
+            "actions.js", "collapse.js", "inlines.js", "prepopulate.js"]]
+
+    for arg in args:
+        if not arg.endswith(".js"):
+            arg = arg + ".js"
+        to_compress = os.path.expanduser(arg)
+        if os.path.exists(to_compress):
+            to_compress_min = "%s.min.js" % "".join(arg.rsplit(".js"))
+            cmd = "java -jar %s --js %s --js_output_file %s" % (compiler, to_compress, to_compress_min)
+            if options.verbose:
+                sys.stdout.write("Running: %s\n" % cmd)
+            subprocess.call(cmd.split())
+        else:
+            sys.stdout.write("File %s not found. Sure it exists?\n" % to_compress)
+
+if __name__ == '__main__':
+    main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/core.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,215 @@
+// Core javascript helper functions
+
+// basic browser identification & version
+var isOpera = (navigator.userAgent.indexOf("Opera")>=0) && parseFloat(navigator.appVersion);
+var isIE = ((document.all) && (!isOpera)) && parseFloat(navigator.appVersion.split("MSIE ")[1].split(";")[0]);
+
+// Cross-browser event handlers.
+function addEvent(obj, evType, fn) {
+    if (obj.addEventListener) {
+        obj.addEventListener(evType, fn, false);
+        return true;
+    } else if (obj.attachEvent) {
+        var r = obj.attachEvent("on" + evType, fn);
+        return r;
+    } else {
+        return false;
+    }
+}
+
+function removeEvent(obj, evType, fn) {
+    if (obj.removeEventListener) {
+        obj.removeEventListener(evType, fn, false);
+        return true;
+    } else if (obj.detachEvent) {
+        obj.detachEvent("on" + evType, fn);
+        return true;
+    } else {
+        return false;
+    }
+}
+
+// quickElement(tagType, parentReference, textInChildNode, [, attribute, attributeValue ...]);
+function quickElement() {
+    var obj = document.createElement(arguments[0]);
+    if (arguments[2] != '' && arguments[2] != null) {
+        var textNode = document.createTextNode(arguments[2]);
+        obj.appendChild(textNode);
+    }
+    var len = arguments.length;
+    for (var i = 3; i < len; i += 2) {
+        obj.setAttribute(arguments[i], arguments[i+1]);
+    }
+    arguments[1].appendChild(obj);
+    return obj;
+}
+
+// ----------------------------------------------------------------------------
+// Cross-browser xmlhttp object
+// from http://jibbering.com/2002/4/httprequest.html
+// ----------------------------------------------------------------------------
+var xmlhttp;
+/*@cc_on @*/
+/*@if (@_jscript_version >= 5)
+    try {
+        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
+    } catch (e) {
+        try {
+            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
+        } catch (E) {
+            xmlhttp = false;
+        }
+    }
+@else
+    xmlhttp = false;
+@end @*/
+if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
+  xmlhttp = new XMLHttpRequest();
+}
+
+// ----------------------------------------------------------------------------
+// Find-position functions by PPK
+// See http://www.quirksmode.org/js/findpos.html
+// ----------------------------------------------------------------------------
+function findPosX(obj) {
+    var curleft = 0;
+    if (obj.offsetParent) {
+        while (obj.offsetParent) {
+            curleft += obj.offsetLeft - ((isOpera) ? 0 : obj.scrollLeft);
+            obj = obj.offsetParent;
+        }
+        // IE offsetParent does not include the top-level 
+        if (isIE && obj.parentElement){
+            curleft += obj.offsetLeft - obj.scrollLeft;
+        }
+    } else if (obj.x) {
+        curleft += obj.x;
+    }
+    return curleft;
+}
+
+function findPosY(obj) {
+    var curtop = 0;
+    if (obj.offsetParent) {
+        while (obj.offsetParent) {
+            curtop += obj.offsetTop - ((isOpera) ? 0 : obj.scrollTop);
+            obj = obj.offsetParent;
+        }
+        // IE offsetParent does not include the top-level 
+        if (isIE && obj.parentElement){
+            curtop += obj.offsetTop - obj.scrollTop;
+        }
+    } else if (obj.y) {
+        curtop += obj.y;
+    }
+    return curtop;
+}
+
+//-----------------------------------------------------------------------------
+// Date object extensions
+// ----------------------------------------------------------------------------
+Date.prototype.getCorrectYear = function() {
+    // Date.getYear() is unreliable --
+    // see http://www.quirksmode.org/js/introdate.html#year
+    var y = this.getYear() % 100;
+    return (y < 38) ? y + 2000 : y + 1900;
+}
+
+Date.prototype.getTwelveHours = function() {
+    return (this.getHours() <= 12) ? this.getHours() : 24 - this.getHours();
+}
+
+Date.prototype.getTwoDigitMonth = function() {
+    return (this.getMonth() < 9) ? '0' + (this.getMonth()+1) : (this.getMonth()+1);
+}
+
+Date.prototype.getTwoDigitDate = function() {
+    return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate();
+}
+
+Date.prototype.getTwoDigitTwelveHour = function() {
+    return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours();
+}
+
+Date.prototype.getTwoDigitHour = function() {
+    return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours();
+}
+
+Date.prototype.getTwoDigitMinute = function() {
+    return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes();
+}
+
+Date.prototype.getTwoDigitSecond = function() {
+    return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds();
+}
+
+Date.prototype.getISODate = function() {
+    return this.getCorrectYear() + '-' + this.getTwoDigitMonth() + '-' + this.getTwoDigitDate();
+}
+
+Date.prototype.getHourMinute = function() {
+    return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute();
+}
+
+Date.prototype.getHourMinuteSecond = function() {
+    return this.getTwoDigitHour() + ':' + this.getTwoDigitMinute() + ':' + this.getTwoDigitSecond();
+}
+
+Date.prototype.strftime = function(format) {
+    var fields = {
+        c: this.toString(),
+        d: this.getTwoDigitDate(),
+        H: this.getTwoDigitHour(),
+        I: this.getTwoDigitTwelveHour(),
+        m: this.getTwoDigitMonth(),
+        M: this.getTwoDigitMinute(),
+        p: (this.getHours() >= 12) ? 'PM' : 'AM',
+        S: this.getTwoDigitSecond(),
+        w: '0' + this.getDay(),
+        x: this.toLocaleDateString(),
+        X: this.toLocaleTimeString(),
+        y: ('' + this.getFullYear()).substr(2, 4),
+        Y: '' + this.getFullYear(),
+        '%' : '%'
+    };
+    var result = '', i = 0;
+    while (i < format.length) {
+        if (format.charAt(i) === '%') {
+            result = result + fields[format.charAt(i + 1)];
+            ++i;
+        }
+        else {
+            result = result + format.charAt(i);
+        }
+        ++i;
+    }
+    return result;
+}
+
+// ----------------------------------------------------------------------------
+// String object extensions
+// ----------------------------------------------------------------------------
+String.prototype.pad_left = function(pad_length, pad_string) {
+    var new_string = this;
+    for (var i = 0; new_string.length < pad_length; i++) {
+        new_string = pad_string + new_string;
+    }
+    return new_string;
+}
+
+// ----------------------------------------------------------------------------
+// Get the computed style for and element
+// ----------------------------------------------------------------------------
+function getStyle(oElm, strCssRule){
+    var strValue = "";
+    if(document.defaultView && document.defaultView.getComputedStyle){
+        strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
+    }
+    else if(oElm.currentStyle){
+        strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
+            return p1.toUpperCase();
+        });
+        strValue = oElm.currentStyle[strCssRule];
+    }
+    return strValue;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/dateparse.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,233 @@
+/* 'Magic' date parsing, by Simon Willison (6th October 2003)
+   http://simon.incutio.com/archive/2003/10/06/betterDateInput
+   Adapted for 6newslawrence.com, 28th January 2004
+*/
+
+/* Finds the index of the first occurence of item in the array, or -1 if not found */
+if (typeof Array.prototype.indexOf == 'undefined') {
+    Array.prototype.indexOf = function(item) {
+        var len = this.length;
+        for (var i = 0; i < len; i++) {
+            if (this[i] == item) {
+                return i;
+            }
+        }
+        return -1;
+    };
+}
+/* Returns an array of items judged 'true' by the passed in test function */
+if (typeof Array.prototype.filter == 'undefined') {
+    Array.prototype.filter = function(test) {
+        var matches = [];
+        var len = this.length;
+        for (var i = 0; i < len; i++) {
+            if (test(this[i])) {
+                matches[matches.length] = this[i];
+            }
+        }
+        return matches;
+    };
+}
+
+var monthNames = gettext("January February March April May June July August September October November December").split(" ");
+var weekdayNames = gettext("Sunday Monday Tuesday Wednesday Thursday Friday Saturday").split(" ");
+
+/* Takes a string, returns the index of the month matching that string, throws
+   an error if 0 or more than 1 matches
+*/
+function parseMonth(month) {
+    var matches = monthNames.filter(function(item) { 
+        return new RegExp("^" + month, "i").test(item);
+    });
+    if (matches.length == 0) {
+        throw new Error("Invalid month string");
+    }
+    if (matches.length > 1) {
+        throw new Error("Ambiguous month");
+    }
+    return monthNames.indexOf(matches[0]);
+}
+/* Same as parseMonth but for days of the week */
+function parseWeekday(weekday) {
+    var matches = weekdayNames.filter(function(item) {
+        return new RegExp("^" + weekday, "i").test(item);
+    });
+    if (matches.length == 0) {
+        throw new Error("Invalid day string");
+    }
+    if (matches.length > 1) {
+        throw new Error("Ambiguous weekday");
+    }
+    return weekdayNames.indexOf(matches[0]);
+}
+
+/* Array of objects, each has 're', a regular expression and 'handler', a 
+   function for creating a date from something that matches the regular 
+   expression. Handlers may throw errors if string is unparseable. 
+*/
+var dateParsePatterns = [
+    // Today
+    {   re: /^tod/i,
+        handler: function() { 
+            return new Date();
+        } 
+    },
+    // Tomorrow
+    {   re: /^tom/i,
+        handler: function() {
+            var d = new Date(); 
+            d.setDate(d.getDate() + 1); 
+            return d;
+        }
+    },
+    // Yesterday
+    {   re: /^yes/i,
+        handler: function() {
+            var d = new Date();
+            d.setDate(d.getDate() - 1);
+            return d;
+        }
+    },
+    // 4th
+    {   re: /^(\d{1,2})(st|nd|rd|th)?$/i, 
+        handler: function(bits) {
+            var d = new Date();
+            d.setDate(parseInt(bits[1], 10));
+            return d;
+        }
+    },
+    // 4th Jan
+    {   re: /^(\d{1,2})(?:st|nd|rd|th)? (\w+)$/i, 
+        handler: function(bits) {
+            var d = new Date();
+            d.setDate(parseInt(bits[1], 10));
+            d.setMonth(parseMonth(bits[2]));
+            return d;
+        }
+    },
+    // 4th Jan 2003
+    {   re: /^(\d{1,2})(?:st|nd|rd|th)? (\w+),? (\d{4})$/i,
+        handler: function(bits) {
+            var d = new Date();
+            d.setDate(parseInt(bits[1], 10));
+            d.setMonth(parseMonth(bits[2]));
+            d.setYear(bits[3]);
+            return d;
+        }
+    },
+    // Jan 4th
+    {   re: /^(\w+) (\d{1,2})(?:st|nd|rd|th)?$/i, 
+        handler: function(bits) {
+            var d = new Date();
+            d.setDate(parseInt(bits[2], 10));
+            d.setMonth(parseMonth(bits[1]));
+            return d;
+        }
+    },
+    // Jan 4th 2003
+    {   re: /^(\w+) (\d{1,2})(?:st|nd|rd|th)?,? (\d{4})$/i,
+        handler: function(bits) {
+            var d = new Date();
+            d.setDate(parseInt(bits[2], 10));
+            d.setMonth(parseMonth(bits[1]));
+            d.setYear(bits[3]);
+            return d;
+        }
+    },
+    // next Tuesday - this is suspect due to weird meaning of "next"
+    {   re: /^next (\w+)$/i,
+        handler: function(bits) {
+            var d = new Date();
+            var day = d.getDay();
+            var newDay = parseWeekday(bits[1]);
+            var addDays = newDay - day;
+            if (newDay <= day) {
+                addDays += 7;
+            }
+            d.setDate(d.getDate() + addDays);
+            return d;
+        }
+    },
+    // last Tuesday
+    {   re: /^last (\w+)$/i,
+        handler: function(bits) {
+            throw new Error("Not yet implemented");
+        }
+    },
+    // mm/dd/yyyy (American style)
+    {   re: /(\d{1,2})\/(\d{1,2})\/(\d{4})/,
+        handler: function(bits) {
+            var d = new Date();
+            d.setYear(bits[3]);
+            d.setDate(parseInt(bits[2], 10));
+            d.setMonth(parseInt(bits[1], 10) - 1); // Because months indexed from 0
+            return d;
+        }
+    },
+    // yyyy-mm-dd (ISO style)
+    {   re: /(\d{4})-(\d{1,2})-(\d{1,2})/,
+        handler: function(bits) {
+            var d = new Date();
+            d.setYear(parseInt(bits[1]));
+            d.setMonth(parseInt(bits[2], 10) - 1);
+            d.setDate(parseInt(bits[3], 10));
+            return d;
+        }
+    },
+];
+
+function parseDateString(s) {
+    for (var i = 0; i < dateParsePatterns.length; i++) {
+        var re = dateParsePatterns[i].re;
+        var handler = dateParsePatterns[i].handler;
+        var bits = re.exec(s);
+        if (bits) {
+            return handler(bits);
+        }
+    }
+    throw new Error("Invalid date string");
+}
+
+function fmt00(x) {
+    // fmt00: Tags leading zero onto numbers 0 - 9.
+    // Particularly useful for displaying results from Date methods.
+    //
+    if (Math.abs(parseInt(x)) < 10){
+        x = "0"+ Math.abs(x);
+    }
+    return x;
+}
+
+function parseDateStringISO(s) {
+    try {
+        var d = parseDateString(s);
+        return d.getFullYear() + '-' + (fmt00(d.getMonth() + 1)) + '-' + fmt00(d.getDate())
+    }
+    catch (e) { return s; }
+}
+function magicDate(input) {
+    var messagespan = input.id + 'Msg';
+    try {
+        var d = parseDateString(input.value);
+        input.value = d.getFullYear() + '-' + (fmt00(d.getMonth() + 1)) + '-' + 
+            fmt00(d.getDate());
+        input.className = '';
+        // Human readable date
+        if (document.getElementById(messagespan)) {
+            document.getElementById(messagespan).firstChild.nodeValue = d.toDateString();
+            document.getElementById(messagespan).className = 'normal';
+        }
+    }
+    catch (e) {
+        input.className = 'error';
+        var message = e.message;
+        // Fix for IE6 bug
+        if (message.indexOf('is null or not an object') > -1) {
+            message = 'Invalid date string';
+        }
+        if (document.getElementById(messagespan)) {
+            document.getElementById(messagespan).firstChild.nodeValue = message;
+            document.getElementById(messagespan).className = 'error';
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/getElementsBySelector.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,167 @@
+/* document.getElementsBySelector(selector)
+   - returns an array of element objects from the current document
+     matching the CSS selector. Selectors can contain element names, 
+     class names and ids and can be nested. For example:
+     
+       elements = document.getElementsBySelect('div#main p a.external')
+     
+     Will return an array of all 'a' elements with 'external' in their 
+     class attribute that are contained inside 'p' elements that are 
+     contained inside the 'div' element which has id="main"
+
+   New in version 0.4: Support for CSS2 and CSS3 attribute selectors:
+   See http://www.w3.org/TR/css3-selectors/#attribute-selectors
+
+   Version 0.4 - Simon Willison, March 25th 2003
+   -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows
+   -- Opera 7 fails 
+*/
+
+function getAllChildren(e) {
+  // Returns all children of element. Workaround required for IE5/Windows. Ugh.
+  return e.all ? e.all : e.getElementsByTagName('*');
+}
+
+document.getElementsBySelector = function(selector) {
+  // Attempt to fail gracefully in lesser browsers
+  if (!document.getElementsByTagName) {
+    return new Array();
+  }
+  // Split selector in to tokens
+  var tokens = selector.split(' ');
+  var currentContext = new Array(document);
+  for (var i = 0; i < tokens.length; i++) {
+    token = tokens[i].replace(/^\s+/,'').replace(/\s+$/,'');;
+    if (token.indexOf('#') > -1) {
+      // Token is an ID selector
+      var bits = token.split('#');
+      var tagName = bits[0];
+      var id = bits[1];
+      var element = document.getElementById(id);
+      if (!element || (tagName && element.nodeName.toLowerCase() != tagName)) {
+        // ID not found or tag with that ID not found, return false.
+        return new Array();
+      }
+      // Set currentContext to contain just this element
+      currentContext = new Array(element);
+      continue; // Skip to next token
+    }
+    if (token.indexOf('.') > -1) {
+      // Token contains a class selector
+      var bits = token.split('.');
+      var tagName = bits[0];
+      var className = bits[1];
+      if (!tagName) {
+        tagName = '*';
+      }
+      // Get elements matching tag, filter them for class selector
+      var found = new Array;
+      var foundCount = 0;
+      for (var h = 0; h < currentContext.length; h++) {
+        var elements;
+        if (tagName == '*') {
+            elements = getAllChildren(currentContext[h]);
+        } else {
+            try {
+                elements = currentContext[h].getElementsByTagName(tagName);
+            }
+            catch(e) {
+                elements = [];
+            }
+        }
+        for (var j = 0; j < elements.length; j++) {
+          found[foundCount++] = elements[j];
+        }
+      }
+      currentContext = new Array;
+      var currentContextIndex = 0;
+      for (var k = 0; k < found.length; k++) {
+        if (found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b'))) {
+          currentContext[currentContextIndex++] = found[k];
+        }
+      }
+      continue; // Skip to next token
+    }
+    // Code to deal with attribute selectors
+    if (token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/)) {
+      var tagName = RegExp.$1;
+      var attrName = RegExp.$2;
+      var attrOperator = RegExp.$3;
+      var attrValue = RegExp.$4;
+      if (!tagName) {
+        tagName = '*';
+      }
+      // Grab all of the tagName elements within current context
+      var found = new Array;
+      var foundCount = 0;
+      for (var h = 0; h < currentContext.length; h++) {
+        var elements;
+        if (tagName == '*') {
+            elements = getAllChildren(currentContext[h]);
+        } else {
+            elements = currentContext[h].getElementsByTagName(tagName);
+        }
+        for (var j = 0; j < elements.length; j++) {
+          found[foundCount++] = elements[j];
+        }
+      }
+      currentContext = new Array;
+      var currentContextIndex = 0;
+      var checkFunction; // This function will be used to filter the elements
+      switch (attrOperator) {
+        case '=': // Equality
+          checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
+          break;
+        case '~': // Match one of space seperated words 
+          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
+          break;
+        case '|': // Match start with value followed by optional hyphen
+          checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
+          break;
+        case '^': // Match starts with value
+          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
+          break;
+        case '$': // Match ends with value - fails with "Warning" in Opera 7
+          checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
+          break;
+        case '*': // Match ends with value
+          checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
+          break;
+        default :
+          // Just test for existence of attribute
+          checkFunction = function(e) { return e.getAttribute(attrName); };
+      }
+      currentContext = new Array;
+      var currentContextIndex = 0;
+      for (var k = 0; k < found.length; k++) {
+        if (checkFunction(found[k])) {
+          currentContext[currentContextIndex++] = found[k];
+        }
+      }
+      // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue);
+      continue; // Skip to next token
+    }
+    // If we get here, token is JUST an element (not a class or ID selector)
+    tagName = token;
+    var found = new Array;
+    var foundCount = 0;
+    for (var h = 0; h < currentContext.length; h++) {
+      var elements = currentContext[h].getElementsByTagName(tagName);
+      for (var j = 0; j < elements.length; j++) {
+        found[foundCount++] = elements[j];
+      }
+    }
+    currentContext = found;
+  }
+  return currentContext;
+}
+
+/* That revolting regular expression explained 
+/^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/
+  \---/  \---/\-------------/    \-------/
+    |      |         |               |
+    |      |         |           The value
+    |      |    ~,|,^,$,* or =
+    |   Attribute 
+   Tag
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/inlines.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,148 @@
+/**
+ * Django admin inlines
+ *
+ * Based on jQuery Formset 1.1
+ * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com)
+ * @requires jQuery 1.2.6 or later
+ *
+ * Copyright (c) 2009, Stanislaus Madueke
+ * All rights reserved.
+ *
+ * Spiced up with Code from Zain Memon's GSoC project 2009
+ * and modified for Django by Jannis Leidel
+ *
+ * Licensed under the New BSD License
+ * See: http://www.opensource.org/licenses/bsd-license.php
+ */
+(function($) {
+	$.fn.formset = function(opts) {
+		var options = $.extend({}, $.fn.formset.defaults, opts);
+		var updateElementIndex = function(el, prefix, ndx) {
+			var id_regex = new RegExp("(" + prefix + "-\\d+)");
+			var replacement = prefix + "-" + ndx;
+			if ($(el).attr("for")) {
+				$(el).attr("for", $(el).attr("for").replace(id_regex, replacement));
+			}
+			if (el.id) {
+				el.id = el.id.replace(id_regex, replacement);
+			}
+			if (el.name) {
+				el.name = el.name.replace(id_regex, replacement);
+			}
+		};
+		var totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").attr("autocomplete", "off");
+		var maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").attr("autocomplete", "off");
+		// only show the add button if we are allowed to add more items,
+        // note that max_num = None translates to a blank string.
+		var showAddButton = maxForms.val() == '' || (maxForms.val()-totalForms.val()) > 0;
+		$(this).each(function(i) {
+			$(this).not("." + options.emptyCssClass).addClass(options.formCssClass);
+		});
+		if ($(this).length && showAddButton) {
+			var addButton;
+			if ($(this).attr("tagName") == "TR") {
+				// If forms are laid out as table rows, insert the
+				// "add" button in a new table row:
+				var numCols = this.eq(0).children().length;
+				$(this).parent().append('<tr class="' + options.addCssClass + '"><td colspan="' + numCols + '"><a href="javascript:void(0)">' + options.addText + "</a></tr>");
+				addButton = $(this).parent().find("tr:last a");
+			} else {
+				// Otherwise, insert it immediately after the last form:
+				$(this).filter(":last").after('<div class="' + options.addCssClass + '"><a href="javascript:void(0)">' + options.addText + "</a></div>");
+				addButton = $(this).filter(":last").next().find("a");
+			}
+			addButton.click(function() {
+				var totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS");
+				var nextIndex = parseInt(totalForms.val());
+				var template = $("#" + options.prefix + "-empty");
+				var row = template.clone(true);
+				row.removeClass(options.emptyCssClass)
+				    .addClass(options.formCssClass)
+				    .attr("id", options.prefix + "-" + nextIndex)
+				    .insertBefore($(template));
+				row.find("*")
+				    .filter(function() {
+				        var el = $(this);
+				        return el.attr("id") && el.attr("id").search(/__prefix__/) >= 0;
+				    }).each(function() {
+				        var el = $(this);
+				        el.attr("id", el.attr("id").replace(/__prefix__/g, nextIndex));
+				    })
+				    .end()
+				    .filter(function() {
+				        var el = $(this);
+				        return el.attr("name") && el.attr("name").search(/__prefix__/) >= 0;
+				    }).each(function() {
+				        var el = $(this);
+				        el.attr("name", el.attr("name").replace(/__prefix__/g, nextIndex));
+				    });
+				if (row.is("tr")) {
+					// If the forms are laid out in table rows, insert
+					// the remove button into the last table cell:
+					row.children(":last").append('<div><a class="' + options.deleteCssClass +'" href="javascript:void(0)">' + options.deleteText + "</a></div>");
+				} else if (row.is("ul") || row.is("ol")) {
+					// If they're laid out as an ordered/unordered list,
+					// insert an <li> after the last list item:
+					row.append('<li><a class="' + options.deleteCssClass +'" href="javascript:void(0)">' + options.deleteText + "</a></li>");
+				} else {
+					// Otherwise, just insert the remove button as the
+					// last child element of the form's container:
+					row.children(":first").append('<span><a class="' + options.deleteCssClass + '" href="javascript:void(0)">' + options.deleteText + "</a></span>");
+				}
+				row.find("input,select,textarea,label,a").each(function() {
+					updateElementIndex(this, options.prefix, totalForms.val());
+				});
+				// Update number of total forms
+				$(totalForms).val(nextIndex + 1);
+				// Hide add button in case we've hit the max, except we want to add infinitely
+				if ((maxForms.val() != '') && (maxForms.val() <= totalForms.val())) {
+					addButton.parent().hide();
+				}
+				// The delete button of each row triggers a bunch of other things
+				row.find("a." + options.deleteCssClass).click(function() {
+					// Remove the parent form containing this button:
+					var row = $(this).parents("." + options.formCssClass);
+					row.remove();
+					// If a post-delete callback was provided, call it with the deleted form:
+					if (options.removed) {
+						options.removed(row);
+					}
+					// Update the TOTAL_FORMS form count.
+					var forms = $("." + options.formCssClass);
+					$("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length);
+					// Show add button again once we drop below max
+					if ((maxForms.val() == '') || (maxForms.val() >= forms.length)) {
+						addButton.parent().show();
+					}
+					// Also, update names and ids for all remaining form controls
+					// so they remain in sequence:
+					for (var i=0, formCount=forms.length; i<formCount; i++)
+					{
+						$(forms.get(i)).find("input,select,textarea,label,a").each(function() {
+							updateElementIndex(this, options.prefix, i);
+						});
+					}
+					return false;
+				});
+				// If a post-add callback was supplied, call it with the added form:
+				if (options.added) {
+					options.added(row);
+				}
+				return false;
+			});
+		}
+		return this;
+	}
+	/* Setup plugin defaults */
+	$.fn.formset.defaults = {
+		prefix: "form",					// The form prefix for your django formset
+		addText: "add another",			// Text for the add link
+		deleteText: "remove",			// Text for the delete link
+		addCssClass: "add-row",			// CSS class applied to the add link
+		deleteCssClass: "delete-row",	// CSS class applied to the delete link
+		emptyCssClass: "empty-row",		// CSS class applied to the empty row
+		formCssClass: "dynamic-form",	// CSS class applied to each form in a formset
+		added: null,					// Function called each time a new form is added
+		removed: null					// Function called each time a form is deleted
+	}
+})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/inlines.min.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,6 @@
+(function(a){a.fn.formset=function(g){var b=a.extend({},a.fn.formset.defaults,g),l=function(e,f,j){var d=new RegExp("("+f+"-\\d+)");f=f+"-"+j;a(e).attr("for")&&a(e).attr("for",a(e).attr("for").replace(d,f));if(e.id)e.id=e.id.replace(d,f);if(e.name)e.name=e.name.replace(d,f)};g=a("#id_"+b.prefix+"-TOTAL_FORMS").attr("autocomplete","off");var h=a("#id_"+b.prefix+"-MAX_NUM_FORMS").attr("autocomplete","off");g=h.val()==""||h.val()-g.val()>0;a(this).each(function(){a(this).not("."+b.emptyCssClass).addClass(b.formCssClass)});
+if(a(this).length&&g){var i;if(a(this).attr("tagName")=="TR"){g=this.eq(0).children().length;a(this).parent().append('<tr class="'+b.addCssClass+'"><td colspan="'+g+'"><a href="javascript:void(0)">'+b.addText+"</a></tr>");i=a(this).parent().find("tr:last a")}else{a(this).filter(":last").after('<div class="'+b.addCssClass+'"><a href="javascript:void(0)">'+b.addText+"</a></div>");i=a(this).filter(":last").next().find("a")}i.click(function(){var e=a("#id_"+b.prefix+"-TOTAL_FORMS"),f=parseInt(e.val()),
+j=a("#"+b.prefix+"-empty"),d=j.clone(true);d.removeClass(b.emptyCssClass).addClass(b.formCssClass).attr("id",b.prefix+"-"+f).insertBefore(a(j));d.find("*").filter(function(){var c=a(this);return c.attr("id")&&c.attr("id").search(/__prefix__/)>=0}).each(function(){var c=a(this);c.attr("id",c.attr("id").replace(/__prefix__/g,f))}).end().filter(function(){var c=a(this);return c.attr("name")&&c.attr("name").search(/__prefix__/)>=0}).each(function(){var c=a(this);c.attr("name",c.attr("name").replace(/__prefix__/g,
+f))});if(d.is("tr"))d.children(":last").append('<div><a class="'+b.deleteCssClass+'" href="javascript:void(0)">'+b.deleteText+"</a></div>");else d.is("ul")||d.is("ol")?d.append('<li><a class="'+b.deleteCssClass+'" href="javascript:void(0)">'+b.deleteText+"</a></li>"):d.children(":first").append('<span><a class="'+b.deleteCssClass+'" href="javascript:void(0)">'+b.deleteText+"</a></span>");d.find("input,select,textarea,label,a").each(function(){l(this,b.prefix,e.val())});a(e).val(f+1);h.val()!=""&&
+h.val()<=e.val()&&i.parent().hide();d.find("a."+b.deleteCssClass).click(function(){var c=a(this).parents("."+b.formCssClass);c.remove();b.removed&&b.removed(c);c=a("."+b.formCssClass);a("#id_"+b.prefix+"-TOTAL_FORMS").val(c.length);if(h.val()==""||h.val()>=c.length)i.parent().show();for(var k=0,m=c.length;k<m;k++)a(c.get(k)).find("input,select,textarea,label,a").each(function(){l(this,b.prefix,k)});return false});b.added&&b.added(d);return false})}return this};a.fn.formset.defaults={prefix:"form",
+addText:"add another",deleteText:"remove",addCssClass:"add-row",deleteCssClass:"delete-row",emptyCssClass:"empty-row",formCssClass:"dynamic-form",added:null,removed:null}})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/jquery.init.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,4 @@
+// Puts the included jQuery into our own namespace
+var django = {
+    "jQuery": jQuery.noConflict(true)
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/jquery.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,6240 @@
+/*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+(function( window, undefined ) {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$,
+
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+
+	// A central reference to the root jQuery(document)
+	rootjQuery,
+
+	// A simple way to check for HTML strings or ID strings
+	// (both of which we optimize for)
+	quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,
+
+	// Is it a simple selector
+	isSimple = /^.[^:#\[\.,]*$/,
+
+	// Check if a string has a non-whitespace character in it
+	rnotwhite = /\S/,
+
+	// Used for trimming whitespace
+	rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g,
+
+	// Match a standalone tag
+	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+	// Keep a UserAgent string for use with jQuery.browser
+	userAgent = navigator.userAgent,
+
+	// For matching the engine and version of the browser
+	browserMatch,
+	
+	// Has the ready events already been bound?
+	readyBound = false,
+	
+	// The functions to execute on DOM ready
+	readyList = [],
+
+	// The ready event handler
+	DOMContentLoaded,
+
+	// Save a reference to some core methods
+	toString = Object.prototype.toString,
+	hasOwnProperty = Object.prototype.hasOwnProperty,
+	push = Array.prototype.push,
+	slice = Array.prototype.slice,
+	indexOf = Array.prototype.indexOf;
+
+jQuery.fn = jQuery.prototype = {
+	init: function( selector, context ) {
+		var match, elem, ret, doc;
+
+		// Handle $(""), $(null), or $(undefined)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle $(DOMElement)
+		if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+		}
+		
+		// The body element only exists once, optimize finding it
+		if ( selector === "body" && !context ) {
+			this.context = document;
+			this[0] = document.body;
+			this.selector = "body";
+			this.length = 1;
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			// Are we dealing with HTML string or an ID?
+			match = quickExpr.exec( selector );
+
+			// Verify a match, and that no context was specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					doc = (context ? context.ownerDocument || context : document);
+
+					// If a single string is passed in and it's a single tag
+					// just do a createElement and skip the rest
+					ret = rsingleTag.exec( selector );
+
+					if ( ret ) {
+						if ( jQuery.isPlainObject( context ) ) {
+							selector = [ document.createElement( ret[1] ) ];
+							jQuery.fn.attr.call( selector, context, true );
+
+						} else {
+							selector = [ doc.createElement( ret[1] ) ];
+						}
+
+					} else {
+						ret = buildFragment( [ match[1] ], [ doc ] );
+						selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
+					}
+					
+					return jQuery.merge( this, selector );
+					
+				// HANDLE: $("#id")
+				} else {
+					elem = document.getElementById( match[2] );
+
+					if ( elem ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $("TAG")
+			} else if ( !context && /^\w+$/.test( selector ) ) {
+				this.selector = selector;
+				this.context = document;
+				selector = document.getElementsByTagName( selector );
+				return jQuery.merge( this, selector );
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return (context || rootjQuery).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return jQuery( context ).find( selector );
+			}
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return rootjQuery.ready( selector );
+		}
+
+		if (selector.selector !== undefined) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	},
+
+	// Start with an empty selector
+	selector: "",
+
+	// The current version of jQuery being used
+	jquery: "1.4.2",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	// The number of elements contained in the matched element set
+	size: function() {
+		return this.length;
+	},
+
+	toArray: function() {
+		return slice.call( this, 0 );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num == null ?
+
+			// Return a 'clean' array
+			this.toArray() :
+
+			// Return just the object
+			( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems, name, selector ) {
+		// Build a new jQuery matched element set
+		var ret = jQuery();
+
+		if ( jQuery.isArray( elems ) ) {
+			push.apply( ret, elems );
+		
+		} else {
+			jQuery.merge( ret, elems );
+		}
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		ret.context = this.context;
+
+		if ( name === "find" ) {
+			ret.selector = this.selector + (this.selector ? " " : "") + selector;
+		} else if ( name ) {
+			ret.selector = this.selector + "." + name + "(" + selector + ")";
+		}
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+	
+	ready: function( fn ) {
+		// Attach the listeners
+		jQuery.bindReady();
+
+		// If the DOM is already ready
+		if ( jQuery.isReady ) {
+			// Execute the function immediately
+			fn.call( document, jQuery );
+
+		// Otherwise, remember the function for later
+		} else if ( readyList ) {
+			// Add the function to the wait list
+			readyList.push( fn );
+		}
+
+		return this;
+	},
+	
+	eq: function( i ) {
+		return i === -1 ?
+			this.slice( i ) :
+			this.slice( i, +i + 1 );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ),
+			"slice", slice.call(arguments).join(",") );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+	
+	end: function() {
+		return this.prevObject || jQuery(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: [].sort,
+	splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+	// copy reference to target object
+	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+		target = arguments[1] || {};
+		// skip the boolean and the target
+		i = 2;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( length === i ) {
+		target = this;
+		--i;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging object literal values or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) {
+					var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src
+						: jQuery.isArray(copy) ? [] : {};
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	noConflict: function( deep ) {
+		window.$ = _$;
+
+		if ( deep ) {
+			window.jQuery = _jQuery;
+		}
+
+		return jQuery;
+	},
+	
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+	
+	// Handle when the DOM is ready
+	ready: function() {
+		// Make sure that the DOM is not already loaded
+		if ( !jQuery.isReady ) {
+			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+			if ( !document.body ) {
+				return setTimeout( jQuery.ready, 13 );
+			}
+
+			// Remember that the DOM is ready
+			jQuery.isReady = true;
+
+			// If there are functions bound, to execute
+			if ( readyList ) {
+				// Execute all of them
+				var fn, i = 0;
+				while ( (fn = readyList[ i++ ]) ) {
+					fn.call( document, jQuery );
+				}
+
+				// Reset the list of functions
+				readyList = null;
+			}
+
+			// Trigger any bound ready events
+			if ( jQuery.fn.triggerHandler ) {
+				jQuery( document ).triggerHandler( "ready" );
+			}
+		}
+	},
+	
+	bindReady: function() {
+		if ( readyBound ) {
+			return;
+		}
+
+		readyBound = true;
+
+		// Catch cases where $(document).ready() is called after the
+		// browser event has already occurred.
+		if ( document.readyState === "complete" ) {
+			return jQuery.ready();
+		}
+
+		// Mozilla, Opera and webkit nightlies currently support this event
+		if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+			
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", jQuery.ready, false );
+
+		// If IE event model is used
+		} else if ( document.attachEvent ) {
+			// ensure firing before onload,
+			// maybe late but safe also for iframes
+			document.attachEvent("onreadystatechange", DOMContentLoaded);
+			
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", jQuery.ready );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var toplevel = false;
+
+			try {
+				toplevel = window.frameElement == null;
+			} catch(e) {}
+
+			if ( document.documentElement.doScroll && toplevel ) {
+				doScrollCheck();
+			}
+		}
+	},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return toString.call(obj) === "[object Function]";
+	},
+
+	isArray: function( obj ) {
+		return toString.call(obj) === "[object Array]";
+	},
+
+	isPlainObject: function( obj ) {
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) {
+			return false;
+		}
+		
+		// Not own constructor property must be Object
+		if ( obj.constructor
+			&& !hasOwnProperty.call(obj, "constructor")
+			&& !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) {
+			return false;
+		}
+		
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+	
+		var key;
+		for ( key in obj ) {}
+		
+		return key === undefined || hasOwnProperty.call( obj, key );
+	},
+
+	isEmptyObject: function( obj ) {
+		for ( var name in obj ) {
+			return false;
+		}
+		return true;
+	},
+	
+	error: function( msg ) {
+		throw msg;
+	},
+	
+	parseJSON: function( data ) {
+		if ( typeof data !== "string" || !data ) {
+			return null;
+		}
+
+		// Make sure leading/trailing whitespace is removed (IE can't handle it)
+		data = jQuery.trim( data );
+		
+		// Make sure the incoming data is actual JSON
+		// Logic borrowed from http://json.org/json2.js
+		if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
+			.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
+			.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
+
+			// Try to use the native JSON parser first
+			return window.JSON && window.JSON.parse ?
+				window.JSON.parse( data ) :
+				(new Function("return " + data))();
+
+		} else {
+			jQuery.error( "Invalid JSON: " + data );
+		}
+	},
+
+	noop: function() {},
+
+	// Evalulates a script in a global context
+	globalEval: function( data ) {
+		if ( data && rnotwhite.test(data) ) {
+			// Inspired by code by Andrea Giammarchi
+			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+			var head = document.getElementsByTagName("head")[0] || document.documentElement,
+				script = document.createElement("script");
+
+			script.type = "text/javascript";
+
+			if ( jQuery.support.scriptEval ) {
+				script.appendChild( document.createTextNode( data ) );
+			} else {
+				script.text = data;
+			}
+
+			// Use insertBefore instead of appendChild to circumvent an IE6 bug.
+			// This arises when a base node is used (#2709).
+			head.insertBefore( script, head.firstChild );
+			head.removeChild( script );
+		}
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+	},
+
+	// args is for internal usage only
+	each: function( object, callback, args ) {
+		var name, i = 0,
+			length = object.length,
+			isObj = length === undefined || jQuery.isFunction(object);
+
+		if ( args ) {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.apply( object[ name ], args ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( ; i < length; ) {
+					if ( callback.apply( object[ i++ ], args ) === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isObj ) {
+				for ( name in object ) {
+					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( var value = object[0];
+					i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
+			}
+		}
+
+		return object;
+	},
+
+	trim: function( text ) {
+		return (text || "").replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( array, results ) {
+		var ret = results || [];
+
+		if ( array != null ) {
+			// The window, strings (and functions) also have 'length'
+			// The extra typeof function check is to prevent crashes
+			// in Safari 2 (See: #3039)
+			if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) {
+				push.call( ret, array );
+			} else {
+				jQuery.merge( ret, array );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, array ) {
+		if ( array.indexOf ) {
+			return array.indexOf( elem );
+		}
+
+		for ( var i = 0, length = array.length; i < length; i++ ) {
+			if ( array[ i ] === elem ) {
+				return i;
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var i = first.length, j = 0;
+
+		if ( typeof second.length === "number" ) {
+			for ( var l = second.length; j < l; j++ ) {
+				first[ i++ ] = second[ j ];
+			}
+		
+		} else {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, inv ) {
+		var ret = [];
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			if ( !inv !== !callback( elems[ i ], i ) ) {
+				ret.push( elems[ i ] );
+			}
+		}
+
+		return ret;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var ret = [], value;
+
+		// Go through the array, translating each of the items to their
+		// new value (or values).
+		for ( var i = 0, length = elems.length; i < length; i++ ) {
+			value = callback( elems[ i ], i, arg );
+
+			if ( value != null ) {
+				ret[ ret.length ] = value;
+			}
+		}
+
+		return ret.concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	proxy: function( fn, proxy, thisObject ) {
+		if ( arguments.length === 2 ) {
+			if ( typeof proxy === "string" ) {
+				thisObject = fn;
+				fn = thisObject[ proxy ];
+				proxy = undefined;
+
+			} else if ( proxy && !jQuery.isFunction( proxy ) ) {
+				thisObject = proxy;
+				proxy = undefined;
+			}
+		}
+
+		if ( !proxy && fn ) {
+			proxy = function() {
+				return fn.apply( thisObject || this, arguments );
+			};
+		}
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		if ( fn ) {
+			proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+		}
+
+		// So proxy can be declared as an argument
+		return proxy;
+	},
+
+	// Use of jQuery.browser is frowned upon.
+	// More details: http://docs.jquery.com/Utilities/jQuery.browser
+	uaMatch: function( ua ) {
+		ua = ua.toLowerCase();
+
+		var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+			/(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) ||
+			/(msie) ([\w.]+)/.exec( ua ) ||
+			!/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) ||
+		  	[];
+
+		return { browser: match[1] || "", version: match[2] || "0" };
+	},
+
+	browser: {}
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+	jQuery.browser[ browserMatch.browser ] = true;
+	jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+	jQuery.browser.safari = true;
+}
+
+if ( indexOf ) {
+	jQuery.inArray = function( elem, array ) {
+		return indexOf.call( array, elem );
+	};
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+	DOMContentLoaded = function() {
+		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+		jQuery.ready();
+	};
+
+} else if ( document.attachEvent ) {
+	DOMContentLoaded = function() {
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( document.readyState === "complete" ) {
+			document.detachEvent( "onreadystatechange", DOMContentLoaded );
+			jQuery.ready();
+		}
+	};
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+	if ( jQuery.isReady ) {
+		return;
+	}
+
+	try {
+		// If IE is used, use the trick by Diego Perini
+		// http://javascript.nwbox.com/IEContentLoaded/
+		document.documentElement.doScroll("left");
+	} catch( error ) {
+		setTimeout( doScrollCheck, 1 );
+		return;
+	}
+
+	// and execute any waiting functions
+	jQuery.ready();
+}
+
+function evalScript( i, elem ) {
+	if ( elem.src ) {
+		jQuery.ajax({
+			url: elem.src,
+			async: false,
+			dataType: "script"
+		});
+	} else {
+		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+	}
+
+	if ( elem.parentNode ) {
+		elem.parentNode.removeChild( elem );
+	}
+}
+
+// Mutifunctional method to get and set values to a collection
+// The value/s can be optionally by executed if its a function
+function access( elems, key, value, exec, fn, pass ) {
+	var length = elems.length;
+	
+	// Setting many attributes
+	if ( typeof key === "object" ) {
+		for ( var k in key ) {
+			access( elems, k, key[k], exec, fn, value );
+		}
+		return elems;
+	}
+	
+	// Setting one attribute
+	if ( value !== undefined ) {
+		// Optionally, function values get executed if exec is true
+		exec = !pass && exec && jQuery.isFunction(value);
+		
+		for ( var i = 0; i < length; i++ ) {
+			fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+		}
+		
+		return elems;
+	}
+	
+	// Getting an attribute
+	return length ? fn( elems[0], key ) : undefined;
+}
+
+function now() {
+	return (new Date).getTime();
+}
+(function() {
+
+	jQuery.support = {};
+
+	var root = document.documentElement,
+		script = document.createElement("script"),
+		div = document.createElement("div"),
+		id = "script" + now();
+
+	div.style.display = "none";
+	div.innerHTML = "   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+	var all = div.getElementsByTagName("*"),
+		a = div.getElementsByTagName("a")[0];
+
+	// Can't get basic test support
+	if ( !all || !all.length || !a ) {
+		return;
+	}
+
+	jQuery.support = {
+		// IE strips leading whitespace when .innerHTML is used
+		leadingWhitespace: div.firstChild.nodeType === 3,
+
+		// Make sure that tbody elements aren't automatically inserted
+		// IE will insert them into empty tables
+		tbody: !div.getElementsByTagName("tbody").length,
+
+		// Make sure that link elements get serialized correctly by innerHTML
+		// This requires a wrapper element in IE
+		htmlSerialize: !!div.getElementsByTagName("link").length,
+
+		// Get the style information from getAttribute
+		// (IE uses .cssText insted)
+		style: /red/.test( a.getAttribute("style") ),
+
+		// Make sure that URLs aren't manipulated
+		// (IE normalizes it by default)
+		hrefNormalized: a.getAttribute("href") === "/a",
+
+		// Make sure that element opacity exists
+		// (IE uses filter instead)
+		// Use a regex to work around a WebKit issue. See #5145
+		opacity: /^0.55$/.test( a.style.opacity ),
+
+		// Verify style float existence
+		// (IE uses styleFloat instead of cssFloat)
+		cssFloat: !!a.style.cssFloat,
+
+		// Make sure that if no value is specified for a checkbox
+		// that it defaults to "on".
+		// (WebKit defaults to "" instead)
+		checkOn: div.getElementsByTagName("input")[0].value === "on",
+
+		// Make sure that a selected-by-default option has a working selected property.
+		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+		optSelected: document.createElement("select").appendChild( document.createElement("option") ).selected,
+
+		parentNode: div.removeChild( div.appendChild( document.createElement("div") ) ).parentNode === null,
+
+		// Will be defined later
+		deleteExpando: true,
+		checkClone: false,
+		scriptEval: false,
+		noCloneEvent: true,
+		boxModel: null
+	};
+
+	script.type = "text/javascript";
+	try {
+		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
+	} catch(e) {}
+
+	root.insertBefore( script, root.firstChild );
+
+	// Make sure that the execution of code works by injecting a script
+	// tag with appendChild/createTextNode
+	// (IE doesn't support this, fails, and uses .text instead)
+	if ( window[ id ] ) {
+		jQuery.support.scriptEval = true;
+		delete window[ id ];
+	}
+
+	// Test to see if it's possible to delete an expando from an element
+	// Fails in Internet Explorer
+	try {
+		delete script.test;
+	
+	} catch(e) {
+		jQuery.support.deleteExpando = false;
+	}
+
+	root.removeChild( script );
+
+	if ( div.attachEvent && div.fireEvent ) {
+		div.attachEvent("onclick", function click() {
+			// Cloning a node shouldn't copy over any
+			// bound event handlers (IE does this)
+			jQuery.support.noCloneEvent = false;
+			div.detachEvent("onclick", click);
+		});
+		div.cloneNode(true).fireEvent("onclick");
+	}
+
+	div = document.createElement("div");
+	div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
+
+	var fragment = document.createDocumentFragment();
+	fragment.appendChild( div.firstChild );
+
+	// WebKit doesn't clone checked state correctly in fragments
+	jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
+
+	// Figure out if the W3C box model works as expected
+	// document.body must exist before we can do this
+	jQuery(function() {
+		var div = document.createElement("div");
+		div.style.width = div.style.paddingLeft = "1px";
+
+		document.body.appendChild( div );
+		jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
+		document.body.removeChild( div ).style.display = 'none';
+
+		div = null;
+	});
+
+	// Technique from Juriy Zaytsev
+	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+	var eventSupported = function( eventName ) { 
+		var el = document.createElement("div"); 
+		eventName = "on" + eventName; 
+
+		var isSupported = (eventName in el); 
+		if ( !isSupported ) { 
+			el.setAttribute(eventName, "return;"); 
+			isSupported = typeof el[eventName] === "function"; 
+		} 
+		el = null; 
+
+		return isSupported; 
+	};
+	
+	jQuery.support.submitBubbles = eventSupported("submit");
+	jQuery.support.changeBubbles = eventSupported("change");
+
+	// release memory in IE
+	root = script = div = all = a = null;
+})();
+
+jQuery.props = {
+	"for": "htmlFor",
+	"class": "className",
+	readonly: "readOnly",
+	maxlength: "maxLength",
+	cellspacing: "cellSpacing",
+	rowspan: "rowSpan",
+	colspan: "colSpan",
+	tabindex: "tabIndex",
+	usemap: "useMap",
+	frameborder: "frameBorder"
+};
+var expando = "jQuery" + now(), uuid = 0, windowData = {};
+
+jQuery.extend({
+	cache: {},
+	
+	expando:expando,
+
+	// The following elements throw uncatchable exceptions if you
+	// attempt to add expando properties to them.
+	noData: {
+		"embed": true,
+		"object": true,
+		"applet": true
+	},
+
+	data: function( elem, name, data ) {
+		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+			return;
+		}
+
+		elem = elem == window ?
+			windowData :
+			elem;
+
+		var id = elem[ expando ], cache = jQuery.cache, thisCache;
+
+		if ( !id && typeof name === "string" && data === undefined ) {
+			return null;
+		}
+
+		// Compute a unique ID for the element
+		if ( !id ) { 
+			id = ++uuid;
+		}
+
+		// Avoid generating a new cache unless none exists and we
+		// want to manipulate it.
+		if ( typeof name === "object" ) {
+			elem[ expando ] = id;
+			thisCache = cache[ id ] = jQuery.extend(true, {}, name);
+
+		} else if ( !cache[ id ] ) {
+			elem[ expando ] = id;
+			cache[ id ] = {};
+		}
+
+		thisCache = cache[ id ];
+
+		// Prevent overriding the named cache with undefined values
+		if ( data !== undefined ) {
+			thisCache[ name ] = data;
+		}
+
+		return typeof name === "string" ? thisCache[ name ] : thisCache;
+	},
+
+	removeData: function( elem, name ) {
+		if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+			return;
+		}
+
+		elem = elem == window ?
+			windowData :
+			elem;
+
+		var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ];
+
+		// If we want to remove a specific section of the element's data
+		if ( name ) {
+			if ( thisCache ) {
+				// Remove the section of cache data
+				delete thisCache[ name ];
+
+				// If we've removed all the data, remove the element's cache
+				if ( jQuery.isEmptyObject(thisCache) ) {
+					jQuery.removeData( elem );
+				}
+			}
+
+		// Otherwise, we want to remove all of the element's data
+		} else {
+			if ( jQuery.support.deleteExpando ) {
+				delete elem[ jQuery.expando ];
+
+			} else if ( elem.removeAttribute ) {
+				elem.removeAttribute( jQuery.expando );
+			}
+
+			// Completely remove the data cache
+			delete cache[ id ];
+		}
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		if ( typeof key === "undefined" && this.length ) {
+			return jQuery.data( this[0] );
+
+		} else if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		var parts = key.split(".");
+		parts[1] = parts[1] ? "." + parts[1] : "";
+
+		if ( value === undefined ) {
+			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+			if ( data === undefined && this.length ) {
+				data = jQuery.data( this[0], key );
+			}
+			return data === undefined && parts[1] ?
+				this.data( parts[0] ) :
+				data;
+		} else {
+			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() {
+				jQuery.data( this, key, value );
+			});
+		}
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		if ( !elem ) {
+			return;
+		}
+
+		type = (type || "fx") + "queue";
+		var q = jQuery.data( elem, type );
+
+		// Speed up dequeue by getting out quickly if this is just a lookup
+		if ( !data ) {
+			return q || [];
+		}
+
+		if ( !q || jQuery.isArray(data) ) {
+			q = jQuery.data( elem, type, jQuery.makeArray(data) );
+
+		} else {
+			q.push( data );
+		}
+
+		return q;
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ), fn = queue.shift();
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+		}
+
+		if ( fn ) {
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift("inprogress");
+			}
+
+			fn.call(elem, function() {
+				jQuery.dequeue(elem, type);
+			});
+		}
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+		}
+
+		if ( data === undefined ) {
+			return jQuery.queue( this[0], type );
+		}
+		return this.each(function( i, elem ) {
+			var queue = jQuery.queue( this, type, data );
+
+			if ( type === "fx" && queue[0] !== "inprogress" ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+
+	// Based off of the plugin by Clint Helfers, with permission.
+	// http://blindsignals.com/index.php/2009/07/jquery-delay/
+	delay: function( time, type ) {
+		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+		type = type || "fx";
+
+		return this.queue( type, function() {
+			var elem = this;
+			setTimeout(function() {
+				jQuery.dequeue( elem, type );
+			}, time );
+		});
+	},
+
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	}
+});
+var rclass = /[\n\t]/g,
+	rspace = /\s+/,
+	rreturn = /\r/g,
+	rspecialurl = /href|src|style/,
+	rtype = /(button|input)/i,
+	rfocusable = /(button|input|object|select|textarea)/i,
+	rclickable = /^(a|area)$/i,
+	rradiocheck = /radio|checkbox/;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return access( this, name, value, true, jQuery.attr );
+	},
+
+	removeAttr: function( name, fn ) {
+		return this.each(function(){
+			jQuery.attr( this, name, "" );
+			if ( this.nodeType === 1 ) {
+				this.removeAttribute( name );
+			}
+		});
+	},
+
+	addClass: function( value ) {
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.addClass( value.call(this, i, self.attr("class")) );
+			});
+		}
+
+		if ( value && typeof value === "string" ) {
+			var classNames = (value || "").split( rspace );
+
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var elem = this[i];
+
+				if ( elem.nodeType === 1 ) {
+					if ( !elem.className ) {
+						elem.className = value;
+
+					} else {
+						var className = " " + elem.className + " ", setClass = elem.className;
+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
+								setClass += " " + classNames[c];
+							}
+						}
+						elem.className = jQuery.trim( setClass );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.removeClass( value.call(this, i, self.attr("class")) );
+			});
+		}
+
+		if ( (value && typeof value === "string") || value === undefined ) {
+			var classNames = (value || "").split(rspace);
+
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var elem = this[i];
+
+				if ( elem.nodeType === 1 && elem.className ) {
+					if ( value ) {
+						var className = (" " + elem.className + " ").replace(rclass, " ");
+						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+							className = className.replace(" " + classNames[c] + " ", " ");
+						}
+						elem.className = jQuery.trim( className );
+
+					} else {
+						elem.className = "";
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value, isBool = typeof stateVal === "boolean";
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className, i = 0, self = jQuery(this),
+					state = stateVal,
+					classNames = value.split( rspace );
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space seperated list
+					state = isBool ? state : !self.hasClass( className );
+					self[ state ? "addClass" : "removeClass" ]( className );
+				}
+
+			} else if ( type === "undefined" || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery.data( this, "__className__", this.className );
+				}
+
+				// toggle whole className
+				this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ";
+		for ( var i = 0, l = this.length; i < l; i++ ) {
+			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	val: function( value ) {
+		if ( value === undefined ) {
+			var elem = this[0];
+
+			if ( elem ) {
+				if ( jQuery.nodeName( elem, "option" ) ) {
+					return (elem.attributes.value || {}).specified ? elem.value : elem.text;
+				}
+
+				// We need to handle select boxes special
+				if ( jQuery.nodeName( elem, "select" ) ) {
+					var index = elem.selectedIndex,
+						values = [],
+						options = elem.options,
+						one = elem.type === "select-one";
+
+					// Nothing was selected
+					if ( index < 0 ) {
+						return null;
+					}
+
+					// Loop through all the selected options
+					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+						var option = options[ i ];
+
+						if ( option.selected ) {
+							// Get the specifc value for the option
+							value = jQuery(option).val();
+
+							// We don't need an array for one selects
+							if ( one ) {
+								return value;
+							}
+
+							// Multi-Selects return an array
+							values.push( value );
+						}
+					}
+
+					return values;
+				}
+
+				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+				if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
+					return elem.getAttribute("value") === null ? "on" : elem.value;
+				}
+				
+
+				// Everything else, we just grab the value
+				return (elem.value || "").replace(rreturn, "");
+
+			}
+
+			return undefined;
+		}
+
+		var isFunction = jQuery.isFunction(value);
+
+		return this.each(function(i) {
+			var self = jQuery(this), val = value;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call(this, i, self.val());
+			}
+
+			// Typecast each time if the value is a Function and the appended
+			// value is therefore different each time.
+			if ( typeof val === "number" ) {
+				val += "";
+			}
+
+			if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
+				this.checked = jQuery.inArray( self.val(), val ) >= 0;
+
+			} else if ( jQuery.nodeName( this, "select" ) ) {
+				var values = jQuery.makeArray(val);
+
+				jQuery( "option", this ).each(function() {
+					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+				});
+
+				if ( !values.length ) {
+					this.selectedIndex = -1;
+				}
+
+			} else {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	attrFn: {
+		val: true,
+		css: true,
+		html: true,
+		text: true,
+		data: true,
+		width: true,
+		height: true,
+		offset: true
+	},
+		
+	attr: function( elem, name, value, pass ) {
+		// don't set attributes on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return undefined;
+		}
+
+		if ( pass && name in jQuery.attrFn ) {
+			return jQuery(elem)[name](value);
+		}
+
+		var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
+			// Whether we are setting (or getting)
+			set = value !== undefined;
+
+		// Try to normalize/fix the name
+		name = notxml && jQuery.props[ name ] || name;
+
+		// Only do all the following if this is a node (faster for style)
+		if ( elem.nodeType === 1 ) {
+			// These attributes require special treatment
+			var special = rspecialurl.test( name );
+
+			// Safari mis-reports the default selected property of an option
+			// Accessing the parent's selectedIndex property fixes it
+			if ( name === "selected" && !jQuery.support.optSelected ) {
+				var parent = elem.parentNode;
+				if ( parent ) {
+					parent.selectedIndex;
+	
+					// Make sure that it also works with optgroups, see #5701
+					if ( parent.parentNode ) {
+						parent.parentNode.selectedIndex;
+					}
+				}
+			}
+
+			// If applicable, access the attribute via the DOM 0 way
+			if ( name in elem && notxml && !special ) {
+				if ( set ) {
+					// We can't allow the type property to be changed (since it causes problems in IE)
+					if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
+						jQuery.error( "type property can't be changed" );
+					}
+
+					elem[ name ] = value;
+				}
+
+				// browsers index elements by id/name on forms, give priority to attributes.
+				if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
+					return elem.getAttributeNode( name ).nodeValue;
+				}
+
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				if ( name === "tabIndex" ) {
+					var attributeNode = elem.getAttributeNode( "tabIndex" );
+
+					return attributeNode && attributeNode.specified ?
+						attributeNode.value :
+						rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+							0 :
+							undefined;
+				}
+
+				return elem[ name ];
+			}
+
+			if ( !jQuery.support.style && notxml && name === "style" ) {
+				if ( set ) {
+					elem.style.cssText = "" + value;
+				}
+
+				return elem.style.cssText;
+			}
+
+			if ( set ) {
+				// convert the value to a string (all browsers do this but IE) see #1070
+				elem.setAttribute( name, "" + value );
+			}
+
+			var attr = !jQuery.support.hrefNormalized && notxml && special ?
+					// Some attributes require a special call on IE
+					elem.getAttribute( name, 2 ) :
+					elem.getAttribute( name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return attr === null ? undefined : attr;
+		}
+
+		// elem is actually elem.style ... set the style
+		// Using attr for specific style information is now deprecated. Use style instead.
+		return jQuery.style( elem, name, value );
+	}
+});
+var rnamespaces = /\.(.*)$/,
+	fcleanup = function( nm ) {
+		return nm.replace(/[^\w\s\.\|`]/g, function( ch ) {
+			return "\\" + ch;
+		});
+	};
+
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code originated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+	// Bind an event to an element
+	// Original by Dean Edwards
+	add: function( elem, types, handler, data ) {
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// For whatever reason, IE has trouble passing the window object
+		// around, causing it to be cloned in the process
+		if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) {
+			elem = window;
+		}
+
+		var handleObjIn, handleObj;
+
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+		}
+
+		// Make sure that the function being executed has a unique ID
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure
+		var elemData = jQuery.data( elem );
+
+		// If no elemData is found then we must be trying to bind to one of the
+		// banned noData elements
+		if ( !elemData ) {
+			return;
+		}
+
+		var events = elemData.events = elemData.events || {},
+			eventHandle = elemData.handle, eventHandle;
+
+		if ( !eventHandle ) {
+			elemData.handle = eventHandle = function() {
+				// Handle the second event of a trigger and when
+				// an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
+					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+		}
+
+		// Add elem as a property of the handle function
+		// This is to prevent a memory leak with non-native events in IE.
+		eventHandle.elem = elem;
+
+		// Handle multiple events separated by a space
+		// jQuery(...).bind("mouseover mouseout", fn);
+		types = types.split(" ");
+
+		var type, i = 0, namespaces;
+
+		while ( (type = types[ i++ ]) ) {
+			handleObj = handleObjIn ?
+				jQuery.extend({}, handleObjIn) :
+				{ handler: handler, data: data };
+
+			// Namespaced event handlers
+			if ( type.indexOf(".") > -1 ) {
+				namespaces = type.split(".");
+				type = namespaces.shift();
+				handleObj.namespace = namespaces.slice(0).sort().join(".");
+
+			} else {
+				namespaces = [];
+				handleObj.namespace = "";
+			}
+
+			handleObj.type = type;
+			handleObj.guid = handler.guid;
+
+			// Get the current list of functions bound to this event
+			var handlers = events[ type ],
+				special = jQuery.event.special[ type ] || {};
+
+			// Init the event handler queue
+			if ( !handlers ) {
+				handlers = events[ type ] = [];
+
+				// Check for a special event handler
+				// Only use addEventListener/attachEvent if the special
+				// events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+			
+			if ( special.add ) { 
+				special.add.call( elem, handleObj ); 
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add the function to the element's handler list
+			handlers.push( handleObj );
+
+			// Keep track of which events have been used, for global triggering
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	global: {},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, pos ) {
+		// don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		var ret, type, fn, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+			elemData = jQuery.data( elem ),
+			events = elemData && elemData.events;
+
+		if ( !elemData || !events ) {
+			return;
+		}
+
+		// types is actually an event object here
+		if ( types && types.type ) {
+			handler = types.handler;
+			types = types.type;
+		}
+
+		// Unbind all events for the element
+		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+			types = types || "";
+
+			for ( type in events ) {
+				jQuery.event.remove( elem, type + types );
+			}
+
+			return;
+		}
+
+		// Handle multiple events separated by a space
+		// jQuery(...).unbind("mouseover mouseout", fn);
+		types = types.split(" ");
+
+		while ( (type = types[ i++ ]) ) {
+			origType = type;
+			handleObj = null;
+			all = type.indexOf(".") < 0;
+			namespaces = [];
+
+			if ( !all ) {
+				// Namespaced event handlers
+				namespaces = type.split(".");
+				type = namespaces.shift();
+
+				namespace = new RegExp("(^|\\.)" + 
+					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)")
+			}
+
+			eventType = events[ type ];
+
+			if ( !eventType ) {
+				continue;
+			}
+
+			if ( !handler ) {
+				for ( var j = 0; j < eventType.length; j++ ) {
+					handleObj = eventType[ j ];
+
+					if ( all || namespace.test( handleObj.namespace ) ) {
+						jQuery.event.remove( elem, origType, handleObj.handler, j );
+						eventType.splice( j--, 1 );
+					}
+				}
+
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+
+			for ( var j = pos || 0; j < eventType.length; j++ ) {
+				handleObj = eventType[ j ];
+
+				if ( handler.guid === handleObj.guid ) {
+					// remove the given handler for the given type
+					if ( all || namespace.test( handleObj.namespace ) ) {
+						if ( pos == null ) {
+							eventType.splice( j--, 1 );
+						}
+
+						if ( special.remove ) {
+							special.remove.call( elem, handleObj );
+						}
+					}
+
+					if ( pos != null ) {
+						break;
+					}
+				}
+			}
+
+			// remove generic event handler if no more handlers exist
+			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+					removeEvent( elem, type, elemData.handle );
+				}
+
+				ret = null;
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			var handle = elemData.handle;
+			if ( handle ) {
+				handle.elem = null;
+			}
+
+			delete elemData.events;
+			delete elemData.handle;
+
+			if ( jQuery.isEmptyObject( elemData ) ) {
+				jQuery.removeData( elem );
+			}
+		}
+	},
+
+	// bubbling is internal
+	trigger: function( event, data, elem /*, bubbling */ ) {
+		// Event object or event type
+		var type = event.type || event,
+			bubbling = arguments[3];
+
+		if ( !bubbling ) {
+			event = typeof event === "object" ?
+				// jQuery.Event object
+				event[expando] ? event :
+				// Object literal
+				jQuery.extend( jQuery.Event(type), event ) :
+				// Just the event type (string)
+				jQuery.Event(type);
+
+			if ( type.indexOf("!") >= 0 ) {
+				event.type = type = type.slice(0, -1);
+				event.exclusive = true;
+			}
+
+			// Handle a global trigger
+			if ( !elem ) {
+				// Don't bubble custom events when global (to avoid too much overhead)
+				event.stopPropagation();
+
+				// Only trigger if we've ever bound an event for it
+				if ( jQuery.event.global[ type ] ) {
+					jQuery.each( jQuery.cache, function() {
+						if ( this.events && this.events[type] ) {
+							jQuery.event.trigger( event, data, this.handle.elem );
+						}
+					});
+				}
+			}
+
+			// Handle triggering a single element
+
+			// don't do events on text and comment nodes
+			if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+				return undefined;
+			}
+
+			// Clean up in case it is reused
+			event.result = undefined;
+			event.target = elem;
+
+			// Clone the incoming data, if any
+			data = jQuery.makeArray( data );
+			data.unshift( event );
+		}
+
+		event.currentTarget = elem;
+
+		// Trigger the event, it is assumed that "handle" is a function
+		var handle = jQuery.data( elem, "handle" );
+		if ( handle ) {
+			handle.apply( elem, data );
+		}
+
+		var parent = elem.parentNode || elem.ownerDocument;
+
+		// Trigger an inline bound script
+		try {
+			if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
+				if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
+					event.result = false;
+				}
+			}
+
+		// prevent IE from throwing an error for some elements with some event types, see #3533
+		} catch (e) {}
+
+		if ( !event.isPropagationStopped() && parent ) {
+			jQuery.event.trigger( event, data, parent, true );
+
+		} else if ( !event.isDefaultPrevented() ) {
+			var target = event.target, old,
+				isClick = jQuery.nodeName(target, "a") && type === "click",
+				special = jQuery.event.special[ type ] || {};
+
+			if ( (!special._default || special._default.call( elem, event ) === false) && 
+				!isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
+
+				try {
+					if ( target[ type ] ) {
+						// Make sure that we don't accidentally re-trigger the onFOO events
+						old = target[ "on" + type ];
+
+						if ( old ) {
+							target[ "on" + type ] = null;
+						}
+
+						jQuery.event.triggered = true;
+						target[ type ]();
+					}
+
+				// prevent IE from throwing an error for some elements with some event types, see #3533
+				} catch (e) {}
+
+				if ( old ) {
+					target[ "on" + type ] = old;
+				}
+
+				jQuery.event.triggered = false;
+			}
+		}
+	},
+
+	handle: function( event ) {
+		var all, handlers, namespaces, namespace, events;
+
+		event = arguments[0] = jQuery.event.fix( event || window.event );
+		event.currentTarget = this;
+
+		// Namespaced event handlers
+		all = event.type.indexOf(".") < 0 && !event.exclusive;
+
+		if ( !all ) {
+			namespaces = event.type.split(".");
+			event.type = namespaces.shift();
+			namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)");
+		}
+
+		var events = jQuery.data(this, "events"), handlers = events[ event.type ];
+
+		if ( events && handlers ) {
+			// Clone the handlers to prevent manipulation
+			handlers = handlers.slice(0);
+
+			for ( var j = 0, l = handlers.length; j < l; j++ ) {
+				var handleObj = handlers[ j ];
+
+				// Filter the functions by class
+				if ( all || namespace.test( handleObj.namespace ) ) {
+					// Pass in a reference to the handler function itself
+					// So that we can later remove it
+					event.handler = handleObj.handler;
+					event.data = handleObj.data;
+					event.handleObj = handleObj;
+	
+					var ret = handleObj.handler.apply( this, arguments );
+
+					if ( ret !== undefined ) {
+						event.result = ret;
+						if ( ret === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+
+					if ( event.isImmediatePropagationStopped() ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+
+	fix: function( event ) {
+		if ( event[ expando ] ) {
+			return event;
+		}
+
+		// store a copy of the original event object
+		// and "clone" to set read-only properties
+		var originalEvent = event;
+		event = jQuery.Event( originalEvent );
+
+		for ( var i = this.props.length, prop; i; ) {
+			prop = this.props[ --i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Fix target property, if necessary
+		if ( !event.target ) {
+			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
+		}
+
+		// check if target is a textnode (safari)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Add relatedTarget, if necessary
+		if ( !event.relatedTarget && event.fromElement ) {
+			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+		}
+
+		// Calculate pageX/Y if missing and clientX/Y available
+		if ( event.pageX == null && event.clientX != null ) {
+			var doc = document.documentElement, body = document.body;
+			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
+		}
+
+		// Add which for key events
+		if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
+			event.which = event.charCode || event.keyCode;
+		}
+
+		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+		if ( !event.metaKey && event.ctrlKey ) {
+			event.metaKey = event.ctrlKey;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		// Note: button is not normalized, so don't use it
+		if ( !event.which && event.button !== undefined ) {
+			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+		}
+
+		return event;
+	},
+
+	// Deprecated, use jQuery.guid instead
+	guid: 1E8,
+
+	// Deprecated, use jQuery.proxy instead
+	proxy: jQuery.proxy,
+
+	special: {
+		ready: {
+			// Make sure the ready event is setup
+			setup: jQuery.bindReady,
+			teardown: jQuery.noop
+		},
+
+		live: {
+			add: function( handleObj ) {
+				jQuery.event.add( this, handleObj.origType, jQuery.extend({}, handleObj, {handler: liveHandler}) ); 
+			},
+
+			remove: function( handleObj ) {
+				var remove = true,
+					type = handleObj.origType.replace(rnamespaces, "");
+				
+				jQuery.each( jQuery.data(this, "events").live || [], function() {
+					if ( type === this.origType.replace(rnamespaces, "") ) {
+						remove = false;
+						return false;
+					}
+				});
+
+				if ( remove ) {
+					jQuery.event.remove( this, handleObj.origType, liveHandler );
+				}
+			}
+
+		},
+
+		beforeunload: {
+			setup: function( data, namespaces, eventHandle ) {
+				// We only want to do this special case on windows
+				if ( this.setInterval ) {
+					this.onbeforeunload = eventHandle;
+				}
+
+				return false;
+			},
+			teardown: function( namespaces, eventHandle ) {
+				if ( this.onbeforeunload === eventHandle ) {
+					this.onbeforeunload = null;
+				}
+			}
+		}
+	}
+};
+
+var removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		elem.removeEventListener( type, handle, false );
+	} : 
+	function( elem, type, handle ) {
+		elem.detachEvent( "on" + type, handle );
+	};
+
+jQuery.Event = function( src ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !this.preventDefault ) {
+		return new jQuery.Event( src );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// timeStamp is buggy for some events on Firefox(#3843)
+	// So we won't rely on the native value
+	this.timeStamp = now();
+
+	// Mark it as fixed
+	this[ expando ] = true;
+};
+
+function returnFalse() {
+	return false;
+}
+function returnTrue() {
+	return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	preventDefault: function() {
+		this.isDefaultPrevented = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		
+		// if preventDefault exists run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+		}
+		// otherwise set the returnValue property of the original event to false (IE)
+		e.returnValue = false;
+	},
+	stopPropagation: function() {
+		this.isPropagationStopped = returnTrue;
+
+		var e = this.originalEvent;
+		if ( !e ) {
+			return;
+		}
+		// if stopPropagation exists run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+		// otherwise set the cancelBubble property of the original event to true (IE)
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		this.isImmediatePropagationStopped = returnTrue;
+		this.stopPropagation();
+	},
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse
+};
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function( event ) {
+	// Check if mouse(over|out) are still within the same parent element
+	var parent = event.relatedTarget;
+
+	// Firefox sometimes assigns relatedTarget a XUL element
+	// which we cannot access the parentNode property of
+	try {
+		// Traverse up the tree
+		while ( parent && parent !== this ) {
+			parent = parent.parentNode;
+		}
+
+		if ( parent !== this ) {
+			// set the correct event type
+			event.type = event.data;
+
+			// handle event if we actually just moused on to a non sub-element
+			jQuery.event.handle.apply( this, arguments );
+		}
+
+	// assuming we've left the element since we most likely mousedover a xul element
+	} catch(e) { }
+},
+
+// In case of event delegation, we only need to rename the event.type,
+// liveHandler will take care of the rest.
+delegate = function( event ) {
+	event.type = event.data;
+	jQuery.event.handle.apply( this, arguments );
+};
+
+// Create mouseenter and mouseleave events
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		setup: function( data ) {
+			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+		},
+		teardown: function( data ) {
+			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+		}
+	};
+});
+
+// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function( data, namespaces ) {
+			if ( this.nodeName.toLowerCase() !== "form" ) {
+				jQuery.event.add(this, "click.specialSubmit", function( e ) {
+					var elem = e.target, type = elem.type;
+
+					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+						return trigger( "submit", this, arguments );
+					}
+				});
+	 
+				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+					var elem = e.target, type = elem.type;
+
+					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+						return trigger( "submit", this, arguments );
+					}
+				});
+
+			} else {
+				return false;
+			}
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialSubmit" );
+		}
+	};
+
+}
+
+// change delegation, happens here so we have bind.
+if ( !jQuery.support.changeBubbles ) {
+
+	var formElems = /textarea|input|select/i,
+
+	changeFilters,
+
+	getVal = function( elem ) {
+		var type = elem.type, val = elem.value;
+
+		if ( type === "radio" || type === "checkbox" ) {
+			val = elem.checked;
+
+		} else if ( type === "select-multiple" ) {
+			val = elem.selectedIndex > -1 ?
+				jQuery.map( elem.options, function( elem ) {
+					return elem.selected;
+				}).join("-") :
+				"";
+
+		} else if ( elem.nodeName.toLowerCase() === "select" ) {
+			val = elem.selectedIndex;
+		}
+
+		return val;
+	},
+
+	testChange = function testChange( e ) {
+		var elem = e.target, data, val;
+
+		if ( !formElems.test( elem.nodeName ) || elem.readOnly ) {
+			return;
+		}
+
+		data = jQuery.data( elem, "_change_data" );
+		val = getVal(elem);
+
+		// the current data will be also retrieved by beforeactivate
+		if ( e.type !== "focusout" || elem.type !== "radio" ) {
+			jQuery.data( elem, "_change_data", val );
+		}
+		
+		if ( data === undefined || val === data ) {
+			return;
+		}
+
+		if ( data != null || val ) {
+			e.type = "change";
+			return jQuery.event.trigger( e, arguments[1], elem );
+		}
+	};
+
+	jQuery.event.special.change = {
+		filters: {
+			focusout: testChange, 
+
+			click: function( e ) {
+				var elem = e.target, type = elem.type;
+
+				if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
+					return testChange.call( this, e );
+				}
+			},
+
+			// Change has to be called before submit
+			// Keydown will be called before keypress, which is used in submit-event delegation
+			keydown: function( e ) {
+				var elem = e.target, type = elem.type;
+
+				if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
+					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+					type === "select-multiple" ) {
+					return testChange.call( this, e );
+				}
+			},
+
+			// Beforeactivate happens also before the previous element is blurred
+			// with this event you can't trigger a change event, but you can store
+			// information/focus[in] is not needed anymore
+			beforeactivate: function( e ) {
+				var elem = e.target;
+				jQuery.data( elem, "_change_data", getVal(elem) );
+			}
+		},
+
+		setup: function( data, namespaces ) {
+			if ( this.type === "file" ) {
+				return false;
+			}
+
+			for ( var type in changeFilters ) {
+				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+			}
+
+			return formElems.test( this.nodeName );
+		},
+
+		teardown: function( namespaces ) {
+			jQuery.event.remove( this, ".specialChange" );
+
+			return formElems.test( this.nodeName );
+		}
+	};
+
+	changeFilters = jQuery.event.special.change.filters;
+}
+
+function trigger( type, elem, args ) {
+	args[0].type = type;
+	return jQuery.event.handle.apply( elem, args );
+}
+
+// Create "bubbling" focus and blur events
+if ( document.addEventListener ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				this.addEventListener( orig, handler, true );
+			}, 
+			teardown: function() { 
+				this.removeEventListener( orig, handler, true );
+			}
+		};
+
+		function handler( e ) { 
+			e = jQuery.event.fix( e );
+			e.type = fix;
+			return jQuery.event.handle.call( this, e );
+		}
+	});
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+	jQuery.fn[ name ] = function( type, data, fn ) {
+		// Handle object literals
+		if ( typeof type === "object" ) {
+			for ( var key in type ) {
+				this[ name ](key, data, type[key], fn);
+			}
+			return this;
+		}
+		
+		if ( jQuery.isFunction( data ) ) {
+			fn = data;
+			data = undefined;
+		}
+
+		var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
+			jQuery( this ).unbind( event, handler );
+			return fn.apply( this, arguments );
+		}) : fn;
+
+		if ( type === "unload" && name !== "one" ) {
+			this.one( type, data, fn );
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				jQuery.event.add( this[i], type, handler, data );
+			}
+		}
+
+		return this;
+	};
+});
+
+jQuery.fn.extend({
+	unbind: function( type, fn ) {
+		// Handle object literals
+		if ( typeof type === "object" && !type.preventDefault ) {
+			for ( var key in type ) {
+				this.unbind(key, type[key]);
+			}
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				jQuery.event.remove( this[i], type, fn );
+			}
+		}
+
+		return this;
+	},
+	
+	delegate: function( selector, types, data, fn ) {
+		return this.live( types, data, fn, selector );
+	},
+	
+	undelegate: function( selector, types, fn ) {
+		if ( arguments.length === 0 ) {
+				return this.unbind( "live" );
+		
+		} else {
+			return this.die( types, null, fn, selector );
+		}
+	},
+	
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+
+	triggerHandler: function( type, data ) {
+		if ( this[0] ) {
+			var event = jQuery.Event( type );
+			event.preventDefault();
+			event.stopPropagation();
+			jQuery.event.trigger( event, data, this[0] );
+			return event.result;
+		}
+	},
+
+	toggle: function( fn ) {
+		// Save reference to arguments for access in closure
+		var args = arguments, i = 1;
+
+		// link all the functions, so any of them can unbind this click handler
+		while ( i < args.length ) {
+			jQuery.proxy( fn, args[ i++ ] );
+		}
+
+		return this.click( jQuery.proxy( fn, function( event ) {
+			// Figure out which function to execute
+			var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+			jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+			// Make sure that clicks stop
+			event.preventDefault();
+
+			// and execute the function
+			return args[ lastToggle ].apply( this, arguments ) || false;
+		}));
+	},
+
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+});
+
+var liveMap = {
+	focus: "focusin",
+	blur: "focusout",
+	mouseenter: "mouseover",
+	mouseleave: "mouseout"
+};
+
+jQuery.each(["live", "die"], function( i, name ) {
+	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+		var type, i = 0, match, namespaces, preType,
+			selector = origSelector || this.selector,
+			context = origSelector ? this : jQuery( this.context );
+
+		if ( jQuery.isFunction( data ) ) {
+			fn = data;
+			data = undefined;
+		}
+
+		types = (types || "").split(" ");
+
+		while ( (type = types[ i++ ]) != null ) {
+			match = rnamespaces.exec( type );
+			namespaces = "";
+
+			if ( match )  {
+				namespaces = match[0];
+				type = type.replace( rnamespaces, "" );
+			}
+
+			if ( type === "hover" ) {
+				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+				continue;
+			}
+
+			preType = type;
+
+			if ( type === "focus" || type === "blur" ) {
+				types.push( liveMap[ type ] + namespaces );
+				type = type + namespaces;
+
+			} else {
+				type = (liveMap[ type ] || type) + namespaces;
+			}
+
+			if ( name === "live" ) {
+				// bind live handler
+				context.each(function(){
+					jQuery.event.add( this, liveConvert( type, selector ),
+						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+				});
+
+			} else {
+				// unbind live handler
+				context.unbind( liveConvert( type, selector ), fn );
+			}
+		}
+		
+		return this;
+	}
+});
+
+function liveHandler( event ) {
+	var stop, elems = [], selectors = [], args = arguments,
+		related, match, handleObj, elem, j, i, l, data,
+		events = jQuery.data( this, "events" );
+
+	// Make sure we avoid non-left-click bubbling in Firefox (#3861)
+	if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
+		return;
+	}
+
+	event.liveFired = this;
+
+	var live = events.live.slice(0);
+
+	for ( j = 0; j < live.length; j++ ) {
+		handleObj = live[j];
+
+		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+			selectors.push( handleObj.selector );
+
+		} else {
+			live.splice( j--, 1 );
+		}
+	}
+
+	match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+	for ( i = 0, l = match.length; i < l; i++ ) {
+		for ( j = 0; j < live.length; j++ ) {
+			handleObj = live[j];
+
+			if ( match[i].selector === handleObj.selector ) {
+				elem = match[i].elem;
+				related = null;
+
+				// Those two events require additional checking
+				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+				}
+
+				if ( !related || related !== elem ) {
+					elems.push({ elem: elem, handleObj: handleObj });
+				}
+			}
+		}
+	}
+
+	for ( i = 0, l = elems.length; i < l; i++ ) {
+		match = elems[i];
+		event.currentTarget = match.elem;
+		event.data = match.handleObj.data;
+		event.handleObj = match.handleObj;
+
+		if ( match.handleObj.origHandler.apply( match.elem, args ) === false ) {
+			stop = false;
+			break;
+		}
+	}
+
+	return stop;
+}
+
+function liveConvert( type, selector ) {
+	return "live." + (type && type !== "*" ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&");
+}
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( fn ) {
+		return fn ? this.bind( name, fn ) : this.trigger( name );
+	};
+
+	if ( jQuery.attrFn ) {
+		jQuery.attrFn[ name ] = true;
+	}
+});
+
+// Prevent memory leaks in IE
+// Window isn't included so as not to unbind existing unload events
+// More info:
+//  - http://isaacschlueter.com/2006/10/msie-memory-leaks/
+if ( window.attachEvent && !window.addEventListener ) {
+	window.attachEvent("onunload", function() {
+		for ( var id in jQuery.cache ) {
+			if ( jQuery.cache[ id ].handle ) {
+				// Try/Catch is to handle iframes being unloaded, see #4280
+				try {
+					jQuery.event.remove( jQuery.cache[ id ].handle.elem );
+				} catch(e) {}
+			}
+		}
+	});
+}
+/*!
+ * Sizzle CSS Selector Engine - v1.0
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+	done = 0,
+	toString = Object.prototype.toString,
+	hasDuplicate = false,
+	baseHasDuplicate = true;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+//   Thus far that includes Google Chrome.
+[0, 0].sort(function(){
+	baseHasDuplicate = false;
+	return 0;
+});
+
+var Sizzle = function(selector, context, results, seed) {
+	results = results || [];
+	var origContext = context = context || document;
+
+	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+		return [];
+	}
+	
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context),
+		soFar = selector;
+	
+	// Reset the position of the chunker regexp (start from head)
+	while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) {
+		soFar = m[3];
+		
+		parts.push( m[1] );
+		
+		if ( m[2] ) {
+			extra = m[3];
+			break;
+		}
+	}
+
+	if ( parts.length > 1 && origPOS.exec( selector ) ) {
+		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+			set = posProcess( parts[0] + parts[1], context );
+		} else {
+			set = Expr.relative[ parts[0] ] ?
+				[ context ] :
+				Sizzle( parts.shift(), context );
+
+			while ( parts.length ) {
+				selector = parts.shift();
+
+				if ( Expr.relative[ selector ] ) {
+					selector += parts.shift();
+				}
+				
+				set = posProcess( selector, set );
+			}
+		}
+	} else {
+		// Take a shortcut and set the context if the root selector is an ID
+		// (but not if it'll be faster if the inner selector is an ID)
+		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+			var ret = Sizzle.find( parts.shift(), context, contextXML );
+			context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
+		}
+
+		if ( context ) {
+			var ret = seed ?
+				{ expr: parts.pop(), set: makeArray(seed) } :
+				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+			set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
+
+			if ( parts.length > 0 ) {
+				checkSet = makeArray(set);
+			} else {
+				prune = false;
+			}
+
+			while ( parts.length ) {
+				var cur = parts.pop(), pop = cur;
+
+				if ( !Expr.relative[ cur ] ) {
+					cur = "";
+				} else {
+					pop = parts.pop();
+				}
+
+				if ( pop == null ) {
+					pop = context;
+				}
+
+				Expr.relative[ cur ]( checkSet, pop, contextXML );
+			}
+		} else {
+			checkSet = parts = [];
+		}
+	}
+
+	if ( !checkSet ) {
+		checkSet = set;
+	}
+
+	if ( !checkSet ) {
+		Sizzle.error( cur || selector );
+	}
+
+	if ( toString.call(checkSet) === "[object Array]" ) {
+		if ( !prune ) {
+			results.push.apply( results, checkSet );
+		} else if ( context && context.nodeType === 1 ) {
+			for ( var i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
+					results.push( set[i] );
+				}
+			}
+		} else {
+			for ( var i = 0; checkSet[i] != null; i++ ) {
+				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+					results.push( set[i] );
+				}
+			}
+		}
+	} else {
+		makeArray( checkSet, results );
+	}
+
+	if ( extra ) {
+		Sizzle( extra, origContext, results, seed );
+		Sizzle.uniqueSort( results );
+	}
+
+	return results;
+};
+
+Sizzle.uniqueSort = function(results){
+	if ( sortOrder ) {
+		hasDuplicate = baseHasDuplicate;
+		results.sort(sortOrder);
+
+		if ( hasDuplicate ) {
+			for ( var i = 1; i < results.length; i++ ) {
+				if ( results[i] === results[i-1] ) {
+					results.splice(i--, 1);
+				}
+			}
+		}
+	}
+
+	return results;
+};
+
+Sizzle.matches = function(expr, set){
+	return Sizzle(expr, null, null, set);
+};
+
+Sizzle.find = function(expr, context, isXML){
+	var set, match;
+
+	if ( !expr ) {
+		return [];
+	}
+
+	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+		var type = Expr.order[i], match;
+		
+		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+			var left = match[1];
+			match.splice(1,1);
+
+			if ( left.substr( left.length - 1 ) !== "\\" ) {
+				match[1] = (match[1] || "").replace(/\\/g, "");
+				set = Expr.find[ type ]( match, context, isXML );
+				if ( set != null ) {
+					expr = expr.replace( Expr.match[ type ], "" );
+					break;
+				}
+			}
+		}
+	}
+
+	if ( !set ) {
+		set = context.getElementsByTagName("*");
+	}
+
+	return {set: set, expr: expr};
+};
+
+Sizzle.filter = function(expr, set, inplace, not){
+	var old = expr, result = [], curLoop = set, match, anyFound,
+		isXMLFilter = set && set[0] && isXML(set[0]);
+
+	while ( expr && set.length ) {
+		for ( var type in Expr.filter ) {
+			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+				var filter = Expr.filter[ type ], found, item, left = match[1];
+				anyFound = false;
+
+				match.splice(1,1);
+
+				if ( left.substr( left.length - 1 ) === "\\" ) {
+					continue;
+				}
+
+				if ( curLoop === result ) {
+					result = [];
+				}
+
+				if ( Expr.preFilter[ type ] ) {
+					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+					if ( !match ) {
+						anyFound = found = true;
+					} else if ( match === true ) {
+						continue;
+					}
+				}
+
+				if ( match ) {
+					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+						if ( item ) {
+							found = filter( item, match, i, curLoop );
+							var pass = not ^ !!found;
+
+							if ( inplace && found != null ) {
+								if ( pass ) {
+									anyFound = true;
+								} else {
+									curLoop[i] = false;
+								}
+							} else if ( pass ) {
+								result.push( item );
+								anyFound = true;
+							}
+						}
+					}
+				}
+
+				if ( found !== undefined ) {
+					if ( !inplace ) {
+						curLoop = result;
+					}
+
+					expr = expr.replace( Expr.match[ type ], "" );
+
+					if ( !anyFound ) {
+						return [];
+					}
+
+					break;
+				}
+			}
+		}
+
+		// Improper expression
+		if ( expr === old ) {
+			if ( anyFound == null ) {
+				Sizzle.error( expr );
+			} else {
+				break;
+			}
+		}
+
+		old = expr;
+	}
+
+	return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+	throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+	order: [ "ID", "NAME", "TAG" ],
+	match: {
+		ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+		CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,
+		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+		TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,
+		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
+		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
+		PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+	},
+	leftMatch: {},
+	attrMap: {
+		"class": "className",
+		"for": "htmlFor"
+	},
+	attrHandle: {
+		href: function(elem){
+			return elem.getAttribute("href");
+		}
+	},
+	relative: {
+		"+": function(checkSet, part){
+			var isPartStr = typeof part === "string",
+				isTag = isPartStr && !/\W/.test(part),
+				isPartStrNotTag = isPartStr && !isTag;
+
+			if ( isTag ) {
+				part = part.toLowerCase();
+			}
+
+			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+				if ( (elem = checkSet[i]) ) {
+					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+						elem || false :
+						elem === part;
+				}
+			}
+
+			if ( isPartStrNotTag ) {
+				Sizzle.filter( part, checkSet, true );
+			}
+		},
+		">": function(checkSet, part){
+			var isPartStr = typeof part === "string";
+
+			if ( isPartStr && !/\W/.test(part) ) {
+				part = part.toLowerCase();
+
+				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+					var elem = checkSet[i];
+					if ( elem ) {
+						var parent = elem.parentNode;
+						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+					}
+				}
+			} else {
+				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+					var elem = checkSet[i];
+					if ( elem ) {
+						checkSet[i] = isPartStr ?
+							elem.parentNode :
+							elem.parentNode === part;
+					}
+				}
+
+				if ( isPartStr ) {
+					Sizzle.filter( part, checkSet, true );
+				}
+			}
+		},
+		"": function(checkSet, part, isXML){
+			var doneName = done++, checkFn = dirCheck;
+
+			if ( typeof part === "string" && !/\W/.test(part) ) {
+				var nodeCheck = part = part.toLowerCase();
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
+		},
+		"~": function(checkSet, part, isXML){
+			var doneName = done++, checkFn = dirCheck;
+
+			if ( typeof part === "string" && !/\W/.test(part) ) {
+				var nodeCheck = part = part.toLowerCase();
+				checkFn = dirNodeCheck;
+			}
+
+			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
+		}
+	},
+	find: {
+		ID: function(match, context, isXML){
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				return m ? [m] : [];
+			}
+		},
+		NAME: function(match, context){
+			if ( typeof context.getElementsByName !== "undefined" ) {
+				var ret = [], results = context.getElementsByName(match[1]);
+
+				for ( var i = 0, l = results.length; i < l; i++ ) {
+					if ( results[i].getAttribute("name") === match[1] ) {
+						ret.push( results[i] );
+					}
+				}
+
+				return ret.length === 0 ? null : ret;
+			}
+		},
+		TAG: function(match, context){
+			return context.getElementsByTagName(match[1]);
+		}
+	},
+	preFilter: {
+		CLASS: function(match, curLoop, inplace, result, not, isXML){
+			match = " " + match[1].replace(/\\/g, "") + " ";
+
+			if ( isXML ) {
+				return match;
+			}
+
+			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+				if ( elem ) {
+					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
+						if ( !inplace ) {
+							result.push( elem );
+						}
+					} else if ( inplace ) {
+						curLoop[i] = false;
+					}
+				}
+			}
+
+			return false;
+		},
+		ID: function(match){
+			return match[1].replace(/\\/g, "");
+		},
+		TAG: function(match, curLoop){
+			return match[1].toLowerCase();
+		},
+		CHILD: function(match){
+			if ( match[1] === "nth" ) {
+				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+				// calculate the numbers (first)n+(last) including if they are negative
+				match[2] = (test[1] + (test[2] || 1)) - 0;
+				match[3] = test[3] - 0;
+			}
+
+			// TODO: Move to normal caching system
+			match[0] = done++;
+
+			return match;
+		},
+		ATTR: function(match, curLoop, inplace, result, not, isXML){
+			var name = match[1].replace(/\\/g, "");
+			
+			if ( !isXML && Expr.attrMap[name] ) {
+				match[1] = Expr.attrMap[name];
+			}
+
+			if ( match[2] === "~=" ) {
+				match[4] = " " + match[4] + " ";
+			}
+
+			return match;
+		},
+		PSEUDO: function(match, curLoop, inplace, result, not){
+			if ( match[1] === "not" ) {
+				// If we're dealing with a complex expression, or a simple one
+				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+					match[3] = Sizzle(match[3], null, null, curLoop);
+				} else {
+					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+					if ( !inplace ) {
+						result.push.apply( result, ret );
+					}
+					return false;
+				}
+			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+				return true;
+			}
+			
+			return match;
+		},
+		POS: function(match){
+			match.unshift( true );
+			return match;
+		}
+	},
+	filters: {
+		enabled: function(elem){
+			return elem.disabled === false && elem.type !== "hidden";
+		},
+		disabled: function(elem){
+			return elem.disabled === true;
+		},
+		checked: function(elem){
+			return elem.checked === true;
+		},
+		selected: function(elem){
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			elem.parentNode.selectedIndex;
+			return elem.selected === true;
+		},
+		parent: function(elem){
+			return !!elem.firstChild;
+		},
+		empty: function(elem){
+			return !elem.firstChild;
+		},
+		has: function(elem, i, match){
+			return !!Sizzle( match[3], elem ).length;
+		},
+		header: function(elem){
+			return /h\d/i.test( elem.nodeName );
+		},
+		text: function(elem){
+			return "text" === elem.type;
+		},
+		radio: function(elem){
+			return "radio" === elem.type;
+		},
+		checkbox: function(elem){
+			return "checkbox" === elem.type;
+		},
+		file: function(elem){
+			return "file" === elem.type;
+		},
+		password: function(elem){
+			return "password" === elem.type;
+		},
+		submit: function(elem){
+			return "submit" === elem.type;
+		},
+		image: function(elem){
+			return "image" === elem.type;
+		},
+		reset: function(elem){
+			return "reset" === elem.type;
+		},
+		button: function(elem){
+			return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
+		},
+		input: function(elem){
+			return /input|select|textarea|button/i.test(elem.nodeName);
+		}
+	},
+	setFilters: {
+		first: function(elem, i){
+			return i === 0;
+		},
+		last: function(elem, i, match, array){
+			return i === array.length - 1;
+		},
+		even: function(elem, i){
+			return i % 2 === 0;
+		},
+		odd: function(elem, i){
+			return i % 2 === 1;
+		},
+		lt: function(elem, i, match){
+			return i < match[3] - 0;
+		},
+		gt: function(elem, i, match){
+			return i > match[3] - 0;
+		},
+		nth: function(elem, i, match){
+			return match[3] - 0 === i;
+		},
+		eq: function(elem, i, match){
+			return match[3] - 0 === i;
+		}
+	},
+	filter: {
+		PSEUDO: function(elem, match, i, array){
+			var name = match[1], filter = Expr.filters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			} else if ( name === "contains" ) {
+				return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
+			} else if ( name === "not" ) {
+				var not = match[3];
+
+				for ( var i = 0, l = not.length; i < l; i++ ) {
+					if ( not[i] === elem ) {
+						return false;
+					}
+				}
+
+				return true;
+			} else {
+				Sizzle.error( "Syntax error, unrecognized expression: " + name );
+			}
+		},
+		CHILD: function(elem, match){
+			var type = match[1], node = elem;
+			switch (type) {
+				case 'only':
+				case 'first':
+					while ( (node = node.previousSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+					if ( type === "first" ) { 
+						return true; 
+					}
+					node = elem;
+				case 'last':
+					while ( (node = node.nextSibling) )	 {
+						if ( node.nodeType === 1 ) { 
+							return false; 
+						}
+					}
+					return true;
+				case 'nth':
+					var first = match[2], last = match[3];
+
+					if ( first === 1 && last === 0 ) {
+						return true;
+					}
+					
+					var doneName = match[0],
+						parent = elem.parentNode;
+	
+					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+						var count = 0;
+						for ( node = parent.firstChild; node; node = node.nextSibling ) {
+							if ( node.nodeType === 1 ) {
+								node.nodeIndex = ++count;
+							}
+						} 
+						parent.sizcache = doneName;
+					}
+					
+					var diff = elem.nodeIndex - last;
+					if ( first === 0 ) {
+						return diff === 0;
+					} else {
+						return ( diff % first === 0 && diff / first >= 0 );
+					}
+			}
+		},
+		ID: function(elem, match){
+			return elem.nodeType === 1 && elem.getAttribute("id") === match;
+		},
+		TAG: function(elem, match){
+			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+		},
+		CLASS: function(elem, match){
+			return (" " + (elem.className || elem.getAttribute("class")) + " ")
+				.indexOf( match ) > -1;
+		},
+		ATTR: function(elem, match){
+			var name = match[1],
+				result = Expr.attrHandle[ name ] ?
+					Expr.attrHandle[ name ]( elem ) :
+					elem[ name ] != null ?
+						elem[ name ] :
+						elem.getAttribute( name ),
+				value = result + "",
+				type = match[2],
+				check = match[4];
+
+			return result == null ?
+				type === "!=" :
+				type === "=" ?
+				value === check :
+				type === "*=" ?
+				value.indexOf(check) >= 0 :
+				type === "~=" ?
+				(" " + value + " ").indexOf(check) >= 0 :
+				!check ?
+				value && result !== false :
+				type === "!=" ?
+				value !== check :
+				type === "^=" ?
+				value.indexOf(check) === 0 :
+				type === "$=" ?
+				value.substr(value.length - check.length) === check :
+				type === "|=" ?
+				value === check || value.substr(0, check.length + 1) === check + "-" :
+				false;
+		},
+		POS: function(elem, match, i, array){
+			var name = match[2], filter = Expr.setFilters[ name ];
+
+			if ( filter ) {
+				return filter( elem, i, match, array );
+			}
+		}
+	}
+};
+
+var origPOS = Expr.match.POS;
+
+for ( var type in Expr.match ) {
+	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
+	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, function(all, num){
+		return "\\" + (num - 0 + 1);
+	}));
+}
+
+var makeArray = function(array, results) {
+	array = Array.prototype.slice.call( array, 0 );
+
+	if ( results ) {
+		results.push.apply( results, array );
+		return results;
+	}
+	
+	return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch(e){
+	makeArray = function(array, results) {
+		var ret = results || [];
+
+		if ( toString.call(array) === "[object Array]" ) {
+			Array.prototype.push.apply( ret, array );
+		} else {
+			if ( typeof array.length === "number" ) {
+				for ( var i = 0, l = array.length; i < l; i++ ) {
+					ret.push( array[i] );
+				}
+			} else {
+				for ( var i = 0; array[i]; i++ ) {
+					ret.push( array[i] );
+				}
+			}
+		}
+
+		return ret;
+	};
+}
+
+var sortOrder;
+
+if ( document.documentElement.compareDocumentPosition ) {
+	sortOrder = function( a, b ) {
+		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+			if ( a == b ) {
+				hasDuplicate = true;
+			}
+			return a.compareDocumentPosition ? -1 : 1;
+		}
+
+		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
+		if ( ret === 0 ) {
+			hasDuplicate = true;
+		}
+		return ret;
+	};
+} else if ( "sourceIndex" in document.documentElement ) {
+	sortOrder = function( a, b ) {
+		if ( !a.sourceIndex || !b.sourceIndex ) {
+			if ( a == b ) {
+				hasDuplicate = true;
+			}
+			return a.sourceIndex ? -1 : 1;
+		}
+
+		var ret = a.sourceIndex - b.sourceIndex;
+		if ( ret === 0 ) {
+			hasDuplicate = true;
+		}
+		return ret;
+	};
+} else if ( document.createRange ) {
+	sortOrder = function( a, b ) {
+		if ( !a.ownerDocument || !b.ownerDocument ) {
+			if ( a == b ) {
+				hasDuplicate = true;
+			}
+			return a.ownerDocument ? -1 : 1;
+		}
+
+		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
+		aRange.setStart(a, 0);
+		aRange.setEnd(a, 0);
+		bRange.setStart(b, 0);
+		bRange.setEnd(b, 0);
+		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
+		if ( ret === 0 ) {
+			hasDuplicate = true;
+		}
+		return ret;
+	};
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+function getText( elems ) {
+	var ret = "", elem;
+
+	for ( var i = 0; elems[i]; i++ ) {
+		elem = elems[i];
+
+		// Get the text from text nodes and CDATA nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+			ret += elem.nodeValue;
+
+		// Traverse everything else, except comment nodes
+		} else if ( elem.nodeType !== 8 ) {
+			ret += getText( elem.childNodes );
+		}
+	}
+
+	return ret;
+}
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+	// We're going to inject a fake input element with a specified name
+	var form = document.createElement("div"),
+		id = "script" + (new Date).getTime();
+	form.innerHTML = "<a name='" + id + "'/>";
+
+	// Inject it into the root element, check its status, and remove it quickly
+	var root = document.documentElement;
+	root.insertBefore( form, root.firstChild );
+
+	// The workaround has to do additional checks after a getElementById
+	// Which slows things down for other browsers (hence the branching)
+	if ( document.getElementById( id ) ) {
+		Expr.find.ID = function(match, context, isXML){
+			if ( typeof context.getElementById !== "undefined" && !isXML ) {
+				var m = context.getElementById(match[1]);
+				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
+			}
+		};
+
+		Expr.filter.ID = function(elem, match){
+			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+			return elem.nodeType === 1 && node && node.nodeValue === match;
+		};
+	}
+
+	root.removeChild( form );
+	root = form = null; // release memory in IE
+})();
+
+(function(){
+	// Check to see if the browser returns only elements
+	// when doing getElementsByTagName("*")
+
+	// Create a fake element
+	var div = document.createElement("div");
+	div.appendChild( document.createComment("") );
+
+	// Make sure no comments are found
+	if ( div.getElementsByTagName("*").length > 0 ) {
+		Expr.find.TAG = function(match, context){
+			var results = context.getElementsByTagName(match[1]);
+
+			// Filter out possible comments
+			if ( match[1] === "*" ) {
+				var tmp = [];
+
+				for ( var i = 0; results[i]; i++ ) {
+					if ( results[i].nodeType === 1 ) {
+						tmp.push( results[i] );
+					}
+				}
+
+				results = tmp;
+			}
+
+			return results;
+		};
+	}
+
+	// Check to see if an attribute returns normalized href attributes
+	div.innerHTML = "<a href='#'></a>";
+	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+			div.firstChild.getAttribute("href") !== "#" ) {
+		Expr.attrHandle.href = function(elem){
+			return elem.getAttribute("href", 2);
+		};
+	}
+
+	div = null; // release memory in IE
+})();
+
+if ( document.querySelectorAll ) {
+	(function(){
+		var oldSizzle = Sizzle, div = document.createElement("div");
+		div.innerHTML = "<p class='TEST'></p>";
+
+		// Safari can't handle uppercase or unicode characters when
+		// in quirks mode.
+		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+			return;
+		}
+	
+		Sizzle = function(query, context, extra, seed){
+			context = context || document;
+
+			// Only use querySelectorAll on non-XML documents
+			// (ID selectors don't work in non-HTML documents)
+			if ( !seed && context.nodeType === 9 && !isXML(context) ) {
+				try {
+					return makeArray( context.querySelectorAll(query), extra );
+				} catch(e){}
+			}
+		
+			return oldSizzle(query, context, extra, seed);
+		};
+
+		for ( var prop in oldSizzle ) {
+			Sizzle[ prop ] = oldSizzle[ prop ];
+		}
+
+		div = null; // release memory in IE
+	})();
+}
+
+(function(){
+	var div = document.createElement("div");
+
+	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+	// Opera can't find a second classname (in 9.6)
+	// Also, make sure that getElementsByClassName actually exists
+	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+		return;
+	}
+
+	// Safari caches class attributes, doesn't catch changes (in 3.2)
+	div.lastChild.className = "e";
+
+	if ( div.getElementsByClassName("e").length === 1 ) {
+		return;
+	}
+	
+	Expr.order.splice(1, 0, "CLASS");
+	Expr.find.CLASS = function(match, context, isXML) {
+		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+			return context.getElementsByClassName(match[1]);
+		}
+	};
+
+	div = null; // release memory in IE
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+		if ( elem ) {
+			elem = elem[dir];
+			var match = false;
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 && !isXML ){
+					elem.sizcache = doneName;
+					elem.sizset = i;
+				}
+
+				if ( elem.nodeName.toLowerCase() === cur ) {
+					match = elem;
+					break;
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+		var elem = checkSet[i];
+		if ( elem ) {
+			elem = elem[dir];
+			var match = false;
+
+			while ( elem ) {
+				if ( elem.sizcache === doneName ) {
+					match = checkSet[elem.sizset];
+					break;
+				}
+
+				if ( elem.nodeType === 1 ) {
+					if ( !isXML ) {
+						elem.sizcache = doneName;
+						elem.sizset = i;
+					}
+					if ( typeof cur !== "string" ) {
+						if ( elem === cur ) {
+							match = true;
+							break;
+						}
+
+					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+						match = elem;
+						break;
+					}
+				}
+
+				elem = elem[dir];
+			}
+
+			checkSet[i] = match;
+		}
+	}
+}
+
+var contains = document.compareDocumentPosition ? function(a, b){
+	return !!(a.compareDocumentPosition(b) & 16);
+} : function(a, b){
+	return a !== b && (a.contains ? a.contains(b) : true);
+};
+
+var isXML = function(elem){
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833) 
+	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function(selector, context){
+	var tmpSet = [], later = "", match,
+		root = context.nodeType ? [context] : context;
+
+	// Position selectors must be done after the filter
+	// And so must :not(positional) so we move all PSEUDOs to the end
+	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+		later += match[0];
+		selector = selector.replace( Expr.match.PSEUDO, "" );
+	}
+
+	selector = Expr.relative[selector] ? selector + "*" : selector;
+
+	for ( var i = 0, l = root.length; i < l; i++ ) {
+		Sizzle( selector, root[i], tmpSet );
+	}
+
+	return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = getText;
+jQuery.isXMLDoc = isXML;
+jQuery.contains = contains;
+
+return;
+
+window.Sizzle = Sizzle;
+
+})();
+var runtil = /Until$/,
+	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+	// Note: This RegExp should be improved, or likely pulled from Sizzle
+	rmultiselector = /,/,
+	slice = Array.prototype.slice;
+
+// Implement the identical functionality for filter and not
+var winnow = function( elements, qualifier, keep ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			return !!qualifier.call( elem, i, elem ) === keep;
+		});
+
+	} else if ( qualifier.nodeType ) {
+		return jQuery.grep(elements, function( elem, i ) {
+			return (elem === qualifier) === keep;
+		});
+
+	} else if ( typeof qualifier === "string" ) {
+		var filtered = jQuery.grep(elements, function( elem ) {
+			return elem.nodeType === 1;
+		});
+
+		if ( isSimple.test( qualifier ) ) {
+			return jQuery.filter(qualifier, filtered, !keep);
+		} else {
+			qualifier = jQuery.filter( qualifier, filtered );
+		}
+	}
+
+	return jQuery.grep(elements, function( elem, i ) {
+		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+	});
+};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var ret = this.pushStack( "", "find", selector ), length = 0;
+
+		for ( var i = 0, l = this.length; i < l; i++ ) {
+			length = ret.length;
+			jQuery.find( selector, this[i], ret );
+
+			if ( i > 0 ) {
+				// Make sure that the results are unique
+				for ( var n = length; n < ret.length; n++ ) {
+					for ( var r = 0; r < length; r++ ) {
+						if ( ret[r] === ret[n] ) {
+							ret.splice(n--, 1);
+							break;
+						}
+					}
+				}
+			}
+		}
+
+		return ret;
+	},
+
+	has: function( target ) {
+		var targets = jQuery( target );
+		return this.filter(function() {
+			for ( var i = 0, l = targets.length; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector, false), "not", selector);
+	},
+
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector, true), "filter", selector );
+	},
+	
+	is: function( selector ) {
+		return !!selector && jQuery.filter( selector, this ).length > 0;
+	},
+
+	closest: function( selectors, context ) {
+		if ( jQuery.isArray( selectors ) ) {
+			var ret = [], cur = this[0], match, matches = {}, selector;
+
+			if ( cur && selectors.length ) {
+				for ( var i = 0, l = selectors.length; i < l; i++ ) {
+					selector = selectors[i];
+
+					if ( !matches[selector] ) {
+						matches[selector] = jQuery.expr.match.POS.test( selector ) ? 
+							jQuery( selector, context || this.context ) :
+							selector;
+					}
+				}
+
+				while ( cur && cur.ownerDocument && cur !== context ) {
+					for ( selector in matches ) {
+						match = matches[selector];
+
+						if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
+							ret.push({ selector: selector, elem: cur });
+							delete matches[selector];
+						}
+					}
+					cur = cur.parentNode;
+				}
+			}
+
+			return ret;
+		}
+
+		var pos = jQuery.expr.match.POS.test( selectors ) ? 
+			jQuery( selectors, context || this.context ) : null;
+
+		return this.map(function( i, cur ) {
+			while ( cur && cur.ownerDocument && cur !== context ) {
+				if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) {
+					return cur;
+				}
+				cur = cur.parentNode;
+			}
+			return null;
+		});
+	},
+	
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+		if ( !elem || typeof elem === "string" ) {
+			return jQuery.inArray( this[0],
+				// If it receives a string, the selector is used
+				// If it receives nothing, the siblings are used
+				elem ? jQuery( elem ) : this.parent().children() );
+		}
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		var set = typeof selector === "string" ?
+				jQuery( selector, context || this.context ) :
+				jQuery.makeArray( selector ),
+			all = jQuery.merge( this.get(), set );
+
+		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+			all :
+			jQuery.unique( all ) );
+	},
+
+	andSelf: function() {
+		return this.add( this.prevObject );
+	}
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+	return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return jQuery.nth( elem, 2, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return jQuery.nth( elem, 2, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( elem.parentNode.firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.makeArray( elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+		
+		if ( !runtil.test( name ) ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		ret = this.length > 1 ? jQuery.unique( ret ) : ret;
+
+		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+			ret = ret.reverse();
+		}
+
+		return this.pushStack( ret, name, slice.call(arguments).join(",") );
+	};
+});
+
+jQuery.extend({
+	filter: function( expr, elems, not ) {
+		if ( not ) {
+			expr = ":not(" + expr + ")";
+		}
+
+		return jQuery.find.matches(expr, elems);
+	},
+	
+	dir: function( elem, dir, until ) {
+		var matched = [], cur = elem[dir];
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	nth: function( cur, result, dir, elem ) {
+		result = result || 1;
+		var num = 0;
+
+		for ( ; cur; cur = cur[dir] ) {
+			if ( cur.nodeType === 1 && ++num === result ) {
+				break;
+			}
+		}
+
+		return cur;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g,
+	rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnocache = /<script|<object|<embed|<option|<style/i,
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,  // checked="checked" or checked (html5)
+	fcloseTag = function( all, front, tag ) {
+		return rselfClosing.test( tag ) ?
+			all :
+			front + "></" + tag + ">";
+	},
+	wrapMap = {
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+		legend: [ 1, "<fieldset>", "</fieldset>" ],
+		thead: [ 1, "<table>", "</table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+		area: [ 1, "<map>", "</map>" ],
+		_default: [ 0, "", "" ]
+	};
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+	wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+	text: function( text ) {
+		if ( jQuery.isFunction(text) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				self.text( text.call(this, i, self.text()) );
+			});
+		}
+
+		if ( typeof text !== "object" && text !== undefined ) {
+			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+		}
+
+		return jQuery.text( this );
+	},
+
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append(this);
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ), contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		return this.each(function() {
+			jQuery( this ).wrapAll( html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	},
+
+	append: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip(arguments, true, function( elem ) {
+			if ( this.nodeType === 1 ) {
+				this.insertBefore( elem, this.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this );
+			});
+		} else if ( arguments.length ) {
+			var set = jQuery(arguments[0]);
+			set.push.apply( set, this.toArray() );
+			return this.pushStack( set, "before", arguments );
+		}
+	},
+
+	after: function() {
+		if ( this[0] && this[0].parentNode ) {
+			return this.domManip(arguments, false, function( elem ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			});
+		} else if ( arguments.length ) {
+			var set = this.pushStack( this, "after", arguments );
+			set.push.apply( set, jQuery(arguments[0]).toArray() );
+			return set;
+		}
+	},
+	
+	// keepData is for internal use only--do not document
+	remove: function( selector, keepData ) {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+				if ( !keepData && elem.nodeType === 1 ) {
+					jQuery.cleanData( elem.getElementsByTagName("*") );
+					jQuery.cleanData( [ elem ] );
+				}
+
+				if ( elem.parentNode ) {
+					 elem.parentNode.removeChild( elem );
+				}
+			}
+		}
+		
+		return this;
+	},
+
+	empty: function() {
+		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( elem.getElementsByTagName("*") );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+		}
+		
+		return this;
+	},
+
+	clone: function( events ) {
+		// Do the clone
+		var ret = this.map(function() {
+			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
+				// IE copies events bound via attachEvent when
+				// using cloneNode. Calling detachEvent on the
+				// clone will also remove the events from the orignal
+				// In order to get around this, we use innerHTML.
+				// Unfortunately, this means some modifications to
+				// attributes in IE that are actually only stored
+				// as properties will not be copied (such as the
+				// the name attribute on an input).
+				var html = this.outerHTML, ownerDocument = this.ownerDocument;
+				if ( !html ) {
+					var div = ownerDocument.createElement("div");
+					div.appendChild( this.cloneNode(true) );
+					html = div.innerHTML;
+				}
+
+				return jQuery.clean([html.replace(rinlinejQuery, "")
+					// Handle the case in IE 8 where action=/test/> self-closes a tag
+					.replace(/=([^="'>\s]+\/)>/g, '="$1">')
+					.replace(rleadingWhitespace, "")], ownerDocument)[0];
+			} else {
+				return this.cloneNode(true);
+			}
+		});
+
+		// Copy the events from the original to the clone
+		if ( events === true ) {
+			cloneCopyEvent( this, ret );
+			cloneCopyEvent( this.find("*"), ret.find("*") );
+		}
+
+		// Return the cloned set
+		return ret;
+	},
+
+	html: function( value ) {
+		if ( value === undefined ) {
+			return this[0] && this[0].nodeType === 1 ?
+				this[0].innerHTML.replace(rinlinejQuery, "") :
+				null;
+
+		// See if we can take a shortcut and just use innerHTML
+		} else if ( typeof value === "string" && !rnocache.test( value ) &&
+			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+			value = value.replace(rxhtmlTag, fcloseTag);
+
+			try {
+				for ( var i = 0, l = this.length; i < l; i++ ) {
+					// Remove element nodes and prevent memory leaks
+					if ( this[i].nodeType === 1 ) {
+						jQuery.cleanData( this[i].getElementsByTagName("*") );
+						this[i].innerHTML = value;
+					}
+				}
+
+			// If using innerHTML throws an exception, use the fallback method
+			} catch(e) {
+				this.empty().append( value );
+			}
+
+		} else if ( jQuery.isFunction( value ) ) {
+			this.each(function(i){
+				var self = jQuery(this), old = self.html();
+				self.empty().append(function(){
+					return value.call( this, i, old );
+				});
+			});
+
+		} else {
+			this.empty().append( value );
+		}
+
+		return this;
+	},
+
+	replaceWith: function( value ) {
+		if ( this[0] && this[0].parentNode ) {
+			// Make sure that the elements are removed from the DOM before they are inserted
+			// this can help fix replacing a parent with child elements
+			if ( jQuery.isFunction( value ) ) {
+				return this.each(function(i) {
+					var self = jQuery(this), old = self.html();
+					self.replaceWith( value.call( this, i, old ) );
+				});
+			}
+
+			if ( typeof value !== "string" ) {
+				value = jQuery(value).detach();
+			}
+
+			return this.each(function() {
+				var next = this.nextSibling, parent = this.parentNode;
+
+				jQuery(this).remove();
+
+				if ( next ) {
+					jQuery(next).before( value );
+				} else {
+					jQuery(parent).append( value );
+				}
+			});
+		} else {
+			return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
+		}
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, table, callback ) {
+		var results, first, value = args[0], scripts = [], fragment, parent;
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+			return this.each(function() {
+				jQuery(this).domManip( args, table, callback, true );
+			});
+		}
+
+		if ( jQuery.isFunction(value) ) {
+			return this.each(function(i) {
+				var self = jQuery(this);
+				args[0] = value.call(this, i, table ? self.html() : undefined);
+				self.domManip( args, table, callback );
+			});
+		}
+
+		if ( this[0] ) {
+			parent = value && value.parentNode;
+
+			// If we're in a fragment, just use that instead of building a new one
+			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+				results = { fragment: parent };
+
+			} else {
+				results = buildFragment( args, this, scripts );
+			}
+			
+			fragment = results.fragment;
+			
+			if ( fragment.childNodes.length === 1 ) {
+				first = fragment = fragment.firstChild;
+			} else {
+				first = fragment.firstChild;
+			}
+
+			if ( first ) {
+				table = table && jQuery.nodeName( first, "tr" );
+
+				for ( var i = 0, l = this.length; i < l; i++ ) {
+					callback.call(
+						table ?
+							root(this[i], first) :
+							this[i],
+						i > 0 || results.cacheable || this.length > 1  ?
+							fragment.cloneNode(true) :
+							fragment
+					);
+				}
+			}
+
+			if ( scripts.length ) {
+				jQuery.each( scripts, evalScript );
+			}
+		}
+
+		return this;
+
+		function root( elem, cur ) {
+			return jQuery.nodeName(elem, "table") ?
+				(elem.getElementsByTagName("tbody")[0] ||
+				elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+				elem;
+		}
+	}
+});
+
+function cloneCopyEvent(orig, ret) {
+	var i = 0;
+
+	ret.each(function() {
+		if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
+			return;
+		}
+
+		var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;
+
+		if ( events ) {
+			delete curData.handle;
+			curData.events = {};
+
+			for ( var type in events ) {
+				for ( var handler in events[ type ] ) {
+					jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
+				}
+			}
+		}
+	});
+}
+
+function buildFragment( args, nodes, scripts ) {
+	var fragment, cacheable, cacheresults,
+		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
+
+	// Only cache "small" (1/2 KB) strings that are associated with the main document
+	// Cloning options loses the selected state, so don't cache them
+	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+		!rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+
+		cacheable = true;
+		cacheresults = jQuery.fragments[ args[0] ];
+		if ( cacheresults ) {
+			if ( cacheresults !== 1 ) {
+				fragment = cacheresults;
+			}
+		}
+	}
+
+	if ( !fragment ) {
+		fragment = doc.createDocumentFragment();
+		jQuery.clean( args, doc, fragment, scripts );
+	}
+
+	if ( cacheable ) {
+		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+	}
+
+	return { fragment: fragment, cacheable: cacheable };
+}
+
+jQuery.fragments = {};
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var ret = [], insert = jQuery( selector ),
+			parent = this.length === 1 && this[0].parentNode;
+		
+		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+			insert[ original ]( this[0] );
+			return this;
+			
+		} else {
+			for ( var i = 0, l = insert.length; i < l; i++ ) {
+				var elems = (i > 0 ? this.clone(true) : this).get();
+				jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
+				ret = ret.concat( elems );
+			}
+		
+			return this.pushStack( ret, name, insert.selector );
+		}
+	};
+});
+
+jQuery.extend({
+	clean: function( elems, context, fragment, scripts ) {
+		context = context || document;
+
+		// !context.createElement fails in IE with an error but returns typeof 'object'
+		if ( typeof context.createElement === "undefined" ) {
+			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+		}
+
+		var ret = [];
+
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			if ( typeof elem === "number" ) {
+				elem += "";
+			}
+
+			if ( !elem ) {
+				continue;
+			}
+
+			// Convert html string into DOM nodes
+			if ( typeof elem === "string" && !rhtml.test( elem ) ) {
+				elem = context.createTextNode( elem );
+
+			} else if ( typeof elem === "string" ) {
+				// Fix "XHTML"-style tags in all browsers
+				elem = elem.replace(rxhtmlTag, fcloseTag);
+
+				// Trim whitespace, otherwise indexOf won't work as expected
+				var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+					wrap = wrapMap[ tag ] || wrapMap._default,
+					depth = wrap[0],
+					div = context.createElement("div");
+
+				// Go to html and back, then peel off extra wrappers
+				div.innerHTML = wrap[1] + elem + wrap[2];
+
+				// Move to the right depth
+				while ( depth-- ) {
+					div = div.lastChild;
+				}
+
+				// Remove IE's autoinserted <tbody> from table fragments
+				if ( !jQuery.support.tbody ) {
+
+					// String was a <table>, *may* have spurious <tbody>
+					var hasBody = rtbody.test(elem),
+						tbody = tag === "table" && !hasBody ?
+							div.firstChild && div.firstChild.childNodes :
+
+							// String was a bare <thead> or <tfoot>
+							wrap[1] === "<table>" && !hasBody ?
+								div.childNodes :
+								[];
+
+					for ( var j = tbody.length - 1; j >= 0 ; --j ) {
+						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+							tbody[ j ].parentNode.removeChild( tbody[ j ] );
+						}
+					}
+
+				}
+
+				// IE completely kills leading whitespace when innerHTML is used
+				if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+					div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+				}
+
+				elem = div.childNodes;
+			}
+
+			if ( elem.nodeType ) {
+				ret.push( elem );
+			} else {
+				ret = jQuery.merge( ret, elem );
+			}
+		}
+
+		if ( fragment ) {
+			for ( var i = 0; ret[i]; i++ ) {
+				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+				
+				} else {
+					if ( ret[i].nodeType === 1 ) {
+						ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
+					}
+					fragment.appendChild( ret[i] );
+				}
+			}
+		}
+
+		return ret;
+	},
+	
+	cleanData: function( elems ) {
+		var data, id, cache = jQuery.cache,
+			special = jQuery.event.special,
+			deleteExpando = jQuery.support.deleteExpando;
+		
+		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+			id = elem[ jQuery.expando ];
+			
+			if ( id ) {
+				data = cache[ id ];
+				
+				if ( data.events ) {
+					for ( var type in data.events ) {
+						if ( special[ type ] ) {
+							jQuery.event.remove( elem, type );
+
+						} else {
+							removeEvent( elem, type, data.handle );
+						}
+					}
+				}
+				
+				if ( deleteExpando ) {
+					delete elem[ jQuery.expando ];
+
+				} else if ( elem.removeAttribute ) {
+					elem.removeAttribute( jQuery.expando );
+				}
+				
+				delete cache[ id ];
+			}
+		}
+	}
+});
+// exclude the following css properties to add px
+var rexclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
+	ralpha = /alpha\([^)]*\)/,
+	ropacity = /opacity=([^)]*)/,
+	rfloat = /float/i,
+	rdashAlpha = /-([a-z])/ig,
+	rupper = /([A-Z])/g,
+	rnumpx = /^-?\d+(?:px)?$/i,
+	rnum = /^-?\d/,
+
+	cssShow = { position: "absolute", visibility: "hidden", display:"block" },
+	cssWidth = [ "Left", "Right" ],
+	cssHeight = [ "Top", "Bottom" ],
+
+	// cache check for defaultView.getComputedStyle
+	getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,
+	// normalize float css property
+	styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat",
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn.css = function( name, value ) {
+	return access( this, name, value, true, function( elem, name, value ) {
+		if ( value === undefined ) {
+			return jQuery.curCSS( elem, name );
+		}
+		
+		if ( typeof value === "number" && !rexclude.test(name) ) {
+			value += "px";
+		}
+
+		jQuery.style( elem, name, value );
+	});
+};
+
+jQuery.extend({
+	style: function( elem, name, value ) {
+		// don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return undefined;
+		}
+
+		// ignore negative width and height values #1599
+		if ( (name === "width" || name === "height") && parseFloat(value) < 0 ) {
+			value = undefined;
+		}
+
+		var style = elem.style || elem, set = value !== undefined;
+
+		// IE uses filters for opacity
+		if ( !jQuery.support.opacity && name === "opacity" ) {
+			if ( set ) {
+				// IE has trouble with opacity if it does not have layout
+				// Force it by setting the zoom level
+				style.zoom = 1;
+
+				// Set the alpha filter to set the opacity
+				var opacity = parseInt( value, 10 ) + "" === "NaN" ? "" : "alpha(opacity=" + value * 100 + ")";
+				var filter = style.filter || jQuery.curCSS( elem, "filter" ) || "";
+				style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : opacity;
+			}
+
+			return style.filter && style.filter.indexOf("opacity=") >= 0 ?
+				(parseFloat( ropacity.exec(style.filter)[1] ) / 100) + "":
+				"";
+		}
+
+		// Make sure we're using the right name for getting the float value
+		if ( rfloat.test( name ) ) {
+			name = styleFloat;
+		}
+
+		name = name.replace(rdashAlpha, fcamelCase);
+
+		if ( set ) {
+			style[ name ] = value;
+		}
+
+		return style[ name ];
+	},
+
+	css: function( elem, name, force, extra ) {
+		if ( name === "width" || name === "height" ) {
+			var val, props = cssShow, which = name === "width" ? cssWidth : cssHeight;
+
+			function getWH() {
+				val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+
+				if ( extra === "border" ) {
+					return;
+				}
+
+				jQuery.each( which, function() {
+					if ( !extra ) {
+						val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
+					}
+
+					if ( extra === "margin" ) {
+						val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
+					} else {
+						val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
+					}
+				});
+			}
+
+			if ( elem.offsetWidth !== 0 ) {
+				getWH();
+			} else {
+				jQuery.swap( elem, props, getWH );
+			}
+
+			return Math.max(0, Math.round(val));
+		}
+
+		return jQuery.curCSS( elem, name, force );
+	},
+
+	curCSS: function( elem, name, force ) {
+		var ret, style = elem.style, filter;
+
+		// IE uses filters for opacity
+		if ( !jQuery.support.opacity && name === "opacity" && elem.currentStyle ) {
+			ret = ropacity.test(elem.currentStyle.filter || "") ?
+				(parseFloat(RegExp.$1) / 100) + "" :
+				"";
+
+			return ret === "" ?
+				"1" :
+				ret;
+		}
+
+		// Make sure we're using the right name for getting the float value
+		if ( rfloat.test( name ) ) {
+			name = styleFloat;
+		}
+
+		if ( !force && style && style[ name ] ) {
+			ret = style[ name ];
+
+		} else if ( getComputedStyle ) {
+
+			// Only "float" is needed here
+			if ( rfloat.test( name ) ) {
+				name = "float";
+			}
+
+			name = name.replace( rupper, "-$1" ).toLowerCase();
+
+			var defaultView = elem.ownerDocument.defaultView;
+
+			if ( !defaultView ) {
+				return null;
+			}
+
+			var computedStyle = defaultView.getComputedStyle( elem, null );
+
+			if ( computedStyle ) {
+				ret = computedStyle.getPropertyValue( name );
+			}
+
+			// We should always get a number back from opacity
+			if ( name === "opacity" && ret === "" ) {
+				ret = "1";
+			}
+
+		} else if ( elem.currentStyle ) {
+			var camelCase = name.replace(rdashAlpha, fcamelCase);
+
+			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
+
+			// From the awesome hack by Dean Edwards
+			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+			// If we're not dealing with a regular pixel number
+			// but a number that has a weird ending, we need to convert it to pixels
+			if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+				// Remember the original values
+				var left = style.left, rsLeft = elem.runtimeStyle.left;
+
+				// Put in the new values to get a computed value out
+				elem.runtimeStyle.left = elem.currentStyle.left;
+				style.left = camelCase === "fontSize" ? "1em" : (ret || 0);
+				ret = style.pixelLeft + "px";
+
+				// Revert the changed values
+				style.left = left;
+				elem.runtimeStyle.left = rsLeft;
+			}
+		}
+
+		return ret;
+	},
+
+	// A method for quickly swapping in/out CSS properties to get correct calculations
+	swap: function( elem, options, callback ) {
+		var old = {};
+
+		// Remember the old values, and insert the new ones
+		for ( var name in options ) {
+			old[ name ] = elem.style[ name ];
+			elem.style[ name ] = options[ name ];
+		}
+
+		callback.call( elem );
+
+		// Revert the old values
+		for ( var name in options ) {
+			elem.style[ name ] = old[ name ];
+		}
+	}
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.hidden = function( elem ) {
+		var width = elem.offsetWidth, height = elem.offsetHeight,
+			skip = elem.nodeName.toLowerCase() === "tr";
+
+		return width === 0 && height === 0 && !skip ?
+			true :
+			width > 0 && height > 0 && !skip ?
+				false :
+				jQuery.curCSS(elem, "display") === "none";
+	};
+
+	jQuery.expr.filters.visible = function( elem ) {
+		return !jQuery.expr.filters.hidden( elem );
+	};
+}
+var jsc = now(),
+	rscript = /<script(.|\s)*?\/script>/gi,
+	rselectTextarea = /select|textarea/i,
+	rinput = /color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,
+	jsre = /=\?(&|$)/,
+	rquery = /\?/,
+	rts = /(\?|&)_=.*?(&|$)/,
+	rurl = /^(\w+:)?\/\/([^\/?#]+)/,
+	r20 = /%20/g,
+
+	// Keep a copy of the old load method
+	_load = jQuery.fn.load;
+
+jQuery.fn.extend({
+	load: function( url, params, callback ) {
+		if ( typeof url !== "string" ) {
+			return _load.call( this, url );
+
+		// Don't do a request if no elements are being requested
+		} else if ( !this.length ) {
+			return this;
+		}
+
+		var off = url.indexOf(" ");
+		if ( off >= 0 ) {
+			var selector = url.slice(off, url.length);
+			url = url.slice(0, off);
+		}
+
+		// Default to a GET request
+		var type = "GET";
+
+		// If the second parameter was provided
+		if ( params ) {
+			// If it's a function
+			if ( jQuery.isFunction( params ) ) {
+				// We assume that it's the callback
+				callback = params;
+				params = null;
+
+			// Otherwise, build a param string
+			} else if ( typeof params === "object" ) {
+				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+				type = "POST";
+			}
+		}
+
+		var self = this;
+
+		// Request the remote document
+		jQuery.ajax({
+			url: url,
+			type: type,
+			dataType: "html",
+			data: params,
+			complete: function( res, status ) {
+				// If successful, inject the HTML into all the matched elements
+				if ( status === "success" || status === "notmodified" ) {
+					// See if a selector was specified
+					self.html( selector ?
+						// Create a dummy div to hold the results
+						jQuery("<div />")
+							// inject the contents of the document in, removing the scripts
+							// to avoid any 'Permission Denied' errors in IE
+							.append(res.responseText.replace(rscript, ""))
+
+							// Locate the specified elements
+							.find(selector) :
+
+						// If not, just inject the full result
+						res.responseText );
+				}
+
+				if ( callback ) {
+					self.each( callback, [res.responseText, status, res] );
+				}
+			}
+		});
+
+		return this;
+	},
+
+	serialize: function() {
+		return jQuery.param(this.serializeArray());
+	},
+	serializeArray: function() {
+		return this.map(function() {
+			return this.elements ? jQuery.makeArray(this.elements) : this;
+		})
+		.filter(function() {
+			return this.name && !this.disabled &&
+				(this.checked || rselectTextarea.test(this.nodeName) ||
+					rinput.test(this.type));
+		})
+		.map(function( i, elem ) {
+			var val = jQuery(this).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray(val) ?
+					jQuery.map( val, function( val, i ) {
+						return { name: elem.name, value: val };
+					}) :
+					{ name: elem.name, value: val };
+		}).get();
+	}
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {
+	jQuery.fn[o] = function( f ) {
+		return this.bind(o, f);
+	};
+});
+
+jQuery.extend({
+
+	get: function( url, data, callback, type ) {
+		// shift arguments if data argument was omited
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = null;
+		}
+
+		return jQuery.ajax({
+			type: "GET",
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get(url, null, callback, "script");
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get(url, data, callback, "json");
+	},
+
+	post: function( url, data, callback, type ) {
+		// shift arguments if data argument was omited
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = {};
+		}
+
+		return jQuery.ajax({
+			type: "POST",
+			url: url,
+			data: data,
+			success: callback,
+			dataType: type
+		});
+	},
+
+	ajaxSetup: function( settings ) {
+		jQuery.extend( jQuery.ajaxSettings, settings );
+	},
+
+	ajaxSettings: {
+		url: location.href,
+		global: true,
+		type: "GET",
+		contentType: "application/x-www-form-urlencoded",
+		processData: true,
+		async: true,
+		/*
+		timeout: 0,
+		data: null,
+		username: null,
+		password: null,
+		traditional: false,
+		*/
+		// Create the request object; Microsoft failed to properly
+		// implement the XMLHttpRequest in IE7 (can't request local files),
+		// so we use the ActiveXObject when it is available
+		// This function can be overriden by calling jQuery.ajaxSetup
+		xhr: window.XMLHttpRequest && (window.location.protocol !== "file:" || !window.ActiveXObject) ?
+			function() {
+				return new window.XMLHttpRequest();
+			} :
+			function() {
+				try {
+					return new window.ActiveXObject("Microsoft.XMLHTTP");
+				} catch(e) {}
+			},
+		accepts: {
+			xml: "application/xml, text/xml",
+			html: "text/html",
+			script: "text/javascript, application/javascript",
+			json: "application/json, text/javascript",
+			text: "text/plain",
+			_default: "*/*"
+		}
+	},
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajax: function( origSettings ) {
+		var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);
+		
+		var jsonp, status, data,
+			callbackContext = origSettings && origSettings.context || s,
+			type = s.type.toUpperCase();
+
+		// convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Handle JSONP Parameter Callbacks
+		if ( s.dataType === "jsonp" ) {
+			if ( type === "GET" ) {
+				if ( !jsre.test( s.url ) ) {
+					s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
+				}
+			} else if ( !s.data || !jsre.test(s.data) ) {
+				s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
+			}
+			s.dataType = "json";
+		}
+
+		// Build temporary JSONP function
+		if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
+			jsonp = s.jsonpCallback || ("jsonp" + jsc++);
+
+			// Replace the =? sequence both in the query string and the data
+			if ( s.data ) {
+				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
+			}
+
+			s.url = s.url.replace(jsre, "=" + jsonp + "$1");
+
+			// We need to make sure
+			// that a JSONP style response is executed properly
+			s.dataType = "script";
+
+			// Handle JSONP-style loading
+			window[ jsonp ] = window[ jsonp ] || function( tmp ) {
+				data = tmp;
+				success();
+				complete();
+				// Garbage collect
+				window[ jsonp ] = undefined;
+
+				try {
+					delete window[ jsonp ];
+				} catch(e) {}
+
+				if ( head ) {
+					head.removeChild( script );
+				}
+			};
+		}
+
+		if ( s.dataType === "script" && s.cache === null ) {
+			s.cache = false;
+		}
+
+		if ( s.cache === false && type === "GET" ) {
+			var ts = now();
+
+			// try replacing _= if it is there
+			var ret = s.url.replace(rts, "$1_=" + ts + "$2");
+
+			// if nothing was replaced, add timestamp to the end
+			s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
+		}
+
+		// If data is available, append data to url for get requests
+		if ( s.data && type === "GET" ) {
+			s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
+		}
+
+		// Watch for a new set of requests
+		if ( s.global && ! jQuery.active++ ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Matches an absolute URL, and saves the domain
+		var parts = rurl.exec( s.url ),
+			remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
+
+		// If we're requesting a remote document
+		// and trying to load JSON or Script with a GET
+		if ( s.dataType === "script" && type === "GET" && remote ) {
+			var head = document.getElementsByTagName("head")[0] || document.documentElement;
+			var script = document.createElement("script");
+			script.src = s.url;
+			if ( s.scriptCharset ) {
+				script.charset = s.scriptCharset;
+			}
+
+			// Handle Script loading
+			if ( !jsonp ) {
+				var done = false;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function() {
+					if ( !done && (!this.readyState ||
+							this.readyState === "loaded" || this.readyState === "complete") ) {
+						done = true;
+						success();
+						complete();
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+						if ( head && script.parentNode ) {
+							head.removeChild( script );
+						}
+					}
+				};
+			}
+
+			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
+			// This arises when a base node is used (#2709 and #4378).
+			head.insertBefore( script, head.firstChild );
+
+			// We handle everything using the script element injection
+			return undefined;
+		}
+
+		var requestDone = false;
+
+		// Create the request object
+		var xhr = s.xhr();
+
+		if ( !xhr ) {
+			return;
+		}
+
+		// Open the socket
+		// Passing null username, generates a login popup on Opera (#2865)
+		if ( s.username ) {
+			xhr.open(type, s.url, s.async, s.username, s.password);
+		} else {
+			xhr.open(type, s.url, s.async);
+		}
+
+		// Need an extra try/catch for cross domain requests in Firefox 3
+		try {
+			// Set the correct header, if data is being sent
+			if ( s.data || origSettings && origSettings.contentType ) {
+				xhr.setRequestHeader("Content-Type", s.contentType);
+			}
+
+			// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+			if ( s.ifModified ) {
+				if ( jQuery.lastModified[s.url] ) {
+					xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
+				}
+
+				if ( jQuery.etag[s.url] ) {
+					xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
+				}
+			}
+
+			// Set header so the called script knows that it's an XMLHttpRequest
+			// Only send the header if it's not a remote XHR
+			if ( !remote ) {
+				xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+			}
+
+			// Set the Accepts header for the server, depending on the dataType
+			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
+				s.accepts[ s.dataType ] + ", */*" :
+				s.accepts._default );
+		} catch(e) {}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && s.beforeSend.call(callbackContext, xhr, s) === false ) {
+			// Handle the global AJAX counter
+			if ( s.global && ! --jQuery.active ) {
+				jQuery.event.trigger( "ajaxStop" );
+			}
+
+			// close opended socket
+			xhr.abort();
+			return false;
+		}
+
+		if ( s.global ) {
+			trigger("ajaxSend", [xhr, s]);
+		}
+
+		// Wait for a response to come back
+		var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
+			// The request was aborted
+			if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
+				// Opera doesn't call onreadystatechange before this point
+				// so we simulate the call
+				if ( !requestDone ) {
+					complete();
+				}
+
+				requestDone = true;
+				if ( xhr ) {
+					xhr.onreadystatechange = jQuery.noop;
+				}
+
+			// The transfer is complete and the data is available, or the request timed out
+			} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
+				requestDone = true;
+				xhr.onreadystatechange = jQuery.noop;
+
+				status = isTimeout === "timeout" ?
+					"timeout" :
+					!jQuery.httpSuccess( xhr ) ?
+						"error" :
+						s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
+							"notmodified" :
+							"success";
+
+				var errMsg;
+
+				if ( status === "success" ) {
+					// Watch for, and catch, XML document parse errors
+					try {
+						// process the data (runs the xml through httpData regardless of callback)
+						data = jQuery.httpData( xhr, s.dataType, s );
+					} catch(err) {
+						status = "parsererror";
+						errMsg = err;
+					}
+				}
+
+				// Make sure that the request was successful or notmodified
+				if ( status === "success" || status === "notmodified" ) {
+					// JSONP handles its own success callback
+					if ( !jsonp ) {
+						success();
+					}
+				} else {
+					jQuery.handleError(s, xhr, status, errMsg);
+				}
+
+				// Fire the complete handlers
+				complete();
+
+				if ( isTimeout === "timeout" ) {
+					xhr.abort();
+				}
+
+				// Stop memory leaks
+				if ( s.async ) {
+					xhr = null;
+				}
+			}
+		};
+
+		// Override the abort handler, if we can (IE doesn't allow it, but that's OK)
+		// Opera doesn't fire onreadystatechange at all on abort
+		try {
+			var oldAbort = xhr.abort;
+			xhr.abort = function() {
+				if ( xhr ) {
+					oldAbort.call( xhr );
+				}
+
+				onreadystatechange( "abort" );
+			};
+		} catch(e) { }
+
+		// Timeout checker
+		if ( s.async && s.timeout > 0 ) {
+			setTimeout(function() {
+				// Check to see if the request is still happening
+				if ( xhr && !requestDone ) {
+					onreadystatechange( "timeout" );
+				}
+			}, s.timeout);
+		}
+
+		// Send the data
+		try {
+			xhr.send( type === "POST" || type === "PUT" || type === "DELETE" ? s.data : null );
+		} catch(e) {
+			jQuery.handleError(s, xhr, null, e);
+			// Fire the complete handlers
+			complete();
+		}
+
+		// firefox 1.5 doesn't fire statechange for sync requests
+		if ( !s.async ) {
+			onreadystatechange();
+		}
+
+		function success() {
+			// If a local callback was specified, fire it and pass it the data
+			if ( s.success ) {
+				s.success.call( callbackContext, data, status, xhr );
+			}
+
+			// Fire the global callback
+			if ( s.global ) {
+				trigger( "ajaxSuccess", [xhr, s] );
+			}
+		}
+
+		function complete() {
+			// Process result
+			if ( s.complete ) {
+				s.complete.call( callbackContext, xhr, status);
+			}
+
+			// The request was completed
+			if ( s.global ) {
+				trigger( "ajaxComplete", [xhr, s] );
+			}
+
+			// Handle the global AJAX counter
+			if ( s.global && ! --jQuery.active ) {
+				jQuery.event.trigger( "ajaxStop" );
+			}
+		}
+		
+		function trigger(type, args) {
+			(s.context ? jQuery(s.context) : jQuery.event).trigger(type, args);
+		}
+
+		// return XMLHttpRequest to allow aborting the request etc.
+		return xhr;
+	},
+
+	handleError: function( s, xhr, status, e ) {
+		// If a local callback was specified, fire it
+		if ( s.error ) {
+			s.error.call( s.context || s, xhr, status, e );
+		}
+
+		// Fire the global callback
+		if ( s.global ) {
+			(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
+		}
+	},
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Determines if an XMLHttpRequest was successful or not
+	httpSuccess: function( xhr ) {
+		try {
+			// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
+			return !xhr.status && location.protocol === "file:" ||
+				// Opera returns 0 when status is 304
+				( xhr.status >= 200 && xhr.status < 300 ) ||
+				xhr.status === 304 || xhr.status === 1223 || xhr.status === 0;
+		} catch(e) {}
+
+		return false;
+	},
+
+	// Determines if an XMLHttpRequest returns NotModified
+	httpNotModified: function( xhr, url ) {
+		var lastModified = xhr.getResponseHeader("Last-Modified"),
+			etag = xhr.getResponseHeader("Etag");
+
+		if ( lastModified ) {
+			jQuery.lastModified[url] = lastModified;
+		}
+
+		if ( etag ) {
+			jQuery.etag[url] = etag;
+		}
+
+		// Opera returns 0 when status is 304
+		return xhr.status === 304 || xhr.status === 0;
+	},
+
+	httpData: function( xhr, type, s ) {
+		var ct = xhr.getResponseHeader("content-type") || "",
+			xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
+			data = xml ? xhr.responseXML : xhr.responseText;
+
+		if ( xml && data.documentElement.nodeName === "parsererror" ) {
+			jQuery.error( "parsererror" );
+		}
+
+		// Allow a pre-filtering function to sanitize the response
+		// s is checked to keep backwards compatibility
+		if ( s && s.dataFilter ) {
+			data = s.dataFilter( data, type );
+		}
+
+		// The filter can actually parse the response
+		if ( typeof data === "string" ) {
+			// Get the JavaScript object, if JSON is used.
+			if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
+				data = jQuery.parseJSON( data );
+
+			// If the type is "script", eval it in global context
+			} else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
+				jQuery.globalEval( data );
+			}
+		}
+
+		return data;
+	},
+
+	// Serialize an array of form elements or a set of
+	// key/values into a query string
+	param: function( a, traditional ) {
+		var s = [];
+		
+		// Set traditional to true for jQuery <= 1.3.2 behavior.
+		if ( traditional === undefined ) {
+			traditional = jQuery.ajaxSettings.traditional;
+		}
+		
+		// If an array was passed in, assume that it is an array of form elements.
+		if ( jQuery.isArray(a) || a.jquery ) {
+			// Serialize the form elements
+			jQuery.each( a, function() {
+				add( this.name, this.value );
+			});
+			
+		} else {
+			// If traditional, encode the "old" way (the way 1.3.2 or older
+			// did it), otherwise encode params recursively.
+			for ( var prefix in a ) {
+				buildParams( prefix, a[prefix] );
+			}
+		}
+
+		// Return the resulting serialization
+		return s.join("&").replace(r20, "+");
+
+		function buildParams( prefix, obj ) {
+			if ( jQuery.isArray(obj) ) {
+				// Serialize array item.
+				jQuery.each( obj, function( i, v ) {
+					if ( traditional || /\[\]$/.test( prefix ) ) {
+						// Treat each array item as a scalar.
+						add( prefix, v );
+					} else {
+						// If array item is non-scalar (array or object), encode its
+						// numeric index to resolve deserialization ambiguity issues.
+						// Note that rack (as of 1.0.0) can't currently deserialize
+						// nested arrays properly, and attempting to do so may cause
+						// a server error. Possible fixes are to modify rack's
+						// deserialization algorithm or to provide an option or flag
+						// to force array serialization to be shallow.
+						buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v );
+					}
+				});
+					
+			} else if ( !traditional && obj != null && typeof obj === "object" ) {
+				// Serialize object item.
+				jQuery.each( obj, function( k, v ) {
+					buildParams( prefix + "[" + k + "]", v );
+				});
+					
+			} else {
+				// Serialize scalar item.
+				add( prefix, obj );
+			}
+		}
+
+		function add( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction(value) ? value() : value;
+			s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
+		}
+	}
+});
+var elemdisplay = {},
+	rfxtypes = /toggle|show|hide/,
+	rfxnum = /^([+-]=)?([\d+-.]+)(.*)$/,
+	timerId,
+	fxAttrs = [
+		// height animations
+		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+		// width animations
+		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+		// opacity animations
+		[ "opacity" ]
+	];
+
+jQuery.fn.extend({
+	show: function( speed, callback ) {
+		if ( speed || speed === 0) {
+			return this.animate( genFx("show", 3), speed, callback);
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var old = jQuery.data(this[i], "olddisplay");
+
+				this[i].style.display = old || "";
+
+				if ( jQuery.css(this[i], "display") === "none" ) {
+					var nodeName = this[i].nodeName, display;
+
+					if ( elemdisplay[ nodeName ] ) {
+						display = elemdisplay[ nodeName ];
+
+					} else {
+						var elem = jQuery("<" + nodeName + " />").appendTo("body");
+
+						display = elem.css("display");
+
+						if ( display === "none" ) {
+							display = "block";
+						}
+
+						elem.remove();
+
+						elemdisplay[ nodeName ] = display;
+					}
+
+					jQuery.data(this[i], "olddisplay", display);
+				}
+			}
+
+			// Set the display of the elements in a second loop
+			// to avoid the constant reflow
+			for ( var j = 0, k = this.length; j < k; j++ ) {
+				this[j].style.display = jQuery.data(this[j], "olddisplay") || "";
+			}
+
+			return this;
+		}
+	},
+
+	hide: function( speed, callback ) {
+		if ( speed || speed === 0 ) {
+			return this.animate( genFx("hide", 3), speed, callback);
+
+		} else {
+			for ( var i = 0, l = this.length; i < l; i++ ) {
+				var old = jQuery.data(this[i], "olddisplay");
+				if ( !old && old !== "none" ) {
+					jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
+				}
+			}
+
+			// Set the display of the elements in a second loop
+			// to avoid the constant reflow
+			for ( var j = 0, k = this.length; j < k; j++ ) {
+				this[j].style.display = "none";
+			}
+
+			return this;
+		}
+	},
+
+	// Save the old toggle function
+	_toggle: jQuery.fn.toggle,
+
+	toggle: function( fn, fn2 ) {
+		var bool = typeof fn === "boolean";
+
+		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+			this._toggle.apply( this, arguments );
+
+		} else if ( fn == null || bool ) {
+			this.each(function() {
+				var state = bool ? fn : jQuery(this).is(":hidden");
+				jQuery(this)[ state ? "show" : "hide" ]();
+			});
+
+		} else {
+			this.animate(genFx("toggle", 3), fn, fn2);
+		}
+
+		return this;
+	},
+
+	fadeTo: function( speed, to, callback ) {
+		return this.filter(":hidden").css("opacity", 0).show().end()
+					.animate({opacity: to}, speed, callback);
+	},
+
+	animate: function( prop, speed, easing, callback ) {
+		var optall = jQuery.speed(speed, easing, callback);
+
+		if ( jQuery.isEmptyObject( prop ) ) {
+			return this.each( optall.complete );
+		}
+
+		return this[ optall.queue === false ? "each" : "queue" ](function() {
+			var opt = jQuery.extend({}, optall), p,
+				hidden = this.nodeType === 1 && jQuery(this).is(":hidden"),
+				self = this;
+
+			for ( p in prop ) {
+				var name = p.replace(rdashAlpha, fcamelCase);
+
+				if ( p !== name ) {
+					prop[ name ] = prop[ p ];
+					delete prop[ p ];
+					p = name;
+				}
+
+				if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
+					return opt.complete.call(this);
+				}
+
+				if ( ( p === "height" || p === "width" ) && this.style ) {
+					// Store display property
+					opt.display = jQuery.css(this, "display");
+
+					// Make sure that nothing sneaks out
+					opt.overflow = this.style.overflow;
+				}
+
+				if ( jQuery.isArray( prop[p] ) ) {
+					// Create (if needed) and add to specialEasing
+					(opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
+					prop[p] = prop[p][0];
+				}
+			}
+
+			if ( opt.overflow != null ) {
+				this.style.overflow = "hidden";
+			}
+
+			opt.curAnim = jQuery.extend({}, prop);
+
+			jQuery.each( prop, function( name, val ) {
+				var e = new jQuery.fx( self, opt, name );
+
+				if ( rfxtypes.test(val) ) {
+					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
+
+				} else {
+					var parts = rfxnum.exec(val),
+						start = e.cur(true) || 0;
+
+					if ( parts ) {
+						var end = parseFloat( parts[2] ),
+							unit = parts[3] || "px";
+
+						// We need to compute starting value
+						if ( unit !== "px" ) {
+							self.style[ name ] = (end || 1) + unit;
+							start = ((end || 1) / e.cur(true)) * start;
+							self.style[ name ] = start + unit;
+						}
+
+						// If a +=/-= token was provided, we're doing a relative animation
+						if ( parts[1] ) {
+							end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
+						}
+
+						e.custom( start, end, unit );
+
+					} else {
+						e.custom( start, val, "" );
+					}
+				}
+			});
+
+			// For JS strict compliance
+			return true;
+		});
+	},
+
+	stop: function( clearQueue, gotoEnd ) {
+		var timers = jQuery.timers;
+
+		if ( clearQueue ) {
+			this.queue([]);
+		}
+
+		this.each(function() {
+			// go in reverse order so anything added to the queue during the loop is ignored
+			for ( var i = timers.length - 1; i >= 0; i-- ) {
+				if ( timers[i].elem === this ) {
+					if (gotoEnd) {
+						// force the next step to be the last
+						timers[i](true);
+					}
+
+					timers.splice(i, 1);
+				}
+			}
+		});
+
+		// start the next in the queue if the last step wasn't forced
+		if ( !gotoEnd ) {
+			this.dequeue();
+		}
+
+		return this;
+	}
+
+});
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show", 1),
+	slideUp: genFx("hide", 1),
+	slideToggle: genFx("toggle", 1),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, callback ) {
+		return this.animate( props, speed, callback );
+	};
+});
+
+jQuery.extend({
+	speed: function( speed, easing, fn ) {
+		var opt = speed && typeof speed === "object" ? speed : {
+			complete: fn || !fn && easing ||
+				jQuery.isFunction( speed ) && speed,
+			duration: speed,
+			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+		};
+
+		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+			jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;
+
+		// Queueing
+		opt.old = opt.complete;
+		opt.complete = function() {
+			if ( opt.queue !== false ) {
+				jQuery(this).dequeue();
+			}
+			if ( jQuery.isFunction( opt.old ) ) {
+				opt.old.call( this );
+			}
+		};
+
+		return opt;
+	},
+
+	easing: {
+		linear: function( p, n, firstNum, diff ) {
+			return firstNum + diff * p;
+		},
+		swing: function( p, n, firstNum, diff ) {
+			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+		}
+	},
+
+	timers: [],
+
+	fx: function( elem, options, prop ) {
+		this.options = options;
+		this.elem = elem;
+		this.prop = prop;
+
+		if ( !options.orig ) {
+			options.orig = {};
+		}
+	}
+
+});
+
+jQuery.fx.prototype = {
+	// Simple function for setting a style value
+	update: function() {
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+
+		// Set display property to block for height/width animations
+		if ( ( this.prop === "height" || this.prop === "width" ) && this.elem.style ) {
+			this.elem.style.display = "block";
+		}
+	},
+
+	// Get the current size
+	cur: function( force ) {
+		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+			return this.elem[ this.prop ];
+		}
+
+		var r = parseFloat(jQuery.css(this.elem, this.prop, force));
+		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
+	},
+
+	// Start an animation from one number to another
+	custom: function( from, to, unit ) {
+		this.startTime = now();
+		this.start = from;
+		this.end = to;
+		this.unit = unit || this.unit || "px";
+		this.now = this.start;
+		this.pos = this.state = 0;
+
+		var self = this;
+		function t( gotoEnd ) {
+			return self.step(gotoEnd);
+		}
+
+		t.elem = this.elem;
+
+		if ( t() && jQuery.timers.push(t) && !timerId ) {
+			timerId = setInterval(jQuery.fx.tick, 13);
+		}
+	},
+
+	// Simple 'show' function
+	show: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+		this.options.show = true;
+
+		// Begin the animation
+		// Make sure that we start at a small width/height to avoid any
+		// flash of content
+		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
+
+		// Start by showing the element
+		jQuery( this.elem ).show();
+	},
+
+	// Simple 'hide' function
+	hide: function() {
+		// Remember where we started, so that we can go back to it later
+		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+		this.options.hide = true;
+
+		// Begin the animation
+		this.custom(this.cur(), 0);
+	},
+
+	// Each step of an animation
+	step: function( gotoEnd ) {
+		var t = now(), done = true;
+
+		if ( gotoEnd || t >= this.options.duration + this.startTime ) {
+			this.now = this.end;
+			this.pos = this.state = 1;
+			this.update();
+
+			this.options.curAnim[ this.prop ] = true;
+
+			for ( var i in this.options.curAnim ) {
+				if ( this.options.curAnim[i] !== true ) {
+					done = false;
+				}
+			}
+
+			if ( done ) {
+				if ( this.options.display != null ) {
+					// Reset the overflow
+					this.elem.style.overflow = this.options.overflow;
+
+					// Reset the display
+					var old = jQuery.data(this.elem, "olddisplay");
+					this.elem.style.display = old ? old : this.options.display;
+
+					if ( jQuery.css(this.elem, "display") === "none" ) {
+						this.elem.style.display = "block";
+					}
+				}
+
+				// Hide the element if the "hide" operation was done
+				if ( this.options.hide ) {
+					jQuery(this.elem).hide();
+				}
+
+				// Reset the properties, if the item has been hidden or shown
+				if ( this.options.hide || this.options.show ) {
+					for ( var p in this.options.curAnim ) {
+						jQuery.style(this.elem, p, this.options.orig[p]);
+					}
+				}
+
+				// Execute the complete function
+				this.options.complete.call( this.elem );
+			}
+
+			return false;
+
+		} else {
+			var n = t - this.startTime;
+			this.state = n / this.options.duration;
+
+			// Perform the easing function, defaults to swing
+			var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
+			var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
+			this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
+			this.now = this.start + ((this.end - this.start) * this.pos);
+
+			// Perform the next step of the animation
+			this.update();
+		}
+
+		return true;
+	}
+};
+
+jQuery.extend( jQuery.fx, {
+	tick: function() {
+		var timers = jQuery.timers;
+
+		for ( var i = 0; i < timers.length; i++ ) {
+			if ( !timers[i]() ) {
+				timers.splice(i--, 1);
+			}
+		}
+
+		if ( !timers.length ) {
+			jQuery.fx.stop();
+		}
+	},
+		
+	stop: function() {
+		clearInterval( timerId );
+		timerId = null;
+	},
+	
+	speeds: {
+		slow: 600,
+ 		fast: 200,
+ 		// Default speed
+ 		_default: 400
+	},
+
+	step: {
+		opacity: function( fx ) {
+			jQuery.style(fx.elem, "opacity", fx.now);
+		},
+
+		_default: function( fx ) {
+			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+			} else {
+				fx.elem[ fx.prop ] = fx.now;
+			}
+		}
+	}
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+	jQuery.expr.filters.animated = function( elem ) {
+		return jQuery.grep(jQuery.timers, function( fn ) {
+			return elem === fn.elem;
+		}).length;
+	};
+}
+
+function genFx( type, num ) {
+	var obj = {};
+
+	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+		obj[ this ] = type;
+	});
+
+	return obj;
+}
+if ( "getBoundingClientRect" in document.documentElement ) {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0];
+
+		if ( options ) { 
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement,
+			clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
+			top  = box.top  + (self.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop,
+			left = box.left + (self.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
+
+		return { top: top, left: left };
+	};
+
+} else {
+	jQuery.fn.offset = function( options ) {
+		var elem = this[0];
+
+		if ( options ) { 
+			return this.each(function( i ) {
+				jQuery.offset.setOffset( this, options, i );
+			});
+		}
+
+		if ( !elem || !elem.ownerDocument ) {
+			return null;
+		}
+
+		if ( elem === elem.ownerDocument.body ) {
+			return jQuery.offset.bodyOffset( elem );
+		}
+
+		jQuery.offset.initialize();
+
+		var offsetParent = elem.offsetParent, prevOffsetParent = elem,
+			doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
+			body = doc.body, defaultView = doc.defaultView,
+			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+			top = elem.offsetTop, left = elem.offsetLeft;
+
+		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+				break;
+			}
+
+			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+			top  -= elem.scrollTop;
+			left -= elem.scrollLeft;
+
+			if ( elem === offsetParent ) {
+				top  += elem.offsetTop;
+				left += elem.offsetLeft;
+
+				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.nodeName)) ) {
+					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+				}
+
+				prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
+			}
+
+			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
+				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+			}
+
+			prevComputedStyle = computedStyle;
+		}
+
+		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+			top  += body.offsetTop;
+			left += body.offsetLeft;
+		}
+
+		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+			top  += Math.max( docElem.scrollTop, body.scrollTop );
+			left += Math.max( docElem.scrollLeft, body.scrollLeft );
+		}
+
+		return { top: top, left: left };
+	};
+}
+
+jQuery.offset = {
+	initialize: function() {
+		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.curCSS(body, "marginTop", true) ) || 0,
+			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+
+		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
+
+		container.innerHTML = html;
+		body.insertBefore( container, body.firstChild );
+		innerDiv = container.firstChild;
+		checkDiv = innerDiv.firstChild;
+		td = innerDiv.nextSibling.firstChild.firstChild;
+
+		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
+		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
+
+		checkDiv.style.position = "fixed", checkDiv.style.top = "20px";
+		// safari subtracts parent border width here which is 5px
+		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+		checkDiv.style.position = checkDiv.style.top = "";
+
+		innerDiv.style.overflow = "hidden", innerDiv.style.position = "relative";
+		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
+
+		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+
+		body.removeChild( container );
+		body = container = innerDiv = checkDiv = table = td = null;
+		jQuery.offset.initialize = jQuery.noop;
+	},
+
+	bodyOffset: function( body ) {
+		var top = body.offsetTop, left = body.offsetLeft;
+
+		jQuery.offset.initialize();
+
+		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+			top  += parseFloat( jQuery.curCSS(body, "marginTop",  true) ) || 0;
+			left += parseFloat( jQuery.curCSS(body, "marginLeft", true) ) || 0;
+		}
+
+		return { top: top, left: left };
+	},
+	
+	setOffset: function( elem, options, i ) {
+		// set position first, in-case top/left are set even on static elem
+		if ( /static/.test( jQuery.curCSS( elem, "position" ) ) ) {
+			elem.style.position = "relative";
+		}
+		var curElem   = jQuery( elem ),
+			curOffset = curElem.offset(),
+			curTop    = parseInt( jQuery.curCSS( elem, "top",  true ), 10 ) || 0,
+			curLeft   = parseInt( jQuery.curCSS( elem, "left", true ), 10 ) || 0;
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		var props = {
+			top:  (options.top  - curOffset.top)  + curTop,
+			left: (options.left - curOffset.left) + curLeft
+		};
+		
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+
+jQuery.fn.extend({
+	position: function() {
+		if ( !this[0] ) {
+			return null;
+		}
+
+		var elem = this[0],
+
+		// Get *real* offsetParent
+		offsetParent = this.offsetParent(),
+
+		// Get correct offsets
+		offset       = this.offset(),
+		parentOffset = /^body|html$/i.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+		// Subtract element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		offset.top  -= parseFloat( jQuery.curCSS(elem, "marginTop",  true) ) || 0;
+		offset.left -= parseFloat( jQuery.curCSS(elem, "marginLeft", true) ) || 0;
+
+		// Add offsetParent borders
+		parentOffset.top  += parseFloat( jQuery.curCSS(offsetParent[0], "borderTopWidth",  true) ) || 0;
+		parentOffset.left += parseFloat( jQuery.curCSS(offsetParent[0], "borderLeftWidth", true) ) || 0;
+
+		// Subtract the two offsets
+		return {
+			top:  offset.top  - parentOffset.top,
+			left: offset.left - parentOffset.left
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || document.body;
+			while ( offsetParent && (!/^body|html$/i.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent;
+		});
+	}
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+	var method = "scroll" + name;
+
+	jQuery.fn[ method ] = function(val) {
+		var elem = this[0], win;
+		
+		if ( !elem ) {
+			return null;
+		}
+
+		if ( val !== undefined ) {
+			// Set the scroll offset
+			return this.each(function() {
+				win = getWindow( this );
+
+				if ( win ) {
+					win.scrollTo(
+						!i ? val : jQuery(win).scrollLeft(),
+						 i ? val : jQuery(win).scrollTop()
+					);
+
+				} else {
+					this[ method ] = val;
+				}
+			});
+		} else {
+			win = getWindow( elem );
+
+			// Return the scroll offset
+			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+				jQuery.support.boxModel && win.document.documentElement[ method ] ||
+					win.document.body[ method ] :
+				elem[ method ];
+		}
+	};
+});
+
+function getWindow( elem ) {
+	return ("scrollTo" in elem && elem.document) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+// Create innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+	var type = name.toLowerCase();
+
+	// innerHeight and innerWidth
+	jQuery.fn["inner" + name] = function() {
+		return this[0] ?
+			jQuery.css( this[0], type, false, "padding" ) :
+			null;
+	};
+
+	// outerHeight and outerWidth
+	jQuery.fn["outer" + name] = function( margin ) {
+		return this[0] ?
+			jQuery.css( this[0], type, false, margin ? "margin" : "border" ) :
+			null;
+	};
+
+	jQuery.fn[ type ] = function( size ) {
+		// Get window width or height
+		var elem = this[0];
+		if ( !elem ) {
+			return size == null ? null : this;
+		}
+		
+		if ( jQuery.isFunction( size ) ) {
+			return this.each(function( i ) {
+				var self = jQuery( this );
+				self[ type ]( size.call( this, i, self[ type ]() ) );
+			});
+		}
+
+		return ("scrollTo" in elem && elem.document) ? // does it walk and quack like a window?
+			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+			elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
+			elem.document.body[ "client" + name ] :
+
+			// Get document width or height
+			(elem.nodeType === 9) ? // is it a document
+				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+				Math.max(
+					elem.documentElement["client" + name],
+					elem.body["scroll" + name], elem.documentElement["scroll" + name],
+					elem.body["offset" + name], elem.documentElement["offset" + name]
+				) :
+
+				// Get or set width or height on the element
+				size === undefined ?
+					// Get width or height on the element
+					jQuery.css( elem, type ) :
+
+					// Set the width or height on the element (default to pixels if value is unitless)
+					this.css( type, typeof size === "string" ? size : size + "px" );
+	};
+
+});
+// Expose jQuery to the global object
+window.jQuery = window.$ = jQuery;
+
+})(window);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/jquery.min.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,154 @@
+/*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
+e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
+j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
+"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
+true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
+c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
+L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
+"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
+d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
+a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
+!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
+true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
+w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
+cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
+i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
+" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
+this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
+e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
+c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
+a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
+function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
+k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
+C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
+null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
+e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
+f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
+if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
+"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
+a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
+isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
+{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
+if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
+e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
+"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
+d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
+!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
+toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
+u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
+function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
+if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
+t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
+g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
+for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
+1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
+relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
+l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
+h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
+CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
+g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
+text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
+setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
+h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
+m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
+"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
+h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
+!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
+h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
+q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
+if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
+(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
+function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
+gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
+c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
+{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
+"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
+d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
+a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
+1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
+a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
+""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
+this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
+u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
+1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
+return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
+""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
+c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
+c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
+function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
+Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
+"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
+a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
+a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
+"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
+serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
+function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
+global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
+e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
+"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
+false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
+false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
+c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
+d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
+g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
+1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
+"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
+if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
+this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
+"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
+animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
+j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
+this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
+"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
+c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
+this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
+this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
+e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
+c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
+function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
+this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
+k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
+f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
+c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
+d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
+f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
+"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
+e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/prepopulate.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,34 @@
+(function($) {
+    $.fn.prepopulate = function(dependencies, maxLength) {
+        /*
+            Depends on urlify.js
+            Populates a selected field with the values of the dependent fields,
+            URLifies and shortens the string. 
+            dependencies - selected jQuery object of dependent fields
+            maxLength - maximum length of the URLify'd string 
+        */
+        return this.each(function() {
+            var field = $(this);
+
+            field.data('_changed', false);
+            field.change(function() {
+                field.data('_changed', true);
+            });
+
+            var populate = function () {
+                // Bail if the fields value has changed
+                if (field.data('_changed') == true) return;
+ 
+                var values = [];
+                dependencies.each(function() {
+                    if ($(this).val().length > 0) {
+                        values.push($(this).val());
+                    }
+                });
+                field.val(URLify(values.join(' '), maxLength));
+            };
+
+            dependencies.keyup(populate).change(populate).focus(populate);
+        });
+    };
+})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/prepopulate.min.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,1 @@
+(function(b){b.fn.prepopulate=function(d,f){return this.each(function(){var a=b(this);a.data("_changed",false);a.change(function(){a.data("_changed",true)});var c=function(){if(a.data("_changed")!=true){var e=[];d.each(function(){b(this).val().length>0&&e.push(b(this).val())});a.val(URLify(e.join(" "),f))}};d.keyup(c).change(c).focus(c)})}})(django.jQuery);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/timeparse.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,94 @@
+var timeParsePatterns = [
+    // 9
+    {   re: /^\d{1,2}$/i,
+        handler: function(bits) {
+            if (bits[0].length == 1) {
+                return '0' + bits[0] + ':00';
+            } else {
+                return bits[0] + ':00';
+            }
+        }
+    },
+    // 13:00
+    {   re: /^\d{2}[:.]\d{2}$/i,
+        handler: function(bits) {
+            return bits[0].replace('.', ':');
+        }
+    },
+    // 9:00
+    {   re: /^\d[:.]\d{2}$/i,
+        handler: function(bits) {
+            return '0' + bits[0].replace('.', ':');
+        }
+    },
+    // 3 am / 3 a.m. / 3am
+    {   re: /^(\d+)\s*([ap])(?:.?m.?)?$/i,
+        handler: function(bits) {
+            var hour = parseInt(bits[1]);
+            if (hour == 12) {
+                hour = 0;
+            }
+            if (bits[2].toLowerCase() == 'p') {
+                if (hour == 12) {
+                    hour = 0;
+                }
+                return (hour + 12) + ':00';
+            } else {
+                if (hour < 10) {
+                    return '0' + hour + ':00';
+                } else {
+                    return hour + ':00';
+                }
+            }
+        }
+    },
+    // 3.30 am / 3:15 a.m. / 3.00am
+    {   re: /^(\d+)[.:](\d{2})\s*([ap]).?m.?$/i,
+        handler: function(bits) {
+            var hour = parseInt(bits[1]);
+            var mins = parseInt(bits[2]);
+            if (mins < 10) {
+                mins = '0' + mins;
+            }
+            if (hour == 12) {
+                hour = 0;
+            }
+            if (bits[3].toLowerCase() == 'p') {
+                if (hour == 12) {
+                    hour = 0;
+                }
+                return (hour + 12) + ':' + mins;
+            } else {
+                if (hour < 10) {
+                    return '0' + hour + ':' + mins;
+                } else {
+                    return hour + ':' + mins;
+                }
+            }
+        }
+    },
+    // noon
+    {   re: /^no/i,
+        handler: function(bits) {
+            return '12:00';
+        }
+    },
+    // midnight
+    {   re: /^mid/i,
+        handler: function(bits) {
+            return '00:00';
+        }
+    }
+];
+
+function parseTimeString(s) {
+    for (var i = 0; i < timeParsePatterns.length; i++) {
+        var re = timeParsePatterns[i].re;
+        var handler = timeParsePatterns[i].handler;
+        var bits = re.exec(s);
+        if (bits) {
+            return handler(bits);
+        }
+    }
+    return s;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/admin/js/urlify.js	Tue May 25 02:43:45 2010 +0200
@@ -0,0 +1,140 @@
+var LATIN_MAP = {
+    'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', 'Ç':
+    'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', 'Î': 'I',
+    'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', 'Õ': 'O', 'Ö':
+    'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', 'Ü': 'U', 'Ű': 'U',
+    'Ý': 'Y', 'Þ': 'TH', 'ß': 'ss', 'à':'a', 'á':'a', 'â': 'a', 'ã': 'a', 'ä':
+    'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e',
+    'ì': 'i', 'í': 'i', 'î': 'i', 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó':
+    'o', 'ô': 'o', 'õ': 'o', 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u',
+    'û': 'u', 'ü': 'u', 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y'
+}
+var LATIN_SYMBOLS_MAP = {
+    '©':'(c)'
+}
+var GREEK_MAP = {
+    'α':'a', 'β':'b', 'γ':'g', 'δ':'d', 'ε':'e', 'ζ':'z', 'η':'h', 'θ':'8',
+    'ι':'i', 'κ':'k', 'λ':'l', 'μ':'m', 'ν':'n', 'ξ':'3', 'ο':'o', 'π':'p',
+    'ρ':'r', 'σ':'s', 'τ':'t', 'υ':'y', 'φ':'f', 'χ':'x', 'ψ':'ps', 'ω':'w',
+    'ά':'a', 'έ':'e', 'ί':'i', 'ό':'o', 'ύ':'y', 'ή':'h', 'ώ':'w', 'ς':'s',
+    'ϊ':'i', 'ΰ':'y', 'ϋ':'y', 'ΐ':'i',
+    'Α':'A', 'Β':'B', 'Γ':'G', 'Δ':'D', 'Ε':'E', 'Ζ':'Z', 'Η':'H', 'Θ':'8',
+    'Ι':'I', 'Κ':'K', 'Λ':'L', 'Μ':'M', 'Ν':'N', 'Ξ':'3', 'Ο':'O', 'Π':'P',
+    'Ρ':'R', 'Σ':'S', 'Τ':'T', 'Υ':'Y', 'Φ':'F', 'Χ':'X', 'Ψ':'PS', 'Ω':'W',
+    'Ά':'A', 'Έ':'E', 'Ί':'I', 'Ό':'O', 'Ύ':'Y', 'Ή':'H', 'Ώ':'W', 'Ϊ':'I',
+    'Ϋ':'Y'
+}
+var TURKISH_MAP = {
+    'ş':'s', 'Ş':'S', 'ı':'i', 'İ':'I', 'ç':'c', 'Ç':'C', 'ü':'u', 'Ü':'U',
+    'ö':'o', 'Ö':'O', 'ğ':'g', 'Ğ':'G'
+}
+var RUSSIAN_MAP = {
+    'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'yo', 'ж':'zh',
+    'з':'z', 'и':'i', 'й':'j', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o',
+    'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ц':'c',
+    'ч':'ch', 'ш':'sh', 'щ':'sh', 'ъ':'', 'ы':'y', 'ь':'', 'э':'e', 'ю':'yu',
+    'я':'ya',
+    'А':'A', 'Б':'B', 'В':'V', 'Г':'G', 'Д':'D', 'Е':'E', 'Ё':'Yo', 'Ж':'Zh',
+    'З':'Z', 'И':'I', 'Й':'J', 'К':'K', 'Л':'L', 'М':'M', 'Н':'N', 'О':'O',
+    'П':'P', 'Р':'R', 'С':'S', 'Т':'T', 'У':'U', 'Ф':'F', 'Х':'H', 'Ц':'C',
+    'Ч':'Ch', 'Ш':'Sh', 'Щ':'Sh', 'Ъ':'', 'Ы':'Y', 'Ь':'', 'Э':'E', 'Ю':'Yu',
+    'Я':'Ya'
+}
+var UKRAINIAN_MAP = {
+    'Є':'Ye', 'І':'I', 'Ї':'Yi', 'Ґ':'G', 'є':'ye', 'і':'i', 'ї':'yi', 'ґ':'g'
+}
+var CZECH_MAP = {
+    'č':'c', 'ď':'d', 'ě':'e', 'ň': 'n', 'ř':'r', 'š':'s', 'ť':'t', 'ů':'u',
+    'ž':'z', 'Č':'C', 'Ď':'D', 'Ě':'E', 'Ň': 'N', 'Ř':'R', 'Š':'S', 'Ť':'T',
+    'Ů':'U', 'Ž':'Z'
+}
+
+var POLISH_MAP = {
+    'ą':'a', 'ć':'c', 'ę':'e', 'ł':'l', 'ń':'n', 'ó':'o', 'ś':'s', 'ź':'z',
+    'ż':'z', 'Ą':'A', 'Ć':'C', 'Ę':'e', 'Ł':'L', 'Ń':'N', 'Ó':'o', 'Ś':'S',
+    'Ź':'Z', 'Ż':'Z'
+}
+
+var LATVIAN_MAP = {
+    'ā':'a', 'č':'c', 'ē':'e', 'ģ':'g', 'ī':'i', 'ķ':'k', 'ļ':'l', 'ņ':'n',
+    'š':'s', 'ū':'u', 'ž':'z', 'Ā':'A', 'Č':'C', 'Ē':'E', 'Ģ':'G', 'Ī':'i',
+    'Ķ':'k', 'Ļ':'L', 'Ņ':'N', 'Š':'S', 'Ū':'u', 'Ž':'Z'
+}
+
+var ALL_DOWNCODE_MAPS=new Array()
+ALL_DOWNCODE_MAPS[0]=LATIN_MAP
+ALL_DOWNCODE_MAPS[1]=LATIN_SYMBOLS_MAP
+ALL_DOWNCODE_MAPS[2]=GREEK_MAP
+ALL_DOWNCODE_MAPS[3]=TURKISH_MAP
+ALL_DOWNCODE_MAPS[4]=RUSSIAN_MAP
+ALL_DOWNCODE_MAPS[5]=UKRAINIAN_MAP
+ALL_DOWNCODE_MAPS[6]=CZECH_MAP
+ALL_DOWNCODE_MAPS[7]=POLISH_MAP
+ALL_DOWNCODE_MAPS[8]=LATVIAN_MAP
+
+var Downcoder = new Object();
+Downcoder.Initialize = function()
+{
+    if (Downcoder.map) // already made
+        return ;
+    Downcoder.map ={}
+    Downcoder.chars = '' ;
+    for(var i in ALL_DOWNCODE_MAPS)
+    {
+        var lookup = ALL_DOWNCODE_MAPS[i]
+        for (var c in lookup)
+        {
+            Downcoder.map[c] = lookup[c] ;
+            Downcoder.chars += c ;
+        }
+     }
+    Downcoder.regex = new RegExp('[' + Downcoder.chars + ']|[^' + Downcoder.chars + ']+','g') ;
+}
+
+downcode= function( slug )
+{
+    Downcoder.Initialize() ;
+    var downcoded =""
+    var pieces = slug.match(Downcoder.regex);
+    if(pieces)
+    {
+        for (var i = 0 ; i < pieces.length ; i++)
+        {
+            if (pieces[i].length == 1)
+            {
+                var mapped = Downcoder.map[pieces[i]] ;
+                if (mapped != null)
+                {
+                    downcoded+=mapped;
+                    continue ;
+                }
+            }
+            downcoded+=pieces[i];
+        }
+    }
+    else
+    {
+        downcoded = slug;
+    }
+    return downcoded;
+}
+
+
+function URLify(s, num_chars) {
+    // changes, e.g., "Petty theft" to "petty_theft"
+    // remove all these words from the string before urlifying
+    s = downcode(s);
+    removelist = ["a", "an", "as", "at", "before", "but", "by", "for", "from",
+                  "is", "in", "into", "like", "of", "off", "on", "onto", "per",
+                  "since", "than", "the", "this", "that", "to", "up", "via",
+                  "with"];
+    r = new RegExp('\\b(' + removelist.join('|') + ')\\b', 'gi');
+    s = s.replace(r, '');
+    // if downcode doesn't hit, the char will be stripped here
+    s = s.replace(/[^-\w\s]/g, '');  // remove unneeded chars
+    s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
+    s = s.replace(/[-\s]+/g, '-');   // convert spaces to hyphens
+    s = s.toLowerCase();             // convert to lowercase
+    return s.substring(0, num_chars);// trim to first num_chars chars
+}
+
--- a/web/static/css/style.css	Wed May 19 17:43:59 2010 +0200
+++ b/web/static/css/style.css	Tue May 25 02:43:45 2010 +0200
@@ -328,3 +328,12 @@
 #indexing_pending {
 	color: red ;
 	}
+
+#timeline {
+	width : 100%;
+	background-color: #2F74B2 ;
+}
+#timeline_segment {
+	background-color: #B2802F ;
+	position: relative;
+}
\ No newline at end of file